summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builddefs/common_features.mk7
-rw-r--r--data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson339
-rw-r--r--data/mappings/defaults.hjson5
-rw-r--r--data/mappings/info_config.hjson2
-rw-r--r--data/mappings/keyboard_aliases.hjson15
-rw-r--r--data/schemas/keyboard.jsonschema2
-rw-r--r--docs/audio_driver.md31
-rw-r--r--docs/config_options.md2
-rw-r--r--docs/feature_converters.md3
-rw-r--r--docs/feature_dip_switch.md21
-rw-r--r--docs/feature_macros.md6
-rw-r--r--docs/feature_pointing_device.md32
-rw-r--r--docs/feature_rgblight.md56
-rw-r--r--docs/hardware_keyboard_guidelines.md4
-rw-r--r--docs/quantum_painter.md30
-rw-r--r--docs/reference_keymap_extras.md1
-rw-r--r--docs/squeezing_avr.md1
-rw-r--r--drivers/led/apa102.c5
-rw-r--r--drivers/led/apa102.h6
-rw-r--r--drivers/led/issi/is31fl3218-simple.c19
-rw-r--r--drivers/led/issi/is31fl3218-simple.h2
-rw-r--r--drivers/led/issi/is31fl3218.c19
-rw-r--r--drivers/led/issi/is31fl3218.h2
-rw-r--r--drivers/led/issi/is31fl3731-simple.c42
-rw-r--r--drivers/led/issi/is31fl3731-simple.h1
-rw-r--r--drivers/led/issi/is31fl3731.c42
-rw-r--r--drivers/led/issi/is31fl3731.h1
-rw-r--r--drivers/led/issi/is31fl3733-simple.c56
-rw-r--r--drivers/led/issi/is31fl3733-simple.h1
-rw-r--r--drivers/led/issi/is31fl3733.c56
-rw-r--r--drivers/led/issi/is31fl3733.h1
-rw-r--r--drivers/led/issi/is31fl3736-simple.c54
-rw-r--r--drivers/led/issi/is31fl3736-simple.h1
-rw-r--r--drivers/led/issi/is31fl3736.c54
-rw-r--r--drivers/led/issi/is31fl3736.h1
-rw-r--r--drivers/led/issi/is31fl3737-simple.c54
-rw-r--r--drivers/led/issi/is31fl3737-simple.h1
-rw-r--r--drivers/led/issi/is31fl3737.c54
-rw-r--r--drivers/led/issi/is31fl3737.h1
-rw-r--r--drivers/led/issi/is31fl3741-simple.c62
-rw-r--r--drivers/led/issi/is31fl3741-simple.h1
-rw-r--r--drivers/led/issi/is31fl3741.c62
-rw-r--r--drivers/led/issi/is31fl3741.h1
-rw-r--r--drivers/led/issi/is31flcommon.c19
-rw-r--r--drivers/led/snled27351-simple.c62
-rw-r--r--drivers/led/snled27351-simple.h1
-rw-r--r--drivers/led/snled27351.c61
-rw-r--r--drivers/led/snled27351.h1
-rw-r--r--drivers/painter/sh1106/qp_sh1106.c14
-rw-r--r--drivers/painter/sh1106/qp_sh1106_opcodes.h2
-rw-r--r--drivers/sensors/analog_joystick.c68
-rw-r--r--drivers/sensors/cirque_pinnacle.c11
-rw-r--r--drivers/ws2812.h6
-rw-r--r--keyboards/1k/keymaps/default/rgblite.h4
-rw-r--r--keyboards/25keys/zinc/rev1/post_config.h20
-rw-r--r--keyboards/25keys/zinc/reva/post_config.h20
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h3
-rw-r--r--keyboards/40percentclub/nano/keymaps/spooka/rules.mk1
-rw-r--r--keyboards/acheron/themis/87h/config.h2
-rw-r--r--keyboards/acheron/themis/87h/info.json3
-rw-r--r--keyboards/acheron/themis/87htsc/config.h2
-rw-r--r--keyboards/acheron/themis/87htsc/info.json3
-rw-r--r--keyboards/acheron/themis/88htsc/config.h2
-rw-r--r--keyboards/acheron/themis/88htsc/info.json3
-rw-r--r--keyboards/arabica37/keymaps/default/config.h4
-rw-r--r--keyboards/aya/keymaps/default/config.h18
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/3x5_3.c132
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/config.h22
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/halconf.h1
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/info.json178
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h64
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c24
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/via/config.h (renamed from keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h)10
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c170
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/via/readme.md47
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keymaps/via/rules.mk2
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/mcuconf.h7
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/readme.md4
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/rules.mk20
-rw-r--r--keyboards/bastardkb/dilemma/config.h3
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-underglow/config.h4
-rw-r--r--keyboards/biacco42/meishi2/keymaps/moc/config.h19
-rw-r--r--keyboards/boardwalk/keymaps/brendanwr/config.h16
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/config.h3
-rw-r--r--keyboards/cutie_club/wraith/keymaps/amber/config.h19
-rw-r--r--keyboards/dm9records/ergoinu/config.h2
-rw-r--r--keyboards/dm9records/plaid/keymaps/brickbots/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/stephen-huan/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h19
-rw-r--r--keyboards/dp60/keymaps/indicator/indicator.c12
-rw-r--r--keyboards/dp60/keymaps/indicator/rules.mk2
-rw-r--r--keyboards/duck/jetfire/indicator_leds.h2
-rw-r--r--keyboards/duck/jetfire/jetfire.c8
-rw-r--r--keyboards/era/klein/config.h27
-rw-r--r--keyboards/era/klein/info.json590
-rw-r--r--keyboards/era/klein/keymaps/default/keymap.c23
-rw-r--r--keyboards/era/klein/keymaps/via/keymap.c23
-rw-r--r--keyboards/era/klein/readme.md23
-rw-r--r--keyboards/ergodox_ez/led_i2c.c8
-rw-r--r--keyboards/ergodox_ez/post_config.h4
-rw-r--r--keyboards/ergodox_ez/shine/info.json3
-rw-r--r--keyboards/ergodox_ez/shine/rules.mk1
-rw-r--r--keyboards/ergotravel/keymaps/default/config.h4
-rw-r--r--keyboards/ergotravel/keymaps/via/config.h4
-rw-r--r--keyboards/fc660c/keymaps/default_rgb/config.h2
-rw-r--r--keyboards/fc660c/keymaps/siroleo/config.h19
-rw-r--r--keyboards/fc660c/keymaps/via_rgb/config.h2
-rw-r--r--keyboards/fleuron/keymaps/dollartacos/config.h18
-rw-r--r--keyboards/fortitude60/keymaps/default/config.h18
-rw-r--r--keyboards/fortitude60/keymaps/via/config.h18
-rw-r--r--keyboards/foxlab/key65/universal/readme.md2
-rw-r--r--keyboards/gboards/gergo/keymaps/default/config.h2
-rw-r--r--keyboards/gboards/gergo/keymaps/germ/config.h2
-rw-r--r--keyboards/gboards/gergo/keymaps/gotham/config.h2
-rw-r--r--keyboards/geonworks/ee_at/ee_at.c (renamed from keyboards/converter/numeric_keypad_iie/keymaps/newbold/config.h)17
-rw-r--r--keyboards/geonworks/ee_at/info.json499
-rw-r--r--keyboards/geonworks/ee_at/keymaps/default/keymap.c32
-rw-r--r--keyboards/geonworks/ee_at/keymaps/via/keymap.c32
-rw-r--r--keyboards/geonworks/ee_at/keymaps/via/rules.mk (renamed from keyboards/lefty/keymaps/via/rules.mk)0
-rw-r--r--keyboards/geonworks/ee_at/matrix_diagram.md21
-rw-r--r--keyboards/geonworks/ee_at/readme.md32
-rw-r--r--keyboards/geonworks/ee_at/rules.mk2
-rw-r--r--keyboards/geonworks/w1_at/info.json (renamed from keyboards/w1_at/info.json)112
-rw-r--r--keyboards/geonworks/w1_at/keymaps/default/keymap.c (renamed from keyboards/w1_at/keymaps/default/keymap.c)2
-rw-r--r--keyboards/geonworks/w1_at/keymaps/via/keymap.c (renamed from keyboards/w1_at/keymaps/via/keymap.c)0
-rw-r--r--keyboards/geonworks/w1_at/keymaps/via/rules.mk (renamed from keyboards/pw88/keymaps/via/rules.mk)0
-rw-r--r--keyboards/geonworks/w1_at/keymaps/zq/keymap.c (renamed from keyboards/w1_at/keymaps/zq/keymap.c)0
-rw-r--r--keyboards/geonworks/w1_at/keymaps/zq/readme.md (renamed from keyboards/w1_at/keymaps/zq/readme.md)0
-rw-r--r--keyboards/geonworks/w1_at/keymaps/zq/rules.mk (renamed from keyboards/era/klein/keymaps/via/rules.mk)0
-rw-r--r--keyboards/geonworks/w1_at/matrix_diagram.md (renamed from keyboards/w1_at/matrix_diagram.md)0
-rw-r--r--keyboards/geonworks/w1_at/readme.md (renamed from keyboards/w1_at/readme.md)6
-rw-r--r--keyboards/geonworks/w1_at/rules.mk2
-rw-r--r--keyboards/geonworks/w1_at/w1_at.c (renamed from keyboards/w1_at/w1_at.c)14
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/config.h4
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/config.h4
-rw-r--r--keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h4
-rw-r--r--keyboards/hadron/ver3/keymaps/sebaslayout/config.h1
-rw-r--r--keyboards/handwired/6macro/keymaps/default/config.h18
-rw-r--r--keyboards/handwired/6macro/keymaps/osu/config.h18
-rw-r--r--keyboards/handwired/chiron/keymaps/default/config.h4
-rw-r--r--keyboards/handwired/freoduo/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/hnah40rgb/keymaps/default/config.h17
-rw-r--r--keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk1
-rw-r--r--keyboards/handwired/onekey/keymaps/apa102/config.h2
-rw-r--r--keyboards/handwired/onekey/keymaps/dip_switch_map/config.h6
-rw-r--r--keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c14
-rw-r--r--keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk2
-rw-r--r--keyboards/handwired/steamvan/keymaps/jmdaly/config.h3
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/config.h8
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/halconf.h (renamed from keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h)5
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/info.json18
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/keymaps/via/rules.mk2
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/mcuconf.h22
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/readme.md2
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/ziyoulang_k3_mod.c117
-rw-r--r--keyboards/helix/pico/config.h8
-rw-r--r--keyboards/helix/rev2/config.h8
-rw-r--r--keyboards/hineybush/hbcp/hbcp.c2
-rw-r--r--keyboards/ibm/model_m/mschwingen/mschwingen.c10
-rw-r--r--keyboards/ibm/model_m/teensypp/keymaps/iw0rm3r/config.h19
-rw-r--r--keyboards/ibm/model_m_122/ibm122m/keymaps/default/config.h19
-rw-r--r--keyboards/ibm/model_m_122/ibm122m/keymaps/lukaus/config.h19
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/config.h15
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/rules.mk14
-rw-r--r--keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h19
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.c56
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.h1
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h36
-rw-r--r--keyboards/jc65/v32u4/keymaps/coth/config.h1
-rw-r--r--keyboards/jc65/v32u4/keymaps/dead_encryption/config.h1
-rw-r--r--keyboards/jc65/v32u4/keymaps/jetpacktuxedo/config.h1
-rw-r--r--keyboards/jc65/v32u4/keymaps/na7thana/config.h1
-rw-r--r--keyboards/jian/keymaps/default/config.h20
-rw-r--r--keyboards/jian/keymaps/left_hand/config.h21
-rw-r--r--keyboards/jian/keymaps/via/config.h21
-rw-r--r--keyboards/jian/nsrev2/config.h4
-rw-r--r--keyboards/jian/rev1/post_config.h4
-rw-r--r--keyboards/jian/rev2/post_config.h4
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h19
-rw-r--r--keyboards/kapcave/gskt00/keymaps/default-poly/config.h2
-rw-r--r--keyboards/kapl/keymaps/default/config.h3
-rw-r--r--keyboards/kapl/keymaps/via/config.h3
-rw-r--r--keyboards/karn/info.json60
-rw-r--r--keyboards/karn/keymaps/colemak/keymap.c24
-rw-r--r--keyboards/karn/keymaps/default/keymap.c26
-rw-r--r--keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h17
-rw-r--r--keyboards/kbdfans/kbd67/rev1/keymaps/martinffx/config.h19
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/koba/config.h17
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/rouge8/config.h19
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk1
-rw-r--r--keyboards/kc60/mod_rgb_underglow.md4
-rw-r--r--keyboards/keebio/dilly/keymaps/default/config.h1
-rw-r--r--keyboards/keebio/fourier/keymaps/maxim/config.h23
-rw-r--r--keyboards/keebio/quefrency/keymaps/default60/config.h22
-rw-r--r--keyboards/keebio/quefrency/keymaps/joestrong/config.h22
-rw-r--r--keyboards/keebio/quefrency/keymaps/rogthefrog/config.h23
-rw-r--r--keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h22
-rw-r--r--keyboards/keebio/quefrency/keymaps/yoryer/config.h22
-rw-r--r--keyboards/keebio/viterbi/keymaps/default/config.h4
-rw-r--r--keyboards/keyboardio/model01/keymaps/tw1t611/config.h19
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c42
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/default/rules.mk1
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c102
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk1
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c61
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk1
-rw-r--r--keyboards/keyhive/ut472/keymaps/annihilator6000/config.h19
-rw-r--r--keyboards/kinesis/keymaps/tw1t611/config.h3
-rw-r--r--keyboards/kudox/columner/keymaps/default/config.h17
-rw-r--r--keyboards/kudox/rev1/keymaps/default/config.h17
-rw-r--r--keyboards/kudox/rev1/keymaps/jis/config.h17
-rw-r--r--keyboards/kudox/rev1/keymaps/x1/config.h17
-rw-r--r--keyboards/kudox/rev2/keymaps/default/config.h17
-rw-r--r--keyboards/kudox/rev2/keymaps/jis/config.h17
-rw-r--r--keyboards/kudox_game/keymaps/default/config.h18
-rw-r--r--keyboards/lefty/rev2/rules.mk0
-rw-r--r--keyboards/lets_split/keymaps/via/config.h4
-rw-r--r--keyboards/lily58/keymaps/default/config.h8
-rw-r--r--keyboards/lily58/keymaps/via/config.h4
-rw-r--r--keyboards/majistic/keymaps/default/config.h17
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h2
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h21
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h23
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h21
-rw-r--r--keyboards/marksard/treadstone48/rev1/config.h4
-rw-r--r--keyboards/matrix/abelx/abelx.c7
-rw-r--r--keyboards/matrix/abelx/info.json1
-rw-r--r--keyboards/matrix/abelx/rules.mk1
-rw-r--r--keyboards/matrix/m20add/info.json1
-rw-r--r--keyboards/matrix/m20add/rgb_ring.c6
-rw-r--r--keyboards/matrix/noah/noah.c37
-rw-r--r--keyboards/mechwild/mercutio/keymaps/default/config.h17
-rw-r--r--keyboards/mechwild/mercutio/keymaps/fancy/config.h17
-rw-r--r--keyboards/mechwild/mercutio/keymaps/via/config.h17
-rw-r--r--keyboards/miiiw/blackio83/rev_0100/config.h1
-rw-r--r--keyboards/miiiw/blackio83/rev_0100/rev_0100.c17
-rw-r--r--keyboards/mixi/keymaps/default/keymap.c6
-rw-r--r--keyboards/mixi/keymaps/via/keymap.c6
-rw-r--r--keyboards/mlego/m48/keymaps/default/keymap.c8
-rw-r--r--keyboards/mlego/m48/keymaps/via/keymap.c8
-rw-r--r--keyboards/mlego/m60/keymaps/default/keymap.c8
-rw-r--r--keyboards/mlego/m60/keymaps/via/keymap.c8
-rw-r--r--keyboards/mlego/m60_split/keymaps/default/keymap.c8
-rw-r--r--keyboards/mlego/m60_split/keymaps/via/keymap.c8
-rw-r--r--keyboards/mlego/m65/m65.c8
-rw-r--r--keyboards/monstargear/xo87/rgb/keymaps/default/config.h16
-rw-r--r--keyboards/monstargear/xo87/solderable/solderable.h4
-rw-r--r--keyboards/neson_design/700e/700e.c7
-rw-r--r--keyboards/neson_design/700e/info.json1
-rw-r--r--keyboards/neson_design/700e/rules.mk1
-rw-r--r--keyboards/neson_design/n6/info.json1
-rw-r--r--keyboards/neson_design/n6/n6.c7
-rw-r--r--keyboards/neson_design/n6/rules.mk1
-rw-r--r--keyboards/neson_design/nico/info.json3
-rw-r--r--keyboards/neson_design/nico/nico.c12
-rw-r--r--keyboards/neson_design/nico/rules.mk2
-rw-r--r--keyboards/newgame40/post_config.h4
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/keymap.c2
-rw-r--r--keyboards/pico/65keys/keymaps/default/config.h18
-rw-r--r--keyboards/pico/65keys/keymaps/jis/config.h18
-rw-r--r--keyboards/planck/keymaps/dsanchezseco/rules.mk1
-rw-r--r--keyboards/planck/keymaps/mitch/rules.mk0
-rw-r--r--keyboards/planck/keymaps/motform/config.h1
-rw-r--r--keyboards/planck/keymaps/vxid/config.h1
-rw-r--r--keyboards/projectcain/vault35/atmega32u4/info.json45
-rw-r--r--keyboards/projectcain/vault35/atmega32u4/rules.mk1
-rw-r--r--keyboards/projectcain/vault35/info.json113
-rw-r--r--keyboards/projectcain/vault35/keymaps/default/keymap.c39
-rw-r--r--keyboards/projectcain/vault35/keymaps/default/rules.mk3
-rw-r--r--keyboards/projectcain/vault35/rules.mk14
-rw-r--r--keyboards/rabbit/rabbit68/keymaps/kaiec/config.h19
-rw-r--r--keyboards/recompile_keys/choco60/config.h18
-rw-r--r--keyboards/redox/keymaps/default/config.h4
-rw-r--r--keyboards/redox/keymaps/via/config.h4
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb/config.h2
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h2
-rw-r--r--keyboards/reviung/reviung39/keymaps/default/config.h2
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/config.h2
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/readme.md2
-rw-r--r--keyboards/reviung/reviung61/keymaps/default_rgb/config.h2
-rw-r--r--keyboards/rgbkb/sol/keymaps/brianweyer/config.h25
-rw-r--r--keyboards/rgbkb/sol/keymaps/danielhklein/config.h25
-rw-r--r--keyboards/rgbkb/sol/rev1/config.h6
-rw-r--r--keyboards/rgbkb/sol/rev2/config.h14
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/default/config.h4
-rw-r--r--keyboards/rgbkb/zygomorph/rev1/config.h4
-rw-r--r--keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h19
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h6
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h6
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h4
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h2
-rw-r--r--keyboards/silverbullet44/config.h2
-rw-r--r--keyboards/sirius/unigo66/keymaps/danielhklein/config.h3
-rw-r--r--keyboards/smithrune/iron180/info.json2
-rw-r--r--keyboards/smithrune/iron180v2/readme.md27
-rw-r--r--keyboards/smithrune/iron180v2/v2h/config.h (renamed from keyboards/keebio/quefrency/keymaps/default65/config.h)13
-rw-r--r--keyboards/smithrune/iron180v2/v2h/info.json674
-rwxr-xr-xkeyboards/smithrune/iron180v2/v2h/keymaps/default/keymap.c37
-rwxr-xr-xkeyboards/smithrune/iron180v2/v2h/keymaps/via/keymap.c37
-rw-r--r--keyboards/smithrune/iron180v2/v2h/keymaps/via/rules.mk (renamed from keyboards/w1_at/keymaps/via/rules.mk)0
-rw-r--r--keyboards/smithrune/iron180v2/v2h/matrix_diagram.md24
-rw-r--r--keyboards/smithrune/iron180v2/v2h/rules.mk1
-rw-r--r--keyboards/smithrune/iron180v2/v2s/config.h (renamed from keyboards/projectcain/vault35/config.h)12
-rw-r--r--keyboards/smithrune/iron180v2/v2s/halconf.h (renamed from keyboards/era/klein/halconf.h)9
-rw-r--r--keyboards/smithrune/iron180v2/v2s/info.json1432
-rwxr-xr-xkeyboards/smithrune/iron180v2/v2s/keymaps/default/keymap.c37
-rwxr-xr-xkeyboards/smithrune/iron180v2/v2s/keymaps/via/keymap.c37
-rw-r--r--keyboards/smithrune/iron180v2/v2s/keymaps/via/rules.mk1
-rw-r--r--keyboards/smithrune/iron180v2/v2s/matrix_diagram.md24
-rw-r--r--keyboards/smithrune/iron180v2/v2s/mcuconf.h (renamed from keyboards/era/klein/mcuconf.h)6
-rw-r--r--keyboards/smithrune/iron180v2/v2s/rules.mk1
-rw-r--r--keyboards/smoll/lefty/config.h (renamed from keyboards/lefty/config.h)0
-rw-r--r--keyboards/smoll/lefty/info.json (renamed from keyboards/lefty/info.json)0
-rw-r--r--keyboards/smoll/lefty/keymaps/default/keymap.c (renamed from keyboards/lefty/keymaps/default/keymap.c)0
-rw-r--r--keyboards/smoll/lefty/keymaps/via/keymap.c (renamed from keyboards/lefty/keymaps/via/keymap.c)0
-rw-r--r--keyboards/smoll/lefty/keymaps/via/rules.mk1
-rw-r--r--keyboards/smoll/lefty/lefty.c (renamed from keyboards/lefty/lefty.c)0
-rw-r--r--keyboards/smoll/lefty/readme.md (renamed from keyboards/lefty/readme.md)0
-rw-r--r--keyboards/smoll/lefty/rev1/info.json (renamed from keyboards/lefty/rev1/info.json)0
-rw-r--r--keyboards/smoll/lefty/rev1/rules.mk (renamed from keyboards/era/klein/rules.mk)0
-rw-r--r--keyboards/smoll/lefty/rev2/info.json (renamed from keyboards/lefty/rev2/info.json)0
-rw-r--r--keyboards/smoll/lefty/rev2/rules.mk (renamed from keyboards/lefty/rev1/rules.mk)0
-rw-r--r--keyboards/smoll/lefty/rules.mk (renamed from keyboards/lefty/rules.mk)2
-rw-r--r--keyboards/smoll/pw88/config.h (renamed from keyboards/pw88/config.h)0
-rw-r--r--keyboards/smoll/pw88/info.json (renamed from keyboards/pw88/info.json)0
-rw-r--r--keyboards/smoll/pw88/keymaps/default/keymap.c (renamed from keyboards/pw88/keymaps/default/keymap.c)0
-rw-r--r--keyboards/smoll/pw88/keymaps/via/keymap.c (renamed from keyboards/pw88/keymaps/via/keymap.c)0
-rw-r--r--keyboards/smoll/pw88/keymaps/via/rules.mk1
-rw-r--r--keyboards/smoll/pw88/readme.md (renamed from keyboards/pw88/readme.md)0
-rw-r--r--keyboards/smoll/pw88/rules.mk (renamed from keyboards/pw88/rules.mk)0
-rw-r--r--keyboards/snes_macropad/snes_macropad.c2
-rw-r--r--keyboards/sofle/keymaps/default/config.h6
-rw-r--r--keyboards/sofle/keymaps/rgb_default/config.h12
-rw-r--r--keyboards/sofle/keymaps/via/config.h4
-rw-r--r--keyboards/stront/config.h2
-rw-r--r--keyboards/sx60/keymaps/amnobis/config.h1
-rw-r--r--keyboards/tada68/keymaps/iso-nor/config.h1
-rwxr-xr-xkeyboards/tada68/keymaps/laas/config.h1
-rw-r--r--keyboards/tada68/keymaps/peippo/config.h1
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h19
-rw-r--r--keyboards/thevankeyboards/caravan/keymaps/default/config.h1
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mikethetiger/config.h3
-rw-r--r--keyboards/tunks/ergo33/keymaps/default/config.h2
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk1
-rw-r--r--keyboards/unison/keymaps/via/config.h4
-rw-r--r--keyboards/v60_type_r/info.json16
-rw-r--r--keyboards/v60_type_r/rules.mk2
-rw-r--r--keyboards/v60_type_r/v60_type_r.c14
-rw-r--r--keyboards/w1_at/config.h21
-rw-r--r--keyboards/w1_at/keymaps/default/readme.md9
-rw-r--r--keyboards/w1_at/keymaps/via/readme.md9
-rw-r--r--keyboards/w1_at/keymaps/zq/rules.mk1
-rw-r--r--keyboards/w1_at/rules.mk15
-rw-r--r--keyboards/westfoxtrot/cyclops/keymaps/peippo/config.h19
-rw-r--r--keyboards/work_louder/loop/info.json1
-rw-r--r--keyboards/work_louder/micro/info.json1
-rw-r--r--keyboards/work_louder/nano/info.json1
-rw-r--r--keyboards/work_louder/numpad/info.json1
-rw-r--r--keyboards/work_louder/rgb_functions.c6
-rw-r--r--keyboards/work_louder/work_board/info.json1
-rw-r--r--keyboards/xiudi/xd75/keymaps/boy_314/config.h1
-rw-r--r--keyboards/xiudi/xd75/keymaps/bulbizarre/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/c4software_bepo/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/c4software_bepo/rules.mk14
-rw-r--r--keyboards/xiudi/xd75/keymaps/developper_bepo/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/developper_bepo/rules.mk14
-rw-r--r--keyboards/xiudi/xd75/keymaps/dyn_macro_tap_dance/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/fabian/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/french/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/kloki/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/kloki/rules.mk15
-rw-r--r--keyboards/xiudi/xd75/keymaps/msiu/config.h18
-rw-r--r--keyboards/xiudi/xd75/keymaps/pitty/config.h19
-rw-r--r--keyboards/xiudi/xd75/keymaps/pitty/rules.mk15
-rw-r--r--keyboards/xiudi/xd75/keymaps/skewwhiffy/rules.mk15
-rw-r--r--keyboards/yosino58/keymaps/default/config.h4
-rw-r--r--layouts/default/ortho_5x13/default_ortho_5x13/keymap.c41
-rw-r--r--layouts/default/ortho_5x13/info.json80
-rw-r--r--layouts/default/ortho_5x13/layout.json5
-rw-r--r--layouts/default/ortho_5x13/readme.md3
-rw-r--r--layouts/default/ortho_5x14/default_ortho_5x14/keymap.c4
-rw-r--r--layouts/default/ortho_6x13/default_ortho_6x13/keymap.c46
-rw-r--r--layouts/default/ortho_6x13/info.json94
-rw-r--r--layouts/default/ortho_6x13/layout.json6
-rw-r--r--layouts/default/ortho_6x13/readme.md3
-rw-r--r--layouts/default/readme.md32
m---------lib/chibios-contrib0
-rw-r--r--platforms/chibios/converters/promicro_to_imera/_pin_defs.h36
-rw-r--r--platforms/chibios/converters/promicro_to_imera/converter.mk10
-rw-r--r--platforms/chibios/drivers/analog.c111
-rw-r--r--platforms/chibios/drivers/audio_dac.h34
-rw-r--r--platforms/chibios/drivers/audio_dac_additive.c48
-rw-r--r--quantum/dip_switch.c57
-rw-r--r--quantum/dip_switch.h27
-rw-r--r--quantum/keyboard.c2
-rw-r--r--quantum/keyboard.h13
-rw-r--r--quantum/keymap_common.c12
-rw-r--r--quantum/keymap_extras/keymap_spanish_latin_america.h105
-rw-r--r--quantum/keymap_extras/sendstring_spanish_latin_america.h120
-rw-r--r--quantum/keymap_introspection.c18
-rw-r--r--quantum/keymap_introspection.h12
-rw-r--r--quantum/led_matrix/led_matrix.c23
-rw-r--r--quantum/led_matrix/led_matrix.h39
-rw-r--r--quantum/led_matrix/led_matrix_drivers.c2
-rw-r--r--quantum/led_matrix/led_matrix_drivers.h38
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c19
-rw-r--r--quantum/rgb_matrix/rgb_matrix.h36
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.c6
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.h41
-rw-r--r--quantum/rgblight/rgblight.c65
-rw-r--r--quantum/rgblight/rgblight.h9
-rw-r--r--quantum/rgblight/rgblight_drivers.c20
-rw-r--r--quantum/rgblight/rgblight_drivers.h13
-rw-r--r--readme.md4
414 files changed, 6205 insertions, 3798 deletions
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index 60f1cbd837..5e93480e4d 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -313,6 +313,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_$(strip $(shell echo $(RGBLIGHT_DRIVER) | tr '[:lower:]' '[:upper:]'))
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
+ SRC += $(QUANTUM_DIR)/rgblight/rgblight_drivers.c
CIE1931_CURVE := yes
RGB_KEYCODES_ENABLE := yes
endif
@@ -907,6 +908,12 @@ ifeq ($(strip $(ENCODER_ENABLE)), yes)
endif
endif
+ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
+ ifeq ($(strip $(DIP_SWITCH_MAP_ENABLE)), yes)
+ OPT_DEFS += -DDIP_SWITCH_MAP_ENABLE
+ endif
+endif
+
VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
WS2812_DRIVER ?= bitbang
diff --git a/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson
new file mode 100644
index 0000000000..50c49274be
--- /dev/null
+++ b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson
@@ -0,0 +1,339 @@
+{
+ "aliases": {
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ | │ 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 │ Ñ │ { │ } │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "KC_GRV": {
+ "key": "ES_PIPE",
+ "label": "|",
+ }
+ "KC_1": {
+ "key": "ES_1",
+ "label": "1",
+ }
+ "KC_2": {
+ "key": "ES_2",
+ "label": "2",
+ }
+ "KC_3": {
+ "key": "ES_3",
+ "label": "3",
+ }
+ "KC_4": {
+ "key": "ES_4",
+ "label": "4",
+ }
+ "KC_5": {
+ "key": "ES_5",
+ "label": "5",
+ }
+ "KC_6": {
+ "key": "ES_6",
+ "label": "6",
+ }
+ "KC_7": {
+ "key": "ES_7",
+ "label": "7",
+ }
+ "KC_8": {
+ "key": "ES_8",
+ "label": "8",
+ }
+ "KC_9": {
+ "key": "ES_9",
+ "label": "9",
+ }
+ "KC_0": {
+ "key": "ES_0",
+ "label": "0",
+ }
+ "KC_MINS": {
+ "key": "ES_QUOT",
+ "label": "'",
+ }
+ "KC_EQL": {
+ "key": "ES_IQUE",
+ "label": "¿",
+ }
+ "KC_Q": {
+ "key": "ES_Q",
+ "label": "Q",
+ }
+ "KC_W": {
+ "key": "ES_W",
+ "label": "W",
+ }
+ "KC_E": {
+ "key": "ES_E",
+ "label": "E",
+ }
+ "KC_R": {
+ "key": "ES_R",
+ "label": "R",
+ }
+ "KC_T": {
+ "key": "ES_T",
+ "label": "T",
+ }
+ "KC_Y": {
+ "key": "ES_Y",
+ "label": "Y",
+ }
+ "KC_U": {
+ "key": "ES_U",
+ "label": "U",
+ }
+ "KC_I": {
+ "key": "ES_I",
+ "label": "I",
+ }
+ "KC_O": {
+ "key": "ES_O",
+ "label": "O",
+ }
+ "KC_P": {
+ "key": "ES_P",
+ "label": "P",
+ }
+ "KC_LBRC": {
+ "key": "ES_ACUT",
+ "label": "´ (dead)",
+ }
+ "KC_RBRC": {
+ "key": "ES_PLUS",
+ "label": "+",
+ }
+ "KC_A": {
+ "key": "ES_A",
+ "label": "A",
+ }
+ "KC_S": {
+ "key": "ES_S",
+ "label": "S",
+ }
+ "KC_D": {
+ "key": "ES_D",
+ "label": "D",
+ }
+ "KC_F": {
+ "key": "ES_F",
+ "label": "F",
+ }
+ "KC_G": {
+ "key": "ES_G",
+ "label": "G",
+ }
+ "KC_H": {
+ "key": "ES_H",
+ "label": "H",
+ }
+ "KC_J": {
+ "key": "ES_J",
+ "label": "J",
+ }
+ "KC_K": {
+ "key": "ES_K",
+ "label": "K",
+ }
+ "KC_L": {
+ "key": "ES_L",
+ "label": "L",
+ }
+ "KC_SCLN": {
+ "key": "ES_NTIL",
+ "label": "Ñ",
+ }
+ "KC_QUOT": {
+ "key": "ES_LCBR",
+ "label": "{",
+ }
+ "KC_NUHS": {
+ "key": "ES_RCBR",
+ "label": "}",
+ }
+ "KC_NUBS": {
+ "key": "ES_LABK",
+ "label": "<",
+ }
+ "KC_Z": {
+ "key": "ES_Z",
+ "label": "Z",
+ }
+ "KC_X": {
+ "key": "ES_X",
+ "label": "X",
+ }
+ "KC_C": {
+ "key": "ES_C",
+ "label": "C",
+ }
+ "KC_V": {
+ "key": "ES_V",
+ "label": "V",
+ }
+ "KC_B": {
+ "key": "ES_B",
+ "label": "B",
+ }
+ "KC_N": {
+ "key": "ES_N",
+ "label": "N",
+ }
+ "KC_M": {
+ "key": "ES_M",
+ "label": "M",
+ }
+ "KC_COMM": {
+ "key": "ES_COMM",
+ "label": ",",
+ }
+ "KC_DOT": {
+ "key": "ES_DOT",
+ "label": ".",
+ }
+ "KC_SLSH": {
+ "key": "ES_MINS",
+ "label": "-",
+ }
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ° │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¡ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ * │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "S(ES_PIPE)": {
+ "key": "ES_MORD",
+ "label": "°",
+ }
+ "S(ES_1)": {
+ "key": "ES_EXLM",
+ "label": "!",
+ }
+ "S(ES_2)": {
+ "key": "ES_DQUO",
+ "label": "\"",
+ }
+ "S(ES_3)": {
+ "key": "ES_NUMB",
+ "label": "#",
+ }
+ "S(ES_4)": {
+ "key": "ES_DLR",
+ "label": "$",
+ }
+ "S(ES_5)": {
+ "key": "ES_PERC",
+ "label": "%",
+ }
+ "S(ES_6)": {
+ "key": "ES_AMPR",
+ "label": "&",
+ }
+ "S(ES_7)": {
+ "key": "ES_SLSH",
+ "label": "/",
+ }
+ "S(ES_8)": {
+ "key": "ES_LPRN",
+ "label": "(",
+ }
+ "S(ES_9)": {
+ "key": "ES_RPRN",
+ "label": ")",
+ }
+ "S(ES_0)": {
+ "key": "ES_EQL",
+ "label": "=",
+ }
+ "S(ES_QUOT)": {
+ "key": "ES_QUES",
+ "label": "?",
+ }
+ "S(ES_IQUE)": {
+ "key": "ES_IEXL",
+ "label": "¡",
+ }
+ "S(ES_ACUT)": {
+ "key": "ES_DIAE",
+ "label": "¨ (dead)",
+ }
+ "S(ES_PLUS)": {
+ "key": "ES_ASTR",
+ "label": "*",
+ }
+ "S(ES_LCBR)": {
+ "key": "ES_LBRC",
+ "label": "[",
+ }
+ "S(ES_RCBR)": {
+ "key": "ES_RBRC",
+ "label": "]",
+ }
+ "S(ES_LABK)": {
+ "key": "ES_RABK",
+ "label": ">",
+ }
+ "S(ES_COMM)": {
+ "key": "ES_SCLN",
+ "label": ";",
+ }
+ "S(ES_DOT)": {
+ "key": "ES_COLN",
+ "label": ":",
+ }
+ "S(ES_MINS)": {
+ "key": "ES_UNDS",
+ "label": "_",
+ }
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ¬ │ │ │ │ │ │ │ │ │ │ │ \ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ @ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ ^ │ ` │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "ALGR(ES_PIPE)": {
+ "key": "ES_NOT",
+ "label": "¬",
+ }
+ "ALGR(ES_QUOT)": {
+ "key": "ES_BSLS",
+ "label": "\\",
+ }
+ "ALGR(ES_Q)": {
+ "key": "ES_AT",
+ "label": "@",
+ }
+ "ALGR(ES_PLUS)": {
+ "key": "ES_TILD",
+ "label": "~",
+ }
+ "ALGR(ES_LCBR)": {
+ "key": "ES_CIRC",
+ "label": "^",
+ }
+ }
+} \ No newline at end of file
diff --git a/data/mappings/defaults.hjson b/data/mappings/defaults.hjson
index 4a9f06c0da..71902c92d6 100644
--- a/data/mappings/defaults.hjson
+++ b/data/mappings/defaults.hjson
@@ -45,6 +45,11 @@
"bootloader": "rp2040",
"processor": "RP2040"
},
+ "imera": {
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "board": "QMK_PM2040"
+ },
"kb2040": {
"board": "QMK_PM2040",
"bootloader": "rp2040",
diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson
index 26b437b513..a323865fec 100644
--- a/data/mappings/info_config.hjson
+++ b/data/mappings/info_config.hjson
@@ -142,12 +142,12 @@
"RGB_MATRIX_DEFAULT_SPD": {"info_key": "rgb_matrix.default.speed", "value_type": "int"},
// RGBLight
- "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},
"RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"},
"RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"},
"RGBLIGHT_LAYER_BLINK": {"info_key": "rgblight.layers.blink", "value_type": "bool"},
"RGBLIGHT_LAYERS": {"info_key": "rgblight.layers.enabled", "value_type": "bool"},
"RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF": {"info_key": "rgblight.layers.override_rgb", "value_type": "bool"},
+ "RGBLIGHT_LED_COUNT": {"info_key": "rgblight.led_count", "value_type": "int"},
"RGBLIGHT_LED_MAP": {"info_key": "rgblight.led_map", "value_type": "array.int"},
"RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"},
"RGBLIGHT_MAX_LAYERS": {"info_key": "rgblight.layers.max", "value_type": "int"},
diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson
index 90f32ee6ac..f2c382c923 100644
--- a/data/mappings/keyboard_aliases.hjson
+++ b/data/mappings/keyboard_aliases.hjson
@@ -185,6 +185,9 @@
"eek": {
"target": "eek/silk_down"
},
+ "era/klein": {
+ "target": "era/sirind/klein_sd"
+ },
"ergodone": {
"target": "ktec/ergodone"
},
@@ -948,6 +951,12 @@
"launchpad/rev1": {
"target": "maple_computing/launchpad/rev1"
},
+ "lefty": {
+ "target": "smoll/lefty/rev2"
+ },
+ "lefty/rev1": {
+ "target": "smoll/lefty/rev1"
+ },
"lck75": {
"target": "lyso1/lck75"
},
@@ -1101,6 +1110,9 @@
"pursuit40": {
"target": "checkerboards/pursuit40"
},
+ "pw88": {
+ "target": "smoll/pw88"
+ },
"qaz": {
"target": "tominabox1/qaz"
},
@@ -1299,6 +1311,9 @@
"vn66": {
"target": "hnahkb/vn66"
},
+ "w1_at": {
+ "target": "geonworks/w1_at"
+ },
"wallaby": {
"target": "kkatano/wallaby"
},
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 2996958084..32d737a1d8 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -43,7 +43,7 @@
},
"development_board": {
"type": "string",
- "enum": ["promicro", "elite_c", "elite_pi", "proton_c", "kb2040", "promicro_rp2040", "blok", "michi", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4", "helios", "liatris"]
+ "enum": ["promicro", "elite_c", "elite_pi", "proton_c", "kb2040", "promicro_rp2040", "blok", "michi", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4", "helios", "liatris", "imera"]
},
"pin_compatible": {
"type": "string",
diff --git a/docs/audio_driver.md b/docs/audio_driver.md
index a0bbb22e19..7bce6c2d9b 100644
--- a/docs/audio_driver.md
+++ b/docs/audio_driver.md
@@ -116,19 +116,32 @@ Additionally, in the board config, you'll want to make changes to enable the DAC
| Define | Defaults | Description |
| -------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUDIO_DAC_SAMPLE_MAX` | `4095U` | Highest value allowed. Lower value means lower volume. And 4095U is the upper limit, since this is limited to a 12 bit value. Only effects non-pregenerated samples. |
-| `AUDIO_DAC_OFF_VALUE` | `AUDIO_DAC_SAMPLE_MAX / 2` | The value of the DAC when notplaying anything. Some setups may require a high (`AUDIO_DAC_SAMPLE_MAX`) or low (`0`) value here. |
+| `AUDIO_DAC_OFF_VALUE` | `AUDIO_DAC_SAMPLE_MAX / 2` | The value of the DAC when not playing anything. Some setups may require a high (`AUDIO_DAC_SAMPLE_MAX`) or low (`0`) value here. |
| `AUDIO_MAX_SIMULTANEOUS_TONES` | __see next table__ | The number of tones that can be played simultaneously. A value that is too high may freeze the controller or glitch out when too many tones are being played. |
| `AUDIO_DAC_SAMPLE_RATE` | __see next table__ | Effective bit rate of the DAC (in hertz), higher limits simultaneous tones, and lower sacrifices quality. |
+| `AUDIO_DAC_BUFFER_SIZE` | __see next table__ | Number of samples generated every refill. Too few may cause excessive CPU load; too many may cause freezes, RAM or flash exhaustion or lags during matrix scanning. |
-There are a number of predefined quality settings that you can use, with "sane minimum" being the default. You can use custom values by simply defining the sample rate and number of simultaneous tones, instead of using one of the listed presets.
+There are a number of predefined quality settings that you can use, with "sane minimum" being the default. You can use custom values by simply defining the sample rate, number of simultaneous tones and buffer size, instead of using one of the listed presets.
-| Define | Sample Rate | Simultaneous tones |
-| --------------------------------- | ----------- | ------------------- |
-| `AUDIO_DAC_QUALITY_VERY_LOW` | `11025U` | `8` |
-| `AUDIO_DAC_QUALITY_LOW` | `22040U` | `4` |
-| `AUDIO_DAC_QUALITY_HIGH` | `44100U` | `2` |
-| `AUDIO_DAC_QUALITY_VERY_HIGH` | `88200U` | `1` |
-| `AUDIO_DAC_QUALITY_SANE_MINIMUM` | `16384U` | `8` |
+| Define | Sample Rate | Simultaneous tones | Buffer size |
+| --------------------------------- | ----------- | ------------------- | ----------- |
+| `AUDIO_DAC_QUALITY_VERY_LOW` | `11025U` | `8` | `64U` |
+| `AUDIO_DAC_QUALITY_LOW` | `22050U` | `4` | `128U` |
+| `AUDIO_DAC_QUALITY_HIGH` | `44100U` | `2` | `256U` |
+| `AUDIO_DAC_QUALITY_VERY_HIGH` | `88200U` | `1` | `256U` |
+| `AUDIO_DAC_QUALITY_SANE_MINIMUM` | `16384U` | `8` | `64U` |
+
+#### Notes on buffer size :id=buffer-size
+
+By default, the buffer size attempts to keep to these constraints:
+
+* The interval between buffer refills can't be too short, since the microcontroller would then only be servicing buffer refills and would freeze up.
+* On the additive driver, the interval between buffer refills can't be too long, since matrix scanning would suffer lengthy pauses every so often, which would delay key presses or releases or lose some short taps altogether.
+* The interval between buffer refills is kept to a minimum, which allows notes to stop as soon as possible after they should.
+* For greater compatibility, the buffer size should be a power of 2.
+* The buffer size being too large causes resource exhaustion leading to build failures or freezing at runtime: RAM usage (on the additive driver) or flash usage (on the basic driver).
+
+You can lower the buffer size if you need a bit more space in your firmware, or raise it if your keyboard freezes up.
```c
diff --git a/docs/config_options.md b/docs/config_options.md
index 8119b9e356..bc28f603fa 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -223,7 +223,7 @@ If you define these options you will enable the associated feature, which may in
* Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF`
* If defined, then [lighting layers](feature_rgblight?id=overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off.
-* `#define RGBLED_NUM 12`
+* `#define RGBLIGHT_LED_COUNT 12`
* number of LEDs
* `#define RGBLIGHT_SPLIT`
* Needed if both halves of the board have RGB LEDs wired directly to the RGB output pin on the controllers instead of passing the output of the left half to the input of the right half
diff --git a/docs/feature_converters.md b/docs/feature_converters.md
index 11bdbed576..62c214e246 100644
--- a/docs/feature_converters.md
+++ b/docs/feature_converters.md
@@ -19,6 +19,7 @@ The following converters are available at this time:
| `promicro` | `elite_pi` |
| `promicro` | `helios` |
| `promicro` | `liatris` |
+| `promicro` | `imera` |
| `promicro` | `michi` |
| `elite_c` | `stemcell` |
| `elite_c` | `rp2040_ce` |
@@ -82,6 +83,7 @@ If a board currently supported in QMK uses a [Pro Micro](https://www.sparkfun.co
| [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` |
| [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` |
| [Liatris](https://splitkb.com/products/liatris) | `liatris` |
+| [Imera](https://splitkb.com/products/imera) | `imera` |
| [Michi](https://github.com/ci-bus/michi-promicro-rp2040) | `michi` |
Converter summary:
@@ -99,6 +101,7 @@ Converter summary:
| `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` |
| `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` |
| `liatris` | `-e CONVERT_TO=liatris` | `CONVERT_TO=liatris` | `#ifdef CONVERT_TO_LIATRIS` |
+| `imera` | `-e CONVERT_TO=imera` | `CONVERT_TO=imera` | `#ifdef CONVERT_TO_IMERA` |
| `michi` | `-e CONVERT_TO=michi` | `CONVERT_TO=michi` | `#ifdef CONVERT_TO_MICHI` |
### Proton C :id=proton_c
diff --git a/docs/feature_dip_switch.md b/docs/feature_dip_switch.md
index 6fbe91657d..0e31f5acae 100644
--- a/docs/feature_dip_switch.md
+++ b/docs/feature_dip_switch.md
@@ -20,6 +20,27 @@ or
#define DIP_SWITCH_MATRIX_GRID { {0,6}, {1,6}, {2,6} } // List of row and col pairs
```
+## DIP Switch map :id=dip-switch-map
+
+DIP Switch mapping may be added to your `keymap.c`, which replicates the normal keyswitch functionality, but with dip switches. Add this to your keymap's `rules.mk`:
+
+```make
+DIP_SWITCH_MAP_ENABLE = yes
+```
+
+Your `keymap.c` will then need a dip switch mapping defined (for two dip switches):
+
+```c
+#if defined(DIP_SWITCH_MAP_ENABLE)
+const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = {
+ DIP_SWITCH_OFF_ON(DF(0), DF(1)),
+ DIP_SWITCH_OFF_ON(EC_NORM, EC_SWAP)
+};
+#endif
+```
+
+?> This should only be enabled at the keymap level.
+
## Callbacks
The callback functions can be inserted into your `<keyboard>.c`:
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index c7d6c1a918..f0533f14fe 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -69,9 +69,9 @@ The current list of available languages is:
| **italian_osx_iso** | **jis** | **latvian** | **lithuanian_azerty** |
| **lithuanian_qwerty** | **norman** | **norwegian** | **portuguese** |
| **portuguese_osx_iso** | **romanian** | **serbian_latin** | **slovak** |
-| **slovenian** | **spanish_dvorak** | **spanish** | **swedish** |
-| **turkish_f** | **turkish_q** | **uk** | **us_international** |
-| **workman** | **workman_zxcvm** |
+| **slovenian** | **spanish_dvorak** | **spanish_latin_america** | **spanish** |
+| **swedish** | **turkish_f** | **turkish_q** | **uk** |
+| **us_international** | **workman** | **workman_zxcvm** |
### Macro Basics
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md
index 0ac0069ff8..6fddf1fdda 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/feature_pointing_device.md
@@ -69,10 +69,29 @@ The Analog Joystick is an analog (ADC) driven sensor. There are a variety of jo
| `ANALOG_JOYSTICK_Y_AXIS_PIN` | (Required) The pin used for the horizontal/Y axis. | _not defined_ |
| `ANALOG_JOYSTICK_AXIS_MIN` | (Optional) Sets the lower range to be considered movement. | `0` |
| `ANALOG_JOYSTICK_AXIS_MAX` | (Optional) Sets the upper range to be considered movement. | `1023` |
+| `ANALOG_JOYSTICK_AUTO_AXIS` | (Optional) Sets ranges to be considered movement automatically. | _not defined_ |
| `ANALOG_JOYSTICK_SPEED_REGULATOR` | (Optional) The divisor used to slow down movement. (lower makes it faster) | `20` |
| `ANALOG_JOYSTICK_READ_INTERVAL` | (Optional) The interval in milliseconds between reads. | `10` |
| `ANALOG_JOYSTICK_SPEED_MAX` | (Optional) The maximum value used for motion. | `2` |
| `ANALOG_JOYSTICK_CLICK_PIN` | (Optional) The pin wired up to the press switch of the analog stick. | _not defined_ |
+| `ANALOG_JOYSTICK_WEIGHTS` | (Optional) Use custom weights for lever positions. | _not defined_ |
+| `ANALOG_JOYSTICK_CUTOFF` | (Optional) Cut off movement when joystick returns to start position. | _not defined_ |
+
+If `ANALOG_JOYSTICK_AUTO_AXIS` is used, then `ANALOG_JOYSTICK_AXIS_MIN` and `ANALOG_JOYSTICK_AXIS_MAX` are ignored.
+
+By default analog joystick implementation uses `x^2` weighting for lever positions. `ANALOG_JOYSTICK_WEIGHTS` allows to experiment with different configurations that might feel better.
+
+E.g. This is weights for `((x-0.4)^3+0.064)/0.282`:
+
+```c
+#define ANALOG_JOYSTICK_WEIGHTS {0,2,4,5,7,8,9,10,12,13,14,15,15,16,17,18,18,19,19,20,20,21,21,21,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,25,25,25,26,26,26,27,28,28,29,29,30,31,32,33,34,35,36,37,38,40,41,43,44,46,48,49,51,53,56,58,60,62,65,68,70,73,76,79,82,85,89,92,96,100}
+```
+
+You can use following JS code to generate weights for different formulas:
+
+```js
+JSON.stringify(Array.from(Array(101).keys()).map(x => Math.ceil((((x/100-0.4)**3+0.064)/0.282*100))))
+```
### Azoteq IQS5XX Trackpad
@@ -158,12 +177,13 @@ This supports the Cirque Pinnacle 1CA027 Touch Controller, which is used in the
#### Common settings
-| Setting | Description | Default |
-| -------------------------------- | ---------------------------------------------------------- | ------------------------------------------- |
-| `CIRQUE_PINNACLE_DIAMETER_MM` | (Optional) Diameter of the trackpad sensor in millimeters. | `40` |
-| `CIRQUE_PINNACLE_ATTENUATION` | (Optional) Sets the attenuation of the sensor data. | `EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X` |
-| `CIRQUE_PINNACLE_CURVED_OVERLAY` | (Optional) Applies settings tuned for curved overlay. | _not defined_ |
-| `CIRQUE_PINNACLE_POSITION_MODE` | (Optional) Mode of operation. | _not defined_ |
+| Setting | Description | Default |
+| ------------------------------------ | ---------------------------------------------------------- | ------------------------------------------- |
+| `CIRQUE_PINNACLE_DIAMETER_MM` | (Optional) Diameter of the trackpad sensor in millimeters. | `40` |
+| `CIRQUE_PINNACLE_ATTENUATION` | (Optional) Sets the attenuation of the sensor data. | `EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X` |
+| `CIRQUE_PINNACLE_CURVED_OVERLAY` | (Optional) Applies settings tuned for curved overlay. | _not defined_ |
+| `CIRQUE_PINNACLE_POSITION_MODE` | (Optional) Mode of operation. | _not defined_ |
+| `CIRQUE_PINNACLE_SKIP_SENSOR_CHECK` | (Optional) Skips sensor presence check | _not defined_ |
**`CIRQUE_PINNACLE_ATTENUATION`** is a measure of how much data is suppressed in regards to sensitivity. The higher the attenuation, the less sensitive the touchpad will be.
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 8a64454b0d..b7ba075731 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -33,13 +33,13 @@ RGBLIGHT_DRIVER = apa102
At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. For APA102 LEDs, you must also define the clock pin. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
-|Define |Description |
-|---------------|-------------------------------------------------------------------------|
-|`WS2812_DI_PIN`|The pin connected to the data pin of the LEDs (WS2812) |
-|`APA102_DI_PIN`|The pin connected to the data pin of the LEDs (APA102) |
-|`APA102_CI_PIN`|The pin connected to the clock pin of the LEDs (APA102) |
-|`RGBLED_NUM` |The number of LEDs connected |
-|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half|
+|Define |Description |
+|--------------------|-------------------------------------------------------------------------|
+|`WS2812_DI_PIN` |The pin connected to the data pin of the LEDs (WS2812) |
+|`APA102_DI_PIN` |The pin connected to the data pin of the LEDs (APA102) |
+|`APA102_CI_PIN` |The pin connected to the clock pin of the LEDs (APA102) |
+|`RGBLIGHT_LED_COUNT`|The number of LEDs connected |
+|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half|
Then you should be able to use the keycodes below to change the RGB lighting to your liking.
@@ -152,28 +152,28 @@ Use these defines to add or remove animations from the firmware. When you are ru
The following options are used to tweak the various animations:
-|Define |Default |Description |
-|------------------------------------|-------------|-----------------------------------------------------------------------------------------------|
-|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined*|If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
-|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 |
-|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`40` |How long (in milliseconds) to wait between animation steps for the "Christmas" animation |
-|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation |
-|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel |
-|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
-|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
-|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`255` |Range adjustment for the rainbow swirl effect to get different swirls |
-|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
-|`RGBLIGHT_EFFECT_TWINKLE_LIFE` |`200` |Adjusts how quickly each LED brightens and dims when twinkling (in animation steps) |
-|`RGBLIGHT_EFFECT_TWINKLE_PROBABILITY`|`1/127` |Adjusts how likely each LED is to twinkle (on each animation step) |
+|Define |Default |Description |
+|------------------------------------|--------------------|-----------------------------------------------------------------------------------------------|
+|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined* |If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
+|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 |
+|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`40` |How long (in milliseconds) to wait between animation steps for the "Christmas" animation |
+|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation |
+|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLIGHT_LED_COUNT`|The number of LEDs to have the "Knight" animation travel |
+|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
+|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
+|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`255` |Range adjustment for the rainbow swirl effect to get different swirls |
+|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
+|`RGBLIGHT_EFFECT_TWINKLE_LIFE` |`200` |Adjusts how quickly each LED brightens and dims when twinkling (in animation steps) |
+|`RGBLIGHT_EFFECT_TWINKLE_PROBABILITY`|`1/127` |Adjusts how likely each LED is to twinkle (on each animation step) |
### Example Usage to Reduce Memory Footprint
1. Use `#undef` to selectively disable animations. The following would disable two animations and save about 4KiB:
```diff
- #undef RGBLED_NUM
+ #undef RGBLIGHT_LED_COUNT
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
- #define RGBLED_NUM 12
+ #define RGBLIGHT_LED_COUNT 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
```
@@ -386,10 +386,10 @@ rgblight_set(); // Utility functions do not call rgblight_set() automatically, s
#### direct operation
|Function |Description |
|--------------------------------------------|-------------|
-|`rgblight_setrgb_at(r, g, b, index)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
-|`rgblight_sethsv_at(h, s, v, index)` |Set a single LED to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
-|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
-|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
+|`rgblight_setrgb_at(r, g, b, index)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `index` is between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM) |
+|`rgblight_sethsv_at(h, s, v, index)` |Set a single LED to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `index` is between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM) |
+|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM)|
+|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM)|
|`rgblight_setrgb(r, g, b)` |Set effect range LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_master(r, g, b)` |Set the LEDs on the master side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_slave(r, g, b)` |Set the LEDs on the slave side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
@@ -519,7 +519,7 @@ By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED
```c
// config.h
-#define RGBLED_NUM 4
+#define RGBLIGHT_LED_COUNT 4
#define RGBLIGHT_LED_MAP { 3, 2, 1, 0 }
```
@@ -541,7 +541,7 @@ In addition to setting the Clipping Range, you can use `RGBLIGHT_LED_MAP` togeth
```c
// config.h
-#define RGBLED_NUM 8
+#define RGBLIGHT_LED_COUNT 8
#define RGBLIGHT_LED_MAP { 7, 6, 5, 4, 3, 2, 1, 0 }
// some source
diff --git a/docs/hardware_keyboard_guidelines.md b/docs/hardware_keyboard_guidelines.md
index fb434e1576..684ccc73f6 100644
--- a/docs/hardware_keyboard_guidelines.md
+++ b/docs/hardware_keyboard_guidelines.md
@@ -169,11 +169,11 @@ The `post_rules.mk` file can interpret `features` of a keyboard-level before `co
ifeq ($(strip $(RGBLED_OPTION_TYPE)),backlight)
RGBLIGHT_ENABLE = yes
- OPT_DEFS += -DRGBLED_NUM=30
+ OPT_DEFS += -DRGBLIGHT_LED_COUNT=30
endif
ifeq ($(strip $(RGBLED_OPTION_TYPE)),underglow)
RGBLIGHT_ENABLE = yes
- OPT_DEFS += -DRGBLED_NUM=6
+ OPT_DEFS += -DRGBLIGHT_LED_COUNT=6
endif
```
diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md
index 181abf8bb3..dc855b1bf6 100644
--- a/docs/quantum_painter.md
+++ b/docs/quantum_painter.md
@@ -19,18 +19,20 @@ The QMK CLI can be used to convert from normal images such as PNG files or anima
Supported devices:
-| Display Panel | Panel Type | Size | Comms Transport | Driver |
-|---------------|--------------------|------------------|-----------------|------------------------------------------|
-| GC9A01 | RGB LCD (circular) | 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += gc9a01_spi` |
-| ILI9163 | RGB LCD | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9163_spi` |
-| ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` |
-| ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` |
-| SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` |
-| ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` |
-| ST7789 | RGB LCD | 240x320, 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7789_spi` |
-| SH1106 (SPI) | Monochrome OLED | 128x64 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += sh1106_spi` |
-| SH1106 (I2C) | Monochrome OLED | 128x64 | I2C | `QUANTUM_PAINTER_DRIVERS += sh1106_i2c` |
-| Surface | Virtual | User-defined | None | `QUANTUM_PAINTER_DRIVERS += surface` |
+| Display Panel | Panel Type | Size | Comms Transport | Driver |
+|----------------|--------------------|------------------|-----------------|------------------------------------------|
+| GC9A01 | RGB LCD (circular) | 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += gc9a01_spi` |
+| ILI9163 | RGB LCD | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9163_spi` |
+| ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` |
+| ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` |
+| SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` |
+| ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` |
+| ST7789 | RGB LCD | 240x320, 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7789_spi` |
+| SH1106 (SPI) | Monochrome OLED | 128x64 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += sh1106_spi` |
+| SH1106 (I2C) | Monochrome OLED | 128x64 | I2C | `QUANTUM_PAINTER_DRIVERS += sh1106_i2c` |
+| SSD1306 (SPI) | Monochrome OLED | 128x64 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += sh1106_spi` |
+| SSD1306 (I2C) | Monochrome OLED | 128x32 | I2C | `QUANTUM_PAINTER_DRIVERS += sh1106_i2c` |
+| Surface | Virtual | User-defined | None | `QUANTUM_PAINTER_DRIVERS += surface` |
## Quantum Painter Configuration :id=quantum-painter-config
@@ -433,6 +435,10 @@ The maximum number of displays of each type can be configured by changing the fo
Native color format mono2 is compatible with SH1106
+#### ** SSD1306 **
+
+SSD1306 and SH1106 are almost entirely identical, to the point of being indisinguishable by Quantum Painter. Enable SH1106 support in Quantum Painter and create SH1106 devices in firmware to perform drawing operations on SSD1306 displays.
+
<!-- tabs:end -->
### ** Surface **
diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
index 84751a512c..0a51c85853 100644
--- a/docs/reference_keymap_extras.md
+++ b/docs/reference_keymap_extras.md
@@ -67,6 +67,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q
|Slovenian |`keymap_slovenian.h` |`sendstring_slovenian.h` |
|Spanish |`keymap_spanish.h` |`sendstring_spanish.h` |
|Spanish (Dvorak) |`keymap_spanish_dvorak.h` |`sendstring_spanish_dvorak.h` |
+|Spanish (Latin America) |`keymap_spanish_latin_america.h` |`sendstring_spanish_latin_america.h`|
|Swedish |`keymap_swedish.h` |`sendstring_swedish.h` |
|Swedish (macOS, ANSI) |`keymap_swedish_mac_ansi.h` | |
|Swedish (macOS, ISO) |`keymap_swedish_mac_iso.h` | |
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md
index af015b4b18..c3b9e5595e 100644
--- a/docs/squeezing_avr.md
+++ b/docs/squeezing_avr.md
@@ -210,6 +210,7 @@ That said, there are a number of Pro Micro replacements with ARM controllers:
* [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040)
* [0xCB Helios](https://keeb.supply/products/0xcb-helios) ([Open Source](https://github.com/0xCB-dev/0xCB-Helios), DIY/PCBA/Shop)
* [Liatris](https://splitkb.com/products/liatris)
+* [Imera](https://splitkb.com/products/imera)
* [Michi](https://github.com/ci-bus/michi-promicro-rp2040)
There are other, non-Pro Micro compatible boards out there. The most popular being:
diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c
index 527519eb8a..4d8f69cdcd 100644
--- a/drivers/led/apa102.c
+++ b/drivers/led/apa102.c
@@ -71,11 +71,6 @@ void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
apa102_end_frame(num_leds);
}
-// Overwrite the default rgblight_call_driver to use apa102 driver
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
- apa102_setleds(start_led, num_leds);
-}
-
void static apa102_init(void) {
setPinOutput(APA102_DI_PIN);
setPinOutput(APA102_CI_PIN);
diff --git a/drivers/led/apa102.h b/drivers/led/apa102.h
index cd0a19d445..e3b269883d 100644
--- a/drivers/led/apa102.h
+++ b/drivers/led/apa102.h
@@ -19,6 +19,12 @@
#include "color.h"
+#if defined(RGBLIGHT_APA102)
+# define APA102_LED_COUNT RGBLIGHT_LED_COUNT
+#elif defined(RGB_MATRIX_APA102)
+# define APA102_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
#ifndef APA102_DEFAULT_BRIGHTNESS
# define APA102_DEFAULT_BRIGHTNESS 31
#endif
diff --git a/drivers/led/issi/is31fl3218-simple.c b/drivers/led/issi/is31fl3218-simple.c
index ce28c51d18..e58b7d8bc0 100644
--- a/drivers/led/issi/is31fl3218-simple.c
+++ b/drivers/led/issi/is31fl3218-simple.c
@@ -28,8 +28,7 @@
# define IS31FL3218_I2C_PERSISTENCE 0
#endif
-// Reusable buffer for transfers
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining.
uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT];
@@ -39,27 +38,27 @@ uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0};
bool g_led_control_registers_update_required = false;
void is31fl3218_write_register(uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3218_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
#endif
}
void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
- g_twi_transfer_buffer[0] = IS31FL3218_REG_PWM;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);
+ i2c_transfer_buffer[0] = IS31FL3218_REG_PWM;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer, 18);
#if IS31FL3218_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
}
#else
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
#endif
}
diff --git a/drivers/led/issi/is31fl3218-simple.h b/drivers/led/issi/is31fl3218-simple.h
index 9492817809..e0a71f1387 100644
--- a/drivers/led/issi/is31fl3218-simple.h
+++ b/drivers/led/issi/is31fl3218-simple.h
@@ -43,6 +43,8 @@ extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];
void is31fl3218_init(void);
+void is31fl3218_write_register(uint8_t reg, uint8_t data);
+
void is31fl3218_set_value(int index, uint8_t value);
void is31fl3218_set_value_all(uint8_t value);
diff --git a/drivers/led/issi/is31fl3218.c b/drivers/led/issi/is31fl3218.c
index 39db09d518..9bfdc9c44d 100644
--- a/drivers/led/issi/is31fl3218.c
+++ b/drivers/led/issi/is31fl3218.c
@@ -28,8 +28,7 @@
# define IS31FL3218_I2C_PERSISTENCE 0
#endif
-// Reusable buffer for transfers
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining.
uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT];
@@ -39,27 +38,27 @@ uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0};
bool g_led_control_registers_update_required = false;
void is31fl3218_write_register(uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3218_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
#endif
}
void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
- g_twi_transfer_buffer[0] = IS31FL3218_REG_PWM;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);
+ i2c_transfer_buffer[0] = IS31FL3218_REG_PWM;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer, 18);
#if IS31FL3218_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
}
#else
- i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
#endif
}
diff --git a/drivers/led/issi/is31fl3218.h b/drivers/led/issi/is31fl3218.h
index ffa7f36d61..13916ffaf1 100644
--- a/drivers/led/issi/is31fl3218.h
+++ b/drivers/led/issi/is31fl3218.h
@@ -45,6 +45,8 @@ extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];
void is31fl3218_init(void);
+void is31fl3218_write_register(uint8_t reg, uint8_t data);
+
void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31fl3731-simple.c b/drivers/led/issi/is31fl3731-simple.c
index 8dbfc3cd31..14743717d4 100644
--- a/drivers/led/issi/is31fl3731-simple.c
+++ b/drivers/led/issi/is31fl3731-simple.c
@@ -33,8 +33,7 @@
# define IS31FL3731_I2C_PERSISTENCE 0
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3731 PWM registers 0x24-0xB3.
// Storing them like this is optimal for I2C transfers to the registers.
@@ -48,41 +47,45 @@ uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3731_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) {
break;
}
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}
+void is31fl3731_select_page(uint8_t addr, uint8_t page) {
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, page);
+}
+
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes bank is already selected
+ // assumes page 0 is already selected
// transmit PWM registers in 9 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
- g_twi_transfer_buffer[0] = 0x24 + i;
+ i2c_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3731_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
#endif
}
}
@@ -123,8 +126,7 @@ void is31fl3731_init(uint8_t addr) {
// then set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // select "function register" bank
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION);
// enable software shutdown
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00);
@@ -142,8 +144,7 @@ void is31fl3731_init(uint8_t addr) {
// audio sync off
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00);
- // select bank 0
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1);
// turn off all LEDs in the LED control register
for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
@@ -160,16 +161,15 @@ void is31fl3731_init(uint8_t addr) {
is31fl3731_write_register(addr, i, 0x00);
}
- // select "function register" bank
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION);
// disable software shutdown
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01);
- // select bank 0 and leave it selected.
- // most usage after initialization is just writing PWM buffers in bank 0
+ // select page 0 and leave it selected.
+ // most usage after initialization is just writing PWM buffers in page 0
// as there's not much point in double-buffering
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1);
}
void is31fl3731_set_value(int index, uint8_t value) {
diff --git a/drivers/led/issi/is31fl3731-simple.h b/drivers/led/issi/is31fl3731-simple.h
index 4d173847dd..ff970a3e5e 100644
--- a/drivers/led/issi/is31fl3731-simple.h
+++ b/drivers/led/issi/is31fl3731-simple.h
@@ -103,6 +103,7 @@ extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];
void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3731_select_page(uint8_t addr, uint8_t page);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3731_set_value(int index, uint8_t value);
diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c
index 1ab8997731..9a7d0b5eca 100644
--- a/drivers/led/issi/is31fl3731.c
+++ b/drivers/led/issi/is31fl3731.c
@@ -32,8 +32,7 @@
# define IS31FL3731_I2C_PERSISTENCE 0
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3731 PWM registers 0x24-0xB3.
// Storing them like this is optimal for I2C transfers to the registers.
@@ -47,39 +46,43 @@ uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3731_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}
+void is31fl3731_select_page(uint8_t addr, uint8_t page) {
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, page);
+}
+
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes bank is already selected
+ // assumes page 0 is already selected
// transmit PWM registers in 9 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
- g_twi_transfer_buffer[0] = 0x24 + i;
+ i2c_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3731_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
#endif
}
}
@@ -120,8 +123,7 @@ void is31fl3731_init(uint8_t addr) {
// then set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // select "function register" bank
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION);
// enable software shutdown
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00);
@@ -139,8 +141,7 @@ void is31fl3731_init(uint8_t addr) {
// audio sync off
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00);
- // select bank 0
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1);
// turn off all LEDs in the LED control register
for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
@@ -157,16 +158,15 @@ void is31fl3731_init(uint8_t addr) {
is31fl3731_write_register(addr, i, 0x00);
}
- // select "function register" bank
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION);
// disable software shutdown
is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01);
- // select bank 0 and leave it selected.
- // most usage after initialization is just writing PWM buffers in bank 0
+ // select page 0 and leave it selected.
+ // most usage after initialization is just writing PWM buffers in page 0
// as there's not much point in double-buffering
- is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
+ is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1);
}
void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
diff --git a/drivers/led/issi/is31fl3731.h b/drivers/led/issi/is31fl3731.h
index b45cb2b07d..f125fbc64f 100644
--- a/drivers/led/issi/is31fl3731.h
+++ b/drivers/led/issi/is31fl3731.h
@@ -104,6 +104,7 @@ extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];
void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3731_select_page(uint8_t addr, uint8_t page);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31fl3733-simple.c b/drivers/led/issi/is31fl3733-simple.c
index 9f2444c253..805905ebc2 100644
--- a/drivers/led/issi/is31fl3733-simple.c
+++ b/drivers/led/issi/is31fl3733-simple.c
@@ -63,11 +63,10 @@
# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3733 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
@@ -80,45 +79,50 @@ bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT]
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
+void is31fl3733_select_page(uint8_t addr, uint8_t page) {
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, page);
+}
+
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
+ // Assumes page 1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -163,32 +167,23 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
// then disable software shutdown.
// Sync is passed so set it according to the datasheet.
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM);
- // Select PG1
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_FUNCTION);
- // Select PG3
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -239,11 +234,9 @@ void is31fl3733_set_led_control_register(uint8_t index, bool value) {
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM);
- // If any of the transactions fail we risk writing dirty PG0,
+ // If any of the transactions fail we risk writing dirty page 0,
// refresh page 0 just in case.
if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
g_led_control_registers_update_required[index] = true;
@@ -254,9 +247,8 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3733-simple.h b/drivers/led/issi/is31fl3733-simple.h
index c37b1fe5f2..dcb33e448f 100644
--- a/drivers/led/issi/is31fl3733-simple.h
+++ b/drivers/led/issi/is31fl3733-simple.h
@@ -117,6 +117,7 @@ extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3733_select_page(uint8_t addr, uint8_t page);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3733_set_value(int index, uint8_t value);
diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c
index 5857a800d7..f7162a0ce5 100644
--- a/drivers/led/issi/is31fl3733.c
+++ b/drivers/led/issi/is31fl3733.c
@@ -62,11 +62,10 @@
# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3733 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
@@ -79,45 +78,50 @@ bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT]
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
+void is31fl3733_select_page(uint8_t addr, uint8_t page) {
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, page);
+}
+
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
+ // Assumes page 1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -162,32 +166,23 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
// then disable software shutdown.
// Sync is passed so set it according to the datasheet.
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM);
- // Select PG1
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_FUNCTION);
- // Select PG3
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -254,11 +249,9 @@ void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM);
- // If any of the transactions fail we risk writing dirty PG0,
+ // If any of the transactions fail we risk writing dirty page 0,
// refresh page 0 just in case.
if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
g_led_control_registers_update_required[index] = true;
@@ -269,9 +262,8 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3733.h b/drivers/led/issi/is31fl3733.h
index 20804b016b..907b9669c6 100644
--- a/drivers/led/issi/is31fl3733.h
+++ b/drivers/led/issi/is31fl3733.h
@@ -142,6 +142,7 @@ extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3733_select_page(uint8_t addr, uint8_t page);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31fl3736-simple.c b/drivers/led/issi/is31fl3736-simple.c
index e1cce3c48a..ac5e0fb453 100644
--- a/drivers/led/issi/is31fl3736-simple.c
+++ b/drivers/led/issi/is31fl3736-simple.c
@@ -47,11 +47,10 @@
# define IS31FL3736_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3736 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's
@@ -63,38 +62,43 @@ uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false};
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3736_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
#endif
}
+void is31fl3736_select_page(uint8_t addr, uint8_t page) {
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, page);
+}
+
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes PG1 is already selected
+ // assumes page 1 is already selected
// transmit PWM registers in 12 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3736_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
#endif
}
}
@@ -135,32 +139,23 @@ void is31fl3736_init(uint8_t addr) {
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
- // Select PG1
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_FUNCTION);
- // Select PG3
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -217,9 +212,7 @@ void is31fl3736_set_led_control_register(uint8_t index, bool value) {
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
g_pwm_buffer_update_required[index] = false;
@@ -228,9 +221,8 @@ void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3736-simple.h b/drivers/led/issi/is31fl3736-simple.h
index a73a872545..5e80eb646a 100644
--- a/drivers/led/issi/is31fl3736-simple.h
+++ b/drivers/led/issi/is31fl3736-simple.h
@@ -112,6 +112,7 @@ extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT];
void is31fl3736_init_drivers(void);
void is31fl3736_init(uint8_t addr);
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3736_select_page(uint8_t addr, uint8_t page);
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3736_set_value(int index, uint8_t value);
diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c
index 30ab796f3e..384b815850 100644
--- a/drivers/led/issi/is31fl3736.c
+++ b/drivers/led/issi/is31fl3736.c
@@ -47,11 +47,10 @@
# define IS31FL3736_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3736 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's
@@ -63,38 +62,43 @@ uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false};
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3736_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
#endif
}
+void is31fl3736_select_page(uint8_t addr, uint8_t page) {
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, page);
+}
+
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes PG1 is already selected
+ // assumes page 1 is already selected
// transmit PWM registers in 12 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3736_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
#endif
}
}
@@ -135,32 +139,23 @@ void is31fl3736_init(uint8_t addr) {
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_REG_LED_CONTROL);
- // Select PG0
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_REG_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITELOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
- // Select PG1
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_FUNCTION);
- // Select PG3
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -234,9 +229,7 @@ void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM);
is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
g_pwm_buffer_update_required[index] = false;
@@ -245,9 +238,8 @@ void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
+ is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3736.h b/drivers/led/issi/is31fl3736.h
index a5710d7ed4..5f0b11e46a 100644
--- a/drivers/led/issi/is31fl3736.h
+++ b/drivers/led/issi/is31fl3736.h
@@ -126,6 +126,7 @@ extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT];
void is31fl3736_init_drivers(void);
void is31fl3736_init(uint8_t addr);
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3736_select_page(uint8_t addr, uint8_t page);
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31fl3737-simple.c b/drivers/led/issi/is31fl3737-simple.c
index 7f641f4ca5..967a102b48 100644
--- a/drivers/led/issi/is31fl3737-simple.c
+++ b/drivers/led/issi/is31fl3737-simple.c
@@ -49,11 +49,10 @@
# define IS31FL3737_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3737 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
@@ -66,38 +65,43 @@ uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false};
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3737_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
#endif
}
+void is31fl3737_select_page(uint8_t addr, uint8_t page) {
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, page);
+}
+
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes PG1 is already selected
+ // assumes page 1 is already selected
// transmit PWM registers in 12 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3737_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
#endif
}
}
@@ -138,32 +142,23 @@ void is31fl3737_init(uint8_t addr) {
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
- // Select PG1
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_FUNCTION);
- // Select PG3
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -214,9 +209,7 @@ void is31fl3737_set_led_control_register(uint8_t index, bool value) {
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
g_pwm_buffer_update_required[index] = false;
@@ -225,9 +218,8 @@ void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3737-simple.h b/drivers/led/issi/is31fl3737-simple.h
index 2658702b1b..a11d2ef423 100644
--- a/drivers/led/issi/is31fl3737-simple.h
+++ b/drivers/led/issi/is31fl3737-simple.h
@@ -102,6 +102,7 @@ extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT];
void is31fl3737_init_drivers(void);
void is31fl3737_init(uint8_t addr);
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3737_select_page(uint8_t addr, uint8_t page);
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3737_set_value(int index, uint8_t value);
diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c
index a458431952..76d17c2b84 100644
--- a/drivers/led/issi/is31fl3737.c
+++ b/drivers/led/issi/is31fl3737.c
@@ -49,11 +49,10 @@
# define IS31FL3737_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3737 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
@@ -66,38 +65,43 @@ uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_
bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false};
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3737_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
#endif
}
+void is31fl3737_select_page(uint8_t addr, uint8_t page) {
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, page);
+}
+
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes PG1 is already selected
+ // assumes page 1 is already selected
// transmit PWM registers in 12 transfers of 16 bytes
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16);
#if IS31FL3737_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
#endif
}
}
@@ -138,32 +142,23 @@ void is31fl3737_init(uint8_t addr) {
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
- // Select PG1
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_FUNCTION);
- // Select PG3
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -230,9 +225,7 @@ void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM);
is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
g_pwm_buffer_update_required[index] = false;
@@ -241,9 +234,8 @@ void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
+ is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3737.h b/drivers/led/issi/is31fl3737.h
index 8de3bf4ef5..a707808b51 100644
--- a/drivers/led/issi/is31fl3737.h
+++ b/drivers/led/issi/is31fl3737.h
@@ -119,6 +119,7 @@ extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT];
void is31fl3737_init_drivers(void);
void is31fl3737_init(uint8_t addr);
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3737_select_page(uint8_t addr, uint8_t page);
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31fl3741-simple.c b/drivers/led/issi/is31fl3741-simple.c
index f7009853ba..db245af4da 100644
--- a/drivers/led/issi/is31fl3741-simple.c
+++ b/drivers/led/issi/is31fl3741-simple.c
@@ -52,11 +52,10 @@
# define IS31FL3741_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20] = {0xFF};
+uint8_t i2c_transfer_buffer[20] = {0xFF};
// These buffers match the IS31FL3741 and IS31FL3741A PWM registers.
-// The scaling buffers match the PG2 and PG3 LED On/Off registers.
+// The scaling buffers match the page 2 and 3 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's
@@ -68,56 +67,59 @@ bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false};
uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
#endif
}
+void is31fl3741_select_page(uint8_t addr, uint8_t page) {
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, page);
+}
+
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assume PG0 is already selected
+ // Assume page 0 is already selected
for (int i = 0; i < 342; i += 18) {
if (i == 180) {
- // unlock the command register and select PG1
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_1);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_1);
}
- g_twi_transfer_buffer[0] = i % 180;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
+ i2c_transfer_buffer[0] = i % 180;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 18);
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
}
// transfer the left cause the total number is 351
- g_twi_transfer_buffer[0] = 162;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
+ i2c_transfer_buffer[0] = 162;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + 342, 9);
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -162,11 +164,7 @@ void is31fl3741_init(uint8_t addr) {
// then disable software shutdown.
// Unlock the command register.
- // Unlock the command register.
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
-
- // Select PG4
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_FUNCTION);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_FUNCTION);
// Set to Normal operation
is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION);
@@ -218,9 +216,7 @@ void is31fl3741_set_led_control_register(uint8_t index, bool value) {
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // unlock the command register and select PG2
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_0);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0);
is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
}
@@ -236,20 +232,16 @@ void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) {
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_scaling_registers_update_required[index]) {
- // unlock the command register and select PG2
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_0);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_0);
- // CS1_SW1 to CS30_SW6 are on PG2
+ // CS1_SW1 to CS30_SW6 are on page 2
for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
is31fl3741_write_register(addr, i, g_scaling_registers[index][i]);
}
- // unlock the command register and select PG3
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_1);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_1);
- // CS1_SW7 to CS39_SW9 are on PG3
+ // CS1_SW7 to CS39_SW9 are on page 3
for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3741-simple.h b/drivers/led/issi/is31fl3741-simple.h
index 34608a37e0..462543a5bb 100644
--- a/drivers/led/issi/is31fl3741-simple.h
+++ b/drivers/led/issi/is31fl3741-simple.h
@@ -104,6 +104,7 @@ extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT];
void is31fl3741_init_drivers(void);
void is31fl3741_init(uint8_t addr);
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3741_select_page(uint8_t addr, uint8_t page);
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3741_set_value(int index, uint8_t value);
diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c
index efcfa77b46..0575f31254 100644
--- a/drivers/led/issi/is31fl3741.c
+++ b/drivers/led/issi/is31fl3741.c
@@ -52,11 +52,10 @@
# define IS31FL3741_GLOBAL_CURRENT 0xFF
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20] = {0xFF};
+uint8_t i2c_transfer_buffer[20] = {0xFF};
// These buffers match the IS31FL3741 and IS31FL3741A PWM registers.
-// The scaling buffers match the PG2 and PG3 LED On/Off registers.
+// The scaling buffers match the page 2 and 3 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's
@@ -68,56 +67,59 @@ bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false};
uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
#endif
}
+void is31fl3741_select_page(uint8_t addr, uint8_t page) {
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, page);
+}
+
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assume PG0 is already selected
+ // Assume page 0 is already selected
for (int i = 0; i < 342; i += 18) {
if (i == 180) {
- // unlock the command register and select PG1
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_1);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_1);
}
- g_twi_transfer_buffer[0] = i % 180;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
+ i2c_transfer_buffer[0] = i % 180;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 18);
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
}
// transfer the left cause the total number is 351
- g_twi_transfer_buffer[0] = 162;
- memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
+ i2c_transfer_buffer[0] = 162;
+ memcpy(i2c_transfer_buffer + 1, pwm_buffer + 342, 9);
#if IS31FL3741_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -162,11 +164,7 @@ void is31fl3741_init(uint8_t addr) {
// then disable software shutdown.
// Unlock the command register.
- // Unlock the command register.
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
-
- // Select PG4
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_FUNCTION);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_FUNCTION);
// Set to Normal operation
is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION);
@@ -232,9 +230,7 @@ void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // unlock the command register and select PG2
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_0);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0);
is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
}
@@ -252,20 +248,16 @@ void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t red, uint8_
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_scaling_registers_update_required[index]) {
- // unlock the command register and select PG2
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_0);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_0);
- // CS1_SW1 to CS30_SW6 are on PG2
+ // CS1_SW1 to CS30_SW6 are on page 2
for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
is31fl3741_write_register(addr, i, g_scaling_registers[index][i]);
}
- // unlock the command register and select PG3
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_1);
+ is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_1);
- // CS1_SW7 to CS39_SW9 are on PG3
+ // CS1_SW7 to CS39_SW9 are on page 3
for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]);
}
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
index 6466696b60..5151d81c37 100644
--- a/drivers/led/issi/is31fl3741.h
+++ b/drivers/led/issi/is31fl3741.h
@@ -121,6 +121,7 @@ extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT];
void is31fl3741_init_drivers(void);
void is31fl3741_init(uint8_t addr);
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3741_select_page(uint8_t addr, uint8_t page);
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/led/issi/is31flcommon.c b/drivers/led/issi/is31flcommon.c
index d6b9bce93d..048db286b6 100644
--- a/drivers/led/issi/is31flcommon.c
+++ b/drivers/led/issi/is31flcommon.c
@@ -31,8 +31,7 @@
# define ISSI_PERSISTENCE 0
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the PWM & scaling registers.
// Storing them like this is optimal for I2C transfers to the registers.
@@ -45,15 +44,15 @@ bool g_scaling_buffer_update_required[DRIVER_COUNT] = {false};
// For writing of single register entry
void IS31FL_write_single_register(uint8_t addr, uint8_t reg, uint8_t data) {
// Set register address and register data ready to write
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, i2c_transfer_buffer, 2, ISSI_TIMEOUT);
#endif
}
@@ -64,18 +63,18 @@ bool IS31FL_write_multi_registers(uint8_t addr, uint8_t *source_buffer, uint8_t
// Split the buffer into chunks to transfer
for (int i = 0; i < buffer_size; i += transfer_size) {
// Set the first entry of transfer buffer to the first register we want to write
- g_twi_transfer_buffer[0] = i + start_reg_addr;
+ i2c_transfer_buffer[0] = i + start_reg_addr;
// Copy the section of our source buffer into the transfer buffer after first register address
- memcpy(g_twi_transfer_buffer + 1, source_buffer + i, transfer_size);
+ memcpy(i2c_transfer_buffer + 1, source_buffer + i, transfer_size);
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) {
return false;
}
#endif
diff --git a/drivers/led/snled27351-simple.c b/drivers/led/snled27351-simple.c
index b2054c96d5..7b7a82f90f 100644
--- a/drivers/led/snled27351-simple.c
+++ b/drivers/led/snled27351-simple.c
@@ -37,8 +37,7 @@
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the SNLED27351 PWM registers.
// The control buffers match the PG0 LED On/Off registers.
@@ -54,47 +53,51 @@ bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT]
bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if SNLED27351_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
+void snled27351_select_page(uint8_t addr, uint8_t page) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, page);
+}
+
bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// Assumes PG1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (int j = 0; j < 16; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ i2c_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if SNLED27351_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -133,8 +136,8 @@ void snled27351_init_drivers(void) {
}
void snled27351_init(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to shutdown mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
// Setting internal channel pulldown/pullup
@@ -147,33 +150,35 @@ void snled27351_init(uint8_t addr) {
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE);
// Setting Iref
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0);
- // Set LED CONTROL PAGE (Page 0)
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
snled27351_write_register(addr, i, 0x00);
}
- // Set PWM PAGE (Page 1)
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ snled27351_select_page(addr, SNLED27351_COMMAND_PWM);
+
for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
snled27351_write_register(addr, i, 0x00);
}
- // Set CURRENT PAGE (Page 4)
+ snled27351_select_page(addr, SNLED27351_COMMAND_CURRENT_TUNE);
+
uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE;
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_CURRENT_TUNE);
for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
snled27351_write_register(addr, i, current_tune_reg_list[i]);
}
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
// Enable LEDs ON/OFF
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
snled27351_write_register(addr, i, 0xFF);
}
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to normal mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
}
@@ -215,7 +220,7 @@ void snled27351_set_led_control_register(uint8_t index, bool value) {
void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ snled27351_select_page(addr, SNLED27351_COMMAND_PWM);
// If any of the transactions fail we risk writing dirty PG0,
// refresh page 0 just in case.
@@ -228,7 +233,8 @@ void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
snled27351_write_register(addr, i, g_led_control_registers[index][i]);
}
@@ -250,15 +256,15 @@ void snled27351_flush(void) {
}
void snled27351_sw_return_normal(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to normal mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
}
void snled27351_sw_shutdown(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to shutdown mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
// Write SW Sleep Register
diff --git a/drivers/led/snled27351-simple.h b/drivers/led/snled27351-simple.h
index 2fc62a6f0a..0a4d2469f0 100644
--- a/drivers/led/snled27351-simple.h
+++ b/drivers/led/snled27351-simple.h
@@ -155,6 +155,7 @@ extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT];
void snled27351_init_drivers(void);
void snled27351_init(uint8_t addr);
+void snled27351_select_page(uint8_t addr, uint8_t page);
bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
diff --git a/drivers/led/snled27351.c b/drivers/led/snled27351.c
index 71992b7322..d985e4c5f1 100644
--- a/drivers/led/snled27351.c
+++ b/drivers/led/snled27351.c
@@ -37,8 +37,7 @@
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[65];
+uint8_t i2c_transfer_buffer[65];
// These buffers match the SNLED27351 PWM registers.
// The control buffers match the PG0 LED On/Off registers.
@@ -54,23 +53,27 @@ bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT]
bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if SNLED27351_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
+void snled27351_select_page(uint8_t addr, uint8_t page) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, page);
+}
+
bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// Assumes PG1 is already selected.
// If any of the transactions fails function returns false.
@@ -78,22 +81,22 @@ bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// Iterate over the pwm_buffer contents at 64 byte intervals.
for (uint8_t i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 64) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// Copy the data from i to i+63.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (uint8_t j = 0; j < 64; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ i2c_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if SNLED27351_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, i2c_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -132,8 +135,8 @@ void snled27351_init_drivers(void) {
}
void snled27351_init(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to shutdown mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
// Setting internal channel pulldown/pullup
@@ -146,33 +149,34 @@ void snled27351_init(uint8_t addr) {
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE);
// Setting Iref
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0);
- // Set LED CONTROL PAGE (Page 0)
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
snled27351_write_register(addr, i, 0x00);
}
- // Set PWM PAGE (Page 1)
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ snled27351_select_page(addr, SNLED27351_COMMAND_PWM);
+
for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
snled27351_write_register(addr, i, 0x00);
}
- // Set CURRENT PAGE (Page 4)
+ snled27351_select_page(addr, SNLED27351_COMMAND_CURRENT_TUNE);
+
uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE;
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_CURRENT_TUNE);
for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
snled27351_write_register(addr, i, current_tune_reg_list[i]);
}
- // Enable LEDs ON/OFF
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
snled27351_write_register(addr, i, 0xFF);
}
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to normal mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
}
@@ -230,7 +234,7 @@ void snled27351_set_led_control_register(uint8_t index, bool red, bool green, bo
void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ snled27351_select_page(addr, SNLED27351_COMMAND_PWM);
// If any of the transactions fail we risk writing dirty PG0,
// refresh page 0 just in case.
@@ -243,7 +247,8 @@ void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL);
+
for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
snled27351_write_register(addr, i, g_led_control_registers[index][i]);
}
@@ -265,15 +270,15 @@ void snled27351_flush(void) {
}
void snled27351_sw_return_normal(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to normal mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
}
void snled27351_sw_shutdown(uint8_t addr) {
- // Select to function page
- snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION);
+
// Setting LED driver to shutdown mode
snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
// Write SW Sleep Register
diff --git a/drivers/led/snled27351.h b/drivers/led/snled27351.h
index 77337f177b..8260df1ce1 100644
--- a/drivers/led/snled27351.h
+++ b/drivers/led/snled27351.h
@@ -169,6 +169,7 @@ extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT];
void snled27351_init_drivers(void);
void snled27351_init(uint8_t addr);
+void snled27351_select_page(uint8_t addr, uint8_t page);
bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
diff --git a/drivers/painter/sh1106/qp_sh1106.c b/drivers/painter/sh1106/qp_sh1106.c
index 7cb6e398fa..4117115aec 100644
--- a/drivers/painter/sh1106/qp_sh1106.c
+++ b/drivers/painter/sh1106/qp_sh1106.c
@@ -44,7 +44,7 @@ __attribute__((weak)) bool qp_sh1106_init(painter_device_t device, painter_rotat
}
// clang-format off
- const uint8_t sh1106_init_sequence[] = {
+ uint8_t sh1106_init_sequence[] = {
// Command, Delay, N, Data[N]
SH1106_SET_MUX_RATIO, 0, 1, 0x3F,
SH1106_DISPLAY_OFFSET, 0, 1, 0x00,
@@ -61,6 +61,16 @@ __attribute__((weak)) bool qp_sh1106_init(painter_device_t device, painter_rotat
};
// clang-format on
+ // If the display height is anything other than the default 64 pixels, change SH1106_SET_MUX_RATIO data byte to the correct value
+ if (driver->oled.base.panel_height != 64) {
+ sh1106_init_sequence[3] = driver->oled.base.panel_height - 1;
+ }
+
+ // For 128x32 or 96x16 displays, change SH1106_COM_PADS_HW_CFG data byte from alternative (0x12) to sequential (0x02) configuration
+ if (driver->oled.base.panel_height <= 32) {
+ sh1106_init_sequence[20] = 0x02;
+ }
+
qp_comms_bulk_command_sequence(device, sh1106_init_sequence, sizeof(sh1106_init_sequence));
return true;
}
@@ -203,4 +213,4 @@ painter_device_t qp_sh1106_make_i2c_device(uint16_t panel_width, uint16_t panel_
return NULL;
}
-#endif // QUANTUM_PAINTER_SH1106_SPI_ENABLE
+#endif // QUANTUM_PAINTER_SH1106_I2C_ENABLE
diff --git a/drivers/painter/sh1106/qp_sh1106_opcodes.h b/drivers/painter/sh1106/qp_sh1106_opcodes.h
index a2e100d770..bf86ba4c2c 100644
--- a/drivers/painter/sh1106/qp_sh1106_opcodes.h
+++ b/drivers/painter/sh1106/qp_sh1106_opcodes.h
@@ -16,7 +16,7 @@
#define SH1106_COM_PADS_HW_CFG 0xDA
#define SH1106_SET_CONTRAST 0x81
#define SH1106_SET_PRECHARGE_PERIOD 0xD9
-#define SH1106_VCOM_DETECT 0xDB
+#define SH1106_VCOM_DESELECT_LEVEL 0xDB
#define SH1106_ALL_ON_RESUME 0xA4
#define SH1106_NON_INVERTING_DISPLAY 0xA6
#define SH1106_DEACTIVATE_SCROLL 0x2E
diff --git a/drivers/sensors/analog_joystick.c b/drivers/sensors/analog_joystick.c
index 12256a8e7a..4aede4eacd 100644
--- a/drivers/sensors/analog_joystick.c
+++ b/drivers/sensors/analog_joystick.c
@@ -22,17 +22,28 @@
#include <stdlib.h>
// Set Parameters
+#ifndef ANALOG_JOYSTICK_AUTO_AXIS
uint16_t minAxisValue = ANALOG_JOYSTICK_AXIS_MIN;
uint16_t maxAxisValue = ANALOG_JOYSTICK_AXIS_MAX;
+#else
+int16_t minAxisValues[2];
+int16_t maxAxisValues[2];
+#endif
uint8_t maxCursorSpeed = ANALOG_JOYSTICK_SPEED_MAX;
uint8_t speedRegulator = ANALOG_JOYSTICK_SPEED_REGULATOR; // Lower Values Create Faster Movement
+#ifdef ANALOG_JOYSTICK_WEIGHTS
+int8_t weights[101] = ANALOG_JOYSTICK_WEIGHTS;
+#endif
+
int16_t xOrigin, yOrigin;
uint16_t lastCursor = 0;
-int16_t axisCoordinate(pin_t pin, uint16_t origin) {
+uint8_t prevValues[2] = {0, 0};
+
+int16_t axisCoordinate(pin_t pin, uint16_t origin, uint8_t axis) {
int8_t direction;
int16_t distanceFromOrigin;
int16_t range;
@@ -43,12 +54,27 @@ int16_t axisCoordinate(pin_t pin, uint16_t origin) {
return 0;
} else if (origin > position) {
distanceFromOrigin = origin - position;
- range = origin - minAxisValue;
- direction = -1;
+#ifdef ANALOG_JOYSTICK_AUTO_AXIS
+ if (position < minAxisValues[axis]) {
+ minAxisValues[axis] = position;
+ }
+ range = origin - minAxisValues[axis];
+#else
+ range = origin - minAxisValue;
+#endif
+ direction = -1;
} else {
distanceFromOrigin = position - origin;
- range = maxAxisValue - origin;
- direction = 1;
+
+#ifdef ANALOG_JOYSTICK_AUTO_AXIS
+ if (position > maxAxisValues[axis]) {
+ maxAxisValues[axis] = position;
+ }
+ range = maxAxisValues[axis] - origin;
+#else
+ range = maxAxisValue - origin;
+#endif
+ direction = 1;
}
float percent = (float)distanceFromOrigin / range;
@@ -62,14 +88,29 @@ int16_t axisCoordinate(pin_t pin, uint16_t origin) {
}
}
-int8_t axisToMouseComponent(pin_t pin, int16_t origin, uint8_t maxSpeed) {
- int16_t coordinate = axisCoordinate(pin, origin);
+int8_t axisToMouseComponent(pin_t pin, int16_t origin, uint8_t maxSpeed, uint8_t axis) {
+ int16_t coordinate = axisCoordinate(pin, origin, axis);
+ int8_t result;
+#ifndef ANALOG_JOYSTICK_WEIGHTS
if (coordinate != 0) {
float percent = (float)coordinate / 100;
- return percent * maxCursorSpeed * (abs(coordinate) / speedRegulator);
+ result = percent * maxCursorSpeed * (abs(coordinate) / speedRegulator);
} else {
return 0;
}
+#else
+ result = weights[abs(coordinate)] * (coordinate < 0 ? -1 : 1) * maxCursorSpeed / speedRegulator;
+#endif
+
+#ifdef ANALOG_JOYSTICK_CUTOFF
+ uint8_t pv = prevValues[axis];
+ prevValues[axis] = abs(result);
+ if (pv > abs(result)) {
+ return 0;
+ }
+#endif
+
+ return result;
}
report_analog_joystick_t analog_joystick_read(void) {
@@ -77,8 +118,8 @@ report_analog_joystick_t analog_joystick_read(void) {
if (timer_elapsed(lastCursor) > ANALOG_JOYSTICK_READ_INTERVAL) {
lastCursor = timer_read();
- report.x = axisToMouseComponent(ANALOG_JOYSTICK_X_AXIS_PIN, xOrigin, maxCursorSpeed);
- report.y = axisToMouseComponent(ANALOG_JOYSTICK_Y_AXIS_PIN, yOrigin, maxCursorSpeed);
+ report.x = axisToMouseComponent(ANALOG_JOYSTICK_X_AXIS_PIN, xOrigin, maxCursorSpeed, 0);
+ report.y = axisToMouseComponent(ANALOG_JOYSTICK_Y_AXIS_PIN, yOrigin, maxCursorSpeed, 1);
}
#ifdef ANALOG_JOYSTICK_CLICK_PIN
report.button = !readPin(ANALOG_JOYSTICK_CLICK_PIN);
@@ -93,4 +134,11 @@ void analog_joystick_init(void) {
// Account for drift
xOrigin = analogReadPin(ANALOG_JOYSTICK_X_AXIS_PIN);
yOrigin = analogReadPin(ANALOG_JOYSTICK_Y_AXIS_PIN);
+
+#ifdef ANALOG_JOYSTICK_AUTO_AXIS
+ minAxisValues[0] = xOrigin - 100;
+ minAxisValues[1] = yOrigin - 100;
+ maxAxisValues[0] = xOrigin + 100;
+ maxAxisValues[1] = yOrigin + 100;
+#endif
}
diff --git a/drivers/sensors/cirque_pinnacle.c b/drivers/sensors/cirque_pinnacle.c
index 3131805c20..b5c1abdebc 100644
--- a/drivers/sensors/cirque_pinnacle.c
+++ b/drivers/sensors/cirque_pinnacle.c
@@ -216,6 +216,13 @@ void cirque_pinnacle_cursor_smoothing(bool enable) {
RAP_Write(HOSTREG__FEEDCONFIG3, feedconfig3);
}
+// Check sensor is connected
+bool cirque_pinnacle_connected(void) {
+ uint8_t zidle = 0;
+ RAP_ReadBytes(HOSTREG__ZIDLE, &zidle, 1);
+ return zidle == HOSTREG__ZIDLE_DEFVAL;
+}
+
/* Pinnacle-based TM040040/TM035035/TM023023 Functions */
void cirque_pinnacle_init(void) {
#if defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi)
@@ -274,6 +281,10 @@ void cirque_pinnacle_init(void) {
}
cirque_pinnacle_enable_feed(true);
+
+#ifndef CIRQUE_PINNACLE_SKIP_SENSOR_CHECK
+ touchpad_init = cirque_pinnacle_connected();
+#endif
}
pinnacle_data_t cirque_pinnacle_read_data(void) {
diff --git a/drivers/ws2812.h b/drivers/ws2812.h
index 1527df23d3..134de51c50 100644
--- a/drivers/ws2812.h
+++ b/drivers/ws2812.h
@@ -56,9 +56,9 @@
# define WS2812_TRST_US 280
#endif
-#if defined(RGBLED_NUM)
-# define WS2812_LED_COUNT RGBLED_NUM
-#elif defined(RGB_MATRIX_LED_COUNT)
+#if defined(RGBLIGHT_WS2812)
+# define WS2812_LED_COUNT RGBLIGHT_LED_COUNT
+#elif defined(RGB_MATRIX_WS2812)
# define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT
#endif
diff --git a/keyboards/1k/keymaps/default/rgblite.h b/keyboards/1k/keymaps/default/rgblite.h
index 29d684ac08..9a7761e30d 100644
--- a/keyboards/1k/keymaps/default/rgblite.h
+++ b/keyboards/1k/keymaps/default/rgblite.h
@@ -7,8 +7,8 @@
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
- rgb_led_t leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
- ws2812_setleds(leds, RGBLED_NUM);
+ rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
+ ws2812_setleds(leds, RGBLIGHT_LED_COUNT);
}
static void rgblite_increase_hue(void) {
diff --git a/keyboards/25keys/zinc/rev1/post_config.h b/keyboards/25keys/zinc/rev1/post_config.h
index 3d51de9e4c..42d2d7e46c 100644
--- a/keyboards/25keys/zinc/rev1/post_config.h
+++ b/keyboards/25keys/zinc/rev1/post_config.h
@@ -24,35 +24,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SPLIT
#ifdef RGBLED_BACK
#ifdef RGBLED_CONT
- #define RGBLED_NUM 48
+ #define RGBLIGHT_LED_COUNT 48
#define RGBLED_SPLIT { 24, 24 }
#else
- #define RGBLED_NUM 24
+ #define RGBLIGHT_LED_COUNT 24
#endif
#else
#ifdef RGBLED_BOTH
#ifdef RGBLED_CONT
- #define RGBLED_NUM 60
+ #define RGBLIGHT_LED_COUNT 60
#define RGBLED_SPLIT { 30, 30 }
#else
- #define RGBLED_NUM 30
+ #define RGBLIGHT_LED_COUNT 30
#endif
#else
#ifdef RGBLED_CONT
- #define RGBLED_NUM 12
+ #define RGBLIGHT_LED_COUNT 12
#define RGBLED_SPLIT { 6, 6 }
#else
- #define RGBLED_NUM 6
+ #define RGBLIGHT_LED_COUNT 6
#endif
#endif
#endif
#endif
#ifndef IOS_DEVICE_ENABLE
- #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12))
+ #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12))
#define RGBLIGHT_LIMIT_VAL 255
#else
- #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32))
+ #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32))
#define RGBLIGHT_LIMIT_VAL 130
#else
#define RGBLIGHT_LIMIT_VAL 120
@@ -60,10 +60,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
#define RGBLIGHT_VAL_STEP 17
#else
- #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12))
+ #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12))
#define RGBLIGHT_LIMIT_VAL 90
#else
- #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32))
+ #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32))
#define RGBLIGHT_LIMIT_VAL 45
#else
#define RGBLIGHT_LIMIT_VAL 35
diff --git a/keyboards/25keys/zinc/reva/post_config.h b/keyboards/25keys/zinc/reva/post_config.h
index 3d51de9e4c..42d2d7e46c 100644
--- a/keyboards/25keys/zinc/reva/post_config.h
+++ b/keyboards/25keys/zinc/reva/post_config.h
@@ -24,35 +24,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SPLIT
#ifdef RGBLED_BACK
#ifdef RGBLED_CONT
- #define RGBLED_NUM 48
+ #define RGBLIGHT_LED_COUNT 48
#define RGBLED_SPLIT { 24, 24 }
#else
- #define RGBLED_NUM 24
+ #define RGBLIGHT_LED_COUNT 24
#endif
#else
#ifdef RGBLED_BOTH
#ifdef RGBLED_CONT
- #define RGBLED_NUM 60
+ #define RGBLIGHT_LED_COUNT 60
#define RGBLED_SPLIT { 30, 30 }
#else
- #define RGBLED_NUM 30
+ #define RGBLIGHT_LED_COUNT 30
#endif
#else
#ifdef RGBLED_CONT
- #define RGBLED_NUM 12
+ #define RGBLIGHT_LED_COUNT 12
#define RGBLED_SPLIT { 6, 6 }
#else
- #define RGBLED_NUM 6
+ #define RGBLIGHT_LED_COUNT 6
#endif
#endif
#endif
#endif
#ifndef IOS_DEVICE_ENABLE
- #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12))
+ #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12))
#define RGBLIGHT_LIMIT_VAL 255
#else
- #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32))
+ #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32))
#define RGBLIGHT_LIMIT_VAL 130
#else
#define RGBLIGHT_LIMIT_VAL 120
@@ -60,10 +60,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
#define RGBLIGHT_VAL_STEP 17
#else
- #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12))
+ #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12))
#define RGBLIGHT_LIMIT_VAL 90
#else
- #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32))
+ #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32))
#define RGBLIGHT_LIMIT_VAL 45
#else
#define RGBLIGHT_LIMIT_VAL 35
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/rules.mk b/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
deleted file mode 100644
index 8b13789179..0000000000
--- a/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/keyboards/acheron/themis/87h/config.h b/keyboards/acheron/themis/87h/config.h
index 605594eea2..ed1229c779 100644
--- a/keyboards/acheron/themis/87h/config.h
+++ b/keyboards/acheron/themis/87h/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
-#define RGBLED_NUM 1
-
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
diff --git a/keyboards/acheron/themis/87h/info.json b/keyboards/acheron/themis/87h/info.json
index cbff8f4eec..0ef52a61a0 100644
--- a/keyboards/acheron/themis/87h/info.json
+++ b/keyboards/acheron/themis/87h/info.json
@@ -26,6 +26,9 @@
"backing_size": 8192
}
},
+ "rgblight": {
+ "led_count": 1
+ },
"ws2812": {
"pin": "B15"
},
diff --git a/keyboards/acheron/themis/87htsc/config.h b/keyboards/acheron/themis/87htsc/config.h
index 605594eea2..ed1229c779 100644
--- a/keyboards/acheron/themis/87htsc/config.h
+++ b/keyboards/acheron/themis/87htsc/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
-#define RGBLED_NUM 1
-
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
diff --git a/keyboards/acheron/themis/87htsc/info.json b/keyboards/acheron/themis/87htsc/info.json
index 5b491690bb..75c680d2a4 100644
--- a/keyboards/acheron/themis/87htsc/info.json
+++ b/keyboards/acheron/themis/87htsc/info.json
@@ -26,6 +26,9 @@
"backing_size": 8192
}
},
+ "rgblight": {
+ "led_count": 1
+ },
"ws2812": {
"pin": "B15"
},
diff --git a/keyboards/acheron/themis/88htsc/config.h b/keyboards/acheron/themis/88htsc/config.h
index 605594eea2..ed1229c779 100644
--- a/keyboards/acheron/themis/88htsc/config.h
+++ b/keyboards/acheron/themis/88htsc/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
-#define RGBLED_NUM 1
-
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
diff --git a/keyboards/acheron/themis/88htsc/info.json b/keyboards/acheron/themis/88htsc/info.json
index 073a16e946..8726642c0c 100644
--- a/keyboards/acheron/themis/88htsc/info.json
+++ b/keyboards/acheron/themis/88htsc/info.json
@@ -26,6 +26,9 @@
"backing_size": 8192
}
},
+ "rgblight": {
+ "led_count": 1
+ },
"ws2812": {
"pin": "B15"
},
diff --git a/keyboards/arabica37/keymaps/default/config.h b/keyboards/arabica37/keymaps/default/config.h
index 57ce4cc0c1..5654f4daf4 100644
--- a/keyboards/arabica37/keymaps/default/config.h
+++ b/keyboards/arabica37/keymaps/default/config.h
@@ -31,7 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 170
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -42,7 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 50
+#define RGBLIGHT_LED_COUNT 50
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/aya/keymaps/default/config.h b/keyboards/aya/keymaps/default/config.h
deleted file mode 100644
index 6e57fd6499..0000000000
--- a/keyboards/aya/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 Dan Nixon
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/bastardkb/dilemma/3x5_3/3x5_3.c b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c
index b9787f473e..0a5ba15181 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c
+++ b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c
@@ -2,6 +2,7 @@
* Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
* Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ * Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Publicw License as published by
@@ -19,65 +20,74 @@
#include "quantum.h"
-/**
- * LEDs index.
- *
- * ╭────────────────────╮ ╭────────────────────╮
- * 2 3 8 9 12 30 27 26 21 20
- * ├────────────────────┤ ├────────────────────┤
- * 1 4 7 10 13 31 28 25 22 19
- * ├────────────────────┤ ├────────────────────┤
- * 0 5 6 11 14 32 29 24 23 18
- * ╰────────────────────╯ ╰────────────────────╯
- * 15 16 17 35 34 33
- * ╰────────────╯ ╰────────────╯
- */
-// clang-format off
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ switch (index) {
+ case 0: // Left-half encoder, mouse scroll.
+ tap_code(clockwise ? KC_MS_WH_UP : KC_MS_WH_DOWN);
+ break;
+ case 1: // Right-half encoder, volume control.
+ tap_code(clockwise ? KC_AUDIO_VOL_UP : KC_AUDIO_VOL_DOWN);
+ break;
+ }
+ return true;
+}
+#endif // ENCODER_ENABLE
+
#ifdef RGB_MATRIX_ENABLE
-led_config_t g_led_config = { {
- /* Key Matrix to LED index. */
- // Left split.
- { 2, 3, 8, 9, 12 }, // Top row
- { 1, 4, 7, 10, 13 }, // Middle row
- { 0, 5, 6, 11, 14 }, // Bottom row
- { 17, NO_LED, 15, 16, NO_LED }, // Thumb cluster
- // Right split.
- { 20, 21, 26, 27, 30 }, // Top row
- { 19, 22, 25, 28, 31 }, // Middle row
- { 18, 23, 24, 29, 32 }, // Bottom row
- { 35, NO_LED, 33, 34, NO_LED }, // Thumb cluster
-}, {
- /* LED index to physical position. */
- // Left split.
- /* index=0 */ { 0, 42 }, { 0, 21 }, { 0, 0 }, // col 1 (left most)
- /* index=3 */ { 18, 0 }, { 18, 21 }, { 18, 42 }, // col 2
- /* index=6 */ { 36, 42 }, { 36, 21 }, { 36, 0 },
- /* index=9 */ { 54, 0 }, { 54, 21 }, { 54, 42 },
- /* index=12 */ { 72, 0 }, { 72, 21 }, { 72, 42 },
- /* index=15 */ { 72, 64 }, { 90, 64 }, { 108, 64 }, // Thumb cluster
- // Right split.
- /* index=18 */ { 224, 42 }, { 224, 21 }, { 224, 0 }, // col 10 (right most)
- /* index=21 */ { 206, 0 }, { 206, 21 }, { 206, 42 }, // col 9
- /* index=24 */ { 188, 42 }, { 188, 21 }, { 188, 0 },
- /* index=27 */ { 170, 0 }, { 170, 21 }, { 170, 42 },
- /* index=30 */ { 152, 0 }, { 152, 21 }, { 152, 42 },
- /* index=33 */ { 152, 64 }, { 134, 64 }, { 116, 64 }, // Thumb cluster
-}, {
- /* LED index to flag. */
- // Left split.
- /* index=0 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 1
- /* index=3 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 2
- /* index=6 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=9 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=12 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=15 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster
- // Right split.
- /* index=18 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 10
- /* index=21 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 9
- /* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=33 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster
-} };
-#endif
-// clang-format on
+// Layer state indicator
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; }
+ if (host_keyboard_led_state().caps_lock) {
+ for (int i = led_min; i <= led_max; i++) {
+ if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
+ rgb_matrix_set_color(i, MIN(rgb_matrix_get_val() + 76, 255), 0x00, 0x00);
+ }
+ }
+ }
+
+ uint8_t layer = get_highest_layer(layer_state);
+ if (layer > 0) {
+ HSV hsv = rgb_matrix_get_hsv();
+ switch (get_highest_layer(layer_state)) {
+ case 1:
+ hsv = (HSV){HSV_BLUE};
+ break;
+ case 2:
+ hsv = (HSV){HSV_AZURE};
+ break;
+ case 3:
+ hsv = (HSV){HSV_ORANGE};
+ break;
+ case 4:
+ hsv = (HSV){HSV_GREEN};
+ break;
+ case 5:
+ hsv = (HSV){HSV_TEAL};
+ break;
+ case 6:
+ hsv = (HSV){HSV_PURPLE};
+ break;
+ case 7:
+ default:
+ hsv = (HSV){HSV_RED};
+ break;
+ };
+
+ if (hsv.v > rgb_matrix_get_val()) {
+ hsv.v = MIN(rgb_matrix_get_val() + 22, 255);
+ }
+ RGB rgb = hsv_to_rgb(hsv);
+
+ for (uint8_t i = led_min; i < led_max; i++) {
+ if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) {
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ }
+ }
+ return false;
+};
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/config.h b/keyboards/bastardkb/dilemma/3x5_3/config.h
index d25bb07528..aaac4c880a 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/config.h
@@ -1,5 +1,6 @@
/**
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ * Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* This 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,32 +22,35 @@
#define SPLIT_HAND_PIN GP29
#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
+/* VBUS detection. */
+#define USB_VBUS_PIN GP19
+
/* CRC. */
#define CRC8_USE_TABLE
#define CRC8_OPTIMIZE_SPEED
/* Cirque trackpad over SPI. */
+#define SPI_DRIVER SPID0
#define SPI_SCK_PIN GP22
#define SPI_MOSI_PIN GP23
#define SPI_MISO_PIN GP20
#define POINTING_DEVICE_CS_PIN GP21
-
-/* OLED over i2c. */
-#define I2C1_CLOCK_SPEED 400000
-#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
-#define OLED_DISPLAY_HEIGHT 128
+#undef CIRQUE_PINNACLE_DIAMETER_MM
+#define CIRQUE_PINNACLE_DIAMETER_MM 40
/* Reset. */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
-#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
/* RGB matrix support. */
#ifdef RGB_MATRIX_ENABLE
# define SPLIT_TRANSPORT_MIRROR
-# define RGB_MATRIX_LED_COUNT 36
-# define RGB_MATRIX_SPLIT { 18, 18 }
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// Startup values.
+# define RGB_MATRIX_DEFAULT_VAL 128
+# define RGB_MATRIX_DEFAULT_SPD 32
#endif
diff --git a/keyboards/bastardkb/dilemma/3x5_3/halconf.h b/keyboards/bastardkb/dilemma/3x5_3/halconf.h
index b79b0f9e88..57d15376d6 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/halconf.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/halconf.h
@@ -17,7 +17,6 @@
#pragma once
-#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
#include_next <halconf.h>
diff --git a/keyboards/bastardkb/dilemma/3x5_3/info.json b/keyboards/bastardkb/dilemma/3x5_3/info.json
index 4ab43d6a8e..f3a3961330 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/info.json
+++ b/keyboards/bastardkb/dilemma/3x5_3/info.json
@@ -2,28 +2,186 @@
"keyboard_name": "Dilemma (3x5+3) Assembled",
"usb": {
"device_version": "2.0.0",
- "pid": "0x1835"
- },
- "rgb_matrix": {
- "driver": "ws2812"
+ "pid": "0x1836"
},
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "board": "GENERIC_RP_RP2040",
"matrix_pins": {
"cols": ["GP8", "GP9", "GP7", "GP6", "GP28"],
"rows": ["GP4", "GP5", "GP27", "GP26"]
},
"diode_direction": "ROW2COL",
"split": {
- "soft_serial_pin": "GP1"
+ "enabled": true,
+ "soft_serial_pin": "GP1",
+ "bootmagic": {
+ "matrix": [4, 0]
+ }
+ },
+ "encoder": {
+ "enabled" : true,
+ "rotary" : [
+ {"pin_a": "GP25", "pin_b": "GP24"}
+ ]
},
- "rgblight": {
- "split_count": [18, 18]
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "caps_word": true,
+ "tri_layer": true
},
"ws2812": {
- "pin": "GP0",
+ "pin": "GP10",
"driver": "vendor"
},
- "processor": "RP2040",
- "bootloader": "rp2040",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "split_count": [36, 36],
+ "max_brightness": 176,
+ "animations": {
+ "solid_color": true,
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ {"x": 82, "y": 0, "flags": 2},
+ {"x": 60, "y": 0, "flags": 2},
+ {"x": 22, "y": 0, "flags": 2},
+ {"x": 15, "y": 0, "flags": 2},
+
+ {"x": 0, "y": 25, "flags": 2},
+ {"x": 0, "y": 40, "flags": 2},
+ {"x": 0, "y": 55, "flags": 2},
+
+ {"x": 15, "y": 45, "flags": 2},
+ {"x": 30, "y": 45, "flags": 2},
+ {"x": 35, "y": 60, "flags": 2},
+ {"x": 55, "y": 62, "flags": 2},
+
+ {"x": 72, "y": 64, "flags": 2},
+ {"x": 90, "y": 64, "flags": 2},
+ {"x": 98, "y": 47, "flags": 2},
+ {"x": 107, "y": 40, "flags": 2},
+
+ {"x": 110, "y": 33, "flags": 2},
+ {"x": 110, "y": 19, "flags": 2},
+ {"x": 110, "y": 5, "flags": 2},
+
+ {"matrix": [0, 4], "x": 73, "y": 11, "flags": 4},
+ {"matrix": [0, 3], "x": 56, "y": 9, "flags": 4},
+ {"matrix": [0, 2], "x": 39, "y": 5, "flags": 4},
+ {"matrix": [0, 1], "x": 22, "y": 10, "flags": 4},
+ {"matrix": [0, 0], "x": 5, "y": 15, "flags": 1},
+
+ {"matrix": [1, 0], "x": 5, "y": 30, "flags": 1},
+ {"matrix": [1, 1], "x": 22, "y": 25, "flags": 4},
+ {"matrix": [1, 2], "x": 39, "y": 20, "flags": 4},
+ {"matrix": [1, 3], "x": 56, "y": 24, "flags": 4},
+ {"matrix": [1, 4], "x": 73, "y": 26, "flags": 4},
+
+ {"matrix": [2, 4], "x": 73, "y": 41, "flags": 4},
+ {"matrix": [2, 3], "x": 56, "y": 39, "flags": 4},
+ {"matrix": [2, 2], "x": 39, "y": 35, "flags": 4},
+ {"matrix": [2, 1], "x": 22, "y": 40, "flags": 4},
+ {"matrix": [2, 0], "x": 5, "y": 45, "flags": 1},
+
+ {"matrix": [3, 2], "x": 45, "y": 51, "flags": 4},
+ {"matrix": [3, 0], "x": 64, "y": 53, "flags": 4},
+ {"matrix": [3, 1], "x": 81, "y": 60, "flags": 4},
+
+ {"x": 142, "y": 0, "flags": 2},
+ {"x": 164, "y": 0, "flags": 2},
+ {"x": 202, "y": 0, "flags": 2},
+ {"x": 209, "y": 0, "flags": 2},
+
+ {"x": 224, "y": 25, "flags": 2},
+ {"x": 224, "y": 40, "flags": 2},
+ {"x": 224, "y": 55, "flags": 2},
+
+ {"x": 209, "y": 45, "flags": 2},
+ {"x": 194, "y": 45, "flags": 2},
+ {"x": 189, "y": 60, "flags": 2},
+ {"x": 169, "y": 62, "flags": 2},
+
+ {"x": 152, "y": 64, "flags": 2},
+ {"x": 134, "y": 64, "flags": 2},
+ {"x": 126, "y": 47, "flags": 2},
+ {"x": 117, "y": 40, "flags": 2},
+
+ {"x": 114, "y": 33, "flags": 2},
+ {"x": 114, "y": 19, "flags": 2},
+ {"x": 114, "y": 5, "flags": 2},
+
+ {"matrix": [4, 4], "x": 151, "y": 11, "flags": 4},
+ {"matrix": [4, 3], "x": 168, "y": 9, "flags": 4},
+ {"matrix": [4, 2], "x": 185, "y": 5, "flags": 4},
+ {"matrix": [4, 1], "x": 202, "y": 10, "flags": 4},
+ {"matrix": [4, 0], "x": 219, "y": 15, "flags": 1},
+
+ {"matrix": [5, 0], "x": 219, "y": 30, "flags": 1},
+ {"matrix": [5, 1], "x": 202, "y": 25, "flags": 4},
+ {"matrix": [5, 2], "x": 185, "y": 20, "flags": 4},
+ {"matrix": [5, 3], "x": 168, "y": 24, "flags": 4},
+ {"matrix": [5, 4], "x": 151, "y": 26, "flags": 4},
+
+ {"matrix": [6, 4], "x": 151, "y": 41, "flags": 4},
+ {"matrix": [6, 3], "x": 168, "y": 39, "flags": 4},
+ {"matrix": [6, 2], "x": 185, "y": 35, "flags": 4},
+ {"matrix": [6, 1], "x": 202, "y": 40, "flags": 4},
+ {"matrix": [6, 0], "x": 219, "y": 45, "flags": 1},
+
+ {"matrix": [7, 2], "x": 179, "y": 51, "flags": 4},
+ {"matrix": [7, 0], "x": 160, "y": 53, "flags": 4},
+ {"matrix": [7, 1], "x": 143, "y": 60, "flags": 4}
+ ]
+ },
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h b/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h
index cfdafc4a51..4626c7b141 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h
@@ -66,67 +66,3 @@
# define DILEMMA_DRAGSCROLL_REVERSE_X
// #define DILEMMA_DRAGSCROLL_REVERSE_Y
#endif // POINTING_DEVICE_ENABLE
-
-/** RGB Matrix. */
-
-#ifdef RGB_MATRIX_ENABLE
-// Enable all animations on ARM boards since they have plenty of memory
-// available for it.
-# define ENABLE_RGB_MATRIX_ALPHAS_MODS
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-// Limit maximum brightness to keep power consumption reasonable, and avoid
-// disconnects.
-# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
-
-// Rainbow swirl as startup mode.
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
-
-// Slow swirl at startup.
-# define RGB_MATRIX_DEFAULT_SPD 32
-
-// Startup values.
-# define RGB_MATRIX_DEFAULT_HUE 0
-# define RGB_MATRIX_DEFAULT_SAT 255
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
-#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c
index 30fef9bbeb..4185bba7d9 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c
@@ -24,8 +24,8 @@ enum dilemma_keymap_layers {
LAYER_NUM,
};
-#define NAV MO(LAYER_NAV)
-#define SYM MO(LAYER_SYM)
+#define NAV QK_TRI_LAYER_LOWER
+#define SYM QK_TRI_LAYER_UPPER
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -33,11 +33,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮
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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
- KC_A, NAV, CW_TOGG, KC_SPC, SYM, KC_A
+ KC_LCTL, NAV, KC_LGUI, KC_SPC, SYM, KC_A
// ╰───────────────────────────╯ ╰──────────────────────────╯
),
@@ -45,11 +45,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮
KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_DEL,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
- KC_LSFT, KC_LCTL, KC_LALT, KC_RGUI, KC_VOLD, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
+ KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, KC_VOLD, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
- QK_BOOT, EE_CLR, KC_MPRV, KC_MNXT, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, KC_ENT,
+ QK_BOOT, EE_CLR, KC_MPRV, KC_MNXT, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, KC_ENT,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
- KC_A, _______, KC_LSFT, KC_SPC, _______, KC_A
+ XXXXXXX, _______, KC_LSFT, KC_SPC, _______, KC_ESC
// ╰───────────────────────────╯ ╰──────────────────────────╯
),
@@ -59,9 +59,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
KC_MINS, KC_ASTR, KC_EQL, KC_UNDS, KC_DLR, KC_HASH, KC_RGUI, KC_RALT, KC_RCTL, KC_RSFT,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
- KC_PLUS, KC_PIPE, KC_AT, KC_SLSH, KC_PERC, _______, KC_BSLS, KC_AMPR, KC_QUES, KC_EXLM,
+ KC_PLUS, KC_PIPE, KC_AT, KC_SLSH, KC_PERC, KC_SCLN, KC_BSLS, KC_AMPR, KC_QUES, KC_EXLM,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
- KC_A, _______, KC_LSFT, KC_SPC, _______, KC_A
+ KC_ESC, _______, KC_LSFT, KC_SPC, _______, XXXXXXX
// ╰───────────────────────────╯ ╰──────────────────────────╯
),
@@ -73,12 +73,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
- KC_A, _______, KC_LSFT, KC_SPC, _______, KC_A
+ XXXXXXX, _______, KC_LSFT, KC_SPC, _______, XXXXXXX
// ╰───────────────────────────╯ ╰──────────────────────────╯
),
};
// clang-format on
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, LAYER_NAV, LAYER_SYM, LAYER_NUM);
-}
diff --git a/keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/config.h
index b57cc482ec..790d6bf751 100644
--- a/keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/config.h
@@ -1,4 +1,6 @@
-/* Copyright 2017 Baris Tosun
+/**
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ * Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* This 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,9 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
#pragma once
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
-// place overrides here
-
+#define SPLIT_LAYER_STATE_ENABLE
+#define SPLIT_LED_STATE_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c
new file mode 100644
index 0000000000..dacef2231e
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/keymap.c
@@ -0,0 +1,170 @@
+/**
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ * Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received 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 dilemma_keymap_layers {
+ LAYER_BASE = 0,
+ LAYER_FUNCTION,
+ LAYER_NAVIGATION,
+ LAYER_MEDIA,
+ LAYER_POINTER,
+ LAYER_NUMERAL,
+ LAYER_SYMBOLS,
+};
+
+// Automatically enable sniping-mode on the pointer layer.
+// #define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
+
+#define ESC_MED LT(LAYER_MEDIA, KC_ESC)
+#define SPC_NAV LT(LAYER_NAVIGATION, KC_SPC)
+#define TAB_FUN LT(LAYER_FUNCTION, KC_TAB)
+#define ENT_SYM LT(LAYER_SYMBOLS, KC_ENT)
+#define BSP_NUM LT(LAYER_NUMERAL, KC_BSPC)
+#define PT_Z LT(LAYER_POINTER, KC_Z)
+#define PT_SLSH LT(LAYER_POINTER, KC_SLSH)
+
+#ifndef POINTING_DEVICE_ENABLE
+# define DRGSCRL KC_NO
+# define DPI_MOD KC_NO
+# define S_D_MOD KC_NO
+# define SNIPING KC_NO
+#endif // !POINTING_DEVICE_ENABLE
+
+// clang-format off
+/** \brief QWERTY layout (3 rows, 10 columns). */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [LAYER_BASE] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ LGUI_T(KC_A), LALT_T(KC_S), LCTL_T(KC_D), LSFT_T(KC_F), KC_G, KC_H, RSFT_T(KC_J), RCTL_T(KC_K), RALT_T(KC_L), RGUI_T(KC_QUOT),
+ PT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, PT_SLSH,
+ ESC_MED, TAB_FUN, SPC_NAV, ENT_SYM, BSP_NUM, KC_MUTE
+ ),
+
+/*
+ * Layers used on the Dilemma.
+ *
+ * These layers started off heavily inspired by the Miryoku layout, but trimmed
+ * down and tailored for a stock experience that is meant to be fundation for
+ * further personalization.
+ *
+ * See https://github.com/manna-harbour/miryoku for the original layout.
+ */
+
+/**
+ * \brief Function layer.
+ *
+ * Secondary right-hand layer has function keys mirroring the numerals on the
+ * primary layer with extras on the pinkie column, plus system keys on the inner
+ * column. App is on the tertiary thumb key and other thumb keys are duplicated
+ * from the base layer to enable auto-repeat.
+ */
+ [LAYER_FUNCTION] = LAYOUT_split_3x5_3(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F12,
+ KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_SCRL, KC_F4, KC_F5, KC_F6, KC_F11,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F10,
+ XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+/**
+ * \brief Navigation layer.
+ *
+ * Primary right-hand layer (left home thumb) is navigation and editing. Cursor
+ * keys are on the home position, line and page movement below, clipboard above,
+ * caps lock and insert on the inner column. Thumb keys are duplicated from the
+ * base layer to avoid having to layer change mid edit and to enable auto-repeat.
+ */
+ [LAYER_NAVIGATION] = LAYOUT_split_3x5_3(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
+ XXXXXXX, XXXXXXX, _______, KC_ENT, KC_BSPC, KC_DEL
+ ),
+
+/**
+ * \brief Media layer.
+ *
+ * Tertiary left- and right-hand layer is media and RGB control. This layer is
+ * symmetrical to accomodate the left- and right-hand trackball.
+ */
+ [LAYER_MEDIA] = LAYOUT_split_3x5_3(
+ XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX,
+ KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT, KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MPLY, KC_MSTP, KC_MSTP, KC_MPLY, KC_MUTE
+ ),
+
+/** \brief Mouse emulation and pointer functions. */
+ [LAYER_POINTER] = LAYOUT_split_3x5_3(
+ QK_BOOT, EE_CLR, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, EE_CLR, QK_BOOT,
+ KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+ _______, DRGSCRL, SNIPING, KC_BTN3, XXXXXXX, XXXXXXX, KC_BTN3, SNIPING, DRGSCRL, _______,
+ KC_BTN3, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, KC_BTN3
+ ),
+
+/**
+ * \brief Numeral layout.
+ *
+ * Primary left-hand layer (right home thumb) is numerals and symbols. Numerals
+ * are in the standard numpad locations with symbols in the remaining positions.
+ * `KC_DOT` is duplicated from the base layer.
+ */
+ [LAYER_NUMERAL] = LAYOUT_split_3x5_3(
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+ KC_DOT, KC_1, KC_2, KC_3, KC_BSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_DOT, KC_MINS, KC_0, XXXXXXX, _______, XXXXXXX
+ ),
+
+/**
+ * \brief Symbols layer.
+ *
+ * Secondary left-hand layer has shifted symbols in the same locations to reduce
+ * chording when using mods with shifted symbols. `KC_LPRN` is duplicated next to
+ * `KC_RPRN`.
+ */
+ [LAYER_SYMBOLS] = LAYOUT_split_3x5_3(
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LPRN, KC_GRV, KC_UNDS, _______, XXXXXXX, XXXXXXX
+ ),
+};
+// clang-format on
+
+#ifdef POINTING_DEVICE_ENABLE
+# ifdef DILEMMA_AUTO_SNIPING_ON_LAYER
+layer_state_t layer_state_set_user(layer_state_t state) {
+ dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
+ return state;
+}
+# endif // DILEMMA_AUTO_SNIPING_ON_LAYER
+#endif // POINTING_DEVICE_ENABLE
+
+#ifdef ENCODER_MAP_ENABLE
+// clang-format off
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [LAYER_BASE] = {ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [LAYER_FUNCTION] = {ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+ [LAYER_NAVIGATION] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
+ [LAYER_POINTER] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI)},
+ [LAYER_NUMERAL] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI)},
+ [LAYER_SYMBOLS] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+};
+// clang-format on
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/readme.md b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/readme.md
new file mode 100644
index 0000000000..4552f0948d
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/readme.md
@@ -0,0 +1,47 @@
+# Dilemma `via` keymap
+
+The Dilemma `via` keymap is based on a QWERTY layout with [home row mods](https://precondition.github.io/home-row-mods) and [Miryoku-inspired layers](https://github.com/manna-harbour/miryoku), and some features and changes specific to the Dilemma.
+
+This layout also supports VIA.
+
+## Customizing the keymap
+
+### Dynamic DPI scaling
+
+Use the following keycodes to change the default DPI:
+
+- `POINTER_DEFAULT_DPI_FORWARD`: increases the DPI; decreases when shifted;
+- `POINTER_DEFAULT_DPI_REVERSE`: decreases the DPI; increases when shifted.
+
+There's a maximum of 16 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
+
+Use the following keycodes to change the sniping mode DPI:
+
+- `POINTER_SNIPING_DPI_FORWARD`: increases the DPI; decreases when shifted;
+- `POINTER_SNIPING_DPI_REVERSE`: decreases the DPI; increases when shifted.
+
+There's a maximum of 4 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
+
+### Drag-scroll
+
+Use the `DRAGSCROLL_MODE` keycode to enable drag-scroll on hold. Use the `DRAGSCROLL_TOGGLE` keycode to enable/disable drag-scroll on key press.
+
+### Circular scroll
+
+By default, the firmware is configured to enable the circular scroll feature on Cirque trackpad.
+
+To disable this, add the following to your keymap:
+
+```c
+#undef POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+```
+
+### Sniping
+
+Use the `SNIPING_MODE` keycode to enable sniping mode on hold. Use the `SNIPING_TOGGLE` keycode to enable/disable sniping mode on key press.
+
+Change the value of `DILEMMA_AUTO_SNIPING_ON_LAYER` to automatically enable sniping mode on layer change. By default, sniping mode is enabled on the pointer layer:
+
+```c
+#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
+``` \ No newline at end of file
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/rules.mk b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/rules.mk
new file mode 100644
index 0000000000..f1adcab005
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h
index f194dd225c..52b726a56d 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h
@@ -19,8 +19,5 @@
#include_next <mcuconf.h>
-#undef RP_SPI_USE_SPI1
-#define RP_SPI_USE_SPI1 TRUE
-
-#undef RP_I2C_USE_I2C1
-#define RP_I2C_USE_I2C1 TRUE
+#undef RP_SPI_USE_SPI0
+#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/readme.md b/keyboards/bastardkb/dilemma/3x5_3/readme.md
index bfddbc9efc..b57df90921 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/readme.md
+++ b/keyboards/bastardkb/dilemma/3x5_3/readme.md
@@ -1,5 +1,5 @@
-# Next generation Dilemma keyboard
+# Dilemma v2 (3x5+3 assembled)
This keyboard is an updated version of the [3x5+2 Dilemma](../3x5_2/).
-This is still under active development, and not available publicly yet.
+The Dilemma v2 is available at [bastardkb.com](https://bastardkb.com).
diff --git a/keyboards/bastardkb/dilemma/3x5_3/rules.mk b/keyboards/bastardkb/dilemma/3x5_3/rules.mk
index 3cdb41160c..4923c2c84a 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_3/rules.mk
@@ -1,24 +1,4 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-AUDIO_SUPPORTED = no # Audio is not supported
-RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
-RGBLIGHT_SUPPORTED = no # RGB underglow is supported, but not enabled by default
-RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
-
SERIAL_DRIVER = vendor
POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
-
-SPLIT_KEYBOARD = yes
diff --git a/keyboards/bastardkb/dilemma/config.h b/keyboards/bastardkb/dilemma/config.h
index d282c635ea..0da85ec99a 100644
--- a/keyboards/bastardkb/dilemma/config.h
+++ b/keyboards/bastardkb/dilemma/config.h
@@ -26,6 +26,9 @@
// Pointing device is on the right split.
#define POINTING_DEVICE_RIGHT
+// Enables support for extended i16 mouse reports (instead of i8).
+#define MOUSE_EXTENDED_REPORT
+
// Limits the frequency that the sensor is polled for motion.
#define POINTING_DEVICE_TASK_THROTTLE_MS 10
diff --git a/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h
index a56bd0f2e7..2469b627e2 100644
--- a/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h
@@ -27,8 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define EE_HANDS
// Underglow
-#undef RGBLED_NUM
-#define RGBLED_NUM 14 // Number of LEDs
+#undef RGBLIGHT_LED_COUNT
+#define RGBLIGHT_LED_COUNT 14 // Number of LEDs
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
diff --git a/keyboards/biacco42/meishi2/keymaps/moc/config.h b/keyboards/biacco42/meishi2/keymaps/moc/config.h
deleted file mode 100644
index 9b5675af6b..0000000000
--- a/keyboards/biacco42/meishi2/keymaps/moc/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2021 Atsushi Nagase
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/boardwalk/keymaps/brendanwr/config.h b/keyboards/boardwalk/keymaps/brendanwr/config.h
deleted file mode 100644
index a2530241f4..0000000000
--- a/keyboards/boardwalk/keymaps/brendanwr/config.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/converter/ibm_terminal/keymaps/priyadi/config.h b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/cutie_club/wraith/keymaps/amber/config.h b/keyboards/cutie_club/wraith/keymaps/amber/config.h
deleted file mode 100644
index b825835bb4..0000000000
--- a/keyboards/cutie_club/wraith/keymaps/amber/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Amber Holly
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/dm9records/ergoinu/config.h b/keyboards/dm9records/ergoinu/config.h
index d1c1201a54..b6a3484a26 100644
--- a/keyboards/dm9records/ergoinu/config.h
+++ b/keyboards/dm9records/ergoinu/config.h
@@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define EE_HANDS
#ifndef IOS_DEVICE_ENABLE
- #if RGBLED_NUM <= 7
+ #if RGBLIGHT_LED_COUNT <= 7
#define RGBLIGHT_LIMIT_VAL 255
#define RGBLIGHT_VAL_STEP 17
#endif
diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/config.h b/keyboards/dm9records/plaid/keymaps/brickbots/config.h
deleted file mode 100644
index 5733b9e4b0..0000000000
--- a/keyboards/dm9records/plaid/keymaps/brickbots/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Takuya Urakawa (dm9records.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/dm9records/plaid/keymaps/stephen-huan/config.h b/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
deleted file mode 100644
index 5733b9e4b0..0000000000
--- a/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Takuya Urakawa (dm9records.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/dm9records/plaid/keymaps/thehalfdeafchef/config.h b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
deleted file mode 100644
index 4bcbc6f673..0000000000
--- a/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Ian Canino (ian@thecommittedbug.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
-
-// place overrides here
diff --git a/keyboards/dp60/keymaps/indicator/indicator.c b/keyboards/dp60/keymaps/indicator/indicator.c
index 02450ce68d..d7b628cc56 100644
--- a/keyboards/dp60/keymaps/indicator/indicator.c
+++ b/keyboards/dp60/keymaps/indicator/indicator.c
@@ -14,10 +14,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "dp60.h"
-
-#include "rgblight.h"
-
+#include QMK_KEYBOARD_H
+#include "ws2812.h"
// caps led
const rgblight_segment_t PROGMEM dp60_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
@@ -72,13 +70,17 @@ extern rgblight_config_t rgblight_config;
extern void rgblight_layers_write(void);
extern void indicator_write(rgb_led_t *start_led, uint8_t num_leds);
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
ws2812_setleds(start_led, RGBLED_NUM-RGB_INDICATOR_NUM);
indicator_write(start_led + (RGBLED_NUM - RGB_INDICATOR_NUM), RGB_INDICATOR_NUM);
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
+
void led_update_ports(led_t led_state) {
rgblight_set_layer_state(0, led_state.caps_lock);
rgblight_set_layer_state(1, led_state.scroll_lock);
diff --git a/keyboards/dp60/keymaps/indicator/rules.mk b/keyboards/dp60/keymaps/indicator/rules.mk
index a8891659f7..853666e4f4 100644
--- a/keyboards/dp60/keymaps/indicator/rules.mk
+++ b/keyboards/dp60/keymaps/indicator/rules.mk
@@ -1,4 +1,6 @@
RGBLIGHT_ENABLE = yes # Use RGB underglow light
+RGBLIGHT_DRIVER = custom
+WS2812_DRIVER_REQUIRED = yes
SRC += indicator.c led_driver.c
diff --git a/keyboards/duck/jetfire/indicator_leds.h b/keyboards/duck/jetfire/indicator_leds.h
index d94709d1cb..36dda632fb 100644
--- a/keyboards/duck/jetfire/indicator_leds.h
+++ b/keyboards/duck/jetfire/indicator_leds.h
@@ -6,6 +6,6 @@ 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[RGBLED_NUM][3]);
+void backlight_set_rgb(uint8_t cfg[RGBLIGHT_LED_COUNT][3]);
void backlight_set(uint8_t level);
void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device);
diff --git a/keyboards/duck/jetfire/jetfire.c b/keyboards/duck/jetfire/jetfire.c
index 23e6e9095a..45a46766fd 100644
--- a/keyboards/duck/jetfire/jetfire.c
+++ b/keyboards/duck/jetfire/jetfire.c
@@ -44,10 +44,10 @@ uint8_t backlight_state_led = 1<<STATE_LED_LAYER_0;
void backlight_toggle_rgb(bool enabled)
{
- uint8_t rgb[RGBLED_NUM][3] = { 0 };
+ uint8_t rgb[RGBLIGHT_LED_COUNT][3] = { 0 };
if(enabled) {
- for(uint8_t i = 0; i < RGBLED_NUM; ++i) {
+ for(uint8_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
rgb[i][0] = backlight_rgb_r;
rgb[i][1] = backlight_rgb_g;
rgb[i][2] = backlight_rgb_b;
@@ -56,10 +56,10 @@ void backlight_toggle_rgb(bool enabled)
backlight_set_rgb(rgb);
}
-void backlight_set_rgb(uint8_t cfg[RGBLED_NUM][3])
+void backlight_set_rgb(uint8_t cfg[RGBLIGHT_LED_COUNT][3])
{
cli();
- for(uint8_t i = 0; i < RGBLED_NUM; ++i) {
+ for(uint8_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
send_color(cfg[i][0], cfg[i][1], cfg[i][2], Device_PCBRGB);
}
sei();
diff --git a/keyboards/era/klein/config.h b/keyboards/era/klein/config.h
deleted file mode 100644
index 1033bc738e..0000000000
--- a/keyboards/era/klein/config.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2023 eerraa
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-/* BACKLIGHT PWM */
-#define BACKLIGHT_PWM_DRIVER PWMD7
-#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
-
-/* RGB Matrix */
-#define RGB_MATRIX_DEFAULT_VAL 60
-#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-#define RGB_MATRIX_KEYPRESSES
-#define RGB_DISABLE_WHEN_USB_SUSPENDED
diff --git a/keyboards/era/klein/info.json b/keyboards/era/klein/info.json
deleted file mode 100644
index ac08cbb8a2..0000000000
--- a/keyboards/era/klein/info.json
+++ /dev/null
@@ -1,590 +0,0 @@
-{
- "manufacturer": "SIRIND",
- "keyboard_name": "Klein",
- "maintainer": "eerraa",
- "backlight": {
- "levels": 5,
- "pin": "GP15"
- },
- "bootloader": "rp2040",
- "build": {
- "debounce_type": "sym_defer_pk"
- },
- "diode_direction": "COL2ROW",
- "features": {
- "backlight": true,
- "bootmagic": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true,
- "rgb_matrix": true
- },
- "indicators": {
- "caps_lock": "GP16",
- "on_state": 0,
- "scroll_lock": "GP17"
- },
- "matrix_pins": {
- "cols": ["GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP11", "GP10", "GP8", "GP7", "GP1", "GP2", "GP3", "GP4"],
- "rows": ["GP18", "GP19", "GP20", "GP21", "GP14", "GP5", "GP6", "GP9", "GP13", "GP12"]
- },
- "processor": "RP2040",
- "rgb_matrix": {
- "animations": {
- "alphas_mods": true,
- "gradient_up_down": true,
- "gradient_left_right": true,
- "breathing": true,
- "band_sat": true,
- "band_val": true,
- "band_pinwheel_sat": true,
- "band_pinwheel_val": true,
- "band_spiral_sat": true,
- "band_spiral_val": true,
- "cycle_all": true,
- "cycle_left_right": true,
- "cycle_up_down": true,
- "rainbow_moving_chevron": true,
- "cycle_out_in": true,
- "cycle_out_in_dual": true,
- "cycle_pinwheel": true,
- "cycle_spiral": true,
- "dual_beacon": true,
- "rainbow_beacon": true,
- "rainbow_pinwheels": true,
- "raindrops": true,
- "jellybean_raindrops": true,
- "hue_breathing": true,
- "hue_pendulum": true,
- "hue_wave": true,
- "pixel_rain": true,
- "pixel_flow": true,
- "pixel_fractal": true,
- "typing_heatmap": true,
- "digital_rain": true,
- "solid_reactive_simple": true,
- "solid_reactive": true,
- "solid_reactive_wide": true,
- "solid_reactive_multiwide": true,
- "solid_reactive_cross": true,
- "solid_reactive_multicross": true,
- "solid_reactive_nexus": true,
- "solid_reactive_multinexus": true,
- "splash": true,
- "multisplash": true,
- "solid_splash": true,
- "solid_multisplash": true
- },
- "driver": "ws2812",
- "layout": [
- {"matrix": [0, 7], "x": 4, "y": 0, "flags": 1},
- {"matrix": [0, 6], "x": 20, "y": 2, "flags": 4},
- {"matrix": [0, 5], "x": 32, "y": 2, "flags": 4},
- {"matrix": [0, 4], "x": 45, "y": 1, "flags": 4},
- {"matrix": [0, 3], "x": 58, "y": 3, "flags": 4},
- {"matrix": [0, 2], "x": 71, "y": 5, "flags": 4},
- {"matrix": [0, 1], "x": 83, "y": 8, "flags": 4},
- {"matrix": [0, 0], "x": 96, "y": 10, "flags": 4},
- {"matrix": [1, 0], "x": 129, "y": 9, "flags": 4},
- {"matrix": [1, 1], "x": 141, "y": 7, "flags": 4},
- {"matrix": [1, 2], "x": 154, "y": 4, "flags": 4},
- {"matrix": [1, 3], "x": 166, "y": 2, "flags": 4},
- {"matrix": [1, 4], "x": 179, "y": 1, "flags": 4},
- {"matrix": [1, 5], "x": 192, "y": 2, "flags": 4},
- {"matrix": [1, 6], "x": 211, "y": 2, "flags": 1},
- {"matrix": [1, 7], "x": 1, "y": 13, "flags": 1},
- {"matrix": [2, 6], "x": 21, "y": 15, "flags": 1},
- {"matrix": [2, 5], "x": 36, "y": 15, "flags": 4},
- {"matrix": [2, 4], "x": 50, "y": 15, "flags": 4},
- {"matrix": [2, 3], "x": 62, "y": 17, "flags": 4},
- {"matrix": [2, 2], "x": 75, "y": 20, "flags": 4},
- {"matrix": [2, 1], "x": 87, "y": 22, "flags": 4},
- {"matrix": [2, 0], "x": 100, "y": 24, "flags": 4},
- {"matrix": [3, 1], "x": 125, "y": 23, "flags": 4},
- {"matrix": [3, 2], "x": 137, "y": 21, "flags": 4},
- {"matrix": [3, 3], "x": 150, "y": 18, "flags": 4},
- {"matrix": [3, 4], "x": 162, "y": 16, "flags": 4},
- {"matrix": [3, 5], "x": 175, "y": 15, "flags": 4},
- {"matrix": [3, 6], "x": 188, "y": 15, "flags": 4},
- {"matrix": [4, 6], "x": 201, "y": 15, "flags": 4},
- {"matrix": [4, 5], "x": 217, "y": 15, "flags": 4},
- {"matrix": [4, 3], "x": 0, "y": 27, "flags": 1},
- {"matrix": [4, 1], "x": 18, "y": 29, "flags": 1},
- {"matrix": [0, 8], "x": 38, "y": 29, "flags": 4},
- {"matrix": [0, 9], "x": 51, "y": 29, "flags": 4},
- {"matrix": [0, 10], "x": 64, "y": 31, "flags": 4},
- {"matrix": [0, 11], "x": 76, "y": 33, "flags": 4},
- {"matrix": [0, 12], "x": 89, "y": 36, "flags": 4},
- {"matrix": [0, 13], "x": 129, "y": 36, "flags": 4},
- {"matrix": [0, 15], "x": 142, "y": 33, "flags": 4},
- {"matrix": [1, 15], "x": 154, "y": 31, "flags": 4},
- {"matrix": [1, 14], "x": 167, "y": 29, "flags": 4},
- {"matrix": [1, 13], "x": 180, "y": 29, "flags": 4},
- {"matrix": [1, 12], "x": 193, "y": 29, "flags": 4},
- {"matrix": [1, 11], "x": 213, "y": 29, "flags": 1},
- {"matrix": [1, 10], "x": 21, "y": 42, "flags": 1},
- {"matrix": [1, 9], "x": 42, "y": 42, "flags": 4},
- {"matrix": [1, 8], "x": 60, "y": 57, "flags": 4},
- {"matrix": [2, 8], "x": 67, "y": 45, "flags": 4},
- {"matrix": [2, 9], "x": 80, "y": 47, "flags": 4},
- {"matrix": [2, 10], "x": 92, "y": 50, "flags": 4},
- {"matrix": [2, 11], "x": 126, "y": 50, "flags": 4},
- {"matrix": [2, 12], "x": 138, "y": 48, "flags": 4},
- {"matrix": [2, 13], "x": 151, "y": 45, "flags": 4},
- {"matrix": [2, 15], "x": 163, "y": 43, "flags": 4},
- {"matrix": [3, 14], "x": 177, "y": 42, "flags": 4},
- {"matrix": [3, 13], "x": 189, "y": 42, "flags": 4},
- {"matrix": [3, 12], "x": 213, "y": 42, "flags": 1},
- {"matrix": [3, 11], "x": 16, "y": 55, "flags": 1},
- {"matrix": [3, 10], "x": 55, "y": 43, "flags": 1},
- {"matrix": [3, 9], "x": 76, "y": 60, "flags": 4},
- {"matrix": [3, 8], "x": 96, "y": 64, "flags": 1},
- {"matrix": [4, 9], "x": 139, "y": 61, "flags": 4},
- {"matrix": [4, 11], "x": 166, "y": 57, "flags": 1},
- {"matrix": [4, 13], "x": 189, "y": 55, "flags": 1},
- {"matrix": [4, 14], "x": 202, "y": 55, "flags": 1},
- {"matrix": [4, 15], "x": 221, "y": 55, "flags": 1}
- ],
- "led_count": 67
- },
- "url": "",
- "usb": {
- "device_version": "1.0.0",
- "pid": "0x0003",
- "vid": "0x4552"
- },
- "ws2812": {
- "driver": "vendor",
- "pin": "GP0"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 6], "x": 16.75, "y": 0},
- {"matrix": [5, 7], "x": 17.75, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3, "w": 1.75},
- {"matrix": [8, 7], "x": 17.75, "y": 3},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 5], "x": 15, "y": 4},
- {"matrix": [9, 6], "x": 16, "y": 4},
- {"matrix": [9, 7], "x": 17, "y": 4}
- ]
- },
- "LAYOUT_ansi": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 7], "x": 16.75, "y": 0, "w": 2},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3, "w": 2.75},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 7], "x": 17.25, "y": 4, "w": 1.5}
- ]
- },
- "LAYOUT_ansi_arrow": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 7], "x": 16.75, "y": 0, "w": 2},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3},
- {"matrix": [8, 7], "x": 17, "y": 3, "w": 1.75},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 5], "x": 15, "y": 4},
- {"matrix": [9, 6], "x": 16, "y": 4},
- {"matrix": [9, 7], "x": 17, "y": 4}
- ]
- },
- "LAYOUT_ansi_split_bs": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 6], "x": 16.75, "y": 0},
- {"matrix": [5, 7], "x": 17.75, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3, "w": 2.75},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 7], "x": 17.25, "y": 4, "w": 1.5}
- ]
- },
- "LAYOUT_ansi_split_bs_rsft": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 6], "x": 16.75, "y": 0},
- {"matrix": [5, 7], "x": 17.75, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3, "w": 1.75},
- {"matrix": [8, 7], "x": 17.75, "y": 3},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 7], "x": 17.25, "y": 4, "w": 1.5}
- ]
- },
- "LAYOUT_arrow_split_bs": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [5, 0], "x": 10.75, "y": 0},
- {"matrix": [5, 1], "x": 11.75, "y": 0},
- {"matrix": [5, 2], "x": 12.75, "y": 0},
- {"matrix": [5, 3], "x": 13.75, "y": 0},
- {"matrix": [5, 4], "x": 14.75, "y": 0},
- {"matrix": [5, 5], "x": 15.75, "y": 0},
- {"matrix": [5, 6], "x": 16.75, "y": 0},
- {"matrix": [5, 7], "x": 17.75, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 3, "y": 1},
- {"matrix": [1, 3], "x": 4, "y": 1},
- {"matrix": [1, 4], "x": 5, "y": 1},
- {"matrix": [1, 5], "x": 6, "y": 1},
- {"matrix": [1, 6], "x": 7, "y": 1},
- {"matrix": [1, 7], "x": 8, "y": 1},
- {"matrix": [6, 0], "x": 10.25, "y": 1},
- {"matrix": [6, 1], "x": 11.25, "y": 1},
- {"matrix": [6, 2], "x": 12.25, "y": 1},
- {"matrix": [6, 3], "x": 13.25, "y": 1},
- {"matrix": [6, 4], "x": 14.25, "y": 1},
- {"matrix": [6, 5], "x": 15.25, "y": 1},
- {"matrix": [6, 6], "x": 16.25, "y": 1},
- {"matrix": [6, 7], "x": 17.25, "y": 1, "w": 1.5},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 3.25, "y": 2},
- {"matrix": [2, 3], "x": 4.25, "y": 2},
- {"matrix": [2, 4], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 6.25, "y": 2},
- {"matrix": [2, 6], "x": 7.25, "y": 2},
- {"matrix": [7, 0], "x": 10.5, "y": 2},
- {"matrix": [7, 1], "x": 11.5, "y": 2},
- {"matrix": [7, 2], "x": 12.5, "y": 2},
- {"matrix": [7, 3], "x": 13.5, "y": 2},
- {"matrix": [7, 4], "x": 14.5, "y": 2},
- {"matrix": [7, 5], "x": 15.5, "y": 2},
- {"matrix": [7, 7], "x": 16.5, "y": 2, "w": 2.25},
- {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
- {"matrix": [3, 2], "x": 3.75, "y": 3},
- {"matrix": [3, 3], "x": 4.75, "y": 3},
- {"matrix": [3, 4], "x": 5.75, "y": 3},
- {"matrix": [3, 5], "x": 6.75, "y": 3},
- {"matrix": [3, 6], "x": 7.75, "y": 3},
- {"matrix": [8, 0], "x": 10, "y": 3},
- {"matrix": [8, 1], "x": 11, "y": 3},
- {"matrix": [8, 2], "x": 12, "y": 3},
- {"matrix": [8, 3], "x": 13, "y": 3},
- {"matrix": [8, 4], "x": 14, "y": 3},
- {"matrix": [8, 5], "x": 15, "y": 3},
- {"matrix": [8, 6], "x": 16, "y": 3},
- {"matrix": [8, 7], "x": 17, "y": 3, "w": 1.75},
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 8.25, "y": 4},
- {"matrix": [9, 1], "x": 10, "y": 4, "w": 2.75},
- {"matrix": [9, 3], "x": 12.75, "y": 4, "w": 1.5},
- {"matrix": [9, 5], "x": 15, "y": 4},
- {"matrix": [9, 6], "x": 16, "y": 4},
- {"matrix": [9, 7], "x": 17, "y": 4}
- ]
- }
- }
-} \ No newline at end of file
diff --git a/keyboards/era/klein/keymaps/default/keymap.c b/keyboards/era/klein/keymaps/default/keymap.c
deleted file mode 100644
index 88878bbcd9..0000000000
--- a/keyboards/era/klein/keymaps/default/keymap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2018-2022 QMK (@qmk)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT(
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
- KC_PGUP, 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_BSLS,
- KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
- KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
- ),
-
- [1] = LAYOUT(
- 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_PSCR, KC_SCRL, 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_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/era/klein/keymaps/via/keymap.c b/keyboards/era/klein/keymaps/via/keymap.c
deleted file mode 100644
index 88878bbcd9..0000000000
--- a/keyboards/era/klein/keymaps/via/keymap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2018-2022 QMK (@qmk)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT(
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
- KC_PGUP, 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_BSLS,
- KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
- KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
- ),
-
- [1] = LAYOUT(
- 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_PSCR, KC_SCRL, 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_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/era/klein/readme.md b/keyboards/era/klein/readme.md
deleted file mode 100644
index 1efeafe451..0000000000
--- a/keyboards/era/klein/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# MontK Cervin Klein
-
-* Keyboard Maintainer: [ERA](https://github.com/eerraa)
-* Hardware supported: SIRIND Klein
-* Hardware availability: [Syryan](https://srind.mysoho.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make era/klein:default
-
-Flashing example for this keyboard:
-
- make era/klein:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-## Bootloader
-
-Enter the bootloader in 3 ways:
-
-* **Bootmagic reset**: Hold down the key at ESC(0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **Physical reset button**: Briefly short the `RESET` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
-* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file
diff --git a/keyboards/ergodox_ez/led_i2c.c b/keyboards/ergodox_ez/led_i2c.c
index 23ef91b74f..a8802858ec 100644
--- a/keyboards/ergodox_ez/led_i2c.c
+++ b/keyboards/ergodox_ez/led_i2c.c
@@ -21,8 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
# include "ergodox_ez.h"
+# include "ws2812.h"
-void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) {
+void setleds_custom(rgb_led_t *led, uint16_t led_num) {
i2c_init();
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
int i = 0;
@@ -30,7 +31,7 @@ void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) {
// prevent right-half code from trying to bitbang all 30
// so with 30 LEDs, we count from 29 to 15 here, and the
// other half does 0 to 14.
- uint8_t half_led_num = RGBLED_NUM / 2;
+ uint8_t half_led_num = RGBLIGHT_LED_COUNT / 2;
for (i = half_led_num + half_led_num - 1; i >= half_led_num; --i)
# elif defined(ERGODOX_LED_15_MIRROR)
for (i = 0; i < led_num; ++i)
@@ -51,5 +52,8 @@ void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) {
ws2812_setleds(led, led_num);
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/ergodox_ez/post_config.h b/keyboards/ergodox_ez/post_config.h
index 0d4fe5c683..eb22439ae4 100644
--- a/keyboards/ergodox_ez/post_config.h
+++ b/keyboards/ergodox_ez/post_config.h
@@ -33,8 +33,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef ERGODOX_LED_30
// If using 30 LEDs, then define that many
-# define RGBLED_NUM 30 // Number of LEDs
+# define RGBLIGHT_LED_COUNT 30 // Number of LEDs
#else
// If not, then only define 15
-# define RGBLED_NUM 15 // Number of LEDs
+# define RGBLIGHT_LED_COUNT 15 // Number of LEDs
#endif
diff --git a/keyboards/ergodox_ez/shine/info.json b/keyboards/ergodox_ez/shine/info.json
index 11c3a8b209..181ac52e6c 100644
--- a/keyboards/ergodox_ez/shine/info.json
+++ b/keyboards/ergodox_ez/shine/info.json
@@ -2,5 +2,8 @@
"keyboard_name": "ErgoDox EZ Shine",
"usb": {
"pid": "0x4975"
+ },
+ "rgblight": {
+ "driver": "custom"
}
}
diff --git a/keyboards/ergodox_ez/shine/rules.mk b/keyboards/ergodox_ez/shine/rules.mk
index 1e3cebb145..b035c36850 100644
--- a/keyboards/ergodox_ez/shine/rules.mk
+++ b/keyboards/ergodox_ez/shine/rules.mk
@@ -1 +1,2 @@
RGBLIGHT_ENABLE = yes
+WS2812_DRIVER_REQUIRED = yes
diff --git a/keyboards/ergotravel/keymaps/default/config.h b/keyboards/ergotravel/keymaps/default/config.h
index d047f718d6..746e60da5a 100644
--- a/keyboards/ergotravel/keymaps/default/config.h
+++ b/keyboards/ergotravel/keymaps/default/config.h
@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 14
+#define RGBLIGHT_LED_COUNT 14
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/ergotravel/keymaps/via/config.h b/keyboards/ergotravel/keymaps/via/config.h
index 409e3efde4..d42b738adc 100644
--- a/keyboards/ergotravel/keymaps/via/config.h
+++ b/keyboards/ergotravel/keymaps/via/config.h
@@ -23,8 +23,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-// #undef RGBLED_NUM
-// #define RGBLED_NUM 14
+// #undef RGBLIGHT_LED_COUNT
+// #define RGBLIGHT_LED_COUNT 14
// #define RGBLIGHT_HUE_STEP 8
// #define RGBLIGHT_SAT_STEP 8
// #define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/fc660c/keymaps/default_rgb/config.h b/keyboards/fc660c/keymaps/default_rgb/config.h
index 23745f3190..1953964f88 100644
--- a/keyboards/fc660c/keymaps/default_rgb/config.h
+++ b/keyboards/fc660c/keymaps/default_rgb/config.h
@@ -21,7 +21,7 @@
/*RGB*/
/*Repurpose Insert LED */
#define WS2812_DI_PIN B5
- #define RGBLED_NUM 16
+ #define RGBLIGHT_LED_COUNT 16
#define RGBLIGHT_DEFAULT_HUE 127
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/fc660c/keymaps/siroleo/config.h b/keyboards/fc660c/keymaps/siroleo/config.h
deleted file mode 100644
index 8262805a0a..0000000000
--- a/keyboards/fc660c/keymaps/siroleo/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Khader Syed
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/fc660c/keymaps/via_rgb/config.h b/keyboards/fc660c/keymaps/via_rgb/config.h
index 23745f3190..1953964f88 100644
--- a/keyboards/fc660c/keymaps/via_rgb/config.h
+++ b/keyboards/fc660c/keymaps/via_rgb/config.h
@@ -21,7 +21,7 @@
/*RGB*/
/*Repurpose Insert LED */
#define WS2812_DI_PIN B5
- #define RGBLED_NUM 16
+ #define RGBLIGHT_LED_COUNT 16
#define RGBLIGHT_DEFAULT_HUE 127
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/fleuron/keymaps/dollartacos/config.h b/keyboards/fleuron/keymaps/dollartacos/config.h
deleted file mode 100644
index 1ce0a168f5..0000000000
--- a/keyboards/fleuron/keymaps/dollartacos/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2018 James Underwood
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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 \ No newline at end of file
diff --git a/keyboards/fortitude60/keymaps/default/config.h b/keyboards/fortitude60/keymaps/default/config.h
deleted file mode 100644
index 7e9b510ff6..0000000000
--- a/keyboards/fortitude60/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-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
diff --git a/keyboards/fortitude60/keymaps/via/config.h b/keyboards/fortitude60/keymaps/via/config.h
deleted file mode 100644
index 7e9b510ff6..0000000000
--- a/keyboards/fortitude60/keymaps/via/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-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
diff --git a/keyboards/foxlab/key65/universal/readme.md b/keyboards/foxlab/key65/universal/readme.md
index 967b9565f2..36f63b1aba 100644
--- a/keyboards/foxlab/key65/universal/readme.md
+++ b/keyboards/foxlab/key65/universal/readme.md
@@ -19,4 +19,4 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
## RGB LED support
-The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLED_NUM to match the number of LEDs on your strip.
+The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLIGHT_LED_COUNT to match the number of LEDs on your strip.
diff --git a/keyboards/gboards/gergo/keymaps/default/config.h b/keyboards/gboards/gergo/keymaps/default/config.h
deleted file mode 100644
index 3f59c932d3..0000000000
--- a/keyboards/gboards/gergo/keymaps/default/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-
diff --git a/keyboards/gboards/gergo/keymaps/germ/config.h b/keyboards/gboards/gergo/keymaps/germ/config.h
deleted file mode 100644
index 3f59c932d3..0000000000
--- a/keyboards/gboards/gergo/keymaps/germ/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-
diff --git a/keyboards/gboards/gergo/keymaps/gotham/config.h b/keyboards/gboards/gergo/keymaps/gotham/config.h
deleted file mode 100644
index 3f59c932d3..0000000000
--- a/keyboards/gboards/gergo/keymaps/gotham/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-
diff --git a/keyboards/converter/numeric_keypad_iie/keymaps/newbold/config.h b/keyboards/geonworks/ee_at/ee_at.c
index 667668959a..b2e6320851 100644
--- a/keyboards/converter/numeric_keypad_iie/keymaps/newbold/config.h
+++ b/keyboards/geonworks/ee_at/ee_at.c
@@ -1,4 +1,4 @@
-/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+/* Copyright 2023 Yiancar-Designs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,7 +13,18 @@
* You 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"
-#pragma once
+void led_init_ports(void) {
+ // Set our LED pins as open drain outputs
+ setPinOutputOpenDrain(LED_CAPS_LOCK_PIN);
+ setPinOutputOpenDrain(LED_NUM_LOCK_PIN);
+ setPinOutputOpenDrain(LED_SCROLL_LOCK_PIN);
+ setPinOutputOpenDrain(LED_KANA_PIN);
+ setPinOutputOpenDrain(A14);
+}
-// place overrides here
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ writePin(A14, !layer_state_cmp(state, 1));
+ return layer_state_set_user(state);
+}
diff --git a/keyboards/geonworks/ee_at/info.json b/keyboards/geonworks/ee_at/info.json
new file mode 100644
index 0000000000..803e0d3640
--- /dev/null
+++ b/keyboards/geonworks/ee_at/info.json
@@ -0,0 +1,499 @@
+{
+ "manufacturer": "Yiancar-Designs",
+ "keyboard_name": "EE-AT",
+ "maintainer": "Yiancar-Designs",
+ "bootloader": "stm32-dfu",
+ "bootmagic": {
+ "matrix": [0, 2]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "B6",
+ "kana": "A13",
+ "num_lock": "B3",
+ "on_state": 0,
+ "scroll_lock": "A15"
+ },
+ "matrix_pins": {
+ "cols": ["B7", "A0", "A1", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10"],
+ "rows": ["A2", "B9", "B8", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "url": "https://yiancar-designs.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5755",
+ "vid": "0x8968"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0},
+ {"matrix": [2, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [0, 18], "x": 19.5, "y": 0},
+ {"matrix": [0, 19], "x": 20.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [1, 18], "x": 19.5, "y": 1},
+ {"matrix": [1, 19], "x": 20.5, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 17.5, "y": 2},
+ {"matrix": [2, 17], "x": 18.5, "y": 2},
+ {"matrix": [2, 18], "x": 19.5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3},
+ {"matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 16.25, "y": 3},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [3, 17], "x": 18.5, "y": 3},
+ {"matrix": [3, 18], "x": 19.5, "y": 3},
+ {"matrix": [4, 19], "x": 20.5, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 3.75, "y": 4},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 14.75, "y": 4},
+ {"matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 2},
+ {"matrix": [4, 18], "x": 19.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [0, 18], "x": 19.5, "y": 0},
+ {"matrix": [0, 19], "x": 20.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [1, 18], "x": 19.5, "y": 1},
+ {"matrix": [1, 19], "x": 20.5, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 17.5, "y": 2},
+ {"matrix": [2, 17], "x": 18.5, "y": 2},
+ {"matrix": [2, 18], "x": 19.5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3},
+ {"matrix": [3, 14], "x": 14.5, "y": 3, "w": 2.75},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [3, 17], "x": 18.5, "y": 3},
+ {"matrix": [3, 18], "x": 19.5, "y": 3},
+ {"matrix": [4, 19], "x": 20.5, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 3.75, "y": 4},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 14.75, "y": 4},
+ {"matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 2},
+ {"matrix": [4, 18], "x": 19.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0},
+ {"matrix": [2, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [0, 18], "x": 19.5, "y": 0},
+ {"matrix": [0, 19], "x": 20.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [1, 18], "x": 19.5, "y": 1},
+ {"matrix": [1, 19], "x": 20.5, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 17.5, "y": 2},
+ {"matrix": [2, 17], "x": 18.5, "y": 2},
+ {"matrix": [2, 18], "x": 19.5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3},
+ {"matrix": [3, 14], "x": 14.5, "y": 3, "w": 2.75},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [3, 17], "x": 18.5, "y": 3},
+ {"matrix": [3, 18], "x": 19.5, "y": 3},
+ {"matrix": [4, 19], "x": 20.5, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 3.75, "y": 4},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 14.75, "y": 4},
+ {"matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 2},
+ {"matrix": [4, 18], "x": 19.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0},
+ {"matrix": [2, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [0, 18], "x": 19.5, "y": 0},
+ {"matrix": [0, 19], "x": 20.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [1, 18], "x": 19.5, "y": 1},
+ {"matrix": [1, 19], "x": 20.5, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 17.5, "y": 2},
+ {"matrix": [2, 17], "x": 18.5, "y": 2},
+ {"matrix": [2, 18], "x": 19.5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3},
+ {"matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 16.25, "y": 3},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [3, 17], "x": 18.5, "y": 3},
+ {"matrix": [3, 18], "x": 19.5, "y": 3},
+ {"matrix": [4, 19], "x": 20.5, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 3.75, "y": 4},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 14.75, "y": 4},
+ {"matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 2},
+ {"matrix": [4, 18], "x": 19.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [0, 18], "x": 19.5, "y": 0},
+ {"matrix": [0, 19], "x": 20.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [1, 18], "x": 19.5, "y": 1},
+ {"matrix": [1, 19], "x": 20.5, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 17.5, "y": 2},
+ {"matrix": [2, 17], "x": 18.5, "y": 2},
+ {"matrix": [2, 18], "x": 19.5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3},
+ {"matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 16.25, "y": 3},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [3, 17], "x": 18.5, "y": 3},
+ {"matrix": [3, 18], "x": 19.5, "y": 3},
+ {"matrix": [4, 19], "x": 20.5, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 3.75, "y": 4},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 14.75, "y": 4},
+ {"matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 2},
+ {"matrix": [4, 18], "x": 19.5, "y": 4}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/geonworks/ee_at/keymaps/default/keymap.c b/keyboards/geonworks/ee_at/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f0eb9ba7a8
--- /dev/null
+++ b/keyboards/geonworks/ee_at/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+ KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PMNS, KC_PSLS, KC_PAST,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ 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, MO(1), KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_P0, KC_PDOT),
+
+[1] = LAYOUT_all( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/geonworks/ee_at/keymaps/via/keymap.c b/keyboards/geonworks/ee_at/keymaps/via/keymap.c
new file mode 100644
index 0000000000..f0eb9ba7a8
--- /dev/null
+++ b/keyboards/geonworks/ee_at/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+ KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PMNS, KC_PSLS, KC_PAST,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ 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, MO(1), KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_P0, KC_PDOT),
+
+[1] = LAYOUT_all( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/lefty/keymaps/via/rules.mk b/keyboards/geonworks/ee_at/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/lefty/keymaps/via/rules.mk
+++ b/keyboards/geonworks/ee_at/keymaps/via/rules.mk
diff --git a/keyboards/geonworks/ee_at/matrix_diagram.md b/keyboards/geonworks/ee_at/matrix_diagram.md
new file mode 100644
index 0000000000..382487564d
--- /dev/null
+++ b/keyboards/geonworks/ee_at/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Yiancar-Designs EE-AT
+
+```
+ ┌───────┐
+ 2u Backspace │0F │
+ └───────┘
+┌───┬───┐┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┬───┐
+│00 │01 ││02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │0F │2E ││0G │0H │0I │0J │
+├───┼───┤├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┼───┤
+│10 │11 ││12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F ││1G │1H │1I │ │
+├───┼───┤├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤├───┼───┼───┤1J │
+│20 │21 ││22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2F ││2G │2H │2I │ │
+├───┼───┤├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤├───┼───┼───┼───┤
+│30 │31 ││32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │3F ││3G │3H │3I │ │
+├───┼───┤├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤├───┼───┼───┤4J │
+│40 │41 ││42 │43 │44 │48 │4D │4E │4F ││4G │4H │4I │ │
+└───┴───┘└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘└───┴───┴───┴───┘
+ ┌──────────┐
+ 2.75u RShift │3E │
+ └──────────┘
+```
diff --git a/keyboards/geonworks/ee_at/readme.md b/keyboards/geonworks/ee_at/readme.md
new file mode 100644
index 0000000000..0c7c8d1926
--- /dev/null
+++ b/keyboards/geonworks/ee_at/readme.md
@@ -0,0 +1,32 @@
+# EE-AT
+
+This is a standard weird layout PCB, now with Hotswap. It supports VIA.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A keyboard with STM32F072CB
+* Hardware Availability: https://geon.works/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make geonworks/ee_at: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).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or CLI (`make geonworks/ee_at:<keymap>:flash`)
diff --git a/keyboards/geonworks/ee_at/rules.mk b/keyboards/geonworks/ee_at/rules.mk
new file mode 100644
index 0000000000..0ab54aaaf7
--- /dev/null
+++ b/keyboards/geonworks/ee_at/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
diff --git a/keyboards/w1_at/info.json b/keyboards/geonworks/w1_at/info.json
index 896e523c83..8b7991c03d 100644
--- a/keyboards/w1_at/info.json
+++ b/keyboards/geonworks/w1_at/info.json
@@ -1,36 +1,43 @@
{
- "keyboard_name": "W1-AT",
"manufacturer": "Yiancar-Designs",
- "url": "https://yiancar-designs.com",
+ "keyboard_name": "W1-AT",
"maintainer": "Yiancar-Designs",
- "usb": {
- "vid": "0x8968",
- "pid": "0x5754",
- "device_version": "0.0.1"
- },
- "matrix_pins": {
- "cols": ["B7", "A0", "A1", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10"],
- "rows": ["A2", "B9", "B8", "B5", "B4"]
+ "bootloader": "stm32-dfu",
+ "bootmagic": {
+ "matrix": [0, 2]
},
"diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
"indicators": {
"caps_lock": "B6",
- "num_lock": "B3",
- "scroll_lock": "A15",
"kana": "A13",
- "on_state": 0
+ "num_lock": "B3",
+ "on_state": 0,
+ "scroll_lock": "A15"
},
- "bootmagic": {
- "matrix": [0, 2]
+ "matrix_pins": {
+ "cols": ["B7", "A0", "A1", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10"],
+ "rows": ["A2", "B9", "B8", "B5", "B4"]
},
"processor": "STM32F072",
- "bootloader": "stm32-dfu",
+ "url": "https://yiancar-designs.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5754",
+ "vid": "0x8968"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
-
{"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
@@ -46,15 +53,12 @@
{"label": "=", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "Backspace", "matrix": [0, 15], "x": 15.25, "y": 0},
{"label": "Delete", "matrix": [2, 14], "x": 16.25, "y": 0},
-
{"label": "Num Lock", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "-", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "/", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "*", "matrix": [0, 19], "x": 20.5, "y": 0},
-
{"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
-
{"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
@@ -69,15 +73,12 @@
{"label": "[", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "]", "matrix": [1, 14], "x": 14.75, "y": 1},
{"label": "\\", "matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
-
{"label": "7", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "8", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "9", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "+", "matrix": [1, 19], "x": 20.5, "y": 1},
-
{"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
-
{"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
@@ -91,15 +92,12 @@
{"label": ";", "matrix": [2, 12], "x": 13, "y": 2},
{"label": "'", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "Enter", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
-
{"label": "4", "matrix": [2, 16], "x": 17.5, "y": 2},
{"label": "5", "matrix": [2, 17], "x": 18.5, "y": 2},
{"label": "6", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "-", "matrix": [2, 19], "x": 20.5, "y": 2},
-
{"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
-
{"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
{"label": "\\", "matrix": [3, 3], "x": 3.5, "y": 3},
{"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
@@ -114,21 +112,17 @@
{"label": "/", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "Shift", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
{"label": "Fn", "matrix": [3, 15], "x": 16.25, "y": 3},
-
{"label": "1", "matrix": [3, 16], "x": 17.5, "y": 3},
{"label": "2", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "3", "matrix": [3, 18], "x": 19.5, "y": 3},
{"label": "-", "matrix": [3, 19], "x": 20.5, "y": 3},
-
{"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
-
{"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
-
{"label": "0", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "00", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": ".", "matrix": [4, 18], "x": 19.5, "y": 4},
@@ -139,7 +133,6 @@
"layout": [
{"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
-
{"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
@@ -154,15 +147,12 @@
{"label": "-", "matrix": [0, 13], "x": 13.25, "y": 0},
{"label": "=", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "Backspace", "matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
-
{"label": "Num Lock", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "-", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "/", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "*", "matrix": [0, 19], "x": 20.5, "y": 0},
-
{"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
-
{"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
@@ -177,15 +167,12 @@
{"label": "[", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "]", "matrix": [1, 14], "x": 14.75, "y": 1},
{"label": "\\", "matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
-
{"label": "7", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "8", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "9", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "+", "matrix": [1, 19], "x": 20.5, "y": 1},
-
{"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
-
{"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
@@ -199,15 +186,12 @@
{"label": ";", "matrix": [2, 12], "x": 13, "y": 2},
{"label": "'", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "Enter", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
-
{"label": "4", "matrix": [2, 16], "x": 17.5, "y": 2},
{"label": "5", "matrix": [2, 17], "x": 18.5, "y": 2},
{"label": "6", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "-", "matrix": [2, 19], "x": 20.5, "y": 2},
-
{"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
-
{"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
{"label": "X", "matrix": [3, 5], "x": 5.5, "y": 3},
@@ -220,21 +204,17 @@
{"label": ".", "matrix": [3, 12], "x": 12.5, "y": 3},
{"label": "/", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "Shift", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 2.75},
-
{"label": "1", "matrix": [3, 16], "x": 17.5, "y": 3},
{"label": "2", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "3", "matrix": [3, 18], "x": 19.5, "y": 3},
{"label": "-", "matrix": [3, 19], "x": 20.5, "y": 3},
-
{"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
-
{"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
-
{"label": "0", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "00", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": ".", "matrix": [4, 18], "x": 19.5, "y": 4},
@@ -245,7 +225,6 @@
"layout": [
{"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
-
{"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
@@ -261,15 +240,12 @@
{"label": "=", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "Backspace", "matrix": [0, 15], "x": 15.25, "y": 0},
{"label": "Delete", "matrix": [2, 14], "x": 16.25, "y": 0},
-
{"label": "Num Lock", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "-", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "/", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "*", "matrix": [0, 19], "x": 20.5, "y": 0},
-
{"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
-
{"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
@@ -284,15 +260,12 @@
{"label": "[", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "]", "matrix": [1, 14], "x": 14.75, "y": 1},
{"label": "\\", "matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
-
{"label": "7", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "8", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "9", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "+", "matrix": [1, 19], "x": 20.5, "y": 1},
-
{"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
-
{"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
@@ -306,15 +279,12 @@
{"label": ";", "matrix": [2, 12], "x": 13, "y": 2},
{"label": "'", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "Enter", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
-
{"label": "4", "matrix": [2, 16], "x": 17.5, "y": 2},
{"label": "5", "matrix": [2, 17], "x": 18.5, "y": 2},
{"label": "6", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "-", "matrix": [2, 19], "x": 20.5, "y": 2},
-
{"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
-
{"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
{"label": "X", "matrix": [3, 5], "x": 5.5, "y": 3},
@@ -328,21 +298,17 @@
{"label": "/", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "Shift", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
{"label": "Fn", "matrix": [3, 15], "x": 16.25, "y": 3},
-
{"label": "1", "matrix": [3, 16], "x": 17.5, "y": 3},
{"label": "2", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "3", "matrix": [3, 18], "x": 19.5, "y": 3},
{"label": "-", "matrix": [3, 19], "x": 20.5, "y": 3},
-
{"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
-
{"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
-
{"label": "0", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "00", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": ".", "matrix": [4, 18], "x": 19.5, "y": 4},
@@ -353,7 +319,6 @@
"layout": [
{"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
-
{"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
@@ -368,15 +333,12 @@
{"label": "-", "matrix": [0, 13], "x": 13.25, "y": 0},
{"label": "=", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "Backspace", "matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
-
{"label": "Num Lock", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "-", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "/", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "*", "matrix": [0, 19], "x": 20.5, "y": 0},
-
{"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
-
{"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
@@ -390,15 +352,12 @@
{"label": "P", "matrix": [1, 12], "x": 12.75, "y": 1},
{"label": "[", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "]", "matrix": [1, 14], "x": 14.75, "y": 1},
-
{"label": "7", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "8", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "9", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "+", "matrix": [1, 19], "x": 20.5, "y": 1},
-
{"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
-
{"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
@@ -413,15 +372,12 @@
{"label": "'", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "#", "matrix": [1, 15], "x": 15, "y": 2},
{"label": "Enter", "matrix": [2, 15], "x": 16, "y": 1, "w": 1.25, "h": 2},
-
{"label": "4", "matrix": [2, 16], "x": 17.5, "y": 2},
{"label": "5", "matrix": [2, 17], "x": 18.5, "y": 2},
{"label": "6", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "-", "matrix": [2, 19], "x": 20.5, "y": 2},
-
{"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
-
{"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
{"label": "\\", "matrix": [3, 3], "x": 3.5, "y": 3},
{"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
@@ -435,21 +391,17 @@
{"label": ".", "matrix": [3, 12], "x": 12.5, "y": 3},
{"label": "/", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "Shift", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 2.75},
-
{"label": "1", "matrix": [3, 16], "x": 17.5, "y": 3},
{"label": "2", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "3", "matrix": [3, 18], "x": 19.5, "y": 3},
{"label": "-", "matrix": [3, 19], "x": 20.5, "y": 3},
-
{"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
-
{"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
-
{"label": "0", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "00", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": ".", "matrix": [4, 18], "x": 19.5, "y": 4},
@@ -460,7 +412,6 @@
"layout": [
{"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
-
{"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
@@ -476,15 +427,12 @@
{"label": "=", "matrix": [0, 14], "x": 14.25, "y": 0},
{"label": "Backspace", "matrix": [0, 15], "x": 15.25, "y": 0},
{"label": "Delete", "matrix": [2, 14], "x": 16.25, "y": 0},
-
{"label": "Num Lock", "matrix": [0, 16], "x": 17.5, "y": 0},
{"label": "-", "matrix": [0, 17], "x": 18.5, "y": 0},
{"label": "/", "matrix": [0, 18], "x": 19.5, "y": 0},
{"label": "*", "matrix": [0, 19], "x": 20.5, "y": 0},
-
{"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
-
{"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
{"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
@@ -498,15 +446,12 @@
{"label": "P", "matrix": [1, 12], "x": 12.75, "y": 1},
{"label": "[", "matrix": [1, 13], "x": 13.75, "y": 1},
{"label": "]", "matrix": [1, 14], "x": 14.75, "y": 1},
-
{"label": "7", "matrix": [1, 16], "x": 17.5, "y": 1},
{"label": "8", "matrix": [1, 17], "x": 18.5, "y": 1},
{"label": "9", "matrix": [1, 18], "x": 19.5, "y": 1},
{"label": "+", "matrix": [1, 19], "x": 20.5, "y": 1},
-
{"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
-
{"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
{"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
@@ -521,15 +466,12 @@
{"label": "'", "matrix": [2, 13], "x": 14, "y": 2},
{"label": "#", "matrix": [1, 15], "x": 15, "y": 2},
{"label": "Enter", "matrix": [2, 15], "x": 16, "y": 1, "w": 1.25, "h": 2},
-
{"label": "4", "matrix": [2, 16], "x": 17.5, "y": 2},
{"label": "5", "matrix": [2, 17], "x": 18.5, "y": 2},
{"label": "6", "matrix": [2, 18], "x": 19.5, "y": 2},
{"label": "-", "matrix": [2, 19], "x": 20.5, "y": 2},
-
{"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
-
{"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
{"label": "\\", "matrix": [3, 3], "x": 3.5, "y": 3},
{"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
@@ -544,21 +486,17 @@
{"label": "/", "matrix": [3, 13], "x": 13.5, "y": 3},
{"label": "Shift", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
{"label": "Fn", "matrix": [3, 15], "x": 16.25, "y": 3},
-
{"label": "1", "matrix": [3, 16], "x": 17.5, "y": 3},
{"label": "2", "matrix": [3, 17], "x": 18.5, "y": 3},
{"label": "3", "matrix": [3, 18], "x": 19.5, "y": 3},
{"label": "-", "matrix": [3, 19], "x": 20.5, "y": 3},
-
{"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
-
{"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
{"label": "Ctrl", "matrix": [4, 15], "x": 15.75, "y": 4, "w": 1.5},
-
{"label": "0", "matrix": [4, 16], "x": 17.5, "y": 4},
{"label": "00", "matrix": [4, 17], "x": 18.5, "y": 4},
{"label": ".", "matrix": [4, 18], "x": 19.5, "y": 4},
@@ -566,4 +504,4 @@
]
}
}
-}
+} \ No newline at end of file
diff --git a/keyboards/w1_at/keymaps/default/keymap.c b/keyboards/geonworks/w1_at/keymaps/default/keymap.c
index 7c190b73d6..f69fa8a426 100644
--- a/keyboards/w1_at/keymaps/default/keymap.c
+++ b/keyboards/geonworks/w1_at/keymaps/default/keymap.c
@@ -46,4 +46,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
return true;
-} \ No newline at end of file
+}
diff --git a/keyboards/w1_at/keymaps/via/keymap.c b/keyboards/geonworks/w1_at/keymaps/via/keymap.c
index ce3b6aa4bd..ce3b6aa4bd 100644
--- a/keyboards/w1_at/keymaps/via/keymap.c
+++ b/keyboards/geonworks/w1_at/keymaps/via/keymap.c
diff --git a/keyboards/pw88/keymaps/via/rules.mk b/keyboards/geonworks/w1_at/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/pw88/keymaps/via/rules.mk
+++ b/keyboards/geonworks/w1_at/keymaps/via/rules.mk
diff --git a/keyboards/w1_at/keymaps/zq/keymap.c b/keyboards/geonworks/w1_at/keymaps/zq/keymap.c
index eba9aedb8f..eba9aedb8f 100644
--- a/keyboards/w1_at/keymaps/zq/keymap.c
+++ b/keyboards/geonworks/w1_at/keymaps/zq/keymap.c
diff --git a/keyboards/w1_at/keymaps/zq/readme.md b/keyboards/geonworks/w1_at/keymaps/zq/readme.md
index 103130b161..103130b161 100644
--- a/keyboards/w1_at/keymaps/zq/readme.md
+++ b/keyboards/geonworks/w1_at/keymaps/zq/readme.md
diff --git a/keyboards/era/klein/keymaps/via/rules.mk b/keyboards/geonworks/w1_at/keymaps/zq/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/era/klein/keymaps/via/rules.mk
+++ b/keyboards/geonworks/w1_at/keymaps/zq/rules.mk
diff --git a/keyboards/w1_at/matrix_diagram.md b/keyboards/geonworks/w1_at/matrix_diagram.md
index 6118e90fe8..6118e90fe8 100644
--- a/keyboards/w1_at/matrix_diagram.md
+++ b/keyboards/geonworks/w1_at/matrix_diagram.md
diff --git a/keyboards/w1_at/readme.md b/keyboards/geonworks/w1_at/readme.md
index 7608e72f76..16296ef6d6 100644
--- a/keyboards/w1_at/readme.md
+++ b/keyboards/geonworks/w1_at/readme.md
@@ -3,7 +3,7 @@
This is a standard weird layout PCB, best build with a 10U spacebar. It supports VIA.
* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A TKL keyboard with STM32F072CB
+* Hardware Supported: A keyboard with STM32F072CB
* Hardware Availability: https://geon.works/
## Instructions
@@ -12,7 +12,7 @@ This is a standard weird layout PCB, best build with a 10U spacebar. It supports
Make example for this keyboard (after setting up your build environment):
- make w1_at:default
+ make geonworks/w1_at: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).
@@ -29,4 +29,4 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
- Unplug
- Hold Escape
- Plug In
-- Flash using QMK Toolbox or CLI (`make w1_at:<keymap>:flash`)
+- Flash using QMK Toolbox or CLI (`make geonworks/w1_at:<keymap>:flash`)
diff --git a/keyboards/geonworks/w1_at/rules.mk b/keyboards/geonworks/w1_at/rules.mk
new file mode 100644
index 0000000000..0ab54aaaf7
--- /dev/null
+++ b/keyboards/geonworks/w1_at/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
diff --git a/keyboards/w1_at/w1_at.c b/keyboards/geonworks/w1_at/w1_at.c
index d4c4ce932a..9858561bc5 100644
--- a/keyboards/w1_at/w1_at.c
+++ b/keyboards/geonworks/w1_at/w1_at.c
@@ -13,18 +13,18 @@
* You 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 "quantum.h"
void led_init_ports(void) {
// Set our LED pins as open drain outputs
- palSetLineMode(LED_CAPS_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
- palSetLineMode(LED_NUM_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
- palSetLineMode(LED_SCROLL_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
- palSetLineMode(LED_KANA_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
- palSetLineMode(A14, PAL_MODE_OUTPUT_OPENDRAIN);
+ setPinOutputOpenDrain(LED_CAPS_LOCK_PIN);
+ setPinOutputOpenDrain(LED_NUM_LOCK_PIN);
+ setPinOutputOpenDrain(LED_SCROLL_LOCK_PIN);
+ setPinOutputOpenDrain(LED_KANA_PIN);
+ setPinOutputOpenDrain(A14);
}
layer_state_t layer_state_set_kb(layer_state_t state) {
writePin(A14, !layer_state_cmp(state, 1));
return layer_state_set_user(state);
-} \ No newline at end of file
+}
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h
index dd10d213a0..01ad55eec0 100644
--- a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h
@@ -22,8 +22,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# undef MATRIX_COL_PINS_RIGHT
# ifdef RGBLIGHT_ENABLE
-# undef RGBLED_NUM
-# define RGBLED_NUM 120
+# undef RGBLIGHT_LED_COUNT
+# define RGBLIGHT_LED_COUNT 120
# undef RGBLIGHT_LED_MAP
# define RGBLIGHT_LED_MAP { \
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h
index 01905b8dfe..decc2e2dc1 100644
--- a/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h
@@ -7,8 +7,8 @@
# undef MATRIX_COL_PINS_RIGHT
# ifdef RGBLIGHT_ENABLE
-# undef RGBLED_NUM
-# define RGBLED_NUM 120
+# undef RGBLIGHT_LED_COUNT
+# define RGBLIGHT_LED_COUNT 120
# undef RGBLIGHT_LED_MAP
# define RGBLIGHT_LED_MAP { \
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \
diff --git a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h
index 0f71fedd0e..b3970ff04a 100644
--- a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h
+++ b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h
@@ -21,8 +21,8 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 180
-#ifdef RGBLED_NUM
- #undef RGBLED_NUM
+#ifdef RGBLIGHT_LED_COUNT
+ #undef RGBLIGHT_LED_COUNT
#endif
#define RGB_MATRIX_LED_COUNT 73
diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/config.h b/keyboards/hadron/ver3/keymaps/sebaslayout/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/hadron/ver3/keymaps/sebaslayout/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/handwired/6macro/keymaps/default/config.h b/keyboards/handwired/6macro/keymaps/default/config.h
deleted file mode 100644
index 64ba57443f..0000000000
--- a/keyboards/handwired/6macro/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2019 joaofbmaia
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
diff --git a/keyboards/handwired/6macro/keymaps/osu/config.h b/keyboards/handwired/6macro/keymaps/osu/config.h
deleted file mode 100644
index 64ba57443f..0000000000
--- a/keyboards/handwired/6macro/keymaps/osu/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2019 joaofbmaia
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
diff --git a/keyboards/handwired/chiron/keymaps/default/config.h b/keyboards/handwired/chiron/keymaps/default/config.h
index c373743a39..5d8a8a083d 100644
--- a/keyboards/handwired/chiron/keymaps/default/config.h
+++ b/keyboards/handwired/chiron/keymaps/default/config.h
@@ -30,8 +30,8 @@
#define MOUSEKEY_WHEEL_MAX_SPEED 8
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
-#undef RGBLED_NUM
-#define RGBLED_NUM 2
+#undef RGBLIGHT_LED_COUNT
+#define RGBLIGHT_LED_COUNT 2
#define RGBLED_SPLIT {1, 1}
// Don't turn off lights when the host goes to sleep.
diff --git a/keyboards/handwired/freoduo/keymaps/default/keymap.c b/keyboards/handwired/freoduo/keymaps/default/keymap.c
index bd01de7585..791e6af318 100644
--- a/keyboards/handwired/freoduo/keymaps/default/keymap.c
+++ b/keyboards/handwired/freoduo/keymaps/default/keymap.c
@@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 7, 0},
{7, 24, HSV_RED},
- {24, RGBLED_NUM, 0}
+ {24, RGBLIGHT_LED_COUNT, 0}
);
// Light all LEDs in green when keyboard layer 1 is active
const rgblight_segment_t PROGMEM layer_lower[] = RGBLIGHT_LAYER_SEGMENTS(
diff --git a/keyboards/handwired/hnah40rgb/keymaps/default/config.h b/keyboards/handwired/hnah40rgb/keymaps/default/config.h
deleted file mode 100644
index aa9325a59d..0000000000
--- a/keyboards/handwired/hnah40rgb/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 HnahKB
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk b/keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk
deleted file mode 100644
index 916b1154bd..0000000000
--- a/keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-# Build Overrides
diff --git a/keyboards/handwired/onekey/keymaps/apa102/config.h b/keyboards/handwired/onekey/keymaps/apa102/config.h
index 756ebb3593..bb618d77fb 100644
--- a/keyboards/handwired/onekey/keymaps/apa102/config.h
+++ b/keyboards/handwired/onekey/keymaps/apa102/config.h
@@ -1,6 +1,6 @@
#pragma once
-#define RGBLED_NUM 40
+#define RGBLIGHT_LED_COUNT 40
#define APA102_DEFAULT_BRIGHTNESS 5
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h b/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h
new file mode 100644
index 0000000000..7e5b6c0b91
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+// TODO: Remove reuse of pin
+#define DIP_SWITCH_PINS { WS2812_DI_PIN }
diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c b/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c
new file mode 100644
index 0000000000..35bb16d458
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c
@@ -0,0 +1,14 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_1x1(KC_A),
+ [1] = LAYOUT_ortho_1x1(KC_B),
+};
+
+#if defined(DIP_SWITCH_MAP_ENABLE)
+const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = {
+ DIP_SWITCH_OFF_ON(DF(0), DF(1))
+};
+#endif
diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk b/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk
new file mode 100644
index 0000000000..b2429854f1
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk
@@ -0,0 +1,2 @@
+DIP_SWITCH_ENABLE = yes
+DIP_SWITCH_MAP_ENABLE = yes
diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/config.h b/keyboards/handwired/steamvan/keymaps/jmdaly/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/handwired/steamvan/keymaps/jmdaly/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/handwired/ziyoulang_k3_mod/config.h b/keyboards/handwired/ziyoulang_k3_mod/config.h
new file mode 100644
index 0000000000..304ca5eb28
--- /dev/null
+++ b/keyboards/handwired/ziyoulang_k3_mod/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Coom (@coomstoolbox)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define I2C1_SCL_PIN B10
+#define I2C1_SDA_PIN B11
+#define I2C_DRIVER I2CD2
diff --git a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h b/keyboards/handwired/ziyoulang_k3_mod/halconf.h
index 0054f43e6b..44602147bb 100644
--- a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h
+++ b/keyboards/handwired/ziyoulang_k3_mod/halconf.h
@@ -1,4 +1,4 @@
-/* Copyright 2017 Baris Tosun
+/* Copyright 2021 QMK
*
* This 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,5 +16,6 @@
#pragma once
-// place overrides here
+#define HAL_USE_I2C TRUE
+#include_next <halconf.h>
diff --git a/keyboards/handwired/ziyoulang_k3_mod/info.json b/keyboards/handwired/ziyoulang_k3_mod/info.json
index 127cc51299..5d4ca7a254 100644
--- a/keyboards/handwired/ziyoulang_k3_mod/info.json
+++ b/keyboards/handwired/ziyoulang_k3_mod/info.json
@@ -2,7 +2,7 @@
"keyboard_name": "ziyoulang k3 mod",
"development_board": "bluepill",
"usb": {
- "device_version": "1.0.0",
+ "device_version": "1.2.0",
"pid": "0xE002",
"vid": "0x5006"
},
@@ -11,10 +11,14 @@
"command": false,
"console": false,
"extrakey": true,
- "mousekey": true,
- "nkro": false
+ "mousekey": false,
+ "nkro": false,
+ "oled": true
},
- "diode_direction": "COL2ROW",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "ROW2COL",
"dynamic_keymap": {
"layer_count": 3
},
@@ -78,7 +82,7 @@
{"label":"P", "x":10.5, "y":2.25, "matrix": [2, 10]},
{"label":"{", "x":11.5, "y":2.25, "matrix": [2, 11]},
{"label":"}", "x":12.5, "y":2.25, "matrix": [2, 12]},
- {"label":"|", "x":13.5, "y":2.25, "w":1.5, "matrix": [2, 13]},
+ {"label":"|", "x":13.5, "y":2.25, "w":1.5, "matrix": [3, 13]},
{"label":"7", "x":15.5, "y":2.25, "matrix": [2, 17]},
{"label":"8", "x":16.5, "y":2.25, "matrix": [2, 18]},
{"label":"9", "x":17.5, "y":2.25, "matrix": [2, 19]},
@@ -96,7 +100,7 @@
{"label":"L", "x":9.75, "y":3.25, "matrix": [3, 10]},
{"label":":", "x":10.75, "y":3.25, "matrix": [3, 11]},
{"label":"\"", "x":11.75, "y":3.25, "matrix": [3, 12]},
- {"label":"Enter", "x":12.75, "y":3.25, "w":2.25, "matrix": [3, 13]},
+ {"label":"Enter", "x":12.75, "y":3.25, "w":2.25, "matrix": [2, 13]},
{"label":"4", "x":15.5, "y":3.25, "matrix": [3, 17]},
{"label":"5", "x":16.5, "y":3.25, "matrix": [3, 18]},
{"label":"6", "x":17.5, "y":3.25, "matrix": [3, 19]},
@@ -139,4 +143,4 @@
"manufacturer": "Coom",
"maintainer": "coomstoolbox",
"url": ""
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/ziyoulang_k3_mod/keymaps/via/rules.mk b/keyboards/handwired/ziyoulang_k3_mod/keymaps/via/rules.mk
index ea877d6786..1e5b99807c 100644
--- a/keyboards/handwired/ziyoulang_k3_mod/keymaps/via/rules.mk
+++ b/keyboards/handwired/ziyoulang_k3_mod/keymaps/via/rules.mk
@@ -1,3 +1 @@
VIA_ENABLE = yes
-MOUSEKEY_ENABLE = no
-LTO_ENABLE = yes
diff --git a/keyboards/handwired/ziyoulang_k3_mod/mcuconf.h b/keyboards/handwired/ziyoulang_k3_mod/mcuconf.h
new file mode 100644
index 0000000000..8f1da10fe2
--- /dev/null
+++ b/keyboards/handwired/ziyoulang_k3_mod/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2021 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_I2C_USE_I2C2
+#define STM32_I2C_USE_I2C2 TRUE
diff --git a/keyboards/handwired/ziyoulang_k3_mod/readme.md b/keyboards/handwired/ziyoulang_k3_mod/readme.md
index 7e247fde19..553f735d4c 100644
--- a/keyboards/handwired/ziyoulang_k3_mod/readme.md
+++ b/keyboards/handwired/ziyoulang_k3_mod/readme.md
@@ -23,7 +23,7 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
[KiCAD wiring diagram](https://github.com/coomstoolbox/ZK3-BP-MOD-wiring-diagram)
-![explanation](https://i.imgur.com/yvhvhoBh.png)
+![explanation](https://i.imgur.com/thGIdOth.png)
## Bootloader
diff --git a/keyboards/handwired/ziyoulang_k3_mod/ziyoulang_k3_mod.c b/keyboards/handwired/ziyoulang_k3_mod/ziyoulang_k3_mod.c
new file mode 100644
index 0000000000..cadae4aa28
--- /dev/null
+++ b/keyboards/handwired/ziyoulang_k3_mod/ziyoulang_k3_mod.c
@@ -0,0 +1,117 @@
+// Copyright 2023 Coom (@coomstoolbox)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+#include <stdio.h>
+
+void keyboard_post_init_kb(void) {
+#ifdef CONSOLE_ENABLE
+ debug_enable=true;
+ debug_matrix=true;
+#endif
+ keyboard_post_init_user();
+}
+
+static uint16_t last_keycode = KC_NO;
+static keypos_t last_key = {0, 0};
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ // コンソールが有効化されている場合、マトリックス上の位置とキー押下状態を出力します
+#ifdef CONSOLE_ENABLE
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+#endif
+ if (record->event.pressed) {
+ if (last_keycode != keycode) {
+ last_keycode = keycode;
+ last_key = record->event.key;
+ }
+ }
+ return true;
+}
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_180;
+}
+
+static void render_logo(void) {
+ static const char PROGMEM qmk_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+ oled_write_P(qmk_logo, false);
+#ifdef CONSOLE_ENABLE
+ uprintf("Ziyoulang K3 Mod\n");
+ oled_set_cursor(3, 0);
+ oled_write_P(PSTR("Ziyoulang K3 Mod"), false);
+#endif
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ int uptime_seconds = (int)(timer_read32() / 1000);
+ if (uptime_seconds < 5) {
+ render_logo();
+ return false;
+ }
+
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case 0:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case 1:
+ oled_write_P(PSTR("2\n"), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("3\n"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("Undefined"), false);
+ }
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ if (led_state.num_lock) {
+ oled_write_P(PSTR("NUM"), true);
+ oled_write_P(PSTR(" "), false);
+ } else {
+ oled_write_P(PSTR(" "), false);
+ }
+ if (led_state.caps_lock) {
+ oled_write_P(PSTR("CAP"), true);
+ oled_write_P(PSTR(" "), false);
+ } else {
+ oled_write_P(PSTR(" "), false);
+ }
+ if (led_state.scroll_lock) {
+ oled_write_P(PSTR("SCR"), true);
+ oled_write_ln_P(PSTR(" "), false);
+ } else {
+ oled_write_ln_P(PSTR(" "), false);
+ }
+
+ // Last Key pressed info
+ oled_write_P(PSTR("kc : "), false);
+ if (last_keycode > 21000) {
+ oled_write_ln_P(PSTR(" Fn"), false);
+ } else {
+ oled_write_ln_P(get_u16_str(last_keycode, ' '), false);
+ }
+ oled_write_P(PSTR("col: "), false);
+ oled_write_P(get_u8_str(last_key.col, ' '), false);
+ oled_write_P(PSTR(",row: "), false);
+ oled_write_P(get_u8_str(last_key.row, ' '), false);
+
+ return false;
+}
+#endif
diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h
index f5eb4c13e1..e1cd9c2e90 100644
--- a/keyboards/helix/pico/config.h
+++ b/keyboards/helix/pico/config.h
@@ -50,20 +50,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Helix keyboard RGB LED support
// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
#ifdef RGBLED_BACK
- #define RGBLED_NUM 25
+ #define RGBLIGHT_LED_COUNT 25
#else
- #define RGBLED_NUM 6
+ #define RGBLIGHT_LED_COUNT 6
#endif
#ifndef IOS_DEVICE_ENABLE
- #if RGBLED_NUM <= 6
+ #if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 130
#endif
#define RGBLIGHT_VAL_STEP 17
#else
- #if RGBLED_NUM <= 6
+ #if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 45
diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h
index 7ab494522a..8af2a44ecc 100644
--- a/keyboards/helix/rev2/config.h
+++ b/keyboards/helix/rev2/config.h
@@ -31,20 +31,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Helix keyboard RGB LED support
// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
#ifdef RGBLED_BACK
- #define RGBLED_NUM 32
+ #define RGBLIGHT_LED_COUNT 32
#else
- #define RGBLED_NUM 6
+ #define RGBLIGHT_LED_COUNT 6
#endif
#ifndef IOS_DEVICE_ENABLE
- #if RGBLED_NUM <= 6
+ #if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 120
#endif
#define RGBLIGHT_VAL_STEP 17
#else
- #if RGBLED_NUM <= 6
+ #if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 35
diff --git a/keyboards/hineybush/hbcp/hbcp.c b/keyboards/hineybush/hbcp/hbcp.c
index df17650f27..754b63b200 100644
--- a/keyboards/hineybush/hbcp/hbcp.c
+++ b/keyboards/hineybush/hbcp/hbcp.c
@@ -70,7 +70,7 @@ bool led_update_kb(led_t led_state) {
__attribute__ ((weak))
void keyboard_post_init_user(void) {
- rgblight_set_effect_range(3, RGBLED_NUM-3);
+ rgblight_set_effect_range(3, RGBLIGHT_LED_COUNT-3);
led_t led_state = {
.caps_lock = true,
.num_lock = true,
diff --git a/keyboards/ibm/model_m/mschwingen/mschwingen.c b/keyboards/ibm/model_m/mschwingen/mschwingen.c
index 8e3810cd23..03dfcdc2f2 100644
--- a/keyboards/ibm/model_m/mschwingen/mschwingen.c
+++ b/keyboards/ibm/model_m/mschwingen/mschwingen.c
@@ -36,10 +36,10 @@ static bool blink_state = false;
static uint8_t isRecording = 0;
#ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812
-# if RGBLED_NUM < 3
+# if RGBLIGHT_LED_COUNT < 3
# error we need at least 3 RGB LEDs!
# endif
-static rgb_led_t led[RGBLED_NUM] = {{255, 255, 255}, {255, 255, 255}, {255, 255, 255}};
+static rgb_led_t led[RGBLIGHT_LED_COUNT] = {{255, 255, 255}, {255, 255, 255}, {255, 255, 255}};
# define BRIGHT 32
# define DIM 6
@@ -84,13 +84,13 @@ void sleep_led_enable(void) {
led[0] = black;
led[1] = black;
led[2] = black;
- ws2812_setleds(led, RGBLED_NUM);
+ ws2812_setleds(led, RGBLIGHT_LED_COUNT);
#endif
}
void keyboard_pre_init_kb(void) {
#ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812
- ws2812_setleds(led, RGBLED_NUM);
+ ws2812_setleds(led, RGBLIGHT_LED_COUNT);
#else
/* Set status LEDs pins to output and Low (on) */
setPinOutput(MODELM_LED_CAPSLOCK);
@@ -146,7 +146,7 @@ static void led_update_rgb(void) {
break;
}
if (!suspend_active) {
- ws2812_setleds(led, RGBLED_NUM);
+ ws2812_setleds(led, RGBLIGHT_LED_COUNT);
}
}
diff --git a/keyboards/ibm/model_m/teensypp/keymaps/iw0rm3r/config.h b/keyboards/ibm/model_m/teensypp/keymaps/iw0rm3r/config.h
deleted file mode 100644
index 779e5a858f..0000000000
--- a/keyboards/ibm/model_m/teensypp/keymaps/iw0rm3r/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 iw0rm3r
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/ibm/model_m_122/ibm122m/keymaps/default/config.h b/keyboards/ibm/model_m_122/ibm122m/keymaps/default/config.h
deleted file mode 100644
index 0453a72580..0000000000
--- a/keyboards/ibm/model_m_122/ibm122m/keymaps/default/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/ibm/model_m_122/ibm122m/keymaps/lukaus/config.h b/keyboards/ibm/model_m_122/ibm122m/keymaps/lukaus/config.h
deleted file mode 100644
index bf338e196d..0000000000
--- a/keyboards/ibm/model_m_122/ibm122m/keymaps/lukaus/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/idobao/id75/keymaps/revok75/config.h b/keyboards/idobao/id75/keymaps/revok75/config.h
deleted file mode 100644
index f5c4659880..0000000000
--- a/keyboards/idobao/id75/keymaps/revok75/config.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* 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/idobao/id75/keymaps/revok75/rules.mk b/keyboards/idobao/id75/keymaps/revok75/rules.mk
deleted file mode 100644
index 7efceba50a..0000000000
--- a/keyboards/idobao/id75/keymaps/revok75/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/idobao/id75/keymaps/xaceofspaidsx/config.h b/keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h
deleted file mode 100644
index a3ed4f762a..0000000000
--- a/keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/input_club/k_type/is31fl3733-dual.c b/keyboards/input_club/k_type/is31fl3733-dual.c
index e471cf0b71..385416439a 100644
--- a/keyboards/input_club/k_type/is31fl3733-dual.c
+++ b/keyboards/input_club/k_type/is31fl3733-dual.c
@@ -60,11 +60,10 @@
# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
+uint8_t i2c_transfer_buffer[20];
// These buffers match the IS31FL3733 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
@@ -77,47 +76,52 @@ bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT]
bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
+ i2c_transfer_buffer[0] = reg;
+ i2c_transfer_buffer[1] = data;
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(index, addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(index, addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
+void is31fl3733_select_page(uint8_t index, uint8_t addr, uint8_t page) {
+ is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, page);
+}
+
bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
+ // Assumes page 1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
+ // i2c_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
+ i2c_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (int j = 0; j < 16; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ i2c_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(index, addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
+ if (i2c_transmit(index, addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -150,32 +154,23 @@ void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
// then disable software shutdown.
// Sync is passed so set it according to the datasheet.
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(bus, addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_PWM);
- // Select PG1
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(bus, addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_FUNCTION);
- // Select PG3
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3733_write_register(bus, addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -242,11 +237,9 @@ void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
+ is31fl3733_select_page(index, addr, IS31FL3733_COMMAND_PWM);
- // If any of the transactions fail we risk writing dirty PG0,
+ // If any of the transactions fail we risk writing dirty page 0,
// refresh page 0 just in case.
if (!is31fl3733_write_pwm_buffer(index, addr, g_pwm_buffer[index])) {
g_led_control_registers_update_required[index] = true;
@@ -257,9 +250,8 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ is31fl3733_select_page(index, addr, IS31FL3733_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(index, addr, i, g_led_control_registers[index][i]);
}
diff --git a/keyboards/input_club/k_type/is31fl3733-dual.h b/keyboards/input_club/k_type/is31fl3733-dual.h
index 2f7d58f7e7..e0fc5fd3b9 100644
--- a/keyboards/input_club/k_type/is31fl3733-dual.h
+++ b/keyboards/input_club/k_type/is31fl3733-dual.h
@@ -70,6 +70,7 @@ extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3733_select_page(uint8_t index, uint8_t addr, uint8_t page);
bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer);
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
index c40495c8de..5052271687 100644
--- a/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
@@ -16,37 +16,5 @@
#pragma once
-
-#ifdef RGB_MATRIX_ENABLE
-// # define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// # define RGB_MATRIX_KEYPRESSES
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINDROPS
-
-// # define DEBUG_MATRIX_SCAN_RATE
-
-# define RGB_MATRIX_LED_FLUSH_LIMIT 100
-// # define RGB_MATRIX_LED_PROCESS_LIMIT 2
-
-// i2c_master defines
-# define I2C_COUNT 2
-
-# define I2C1_BANK GPIOB
-# define I2C1_SCL 0 // A2 on pinout = B0
-# define I2C1_SDA 1 // A2 on pinout = B1
-# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define USE_I2C2
-# define I2C2_BANK GPIOC
-# define I2C2_SCL 10 // A2 on pinout = C10
-# define I2C2_SDA 11 // A2 on pinout = C11
-# define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define DRIVER_ADDR_1 0b1010000
-# define DRIVER_ADDR_2 0b1010000
-# define DRIVER_COUNT 2
-# define DRIVER_1_LED_TOTAL 64
-# define DRIVER_2_LED_TOTAL 55
-# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-#endif
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINDROPS
+#define RGB_MATRIX_LED_FLUSH_LIMIT 100
diff --git a/keyboards/jc65/v32u4/keymaps/coth/config.h b/keyboards/jc65/v32u4/keymaps/coth/config.h
deleted file mode 100644
index a5568e400d..0000000000
--- a/keyboards/jc65/v32u4/keymaps/coth/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../config.h"
diff --git a/keyboards/jc65/v32u4/keymaps/dead_encryption/config.h b/keyboards/jc65/v32u4/keymaps/dead_encryption/config.h
deleted file mode 100644
index a5568e400d..0000000000
--- a/keyboards/jc65/v32u4/keymaps/dead_encryption/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../config.h"
diff --git a/keyboards/jc65/v32u4/keymaps/jetpacktuxedo/config.h b/keyboards/jc65/v32u4/keymaps/jetpacktuxedo/config.h
deleted file mode 100644
index a5568e400d..0000000000
--- a/keyboards/jc65/v32u4/keymaps/jetpacktuxedo/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../config.h"
diff --git a/keyboards/jc65/v32u4/keymaps/na7thana/config.h b/keyboards/jc65/v32u4/keymaps/na7thana/config.h
deleted file mode 100644
index a5568e400d..0000000000
--- a/keyboards/jc65/v32u4/keymaps/na7thana/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../config.h"
diff --git a/keyboards/jian/keymaps/default/config.h b/keyboards/jian/keymaps/default/config.h
deleted file mode 100644
index 314836a54d..0000000000
--- a/keyboards/jian/keymaps/default/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#pragma once
diff --git a/keyboards/jian/keymaps/left_hand/config.h b/keyboards/jian/keymaps/left_hand/config.h
deleted file mode 100644
index cae66a5c3a..0000000000
--- a/keyboards/jian/keymaps/left_hand/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#pragma once
-
diff --git a/keyboards/jian/keymaps/via/config.h b/keyboards/jian/keymaps/via/config.h
deleted file mode 100644
index cae66a5c3a..0000000000
--- a/keyboards/jian/keymaps/via/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#pragma once
-
diff --git a/keyboards/jian/nsrev2/config.h b/keyboards/jian/nsrev2/config.h
index 5025847259..7df400367f 100644
--- a/keyboards/jian/nsrev2/config.h
+++ b/keyboards/jian/nsrev2/config.h
@@ -22,14 +22,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_TIMER
#ifndef IOS_DEVICE_ENABLE
-#if RGBLED_NUM <= 6
+#if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 130
#endif
#define RGBLIGHT_VAL_STEP 8
#else
-#if RGBLED_NUM <= 6
+#if RGBLIGHT_LED_COUNT <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 45
diff --git a/keyboards/jian/rev1/post_config.h b/keyboards/jian/rev1/post_config.h
index fade065e19..935d0d1f01 100644
--- a/keyboards/jian/rev1/post_config.h
+++ b/keyboards/jian/rev1/post_config.h
@@ -1,14 +1,14 @@
#pragma once
#ifndef IOS_DEVICE_ENABLE
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 255
# else
# define RGBLIGHT_LIMIT_VAL 130
# endif
# define RGBLIGHT_VAL_STEP 8
#else
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 90
# else
# define RGBLIGHT_LIMIT_VAL 45
diff --git a/keyboards/jian/rev2/post_config.h b/keyboards/jian/rev2/post_config.h
index fade065e19..935d0d1f01 100644
--- a/keyboards/jian/rev2/post_config.h
+++ b/keyboards/jian/rev2/post_config.h
@@ -1,14 +1,14 @@
#pragma once
#ifndef IOS_DEVICE_ENABLE
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 255
# else
# define RGBLIGHT_LIMIT_VAL 130
# endif
# define RGBLIGHT_VAL_STEP 8
#else
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 90
# else
# define RGBLIGHT_LIMIT_VAL 45
diff --git a/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h
deleted file mode 100644
index bf1149ebc6..0000000000
--- a/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 kakunpc
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/kapcave/gskt00/keymaps/default-poly/config.h b/keyboards/kapcave/gskt00/keymaps/default-poly/config.h
index 64135cabcd..40a7c6ec47 100644
--- a/keyboards/kapcave/gskt00/keymaps/default-poly/config.h
+++ b/keyboards/kapcave/gskt00/keymaps/default-poly/config.h
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 14
+#define RGBLIGHT_LED_COUNT 14
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 12
diff --git a/keyboards/kapl/keymaps/default/config.h b/keyboards/kapl/keymaps/default/config.h
deleted file mode 100644
index cc82705192..0000000000
--- a/keyboards/kapl/keymaps/default/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright 2022 Alexander Lozyuk (@keyzog)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
diff --git a/keyboards/kapl/keymaps/via/config.h b/keyboards/kapl/keymaps/via/config.h
deleted file mode 100644
index cc82705192..0000000000
--- a/keyboards/kapl/keymaps/via/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-// Copyright 2022 Alexander Lozyuk (@keyzog)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
diff --git a/keyboards/karn/info.json b/keyboards/karn/info.json
index c15801da35..b088f61425 100644
--- a/keyboards/karn/info.json
+++ b/keyboards/karn/info.json
@@ -23,52 +23,54 @@
"split": {
"enabled": true
},
- "community_layouts": ["split_3x6_3"],
"layouts": {
- "LAYOUT_split_3x6_3": {
+ "LAYOUT": {
"layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
- {"matrix": [4, 0], "x": 8, "y": 0},
- {"matrix": [4, 1], "x": 9, "y": 0},
- {"matrix": [4, 2], "x": 10, "y": 0},
- {"matrix": [4, 3], "x": 11, "y": 0},
- {"matrix": [4, 4], "x": 12, "y": 0},
- {"matrix": [4, 5], "x": 13, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
+
+ {"matrix": [4, 0], "x": 9, "y": 0},
+ {"matrix": [4, 1], "x": 10, "y": 0},
+ {"matrix": [4, 2], "x": 11, "y": 0},
+ {"matrix": [4, 3], "x": 12, "y": 0},
+ {"matrix": [4, 4], "x": 13, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 0.75, "h": 1.5},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
- {"matrix": [5, 0], "x": 8, "y": 1},
- {"matrix": [5, 1], "x": 9, "y": 1},
- {"matrix": [5, 2], "x": 10, "y": 1},
- {"matrix": [5, 3], "x": 11, "y": 1},
- {"matrix": [5, 4], "x": 12, "y": 1},
- {"matrix": [5, 5], "x": 13, "y": 1},
- {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [5, 0], "x": 9, "y": 1},
+ {"matrix": [5, 1], "x": 10, "y": 1},
+ {"matrix": [5, 2], "x": 11, "y": 1},
+ {"matrix": [5, 3], "x": 12, "y": 1},
+ {"matrix": [5, 4], "x": 13, "y": 1},
+ {"matrix": [5, 5], "x": 14, "y": 0.75, "h": 1.5},
+
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
- {"matrix": [6, 0], "x": 8, "y": 2},
- {"matrix": [6, 1], "x": 9, "y": 2},
- {"matrix": [6, 2], "x": 10, "y": 2},
- {"matrix": [6, 3], "x": 11, "y": 2},
- {"matrix": [6, 4], "x": 12, "y": 2},
- {"matrix": [6, 5], "x": 13, "y": 2},
- {"matrix": [3, 0], "x": 3.5, "y": 3.25},
- {"matrix": [3, 1], "x": 4.5, "y": 3.5},
- {"matrix": [3, 2], "x": 5.5, "y": 3.75},
- {"matrix": [7, 0], "x": 7.5, "y": 3.75},
- {"matrix": [7, 1], "x": 8.5, "y": 3.5},
- {"matrix": [7, 2], "x": 9.5, "y": 3.25}
+
+ {"matrix": [6, 0], "x": 9, "y": 2},
+ {"matrix": [6, 1], "x": 10, "y": 2},
+ {"matrix": [6, 2], "x": 11, "y": 2},
+ {"matrix": [6, 3], "x": 12, "y": 2},
+ {"matrix": [6, 4], "x": 13, "y": 2},
+
+ {"matrix": [3, 0], "x": 4, "y": 3, "h": 1.5},
+ {"matrix": [3, 1], "x": 5, "y": 3.25, "h": 1.5},
+ {"matrix": [3, 2], "x": 6, "y": 3.5, "h": 1.5},
+
+ {"matrix": [7, 0], "x": 8, "y": 3.5, "h": 1.5},
+ {"matrix": [7, 1], "x": 9, "y": 3.25, "h": 1.5},
+ {"matrix": [7, 2], "x": 10, "y": 3, "h": 1.5}
]
}
}
diff --git a/keyboards/karn/keymaps/colemak/keymap.c b/keyboards/karn/keymaps/colemak/keymap.c
index 585798e8a1..13f23170e1 100644
--- a/keyboards/karn/keymaps/colemak/keymap.c
+++ b/keyboards/karn/keymaps/colemak/keymap.c
@@ -31,34 +31,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// default (colemak)
- [0] = LAYOUT_split_3x6_3(
- KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_NO,
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
HYPR_T(KC_TAB),KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, HYPR_T(KC_ENT),
- KC_NO, SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_K, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),KC_NO,
+ SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_K, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),
MO(1), SFT_T(KC_ESC),MO(3), KC_BSPC,KC_SPC,MO(2)
),
// symbols
- [1] = LAYOUT_split_3x6_3(
- _______, KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ [1] = LAYOUT(
+ KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_DEL, _______, _______
),
// nav
- [2] = LAYOUT_split_3x6_3(
- _______, _______, KC_Q, _______, _______, KC_VOLU, _______, _______, _______, KC_SCLN, _______, _______,
+ [2] = LAYOUT(
+ _______, KC_Q, _______, _______, KC_VOLU, _______, _______, _______, KC_SCLN, _______,
_______, C(KC_UP),C(KC_DOWN),G(KC_GRV), G(KC_TAB), KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_CAPS, _______,
- _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
// numbers
- [3] = LAYOUT_split_3x6_3(
- _______, TD(TD_F1_F11), TD(TD_F2_F12), KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ [3] = LAYOUT(
+ TD(TD_F1_F11), TD(TD_F2_F12), 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, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/karn/keymaps/default/keymap.c b/keyboards/karn/keymaps/default/keymap.c
index 5f679552d9..b39fe99d5d 100644
--- a/keyboards/karn/keymaps/default/keymap.c
+++ b/keyboards/karn/keymaps/default/keymap.c
@@ -7,34 +7,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// default (qwerty)
- [0] = LAYOUT_split_3x6_3(
- KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO,
- HYPR_T(KC_TAB),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, HYPR_T(KC_ENT),
- KC_NO, SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_N, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),KC_NO,
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ HYPR_T(KC_TAB),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, HYPR_T(KC_ENT),
+ SFT_T(KC_Z),CTL_T(KC_X),ALT_T(KC_C),CMD_T(KC_V),KC_B, KC_N, CMD_T(KC_M),ALT_T(KC_COMM),CTL_T(KC_DOT),RSFT_T(KC_SLSH),
MO(1), SFT_T(KC_ESC),MO(3), KC_BSPC,KC_SPC,MO(2)
),
// symbols
- [1] = LAYOUT_split_3x6_3(
- _______, KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ [1] = LAYOUT(
+ KC_BSLS, KC_GRV, KC_QUOT, KC_DQT, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_DEL, _______, _______
),
// nav
- [2] = LAYOUT_split_3x6_3(
- _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______,
+ [2] = LAYOUT(
+ _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______, _______,
_______, C(KC_UP),C(KC_DOWN),G(KC_GRV), G(KC_TAB), KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_CAPS, _______,
- _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
// numbers
- [3] = LAYOUT_split_3x6_3(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ [3] = LAYOUT(
+ 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, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h b/keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h
deleted file mode 100644
index f4d7de06e5..0000000000
--- a/keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 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/>.
- */
-
-#pragma once
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/martinffx/config.h b/keyboards/kbdfans/kbd67/rev1/keymaps/martinffx/config.h
deleted file mode 100644
index a3ed4f762a..0000000000
--- a/keyboards/kbdfans/kbd67/rev1/keymaps/martinffx/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/kbdfans/kbd67/rev2/keymaps/koba/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/koba/config.h
deleted file mode 100644
index f4d7de06e5..0000000000
--- a/keyboards/kbdfans/kbd67/rev2/keymaps/koba/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 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/>.
- */
-
-#pragma once
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/rouge8/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/rouge8/config.h
deleted file mode 100644
index a3ed4f762a..0000000000
--- a/keyboards/kbdfans/kbd67/rev2/keymaps/rouge8/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/kbdfans/niu_mini/keymaps/planck/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk
deleted file mode 100644
index 8b13789179..0000000000
--- a/keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/keyboards/kc60/mod_rgb_underglow.md b/keyboards/kc60/mod_rgb_underglow.md
index 6aab1e1d2e..22ade4fa1b 100644
--- a/keyboards/kc60/mod_rgb_underglow.md
+++ b/keyboards/kc60/mod_rgb_underglow.md
@@ -9,8 +9,8 @@ By default, the source is set up for 16 LEDs on the F5 breakout pin. See [includ
```c
#pragma once
-#undef RGBLED_NUM
-#define RGBLED_NUM <number of leds>
+#undef RGBLIGHT_LED_COUNT
+#define RGBLIGHT_LED_COUNT <number of leds>
```
To enable RGB Underglow, simply add a `rules.mk` file containing `RGBLIGHT_ENABLE = yes` alongside your `keymap.c` file, and compile as normal:
diff --git a/keyboards/keebio/dilly/keymaps/default/config.h b/keyboards/keebio/dilly/keymaps/default/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/keebio/dilly/keymaps/default/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/keebio/fourier/keymaps/maxim/config.h b/keyboards/keebio/fourier/keymaps/maxim/config.h
deleted file mode 100644
index 4f0ea3dc32..0000000000
--- a/keyboards/keebio/fourier/keymaps/maxim/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-
diff --git a/keyboards/keebio/quefrency/keymaps/default60/config.h b/keyboards/keebio/quefrency/keymaps/default60/config.h
deleted file mode 100644
index 497e05b540..0000000000
--- a/keyboards/keebio/quefrency/keymaps/default60/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-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
diff --git a/keyboards/keebio/quefrency/keymaps/joestrong/config.h b/keyboards/keebio/quefrency/keymaps/joestrong/config.h
deleted file mode 100644
index 497e05b540..0000000000
--- a/keyboards/keebio/quefrency/keymaps/joestrong/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-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
diff --git a/keyboards/keebio/quefrency/keymaps/rogthefrog/config.h b/keyboards/keebio/quefrency/keymaps/rogthefrog/config.h
deleted file mode 100644
index 0eefd14dfe..0000000000
--- a/keyboards/keebio/quefrency/keymaps/rogthefrog/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-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>
-Copyright 2021 Roger Billerey-Mosier
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should 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/keebio/quefrency/keymaps/unausgeschlafen/config.h b/keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h
deleted file mode 100644
index 497e05b540..0000000000
--- a/keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-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
diff --git a/keyboards/keebio/quefrency/keymaps/yoryer/config.h b/keyboards/keebio/quefrency/keymaps/yoryer/config.h
deleted file mode 100644
index 497e05b540..0000000000
--- a/keyboards/keebio/quefrency/keymaps/yoryer/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-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
diff --git a/keyboards/keebio/viterbi/keymaps/default/config.h b/keyboards/keebio/viterbi/keymaps/default/config.h
index 38c399ff2c..acc5970dcb 100644
--- a/keyboards/keebio/viterbi/keymaps/default/config.h
+++ b/keyboards/keebio/viterbi/keymaps/default/config.h
@@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -35,7 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 12
+#define RGBLIGHT_LED_COUNT 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/keyboardio/model01/keymaps/tw1t611/config.h b/keyboards/keyboardio/model01/keymaps/tw1t611/config.h
deleted file mode 100644
index 8ab9d8b025..0000000000
--- a/keyboards/keyboardio/model01/keymaps/tw1t611/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/keycapsss/plaid_pad/keymaps/default/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
index 2382185362..789bb7af02 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
@@ -42,9 +42,8 @@ bool oled_task_user(void) {
#endif
-#ifdef ENCODER_ENABLE
+#ifdef ENCODER_MAP_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
/*
Rev1.1 Rev1
,-----------------------, ,-----------------------,
@@ -57,37 +56,12 @@ Rev1.1 Rev1
| | | | E1 | | | | | |
`-----------------------' `-----------------------'
*/
-
- // First encoder (E1)
- if (index == 0) {
- if (clockwise) {
- tap_code(KC_F17);
- } else {
- tap_code(KC_F18);
- }
- // Second encoder (E2)
- } else if (index == 1) {
- if (clockwise) {
- tap_code(KC_F19);
- } else {
- tap_code(KC_F20);
- }
- // Third encoder (E3)
- } else if (index == 2) {
- if (clockwise) {
- tap_code(KC_F21);
- } else {
- tap_code(KC_F22);
- }
- // Forth encoder (E4)
- } else if (index == 3) {
- if (clockwise) {
- tap_code(KC_F23);
- } else {
- tap_code(KC_F24);
- }
- }
- return true;
-}
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+#ifdef KEYBOARD_keycapsss_plaid_pad_rev1
+ { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) }
+#else
+ { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_F22, KC_F21), ENCODER_CCW_CW(KC_F24, KC_F23) }
+#endif
+};
#endif
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/rules.mk b/keyboards/keycapsss/plaid_pad/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c
index 371e8e9941..944f822fb3 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c
+++ b/keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c
@@ -125,8 +125,7 @@ bool oled_task_user(void) {
#endif
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
+#ifdef ENCODER_MAP_ENABLE
/*
,-----------------------,
| E1 | E2 | E3 | E4 |
@@ -138,93 +137,16 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
| | | | E1 |
`-----------------------'
*/
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+#ifdef KEYBOARD_keycapsss_plaid_pad_rev1
+ [_NUMPAD] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) },
+ [_NAVIGATION] = { ENCODER_CCW_CW(C(S(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_MEDIA] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) }
+#else
+ [_NUMPAD] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_F22, KC_F21), ENCODER_CCW_CW(KC_F24, KC_F23) },
+ [_NAVIGATION] = { ENCODER_CCW_CW(C(S(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_MEDIA] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+#endif
+};
- // First encoder (E1)
- if (index == 0) {
- switch (get_highest_layer(layer_state)) {
- case _NAVIGATION:
- // Browser tab switching
- if (clockwise) {
- tap_code16(LCTL(KC_TAB));
- } else {
- tap_code16(LCTL(LSFT(KC_TAB)));
- }
- break;
- default:
- if (clockwise) {
- tap_code(KC_F17);
- } else {
- tap_code(KC_F18);
- }
- break;
- }
- // Second encoder (E2)
- } else if (index == 1) {
- switch (get_highest_layer(layer_state)) {
- case _NAVIGATION:
- // Page Down/Up
- if (clockwise) {
- tap_code16(KC_PGDN);
- } else {
- tap_code16(KC_PGUP);
- }
- break;
- default:
- if (clockwise) {
- tap_code(KC_F19);
- } else {
- tap_code(KC_F20);
- }
- break;
- }
- // Third encoder (E3)
- } else if (index == 2) {
- switch (get_highest_layer(layer_state)) {
- case _NAVIGATION:
- // Mouse wheel up/down
- if (clockwise) {
- tap_code(KC_MS_WH_DOWN);
- } else {
- tap_code(KC_MS_WH_UP);
- }
- break;
- case _MEDIA:
- // BRIGHTNESS Up/Down
- if (clockwise) {
- tap_code16(KC_BRIGHTNESS_UP);
- } else {
- tap_code16(KC_BRIGHTNESS_DOWN);
- }
- break;
- default:
- if (clockwise) {
- tap_code(KC_F21);
- } else {
- tap_code(KC_F22);
- }
- break;
- }
- // Forth encoder (E4)
- } else if (index == 3) {
- switch (get_highest_layer(layer_state)) {
- case _NAVIGATION:
- case _MEDIA:
- // Volume Up/Down
- if (clockwise) {
- tap_code16(KC_AUDIO_VOL_UP);
- } else {
- tap_code16(KC_AUDIO_VOL_DOWN);
- }
- break;
- default:
- if (clockwise) {
- tap_code(KC_F23);
- } else {
- tap_code(KC_F24);
- }
- break;
- }
- }
- return true;
-}
#endif
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk b/keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk
index dc3e29cf8b..33bd0c3611 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk
+++ b/keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk
@@ -1,2 +1,3 @@
OLED_ENABLE = yes
COMBO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
index 7d48591cd2..4ca3fc944b 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
+++ b/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
@@ -27,26 +27,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | 0 | . | = | + |
* `-----------------------'
*/
- [0] = LAYOUT_ortho_4x4(
+ LAYOUT_ortho_4x4(
KC_P7, KC_P8, KC_P9, KC_PSLS,
KC_P4, KC_P5, KC_P6, KC_PAST,
KC_P1, KC_P2, KC_P3, KC_PMNS,
- KC_P0, KC_PDOT, KC_PEQL, KC_PPLS ),
- [1] = 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 ),
- [2] = 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 ),
- [3] = 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 ),
+ KC_P0, KC_PDOT, KC_PEQL, KC_PPLS
+ ),
};
@@ -69,8 +55,7 @@ bool oled_task_user(void) {
#endif
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
+#ifdef ENCODER_MAP_ENABLE
/*
Rev1.1 Rev1
,-----------------------, ,-----------------------,
@@ -84,35 +69,11 @@ Rev1.1 Rev1
`-----------------------' `-----------------------'
*/
- // First encoder (E1)
- if (index == 0) {
- if (clockwise) {
- tap_code(KC_F17);
- } else {
- tap_code(KC_F18);
- }
- // Second encoder (E2)
- } else if (index == 1) {
- if (clockwise) {
- tap_code(KC_F19);
- } else {
- tap_code(KC_F20);
- }
- // Third encoder (E3)
- } else if (index == 2) {
- if (clockwise) {
- tap_code(KC_F21);
- } else {
- tap_code(KC_F22);
- }
- // Forth encoder (E4)
- } else if (index == 3) {
- if (clockwise) {
- tap_code(KC_F23);
- } else {
- tap_code(KC_F24);
- }
- }
- return true;
-}
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+#ifdef KEYBOARD_keycapsss_plaid_pad_rev1
+ { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) }
+#else
+ { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_F22, KC_F21), ENCODER_CCW_CW(KC_F24, KC_F23) }
+#endif
+};
#endif
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk b/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
index 36b7ba9cbc..1189f4ad19 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
+++ b/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
@@ -1,2 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h b/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h
deleted file mode 100644
index 023c753c27..0000000000
--- a/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h
+++ /dev/null
@@ -1,19 +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/>.
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/kinesis/keymaps/tw1t611/config.h b/keyboards/kinesis/keymaps/tw1t611/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/kinesis/keymaps/tw1t611/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/kudox/columner/keymaps/default/config.h b/keyboards/kudox/columner/keymaps/default/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/columner/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox/rev1/keymaps/default/config.h b/keyboards/kudox/rev1/keymaps/default/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/rev1/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox/rev1/keymaps/jis/config.h b/keyboards/kudox/rev1/keymaps/jis/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/rev1/keymaps/jis/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox/rev1/keymaps/x1/config.h b/keyboards/kudox/rev1/keymaps/x1/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/rev1/keymaps/x1/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox/rev2/keymaps/default/config.h b/keyboards/kudox/rev2/keymaps/default/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/rev2/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox/rev2/keymaps/jis/config.h b/keyboards/kudox/rev2/keymaps/jis/config.h
deleted file mode 100644
index f5bf85cca0..0000000000
--- a/keyboards/kudox/rev2/keymaps/jis/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
diff --git a/keyboards/kudox_game/keymaps/default/config.h b/keyboards/kudox_game/keymaps/default/config.h
deleted file mode 100644
index 5cbe7609a3..0000000000
--- a/keyboards/kudox_game/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
diff --git a/keyboards/lefty/rev2/rules.mk b/keyboards/lefty/rev2/rules.mk
deleted file mode 100644
index e69de29bb2..0000000000
--- a/keyboards/lefty/rev2/rules.mk
+++ /dev/null
diff --git a/keyboards/lets_split/keymaps/via/config.h b/keyboards/lets_split/keymaps/via/config.h
index a676d6826d..03853dc391 100644
--- a/keyboards/lets_split/keymaps/via/config.h
+++ b/keyboards/lets_split/keymaps/via/config.h
@@ -31,7 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -42,6 +42,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 10
+#define RGBLIGHT_LED_COUNT 10
#define NO_MUSIC_MODE
diff --git a/keyboards/lily58/keymaps/default/config.h b/keyboards/lily58/keymaps/default/config.h
index b16e63b6d7..5b45770f38 100644
--- a/keyboards/lily58/keymaps/default/config.h
+++ b/keyboards/lily58/keymaps/default/config.h
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 100
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -40,7 +40,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 27
+#define RGBLIGHT_LED_COUNT 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
@@ -48,7 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Underglow
/*
-#undef RGBLED_NUM
-#define RGBLED_NUM 14 // Number of LEDs
+#undef RGBLIGHT_LED_COUNT
+#define RGBLIGHT_LED_COUNT 14 // Number of LEDs
#define RGBLIGHT_SLEEP
*/
diff --git a/keyboards/lily58/keymaps/via/config.h b/keyboards/lily58/keymaps/via/config.h
index 331521bcbf..284d3944b9 100644
--- a/keyboards/lily58/keymaps/via/config.h
+++ b/keyboards/lily58/keymaps/via/config.h
@@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Underglow
/*
-#undef RGBLED_NUM
-#define RGBLED_NUM 14 // Number of LEDs
+#undef RGBLIGHT_LED_COUNT
+#define RGBLIGHT_LED_COUNT 14 // Number of LEDs
#define RGBLIGHT_SLEEP
*/
diff --git a/keyboards/majistic/keymaps/default/config.h b/keyboards/majistic/keymaps/default/config.h
deleted file mode 100644
index 4db5715cba..0000000000
--- a/keyboards/majistic/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2020 yossiyossy
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/maple_computing/launchpad/keymaps/default_rgb/config.h b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h
index 3d47ae41e7..c50e010375 100644
--- a/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h
+++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h
@@ -12,7 +12,7 @@
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 2 // Number of LEDs
+#define RGBLIGHT_LED_COUNT 2 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h
deleted file mode 100644
index 526c0837c7..0000000000
--- a/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
diff --git a/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h
deleted file mode 100644
index c535299e74..0000000000
--- a/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
- // place overrides here
diff --git a/keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h
deleted file mode 100644
index 526c0837c7..0000000000
--- a/keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
diff --git a/keyboards/marksard/treadstone48/rev1/config.h b/keyboards/marksard/treadstone48/rev1/config.h
index 3f43b16d2b..66007ee2ef 100644
--- a/keyboards/marksard/treadstone48/rev1/config.h
+++ b/keyboards/marksard/treadstone48/rev1/config.h
@@ -18,10 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#ifndef RS_EXTRA_LED
- #define RGBLED_NUM 12
+ #define RGBLIGHT_LED_COUNT 12
#define RGBLED_SPLIT {12, 0}
#else
- #define RGBLED_NUM 32
+ #define RGBLIGHT_LED_COUNT 32
#define RGBLED_SPLIT {12, 20}
#endif
diff --git a/keyboards/matrix/abelx/abelx.c b/keyboards/matrix/abelx/abelx.c
index a05934238a..0a3071a402 100644
--- a/keyboards/matrix/abelx/abelx.c
+++ b/keyboards/matrix/abelx/abelx.c
@@ -57,6 +57,7 @@ void housekeeping_task_kb(void) {
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
+#include "ws2812.h"
#include "i2c_master.h"
const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = {
@@ -66,7 +67,7 @@ const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = {
{AW9523B_P07_PWM, AW9523B_P06_PWM, AW9523B_P05_PWM},
};
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
uint8_t num = num_leds < AW9523B_RGB_NUM ? num_leds : AW9523B_RGB_NUM;
@@ -77,6 +78,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
}
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
+
#endif
static uint16_t caps_lock_pin = DEF_PIN(TCA6424_PORT2, 3);
diff --git a/keyboards/matrix/abelx/info.json b/keyboards/matrix/abelx/info.json
index 35bc059810..b9aa23b756 100644
--- a/keyboards/matrix/abelx/info.json
+++ b/keyboards/matrix/abelx/info.json
@@ -10,6 +10,7 @@
},
"rgblight": {
"led_count": 9,
+ "driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
diff --git a/keyboards/matrix/abelx/rules.mk b/keyboards/matrix/abelx/rules.mk
index 1c2fc05ffe..83142dd71c 100644
--- a/keyboards/matrix/abelx/rules.mk
+++ b/keyboards/matrix/abelx/rules.mk
@@ -46,3 +46,4 @@ CUSTOM_MATRIX = lite
# project specific files
SRC += matrix.c tca6424.c aw9523b.c
I2C_DRIVER_REQUIRED = yes
+WS2812_DRIVER_REQUIRED = yes
diff --git a/keyboards/matrix/m20add/info.json b/keyboards/matrix/m20add/info.json
index 972aab9d0d..6e1a1c493f 100644
--- a/keyboards/matrix/m20add/info.json
+++ b/keyboards/matrix/m20add/info.json
@@ -10,6 +10,7 @@
},
"rgblight": {
"led_count": 20,
+ "driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
diff --git a/keyboards/matrix/m20add/rgb_ring.c b/keyboards/matrix/m20add/rgb_ring.c
index f3fbe83d72..f32875cf4f 100644
--- a/keyboards/matrix/m20add/rgb_ring.c
+++ b/keyboards/matrix/m20add/rgb_ring.c
@@ -357,7 +357,7 @@ static void custom_effects(void)
effect_funcs[rgb_ring.effect]();
}
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_ring.state != RING_STATE_QMK) {
return;
@@ -368,6 +368,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
}
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
+
void rgb_ring_init(void)
{
diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c
index 8246da809c..d62177a2f4 100644
--- a/keyboards/matrix/noah/noah.c
+++ b/keyboards/matrix/noah/noah.c
@@ -17,50 +17,47 @@ extern rgblight_config_t rgblight_config;
// led 0 for caps lock, led 1 for scroll lock, led 3 for num lock
// led 4 for layer 1, led 5 for layer 2, led 6 for layer 3, led 7 for layer 4
-#if RGBLED_NUM < 7
-#error "MUST set the RGBLED_NUM bigger than 7"
+#if RGBLIGHT_LED_COUNT < 7
+#error "MUST set the RGBLIGHT_LED_COUNT bigger than 7"
#endif
-rgb_led_t noah_leds[RGBLED_NUM];
+rgb_led_t noah_leds[RGBLIGHT_LED_COUNT];
static bool noah_led_mode = false;
-void rgblight_set(void) {
+void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) {
memset(&noah_leds[0], 0, sizeof(noah_leds));
if (!rgblight_config.enable) {
- for (uint8_t i = 0; i < RGBLED_NUM; i++) {
- led[i].r = 0;
- led[i].g = 0;
- led[i].b = 0;
+ for (uint8_t i = 0; i < RGBLIGHT_LED_COUNT; i++) {
+ ledarray[i].r = 0;
+ ledarray[i].g = 0;
+ ledarray[i].b = 0;
}
}
if (noah_led_mode) {
led_t led_state = host_keyboard_led_state();
if (led_state.caps_lock) {
- noah_leds[0] = led[0];
+ noah_leds[0] = ledarray[0];
}
if (led_state.scroll_lock) {
- noah_leds[1] = led[1];
+ noah_leds[1] = ledarray[1];
}
if (led_state.num_lock) {
- noah_leds[2] = led[2];
+ noah_leds[2] = ledarray[2];
}
for (int32_t i = 0; i < 4; i++) {
if(layer_state_is(i+1)) {
- noah_leds[i + 3] = led[i + 3];
+ noah_leds[i + 3] = ledarray[i + 3];
}
}
} else {
- memcpy(&noah_leds[0], &led[0], sizeof(noah_leds));
+ memcpy(&noah_leds[0], &ledarray[0], sizeof(noah_leds));
}
- ws2812_setleds(noah_leds, RGBLED_NUM);
+ ws2812_setleds(noah_leds, RGBLIGHT_LED_COUNT);
}
-#endif
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
#endif
- matrix_scan_user();
-}
#ifdef RGB_MATRIX_ENABLE
const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = {
diff --git a/keyboards/mechwild/mercutio/keymaps/default/config.h b/keyboards/mechwild/mercutio/keymaps/default/config.h
deleted file mode 100644
index b428d6e260..0000000000
--- a/keyboards/mechwild/mercutio/keymaps/default/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2021 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/mechwild/mercutio/keymaps/fancy/config.h b/keyboards/mechwild/mercutio/keymaps/fancy/config.h
deleted file mode 100644
index b428d6e260..0000000000
--- a/keyboards/mechwild/mercutio/keymaps/fancy/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2021 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/mechwild/mercutio/keymaps/via/config.h b/keyboards/mechwild/mercutio/keymaps/via/config.h
deleted file mode 100644
index b428d6e260..0000000000
--- a/keyboards/mechwild/mercutio/keymaps/via/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2021 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/miiiw/blackio83/rev_0100/config.h b/keyboards/miiiw/blackio83/rev_0100/config.h
index e68a9d0b16..78f7739f0a 100644
--- a/keyboards/miiiw/blackio83/rev_0100/config.h
+++ b/keyboards/miiiw/blackio83/rev_0100/config.h
@@ -36,7 +36,6 @@
/* RGB Matrix config */
#define RGB_EN_PIN A8
-#define RGBLED_NUM 83
#define RGB_MATRIX_LED_COUNT 83
#define RGB_MATRIX_CENTER { 62, 42 }
diff --git a/keyboards/miiiw/blackio83/rev_0100/rev_0100.c b/keyboards/miiiw/blackio83/rev_0100/rev_0100.c
deleted file mode 100644
index b28ac84acb..0000000000
--- a/keyboards/miiiw/blackio83/rev_0100/rev_0100.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2023 ArthurCyy <https://github.com/ArthurCyy>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "blackio83.h"
diff --git a/keyboards/mixi/keymaps/default/keymap.c b/keyboards/mixi/keymaps/default/keymap.c
index d14a692a89..29f19349cc 100644
--- a/keyboards/mixi/keymaps/default/keymap.c
+++ b/keyboards/mixi/keymaps/default/keymap.c
@@ -59,13 +59,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const rgblight_segment_t PROGMEM _base_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_BLUE}
+ {0, RGBLIGHT_LED_COUNT, HSV_BLUE}
);
const rgblight_segment_t PROGMEM _middle_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_GREEN}
+ {0, RGBLIGHT_LED_COUNT, HSV_GREEN}
);
const rgblight_segment_t PROGMEM _top_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_RED}
+ {0, RGBLIGHT_LED_COUNT, HSV_RED}
);
const rgblight_segment_t* const PROGMEM _rgb_layers[] =
diff --git a/keyboards/mixi/keymaps/via/keymap.c b/keyboards/mixi/keymaps/via/keymap.c
index ef5aace888..adcf448503 100644
--- a/keyboards/mixi/keymaps/via/keymap.c
+++ b/keyboards/mixi/keymaps/via/keymap.c
@@ -76,13 +76,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const rgblight_segment_t PROGMEM _base_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_BLUE}
+ {0, RGBLIGHT_LED_COUNT, HSV_BLUE}
);
const rgblight_segment_t PROGMEM _middle_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_GREEN}
+ {0, RGBLIGHT_LED_COUNT, HSV_GREEN}
);
const rgblight_segment_t PROGMEM _top_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, RGBLED_NUM, HSV_RED}
+ {0, RGBLIGHT_LED_COUNT, HSV_RED}
);
const rgblight_segment_t* const PROGMEM _rgb_layers[] =
diff --git a/keyboards/mlego/m48/keymaps/default/keymap.c b/keyboards/mlego/m48/keymaps/default/keymap.c
index d07f193526..71409bf939 100644
--- a/keyboards/mlego/m48/keymaps/default/keymap.c
+++ b/keyboards/mlego/m48/keymaps/default/keymap.c
@@ -26,10 +26,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m48/keymaps/via/keymap.c b/keyboards/mlego/m48/keymaps/via/keymap.c
index 91649631dc..d180c3e8ac 100644
--- a/keyboards/mlego/m48/keymaps/via/keymap.c
+++ b/keyboards/mlego/m48/keymaps/via/keymap.c
@@ -26,10 +26,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m60/keymaps/default/keymap.c b/keyboards/mlego/m60/keymaps/default/keymap.c
index dbfcad3152..d997bd2dc0 100644
--- a/keyboards/mlego/m60/keymaps/default/keymap.c
+++ b/keyboards/mlego/m60/keymaps/default/keymap.c
@@ -26,10 +26,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m60/keymaps/via/keymap.c b/keyboards/mlego/m60/keymaps/via/keymap.c
index 8d0cddae80..fc3ab612d0 100644
--- a/keyboards/mlego/m60/keymaps/via/keymap.c
+++ b/keyboards/mlego/m60/keymaps/via/keymap.c
@@ -26,10 +26,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m60_split/keymaps/default/keymap.c b/keyboards/mlego/m60_split/keymaps/default/keymap.c
index 2f51794c1c..506aa45f30 100644
--- a/keyboards/mlego/m60_split/keymaps/default/keymap.c
+++ b/keyboards/mlego/m60_split/keymaps/default/keymap.c
@@ -29,10 +29,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m60_split/keymaps/via/keymap.c b/keyboards/mlego/m60_split/keymaps/via/keymap.c
index 756639bfd9..29270b0425 100644
--- a/keyboards/mlego/m60_split/keymaps/via/keymap.c
+++ b/keyboards/mlego/m60_split/keymaps/via/keymap.c
@@ -29,10 +29,10 @@ enum layer_names {
#ifdef RGBLIGHT_ENABLE
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
#endif
diff --git a/keyboards/mlego/m65/m65.c b/keyboards/mlego/m65/m65.c
index 12ea866f1e..506ac2e30d 100644
--- a/keyboards/mlego/m65/m65.c
+++ b/keyboards/mlego/m65/m65.c
@@ -9,10 +9,10 @@ static bool toggle_rse = false;
#if defined(RGBLIGHT_ENABLE)
-const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_OFF});
-const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_AZURE});
-const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CORAL});
-const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
+const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_OFF});
+const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_AZURE});
+const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CORAL});
+const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
diff --git a/keyboards/monstargear/xo87/rgb/keymaps/default/config.h b/keyboards/monstargear/xo87/rgb/keymaps/default/config.h
deleted file mode 100644
index 910a014d79..0000000000
--- a/keyboards/monstargear/xo87/rgb/keymaps/default/config.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright 2021 datafx
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#pragma once \ No newline at end of file
diff --git a/keyboards/monstargear/xo87/solderable/solderable.h b/keyboards/monstargear/xo87/solderable/solderable.h
index 2758a3a3ff..70e8a6c8d5 100644
--- a/keyboards/monstargear/xo87/solderable/solderable.h
+++ b/keyboards/monstargear/xo87/solderable/solderable.h
@@ -43,11 +43,11 @@ typedef struct{
rgb_;
#define colorAGSize 10
-#define colorBGSize RGBLED_NUM-10
+#define colorBGSize RGBLIGHT_LED_COUNT-10
typedef struct{
rgb_ colorAG[colorAGSize];
- rgb_ colorBG[RGBLED_NUM-10];
+ rgb_ colorBG[RGBLIGHT_LED_COUNT-10];
}
backLedRgbG_;
diff --git a/keyboards/neson_design/700e/700e.c b/keyboards/neson_design/700e/700e.c
index 9def73d6a4..31f88a71f9 100644
--- a/keyboards/neson_design/700e/700e.c
+++ b/keyboards/neson_design/700e/700e.c
@@ -20,6 +20,7 @@
#include "quantum.h"
#include "i2c_master.h"
#include "drivers/led/issi/is31fl3731.h"
+#include "ws2812.h"
enum {
SELF_TESTING,
@@ -336,7 +337,7 @@ void housekeeping_task_kb(void)
housekeeping_task_user();
}
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_state.state != NORMAL) return;
@@ -353,6 +354,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
ws2812_setleds(leds, 4);
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
+
bool led_update_kb(led_t led_state)
{
bool res = led_update_user(led_state);
diff --git a/keyboards/neson_design/700e/info.json b/keyboards/neson_design/700e/info.json
index 12a979ab11..3b74e9609a 100644
--- a/keyboards/neson_design/700e/info.json
+++ b/keyboards/neson_design/700e/info.json
@@ -20,6 +20,7 @@
"saturation_steps": 8,
"brightness_steps": 8,
"led_count": 68,
+ "driver": "custom",
"animations": {
"breathing": true,
"rainbow_mood": true,
diff --git a/keyboards/neson_design/700e/rules.mk b/keyboards/neson_design/700e/rules.mk
index 5650ed1fee..dd1db38bab 100644
--- a/keyboards/neson_design/700e/rules.mk
+++ b/keyboards/neson_design/700e/rules.mk
@@ -12,4 +12,5 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
NO_USB_STARTUP_CHECK = yes
QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
+WS2812_DRIVER_REQUIRED = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/neson_design/n6/info.json b/keyboards/neson_design/n6/info.json
index 3f383b4f8f..c48824d80f 100644
--- a/keyboards/neson_design/n6/info.json
+++ b/keyboards/neson_design/n6/info.json
@@ -23,6 +23,7 @@
"saturation_steps": 8,
"brightness_steps": 8,
"led_count": 65,
+ "driver": "custom",
"max_brightness": 192,
"animations": {
"breathing": true,
diff --git a/keyboards/neson_design/n6/n6.c b/keyboards/neson_design/n6/n6.c
index 38b634eeb7..b878b9368d 100644
--- a/keyboards/neson_design/n6/n6.c
+++ b/keyboards/neson_design/n6/n6.c
@@ -20,6 +20,7 @@
#include "quantum.h"
#include "i2c_master.h"
#include "drivers/led/issi/is31fl3731.h"
+#include "ws2812.h"
enum {
SELF_TESTING,
@@ -338,7 +339,7 @@ void housekeeping_task_kb(void)
housekeeping_task_user();
}
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
if (rgb_state.state != NORMAL) return;
@@ -348,6 +349,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
ws2812_setleds(start_led+IS31FL3731_LED_COUNT, 1);
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
+
bool led_update_kb(led_t led_state)
{
bool res = led_update_user(led_state);
diff --git a/keyboards/neson_design/n6/rules.mk b/keyboards/neson_design/n6/rules.mk
index a3e4abe6cd..4c9ce45352 100644
--- a/keyboards/neson_design/n6/rules.mk
+++ b/keyboards/neson_design/n6/rules.mk
@@ -11,4 +11,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c
+WS2812_DRIVER_REQUIRED = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/neson_design/nico/info.json b/keyboards/neson_design/nico/info.json
index 477ac3ba7c..1c86d9a1ae 100644
--- a/keyboards/neson_design/nico/info.json
+++ b/keyboards/neson_design/nico/info.json
@@ -25,7 +25,8 @@
"pin": "B0"
},
"rgblight": {
- "led_count": 5
+ "led_count": 5,
+ "driver": "custom"
},
"url": "",
"usb": {
diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c
index b4d15777b7..bf8eeb87dd 100644
--- a/keyboards/neson_design/nico/nico.c
+++ b/keyboards/neson_design/nico/nico.c
@@ -18,6 +18,7 @@
*/
#include "quantum.h"
+#include "ws2812.h"
#ifdef RGBLIGHT_ENABLE
static bool alert = false;
@@ -53,20 +54,20 @@ void housekeeping_task_kb(void)
alert = !alert;
last_ticks = timer_read();
}
- ws2812_setleds(led, RGBLED_NUM);
+ ws2812_setleds(led, RGBLIGHT_LED_COUNT);
} else {
if (backup) {
led[4].r = caps_led.r;
led[4].g = caps_led.g;
led[4].b = caps_led.b;
backup = false;
- ws2812_setleds(led, RGBLED_NUM);
+ ws2812_setleds(led, RGBLIGHT_LED_COUNT);
}
}
housekeeping_task_user();
}
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
+void setleds_custom(rgb_led_t *start_led, uint16_t num_leds)
{
start_led[2].r = start_led[0].r;
start_led[2].g = start_led[0].g;
@@ -79,7 +80,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds)
uint8_t tmp = start_led[4].g;
start_led[4].g = start_led[4].r;
start_led[4].r = tmp;
- ws2812_setleds(start_led, RGBLED_NUM);
+ ws2812_setleds(start_led, RGBLIGHT_LED_COUNT);
}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = setleds_custom,
+};
#endif \ No newline at end of file
diff --git a/keyboards/neson_design/nico/rules.mk b/keyboards/neson_design/nico/rules.mk
index 6e7633bfe0..9a69649289 100644
--- a/keyboards/neson_design/nico/rules.mk
+++ b/keyboards/neson_design/nico/rules.mk
@@ -1 +1 @@
-# This file intentionally left blank
+WS2812_DRIVER_REQUIRED = yes
diff --git a/keyboards/newgame40/post_config.h b/keyboards/newgame40/post_config.h
index 247178beec..7ac270c932 100644
--- a/keyboards/newgame40/post_config.h
+++ b/keyboards/newgame40/post_config.h
@@ -1,14 +1,14 @@
#pragma once
#ifndef IOS_DEVICE_ENABLE
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 255
# else
# define RGBLIGHT_LIMIT_VAL 130
# endif
# define RGBLIGHT_VAL_STEP 17
#else
-# if RGBLED_NUM <= 6
+# if RGBLIGHT_LED_COUNT <= 6
# define RGBLIGHT_LIMIT_VAL 90
# else
# define RGBLIGHT_LIMIT_VAL 45
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
index b71f9119ef..4e2f7dd4d6 100644
--- a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
+++ b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
@@ -112,7 +112,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} else {
rgblight_timer_disable();
uint8_t val = rgblight_get_val();
- rgblight_sethsv_range(255, 255, val, 0, RGBLED_NUM-1);
+ rgblight_sethsv_range(255, 255, val, 0, RGBLIGHT_LED_COUNT-1);
}
deafened = !deafened;
}
diff --git a/keyboards/pico/65keys/keymaps/default/config.h b/keyboards/pico/65keys/keymaps/default/config.h
deleted file mode 100644
index 5cbe7609a3..0000000000
--- a/keyboards/pico/65keys/keymaps/default/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
diff --git a/keyboards/pico/65keys/keymaps/jis/config.h b/keyboards/pico/65keys/keymaps/jis/config.h
deleted file mode 100644
index 5cbe7609a3..0000000000
--- a/keyboards/pico/65keys/keymaps/jis/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright 2019 Kumao Kobo <kumaokobo@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
diff --git a/keyboards/planck/keymaps/dsanchezseco/rules.mk b/keyboards/planck/keymaps/dsanchezseco/rules.mk
deleted file mode 100644
index 8b13789179..0000000000
--- a/keyboards/planck/keymaps/dsanchezseco/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/keyboards/planck/keymaps/mitch/rules.mk b/keyboards/planck/keymaps/mitch/rules.mk
deleted file mode 100644
index e69de29bb2..0000000000
--- a/keyboards/planck/keymaps/mitch/rules.mk
+++ /dev/null
diff --git a/keyboards/planck/keymaps/motform/config.h b/keyboards/planck/keymaps/motform/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/planck/keymaps/motform/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/planck/keymaps/vxid/config.h b/keyboards/planck/keymaps/vxid/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/planck/keymaps/vxid/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/projectcain/vault35/atmega32u4/info.json b/keyboards/projectcain/vault35/atmega32u4/info.json
new file mode 100644
index 0000000000..9acd8ee34d
--- /dev/null
+++ b/keyboards/projectcain/vault35/atmega32u4/info.json
@@ -0,0 +1,45 @@
+{
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D7", "pin_b": "D6", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "encoder": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B1", "D3", "F0", "F1", "F4", "F5", "F6", "F7", "C6", "B6", "B5"],
+ "rows": ["B4", "D4", "B0", "C7"]
+ },
+ "processor": "atmega32u4",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 12,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "D5"
+ }
+}
diff --git a/keyboards/projectcain/vault35/atmega32u4/rules.mk b/keyboards/projectcain/vault35/atmega32u4/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/projectcain/vault35/atmega32u4/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/projectcain/vault35/info.json b/keyboards/projectcain/vault35/info.json
index d23c4b2f46..5662cdbf6b 100644
--- a/keyboards/projectcain/vault35/info.json
+++ b/keyboards/projectcain/vault35/info.json
@@ -1,27 +1,22 @@
{
- "keyboard_name": "Vault35",
"manufacturer": "projectcain",
- "url": "",
+ "keyboard_name": "Vault35",
"maintainer": "projectcain",
- "usb": {
- "vid": "0xFEED",
- "pid": "0x6060",
- "device_version": "0.0.1"
- },
- "matrix_pins": {
- "cols": ["B1", "D3", "F0", "F1", "F4", "F5", "F6", "F7", "C6", "B6", "B5"],
- "rows": ["B4", "D4", "B0", "C7"]
- },
"diode_direction": "COL2ROW",
- "encoder": {
- "rotary": [
- {"pin_a": "D6", "pin_b": "D7", "resolution": 2}
- ]
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "url": "https://mechvault.net",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6060",
+ "vid": "0xFEED"
},
- "processor": "atmega32u4",
- "bootloader": "atmel-dfu",
"layouts": {
- "LAYOUT_split_4space": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -33,8 +28,7 @@
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
-
+ {"matrix": [0, 10], "x": 10, "y": 0, "encoder": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
@@ -45,7 +39,6 @@
{"matrix": [1, 7], "x": 7.25, "y": 1},
{"matrix": [1, 8], "x": 8.25, "y": 1},
{"matrix": [1, 9], "x": 9.25, "y": 1, "w": 1.75},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -56,16 +49,16 @@
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2, "w": 1.25},
-
{"matrix": [3, 1], "x": 1.5, "y": 3},
{"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
- {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.75},
- {"matrix": [3, 5], "x": 5.5, "y": 3, "w": 1.75},
- {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 1.25},
- {"matrix": [3, 7], "x": 8.5, "y": 3}
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.5},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3, "w": 1.5},
+ {"matrix": [3, 6], "x": 7.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 7], "x": 9, "y": 3}
]
},
- "LAYOUT_split_3space": {
+ "LAYOUT_full_space": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -77,8 +70,7 @@
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
-
+ {"matrix": [0, 10], "x": 10, "y": 0, "encoder": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
@@ -89,7 +81,6 @@
{"matrix": [1, 7], "x": 7.25, "y": 1},
{"matrix": [1, 8], "x": 8.25, "y": 1},
{"matrix": [1, 9], "x": 9.25, "y": 1, "w": 1.75},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -100,11 +91,8 @@
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2, "w": 1.25},
-
{"matrix": [3, 1], "x": 1.5, "y": 3},
- {"matrix": [3, 3], "x": 2.5, "y": 3, "w": 2.25},
- {"matrix": [3, 4], "x": 4.75, "y": 3},
- {"matrix": [3, 5], "x": 5.75, "y": 3, "w": 2.75},
+ {"matrix": [3, 4], "x": 2.5, "y": 3, "w": 6},
{"matrix": [3, 7], "x": 8.5, "y": 3}
]
},
@@ -120,8 +108,7 @@
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
-
+ {"matrix": [0, 10], "x": 10, "y": 0, "encoder": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
@@ -132,7 +119,6 @@
{"matrix": [1, 7], "x": 7.25, "y": 1},
{"matrix": [1, 8], "x": 8.25, "y": 1},
{"matrix": [1, 9], "x": 9.25, "y": 1, "w": 1.75},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -143,14 +129,13 @@
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2, "w": 1.25},
-
{"matrix": [3, 1], "x": 1.5, "y": 3},
{"matrix": [3, 3], "x": 2.5, "y": 3, "w": 3},
{"matrix": [3, 5], "x": 5.5, "y": 3, "w": 3},
{"matrix": [3, 7], "x": 8.5, "y": 3}
]
},
- "LAYOUT_full_space": {
+ "LAYOUT_split_3space": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -162,8 +147,7 @@
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
-
+ {"matrix": [0, 10], "x": 10, "y": 0, "encoder": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
@@ -174,7 +158,6 @@
{"matrix": [1, 7], "x": 7.25, "y": 1},
{"matrix": [1, 8], "x": 8.25, "y": 1},
{"matrix": [1, 9], "x": 9.25, "y": 1, "w": 1.75},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -185,9 +168,51 @@
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2, "w": 1.25},
-
{"matrix": [3, 1], "x": 1.5, "y": 3},
- {"matrix": [3, 4], "x": 2.5, "y": 3, "w": 6},
+ {"matrix": [3, 3], "x": 2.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3, "w": 2.75},
+ {"matrix": [3, 7], "x": 8.5, "y": 3}
+ ]
+ },
+ "LAYOUT_split_4space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0, "encoder": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "x": 7.25, "y": 1},
+ {"matrix": [1, 8], "x": 8.25, "y": 1},
+ {"matrix": [1, 9], "x": 9.25, "y": 1, "w": 1.75},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3},
+ {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 5], "x": 5.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 6], "x": 7.25, "y": 3, "w": 1.25},
{"matrix": [3, 7], "x": 8.5, "y": 3}
]
}
diff --git a/keyboards/projectcain/vault35/keymaps/default/keymap.c b/keyboards/projectcain/vault35/keymaps/default/keymap.c
index 5bb3a622b2..ec9f350218 100644
--- a/keyboards/projectcain/vault35/keymaps/default/keymap.c
+++ b/keyboards/projectcain/vault35/keymaps/default/keymap.c
@@ -1,19 +1,18 @@
-
- /* Copyright 2021 projectcain
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
+/* Copyright 2021 projectcain
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received 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{
@@ -64,3 +63,11 @@ combo_t key_combos[] = {
[KL_SLSH] = COMBO(kl_combo, S(KC_SLSH)),
[JK_MINUS] = COMBO(jk_combo, KC_MINUS)
};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [BASE] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [NUM] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [SYM] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
diff --git a/keyboards/projectcain/vault35/keymaps/default/rules.mk b/keyboards/projectcain/vault35/keymaps/default/rules.mk
index ff681299e4..cbd8b4aa81 100644
--- a/keyboards/projectcain/vault35/keymaps/default/rules.mk
+++ b/keyboards/projectcain/vault35/keymaps/default/rules.mk
@@ -1 +1,2 @@
-COMBO_ENABLE = yes \ No newline at end of file
+COMBO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/projectcain/vault35/rules.mk b/keyboards/projectcain/vault35/rules.mk
index b03b6fa905..3cf3a331d8 100644
--- a/keyboards/projectcain/vault35/rules.mk
+++ b/keyboards/projectcain/vault35/rules.mk
@@ -1,13 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes
+DEFAULT_FOLDER = projectcain/vault35/atmega32u4
diff --git a/keyboards/rabbit/rabbit68/keymaps/kaiec/config.h b/keyboards/rabbit/rabbit68/keymaps/kaiec/config.h
deleted file mode 100644
index 1da00a2979..0000000000
--- a/keyboards/rabbit/rabbit68/keymaps/kaiec/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 Kai Eckert
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/recompile_keys/choco60/config.h b/keyboards/recompile_keys/choco60/config.h
deleted file mode 100644
index 378fc07981..0000000000
--- a/keyboards/recompile_keys/choco60/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright 2019 Naoto Takai
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should 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/redox/keymaps/default/config.h b/keyboards/redox/keymaps/default/config.h
index 2a1801a78f..ab4d588cb0 100644
--- a/keyboards/redox/keymaps/default/config.h
+++ b/keyboards/redox/keymaps/default/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 14
+#define RGBLIGHT_LED_COUNT 14
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/redox/keymaps/via/config.h b/keyboards/redox/keymaps/via/config.h
index cfb2a9378a..7b9be07d97 100644
--- a/keyboards/redox/keymaps/via/config.h
+++ b/keyboards/redox/keymaps/via/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 14
+#define RGBLIGHT_LED_COUNT 14
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/reviung/reviung34/keymaps/default_rgb/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h
index e4d91482c9..cc14e26943 100644
--- a/keyboards/reviung/reviung34/keymaps/default_rgb/config.h
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h
@@ -19,7 +19,7 @@
// place overrides here
#define WS2812_DI_PIN D3
- #define RGBLED_NUM 9
+ #define RGBLIGHT_LED_COUNT 9
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
diff --git a/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h
index e4d91482c9..cc14e26943 100644
--- a/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h
@@ -19,7 +19,7 @@
// place overrides here
#define WS2812_DI_PIN D3
- #define RGBLED_NUM 9
+ #define RGBLIGHT_LED_COUNT 9
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
diff --git a/keyboards/reviung/reviung39/keymaps/default/config.h b/keyboards/reviung/reviung39/keymaps/default/config.h
index d868c539e4..d882e8ad94 100644
--- a/keyboards/reviung/reviung39/keymaps/default/config.h
+++ b/keyboards/reviung/reviung39/keymaps/default/config.h
@@ -19,7 +19,7 @@
// place overrides here
#define WS2812_DI_PIN D3
- #define RGBLED_NUM 11
+ #define RGBLIGHT_LED_COUNT 11
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
diff --git a/keyboards/reviung/reviung39/keymaps/default_s/config.h b/keyboards/reviung/reviung39/keymaps/default_s/config.h
index c44a5f9d7c..3fd3c73fcc 100644
--- a/keyboards/reviung/reviung39/keymaps/default_s/config.h
+++ b/keyboards/reviung/reviung39/keymaps/default_s/config.h
@@ -19,7 +19,7 @@
// place overrides here
#define WS2812_DI_PIN D3
- #define RGBLED_NUM 6
+ #define RGBLIGHT_LED_COUNT 6
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
diff --git a/keyboards/reviung/reviung39/keymaps/default_s/readme.md b/keyboards/reviung/reviung39/keymaps/default_s/readme.md
index b882ec40c2..a67401b97c 100644
--- a/keyboards/reviung/reviung39/keymaps/default_s/readme.md
+++ b/keyboards/reviung/reviung39/keymaps/default_s/readme.md
@@ -3,4 +3,4 @@
__REVIUNG39S is simple version__
The number of RGB LEDs is set to 6.
-To change the number of RGB LEDs, change the "#define RGBLED_NUM 6" number in "default_s / config.h".
+To change the number of RGB LEDs, change the "#define RGBLIGHT_LED_COUNT 6" number in "default_s / config.h".
diff --git a/keyboards/reviung/reviung61/keymaps/default_rgb/config.h b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h
index 854af5142d..ddd5ef6cf5 100644
--- a/keyboards/reviung/reviung61/keymaps/default_rgb/config.h
+++ b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h
@@ -20,7 +20,7 @@
// --- RGB underglow ---
#define WS2812_DI_PIN B7
- #define RGBLED_NUM 12
+ #define RGBLIGHT_LED_COUNT 12
#define RGBLIGHT_HUE_STEP 16
#define RGBLIGHT_SAT_STEP 16
#define RGBLIGHT_VAL_STEP 16
diff --git a/keyboards/rgbkb/sol/keymaps/brianweyer/config.h b/keyboards/rgbkb/sol/keymaps/brianweyer/config.h
deleted file mode 100644
index 452cdda823..0000000000
--- a/keyboards/rgbkb/sol/keymaps/brianweyer/config.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-
-// place overrides here
-
diff --git a/keyboards/rgbkb/sol/keymaps/danielhklein/config.h b/keyboards/rgbkb/sol/keymaps/danielhklein/config.h
deleted file mode 100644
index 452cdda823..0000000000
--- a/keyboards/rgbkb/sol/keymaps/danielhklein/config.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-
-// place overrides here
-
diff --git a/keyboards/rgbkb/sol/rev1/config.h b/keyboards/rgbkb/sol/rev1/config.h
index a41959a88b..575e393b1d 100644
--- a/keyboards/rgbkb/sol/rev1/config.h
+++ b/keyboards/rgbkb/sol/rev1/config.h
@@ -19,10 +19,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#ifdef LED_MIRRORED
- #define RGBLED_NUM 35
+ #define RGBLIGHT_LED_COUNT 35
#else
- #define RGBLED_NUM 70
+ #define RGBLIGHT_LED_COUNT 70
#endif
-#define RGB_MATRIX_LED_COUNT RGBLED_NUM
+#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
#define RGB_MATRIX_CENTER { 112, 35 }
diff --git a/keyboards/rgbkb/sol/rev2/config.h b/keyboards/rgbkb/sol/rev2/config.h
index 19680c84b3..7016cf7744 100644
--- a/keyboards/rgbkb/sol/rev2/config.h
+++ b/keyboards/rgbkb/sol/rev2/config.h
@@ -24,28 +24,28 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef LED_MIRRORED
#ifdef FULLHAND_ENABLE
#define FULLHAND_LEDS 24
- #define RGBLED_NUM 74
+ #define RGBLIGHT_LED_COUNT 74
#elif SF_ENABLE
#define FULLHAND_LEDS 38
- #define RGBLED_NUM 81
+ #define RGBLIGHT_LED_COUNT 81
#else
#define FULLHAND_LEDS 0
- #define RGBLED_NUM 62
+ #define RGBLIGHT_LED_COUNT 62
#endif
#else
#ifdef FULLHAND_ENABLE
#define FULLHAND_LEDS 24
- #define RGBLED_NUM 148
+ #define RGBLIGHT_LED_COUNT 148
#elif SF_ENABLE
#define FULLHAND_LEDS 38
- #define RGBLED_NUM 162
+ #define RGBLIGHT_LED_COUNT 162
#else
#define FULLHAND_LEDS 0
- #define RGBLED_NUM 124
+ #define RGBLIGHT_LED_COUNT 124
#endif
#endif
-#define RGB_MATRIX_LED_COUNT RGBLED_NUM
+#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
#define RGB_MATRIX_CENTER { 112, 37 }
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/default/config.h b/keyboards/rgbkb/zen/rev1/keymaps/default/config.h
index 1de23afd63..e9d6659d60 100644
--- a/keyboards/rgbkb/zen/rev1/keymaps/default/config.h
+++ b/keyboards/rgbkb/zen/rev1/keymaps/default/config.h
@@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -35,7 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 16
+#define RGBLIGHT_LED_COUNT 16
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/rgbkb/zygomorph/rev1/config.h b/keyboards/rgbkb/zygomorph/rev1/config.h
index 8a46a941b7..81f961540c 100644
--- a/keyboards/rgbkb/zygomorph/rev1/config.h
+++ b/keyboards/rgbkb/zygomorph/rev1/config.h
@@ -22,9 +22,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EE_HANDS
#ifndef RGBLIGHT_SPLIT_ENABLE
- #define RGBLED_NUM 30
+ #define RGBLIGHT_LED_COUNT 30
#else
- #define RGBLED_NUM 60
+ #define RGBLIGHT_LED_COUNT 60
#endif
#define RGB_MATRIX_LED_COUNT 60
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
deleted file mode 100644
index 0689676402..0000000000
--- a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2019 rominronin
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h
index 12d5784374..f2a365a52e 100644
--- a/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h
@@ -25,11 +25,11 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 180
-#ifdef RGBLED_NUM
- #undef RGBLED_NUM
+#ifdef RGBLIGHT_LED_COUNT
+ #undef RGBLIGHT_LED_COUNT
#endif
-#define RGBLED_NUM 55 // Number of LEDs
+#define RGBLIGHT_LED_COUNT 55 // Number of LEDs
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 48, 7 }
diff --git a/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h
index 392f2f97e8..d0f71f4f9f 100644
--- a/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h
@@ -25,10 +25,10 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 180
-#ifdef RGBLED_NUM
- #undef RGBLED_NUM
+#ifdef RGBLIGHT_LED_COUNT
+ #undef RGBLIGHT_LED_COUNT
#endif
-#define RGBLED_NUM 69 // Number of LEDs
+#define RGBLIGHT_LED_COUNT 69 // Number of LEDs
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 48, 21 }
diff --git a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h
index 21494a0dfd..36be4d6868 100644
--- a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h
@@ -21,8 +21,8 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 180
-#ifdef RGBLED_NUM
- #undef RGBLED_NUM
+#ifdef RGBLIGHT_LED_COUNT
+ #undef RGBLIGHT_LED_COUNT
#endif
#define RGB_MATRIX_LED_COUNT 48
diff --git a/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h
index 73a3019540..ebc2b46717 100644
--- a/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h
@@ -25,6 +25,6 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 180
-#define RGBLED_NUM 12 // Number of LEDs
+#define RGBLIGHT_LED_COUNT 12 // Number of LEDs
#define RGBLIGHT_LED_MAP { 0, 1, 3, 2, 2, 3, 2, 3, 4, 5, 6, 7 }
diff --git a/keyboards/silverbullet44/config.h b/keyboards/silverbullet44/config.h
index e8f1cca7eb..2c9eac876c 100644
--- a/keyboards/silverbullet44/config.h
+++ b/keyboards/silverbullet44/config.h
@@ -36,7 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_BREATHE_CENTER 2 // 1 to 2.7
#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
/*== customize snake effect ==*/
- #define RGBLIGHT_EFFECT_SNAKE_LENGTH RGBLED_NUM
+ #define RGBLIGHT_EFFECT_SNAKE_LENGTH RGBLIGHT_LED_COUNT
/*== customize knight effect ==*/
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 6
#endif
diff --git a/keyboards/sirius/unigo66/keymaps/danielhklein/config.h b/keyboards/sirius/unigo66/keymaps/danielhklein/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/sirius/unigo66/keymaps/danielhklein/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/smithrune/iron180/info.json b/keyboards/smithrune/iron180/info.json
index aecd10ef84..4707f32664 100644
--- a/keyboards/smithrune/iron180/info.json
+++ b/keyboards/smithrune/iron180/info.json
@@ -1,5 +1,5 @@
{
- "keyboard_name": "Iron180",
+ "keyboard_name": "Iron180 V1",
"manufacturer": "SmithRune",
"url": "",
"maintainer": "Gondolindrim",
diff --git a/keyboards/smithrune/iron180v2/readme.md b/keyboards/smithrune/iron180v2/readme.md
new file mode 100644
index 0000000000..2df6b96521
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/readme.md
@@ -0,0 +1,27 @@
+# Iron180 V2 PCBs QMK firmware folder
+
+## Introduction
+
+This is the QMK Firmware repository for the Iron180 PCB, a keyboard designed by [Smith and Rune](https://smithrune.com/) and PCB designed by [Gondolindrim](http://github.com/Gondolindrim).
+
+The Iron180 PCB PCB had two versions. The first version used an STM32F072 microcontroller, and was available only in solderable version; it also supports ALPS switches, in-switch single-color LEDs and a multi-layout design for default or 7U bottom row, ISO layout, split backspace and right shift.
+
+The second version used an STM32F401 microcontroller and was available in hotswap and solderable version. The solderable version removes in-switch LED support and ALPS support, but keeps all layout compatibilities of the first version. The hotswap incarnation removes ISO layout support.
+
+As of November 2020, the only way to obtain an Iron180 was through the [Group Buy](https://geekhack.org/index.php?topic=109513) which is already over and all spots were filled. There was a sale for the V2 PCBs in october, 2023.
+
+## How to compile
+
+After setting up your build environment, you can compile the Iron180 default keymap by using:
+
+ make smithrune/iron180v2/<version>/default
+
+Where `<version>` can be `v2s` or `v2h`.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## How to enter into bootloader DFU
+Enter the bootloader DFU mode in 3 ways:
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape in the default keymap) and plug in the keyboard
+* **Physical reset button**: press and hold the reset button on the back of the PCB for five seconds
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` (Escape key on layer 1 in the default keymap)
diff --git a/keyboards/keebio/quefrency/keymaps/default65/config.h b/keyboards/smithrune/iron180v2/v2h/config.h
index 9aae0fdfc2..1d195c5a45 100644
--- a/keyboards/keebio/quefrency/keymaps/default65/config.h
+++ b/keyboards/smithrune/iron180v2/v2h/config.h
@@ -1,9 +1,5 @@
/*
-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>
+Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
This 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,3 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
+/* 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 WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE 4096
diff --git a/keyboards/smithrune/iron180v2/v2h/info.json b/keyboards/smithrune/iron180v2/v2h/info.json
new file mode 100644
index 0000000000..67eaf0501b
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2h/info.json
@@ -0,0 +1,674 @@
+{
+ "keyboard_name": "Iron180H v2",
+ "manufacturer": "SmithRune",
+ "url": "",
+ "maintainer": "Gondolindrim",
+ "usb": {
+ "vid": "0x8384",
+ "pid": "0x1182",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["C8" , "C7" , "C6" , "B15", "B14", "B13", "B12", "B3" , "D2" , "B1" , "B0" , "C12", "C10", "A10", "A15", "C0" , "C1" , "C4"],
+ "rows": ["B4" , "C11", "A8" , "C9" , "B10", "C5" , "B5" , "B6"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_tkl_f13_ansi_split_bs_rshift"
+ },
+ "community_layouts": [
+ "tkl_f13_ansi",
+ "tkl_f13_ansi_split_bs_rshift",
+ "tkl_f13_ansi_tsangan",
+ "tkl_f13_ansi_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_tkl_f13_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/smithrune/iron180v2/v2h/keymaps/default/keymap.c b/keyboards/smithrune/iron180v2/v2h/keymaps/default/keymap.c
new file mode 100755
index 0000000000..82cc8162ad
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2h/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_F13 , KC_PSCR, KC_SCRL, 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, MO(1) , KC_UP ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/smithrune/iron180v2/v2h/keymaps/via/keymap.c b/keyboards/smithrune/iron180v2/v2h/keymaps/via/keymap.c
new file mode 100755
index 0000000000..82cc8162ad
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2h/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_F13 , KC_PSCR, KC_SCRL, 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, MO(1) , KC_UP ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/w1_at/keymaps/via/rules.mk b/keyboards/smithrune/iron180v2/v2h/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/w1_at/keymaps/via/rules.mk
+++ b/keyboards/smithrune/iron180v2/v2h/keymaps/via/rules.mk
diff --git a/keyboards/smithrune/iron180v2/v2h/matrix_diagram.md b/keyboards/smithrune/iron180v2/v2h/matrix_diagram.md
new file mode 100644
index 0000000000..2e6310bcb6
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2h/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for SmithRune Iron180 V2 H
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0A │0B │0C ││0D ││0G │0F │0E │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││1F │1G │3G │ │1D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └───────┘
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2E │2F │2G │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+│40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │ │4F │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│50 │51 │52 │56 │59 │5A │5B │5C ││5E │5F │5G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ ┌──────────┐
+ 2.75u RShift │4C │
+ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │5A │5B │5C │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/smithrune/iron180v2/v2h/rules.mk b/keyboards/smithrune/iron180v2/v2h/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2h/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/projectcain/vault35/config.h b/keyboards/smithrune/iron180v2/v2s/config.h
index 7abf6b197c..bf443b56f1 100644
--- a/keyboards/projectcain/vault35/config.h
+++ b/keyboards/smithrune/iron180v2/v2s/config.h
@@ -1,24 +1,34 @@
/*
-Copyright 2021 projectcain
+Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 3
+#define BACKLIGHT_PAL_MODE 2
+
/* 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 WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE 4096
+
/*
* Feature disable options
* These options are also useful to firmware size reduction.
diff --git a/keyboards/era/klein/halconf.h b/keyboards/smithrune/iron180v2/v2s/halconf.h
index f57e86df01..c58ddcbf7b 100644
--- a/keyboards/era/klein/halconf.h
+++ b/keyboards/smithrune/iron180v2/v2s/halconf.h
@@ -1,4 +1,4 @@
-/* Copyright 2023 eerraa
+/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -14,8 +14,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/iron180/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
#pragma once
#define HAL_USE_PWM TRUE
-#include_next <halconf.h> \ No newline at end of file
+#include_next <halconf.h>
diff --git a/keyboards/smithrune/iron180v2/v2s/info.json b/keyboards/smithrune/iron180v2/v2s/info.json
new file mode 100644
index 0000000000..aae84fd956
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/info.json
@@ -0,0 +1,1432 @@
+{
+ "keyboard_name": "Iron180 Sv2",
+ "manufacturer": "SmithRune",
+ "url": "",
+ "maintainer": "Gondolindrim",
+ "usb": {
+ "vid": "0x8384",
+ "pid": "0x1181",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["C7" , "C6" , "B15", "B14", "B13", "B12", "B10", "B3" , "D2" , "B0" , "C5" , "C12", "C10", "A10", "A15", "C0" , "C1" , "A7"],
+ "rows": ["B4" , "C11", "A8" , "C9" , "B1" , "C4" , "B5" , "B6"]
+ },
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "backlight": {
+ "pin": "C8",
+ "levels": 20,
+ "breathing": false,
+ "as_caps_lock": true
+ },
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "community_layouts": [
+ "tkl_f13_ansi",
+ "tkl_f13_ansi_split_bs_rshift",
+ "tkl_f13_ansi_tsangan",
+ "tkl_f13_ansi_tsangan_split_bs_rshift",
+ "tkl_f13_iso",
+ "tkl_f13_iso_split_bs_rshift",
+ "tkl_f13_iso_tsangan",
+ "tkl_f13_iso_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_wkl": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label": "F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+
+ {"label": "Insert", "matrix": [6, 14], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [6, 15], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [6, 16], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+
+ {"label": "Delete", "matrix": [7, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [7, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [7, 16], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"label": "\u2191", "matrix": [4, 17], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Ctrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 17], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/smithrune/iron180v2/v2s/keymaps/default/keymap.c b/keyboards/smithrune/iron180v2/v2s/keymaps/default/keymap.c
new file mode 100755
index 0000000000..f2d58a163d
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+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
+
+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_F13 , KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT ,
+ KC_LSFT, KC_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) , KC_UP ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/smithrune/iron180v2/v2s/keymaps/via/keymap.c b/keyboards/smithrune/iron180v2/v2s/keymaps/via/keymap.c
new file mode 100755
index 0000000000..f2d58a163d
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+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
+
+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_F13 , KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT ,
+ KC_LSFT, KC_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) , KC_UP ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/smithrune/iron180v2/v2s/keymaps/via/rules.mk b/keyboards/smithrune/iron180v2/v2s/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/smithrune/iron180v2/v2s/matrix_diagram.md b/keyboards/smithrune/iron180v2/v2s/matrix_diagram.md
new file mode 100644
index 0000000000..d946162263
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for SmithRune Iron180 V2 S
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0A │0B │0C ││0D ││0E │0F │0G │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││6F │6F │6G │ │3E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││7E │7F │7G │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │ │4H │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│50 │51 │52 │56 │59 │5A │5B │5C ││5E │5H │5G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│40 │ 2.25u LShift 2.75u RShift │4C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │5A │5B │5C │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/era/klein/mcuconf.h b/keyboards/smithrune/iron180v2/v2s/mcuconf.h
index b82cc49d7d..b7b462f8cd 100644
--- a/keyboards/era/klein/mcuconf.h
+++ b/keyboards/smithrune/iron180v2/v2s/mcuconf.h
@@ -1,4 +1,4 @@
-/* Copyright 2023 eerraa
+/* Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
*
* This 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,5 +18,5 @@
#include_next <mcuconf.h>
-#undef RP_PWM_USE_PWM7
-#define RP_PWM_USE_PWM7 TRUE \ No newline at end of file
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/smithrune/iron180v2/v2s/rules.mk b/keyboards/smithrune/iron180v2/v2s/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/smithrune/iron180v2/v2s/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/lefty/config.h b/keyboards/smoll/lefty/config.h
index b1432e4d87..b1432e4d87 100644
--- a/keyboards/lefty/config.h
+++ b/keyboards/smoll/lefty/config.h
diff --git a/keyboards/lefty/info.json b/keyboards/smoll/lefty/info.json
index c7113e4c26..c7113e4c26 100644
--- a/keyboards/lefty/info.json
+++ b/keyboards/smoll/lefty/info.json
diff --git a/keyboards/lefty/keymaps/default/keymap.c b/keyboards/smoll/lefty/keymaps/default/keymap.c
index e88edb63a5..e88edb63a5 100644
--- a/keyboards/lefty/keymaps/default/keymap.c
+++ b/keyboards/smoll/lefty/keymaps/default/keymap.c
diff --git a/keyboards/lefty/keymaps/via/keymap.c b/keyboards/smoll/lefty/keymaps/via/keymap.c
index e88edb63a5..e88edb63a5 100644
--- a/keyboards/lefty/keymaps/via/keymap.c
+++ b/keyboards/smoll/lefty/keymaps/via/keymap.c
diff --git a/keyboards/smoll/lefty/keymaps/via/rules.mk b/keyboards/smoll/lefty/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/smoll/lefty/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/lefty/lefty.c b/keyboards/smoll/lefty/lefty.c
index b1bea424b0..b1bea424b0 100644
--- a/keyboards/lefty/lefty.c
+++ b/keyboards/smoll/lefty/lefty.c
diff --git a/keyboards/lefty/readme.md b/keyboards/smoll/lefty/readme.md
index 7562517a22..7562517a22 100644
--- a/keyboards/lefty/readme.md
+++ b/keyboards/smoll/lefty/readme.md
diff --git a/keyboards/lefty/rev1/info.json b/keyboards/smoll/lefty/rev1/info.json
index 0a3e44c86f..0a3e44c86f 100644
--- a/keyboards/lefty/rev1/info.json
+++ b/keyboards/smoll/lefty/rev1/info.json
diff --git a/keyboards/era/klein/rules.mk b/keyboards/smoll/lefty/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/era/klein/rules.mk
+++ b/keyboards/smoll/lefty/rev1/rules.mk
diff --git a/keyboards/lefty/rev2/info.json b/keyboards/smoll/lefty/rev2/info.json
index 9b8578c0db..9b8578c0db 100644
--- a/keyboards/lefty/rev2/info.json
+++ b/keyboards/smoll/lefty/rev2/info.json
diff --git a/keyboards/lefty/rev1/rules.mk b/keyboards/smoll/lefty/rev2/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/lefty/rev1/rules.mk
+++ b/keyboards/smoll/lefty/rev2/rules.mk
diff --git a/keyboards/lefty/rules.mk b/keyboards/smoll/lefty/rules.mk
index bbf738e03b..d8d08e502c 100644
--- a/keyboards/lefty/rules.mk
+++ b/keyboards/smoll/lefty/rules.mk
@@ -14,4 +14,4 @@ LTO_ENABLE = yes
OLED_ENABLE = yes
-DEFAULT_FOLDER = lefty/rev2
+DEFAULT_FOLDER = smoll/lefty/rev2
diff --git a/keyboards/pw88/config.h b/keyboards/smoll/pw88/config.h
index f655b92527..f655b92527 100644
--- a/keyboards/pw88/config.h
+++ b/keyboards/smoll/pw88/config.h
diff --git a/keyboards/pw88/info.json b/keyboards/smoll/pw88/info.json
index bd24071e70..bd24071e70 100644
--- a/keyboards/pw88/info.json
+++ b/keyboards/smoll/pw88/info.json
diff --git a/keyboards/pw88/keymaps/default/keymap.c b/keyboards/smoll/pw88/keymaps/default/keymap.c
index 9e5ffd3f24..9e5ffd3f24 100644
--- a/keyboards/pw88/keymaps/default/keymap.c
+++ b/keyboards/smoll/pw88/keymaps/default/keymap.c
diff --git a/keyboards/pw88/keymaps/via/keymap.c b/keyboards/smoll/pw88/keymaps/via/keymap.c
index 9e5ffd3f24..9e5ffd3f24 100644
--- a/keyboards/pw88/keymaps/via/keymap.c
+++ b/keyboards/smoll/pw88/keymaps/via/keymap.c
diff --git a/keyboards/smoll/pw88/keymaps/via/rules.mk b/keyboards/smoll/pw88/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/smoll/pw88/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/pw88/readme.md b/keyboards/smoll/pw88/readme.md
index facee8bac8..facee8bac8 100644
--- a/keyboards/pw88/readme.md
+++ b/keyboards/smoll/pw88/readme.md
diff --git a/keyboards/pw88/rules.mk b/keyboards/smoll/pw88/rules.mk
index c628fc7d0f..c628fc7d0f 100644
--- a/keyboards/pw88/rules.mk
+++ b/keyboards/smoll/pw88/rules.mk
diff --git a/keyboards/snes_macropad/snes_macropad.c b/keyboards/snes_macropad/snes_macropad.c
index 1dcfda33ec..9f4f410fa3 100644
--- a/keyboards/snes_macropad/snes_macropad.c
+++ b/keyboards/snes_macropad/snes_macropad.c
@@ -90,7 +90,7 @@ static void setupForFlashing(void) {
// Set alternating backlight colors
const uint8_t max = 20;
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- for (size_t i = 0; i < RGBLED_NUM; ++i) {
+ for (size_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
rgb_led_t *led_ = (rgb_led_t *)&led[i];
switch (i % 2) {
case 0:
diff --git a/keyboards/sofle/keymaps/default/config.h b/keyboards/sofle/keymaps/default/config.h
deleted file mode 100644
index c5494c20aa..0000000000
--- a/keyboards/sofle/keymaps/default/config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-
-/* The way how "handedness" is decided (which half is which),
-see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
-for more options.
-*/
diff --git a/keyboards/sofle/keymaps/rgb_default/config.h b/keyboards/sofle/keymaps/rgb_default/config.h
index 7d14c6e337..ee137625c0 100644
--- a/keyboards/sofle/keymaps/rgb_default/config.h
+++ b/keyboards/sofle/keymaps/rgb_default/config.h
@@ -49,13 +49,13 @@
#ifdef RGB_MATRIX_ENABLE
-#define RGBLED_NUM 35 // Number of LEDs
-#define RGBLED_NUM 35 // Number of LEDs
-#define RGB_MATRIX_LED_COUNT RGBLED_NUM
+#define RGBLIGHT_LED_COUNT 35 // Number of LEDs
+#define RGBLIGHT_LED_COUNT 35 // Number of LEDs
+#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
#endif
#ifdef RGBLIGHT_ENABLE
- #undef RGBLED_NUM
+ #undef RGBLIGHT_LED_COUNT
//#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
@@ -68,11 +68,11 @@
//#define RGBLIGHT_EFFECT_ALTERNATING
//#define RGBLIGHT_EFFECT_TWINKLE
- #define RGBLED_NUM 70
+ #define RGBLIGHT_LED_COUNT 70
//#define RGBLED_SPLIT
#define RGBLED_SPLIT { 35, 35 } // haven't figured out how to use this yet
- //#define RGBLED_NUM 30
+ //#define RGBLIGHT_LED_COUNT 30
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/sofle/keymaps/via/config.h b/keyboards/sofle/keymaps/via/config.h
index e53881987d..c70c410f77 100644
--- a/keyboards/sofle/keymaps/via/config.h
+++ b/keyboards/sofle/keymaps/via/config.h
@@ -24,11 +24,11 @@ for more options. */
#if defined(KEYBOARD_sofle_rev1)
// Add RGB underglow and top facing lighting
# define WS2812_DI_PIN D3
-# define RGBLED_NUM 72
+# define RGBLIGHT_LED_COUNT 72
# define RGBLED_SPLIT \
{ 36, 36 }
# ifdef RGB_MATRIX_ENABLE
-# define RGB_MATRIX_LED_COUNT RGBLED_NUM
+# define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
# define RGB_MATRIX_SPLIT RGBLED_SPLIT
# define SPLIT_TRANSPORT_MIRROR
# else
diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h
index 13c76a80e2..0694b9dd3c 100644
--- a/keyboards/stront/config.h
+++ b/keyboards/stront/config.h
@@ -38,7 +38,7 @@
/* RGB config */
#ifdef RGB_MATRIX_ENABLE
# define SPLIT_TRANSPORT_MIRROR
-# define RGB_MATRIX_LED_COUNT RGBLED_NUM
+# define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
# define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/sx60/keymaps/amnobis/config.h b/keyboards/sx60/keymaps/amnobis/config.h
deleted file mode 100644
index a5568e400d..0000000000
--- a/keyboards/sx60/keymaps/amnobis/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../config.h"
diff --git a/keyboards/tada68/keymaps/iso-nor/config.h b/keyboards/tada68/keymaps/iso-nor/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/tada68/keymaps/iso-nor/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/tada68/keymaps/laas/config.h b/keyboards/tada68/keymaps/laas/config.h
deleted file mode 100755
index 6f70f09bee..0000000000
--- a/keyboards/tada68/keymaps/laas/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/tada68/keymaps/peippo/config.h b/keyboards/tada68/keymaps/peippo/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/tada68/keymaps/peippo/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h
deleted file mode 100644
index dbacdcce58..0000000000
--- a/keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/thevankeyboards/caravan/keymaps/default/config.h b/keyboards/thevankeyboards/caravan/keymaps/default/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/thevankeyboards/caravan/keymaps/default/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/thevankeyboards/minivan/keymaps/mikethetiger/config.h b/keyboards/thevankeyboards/minivan/keymaps/mikethetiger/config.h
deleted file mode 100644
index 271f48d001..0000000000
--- a/keyboards/thevankeyboards/minivan/keymaps/mikethetiger/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/tunks/ergo33/keymaps/default/config.h b/keyboards/tunks/ergo33/keymaps/default/config.h
index 33edf0b03c..3ca11c66a6 100644
--- a/keyboards/tunks/ergo33/keymaps/default/config.h
+++ b/keyboards/tunks/ergo33/keymaps/default/config.h
@@ -20,7 +20,7 @@
* No external LED PCB: 10
* External LED PCB: 14
*/
-#define RGBLED_NUM 14
+#define RGBLIGHT_LED_COUNT 14
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
diff --git a/keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk b/keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk
deleted file mode 100644
index 8b13789179..0000000000
--- a/keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/keyboards/unison/keymaps/via/config.h b/keyboards/unison/keymaps/via/config.h
index 48fe417a5d..07a2c9f5cc 100644
--- a/keyboards/unison/keymaps/via/config.h
+++ b/keyboards/unison/keymaps/via/config.h
@@ -16,8 +16,8 @@
#pragma once
- #undef RGBLED_NUM
- #define RGBLED_NUM 17 // Layer Indicator(2) + Rotary Encoder(5) + Optional(2) + Under(8)
+ #undef RGBLIGHT_LED_COUNT
+ #define RGBLIGHT_LED_COUNT 17 // Layer Indicator(2) + Rotary Encoder(5) + Optional(2) + Under(8)
#undef RGBLIGHT_LED_MAP
#define RGBLIGHT_LED_MAP {2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} // Left to Right to Under
diff --git a/keyboards/v60_type_r/info.json b/keyboards/v60_type_r/info.json
index 6332071994..43a3d9472c 100644
--- a/keyboards/v60_type_r/info.json
+++ b/keyboards/v60_type_r/info.json
@@ -18,22 +18,6 @@
"pin": "F7",
"on_state": 0
},
- "rgblight": {
- "driver": "custom",
- "led_count": 1,
- "animations": {
- "breathing": true,
- "rainbow_mood": true,
- "rainbow_swirl": true,
- "snake": true,
- "knight": true,
- "christmas": true,
- "static_gradient": true,
- "rgb_test": true,
- "alternating": true,
- "twinkle": true
- }
- },
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"community_layouts": ["60_ansi", "60_iso"],
diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk
index d6654ffea6..a7f2bc7026 100644
--- a/keyboards/v60_type_r/rules.mk
+++ b/keyboards/v60_type_r/rules.mk
@@ -8,7 +8,7 @@ CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable the RGB Underglow
+RGBLIGHT_ENABLE = no # Enable the RGB Underglow
AUDIO_ENABLE = no # Audio output
LTO_ENABLE = yes
diff --git a/keyboards/v60_type_r/v60_type_r.c b/keyboards/v60_type_r/v60_type_r.c
index 871d9915d3..b266472e64 100644
--- a/keyboards/v60_type_r/v60_type_r.c
+++ b/keyboards/v60_type_r/v60_type_r.c
@@ -131,20 +131,6 @@ void set_rgb_pin_off(uint8_t pin) {
PORTF |= _BV(pin);
}
-void rgblight_set(void) {
- // xprintf("Setting RGB underglow\n");
- if (!rgblight_config.enable) {
- led[0].r = 0;
- led[0].g = 0;
- led[0].b = 0;
- set_rgb_pin_off(RGB_RED_PIN);
- set_rgb_pin_off(RGB_GREEN_PIN);
- set_rgb_pin_off(RGB_BLUE_PIN);
- }
-
- // //xprintf("Red: %u, Green: %u, Blue: %u\n", led[0].r, led[0].g, led[0].b);
-}
-
ISR(TIMER3_COMPA_vect)
{
static uint8_t pwm = 0;
diff --git a/keyboards/w1_at/config.h b/keyboards/w1_at/config.h
deleted file mode 100644
index 79fdc4275f..0000000000
--- a/keyboards/w1_at/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-Copyright 2021 Yiancar-Designs
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published byß
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
-#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
diff --git a/keyboards/w1_at/keymaps/default/readme.md b/keyboards/w1_at/keymaps/default/readme.md
deleted file mode 100644
index af0497e720..0000000000
--- a/keyboards/w1_at/keymaps/default/readme.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# The default keymap for W1-AT.
-
-Layer 0
-
-![Layer 0](https://i.imgur.com/pLdgxlJ.png)
-
-Layer 1
-
-![Layer 1](https://i.imgur.com/v24h9EO.png)
diff --git a/keyboards/w1_at/keymaps/via/readme.md b/keyboards/w1_at/keymaps/via/readme.md
deleted file mode 100644
index 33cdf89e60..0000000000
--- a/keyboards/w1_at/keymaps/via/readme.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# The default keymap for W1-AT. VIA support enabled.
-
-Layer 0
-
-![Layer 0](https://i.imgur.com/4bUxnAz.png)
-
-Layer 1
-
-![Layer 1](https://i.imgur.com/v24h9EO.png)
diff --git a/keyboards/w1_at/keymaps/zq/rules.mk b/keyboards/w1_at/keymaps/zq/rules.mk
deleted file mode 100644
index 036bd6d1c3..0000000000
--- a/keyboards/w1_at/keymaps/zq/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/w1_at/rules.mk b/keyboards/w1_at/rules.mk
deleted file mode 100644
index 7c0709f41e..0000000000
--- a/keyboards/w1_at/rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# Wildcard to allow APM32 MCU
-DFU_SUFFIX_ARGS = -v FFFF -p FFFF
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/westfoxtrot/cyclops/keymaps/peippo/config.h b/keyboards/westfoxtrot/cyclops/keymaps/peippo/config.h
deleted file mode 100644
index 6278fae658..0000000000
--- a/keyboards/westfoxtrot/cyclops/keymaps/peippo/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/work_louder/loop/info.json b/keyboards/work_louder/loop/info.json
index eacbbbccbd..4514192b6d 100644
--- a/keyboards/work_louder/loop/info.json
+++ b/keyboards/work_louder/loop/info.json
@@ -30,6 +30,7 @@
"pin": "F1"
},
"rgblight": {
+ "driver": "custom",
"max_brightness": 120,
"sleep": true,
"animations": {
diff --git a/keyboards/work_louder/micro/info.json b/keyboards/work_louder/micro/info.json
index d76e7aa049..21c4bc0da8 100644
--- a/keyboards/work_louder/micro/info.json
+++ b/keyboards/work_louder/micro/info.json
@@ -21,6 +21,7 @@
},
"processor": "atmega32u4",
"rgblight": {
+ "driver": "custom",
"animations": {
"alternating": false,
"breathing": true,
diff --git a/keyboards/work_louder/nano/info.json b/keyboards/work_louder/nano/info.json
index ab064bd019..7bbdb4e032 100644
--- a/keyboards/work_louder/nano/info.json
+++ b/keyboards/work_louder/nano/info.json
@@ -27,6 +27,7 @@
},
"rgblight": {
"led_count": 6,
+ "driver": "custom",
"max_brightness": 120,
"sleep": true,
"animations": {
diff --git a/keyboards/work_louder/numpad/info.json b/keyboards/work_louder/numpad/info.json
index 0fa2bf2565..9149fc77bb 100644
--- a/keyboards/work_louder/numpad/info.json
+++ b/keyboards/work_louder/numpad/info.json
@@ -50,6 +50,7 @@
]
},
"rgblight": {
+ "driver": "custom",
"animations": {
"breathing": true,
"knight": true,
diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c
index b4d1a2ad72..9b39555971 100644
--- a/keyboards/work_louder/rgb_functions.c
+++ b/keyboards/work_louder/rgb_functions.c
@@ -24,9 +24,9 @@
#include "ws2812_bitbang.c"
-void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
- ws2812_setleds(start_led, num_leds);
-}
+const rgblight_driver_t rgblight_driver = {
+ .setleds = ws2812_setleds,
+};
#endif
#ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/work_louder/work_board/info.json b/keyboards/work_louder/work_board/info.json
index 1946b8bcf4..163271bf7a 100644
--- a/keyboards/work_louder/work_board/info.json
+++ b/keyboards/work_louder/work_board/info.json
@@ -25,6 +25,7 @@
"pin": "D1"
},
"rgblight": {
+ "driver": "custom",
"max_brightness": 120,
"sleep": true,
"animations": {
diff --git a/keyboards/xiudi/xd75/keymaps/boy_314/config.h b/keyboards/xiudi/xd75/keymaps/boy_314/config.h
deleted file mode 100644
index 7b9637ef9c..0000000000
--- a/keyboards/xiudi/xd75/keymaps/boy_314/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once \ No newline at end of file
diff --git a/keyboards/xiudi/xd75/keymaps/bulbizarre/config.h b/keyboards/xiudi/xd75/keymaps/bulbizarre/config.h
deleted file mode 100644
index e6975da8a2..0000000000
--- a/keyboards/xiudi/xd75/keymaps/bulbizarre/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/c4software_bepo/config.h b/keyboards/xiudi/xd75/keymaps/c4software_bepo/config.h
deleted file mode 100644
index 6605bbf93f..0000000000
--- a/keyboards/xiudi/xd75/keymaps/c4software_bepo/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/c4software_bepo/rules.mk b/keyboards/xiudi/xd75/keymaps/c4software_bepo/rules.mk
deleted file mode 100644
index 7efceba50a..0000000000
--- a/keyboards/xiudi/xd75/keymaps/c4software_bepo/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/xiudi/xd75/keymaps/developper_bepo/config.h b/keyboards/xiudi/xd75/keymaps/developper_bepo/config.h
deleted file mode 100644
index 0183e02427..0000000000
--- a/keyboards/xiudi/xd75/keymaps/developper_bepo/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2017 Quentin Lebastard
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should 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/xiudi/xd75/keymaps/developper_bepo/rules.mk b/keyboards/xiudi/xd75/keymaps/developper_bepo/rules.mk
deleted file mode 100644
index 7efceba50a..0000000000
--- a/keyboards/xiudi/xd75/keymaps/developper_bepo/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/xiudi/xd75/keymaps/dyn_macro_tap_dance/config.h b/keyboards/xiudi/xd75/keymaps/dyn_macro_tap_dance/config.h
deleted file mode 100644
index e6975da8a2..0000000000
--- a/keyboards/xiudi/xd75/keymaps/dyn_macro_tap_dance/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/fabian/config.h b/keyboards/xiudi/xd75/keymaps/fabian/config.h
deleted file mode 100644
index a72596783d..0000000000
--- a/keyboards/xiudi/xd75/keymaps/fabian/config.h
+++ /dev/null
@@ -1,19 +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/>.
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/xiudi/xd75/keymaps/french/config.h b/keyboards/xiudi/xd75/keymaps/french/config.h
deleted file mode 100644
index e6975da8a2..0000000000
--- a/keyboards/xiudi/xd75/keymaps/french/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/kloki/config.h b/keyboards/xiudi/xd75/keymaps/kloki/config.h
deleted file mode 100644
index e6975da8a2..0000000000
--- a/keyboards/xiudi/xd75/keymaps/kloki/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/kloki/rules.mk b/keyboards/xiudi/xd75/keymaps/kloki/rules.mk
deleted file mode 100644
index 52a8f38d45..0000000000
--- a/keyboards/xiudi/xd75/keymaps/kloki/rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/xiudi/xd75/keymaps/msiu/config.h b/keyboards/xiudi/xd75/keymaps/msiu/config.h
deleted file mode 100644
index 4fbd59becc..0000000000
--- a/keyboards/xiudi/xd75/keymaps/msiu/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* 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/xiudi/xd75/keymaps/pitty/config.h b/keyboards/xiudi/xd75/keymaps/pitty/config.h
deleted file mode 100644
index e6975da8a2..0000000000
--- a/keyboards/xiudi/xd75/keymaps/pitty/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 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/xiudi/xd75/keymaps/pitty/rules.mk b/keyboards/xiudi/xd75/keymaps/pitty/rules.mk
deleted file mode 100644
index 52a8f38d45..0000000000
--- a/keyboards/xiudi/xd75/keymaps/pitty/rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/xiudi/xd75/keymaps/skewwhiffy/rules.mk b/keyboards/xiudi/xd75/keymaps/skewwhiffy/rules.mk
deleted file mode 100644
index 52a8f38d45..0000000000
--- a/keyboards/xiudi/xd75/keymaps/skewwhiffy/rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/yosino58/keymaps/default/config.h b/keyboards/yosino58/keymaps/default/config.h
index 763b31aa10..e82254fff1 100644
--- a/keyboards/yosino58/keymaps/default/config.h
+++ b/keyboards/yosino58/keymaps/default/config.h
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 100
-#undef RGBLED_NUM
+#undef RGBLIGHT_LED_COUNT
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -40,7 +40,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 12
+#define RGBLIGHT_LED_COUNT 12
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/layouts/default/ortho_5x13/default_ortho_5x13/keymap.c b/layouts/default/ortho_5x13/default_ortho_5x13/keymap.c
new file mode 100644
index 0000000000..11958f3700
--- /dev/null
+++ b/layouts/default/ortho_5x13/default_ortho_5x13/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Tab│Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │# │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │Ent│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ↑ │ / │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Ctl│GUI│LWR│Alt│RSE│ │ │ │Alt│Sft│← │ ↓ │ → │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_5x13(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_NUHS, KC_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_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, TT(1), KC_LALT, TT(2), KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RSFT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_ortho_5x13(
+ KC_GRV , KC_MUTE, KC_VOLU, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, G(KC_P), KC_SLEP, KC_WAKE, KC_PSCR, KC_DEL , KC_EQL ,
+ KC_BTN3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______ ,
+ _______, KC_BTN4, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
+ [2] = LAYOUT_ortho_5x13(
+ 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 ,
+ _______, _______, _______, _______, QK_RBT, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, KC_WH_U, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R
+ ),
+};
diff --git a/layouts/default/ortho_5x13/info.json b/layouts/default/ortho_5x13/info.json
new file mode 100644
index 0000000000..1bfa00d770
--- /dev/null
+++ b/layouts/default/ortho_5x13/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "5x13 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_ortho_5x13": {
+ "layout": [
+ {"x":0 , "y":0},
+ {"x":1 , "y":0},
+ {"x":2 , "y":0},
+ {"x":3 , "y":0},
+ {"x":4 , "y":0},
+ {"x":5 , "y":0},
+ {"x":6 , "y":0},
+ {"x":7 , "y":0},
+ {"x":8 , "y":0},
+ {"x":9 , "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+
+ {"x":0 , "y":1},
+ {"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":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":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":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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_5x13/layout.json b/layouts/default/ortho_5x13/layout.json
new file mode 100644
index 0000000000..017a9d0fcd
--- /dev/null
+++ b/layouts/default/ortho_5x13/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""]
diff --git a/layouts/default/ortho_5x13/readme.md b/layouts/default/ortho_5x13/readme.md
new file mode 100644
index 0000000000..4ec2f9297a
--- /dev/null
+++ b/layouts/default/ortho_5x13/readme.md
@@ -0,0 +1,3 @@
+# ortho_5x13
+
+ LAYOUT_ortho_5x13
diff --git a/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c b/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
index 5816e968d1..3827074612 100644
--- a/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
+++ b/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
@@ -8,7 +8,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│
* ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │Esc│Tab│ Q │ W │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * │Esc│Tab│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │
* ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
* │Del│Cap│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │
* ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
@@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[0] = LAYOUT_ortho_5x14(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_ESC, KC_TAB, KC_Q, KC_W, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_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_DEL, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LEFT, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, KC_ENT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_DOWN
diff --git a/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c b/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c
new file mode 100644
index 0000000000..527f87f84b
--- /dev/null
+++ b/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c
@@ -0,0 +1,46 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│Del│Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ ` │ 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 │ ; │ ' │Ent│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ↑ │ / │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Ctl│GUI│Lwr│Alt│Rse│ │ │ │Alt│Sft│← │ ↓ │ → │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_6x13(
+ 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_BSPC,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_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_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_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, TT(0), KC_LALT, TT(2), KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RSFT, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+ [1] = LAYOUT_ortho_6x13(
+ KC_GRV , KC_MUTE, KC_VOLU, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, G(KC_P), KC_SLEP, KC_WAKE, KC_PSCR, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_BTN3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______ ,
+ _______, KC_BTN4, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
+ [2] = LAYOUT_ortho_6x13(
+ 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 ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, QK_RBT, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, KC_WH_U, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R
+ ),
+};
diff --git a/layouts/default/ortho_6x13/info.json b/layouts/default/ortho_6x13/info.json
new file mode 100644
index 0000000000..728bce3b2c
--- /dev/null
+++ b/layouts/default/ortho_6x13/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "6x13 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_ortho_6x13": {
+ "layout": [
+ {"x":0 , "y":0},
+ {"x":1 , "y":0},
+ {"x":2 , "y":0},
+ {"x":3 , "y":0},
+ {"x":4 , "y":0},
+ {"x":5 , "y":0},
+ {"x":6 , "y":0},
+ {"x":7 , "y":0},
+ {"x":8 , "y":0},
+ {"x":9 , "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+
+ {"x":0 , "y":1},
+ {"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":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":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":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":0 , "y":5},
+ {"x":1 , "y":5},
+ {"x":2 , "y":5},
+ {"x":3 , "y":5},
+ {"x":4 , "y":5},
+ {"x":5 , "y":5},
+ {"x":6 , "y":5},
+ {"x":7 , "y":5},
+ {"x":8 , "y":5},
+ {"x":9 , "y":5},
+ {"x":10, "y":5},
+ {"x":11, "y":5},
+ {"x":12, "y":5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_6x13/layout.json b/layouts/default/ortho_6x13/layout.json
new file mode 100644
index 0000000000..1e5dab5b89
--- /dev/null
+++ b/layouts/default/ortho_6x13/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""],
+["","","","","","","","","","","","",""]
diff --git a/layouts/default/ortho_6x13/readme.md b/layouts/default/ortho_6x13/readme.md
new file mode 100644
index 0000000000..d4ea33dda9
--- /dev/null
+++ b/layouts/default/ortho_6x13/readme.md
@@ -0,0 +1,3 @@
+# ortho_6x13
+
+ LAYOUT_ortho_6x13
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index d5d268ae8b..892dbf1e03 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -1404,6 +1404,21 @@ LAYOUT_ortho_5x12
```
```
+LAYOUT_ortho_5x13
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+```
+
+```
LAYOUT_ortho_5x14
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
@@ -1466,6 +1481,23 @@ LAYOUT_ortho_6x4
```
```
+LAYOUT_ortho_6x13
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+```
+
+```
LAYOUT_planck_mit
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ │ │ │ │ │ │
diff --git a/lib/chibios-contrib b/lib/chibios-contrib
-Subproject da78eb3759b8d1779b237657c7667baa4aa95ca
+Subproject 9d7a7f904ed135e3459cf6d602db56a26872df6
diff --git a/platforms/chibios/converters/promicro_to_imera/_pin_defs.h b/platforms/chibios/converters/promicro_to_imera/_pin_defs.h
new file mode 100644
index 0000000000..475a84d697
--- /dev/null
+++ b/platforms/chibios/converters/promicro_to_imera/_pin_defs.h
@@ -0,0 +1,36 @@
+// Copyright 2023 splitkb.com
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// Left side (front)
+#define D3 0U
+#define D2 1U
+// GND
+// GND
+#define D1 2U
+#define D0 3U
+#define D4 4U
+#define C6 5U
+#define D7 6U
+#define E6 7U
+#define B4 8U
+#define B5 9U
+
+// Right side (front)
+// RAW
+// GND
+// RESET
+// VCC
+#define F4 29U
+#define F5 28U
+#define F6 17U
+#define F7 16U
+#define B1 22U
+#define B3 20U
+#define B2 23U
+#define B6 21U
+
+// LEDs
+#define D5 24U // Power LED, default-on
+#define B0 18U // Unconnected
diff --git a/platforms/chibios/converters/promicro_to_imera/converter.mk b/platforms/chibios/converters/promicro_to_imera/converter.mk
new file mode 100644
index 0000000000..bfca20cd99
--- /dev/null
+++ b/platforms/chibios/converters/promicro_to_imera/converter.mk
@@ -0,0 +1,10 @@
+# rp2040_ce MCU settings for converting AVR projects
+MCU := RP2040
+BOARD := QMK_PM2040
+BOOTLOADER := rp2040
+
+# These are defaults based on what has been implemented for RP2040 boards
+SERIAL_DRIVER ?= vendor
+WS2812_DRIVER ?= vendor
+BACKLIGHT_DRIVER ?= software
+OPT_DEFS += -DUSB_VBUS_PIN=19U
diff --git a/platforms/chibios/drivers/analog.c b/platforms/chibios/drivers/analog.c
index bf84ce8f76..fb146df936 100644
--- a/platforms/chibios/drivers/analog.c
+++ b/platforms/chibios/drivers/analog.c
@@ -31,7 +31,15 @@
#endif
#if STM32_ADCV3_OVERSAMPLING
-# error "STM32 ADCV3 Oversampling is not supported at this time."
+// Apparently all ADCV3 chips that support oversampling (STM32L4xx, STM32L4xx+,
+// STM32G4xx, STM32WB[35]x) have errata like “Wrong ADC result if conversion
+// done late after calibration or previous conversion”; the workaround is to
+// perform a dummy conversion and discard its result. STM32G4xx chips also
+// have the “ADC channel 0 converted instead of the required ADC channel”
+// errata, one workaround for which is also to perform a dummy conversion.
+# define ADC_DUMMY_CONVERSIONS_AT_START 1
+#else
+# define ADC_DUMMY_CONVERSIONS_AT_START 0
#endif
// Otherwise assume V3
@@ -76,8 +84,10 @@
#ifndef ADC_COUNT
# if defined(RP2040) || defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F4XX) || defined(GD32VF103) || defined(WB32F3G71xx) || defined(WB32FQ95xx)
# define ADC_COUNT 1
-# elif defined(STM32F3XX)
+# elif defined(STM32F3XX) || defined(STM32G4XX)
# define ADC_COUNT 4
+# elif defined(STM32L4XX)
+# define ADC_COUNT 3
# else
# error "ADC_COUNT has not been set for this ARM microcontroller."
# endif
@@ -89,13 +99,24 @@
# error "The ARM ADC implementation currently only supports reading one channel at a time."
#endif
+// Add dummy conversions as extra channels (this would work only on chips that
+// have multiple channel index fields instead of a channel mask, but all chips
+// that need that workaround are like that).
+#define ADC_TOTAL_CHANNELS (ADC_DUMMY_CONVERSIONS_AT_START + ADC_NUM_CHANNELS)
+
#ifndef ADC_BUFFER_DEPTH
# define ADC_BUFFER_DEPTH 1
#endif
// For more sampling rate options, look at hal_adc_lld.h in ChibiOS
-#ifndef ADC_SAMPLING_RATE
-# define ADC_SAMPLING_RATE ADC_SMPR_SMP_1P5
+#if !defined(ADC_SAMPLING_RATE) && !defined(RP2040)
+# if defined(ADC_SMPR_SMP_1P5)
+# define ADC_SAMPLING_RATE ADC_SMPR_SMP_1P5
+# elif defined(ADC_SMPR_SMP_2P5) // STM32L4XX, STM32L4XXP, STM32G4XX, STM32WBXX
+# define ADC_SAMPLING_RATE ADC_SMPR_SMP_2P5
+# else
+# error "Cannot determine the default ADC_SAMPLING_RATE for this MCU."
+# endif
#endif
// Options are 12, 10, 8, and 6 bit.
@@ -108,7 +129,7 @@
#endif
static ADCConfig adcCfg = {};
-static adcsample_t sampleBuffer[ADC_NUM_CHANNELS * ADC_BUFFER_DEPTH];
+static adcsample_t sampleBuffer[ADC_TOTAL_CHANNELS * ADC_BUFFER_DEPTH];
// Initialize to max number of ADCs, set to empty object to initialize all to false.
static bool adcInitialized[ADC_COUNT] = {};
@@ -116,7 +137,7 @@ static bool adcInitialized[ADC_COUNT] = {};
// TODO: add back TR handling???
static ADCConversionGroup adcConversionGroup = {
.circular = FALSE,
- .num_channels = (uint16_t)(ADC_NUM_CHANNELS),
+ .num_channels = (uint16_t)(ADC_TOTAL_CHANNELS),
#if defined(USE_ADCV1)
.cfgr1 = ADC_CFGR1_CONT | ADC_RESOLUTION,
.smpr = ADC_SAMPLING_RATE,
@@ -240,6 +261,74 @@ __attribute__((weak)) adc_mux pinToMux(pin_t pin) {
case C5: return TO_MUX( ADC_CHANNEL_IN15, 0 );
// STM32F103x[C-G] in 144-pin packages also have analog inputs on F6...F10, but they are on ADC3, and the
// ChibiOS ADC driver for STM32F1xx currently supports only ADC1, therefore these pins are not usable.
+#elif defined(STM32L4XX)
+ case A0: return TO_MUX( ADC_CHANNEL_IN5, 0 ); // Can also be ADC2 in some cases
+ case A1: return TO_MUX( ADC_CHANNEL_IN6, 0 ); // Can also be ADC2 in some cases
+ case A2: return TO_MUX( ADC_CHANNEL_IN7, 0 ); // Can also be ADC2
+ case A3: return TO_MUX( ADC_CHANNEL_IN8, 0 ); // Can also be ADC2
+ case A4: return TO_MUX( ADC_CHANNEL_IN9, 0 ); // Can also be ADC2
+ case A5: return TO_MUX( ADC_CHANNEL_IN10, 0 ); // Can also be ADC2
+ case A6: return TO_MUX( ADC_CHANNEL_IN11, 0 ); // Can also be ADC2
+ case A7: return TO_MUX( ADC_CHANNEL_IN12, 0 ); // Can also be ADC2
+ case B0: return TO_MUX( ADC_CHANNEL_IN15, 0 ); // Can also be ADC2
+ case B1: return TO_MUX( ADC_CHANNEL_IN16, 0 ); // Can also be ADC2
+ case C0: return TO_MUX( ADC_CHANNEL_IN1, 0 ); // Can also be ADC2 or ADC3
+ case C1: return TO_MUX( ADC_CHANNEL_IN2, 0 ); // Can also be ADC2 or ADC3
+ case C2: return TO_MUX( ADC_CHANNEL_IN3, 0 ); // Can also be ADC2 or ADC3
+ case C3: return TO_MUX( ADC_CHANNEL_IN4, 0 ); // Can also be ADC2 or ADC3
+ case C4: return TO_MUX( ADC_CHANNEL_IN13, 0 ); // Can also be ADC2
+ case C5: return TO_MUX( ADC_CHANNEL_IN14, 0 ); // Can also be ADC2
+# if STM32_HAS_GPIOF && STM32_ADC_USE_ADC3
+ case F3: return TO_MUX( ADC_CHANNEL_IN6, 2 );
+ case F4: return TO_MUX( ADC_CHANNEL_IN7, 2 );
+ case F5: return TO_MUX( ADC_CHANNEL_IN8, 2 );
+ case F6: return TO_MUX( ADC_CHANNEL_IN9, 2 );
+ case F7: return TO_MUX( ADC_CHANNEL_IN10, 2 );
+ case F8: return TO_MUX( ADC_CHANNEL_IN11, 2 );
+ case F9: return TO_MUX( ADC_CHANNEL_IN12, 2 );
+ case F10: return TO_MUX( ADC_CHANNEL_IN13, 2 );
+# endif
+#elif defined(STM32G4XX)
+ case A0: return TO_MUX( ADC_CHANNEL_IN1, 0 ); // Can also be ADC2
+ case A1: return TO_MUX( ADC_CHANNEL_IN2, 0 ); // Can also be ADC2
+ case A2: return TO_MUX( ADC_CHANNEL_IN3, 0 );
+ case A3: return TO_MUX( ADC_CHANNEL_IN4, 0 );
+ case A4: return TO_MUX( ADC_CHANNEL_IN17, 1 );
+ case A5: return TO_MUX( ADC_CHANNEL_IN13, 1 );
+ case A6: return TO_MUX( ADC_CHANNEL_IN3, 1 );
+ case A7: return TO_MUX( ADC_CHANNEL_IN4, 1 );
+ case B0: return TO_MUX( ADC_CHANNEL_IN15, 0 ); // Can also be ADC3
+ case B1: return TO_MUX( ADC_CHANNEL_IN12, 0 ); // Can also be ADC3
+ case B2: return TO_MUX( ADC_CHANNEL_IN12, 1 );
+ case B11: return TO_MUX( ADC_CHANNEL_IN14, 0 ); // Can also be ADC2
+ case B12: return TO_MUX( ADC_CHANNEL_IN11, 0 ); // Can also be ADC4
+ case B13: return TO_MUX( ADC_CHANNEL_IN5, 2 );
+ case B14: return TO_MUX( ADC_CHANNEL_IN5, 0 ); // Can also be ADC4
+ case B15: return TO_MUX( ADC_CHANNEL_IN15, 1 ); // Can also be ADC4
+ case C0: return TO_MUX( ADC_CHANNEL_IN6, 0 ); // Can also be ADC2
+ case C1: return TO_MUX( ADC_CHANNEL_IN7, 0 ); // Can also be ADC2
+ case C2: return TO_MUX( ADC_CHANNEL_IN8, 0 ); // Can also be ADC2
+ case C3: return TO_MUX( ADC_CHANNEL_IN9, 0 ); // Can also be ADC2
+ case C4: return TO_MUX( ADC_CHANNEL_IN5, 1 );
+ case C5: return TO_MUX( ADC_CHANNEL_IN11, 1 );
+ case D8: return TO_MUX( ADC_CHANNEL_IN12, 3 );
+ case D9: return TO_MUX( ADC_CHANNEL_IN13, 3 );
+ case D10: return TO_MUX( ADC_CHANNEL_IN7, 2 ); // Can also be ADC4
+ case D11: return TO_MUX( ADC_CHANNEL_IN8, 2 ); // Can also be ADC4
+ case D12: return TO_MUX( ADC_CHANNEL_IN9, 2 ); // Can also be ADC4
+ case D13: return TO_MUX( ADC_CHANNEL_IN10, 2 ); // Can also be ADC4
+ case D14: return TO_MUX( ADC_CHANNEL_IN11, 2 ); // Can also be ADC4
+ case E5: return TO_MUX( ADC_CHANNEL_IN2, 3 );
+ case E7: return TO_MUX( ADC_CHANNEL_IN4, 2 );
+ case E8: return TO_MUX( ADC_CHANNEL_IN6, 2 ); // Can also be ADC4
+ case E9: return TO_MUX( ADC_CHANNEL_IN2, 2 );
+ case E10: return TO_MUX( ADC_CHANNEL_IN14, 2 ); // Can also be ADC4
+ case E11: return TO_MUX( ADC_CHANNEL_IN15, 2 ); // Can also be ADC4
+ case E12: return TO_MUX( ADC_CHANNEL_IN16, 2 ); // Can also be ADC4
+ case E13: return TO_MUX( ADC_CHANNEL_IN3, 2 );
+ case E14: return TO_MUX( ADC_CHANNEL_IN1, 3 );
+ case F0: return TO_MUX( ADC_CHANNEL_IN10, 0 );
+ case F1: return TO_MUX( ADC_CHANNEL_IN10, 1 );
#elif defined(RP2040)
case 26U: return TO_MUX(0, 0);
case 27U: return TO_MUX(1, 0);
@@ -306,7 +395,11 @@ int16_t adc_read(adc_mux mux) {
#elif defined(RP2040)
adcConversionGroup.channel_mask = 1 << mux.input;
#else
- adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(mux.input);
+ adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(mux.input)
+# if ADC_DUMMY_CONVERSIONS_AT_START >= 1
+ | ADC_SQR1_SQ2_N(mux.input)
+# endif
+ ;
#endif
ADCDriver* targetDriver = intToADCDriver(mux.adc);
@@ -321,9 +414,9 @@ int16_t adc_read(adc_mux mux) {
#if defined(USE_ADCV2) || defined(RP2040)
// fake 12-bit -> N-bit scale
- return (*sampleBuffer) >> (12 - ADC_RESOLUTION);
+ return (sampleBuffer[ADC_DUMMY_CONVERSIONS_AT_START]) >> (12 - ADC_RESOLUTION);
#else
// already handled as part of adcConvert
- return *sampleBuffer;
+ return sampleBuffer[ADC_DUMMY_CONVERSIONS_AT_START];
#endif
}
diff --git a/platforms/chibios/drivers/audio_dac.h b/platforms/chibios/drivers/audio_dac.h
index 07cd622ead..2f62d12934 100644
--- a/platforms/chibios/drivers/audio_dac.h
+++ b/platforms/chibios/drivers/audio_dac.h
@@ -24,11 +24,6 @@
#endif
/**
- * Size of the dac_buffer arrays. All must be the same size.
- */
-#define AUDIO_DAC_BUFFER_SIZE 256U
-
-/**
* Highest value allowed sample value.
* since the DAC is limited to 12 bit, the absolute max is 0xfff = 4095U;
@@ -97,6 +92,35 @@
#endif
/**
+ * Size of the dac_buffer array. This controls the length of the runtime buffer
+ * which accumulates the data to be sent to the DAC every few milliseconds, and
+ * it does not need to correspond to the length of the wavetable for the chosen
+ * waveform defined by AUDIO_DAC_SAMPLE_WAVEFORM_* in the additive DAC driver.
+ * By default, this is set to be as close to 3.3 ms as possible, giving 300 DAC
+ * interrupts per second. Any smaller and the interrupt load gets too heavy and
+ * this results in crackling due to buffer underrun in the additive DAC driver;
+ * too large and the RAM (additive driver) or flash (basic driver) usage may be
+ * too high, causing build failures, and matrix scanning is liable to have long
+ * periodic pauses that delay key presses or releases or fully lose short taps.
+ * Large buffers also cause notes to take longer to stop after they should from
+ * music mode or MIDI input.
+ * This should be a power of 2 for maximum compatibility.
+ */
+#ifndef AUDIO_DAC_BUFFER_SIZE
+# if AUDIO_DAC_SAMPLE_RATE < 5100U
+# define AUDIO_DAC_BUFFER_SIZE 16U
+# elif AUDIO_DAC_SAMPLE_RATE < 9900U
+# define AUDIO_DAC_BUFFER_SIZE 32U
+# elif AUDIO_DAC_SAMPLE_RATE < 19500U
+# define AUDIO_DAC_BUFFER_SIZE 64U
+# elif AUDIO_DAC_SAMPLE_RATE < 38700U
+# define AUDIO_DAC_BUFFER_SIZE 128U
+# else
+# define AUDIO_DAC_BUFFER_SIZE 256U
+# endif
+#endif
+
+/**
* The number of tones that can be played simultaneously. If too high a value
* is used here, the keyboard will freeze and glitch-out when that many tones
* are being played.
diff --git a/platforms/chibios/drivers/audio_dac_additive.c b/platforms/chibios/drivers/audio_dac_additive.c
index 26e044b048..d6fde42b68 100644
--- a/platforms/chibios/drivers/audio_dac_additive.c
+++ b/platforms/chibios/drivers/audio_dac_additive.c
@@ -53,35 +53,39 @@
#ifdef AUDIO_DAC_SAMPLE_WAVEFORM_SINE
/* one full sine wave over [0,2*pi], but shifted up one amplitude and left pi/4; for the samples to start at 0
*/
-static const dacsample_t dac_buffer_sine[AUDIO_DAC_BUFFER_SIZE] = {
+static const dacsample_t dac_buffer_sine[] = {
// 256 values, max 4095
0x0, 0x1, 0x2, 0x6, 0xa, 0xf, 0x16, 0x1e, 0x27, 0x32, 0x3d, 0x4a, 0x58, 0x67, 0x78, 0x89, 0x9c, 0xb0, 0xc5, 0xdb, 0xf2, 0x10a, 0x123, 0x13e, 0x159, 0x175, 0x193, 0x1b1, 0x1d1, 0x1f1, 0x212, 0x235, 0x258, 0x27c, 0x2a0, 0x2c6, 0x2ed, 0x314, 0x33c, 0x365, 0x38e, 0x3b8, 0x3e3, 0x40e, 0x43a, 0x467, 0x494, 0x4c2, 0x4f0, 0x51f, 0x54e, 0x57d, 0x5ad, 0x5dd, 0x60e, 0x63f, 0x670, 0x6a1, 0x6d3, 0x705, 0x737, 0x769, 0x79b, 0x7cd, 0x800, 0x832, 0x864, 0x896, 0x8c8, 0x8fa, 0x92c, 0x95e, 0x98f, 0x9c0, 0x9f1, 0xa22, 0xa52, 0xa82, 0xab1, 0xae0, 0xb0f, 0xb3d, 0xb6b, 0xb98, 0xbc5, 0xbf1, 0xc1c, 0xc47, 0xc71, 0xc9a, 0xcc3, 0xceb, 0xd12, 0xd39, 0xd5f, 0xd83, 0xda7, 0xdca, 0xded, 0xe0e, 0xe2e, 0xe4e, 0xe6c, 0xe8a, 0xea6, 0xec1, 0xedc, 0xef5, 0xf0d, 0xf24, 0xf3a, 0xf4f, 0xf63, 0xf76, 0xf87, 0xf98, 0xfa7, 0xfb5, 0xfc2, 0xfcd, 0xfd8, 0xfe1, 0xfe9, 0xff0, 0xff5, 0xff9, 0xffd, 0xffe,
- 0xfff, 0xffe, 0xffd, 0xff9, 0xff5, 0xff0, 0xfe9, 0xfe1, 0xfd8, 0xfcd, 0xfc2, 0xfb5, 0xfa7, 0xf98, 0xf87, 0xf76, 0xf63, 0xf4f, 0xf3a, 0xf24, 0xf0d, 0xef5, 0xedc, 0xec1, 0xea6, 0xe8a, 0xe6c, 0xe4e, 0xe2e, 0xe0e, 0xded, 0xdca, 0xda7, 0xd83, 0xd5f, 0xd39, 0xd12, 0xceb, 0xcc3, 0xc9a, 0xc71, 0xc47, 0xc1c, 0xbf1, 0xbc5, 0xb98, 0xb6b, 0xb3d, 0xb0f, 0xae0, 0xab1, 0xa82, 0xa52, 0xa22, 0x9f1, 0x9c0, 0x98f, 0x95e, 0x92c, 0x8fa, 0x8c8, 0x896, 0x864, 0x832, 0x800, 0x7cd, 0x79b, 0x769, 0x737, 0x705, 0x6d3, 0x6a1, 0x670, 0x63f, 0x60e, 0x5dd, 0x5ad, 0x57d, 0x54e, 0x51f, 0x4f0, 0x4c2, 0x494, 0x467, 0x43a, 0x40e, 0x3e3, 0x3b8, 0x38e, 0x365, 0x33c, 0x314, 0x2ed, 0x2c6, 0x2a0, 0x27c, 0x258, 0x235, 0x212, 0x1f1, 0x1d1, 0x1b1, 0x193, 0x175, 0x159, 0x13e, 0x123, 0x10a, 0xf2, 0xdb, 0xc5, 0xb0, 0x9c, 0x89, 0x78, 0x67, 0x58, 0x4a, 0x3d, 0x32, 0x27, 0x1e, 0x16, 0xf, 0xa, 0x6, 0x2, 0x1};
+ 0xfff, 0xffe, 0xffd, 0xff9, 0xff5, 0xff0, 0xfe9, 0xfe1, 0xfd8, 0xfcd, 0xfc2, 0xfb5, 0xfa7, 0xf98, 0xf87, 0xf76, 0xf63, 0xf4f, 0xf3a, 0xf24, 0xf0d, 0xef5, 0xedc, 0xec1, 0xea6, 0xe8a, 0xe6c, 0xe4e, 0xe2e, 0xe0e, 0xded, 0xdca, 0xda7, 0xd83, 0xd5f, 0xd39, 0xd12, 0xceb, 0xcc3, 0xc9a, 0xc71, 0xc47, 0xc1c, 0xbf1, 0xbc5, 0xb98, 0xb6b, 0xb3d, 0xb0f, 0xae0, 0xab1, 0xa82, 0xa52, 0xa22, 0x9f1, 0x9c0, 0x98f, 0x95e, 0x92c, 0x8fa, 0x8c8, 0x896, 0x864, 0x832, 0x800, 0x7cd, 0x79b, 0x769, 0x737, 0x705, 0x6d3, 0x6a1, 0x670, 0x63f, 0x60e, 0x5dd, 0x5ad, 0x57d, 0x54e, 0x51f, 0x4f0, 0x4c2, 0x494, 0x467, 0x43a, 0x40e, 0x3e3, 0x3b8, 0x38e, 0x365, 0x33c, 0x314, 0x2ed, 0x2c6, 0x2a0, 0x27c, 0x258, 0x235, 0x212, 0x1f1, 0x1d1, 0x1b1, 0x193, 0x175, 0x159, 0x13e, 0x123, 0x10a, 0xf2, 0xdb, 0xc5, 0xb0, 0x9c, 0x89, 0x78, 0x67, 0x58, 0x4a, 0x3d, 0x32, 0x27, 0x1e, 0x16, 0xf, 0xa, 0x6, 0x2, 0x1,
+};
#endif // AUDIO_DAC_SAMPLE_WAVEFORM_SINE
#ifdef AUDIO_DAC_SAMPLE_WAVEFORM_TRIANGLE
-static const dacsample_t dac_buffer_triangle[AUDIO_DAC_BUFFER_SIZE] = {
+static const dacsample_t dac_buffer_triangle[] = {
// 256 values, max 4095
0x0, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x100, 0x120, 0x140, 0x160, 0x180, 0x1a0, 0x1c0, 0x1e0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0x3c0, 0x3e0, 0x400, 0x420, 0x440, 0x460, 0x480, 0x4a0, 0x4c0, 0x4e0, 0x500, 0x520, 0x540, 0x560, 0x580, 0x5a0, 0x5c0, 0x5e0, 0x600, 0x620, 0x640, 0x660, 0x680, 0x6a0, 0x6c0, 0x6e0, 0x700, 0x720, 0x740, 0x760, 0x780, 0x7a0, 0x7c0, 0x7e0, 0x800, 0x81f, 0x83f, 0x85f, 0x87f, 0x89f, 0x8bf, 0x8df, 0x8ff, 0x91f, 0x93f, 0x95f, 0x97f, 0x99f, 0x9bf, 0x9df, 0x9ff, 0xa1f, 0xa3f, 0xa5f, 0xa7f, 0xa9f, 0xabf, 0xadf, 0xaff, 0xb1f, 0xb3f, 0xb5f, 0xb7f, 0xb9f, 0xbbf, 0xbdf, 0xbff, 0xc1f, 0xc3f, 0xc5f, 0xc7f, 0xc9f, 0xcbf, 0xcdf, 0xcff, 0xd1f, 0xd3f, 0xd5f, 0xd7f, 0xd9f, 0xdbf, 0xddf, 0xdff, 0xe1f, 0xe3f, 0xe5f, 0xe7f, 0xe9f, 0xebf, 0xedf, 0xeff, 0xf1f, 0xf3f, 0xf5f, 0xf7f, 0xf9f, 0xfbf, 0xfdf,
- 0xfff, 0xfdf, 0xfbf, 0xf9f, 0xf7f, 0xf5f, 0xf3f, 0xf1f, 0xeff, 0xedf, 0xebf, 0xe9f, 0xe7f, 0xe5f, 0xe3f, 0xe1f, 0xdff, 0xddf, 0xdbf, 0xd9f, 0xd7f, 0xd5f, 0xd3f, 0xd1f, 0xcff, 0xcdf, 0xcbf, 0xc9f, 0xc7f, 0xc5f, 0xc3f, 0xc1f, 0xbff, 0xbdf, 0xbbf, 0xb9f, 0xb7f, 0xb5f, 0xb3f, 0xb1f, 0xaff, 0xadf, 0xabf, 0xa9f, 0xa7f, 0xa5f, 0xa3f, 0xa1f, 0x9ff, 0x9df, 0x9bf, 0x99f, 0x97f, 0x95f, 0x93f, 0x91f, 0x8ff, 0x8df, 0x8bf, 0x89f, 0x87f, 0x85f, 0x83f, 0x81f, 0x800, 0x7e0, 0x7c0, 0x7a0, 0x780, 0x760, 0x740, 0x720, 0x700, 0x6e0, 0x6c0, 0x6a0, 0x680, 0x660, 0x640, 0x620, 0x600, 0x5e0, 0x5c0, 0x5a0, 0x580, 0x560, 0x540, 0x520, 0x500, 0x4e0, 0x4c0, 0x4a0, 0x480, 0x460, 0x440, 0x420, 0x400, 0x3e0, 0x3c0, 0x3a0, 0x380, 0x360, 0x340, 0x320, 0x300, 0x2e0, 0x2c0, 0x2a0, 0x280, 0x260, 0x240, 0x220, 0x200, 0x1e0, 0x1c0, 0x1a0, 0x180, 0x160, 0x140, 0x120, 0x100, 0xe0, 0xc0, 0xa0, 0x80, 0x60, 0x40, 0x20};
+ 0xfff, 0xfdf, 0xfbf, 0xf9f, 0xf7f, 0xf5f, 0xf3f, 0xf1f, 0xeff, 0xedf, 0xebf, 0xe9f, 0xe7f, 0xe5f, 0xe3f, 0xe1f, 0xdff, 0xddf, 0xdbf, 0xd9f, 0xd7f, 0xd5f, 0xd3f, 0xd1f, 0xcff, 0xcdf, 0xcbf, 0xc9f, 0xc7f, 0xc5f, 0xc3f, 0xc1f, 0xbff, 0xbdf, 0xbbf, 0xb9f, 0xb7f, 0xb5f, 0xb3f, 0xb1f, 0xaff, 0xadf, 0xabf, 0xa9f, 0xa7f, 0xa5f, 0xa3f, 0xa1f, 0x9ff, 0x9df, 0x9bf, 0x99f, 0x97f, 0x95f, 0x93f, 0x91f, 0x8ff, 0x8df, 0x8bf, 0x89f, 0x87f, 0x85f, 0x83f, 0x81f, 0x800, 0x7e0, 0x7c0, 0x7a0, 0x780, 0x760, 0x740, 0x720, 0x700, 0x6e0, 0x6c0, 0x6a0, 0x680, 0x660, 0x640, 0x620, 0x600, 0x5e0, 0x5c0, 0x5a0, 0x580, 0x560, 0x540, 0x520, 0x500, 0x4e0, 0x4c0, 0x4a0, 0x480, 0x460, 0x440, 0x420, 0x400, 0x3e0, 0x3c0, 0x3a0, 0x380, 0x360, 0x340, 0x320, 0x300, 0x2e0, 0x2c0, 0x2a0, 0x280, 0x260, 0x240, 0x220, 0x200, 0x1e0, 0x1c0, 0x1a0, 0x180, 0x160, 0x140, 0x120, 0x100, 0xe0, 0xc0, 0xa0, 0x80, 0x60, 0x40, 0x20,
+};
#endif // AUDIO_DAC_SAMPLE_WAVEFORM_TRIANGLE
#ifdef AUDIO_DAC_SAMPLE_WAVEFORM_SQUARE
-static const dacsample_t dac_buffer_square[AUDIO_DAC_BUFFER_SIZE] = {
- [0 ... AUDIO_DAC_BUFFER_SIZE / 2 - 1] = AUDIO_DAC_OFF_VALUE, // first and
- [AUDIO_DAC_BUFFER_SIZE / 2 ... AUDIO_DAC_BUFFER_SIZE - 1] = AUDIO_DAC_SAMPLE_MAX, // second half
+static const dacsample_t dac_buffer_square[] = {
+ AUDIO_DAC_OFF_VALUE, // first and
+ AUDIO_DAC_SAMPLE_MAX, // second steps
};
#endif // AUDIO_DAC_SAMPLE_WAVEFORM_SQUARE
/*
// four steps: 0, 1/3, 2/3 and 1
-static const dacsample_t dac_buffer_staircase[AUDIO_DAC_BUFFER_SIZE] = {
- [0 ... AUDIO_DAC_BUFFER_SIZE/3 -1 ] = 0,
- [AUDIO_DAC_BUFFER_SIZE / 4 ... AUDIO_DAC_BUFFER_SIZE / 2 -1 ] = AUDIO_DAC_SAMPLE_MAX / 3,
- [AUDIO_DAC_BUFFER_SIZE / 2 ... 3 * AUDIO_DAC_BUFFER_SIZE / 4 -1 ] = 2 * AUDIO_DAC_SAMPLE_MAX / 3,
- [3 * AUDIO_DAC_BUFFER_SIZE / 4 ... AUDIO_DAC_BUFFER_SIZE -1 ] = AUDIO_DAC_SAMPLE_MAX,
+static const dacsample_t dac_buffer_staircase[] = {
+ 0,
+ AUDIO_DAC_SAMPLE_MAX / 3,
+ 2 * AUDIO_DAC_SAMPLE_MAX / 3,
+ AUDIO_DAC_SAMPLE_MAX,
}
*/
#ifdef AUDIO_DAC_SAMPLE_WAVEFORM_TRAPEZOID
-static const dacsample_t dac_buffer_trapezoid[AUDIO_DAC_BUFFER_SIZE] = {0x0, 0x1f, 0x7f, 0xdf, 0x13f, 0x19f, 0x1ff, 0x25f, 0x2bf, 0x31f, 0x37f, 0x3df, 0x43f, 0x49f, 0x4ff, 0x55f, 0x5bf, 0x61f, 0x67f, 0x6df, 0x73f, 0x79f, 0x7ff, 0x85f, 0x8bf, 0x91f, 0x97f, 0x9df, 0xa3f, 0xa9f, 0xaff, 0xb5f, 0xbbf, 0xc1f, 0xc7f, 0xcdf, 0xd3f, 0xd9f, 0xdff, 0xe5f, 0xebf, 0xf1f, 0xf7f, 0xfdf, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
- 0xfff, 0xfdf, 0xf7f, 0xf1f, 0xebf, 0xe5f, 0xdff, 0xd9f, 0xd3f, 0xcdf, 0xc7f, 0xc1f, 0xbbf, 0xb5f, 0xaff, 0xa9f, 0xa3f, 0x9df, 0x97f, 0x91f, 0x8bf, 0x85f, 0x7ff, 0x79f, 0x73f, 0x6df, 0x67f, 0x61f, 0x5bf, 0x55f, 0x4ff, 0x49f, 0x43f, 0x3df, 0x37f, 0x31f, 0x2bf, 0x25f, 0x1ff, 0x19f, 0x13f, 0xdf, 0x7f, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+static const dacsample_t dac_buffer_trapezoid[] = {
+ 0x0, 0x1f, 0x7f, 0xdf, 0x13f, 0x19f, 0x1ff, 0x25f, 0x2bf, 0x31f, 0x37f, 0x3df, 0x43f, 0x49f, 0x4ff, 0x55f, 0x5bf, 0x61f, 0x67f, 0x6df, 0x73f, 0x79f, 0x7ff, 0x85f, 0x8bf, 0x91f, 0x97f, 0x9df, 0xa3f, 0xa9f, 0xaff, 0xb5f, 0xbbf, 0xc1f, 0xc7f, 0xcdf, 0xd3f, 0xd9f, 0xdff, 0xe5f, 0xebf, 0xf1f, 0xf7f, 0xfdf, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
+ 0xfff, 0xfdf, 0xf7f, 0xf1f, 0xebf, 0xe5f, 0xdff, 0xd9f, 0xd3f, 0xcdf, 0xc7f, 0xc1f, 0xbbf, 0xb5f, 0xaff, 0xa9f, 0xa3f, 0x9df, 0x97f, 0x91f, 0x8bf, 0x85f, 0x7ff, 0x79f, 0x73f, 0x6df, 0x67f, 0x61f, 0x5bf, 0x55f, 0x4ff, 0x49f, 0x43f, 0x3df, 0x37f, 0x31f, 0x2bf, 0x25f, 0x1ff, 0x19f, 0x13f, 0xdf, 0x7f, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+};
#endif // AUDIO_DAC_SAMPLE_WAVEFORM_TRAPEZOID
static dacsample_t dac_buffer[AUDIO_DAC_BUFFER_SIZE];
@@ -124,20 +128,30 @@ __attribute__((weak)) uint16_t dac_value_generate(void) {
uint_fast16_t value = 0;
float frequency = 0.0f;
+#if defined(AUDIO_DAC_SAMPLE_WAVEFORM_SINE)
+ const size_t wavetable_length = ARRAY_SIZE(dac_buffer_sine);
+#elif defined(AUDIO_DAC_SAMPLE_WAVEFORM_TRIANGLE)
+ const size_t wavetable_length = ARRAY_SIZE(dac_buffer_triangle);
+#elif defined(AUDIO_DAC_SAMPLE_WAVEFORM_TRAPEZOID)
+ const size_t wavetable_length = ARRAY_SIZE(dac_buffer_trapezoid);
+#elif defined(AUDIO_DAC_SAMPLE_WAVEFORM_SQUARE)
+ const size_t wavetable_length = ARRAY_SIZE(dac_buffer_square);
+#endif
+
for (size_t i = 0; i < active_tones_snapshot_length; i++) {
/* Note: a user implementation does not have to rely on the active_tones_snapshot, but
* could directly query the active frequencies through audio_get_processed_frequency */
frequency = active_tones_snapshot[i];
float new_dac_if = dac_if[i];
- new_dac_if += frequency * ((float)AUDIO_DAC_BUFFER_SIZE / AUDIO_DAC_SAMPLE_RATE * 2.0f / 3.0f);
+ new_dac_if += frequency * ((float)wavetable_length / AUDIO_DAC_SAMPLE_RATE * 2.0f / 3.0f);
/*Note: the 2/3 are necessary to get the correct frequencies on the
* DAC output (as measured with an oscilloscope), since the gpt
* timer runs with 3*AUDIO_DAC_SAMPLE_RATE; and the DAC callback
* is called twice per conversion.*/
- while (new_dac_if >= AUDIO_DAC_BUFFER_SIZE)
- new_dac_if -= AUDIO_DAC_BUFFER_SIZE;
+ while (new_dac_if >= wavetable_length)
+ new_dac_if -= wavetable_length;
dac_if[i] = new_dac_if;
// Wavetable generation/lookup
diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c
index 6e254578d1..e901f3e0c4 100644
--- a/quantum/dip_switch.c
+++ b/quantum/dip_switch.c
@@ -19,8 +19,6 @@
#include <string.h> // for memcpy
#include "dip_switch.h"
-#include "gpio.h"
-#include "util.h"
#ifdef SPLIT_KEYBOARD
# include "split_common/split_util.h"
@@ -35,24 +33,17 @@
#endif
#ifdef DIP_SWITCH_PINS
-# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad))
static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
#endif
#ifdef DIP_SWITCH_MATRIX_GRID
-typedef struct matrix_index_t {
- uint8_t row;
- uint8_t col;
-} matrix_index_t;
-
-# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad))
-static matrix_index_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID;
-extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw);
-static uint16_t scan_count;
+static matrix_intersection_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID;
+extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw);
+static uint16_t scan_count;
#endif /* DIP_SWITCH_MATRIX_GRID */
-static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
-static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
+static bool dip_switch_state[NUM_DIP_SWITCHES] = {0};
+static bool last_dip_switch_state[NUM_DIP_SWITCHES] = {0};
__attribute__((weak)) bool dip_switch_update_user(uint8_t index, bool active) {
return true;
@@ -70,17 +61,39 @@ __attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) {
return dip_switch_update_mask_user(state);
}
+#ifdef DIP_SWITCH_MAP_ENABLE
+# include "keymap_introspection.h"
+# include "action.h"
+
+# ifndef DIP_SWITCH_MAP_KEY_DELAY
+# define DIP_SWITCH_MAP_KEY_DELAY TAP_CODE_DELAY
+# endif
+
+static void dip_switch_exec_mapping(uint8_t index, bool on) {
+ // The delays below cater for Windows and its wonderful requirements.
+ action_exec(on ? MAKE_DIPSWITCH_ON_EVENT(index, true) : MAKE_DIPSWITCH_OFF_EVENT(index, true));
+# if DIP_SWITCH_MAP_KEY_DELAY > 0
+ wait_ms(DIP_SWITCH_MAP_KEY_DELAY);
+# endif // DIP_SWITCH_MAP_KEY_DELAY > 0
+
+ action_exec(on ? MAKE_DIPSWITCH_ON_EVENT(index, false) : MAKE_DIPSWITCH_OFF_EVENT(index, false));
+# if DIP_SWITCH_MAP_KEY_DELAY > 0
+ wait_ms(DIP_SWITCH_MAP_KEY_DELAY);
+# endif // DIP_SWITCH_MAP_KEY_DELAY > 0
+}
+#endif // DIP_SWITCH_MAP_ENABLE
+
void dip_switch_init(void) {
#ifdef DIP_SWITCH_PINS
# if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
if (!isLeftHand) {
const pin_t dip_switch_pad_right[] = DIP_SWITCH_PINS_RIGHT;
- for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) {
dip_switch_pad[i] = dip_switch_pad_right[i];
}
}
# endif
- for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) {
setPinInputHigh(dip_switch_pad[i]);
}
dip_switch_read(true);
@@ -108,7 +121,7 @@ void dip_switch_read(bool forced) {
}
#endif
- for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) {
#ifdef DIP_SWITCH_PINS
dip_switch_state[i] = !readPin(dip_switch_pad[i]);
#endif
@@ -118,11 +131,21 @@ void dip_switch_read(bool forced) {
dip_switch_mask |= dip_switch_state[i] << i;
if (last_dip_switch_state[i] != dip_switch_state[i] || forced) {
has_dip_state_changed = true;
+#ifndef DIP_SWITCH_MAP_ENABLE
dip_switch_update_kb(i, dip_switch_state[i]);
+#else
+ dip_switch_exec_mapping(i, dip_switch_state[i]);
+#endif
}
}
if (has_dip_state_changed) {
+#ifndef DIP_SWITCH_MAP_ENABLE
dip_switch_update_mask_kb(dip_switch_mask);
+#endif
memcpy(last_dip_switch_state, dip_switch_state, sizeof(dip_switch_state));
}
}
+
+void dip_switch_task(void) {
+ dip_switch_read(false);
+}
diff --git a/quantum/dip_switch.h b/quantum/dip_switch.h
index 6e79dcb0bf..7629859359 100644
--- a/quantum/dip_switch.h
+++ b/quantum/dip_switch.h
@@ -20,11 +20,36 @@
#include <stdbool.h>
#include <stdint.h>
+#include "gpio.h"
+#include "util.h"
+
+#if defined(DIP_SWITCH_PINS)
+# define NUM_DIP_SWITCHES ARRAY_SIZE(((pin_t[])DIP_SWITCH_PINS))
+#elif defined(DIP_SWITCH_MATRIX_GRID)
+typedef struct matrix_intersection_t {
+ uint8_t row;
+ uint8_t col;
+} matrix_intersection_t;
+# define NUM_DIP_SWITCHES ARRAY_SIZE(((matrix_intersection_t[])DIP_SWITCH_MATRIX_GRID))
+#endif
+
+#ifndef NUM_DIP_SWITCHES
+# define NUM_DIP_SWITCHES 0
+#endif
bool dip_switch_update_kb(uint8_t index, bool active);
bool dip_switch_update_user(uint8_t index, bool active);
bool dip_switch_update_mask_user(uint32_t state);
bool dip_switch_update_mask_kb(uint32_t state);
-void dip_switch_init(void);
void dip_switch_read(bool forced);
+
+void dip_switch_init(void);
+void dip_switch_task(void);
+
+#ifdef DIP_SWITCH_MAP_ENABLE
+# define NUM_DIP_STATES 2
+# define DIP_SWITCH_OFF_ON(off, on) \
+ { (off), (on) }
+extern const uint16_t dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES];
+#endif // DIP_SWITCH_MAP_ENABLE
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index 86a1a9fea3..b5fa1a6e2e 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -615,7 +615,7 @@ void quantum_task(void) {
#endif
#ifdef DIP_SWITCH_ENABLE
- dip_switch_read(false);
+ dip_switch_task();
#endif
#ifdef AUTO_SHIFT_ENABLE
diff --git a/quantum/keyboard.h b/quantum/keyboard.h
index 5ea57815a7..0f39fde682 100644
--- a/quantum/keyboard.h
+++ b/quantum/keyboard.h
@@ -32,7 +32,7 @@ typedef struct {
uint8_t row;
} keypos_t;
-typedef enum keyevent_type_t { TICK_EVENT = 0, KEY_EVENT = 1, ENCODER_CW_EVENT = 2, ENCODER_CCW_EVENT = 3, COMBO_EVENT = 4 } keyevent_type_t;
+typedef enum keyevent_type_t { TICK_EVENT = 0, KEY_EVENT = 1, ENCODER_CW_EVENT = 2, ENCODER_CCW_EVENT = 3, COMBO_EVENT = 4, DIP_SWITCH_ON_EVENT = 5, DIP_SWITCH_OFF_EVENT = 6 } keyevent_type_t;
/* key event */
typedef struct {
@@ -48,6 +48,8 @@ typedef struct {
/* special keypos_t entries */
#define KEYLOC_ENCODER_CW 253
#define KEYLOC_ENCODER_CCW 252
+#define KEYLOC_DIP_SWITCH_ON 251
+#define KEYLOC_DIP_SWITCH_OFF 250
static inline bool IS_NOEVENT(const keyevent_t event) {
return event.type == TICK_EVENT;
@@ -64,6 +66,9 @@ static inline bool IS_COMBOEVENT(const keyevent_t event) {
static inline bool IS_ENCODEREVENT(const keyevent_t event) {
return event.type == ENCODER_CW_EVENT || event.type == ENCODER_CCW_EVENT;
}
+static inline bool IS_DIPSWITCHEVENT(const keyevent_t event) {
+ return event.type == DIP_SWITCH_ON_EVENT || event.type == DIP_SWITCH_OFF_EVENT;
+}
/* Common keypos_t object factory */
#define MAKE_KEYPOS(row_num, col_num) ((keypos_t){.row = (row_num), .col = (col_num)})
@@ -92,6 +97,12 @@ static inline bool IS_ENCODEREVENT(const keyevent_t event) {
# define MAKE_ENCODER_CCW_EVENT(enc_id, press) MAKE_EVENT(KEYLOC_ENCODER_CCW, (enc_id), (press), ENCODER_CCW_EVENT)
#endif // ENCODER_MAP_ENABLE
+#ifdef DIP_SWITCH_MAP_ENABLE
+/* Dip Switch events */
+# define MAKE_DIPSWITCH_ON_EVENT(switch_id, press) MAKE_EVENT(KEYLOC_DIP_SWITCH_ON, (switch_id), (press), DIP_SWITCH_ON_EVENT)
+# define MAKE_DIPSWITCH_OFF_EVENT(switch_id, press) MAKE_EVENT(KEYLOC_DIP_SWITCH_OFF, (switch_id), (press), DIP_SWITCH_OFF_EVENT)
+#endif // DIP_SWITCH_MAP_ENABLE
+
/* it runs once at early stage of startup before keyboard_init. */
void keyboard_setup(void);
/* it runs once after initializing host side protocol, debug and MCU peripherals. */
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 91e47a72ee..abdcd5c7ba 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -29,6 +29,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "encoder.h"
#endif
+#ifdef DIP_SWITCH_MAP_ENABLE
+# include "dip_switch.h"
+#endif
+
#ifdef BACKLIGHT_ENABLE
# include "backlight.h"
#endif
@@ -204,5 +208,13 @@ __attribute__((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key
return keycode_at_encodermap_location(layer, key.col, false);
}
#endif // ENCODER_MAP_ENABLE
+#ifdef DIP_SWITCH_MAP_ENABLE
+ else if (key.row == KEYLOC_DIP_SWITCH_ON && key.col < NUM_DIP_SWITCHES) {
+ return keycode_at_dip_switch_map_location(key.col, true);
+ } else if (key.row == KEYLOC_DIP_SWITCH_OFF && key.col < NUM_DIP_SWITCHES) {
+ return keycode_at_dip_switch_map_location(key.col, false);
+ }
+#endif // DIP_SWITCH_MAP_ENABLE
+
return KC_NO;
}
diff --git a/quantum/keymap_extras/keymap_spanish_latin_america.h b/quantum/keymap_extras/keymap_spanish_latin_america.h
new file mode 100644
index 0000000000..92921811b3
--- /dev/null
+++ b/quantum/keymap_extras/keymap_spanish_latin_america.h
@@ -0,0 +1,105 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+#include "keycodes.h"
+// clang-format off
+
+// Aliases
+#define ES_PIPE KC_GRV // |
+#define ES_1 KC_1 // 1
+#define ES_2 KC_2 // 2
+#define ES_3 KC_3 // 3
+#define ES_4 KC_4 // 4
+#define ES_5 KC_5 // 5
+#define ES_6 KC_6 // 6
+#define ES_7 KC_7 // 7
+#define ES_8 KC_8 // 8
+#define ES_9 KC_9 // 9
+#define ES_0 KC_0 // 0
+#define ES_QUOT KC_MINS // '
+#define ES_IQUE KC_EQL // ¿
+#define ES_Q KC_Q // Q
+#define ES_W KC_W // W
+#define ES_E KC_E // E
+#define ES_R KC_R // R
+#define ES_T KC_T // T
+#define ES_Y KC_Y // Y
+#define ES_U KC_U // U
+#define ES_I KC_I // I
+#define ES_O KC_O // O
+#define ES_P KC_P // P
+#define ES_ACUT KC_LBRC // ´ (dead)
+#define ES_PLUS KC_RBRC // +
+#define ES_A KC_A // A
+#define ES_S KC_S // S
+#define ES_D KC_D // D
+#define ES_F KC_F // F
+#define ES_G KC_G // G
+#define ES_H KC_H // H
+#define ES_J KC_J // J
+#define ES_K KC_K // K
+#define ES_L KC_L // L
+#define ES_NTIL KC_SCLN // Ñ
+#define ES_LCBR KC_QUOT // {
+#define ES_RCBR KC_NUHS // }
+#define ES_LABK KC_NUBS // <
+#define ES_Z KC_Z // Z
+#define ES_X KC_X // X
+#define ES_C KC_C // C
+#define ES_V KC_V // V
+#define ES_B KC_B // B
+#define ES_N KC_N // N
+#define ES_M KC_M // M
+#define ES_COMM KC_COMM // ,
+#define ES_DOT KC_DOT // .
+#define ES_MINS KC_SLSH // -
+#define ES_MORD S(ES_PIPE) // °
+#define ES_EXLM S(ES_1) // !
+#define ES_DQUO S(ES_2) // "
+#define ES_NUMB S(ES_3) // #
+#define ES_DLR S(ES_4) // $
+#define ES_PERC S(ES_5) // %
+#define ES_AMPR S(ES_6) // &
+#define ES_SLSH S(ES_7) // /
+#define ES_LPRN S(ES_8) // (
+#define ES_RPRN S(ES_9) // )
+#define ES_EQL S(ES_0) // =
+#define ES_QUES S(ES_QUOT) // ?
+#define ES_IEXL S(ES_IQUE) // ¡
+#define ES_DIAE S(ES_ACUT) // ¨ (dead)
+#define ES_ASTR S(ES_PLUS) // *
+#define ES_LBRC S(ES_LCBR) // [
+#define ES_RBRC S(ES_RCBR) // ]
+#define ES_RABK S(ES_LABK) // >
+#define ES_SCLN S(ES_COMM) // ;
+#define ES_COLN S(ES_DOT) // :
+#define ES_UNDS S(ES_MINS) // _
+#define ES_NOT ALGR(ES_PIPE) // ¬
+#define ES_BSLS ALGR(ES_QUOT) // (backslash)
+#define ES_AT ALGR(ES_Q) // @
+#define ES_TILD ALGR(ES_PLUS) // ~
+#define ES_CIRC ALGR(ES_LCBR) // ^
+
diff --git a/quantum/keymap_extras/sendstring_spanish_latin_america.h b/quantum/keymap_extras/sendstring_spanish_latin_america.h
new file mode 100644
index 0000000000..3bfdf7d5cb
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_spanish_latin_america.h
@@ -0,0 +1,120 @@
+/* Copyright 2023 Juan David Díaz
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for Latam Spanish layouts
+
+#pragma once
+
+#include "send_string.h"
+#include "keymap_spanish_latin_america.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 0, 1, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 1, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0)
+};
+
+const uint8_t ascii_to_dead_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_QUOT,
+ // ( ) * + , - . /
+ ES_8, ES_9, ES_PLUS, ES_PLUS, ES_COMM, ES_MINS, ES_DOT, ES_7,
+ // 0 1 2 3 4 5 6 7
+ ES_0, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_7,
+ // 8 9 : ; < = > ?
+ ES_8, ES_9, ES_DOT, ES_COMM, ES_LABK, ES_0, ES_LABK, ES_QUOT,
+ // @ A B C D E F G
+ ES_Q, ES_A, ES_B, ES_C, ES_D, ES_E, ES_F, ES_G,
+ // H I J K L M N O
+ ES_H, ES_I, ES_J, ES_K, ES_L, ES_M, ES_N, ES_O,
+ // P Q R S T U V W
+ ES_P, ES_Q, ES_R, ES_S, ES_T, ES_U, ES_V, ES_W,
+ // X Y Z [ \ ] ^ _
+ ES_X, ES_Y, ES_Z, ES_LCBR, ES_QUOT, ES_RCBR, ES_LCBR, ES_MINS,
+ // ` a b c d e f g
+ ES_RCBR, ES_A, ES_B, ES_C, ES_D, ES_E, ES_F, ES_G,
+ // h i j k l m n o
+ ES_H, ES_I, ES_J, ES_K, ES_L, ES_M, ES_N, ES_O,
+ // p q r s t u v w
+ ES_P, ES_Q, ES_R, ES_S, ES_T, ES_U, ES_V, ES_W,
+ // x y z { | } ~ DEL
+ ES_X, ES_Y, ES_Z, ES_LCBR, ES_PIPE, ES_RCBR, ES_PLUS, KC_DEL
+};
diff --git a/quantum/keymap_introspection.c b/quantum/keymap_introspection.c
index e4a01d2e9a..71e3b429ea 100644
--- a/quantum/keymap_introspection.c
+++ b/quantum/keymap_introspection.c
@@ -72,6 +72,24 @@ __attribute__((weak)) uint16_t keycode_at_encodermap_location(uint8_t layer_num,
#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Dip Switch mapping
+
+#if defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)
+
+uint16_t keycode_at_dip_switch_map_location_raw(uint8_t switch_idx, bool on) {
+ if (switch_idx < NUM_DIP_SWITCHES) {
+ return pgm_read_word(&dip_switch_map[switch_idx][!!on]);
+ }
+ return KC_TRNS;
+}
+
+uint16_t keycode_at_dip_switch_map_location(uint8_t switch_idx, bool on) {
+ return keycode_at_dip_switch_map_location_raw(switch_idx, on);
+}
+
+#endif // defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Combos
#if defined(COMBO_ENABLE)
diff --git a/quantum/keymap_introspection.h b/quantum/keymap_introspection.h
index 2012a2b8cc..f7516bf42a 100644
--- a/quantum/keymap_introspection.h
+++ b/quantum/keymap_introspection.h
@@ -36,6 +36,18 @@ uint16_t keycode_at_encodermap_location(uint8_t layer_num, uint8_t encoder_idx,
#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Dip Switch mapping
+
+#if defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)
+
+// Get the keycode for the dip_switch mapping location, stored in firmware rather than any other persistent storage
+uint16_t keycode_at_dip_switch_map_location_raw(uint8_t switch_idx, bool on);
+// Get the keycode for the dip_switch mapping location, potentially stored dynamically
+uint16_t keycode_at_dip_switch_map_location(uint8_t switch_idx, bool on);
+
+#endif // defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Combos
#if defined(COMBO_ENABLE)
diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c
index 4d67a295df..4699c4a4c2 100644
--- a/quantum/led_matrix/led_matrix.c
+++ b/quantum/led_matrix/led_matrix.c
@@ -74,9 +74,6 @@ static uint8_t led_last_enable = UINT8_MAX;
static uint8_t led_last_effect = UINT8_MAX;
static effect_params_t led_effect_params = {0, LED_FLAG_ALL, false};
static led_task_states led_task_state = SYNCING;
-#if LED_MATRIX_TIMEOUT > 0
-static uint32_t led_anykey_timer;
-#endif // LED_MATRIX_TIMEOUT > 0
// double buffers
static uint32_t led_timer_buffer;
@@ -156,9 +153,6 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) {
#ifndef LED_MATRIX_SPLIT
if (!is_keyboard_master()) return;
#endif
-#if LED_MATRIX_TIMEOUT > 0
- led_anykey_timer = 0;
-#endif // LED_MATRIX_TIMEOUT > 0
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
uint8_t led[LED_HITS_TO_REMEMBER];
@@ -208,22 +202,11 @@ static bool led_matrix_none(effect_params_t *params) {
}
static void led_task_timers(void) {
-#if defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_MATRIX_TIMEOUT > 0
+#if defined(LED_MATRIX_KEYREACTIVE_ENABLED)
uint32_t deltaTime = sync_timer_elapsed32(led_timer_buffer);
-#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_MATRIX_TIMEOUT > 0
+#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED)
led_timer_buffer = sync_timer_read32();
- // Update double buffer timers
-#if LED_MATRIX_TIMEOUT > 0
- if (led_anykey_timer < UINT32_MAX) {
- if (UINT32_MAX - deltaTime < led_anykey_timer) {
- led_anykey_timer = UINT32_MAX;
- } else {
- led_anykey_timer += deltaTime;
- }
- }
-#endif // LED_MATRIX_TIMEOUT > 0
-
// Update double buffer last hit timers
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
uint8_t count = last_hit_buffer.count;
@@ -329,7 +312,7 @@ void led_matrix_task(void) {
// while suspended and just do a software shutdown. This is a cheap hack for now.
bool suspend_backlight = suspend_state ||
#if LED_MATRIX_TIMEOUT > 0
- (led_anykey_timer > (uint32_t)LED_MATRIX_TIMEOUT) ||
+ (last_input_activity_elapsed() > (uint32_t)LED_MATRIX_TIMEOUT) ||
#endif // LED_MATRIX_TIMEOUT > 0
false;
diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h
index c903a230f4..153abf2975 100644
--- a/quantum/led_matrix/led_matrix.h
+++ b/quantum/led_matrix/led_matrix.h
@@ -23,32 +23,9 @@
#include <stdint.h>
#include <stdbool.h>
#include "led_matrix_types.h"
+#include "led_matrix_drivers.h"
#include "keyboard.h"
-#if defined(LED_MATRIX_IS31FL3218)
-# include "is31fl3218-simple.h"
-#elif defined(LED_MATRIX_IS31FL3731)
-# include "is31fl3731-simple.h"
-#endif
-#ifdef LED_MATRIX_IS31FL3733
-# include "is31fl3733-simple.h"
-#endif
-#ifdef LED_MATRIX_IS31FL3736
-# include "is31fl3736-simple.h"
-#endif
-#ifdef LED_MATRIX_IS31FL3737
-# include "is31fl3737-simple.h"
-#endif
-#ifdef LED_MATRIX_IS31FL3741
-# include "is31fl3741-simple.h"
-#endif
-#if defined(IS31FLCOMMON)
-# include "is31flcommon.h"
-#endif
-#ifdef LED_MATRIX_SNLED27351
-# include "snled27351-simple.h"
-#endif
-
#ifndef LED_MATRIX_TIMEOUT
# define LED_MATRIX_TIMEOUT 0
#endif
@@ -193,18 +170,6 @@ led_flags_t led_matrix_get_flags(void);
void led_matrix_set_flags(led_flags_t flags);
void led_matrix_set_flags_noeeprom(led_flags_t flags);
-typedef struct {
- /* Perform any initialisation required for the other driver functions to work. */
- void (*init)(void);
-
- /* Set the brightness of a single LED in the buffer. */
- void (*set_value)(int index, uint8_t value);
- /* Set the brightness of all LEDS on the keyboard in the buffer. */
- void (*set_value_all)(uint8_t value);
- /* Flush any buffered changes to the hardware. */
- void (*flush)(void);
-} led_matrix_driver_t;
-
static inline bool led_matrix_check_finished_leds(uint8_t led_idx) {
#if defined(LED_MATRIX_SPLIT)
if (is_keyboard_left()) {
@@ -217,8 +182,6 @@ static inline bool led_matrix_check_finished_leds(uint8_t led_idx) {
#endif
}
-extern const led_matrix_driver_t led_matrix_driver;
-
extern led_eeconfig_t led_matrix_eeconfig;
extern uint32_t g_led_timer;
diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c
index 117bed9851..672238a260 100644
--- a/quantum/led_matrix/led_matrix_drivers.c
+++ b/quantum/led_matrix/led_matrix_drivers.c
@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "led_matrix.h"
+#include "led_matrix_drivers.h"
/* Each driver needs to define a struct:
*
diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h
new file mode 100644
index 0000000000..b0ef3dfafc
--- /dev/null
+++ b/quantum/led_matrix/led_matrix_drivers.h
@@ -0,0 +1,38 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+
+#if defined(LED_MATRIX_IS31FL3218)
+# include "is31fl3218-simple.h"
+#elif defined(LED_MATRIX_IS31FL3731)
+# include "is31fl3731-simple.h"
+#elif defined(LED_MATRIX_IS31FL3733)
+# include "is31fl3733-simple.h"
+#elif defined(LED_MATRIX_IS31FL3736)
+# include "is31fl3736-simple.h"
+#elif defined(LED_MATRIX_IS31FL3737)
+# include "is31fl3737-simple.h"
+#elif defined(LED_MATRIX_IS31FL3741)
+# include "is31fl3741-simple.h"
+#elif defined(IS31FLCOMMON)
+# include "is31flcommon.h"
+#elif defined(LED_MATRIX_SNLED27351)
+# include "snled27351-simple.h"
+#endif
+
+typedef struct {
+ /* Perform any initialisation required for the other driver functions to work. */
+ void (*init)(void);
+
+ /* Set the brightness of a single LED in the buffer. */
+ void (*set_value)(int index, uint8_t value);
+ /* Set the brightness of all LEDS on the keyboard in the buffer. */
+ void (*set_value_all)(uint8_t value);
+ /* Flush any buffered changes to the hardware. */
+ void (*flush)(void);
+} led_matrix_driver_t;
+
+extern const led_matrix_driver_t led_matrix_driver;
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index d93d189827..ebaf3077dc 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -76,9 +76,6 @@ static uint8_t rgb_last_enable = UINT8_MAX;
static uint8_t rgb_last_effect = UINT8_MAX;
static effect_params_t rgb_effect_params = {0, LED_FLAG_ALL, false};
static rgb_task_states rgb_task_state = SYNCING;
-#if RGB_MATRIX_TIMEOUT > 0
-static uint32_t rgb_anykey_timer;
-#endif // RGB_MATRIX_TIMEOUT > 0
// double buffers
static uint32_t rgb_timer_buffer;
@@ -163,9 +160,6 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) {
#ifndef RGB_MATRIX_SPLIT
if (!is_keyboard_master()) return;
#endif
-#if RGB_MATRIX_TIMEOUT > 0
- rgb_anykey_timer = 0;
-#endif // RGB_MATRIX_TIMEOUT > 0
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
uint8_t led[LED_HITS_TO_REMEMBER];
@@ -246,18 +240,11 @@ static bool rgb_matrix_none(effect_params_t *params) {
}
static void rgb_task_timers(void) {
-#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_MATRIX_TIMEOUT > 0
+#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED)
uint32_t deltaTime = sync_timer_elapsed32(rgb_timer_buffer);
-#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_MATRIX_TIMEOUT > 0
+#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED)
rgb_timer_buffer = sync_timer_read32();
- // Update double buffer timers
-#if RGB_MATRIX_TIMEOUT > 0
- if (rgb_anykey_timer + deltaTime <= UINT32_MAX) {
- rgb_anykey_timer += deltaTime;
- }
-#endif // RGB_MATRIX_TIMEOUT > 0
-
// Update double buffer last hit timers
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
uint8_t count = last_hit_buffer.count;
@@ -370,7 +357,7 @@ void rgb_matrix_task(void) {
// while suspended and just do a software shutdown. This is a cheap hack for now.
bool suspend_backlight = suspend_state ||
#if RGB_MATRIX_TIMEOUT > 0
- (rgb_anykey_timer > (uint32_t)RGB_MATRIX_TIMEOUT) ||
+ (last_input_activity_elapsed() > (uint32_t)RGB_MATRIX_TIMEOUT) ||
#endif // RGB_MATRIX_TIMEOUT > 0
false;
diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h
index 9a3ffb8ea3..b1bf839bf6 100644
--- a/quantum/rgb_matrix/rgb_matrix.h
+++ b/quantum/rgb_matrix/rgb_matrix.h
@@ -21,31 +21,10 @@
#include <stdint.h>
#include <stdbool.h>
#include "rgb_matrix_types.h"
+#include "rgb_matrix_drivers.h"
#include "color.h"
#include "keyboard.h"
-#if defined(RGB_MATRIX_IS31FL3218)
-# include "is31fl3218.h"
-#elif defined(RGB_MATRIX_IS31FL3731)
-# include "is31fl3731.h"
-#elif defined(RGB_MATRIX_IS31FL3733)
-# include "is31fl3733.h"
-#elif defined(RGB_MATRIX_IS31FL3736)
-# include "is31fl3736.h"
-#elif defined(RGB_MATRIX_IS31FL3737)
-# include "is31fl3737.h"
-#elif defined(RGB_MATRIX_IS31FL3741)
-# include "is31fl3741.h"
-#elif defined(IS31FLCOMMON)
-# include "is31flcommon.h"
-#elif defined(RGB_MATRIX_SNLED27351)
-# include "snled27351.h"
-#elif defined(RGB_MATRIX_AW20216S)
-# include "aw20216s.h"
-#elif defined(RGB_MATRIX_WS2812)
-# include "ws2812.h"
-#endif
-
#ifndef RGB_MATRIX_TIMEOUT
# define RGB_MATRIX_TIMEOUT 0
#endif
@@ -272,17 +251,6 @@ void rgb_matrix_set_flags_noeeprom(led_flags_t flags);
# define rgblight_decrease_speed_noeeprom rgb_matrix_decrease_speed_noeeprom
#endif
-typedef struct {
- /* Perform any initialisation required for the other driver functions to work. */
- void (*init)(void);
- /* Set the colour of a single LED in the buffer. */
- void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b);
- /* Set the colour of all LEDS on the keyboard in the buffer. */
- void (*set_color_all)(uint8_t r, uint8_t g, uint8_t b);
- /* Flush any buffered changes to the hardware. */
- void (*flush)(void);
-} rgb_matrix_driver_t;
-
static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) {
#if defined(RGB_MATRIX_SPLIT)
if (is_keyboard_left()) {
@@ -295,8 +263,6 @@ static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) {
#endif
}
-extern const rgb_matrix_driver_t rgb_matrix_driver;
-
extern rgb_config_t rgb_matrix_config;
extern uint32_t g_rgb_timer;
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c
index 0f979cb233..e7bed0bf72 100644
--- a/quantum/rgb_matrix/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.c
@@ -14,7 +14,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rgb_matrix.h"
+#include "rgb_matrix_drivers.h"
+
+#include <stdbool.h>
+#include "keyboard.h"
+#include "color.h"
#include "util.h"
/* Each driver needs to define the struct
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h
new file mode 100644
index 0000000000..991344f087
--- /dev/null
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.h
@@ -0,0 +1,41 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+
+#if defined(RGB_MATRIX_AW20216S)
+# include "aw20216s.h"
+#elif defined(RGB_MATRIX_IS31FL3218)
+# include "is31fl3218.h"
+#elif defined(RGB_MATRIX_IS31FL3731)
+# include "is31fl3731.h"
+#elif defined(RGB_MATRIX_IS31FL3733)
+# include "is31fl3733.h"
+#elif defined(RGB_MATRIX_IS31FL3736)
+# include "is31fl3736.h"
+#elif defined(RGB_MATRIX_IS31FL3737)
+# include "is31fl3737.h"
+#elif defined(RGB_MATRIX_IS31FL3741)
+# include "is31fl3741.h"
+#elif defined(IS31FLCOMMON)
+# include "is31flcommon.h"
+#elif defined(RGB_MATRIX_SNLED27351)
+# include "snled27351.h"
+#elif defined(RGB_MATRIX_WS2812)
+# include "ws2812.h"
+#endif
+
+typedef struct {
+ /* Perform any initialisation required for the other driver functions to work. */
+ void (*init)(void);
+ /* Set the colour of a single LED in the buffer. */
+ void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b);
+ /* Set the colour of all LEDS on the keyboard in the buffer. */
+ void (*set_color_all)(uint8_t r, uint8_t g, uint8_t b);
+ /* Flush any buffered changes to the hardware. */
+ void (*flush)(void);
+} rgb_matrix_driver_t;
+
+extern const rgb_matrix_driver_t rgb_matrix_driver;
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index 8ac886d441..8c057f687d 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -116,7 +116,7 @@ animation_status_t animation_status = {};
#endif
#ifndef LED_ARRAY
-rgb_led_t led[RGBLED_NUM];
+rgb_led_t led[RGBLIGHT_LED_COUNT];
# define LED_ARRAY led
#endif
@@ -126,7 +126,7 @@ rgblight_segment_t const *const *rgblight_layers = NULL;
static bool deferred_set_layer_state = false;
#endif
-rgblight_ranges_t rgblight_ranges = {0, RGBLED_NUM, 0, RGBLED_NUM, RGBLED_NUM};
+rgblight_ranges_t rgblight_ranges = {0, RGBLIGHT_LED_COUNT, 0, RGBLIGHT_LED_COUNT, RGBLIGHT_LED_COUNT};
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
rgblight_ranges.clipping_start_pos = start_pos;
@@ -134,8 +134,8 @@ void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
}
void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
- if (start_pos >= RGBLED_NUM) return;
- if (start_pos + num_leds > RGBLED_NUM) return;
+ if (start_pos >= RGBLIGHT_LED_COUNT) return;
+ if (start_pos + num_leds > RGBLIGHT_LED_COUNT) return;
rgblight_ranges.effect_start_pos = start_pos;
rgblight_ranges.effect_end_pos = start_pos + num_leds;
rgblight_ranges.effect_num_leds = num_leds;
@@ -664,7 +664,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
}
void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) {
- if (!rgblight_config.enable || index >= RGBLED_NUM) {
+ if (!rgblight_config.enable || index >= RGBLIGHT_LED_COUNT) {
return;
}
@@ -700,7 +700,7 @@ static uint8_t get_interval_time(const uint8_t *default_interval_address, uint8_
#endif
void rgblight_setrgb_range(uint8_t r, uint8_t g, uint8_t b, uint8_t start, uint8_t end) {
- if (!rgblight_config.enable || start < 0 || start >= end || end > RGBLED_NUM) {
+ if (!rgblight_config.enable || start < 0 || start >= end || end > RGBLIGHT_LED_COUNT) {
return;
}
@@ -727,19 +727,19 @@ void rgblight_sethsv_range(uint8_t hue, uint8_t sat, uint8_t val, uint8_t start,
#ifndef RGBLIGHT_SPLIT
void rgblight_setrgb_master(uint8_t r, uint8_t g, uint8_t b) {
- rgblight_setrgb_range(r, g, b, 0, (uint8_t)RGBLED_NUM / 2);
+ rgblight_setrgb_range(r, g, b, 0, (uint8_t)RGBLIGHT_LED_COUNT / 2);
}
void rgblight_setrgb_slave(uint8_t r, uint8_t g, uint8_t b) {
- rgblight_setrgb_range(r, g, b, (uint8_t)RGBLED_NUM / 2, (uint8_t)RGBLED_NUM);
+ rgblight_setrgb_range(r, g, b, (uint8_t)RGBLIGHT_LED_COUNT / 2, (uint8_t)RGBLIGHT_LED_COUNT);
}
void rgblight_sethsv_master(uint8_t hue, uint8_t sat, uint8_t val) {
- rgblight_sethsv_range(hue, sat, val, 0, (uint8_t)RGBLED_NUM / 2);
+ rgblight_sethsv_range(hue, sat, val, 0, (uint8_t)RGBLIGHT_LED_COUNT / 2);
}
void rgblight_sethsv_slave(uint8_t hue, uint8_t sat, uint8_t val) {
- rgblight_sethsv_range(hue, sat, val, (uint8_t)RGBLED_NUM / 2, (uint8_t)RGBLED_NUM);
+ rgblight_sethsv_range(hue, sat, val, (uint8_t)RGBLIGHT_LED_COUNT / 2, (uint8_t)RGBLIGHT_LED_COUNT);
}
#endif // ifndef RGBLIGHT_SPLIT
@@ -789,7 +789,7 @@ static void rgblight_layers_write(void) {
break; // No more segments
}
// Write segment.count LEDs
- rgb_led_t *const limit = &led[MIN(segment.index + segment.count, RGBLED_NUM)];
+ rgb_led_t *const limit = &led[MIN(segment.index + segment.count, RGBLIGHT_LED_COUNT)];
for (rgb_led_t *led_ptr = &led[segment.index]; led_ptr < limit; led_ptr++) {
# ifdef RGBLIGHT_LAYERS_RETAIN_VAL
sethsv(segment.hue, segment.sat, current_val, led_ptr);
@@ -900,12 +900,6 @@ void rgblight_wakeup(void) {
#endif
-__attribute__((weak)) void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
- ws2812_setleds(start_led, num_leds);
-}
-
-#ifndef RGBLIGHT_CUSTOM
-
void rgblight_set(void) {
rgb_led_t *start_led;
uint8_t num_leds = rgblight_ranges.clipping_num_leds;
@@ -915,42 +909,41 @@ void rgblight_set(void) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
-# ifdef RGBW
+#ifdef RGBW
led[i].w = 0;
-# endif
+#endif
}
}
-# ifdef RGBLIGHT_LAYERS
+#ifdef RGBLIGHT_LAYERS
if (rgblight_layers != NULL
-# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF)
+# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF)
&& rgblight_config.enable
-# elif defined(RGBLIGHT_SLEEP)
+# elif defined(RGBLIGHT_SLEEP)
&& !is_suspended
-# endif
+# endif
) {
rgblight_layers_write();
}
-# endif
+#endif
-# ifdef RGBLIGHT_LED_MAP
- rgb_led_t led0[RGBLED_NUM];
- for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+#ifdef RGBLIGHT_LED_MAP
+ rgb_led_t led0[RGBLIGHT_LED_COUNT];
+ for (uint8_t i = 0; i < RGBLIGHT_LED_COUNT; i++) {
led0[i] = led[pgm_read_byte(&led_map[i])];
}
start_led = led0 + rgblight_ranges.clipping_start_pos;
-# else
+#else
start_led = led + rgblight_ranges.clipping_start_pos;
-# endif
+#endif
-# ifdef RGBW
+#ifdef RGBW
for (uint8_t i = 0; i < num_leds; i++) {
convert_rgb_to_rgbw(&start_led[i]);
}
-# endif
- rgblight_call_driver(start_led, num_leds);
-}
#endif
+ rgblight_driver.setleds(start_led, num_leds);
+}
#ifdef RGBLIGHT_SPLIT
/* for split keyboard master side */
@@ -1279,8 +1272,8 @@ void rgblight_effect_snake(animation_status_t *anim) {
# endif
for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
k = pos + j * increment;
- if (k > RGBLED_NUM) {
- k = k % (RGBLED_NUM);
+ if (k > RGBLIGHT_LED_COUNT) {
+ k = k % (RGBLIGHT_LED_COUNT);
}
if (k < 0) {
k = k + rgblight_ranges.effect_num_leds;
@@ -1465,7 +1458,7 @@ typedef struct PACKED {
uint8_t max_life;
} TwinkleState;
-static TwinkleState led_twinkle_state[RGBLED_NUM];
+static TwinkleState led_twinkle_state[RGBLIGHT_LED_COUNT];
void rgblight_effect_twinkle(animation_status_t *anim) {
const bool random_color = anim->delta / 3;
diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h
index a222ab6b9f..9e2b073776 100644
--- a/quantum/rgblight/rgblight.h
+++ b/quantum/rgblight/rgblight.h
@@ -16,6 +16,12 @@
#pragma once
+// DEPRECATED DEFINES - DO NOT USE
+#if defined(RGBLED_NUM)
+# define RGBLIGHT_LED_COUNT RGBLED_NUM
+#endif
+// ========
+
/***** rgblight_mode(mode)/rgblight_mode_noeeprom(mode) ****
old mode number (before 0.6.117) to new mode name table
@@ -160,6 +166,7 @@ enum RGBLIGHT_EFFECT_MODE {
#include <stdint.h>
#include <stdbool.h>
+#include "rgblight_drivers.h"
#include "progmem.h"
#include "eeconfig.h"
#include "ws2812.h"
@@ -233,7 +240,7 @@ void rgblight_unblink_all_but_layer(uint8_t layer);
#endif
-extern rgb_led_t led[RGBLED_NUM];
+extern rgb_led_t led[RGBLIGHT_LED_COUNT];
extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM;
extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM;
diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c
new file mode 100644
index 0000000000..45b60e1a5f
--- /dev/null
+++ b/quantum/rgblight/rgblight_drivers.c
@@ -0,0 +1,20 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rgblight_drivers.h"
+
+#if defined(RGBLIGHT_WS2812)
+# include "ws2812.h"
+
+const rgblight_driver_t rgblight_driver = {
+ .setleds = ws2812_setleds,
+};
+
+#elif defined(RGBLIGHT_APA102)
+# include "apa102.h"
+
+const rgblight_driver_t rgblight_driver = {
+ .setleds = apa102_setleds,
+};
+
+#endif
diff --git a/quantum/rgblight/rgblight_drivers.h b/quantum/rgblight/rgblight_drivers.h
new file mode 100644
index 0000000000..f7125a6f3d
--- /dev/null
+++ b/quantum/rgblight/rgblight_drivers.h
@@ -0,0 +1,13 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include "color.h"
+
+typedef struct {
+ void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds);
+} rgblight_driver_t;
+
+extern const rgblight_driver_t rgblight_driver;
diff --git a/readme.md b/readme.md
index f0e49a08e9..c277ca0aad 100644
--- a/readme.md
+++ b/readme.md
@@ -1,3 +1,7 @@
+# THIS IS THE DEVELOP BRANCH
+
+Warning- This is the `develop` branch of QMK Firmware. You may encounter broken code here. Please see [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) for more information.
+
# Quantum Mechanical Keyboard Firmware
[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)