summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format4
-rw-r--r--.gitignore1
-rw-r--r--Makefile133
-rw-r--r--build_full_test.mk36
-rw-r--r--build_keyboard.mk456
-rw-r--r--build_layout.mk32
-rw-r--r--build_test.mk83
-rw-r--r--builddefs/bootloader.mk49
-rw-r--r--builddefs/build_full_test.mk36
-rw-r--r--builddefs/build_json.mk (renamed from build_json.mk)0
-rw-r--r--builddefs/build_keyboard.mk469
-rw-r--r--builddefs/build_layout.mk32
-rw-r--r--builddefs/build_test.mk84
-rw-r--r--builddefs/common_features.mk816
-rw-r--r--builddefs/common_rules.mk523
-rw-r--r--builddefs/mcu_selection.mk77
-rw-r--r--builddefs/message.mk10
-rw-r--r--builddefs/testlist.mk19
-rw-r--r--common_features.mk724
-rw-r--r--data/mappings/info_config.json2
-rw-r--r--data/mappings/keyboard_aliases.json635
-rw-r--r--data/schemas/definitions.jsonschema10
-rw-r--r--data/schemas/keyboard.jsonschema11
-rw-r--r--data/templates/avr/config.h138
-rw-r--r--data/templates/avr/readme.md27
-rw-r--r--data/templates/base/%(KEYBOARD)s.c4
-rw-r--r--data/templates/base/%(KEYBOARD)s.h22
-rw-r--r--data/templates/base/info.json17
-rw-r--r--data/templates/base/keymaps/default/keymap.c22
-rw-r--r--data/templates/base/keymaps/default/readme.md1
-rw-r--r--data/templates/keyboard/info.json24
-rw-r--r--data/templates/keyboard/readme.md27
-rw-r--r--data/templates/keyboard/rules.mk1
-rw-r--r--data/templates/ps2avrgb/config.h128
-rw-r--r--data/templates/ps2avrgb/readme.md28
-rw-r--r--data/templates/ps2avrgb/rules.mk17
-rw-r--r--docs/ChangeLog/20220226/PR15304.md13
-rw-r--r--docs/cli_commands.md2
-rw-r--r--docs/compatible_microcontrollers.md17
-rw-r--r--docs/config_options.md9
-rw-r--r--docs/feature_bluetooth.md10
-rw-r--r--docs/feature_combo.md42
-rw-r--r--docs/feature_debounce_type.md1
-rw-r--r--docs/feature_grave_esc.md10
-rw-r--r--docs/feature_haptic_feedback.md7
-rw-r--r--docs/feature_key_lock.md3
-rw-r--r--docs/feature_led_matrix.md103
-rw-r--r--docs/feature_mouse_keys.md18
-rw-r--r--docs/feature_pointing_device.md182
-rw-r--r--docs/feature_rgb_matrix.md112
-rw-r--r--docs/feature_split_keyboard.md8
-rw-r--r--docs/feature_wpm.md2
-rw-r--r--docs/flash_driver.md24
-rw-r--r--docs/internals_gpio_control.md24
-rw-r--r--docs/keycodes.md17
-rw-r--r--docs/keycodes_magic.md1
-rw-r--r--docs/keymap.md2
-rw-r--r--docs/platformdev_chibios_earlyinit.md1
-rw-r--r--docs/quantum_keycodes.md10
-rw-r--r--docs/reference_info_json.md6
-rw-r--r--docs/squeezing_avr.md1
-rw-r--r--drivers/bluetooth/adafruit_ble.cpp699
-rw-r--r--drivers/bluetooth/adafruit_ble.h59
-rw-r--r--drivers/bluetooth/bluefruit_le.cpp705
-rw-r--r--drivers/bluetooth/bluefruit_le.h59
-rw-r--r--drivers/bluetooth/outputselect.c23
-rw-r--r--drivers/bluetooth/rn42.c101
-rw-r--r--drivers/bluetooth/rn42.h25
-rw-r--r--drivers/eeprom/eeprom_driver.c12
-rw-r--r--drivers/eeprom/eeprom_i2c.c6
-rw-r--r--drivers/eeprom/eeprom_spi.c12
-rw-r--r--drivers/eeprom/eeprom_transient.c8
-rw-r--r--drivers/eeprom/eeprom_transient.h2
-rw-r--r--drivers/flash/flash_spi.c376
-rw-r--r--drivers/flash/flash_spi.h136
-rw-r--r--drivers/gpio/mcp23018.c108
-rw-r--r--drivers/gpio/mcp23018.h65
-rw-r--r--drivers/gpio/pca9555.c61
-rw-r--r--drivers/gpio/pca9555.h81
-rw-r--r--drivers/gpio/sn74x138.c65
-rw-r--r--drivers/gpio/sn74x138.h48
-rw-r--r--drivers/haptic/DRV2605L.c6
-rw-r--r--drivers/haptic/solenoid.c20
-rw-r--r--drivers/lcd/st7565.c25
-rw-r--r--drivers/lcd/st7565.h8
-rw-r--r--drivers/led/apa102.c10
-rw-r--r--drivers/led/aw20216.c14
-rw-r--r--drivers/led/ckled2001.c11
-rw-r--r--drivers/led/issi/is31fl3731-simple.c6
-rw-r--r--drivers/led/issi/is31fl3731.c6
-rw-r--r--drivers/led/issi/is31fl3733-simple.c248
-rw-r--r--drivers/led/issi/is31fl3733-simple.h260
-rw-r--r--drivers/led/issi/is31fl3733.c20
-rw-r--r--drivers/led/issi/is31fl3733.h14
-rw-r--r--drivers/led/issi/is31fl3736.c20
-rw-r--r--drivers/led/issi/is31fl3736.h16
-rw-r--r--drivers/led/issi/is31fl3737.c20
-rw-r--r--drivers/led/issi/is31fl3737.h16
-rw-r--r--drivers/led/issi/is31fl3741.c20
-rw-r--r--drivers/led/issi/is31fl3741.h16
-rw-r--r--drivers/led/issi/is31fl3742.h299
-rw-r--r--drivers/led/issi/is31fl3743.h327
-rw-r--r--drivers/led/issi/is31fl3745.h270
-rw-r--r--drivers/led/issi/is31fl3746.h198
-rw-r--r--drivers/led/issi/is31flcommon.c230
-rw-r--r--drivers/led/issi/is31flcommon.h78
-rw-r--r--drivers/oled/oled_driver.h22
-rw-r--r--drivers/oled/ssd1306_sh1106.c49
-rw-r--r--drivers/ps2/ps2_busywait.c6
-rw-r--r--drivers/ps2/ps2_interrupt.c16
-rw-r--r--drivers/ps2/ps2_mouse.c28
-rw-r--r--drivers/sensors/adns5050.c10
-rw-r--r--drivers/sensors/adns9800.c20
-rw-r--r--drivers/sensors/adns9800_srom_A6.h2
-rw-r--r--drivers/sensors/analog_joystick.c2
-rw-r--r--drivers/sensors/cirque_pinnacle.c38
-rw-r--r--drivers/sensors/cirque_pinnacle.h8
-rw-r--r--drivers/sensors/cirque_pinnacle_i2c.c4
-rw-r--r--drivers/sensors/cirque_pinnacle_spi.c10
-rw-r--r--drivers/sensors/pimoroni_trackball.c24
-rw-r--r--drivers/sensors/pimoroni_trackball.h9
-rw-r--r--drivers/sensors/pmw3360.c287
-rw-r--r--drivers/sensors/pmw3360.h43
-rw-r--r--drivers/sensors/pmw3389.c294
-rw-r--r--drivers/sensors/pmw3389.h76
-rw-r--r--drivers/sensors/pmw3389_firmware.h558
-rw-r--r--drivers/serial.h19
-rw-r--r--drivers/usb2422.c14
-rw-r--r--drivers/ws2812.h8
-rw-r--r--keyboards/10bleoledhub/rules.mk2
-rw-r--r--keyboards/25keys/aleth42/info.json (renamed from keyboards/aleth42/info.json)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/default/keymap.c (renamed from keyboards/aleth42/keymaps/default/keymap.c)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/default/readme.md (renamed from keyboards/aleth42/keymaps/default/readme.md)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/via/config.h (renamed from keyboards/aleth42/keymaps/via/config.h)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/via/keymap.c (renamed from keyboards/aleth42/keymaps/via/keymap.c)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/via/readme.md (renamed from keyboards/aleth42/keymaps/via/readme.md)0
-rw-r--r--keyboards/25keys/aleth42/keymaps/via/rules.mk (renamed from keyboards/aleth42/keymaps/via/rules.mk)0
-rw-r--r--keyboards/25keys/aleth42/readme.md15
-rw-r--r--keyboards/25keys/aleth42/rev0/config.h (renamed from keyboards/aleth42/rev0/config.h)0
-rw-r--r--keyboards/25keys/aleth42/rev0/readme.md (renamed from keyboards/aleth42/rev0/readme.md)0
-rw-r--r--keyboards/25keys/aleth42/rev0/rev0.c (renamed from keyboards/aleth42/rev0/rev0.c)0
-rw-r--r--keyboards/25keys/aleth42/rev0/rev0.h (renamed from keyboards/aleth42/rev0/rev0.h)0
-rw-r--r--keyboards/25keys/aleth42/rev0/rules.mk (renamed from keyboards/aleth42/rev0/rules.mk)0
-rw-r--r--keyboards/25keys/aleth42/rev1/config.h (renamed from keyboards/aleth42/rev1/config.h)0
-rw-r--r--keyboards/25keys/aleth42/rev1/readme.md (renamed from keyboards/aleth42/readme.md)0
-rw-r--r--keyboards/25keys/aleth42/rev1/rev1.c (renamed from keyboards/aleth42/rev1/rev1.c)0
-rw-r--r--keyboards/25keys/aleth42/rev1/rev1.h (renamed from keyboards/aleth42/rev1/rev1.h)0
-rw-r--r--keyboards/25keys/aleth42/rev1/rules.mk (renamed from keyboards/aleth42/rev1/rules.mk)0
-rw-r--r--keyboards/25keys/aleth42/rules.mk1
-rw-r--r--keyboards/25keys/cassette42/cassette42.c (renamed from keyboards/cassette42/cassette42.c)0
-rw-r--r--keyboards/25keys/cassette42/cassette42.h (renamed from keyboards/cassette42/cassette42.h)0
-rw-r--r--keyboards/25keys/cassette42/common/glcdfont.c (renamed from keyboards/cassette42/common/glcdfont.c)0
-rw-r--r--keyboards/25keys/cassette42/common/oled_helper.c (renamed from keyboards/cassette42/common/oled_helper.c)0
-rw-r--r--keyboards/25keys/cassette42/common/oled_helper.h (renamed from keyboards/cassette42/common/oled_helper.h)0
-rw-r--r--keyboards/25keys/cassette42/config.h52
-rw-r--r--keyboards/25keys/cassette42/info.json (renamed from keyboards/cassette42/info.json)0
-rw-r--r--keyboards/25keys/cassette42/keymaps/default/keymap.c (renamed from keyboards/cassette42/keymaps/default/keymap.c)0
-rw-r--r--keyboards/25keys/cassette42/keymaps/default/readme.md (renamed from keyboards/cassette42/keymaps/default/readme.md)0
-rw-r--r--keyboards/25keys/cassette42/readme.md15
-rw-r--r--keyboards/25keys/cassette42/rules.mk (renamed from keyboards/cassette42/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/.noci (renamed from keyboards/7skb/.noci)0
-rw-r--r--keyboards/25keys/zinc/config.h (renamed from keyboards/7skb/config.h)0
-rw-r--r--keyboards/25keys/zinc/info.json (renamed from keyboards/zinc/info.json)0
-rw-r--r--keyboards/25keys/zinc/keymaps/default/config.h (renamed from keyboards/zinc/keymaps/default/config.h)0
-rw-r--r--keyboards/25keys/zinc/keymaps/default/keymap.c (renamed from keyboards/zinc/keymaps/default/keymap.c)0
-rw-r--r--keyboards/25keys/zinc/keymaps/default/readme_en.md (renamed from keyboards/zinc/keymaps/default/readme_en.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/default/readme_jp.md (renamed from keyboards/zinc/keymaps/default/readme_jp.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/default/rules.mk (renamed from keyboards/zinc/keymaps/default/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/keymaps/ginjake/config.h (renamed from keyboards/zinc/keymaps/ginjake/config.h)0
-rw-r--r--keyboards/25keys/zinc/keymaps/ginjake/keymap.c (renamed from keyboards/zinc/keymaps/ginjake/keymap.c)0
-rw-r--r--keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md (renamed from keyboards/zinc/keymaps/ginjake/readme_jp.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/ginjake/rules.mk (renamed from keyboards/zinc/keymaps/ginjake/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/keymaps/monks/config.h (renamed from keyboards/zinc/keymaps/monks/config.h)0
-rw-r--r--keyboards/25keys/zinc/keymaps/monks/keymap.c (renamed from keyboards/zinc/keymaps/monks/keymap.c)0
-rw-r--r--keyboards/25keys/zinc/keymaps/monks/readme_jp.md (renamed from keyboards/zinc/keymaps/monks/readme_jp.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/monks/rules.mk (renamed from keyboards/zinc/keymaps/monks/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/keymaps/toshi0383/config.h (renamed from keyboards/zinc/keymaps/toshi0383/config.h)0
-rw-r--r--keyboards/25keys/zinc/keymaps/toshi0383/keymap.c (renamed from keyboards/zinc/keymaps/toshi0383/keymap.c)0
-rw-r--r--keyboards/25keys/zinc/keymaps/toshi0383/rules.mk (renamed from keyboards/zinc/keymaps/toshi0383/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/keymaps/via/config.h (renamed from keyboards/zinc/keymaps/via/config.h)0
-rw-r--r--keyboards/25keys/zinc/keymaps/via/keymap.c (renamed from keyboards/zinc/keymaps/via/keymap.c)0
-rw-r--r--keyboards/25keys/zinc/keymaps/via/readme_en.md (renamed from keyboards/zinc/keymaps/via/readme_en.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/via/readme_jp.md (renamed from keyboards/zinc/keymaps/via/readme_jp.md)0
-rw-r--r--keyboards/25keys/zinc/keymaps/via/rules.mk (renamed from keyboards/zinc/keymaps/via/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/readme.md17
-rw-r--r--keyboards/25keys/zinc/rev1/.noci (renamed from keyboards/angel17/.noci)0
-rw-r--r--keyboards/25keys/zinc/rev1/config.h (renamed from keyboards/zinc/rev1/config.h)0
-rw-r--r--keyboards/25keys/zinc/rev1/info.json (renamed from keyboards/zinc/rev1/info.json)0
-rw-r--r--keyboards/25keys/zinc/rev1/post_config.h (renamed from keyboards/zinc/rev1/post_config.h)0
-rw-r--r--keyboards/25keys/zinc/rev1/rev1.c (renamed from keyboards/zinc/rev1/rev1.c)0
-rw-r--r--keyboards/25keys/zinc/rev1/rev1.h (renamed from keyboards/zinc/rev1/rev1.h)0
-rw-r--r--keyboards/25keys/zinc/rev1/rules.mk (renamed from keyboards/zinc/rev1/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/reva/.noci (renamed from keyboards/angel17/alpha/.noci)0
-rw-r--r--keyboards/25keys/zinc/reva/config.h (renamed from keyboards/zinc/reva/config.h)0
-rw-r--r--keyboards/25keys/zinc/reva/info.json (renamed from keyboards/zinc/reva/info.json)0
-rw-r--r--keyboards/25keys/zinc/reva/post_config.h (renamed from keyboards/zinc/reva/post_config.h)0
-rw-r--r--keyboards/25keys/zinc/reva/reva.c (renamed from keyboards/zinc/reva/reva.c)0
-rw-r--r--keyboards/25keys/zinc/reva/reva.h (renamed from keyboards/zinc/reva/reva.h)0
-rw-r--r--keyboards/25keys/zinc/reva/rules.mk (renamed from keyboards/zinc/reva/rules.mk)0
-rw-r--r--keyboards/25keys/zinc/rules.mk25
-rw-r--r--keyboards/25keys/zinc/zinc.c (renamed from keyboards/zinc/zinc.c)0
-rw-r--r--keyboards/25keys/zinc/zinc.h10
-rw-r--r--keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk1
-rw-r--r--keyboards/40percentclub/25/config.h6
-rw-r--r--keyboards/40percentclub/5x5/config.h6
-rw-r--r--keyboards/40percentclub/6lit/config.h6
-rw-r--r--keyboards/40percentclub/foobar/config.h6
-rw-r--r--keyboards/40percentclub/half_n_half/config.h6
-rw-r--r--keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk2
-rw-r--r--keyboards/40percentclub/ut47/keymaps/default/keymap.c6
-rw-r--r--keyboards/40percentclub/ut47/keymaps/non-us/keymap.c6
-rw-r--r--keyboards/40percentclub/ut47/keymaps/nordic/keymap.c6
-rw-r--r--keyboards/40percentclub/ut47/keymaps/rgb/keymap.c6
-rw-r--r--keyboards/40percentclub/ut47/matrix.c14
-rw-r--r--keyboards/40percentclub/ut47/rules.mk3
-rw-r--r--keyboards/40percentclub/ut47/ut47.c8
-rw-r--r--keyboards/6ball/readme.md14
-rw-r--r--keyboards/7skb/7skb.h7
-rw-r--r--keyboards/7skb/readme.md17
-rw-r--r--keyboards/7skb/rules.mk22
-rw-r--r--keyboards/7splus/readme.md17
-rw-r--r--keyboards/acr60/readme.md24
-rw-r--r--keyboards/adalyn/readme.md19
-rw-r--r--keyboards/adalyn/rules.mk22
-rw-r--r--keyboards/ai03/orbit/config.h13
-rw-r--r--keyboards/ai03/orbit/keymaps/default/keymap.c16
-rw-r--r--keyboards/ai03/orbit/matrix.c328
-rw-r--r--keyboards/ai03/orbit/orbit.c270
-rw-r--r--keyboards/ai03/orbit/orbit.h17
-rw-r--r--keyboards/ai03/orbit/readme.md6
-rw-r--r--keyboards/ai03/orbit/rules.mk10
-rw-r--r--keyboards/ai03/orbit/serial.c545
-rw-r--r--keyboards/ai03/orbit/serial.h62
-rw-r--r--keyboards/ai03/orbit/split_flags.c5
-rw-r--r--keyboards/ai03/orbit/split_flags.h15
-rw-r--r--keyboards/ai03/orbit/split_util.c87
-rw-r--r--keyboards/ai03/orbit/split_util.h10
-rw-r--r--keyboards/ai03/orbit/transport.c238
-rw-r--r--keyboards/ai03/orbit/transport.h42
-rw-r--r--keyboards/ajisai74/readme.md17
-rw-r--r--keyboards/aleth42/rev1/readme.md15
-rw-r--r--keyboards/aleth42/rules.mk1
-rw-r--r--keyboards/alicia_cook/readme.md26
-rw-r--r--keyboards/allison/readme.md15
-rw-r--r--keyboards/allison_numpad/readme.md15
-rw-r--r--keyboards/alu84/readme.md21
-rw-r--r--keyboards/amj96/matrix.c6
-rw-r--r--keyboards/amjkeyboard/amj84/keymaps/default/keymap.c4
-rw-r--r--keyboards/angel17/readme.md15
-rw-r--r--keyboards/angel17/rules.mk22
-rw-r--r--keyboards/angel64/alpha/matrix.c287
-rw-r--r--keyboards/angel64/alpha/readme.md15
-rw-r--r--keyboards/angel64/readme.md15
-rw-r--r--keyboards/angel64/rev1/matrix.c287
-rw-r--r--keyboards/angel64/rev1/readme.md15
-rw-r--r--keyboards/angel64/rules.mk25
-rw-r--r--keyboards/arch_36/readme.md16
-rw-r--r--keyboards/atreus/feather/rules.mk2
-rw-r--r--keyboards/bakeneko60/readme.md17
-rw-r--r--keyboards/bakeneko65/rev2/readme.md17
-rw-r--r--keyboards/bakeneko65/rev3/readme.md17
-rw-r--r--keyboards/bakeneko65/rev3/rules.mk18
-rw-r--r--keyboards/bakeneko80/readme.md13
-rw-r--r--keyboards/barleycorn/readme.md23
-rw-r--r--keyboards/bat43/bat43.h10
-rw-r--r--keyboards/bat43/readme.md15
-rw-r--r--keyboards/bat43/rules.mk20
-rw-r--r--keyboards/biacco42/ergo42/.noci (renamed from keyboards/angel64/.noci)0
-rw-r--r--keyboards/biacco42/ergo42/config.h (renamed from keyboards/ergo42/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/ergo42.c (renamed from keyboards/ergo42/ergo42.c)0
-rw-r--r--keyboards/biacco42/ergo42/ergo42.h7
-rw-r--r--keyboards/biacco42/ergo42/info.json (renamed from keyboards/ergo42/info.json)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h (renamed from keyboards/ergo42/keymaps/biacco-biacco/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c (renamed from keyboards/ergo42/keymaps/biacco-biacco/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h (renamed from keyboards/ergo42/keymaps/biacco-macOS/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c (renamed from keyboards/ergo42/keymaps/biacco-macOS/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h (renamed from keyboards/ergo42/keymaps/biacco-underglow/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c (renamed from keyboards/ergo42/keymaps/biacco-underglow/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk (renamed from keyboards/ergo42/keymaps/biacco-underglow/rules.mk)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h (renamed from keyboards/ergo42/keymaps/biacco-winjp/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c (renamed from keyboards/ergo42/keymaps/biacco-winjp/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco/config.h (renamed from keyboards/ergo42/keymaps/biacco/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/biacco/keymap.c (renamed from keyboards/ergo42/keymaps/biacco/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-illustrator/config.h (renamed from keyboards/ergo42/keymaps/default-illustrator/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-illustrator/keymap.c (renamed from keyboards/ergo42/keymaps/default-illustrator/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-underglow/config.h (renamed from keyboards/ergo42/keymaps/default-underglow/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-underglow/keymap.c (renamed from keyboards/ergo42/keymaps/default-underglow/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default-underglow/rules.mk (renamed from keyboards/ergo42/keymaps/default-underglow/rules.mk)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default/config.h (renamed from keyboards/ergo42/keymaps/default/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/default/keymap.c (renamed from keyboards/ergo42/keymaps/default/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/hdbx/config.h (renamed from keyboards/ergo42/keymaps/hdbx/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c (renamed from keyboards/ergo42/keymaps/hdbx/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/hdbx/readme.md (renamed from keyboards/ergo42/keymaps/hdbx/readme.md)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/ichi-t/config.h (renamed from keyboards/ergo42/keymaps/ichi-t/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c (renamed from keyboards/ergo42/keymaps/ichi-t/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/koba/config.h (renamed from keyboards/ergo42/keymaps/koba/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/koba/keymap.c (renamed from keyboards/ergo42/keymaps/koba/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/koba/readme.md (renamed from keyboards/ergo42/keymaps/koba/readme.md)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md (renamed from keyboards/ergo42/keymaps/koba/readme_ja.md)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/shinze/config.h (renamed from keyboards/ergo42/keymaps/shinze/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/shinze/keymap.c (renamed from keyboards/ergo42/keymaps/shinze/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h (renamed from keyboards/ergo42/keymaps/yshrsmz/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c (renamed from keyboards/ergo42/keymaps/yshrsmz/keymap.c)0
-rw-r--r--keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk (renamed from keyboards/ergo42/keymaps/yshrsmz/rules.mk)0
-rw-r--r--keyboards/biacco42/ergo42/readme.md16
-rw-r--r--keyboards/biacco42/ergo42/rev1/config.h (renamed from keyboards/ergo42/rev1/config.h)0
-rw-r--r--keyboards/biacco42/ergo42/rev1/rev1.c (renamed from keyboards/ergo42/rev1/rev1.c)0
-rw-r--r--keyboards/biacco42/ergo42/rev1/rev1.h (renamed from keyboards/ergo42/rev1/rev1.h)0
-rw-r--r--keyboards/biacco42/ergo42/rev1/rules.mk (renamed from keyboards/ergo42/rev1/rules.mk)0
-rw-r--r--keyboards/biacco42/ergo42/rules.mk22
-rw-r--r--keyboards/biacco42/meishi/config.h (renamed from keyboards/meishi/config.h)0
-rw-r--r--keyboards/biacco42/meishi/info.json (renamed from keyboards/meishi/info.json)0
-rw-r--r--keyboards/biacco42/meishi/keymaps/default/keymap.c (renamed from keyboards/meishi/keymaps/default/keymap.c)0
-rw-r--r--keyboards/biacco42/meishi/keymaps/default/readme.md (renamed from keyboards/meishi/keymaps/default/readme.md)0
-rw-r--r--keyboards/biacco42/meishi/meishi.c (renamed from keyboards/meishi/meishi.c)0
-rw-r--r--keyboards/biacco42/meishi/meishi.h (renamed from keyboards/meishi/meishi.h)0
-rw-r--r--keyboards/biacco42/meishi/readme.md19
-rw-r--r--keyboards/biacco42/meishi/rules.mk (renamed from keyboards/meishi/rules.mk)0
-rw-r--r--keyboards/biacco42/meishi2/config.h (renamed from keyboards/meishi2/config.h)0
-rw-r--r--keyboards/biacco42/meishi2/info.json (renamed from keyboards/meishi2/info.json)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/default/keymap.c (renamed from keyboards/meishi2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/default/readme.md (renamed from keyboards/meishi2/keymaps/default/readme.md)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/led_status/keymap.c (renamed from keyboards/meishi2/keymaps/led_status/keymap.c)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/led_status/readme.md (renamed from keyboards/meishi2/keymaps/led_status/readme.md)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/moc/config.h (renamed from keyboards/meishi2/keymaps/moc/config.h)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/moc/keymap.c (renamed from keyboards/meishi2/keymaps/moc/keymap.c)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/moc/readme.md (renamed from keyboards/meishi2/keymaps/moc/readme.md)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/via/keymap.c (renamed from keyboards/meishi2/keymaps/via/keymap.c)0
-rw-r--r--keyboards/biacco42/meishi2/keymaps/via/rules.mk (renamed from keyboards/meishi2/keymaps/via/rules.mk)0
-rw-r--r--keyboards/biacco42/meishi2/meishi2.c (renamed from keyboards/meishi2/meishi2.c)0
-rw-r--r--keyboards/biacco42/meishi2/meishi2.h (renamed from keyboards/meishi2/meishi2.h)0
-rw-r--r--keyboards/biacco42/meishi2/readme.md15
-rw-r--r--keyboards/biacco42/meishi2/rules.mk (renamed from keyboards/meishi2/rules.mk)0
-rw-r--r--keyboards/bigseries/1key/readme.md15
-rw-r--r--keyboards/bigseries/2key/readme.md15
-rw-r--r--keyboards/bigseries/3key/readme.md15
-rw-r--r--keyboards/bigseries/4key/readme.md15
-rw-r--r--keyboards/bigseries/readme.md16
-rw-r--r--keyboards/bioi/main.c6
-rw-r--r--keyboards/bkf/readme.md21
-rw-r--r--keyboards/boston_meetup/2019/config.h2
-rw-r--r--keyboards/bpiphany/four_banger/config.h (renamed from keyboards/four_banger/config.h)0
-rw-r--r--keyboards/bpiphany/four_banger/four_banger.c (renamed from keyboards/four_banger/four_banger.c)0
-rw-r--r--keyboards/bpiphany/four_banger/four_banger.h (renamed from keyboards/four_banger/four_banger.h)0
-rw-r--r--keyboards/bpiphany/four_banger/info.json (renamed from keyboards/four_banger/info.json)0
-rw-r--r--keyboards/bpiphany/four_banger/keymaps/default/keymap.c (renamed from keyboards/four_banger/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bpiphany/four_banger/readme.md14
-rw-r--r--keyboards/bpiphany/four_banger/rules.mk (renamed from keyboards/four_banger/rules.mk)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/config.h (renamed from keyboards/hid_liber/config.h)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/hid_liber.c (renamed from keyboards/hid_liber/hid_liber.c)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/hid_liber.h (renamed from keyboards/hid_liber/hid_liber.h)0
-rw-r--r--keyboards/bpiphany/hid_liber/info.json (renamed from keyboards/hid_liber/info.json)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/bakageta/config.h (renamed from keyboards/hid_liber/keymaps/bakageta/config.h)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/bakageta/keymap.c (renamed from keyboards/hid_liber/keymaps/bakageta/keymap.c)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/bakageta/readme.md (renamed from keyboards/hid_liber/keymaps/bakageta/readme.md)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/bakageta/rules.mk (renamed from keyboards/hid_liber/keymaps/bakageta/rules.mk)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/default/keymap.c (renamed from keyboards/hid_liber/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/keymaps/default/readme.md (renamed from keyboards/hid_liber/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/bpiphany/hid_liber/matrix.c259
-rwxr-xr-xkeyboards/bpiphany/hid_liber/readme.md17
-rwxr-xr-xkeyboards/bpiphany/hid_liber/rules.mk (renamed from keyboards/hid_liber/rules.mk)0
-rw-r--r--keyboards/bpiphany/kitten_paw/matrix.c7
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/matrix.c7
-rw-r--r--keyboards/business_card/business_card.h25
-rw-r--r--keyboards/business_card/readme.md15
-rw-r--r--keyboards/business_card/rules.mk20
-rw-r--r--keyboards/butterstick/readme.md14
-rwxr-xr-xkeyboards/c39/readme.md16
-rw-r--r--keyboards/capsunlocked/cu24/config.h (renamed from keyboards/cu24/config.h)0
-rw-r--r--keyboards/capsunlocked/cu24/cu24.c (renamed from keyboards/cu24/cu24.c)0
-rw-r--r--keyboards/capsunlocked/cu24/cu24.h (renamed from keyboards/cu24/cu24.h)0
-rw-r--r--keyboards/capsunlocked/cu24/info.json (renamed from keyboards/cu24/info.json)0
-rw-r--r--keyboards/capsunlocked/cu24/keymaps/default/keymap.c (renamed from keyboards/cu24/keymaps/default/keymap.c)0
-rw-r--r--keyboards/capsunlocked/cu24/keymaps/default/readme.md (renamed from keyboards/cu24/keymaps/default/readme.md)0
-rw-r--r--keyboards/capsunlocked/cu24/readme.md15
-rw-r--r--keyboards/capsunlocked/cu24/rules.mk (renamed from keyboards/cu24/rules.mk)0
-rw-r--r--keyboards/capsunlocked/cu75/config.h (renamed from keyboards/cu75/config.h)0
-rw-r--r--keyboards/capsunlocked/cu75/cu75.c116
-rw-r--r--keyboards/capsunlocked/cu75/cu75.h96
-rw-r--r--keyboards/capsunlocked/cu75/info.json (renamed from keyboards/cu75/info.json)0
-rw-r--r--keyboards/capsunlocked/cu75/keymaps/default/keymap.c (renamed from keyboards/cu75/keymaps/default/keymap.c)0
-rw-r--r--keyboards/capsunlocked/cu75/keymaps/default/rules.mk (renamed from keyboards/cu75/keymaps/default/rules.mk)0
-rw-r--r--keyboards/capsunlocked/cu75/keymaps/iso/keymap.c (renamed from keyboards/cu75/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/capsunlocked/cu75/keymaps/iso/rules.mk (renamed from keyboards/cu75/keymaps/iso/rules.mk)0
-rw-r--r--keyboards/capsunlocked/cu75/readme.md17
-rw-r--r--keyboards/capsunlocked/cu75/rules.mk14
-rw-r--r--keyboards/capsunlocked/cu80/v1/config.h (renamed from keyboards/cu80/config.h)0
-rw-r--r--keyboards/capsunlocked/cu80/v1/info.json (renamed from keyboards/cu80/info.json)0
-rw-r--r--keyboards/capsunlocked/cu80/v1/keymaps/default/keymap.c (renamed from keyboards/cu80/keymaps/default/keymap.c)0
-rw-r--r--keyboards/capsunlocked/cu80/v1/keymaps/default/readme.md (renamed from keyboards/cu80/keymaps/default/readme.md)0
-rw-r--r--keyboards/capsunlocked/cu80/v1/readme.md15
-rw-r--r--keyboards/capsunlocked/cu80/v1/rules.mk (renamed from keyboards/cu80/rules.mk)0
-rw-r--r--keyboards/capsunlocked/cu80/v1/v1.c18
-rw-r--r--keyboards/capsunlocked/cu80/v1/v1.h (renamed from keyboards/cu80/cu80.h)0
-rw-r--r--keyboards/capsunlocked/cu80/v2_ansi/info.json2
-rw-r--r--keyboards/capsunlocked/cu80/v2_iso/info.json2
-rw-r--r--keyboards/cassette42/config.h52
-rw-r--r--keyboards/cassette42/readme.md15
-rw-r--r--keyboards/centromere/config.h9
-rw-r--r--keyboards/centromere/matrix.c126
-rw-r--r--keyboards/centromere/rules.mk23
-rw-r--r--keyboards/checkerboards/plexus75/config.h (renamed from keyboards/plexus75/config.h)0
-rw-r--r--keyboards/checkerboards/plexus75/info.json (renamed from keyboards/plexus75/info.json)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default/config.h (renamed from keyboards/plexus75/keymaps/default/config.h)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default/keymap.c (renamed from keyboards/plexus75/keymaps/default/keymap.c)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default/readme.md (renamed from keyboards/plexus75/keymaps/default/readme.md)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default_3u/keymap.c (renamed from keyboards/plexus75/keymaps/default_3u/keymap.c)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default_3u/readme.md (renamed from keyboards/plexus75/keymaps/default_3u/readme.md)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default_7u/keymap.c (renamed from keyboards/plexus75/keymaps/default_7u/keymap.c)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/default_7u/readme.md (renamed from keyboards/plexus75/keymaps/default_7u/readme.md)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/via/keymap.c (renamed from keyboards/plexus75/keymaps/via/keymap.c)0
-rw-r--r--keyboards/checkerboards/plexus75/keymaps/via/rules.mk (renamed from keyboards/allison/keymaps/via/rules.mk)0
-rw-r--r--keyboards/checkerboards/plexus75/plexus75.h (renamed from keyboards/plexus75/plexus75.h)0
-rw-r--r--keyboards/checkerboards/plexus75/readme.md15
-rw-r--r--keyboards/checkerboards/plexus75/rules.mk (renamed from keyboards/plexus75/rules.mk)0
-rw-r--r--keyboards/checkerboards/pursuit40/config.h (renamed from keyboards/pursuit40/config.h)0
-rw-r--r--keyboards/checkerboards/pursuit40/info.json (renamed from keyboards/pursuit40/info.json)0
-rw-r--r--keyboards/checkerboards/pursuit40/keymaps/default/config.h (renamed from keyboards/pursuit40/keymaps/default/config.h)0
-rw-r--r--keyboards/checkerboards/pursuit40/keymaps/default/keymap.c (renamed from keyboards/pursuit40/keymaps/default/keymap.c)0
-rw-r--r--keyboards/checkerboards/pursuit40/keymaps/default/readme.md (renamed from keyboards/pursuit40/keymaps/default/readme.md)0
-rw-r--r--keyboards/checkerboards/pursuit40/keymaps/via/keymap.c (renamed from keyboards/pursuit40/keymaps/via/keymap.c)0
-rw-r--r--keyboards/checkerboards/pursuit40/keymaps/via/rules.mk (renamed from keyboards/allison_numpad/keymaps/via/rules.mk)0
-rw-r--r--keyboards/checkerboards/pursuit40/pursuit40.c (renamed from keyboards/pursuit40/pursuit40.c)0
-rw-r--r--keyboards/checkerboards/pursuit40/pursuit40.h (renamed from keyboards/pursuit40/pursuit40.h)0
-rw-r--r--keyboards/checkerboards/pursuit40/readme.md15
-rw-r--r--keyboards/checkerboards/pursuit40/rules.mk (renamed from keyboards/pursuit40/rules.mk)0
-rw-r--r--keyboards/checkerboards/quark/config.h (renamed from keyboards/quark/config.h)0
-rw-r--r--keyboards/checkerboards/quark/info.json (renamed from keyboards/quark/info.json)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/ajp10304/keymap.c (renamed from keyboards/quark/keymaps/ajp10304/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/ajp10304/readme.md (renamed from keyboards/quark/keymaps/ajp10304/readme.md)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/ajp10304/rules.mk (renamed from keyboards/naked48/keymaps/default_with_nafuda/rules.mk)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default/config.h (renamed from keyboards/quark/keymaps/default/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default/keymap.c (renamed from keyboards/quark/keymaps/default/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default/readme.md (renamed from keyboards/quark/keymaps/default/readme.md)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12/config.h (renamed from keyboards/quark/keymaps/default_4x12/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12/keymap.c (renamed from keyboards/quark/keymaps/default_4x12/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/config.h (renamed from keyboards/quark/keymaps/default_4x12_2x225u/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/keymap.c (renamed from keyboards/quark/keymaps/default_4x12_2x225u/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/config.h (renamed from keyboards/quark/keymaps/default_4x12_2x3u/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/keymap.c (renamed from keyboards/quark/keymaps/default_4x12_2x3u/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/config.h (renamed from keyboards/quark/keymaps/default_5x12_2x3u/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/keymap.c (renamed from keyboards/quark/keymaps/default_5x12_2x3u/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_mit/config.h (renamed from keyboards/quark/keymaps/default_mit/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/default_mit/keymap.c (renamed from keyboards/quark/keymaps/default_mit/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/pezhore/config.h (renamed from keyboards/quark/keymaps/pezhore/config.h)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/pezhore/keymap.c (renamed from keyboards/quark/keymaps/pezhore/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/via/keymap.c (renamed from keyboards/quark/keymaps/via/keymap.c)0
-rw-r--r--keyboards/checkerboards/quark/keymaps/via/rules.mk (renamed from keyboards/bakeneko65/rev2/keymaps/via/rules.mk)0
-rw-r--r--keyboards/checkerboards/quark/quark.c (renamed from keyboards/quark/quark.c)0
-rw-r--r--keyboards/checkerboards/quark/quark.h (renamed from keyboards/quark/quark.h)0
-rw-r--r--keyboards/checkerboards/quark/readme.md15
-rw-r--r--keyboards/checkerboards/quark/rules.mk (renamed from keyboards/quark/rules.mk)0
-rw-r--r--keyboards/chidori/readme.md15
-rw-r--r--keyboards/chili/readme.md15
-rw-r--r--keyboards/chimera_ergo/config.h67
-rw-r--r--keyboards/chimera_ergo/matrix.c164
-rw-r--r--keyboards/chimera_ergo/readme.md16
-rw-r--r--keyboards/chimera_ergo/rules.mk20
-rw-r--r--keyboards/chimera_ls/config.h67
-rw-r--r--keyboards/chimera_ls/matrix.c168
-rw-r--r--keyboards/chimera_ls/readme.md15
-rw-r--r--keyboards/chimera_ls/rules.mk27
-rw-r--r--keyboards/chimera_ortho/config.h67
-rw-r--r--keyboards/chimera_ortho/matrix.c154
-rw-r--r--keyboards/chimera_ortho/readme.md19
-rw-r--r--keyboards/chimera_ortho/rules.mk20
-rw-r--r--keyboards/chimera_ortho_plus/config.h67
-rw-r--r--keyboards/chimera_ortho_plus/matrix.c154
-rw-r--r--keyboards/chimera_ortho_plus/readme.md15
-rw-r--r--keyboards/chimera_ortho_plus/rules.mk23
-rw-r--r--keyboards/choc_taro/readme.md15
-rw-r--r--keyboards/choco60/readme.md17
-rw-r--r--keyboards/choco60/rules.mk1
-rw-r--r--keyboards/christmas_tree/readme.md14
-rw-r--r--keyboards/christmas_tree/rules.mk20
-rw-r--r--keyboards/claw44/claw44.h5
-rw-r--r--keyboards/claw44/readme.md15
-rw-r--r--keyboards/claw44/rules.mk20
-rw-r--r--keyboards/clueboard/17/info.json2
-rw-r--r--keyboards/clueboard/2x1800/2019/info.json2
-rw-r--r--keyboards/clueboard/60/info.json3
-rw-r--r--keyboards/clueboard/66/rev1/info.json2
-rw-r--r--keyboards/clueboard/66/rev2/info.json2
-rw-r--r--keyboards/clueboard/66/rev3/info.json2
-rw-r--r--keyboards/clueboard/66/rev4/info.json3
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/info.json3
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/rules.mk2
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/info.json2
-rw-r--r--keyboards/clueboard/california/info.json1
-rw-r--r--keyboards/clueboard/card/info.json2
-rw-r--r--keyboards/clueboard/info.json2
-rw-r--r--keyboards/coarse/ixora/config.h2
-rw-r--r--keyboards/coarse/vinta/config.h2
-rw-r--r--keyboards/cocoa40/readme.md15
-rw-r--r--keyboards/comet46/config.h73
-rw-r--r--keyboards/comet46/matrix.c154
-rw-r--r--keyboards/comet46/readme.md17
-rw-r--r--keyboards/comet46/rules.mk23
-rw-r--r--keyboards/contender/rules.mk5
-rw-r--r--keyboards/contra/keymaps/maxr1998/rules.mk2
-rw-r--r--keyboards/converter/m0110_usb/readme.md2
-rw-r--r--keyboards/converter/palm_usb/config.h55
-rw-r--r--keyboards/converter/palm_usb/matrix.c15
-rw-r--r--keyboards/converter/palm_usb/post_rules.mk7
-rw-r--r--keyboards/converter/palm_usb/rules.mk1
-rw-r--r--keyboards/converter/sun_usb/command_extra.c22
-rw-r--r--keyboards/converter/sun_usb/config.h47
-rw-r--r--keyboards/converter/sun_usb/led.c6
-rw-r--r--keyboards/converter/sun_usb/matrix.c27
-rw-r--r--keyboards/converter/sun_usb/post_rules.mk6
-rw-r--r--keyboards/converter/sun_usb/rules.mk1
-rw-r--r--keyboards/converter/usb_usb/ble/config.h4
-rw-r--r--keyboards/converter/usb_usb/ble/rules.mk2
-rw-r--r--keyboards/converter/usb_usb/custom_matrix.cpp6
-rw-r--r--keyboards/crkbd/keymaps/snowe/rules.mk2
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk1
-rw-r--r--keyboards/cu24/readme.md15
-rw-r--r--keyboards/cu75/cu75.c172
-rw-r--r--keyboards/cu75/cu75.h109
-rw-r--r--keyboards/cu75/readme.md17
-rw-r--r--keyboards/cu75/rules.mk12
-rw-r--r--keyboards/cu80/cu80.c1
-rw-r--r--keyboards/cu80/readme.md15
-rw-r--r--keyboards/cybergear/macro25/info.json2
-rw-r--r--keyboards/dailycraft/bat43/.noci (renamed from keyboards/angel64/alpha/.noci)0
-rw-r--r--keyboards/dailycraft/bat43/bat43.c (renamed from keyboards/bat43/bat43.c)0
-rw-r--r--keyboards/dailycraft/bat43/bat43.h10
-rw-r--r--keyboards/dailycraft/bat43/config.h (renamed from keyboards/bat43/config.h)0
-rw-r--r--keyboards/dailycraft/bat43/keymaps/default/keymap.c (renamed from keyboards/bat43/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/bat43/keymaps/default/readme.md (renamed from keyboards/bat43/keymaps/default/readme.md)0
-rw-r--r--keyboards/dailycraft/bat43/keymaps/via/keymap.c (renamed from keyboards/bat43/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/bat43/keymaps/via/readme.md (renamed from keyboards/bat43/keymaps/via/readme.md)0
-rw-r--r--keyboards/dailycraft/bat43/keymaps/via/rules.mk (renamed from keyboards/bakeneko65/rev3/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/bat43/readme.md26
-rw-r--r--keyboards/dailycraft/bat43/rev1/.noci (renamed from keyboards/bat43/.noci)0
-rw-r--r--keyboards/dailycraft/bat43/rev1/info.json (renamed from keyboards/bat43/rev1/info.json)0
-rw-r--r--keyboards/dailycraft/bat43/rev1/rev1.c (renamed from keyboards/bat43/rev1/rev1.c)0
-rw-r--r--keyboards/dailycraft/bat43/rev1/rev1.h (renamed from keyboards/bat43/rev1/rev1.h)0
-rw-r--r--keyboards/dailycraft/bat43/rev1/rules.mk (renamed from keyboards/bat43/rev1/rules.mk)0
-rw-r--r--keyboards/dailycraft/bat43/rev2/.noci (renamed from keyboards/bat43/rev1/.noci)0
-rw-r--r--keyboards/dailycraft/bat43/rev2/info.json (renamed from keyboards/bat43/rev2/info.json)0
-rw-r--r--keyboards/dailycraft/bat43/rev2/rev2.c (renamed from keyboards/bat43/rev2/rev2.c)0
-rw-r--r--keyboards/dailycraft/bat43/rev2/rev2.h (renamed from keyboards/bat43/rev2/rev2.h)0
-rw-r--r--keyboards/dailycraft/bat43/rev2/rules.mk (renamed from keyboards/bat43/rev2/rules.mk)0
-rw-r--r--keyboards/dailycraft/bat43/rules.mk20
-rw-r--r--keyboards/dailycraft/claw44/.noci (renamed from keyboards/bat43/rev2/.noci)0
-rw-r--r--keyboards/dailycraft/claw44/claw44.c (renamed from keyboards/claw44/claw44.c)0
-rw-r--r--keyboards/dailycraft/claw44/claw44.h5
-rw-r--r--keyboards/dailycraft/claw44/config.h (renamed from keyboards/claw44/config.h)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/default/config.h (renamed from keyboards/claw44/keymaps/default/config.h)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/default/keymap.c (renamed from keyboards/claw44/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/oled/config.h (renamed from keyboards/claw44/keymaps/oled/config.h)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/oled/keymap.c (renamed from keyboards/claw44/keymaps/oled/keymap.c)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/oled/rules.mk (renamed from keyboards/claw44/keymaps/oled/rules.mk)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/via/config.h (renamed from keyboards/claw44/keymaps/via/config.h)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/via/keymap.c (renamed from keyboards/claw44/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/claw44/keymaps/via/rules.mk (renamed from keyboards/barleycorn/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/claw44/lib/glcdfont.c (renamed from keyboards/claw44/lib/glcdfont.c)0
-rw-r--r--keyboards/dailycraft/claw44/readme.md26
-rw-r--r--keyboards/dailycraft/claw44/rev1/.noci (renamed from keyboards/bigseries/1key/.noci)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/config.h (renamed from keyboards/claw44/rev1/config.h)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/info.json (renamed from keyboards/claw44/rev1/info.json)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/readme.md (renamed from keyboards/claw44/rev1/readme.md)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/rev1.c (renamed from keyboards/7skb/rev1/rev1.c)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/rev1.h (renamed from keyboards/claw44/rev1/rev1.h)0
-rw-r--r--keyboards/dailycraft/claw44/rev1/rules.mk (renamed from keyboards/claw44/rev1/rules.mk)0
-rw-r--r--keyboards/dailycraft/claw44/rules.mk20
-rw-r--r--keyboards/dailycraft/owl8/config.h (renamed from keyboards/owl8/config.h)0
-rw-r--r--keyboards/dailycraft/owl8/info.json (renamed from keyboards/owl8/info.json)0
-rw-r--r--keyboards/dailycraft/owl8/keymaps/default/keymap.c (renamed from keyboards/owl8/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/owl8/keymaps/default/readme.md (renamed from keyboards/owl8/keymaps/default/readme.md)0
-rw-r--r--keyboards/dailycraft/owl8/keymaps/via/keymap.c (renamed from keyboards/owl8/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/owl8/keymaps/via/readme.md (renamed from keyboards/owl8/keymaps/via/readme.md)0
-rw-r--r--keyboards/dailycraft/owl8/keymaps/via/rules.mk (renamed from keyboards/bat43/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/owl8/owl8.c (renamed from keyboards/owl8/owl8.c)0
-rw-r--r--keyboards/dailycraft/owl8/owl8.h (renamed from keyboards/owl8/owl8.h)0
-rw-r--r--keyboards/dailycraft/owl8/readme.md26
-rw-r--r--keyboards/dailycraft/owl8/rules.mk (renamed from keyboards/owl8/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/config.h (renamed from keyboards/ergodash/config.h)0
-rw-r--r--keyboards/dailycraft/wings42/readme.md26
-rw-r--r--keyboards/dailycraft/wings42/rev1/config.h (renamed from keyboards/wings42/rev1/config.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/info.json (renamed from keyboards/wings42/rev1/info.json)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/keymaps/default/keymap.c (renamed from keyboards/wings42/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/keymaps/default/readme.md (renamed from keyboards/wings42/rev1/keymaps/default/readme.md)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/keymaps/via/keymap.c (renamed from keyboards/wings42/rev1/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/keymaps/via/rules.mk (renamed from keyboards/chili/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/readme.md26
-rw-r--r--keyboards/dailycraft/wings42/rev1/rev1.c (renamed from keyboards/wings42/rev1/rev1.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/rev1.h (renamed from keyboards/wings42/rev1/rev1.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev1/rules.mk (renamed from keyboards/7skb/rev1/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/config.h (renamed from keyboards/wings42/rev1_extkeys/config.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/info.json (renamed from keyboards/wings42/rev1_extkeys/info.json)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/keymap.c (renamed from keyboards/wings42/rev1_extkeys/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/readme.md (renamed from keyboards/wings42/rev1_extkeys/keymaps/default/readme.md)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/keymap.c (renamed from keyboards/wings42/rev1_extkeys/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/rules.mk (renamed from keyboards/choc_taro/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/readme.md26
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.c (renamed from keyboards/wings42/rev1_extkeys/rev1_extkeys.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.h (renamed from keyboards/wings42/rev1_extkeys/rev1_extkeys.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/rules.mk (renamed from keyboards/angel64/alpha/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/config.h (renamed from keyboards/wings42/rev2/config.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/info.json (renamed from keyboards/wings42/rev2/info.json)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/keymaps/default/keymap.c (renamed from keyboards/wings42/rev2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/keymaps/default/readme.md (renamed from keyboards/wings42/rev2/keymaps/default/readme.md)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/keymaps/via/config.h (renamed from keyboards/wings42/rev2/keymaps/via/config.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/keymaps/via/keymap.c (renamed from keyboards/wings42/rev2/keymaps/via/keymap.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/keymaps/via/rules.mk (renamed from keyboards/wings42/rev2/keymaps/via/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/readme.md26
-rw-r--r--keyboards/dailycraft/wings42/rev2/rev2.c (renamed from keyboards/wings42/rev2/rev2.c)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/rev2.h (renamed from keyboards/wings42/rev2/rev2.h)0
-rw-r--r--keyboards/dailycraft/wings42/rev2/rules.mk (renamed from keyboards/angel64/rev1/rules.mk)0
-rw-r--r--keyboards/dailycraft/wings42/rules.mk22
-rw-r--r--keyboards/dailycraft/wings42/wings42.c (renamed from keyboards/wings42/wings42.c)0
-rw-r--r--keyboards/dailycraft/wings42/wings42.h30
-rw-r--r--keyboards/dc01/arrow/matrix.c8
-rw-r--r--keyboards/dc01/left/matrix.c8
-rw-r--r--keyboards/dc01/numpad/matrix.c8
-rw-r--r--keyboards/dc01/right/matrix.c8
-rw-r--r--keyboards/delilah/readme.md22
-rw-r--r--keyboards/deltapad/rules.mk5
-rw-r--r--keyboards/deltasplit75/keymaps/default/keymap.c4
-rw-r--r--keyboards/dichotomy/config.h9
-rwxr-xr-xkeyboards/dichotomy/dichotomy.c8
-rwxr-xr-xkeyboards/dichotomy/matrix.c10
-rwxr-xr-xkeyboards/dichotomy/rules.mk4
-rw-r--r--keyboards/diverge3/readme.md20
-rw-r--r--keyboards/divergetm2/readme.md21
-rw-r--r--keyboards/dm9records/ergoinu/config.h10
-rw-r--r--keyboards/dm9records/ergoinu/ergoinu.c17
-rw-r--r--keyboards/dm9records/ergoinu/ergoinu.h5
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default/config.h24
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default/keymap.c41
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default/rules.mk18
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default_jis/config.h24
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c26
-rw-r--r--keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk18
-rw-r--r--keyboards/dm9records/ergoinu/matrix.c292
-rw-r--r--keyboards/dm9records/ergoinu/post_rules.mk9
-rw-r--r--keyboards/dm9records/ergoinu/readme.md9
-rw-r--r--keyboards/dm9records/ergoinu/rules.mk20
-rw-r--r--keyboards/dm9records/ergoinu/serial.c295
-rw-r--r--keyboards/dm9records/ergoinu/serial.h24
-rw-r--r--keyboards/dm9records/ergoinu/serial_config.h11
-rw-r--r--keyboards/dm9records/ergoinu/split_util.c56
-rw-r--r--keyboards/dm9records/ergoinu/split_util.h12
-rw-r--r--keyboards/dozen0/readme.md15
-rw-r--r--keyboards/drhigsby/bkf/bkf.c (renamed from keyboards/bkf/bkf.c)0
-rw-r--r--keyboards/drhigsby/bkf/bkf.h (renamed from keyboards/bkf/bkf.h)0
-rw-r--r--keyboards/drhigsby/bkf/config.h (renamed from keyboards/bkf/config.h)0
-rw-r--r--keyboards/drhigsby/bkf/info.json (renamed from keyboards/bkf/info.json)0
-rw-r--r--keyboards/drhigsby/bkf/keymaps/default/keymap.c (renamed from keyboards/bkf/keymaps/default/keymap.c)0
-rw-r--r--keyboards/drhigsby/bkf/keymaps/default/readme.md (renamed from keyboards/bkf/keymaps/default/readme.md)0
-rw-r--r--keyboards/drhigsby/bkf/readme.md21
-rw-r--r--keyboards/drhigsby/bkf/rules.mk (renamed from keyboards/bkf/rules.mk)0
-rw-r--r--keyboards/drhigsby/dubba175/config.h (renamed from keyboards/dubba175/config.h)0
-rw-r--r--keyboards/drhigsby/dubba175/dubba175.c (renamed from keyboards/dubba175/dubba175.c)0
-rw-r--r--keyboards/drhigsby/dubba175/dubba175.h (renamed from keyboards/dubba175/dubba175.h)0
-rw-r--r--keyboards/drhigsby/dubba175/info.json (renamed from keyboards/dubba175/info.json)0
-rw-r--r--keyboards/drhigsby/dubba175/keymaps/default/config.h (renamed from keyboards/dubba175/keymaps/default/config.h)0
-rw-r--r--keyboards/drhigsby/dubba175/keymaps/default/keymap.c (renamed from keyboards/dubba175/keymaps/default/keymap.c)0
-rw-r--r--keyboards/drhigsby/dubba175/keymaps/default/readme.md (renamed from keyboards/dubba175/keymaps/default/readme.md)0
-rw-r--r--keyboards/drhigsby/dubba175/keymaps/default/rules.mk (renamed from keyboards/adalyn/keymaps/default/rules.mk)0
-rw-r--r--keyboards/drhigsby/dubba175/readme.md15
-rw-r--r--keyboards/drhigsby/dubba175/rules.mk (renamed from keyboards/dubba175/rules.mk)0
-rw-r--r--keyboards/drhigsby/ogurec/config.h (renamed from keyboards/ogurec/config.h)0
-rw-r--r--keyboards/drhigsby/ogurec/info.json (renamed from keyboards/ogurec/info.json)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/dack/config.h (renamed from keyboards/ogurec/keymaps/dack/config.h)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/dack/keymap.c (renamed from keyboards/ogurec/keymaps/dack/keymap.c)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/dack/readme.md (renamed from keyboards/ogurec/keymaps/dack/readme.md)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/default/config.h (renamed from keyboards/ogurec/keymaps/default/config.h)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/default/keymap.c (renamed from keyboards/ogurec/keymaps/default/keymap.c)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/default/readme.md (renamed from keyboards/ogurec/keymaps/default/readme.md)0
-rw-r--r--keyboards/drhigsby/ogurec/keymaps/default/rules.mk (renamed from keyboards/dubba175/keymaps/default/rules.mk)0
-rw-r--r--keyboards/drhigsby/ogurec/left_pm/left_pm.h (renamed from keyboards/ogurec/left_pm/left_pm.h)0
-rw-r--r--keyboards/drhigsby/ogurec/left_pm/readme.md (renamed from keyboards/ogurec/left_pm/readme.md)0
-rw-r--r--keyboards/drhigsby/ogurec/left_pm/rules.mk (renamed from keyboards/infinity60/rev1/rules.mk)0
-rw-r--r--keyboards/drhigsby/ogurec/ogurec.c (renamed from keyboards/ogurec/ogurec.c)0
-rw-r--r--keyboards/drhigsby/ogurec/ogurec.h24
-rw-r--r--keyboards/drhigsby/ogurec/readme.md27
-rw-r--r--keyboards/drhigsby/ogurec/right_pm/readme.md (renamed from keyboards/ogurec/right_pm/readme.md)0
-rw-r--r--keyboards/drhigsby/ogurec/right_pm/right_pm.h (renamed from keyboards/ogurec/right_pm/right_pm.h)0
-rw-r--r--keyboards/drhigsby/ogurec/right_pm/rules.mk (renamed from keyboards/ivy/rev1/rules.mk)0
-rw-r--r--keyboards/drhigsby/ogurec/rules.mk19
-rw-r--r--keyboards/drhigsby/packrat/config.h (renamed from keyboards/packrat/config.h)0
-rw-r--r--keyboards/drhigsby/packrat/info.json (renamed from keyboards/packrat/info.json)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/3uc/config.h (renamed from keyboards/packrat/keymaps/3uc/config.h)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/3uc/keymap.c (renamed from keyboards/packrat/keymaps/3uc/keymap.c)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/3uc/readme.md (renamed from keyboards/packrat/keymaps/3uc/readme.md)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/3uc/rules.mk (renamed from keyboards/eggman/keymaps/default/rules.mk)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/default/config.h (renamed from keyboards/packrat/keymaps/default/config.h)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/default/keymap.c (renamed from keyboards/packrat/keymaps/default/keymap.c)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/default/readme.md (renamed from keyboards/packrat/keymaps/default/readme.md)0
-rw-r--r--keyboards/drhigsby/packrat/keymaps/default/rules.mk (renamed from keyboards/id80/ansi/keymaps/msf/rules.mk)0
-rw-r--r--keyboards/drhigsby/packrat/packrat.c (renamed from keyboards/packrat/packrat.c)0
-rw-r--r--keyboards/drhigsby/packrat/packrat.h (renamed from keyboards/packrat/packrat.h)0
-rw-r--r--keyboards/drhigsby/packrat/readme.md25
-rw-r--r--keyboards/drhigsby/packrat/rules.mk (renamed from keyboards/packrat/rules.mk)0
-rw-r--r--keyboards/dtisaac/cg108/rules.mk1
-rw-r--r--keyboards/dtisaac/dosa40rgb/readme.md2
-rw-r--r--keyboards/dtisaac/dosa40rgb/rules.mk3
-rw-r--r--keyboards/dubba175/readme.md15
-rw-r--r--keyboards/duck/jetfire/matrix.c6
-rw-r--r--keyboards/ducky/one2mini/1861st/1861st.c8
-rw-r--r--keyboards/ducky/one2mini/1861st/rules.mk3
-rw-r--r--keyboards/durgod/boards/DURGOD_STM32_F070/bootloader_defs.h7
-rw-r--r--keyboards/durgod/boards/DURGOD_STM32_F070/chconf.h2
-rw-r--r--keyboards/durgod/boards/DURGOD_STM32_F070/mcuconf.h2
-rw-r--r--keyboards/durgod/dgk6x/config.h3
-rw-r--r--keyboards/durgod/dgk6x/halconf.h3
-rw-r--r--keyboards/durgod/dgk6x/rules.mk4
-rw-r--r--keyboards/durgod/k3x0/config.h3
-rw-r--r--keyboards/durgod/k3x0/halconf.h2
-rw-r--r--keyboards/dyz/dyz60/info.json2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/matthewrobo/rules.mk2
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v2_1/config.h2
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/drootz/rules.mk2
-rw-r--r--keyboards/edi/hardlight/mk2/rules.mk7
-rw-r--r--keyboards/edi/standaside/config.h (renamed from keyboards/standaside/config.h)0
-rw-r--r--keyboards/edi/standaside/info.json (renamed from keyboards/standaside/info.json)0
-rw-r--r--keyboards/edi/standaside/keymaps/default/keymap.c (renamed from keyboards/standaside/keymaps/default/keymap.c)0
-rw-r--r--keyboards/edi/standaside/readme.md15
-rw-r--r--keyboards/edi/standaside/rules.mk (renamed from keyboards/standaside/rules.mk)0
-rw-r--r--keyboards/edi/standaside/standaside.c (renamed from keyboards/standaside/standaside.c)0
-rw-r--r--keyboards/edi/standaside/standaside.h (renamed from keyboards/standaside/standaside.h)0
-rw-r--r--keyboards/eggman/readme.md18
-rw-r--r--keyboards/ergo42/ergo42.h7
-rw-r--r--keyboards/ergo42/readme.md16
-rw-r--r--keyboards/ergo42/rules.mk22
-rw-r--r--keyboards/ergoarrows/readme.md17
-rw-r--r--keyboards/ergodash/ergodash.h11
-rw-r--r--keyboards/ergodash/mini/readme.md18
-rw-r--r--keyboards/ergodash/readme.md32
-rw-r--r--keyboards/ergodash/rules.mk22
-rw-r--r--keyboards/ergodox_ez/keymaps/default_glow/rules.mk2
-rw-r--r--keyboards/ergodox_infinity/readme.md66
-rw-r--r--keyboards/ergodox_stm32/ergodox_stm32.c5
-rw-r--r--keyboards/ergodox_stm32/matrix.c4
-rw-r--r--keyboards/ergodox_stm32/rules.mk5
-rw-r--r--keyboards/ergotaco/keymaps/default/readme.md6
-rw-r--r--keyboards/ergotaco/matrix.c331
-rw-r--r--keyboards/ergotaco/readme.md24
-rw-r--r--keyboards/espectro/readme.md15
-rw-r--r--keyboards/eternal_keypad/rules.mk2
-rw-r--r--keyboards/evyd13/wasdat/config.h10
-rw-r--r--keyboards/evyd13/wasdat/matrix.c299
-rw-r--r--keyboards/evyd13/wasdat/rules.mk3
-rw-r--r--keyboards/ez_maker/directpins/promicro/info.json2
-rw-r--r--keyboards/ez_maker/directpins/proton_c/info.json3
-rw-r--r--keyboards/ez_maker/directpins/teensy_2/info.json2
-rw-r--r--keyboards/ez_maker/directpins/teensy_2pp/info.json2
-rw-r--r--keyboards/ez_maker/directpins/teensy_32/info.json3
-rw-r--r--keyboards/ez_maker/directpins/teensy_lc/info.json3
-rw-r--r--keyboards/felix/readme.md13
-rw-r--r--keyboards/forever65/info.json3
-rw-r--r--keyboards/four_banger/readme.md14
-rw-r--r--keyboards/freyr/readme.md20
-rw-r--r--keyboards/frooastboard/info.json2
-rw-r--r--keyboards/gboards/butterstick/butterstick.c (renamed from keyboards/butterstick/butterstick.c)0
-rw-r--r--keyboards/gboards/butterstick/butterstick.h (renamed from keyboards/butterstick/butterstick.h)0
-rw-r--r--keyboards/gboards/butterstick/config.h (renamed from keyboards/butterstick/config.h)0
-rw-r--r--keyboards/gboards/butterstick/info.json (renamed from keyboards/butterstick/info.json)0
-rw-r--r--keyboards/gboards/butterstick/keymaps/default/keymap.c (renamed from keyboards/butterstick/keymaps/default/keymap.c)0
-rw-r--r--keyboards/gboards/butterstick/keymaps/dennytom/README.md (renamed from keyboards/butterstick/keymaps/dennytom/README.md)0
-rw-r--r--keyboards/gboards/butterstick/keymaps/dennytom/keymap.c (renamed from keyboards/butterstick/keymaps/dennytom/keymap.c)0
-rw-r--r--keyboards/gboards/butterstick/keymaps/dennytom/keymap_def.json (renamed from keyboards/butterstick/keymaps/dennytom/keymap_def.json)0
-rw-r--r--keyboards/gboards/butterstick/keymaps/dennytom/rules.mk (renamed from keyboards/butterstick/keymaps/dennytom/rules.mk)0
-rw-r--r--keyboards/gboards/butterstick/readme.md14
-rw-r--r--keyboards/gboards/butterstick/rules.mk (renamed from keyboards/butterstick/rules.mk)0
-rw-r--r--keyboards/gboards/butterstick/sten.c (renamed from keyboards/butterstick/sten.c)0
-rw-r--r--keyboards/gboards/butterstick/sten.h (renamed from keyboards/butterstick/sten.h)0
-rw-r--r--keyboards/gboards/ergotaco/config.h (renamed from keyboards/ergotaco/config.h)0
-rw-r--r--keyboards/gboards/ergotaco/ergotaco.c (renamed from keyboards/ergotaco/ergotaco.c)0
-rw-r--r--keyboards/gboards/ergotaco/ergotaco.h (renamed from keyboards/ergotaco/ergotaco.h)0
-rw-r--r--keyboards/gboards/ergotaco/info.json (renamed from keyboards/ergotaco/info.json)0
-rw-r--r--keyboards/gboards/ergotaco/keymaps/default/keymap.c (renamed from keyboards/ergotaco/keymaps/default/keymap.c)0
-rw-r--r--keyboards/gboards/ergotaco/keymaps/default/readme.md6
-rw-r--r--keyboards/gboards/ergotaco/keymaps/default/rules.mk (renamed from keyboards/ergotaco/keymaps/default/rules.mk)0
-rw-r--r--keyboards/gboards/ergotaco/matrix.c326
-rw-r--r--keyboards/gboards/ergotaco/post_rules.mk (renamed from keyboards/ergotaco/post_rules.mk)0
-rw-r--r--keyboards/gboards/ergotaco/readme.md24
-rw-r--r--keyboards/gboards/ergotaco/rules.mk (renamed from keyboards/ergotaco/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/config.h (renamed from keyboards/georgi/config.h)0
-rw-r--r--keyboards/gboards/georgi/georgi.c (renamed from keyboards/georgi/georgi.c)0
-rw-r--r--keyboards/gboards/georgi/georgi.h (renamed from keyboards/georgi/georgi.h)0
-rw-r--r--keyboards/gboards/georgi/info.json (renamed from keyboards/georgi/info.json)0
-rw-r--r--keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c (renamed from keyboards/georgi/keymaps/colemak-dh/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/colemak-dh/readme.md (renamed from keyboards/georgi/keymaps/colemak-dh/readme.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/colemak-dh/rules.mk (renamed from keyboards/georgi/keymaps/colemak-dh/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default-flipped/keymap.c (renamed from keyboards/georgi/keymaps/default-flipped/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default-flipped/readme.md (renamed from keyboards/georgi/keymaps/default-flipped/readme.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default-flipped/rules.mk (renamed from keyboards/georgi/keymaps/default-flipped/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default/keymap.c (renamed from keyboards/georgi/keymaps/default/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default/readme.md (renamed from keyboards/georgi/keymaps/default/readme.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/default/rules.mk (renamed from keyboards/georgi/keymaps/default/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/keymaps/dennytom/README.md (renamed from keyboards/georgi/keymaps/dennytom/README.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/dennytom/keymap.c (renamed from keyboards/georgi/keymaps/dennytom/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/dennytom/keymap_def.json (renamed from keyboards/georgi/keymaps/dennytom/keymap_def.json)0
-rw-r--r--keyboards/gboards/georgi/keymaps/dennytom/rules.mk (renamed from keyboards/georgi/keymaps/dennytom/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/keymaps/minimal/keymap.c (renamed from keyboards/georgi/keymaps/minimal/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/minimal/readme.md (renamed from keyboards/georgi/keymaps/minimal/readme.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/minimal/rules.mk (renamed from keyboards/georgi/keymaps/minimal/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/keymaps/norman/keymap.c (renamed from keyboards/georgi/keymaps/norman/keymap.c)0
-rw-r--r--keyboards/gboards/georgi/keymaps/norman/readme.md (renamed from keyboards/georgi/keymaps/norman/readme.md)0
-rw-r--r--keyboards/gboards/georgi/keymaps/norman/rules.mk (renamed from keyboards/georgi/keymaps/norman/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/matrix.c361
-rw-r--r--keyboards/gboards/georgi/readme.md32
-rw-r--r--keyboards/gboards/georgi/rules.mk (renamed from keyboards/georgi/rules.mk)0
-rw-r--r--keyboards/gboards/georgi/sten.c (renamed from keyboards/georgi/sten.c)0
-rw-r--r--keyboards/gboards/georgi/sten.h (renamed from keyboards/georgi/sten.h)0
-rw-r--r--keyboards/gboards/gergo/config.h (renamed from keyboards/gergo/config.h)0
-rw-r--r--keyboards/gboards/gergo/gergo.c (renamed from keyboards/gergo/gergo.c)0
-rw-r--r--keyboards/gboards/gergo/gergo.h (renamed from keyboards/gergo/gergo.h)0
-rw-r--r--keyboards/gboards/gergo/info.json (renamed from keyboards/gergo/info.json)0
-rw-r--r--keyboards/gboards/gergo/keymaps/abstractkb/config.h (renamed from keyboards/gergo/keymaps/abstractkb/config.h)0
-rw-r--r--keyboards/gboards/gergo/keymaps/abstractkb/keymap.c (renamed from keyboards/gergo/keymaps/abstractkb/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/abstractkb/readme.md10
-rw-r--r--keyboards/gboards/gergo/keymaps/abstractkb/rules.mk38
-rw-r--r--keyboards/gboards/gergo/keymaps/colemak/keymap.c (renamed from keyboards/gergo/keymaps/colemak/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/colemak/readme.md16
-rw-r--r--keyboards/gboards/gergo/keymaps/colemak/rules.mk (renamed from keyboards/gergo/keymaps/colemak/rules.mk)0
-rw-r--r--keyboards/gboards/gergo/keymaps/default/config.h (renamed from keyboards/gergo/keymaps/default/config.h)0
-rw-r--r--keyboards/gboards/gergo/keymaps/default/keymap.c (renamed from keyboards/gergo/keymaps/default/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/default/readme.md10
-rw-r--r--keyboards/gboards/gergo/keymaps/default/rules.mk38
-rw-r--r--keyboards/gboards/gergo/keymaps/drashna/keymap.c (renamed from keyboards/gergo/keymaps/drashna/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/drashna/rules.mk (renamed from keyboards/gergo/keymaps/drashna/rules.mk)0
-rw-r--r--keyboards/gboards/gergo/keymaps/germ/config.h (renamed from keyboards/gergo/keymaps/germ/config.h)0
-rw-r--r--keyboards/gboards/gergo/keymaps/germ/keymap.c (renamed from keyboards/gergo/keymaps/germ/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/germ/readme.md10
-rw-r--r--keyboards/gboards/gergo/keymaps/germ/rules.mk38
-rw-r--r--keyboards/gboards/gergo/keymaps/gotham/config.h (renamed from keyboards/gergo/keymaps/gotham/config.h)0
-rw-r--r--keyboards/gboards/gergo/keymaps/gotham/keymap.c (renamed from keyboards/gergo/keymaps/gotham/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/gotham/readme.md (renamed from keyboards/gergo/keymaps/gotham/readme.md)0
-rw-r--r--keyboards/gboards/gergo/keymaps/gotham/rules.mk38
-rw-r--r--keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/config.h (renamed from keyboards/gergo/keymaps/manna-harbour_miryoku/config.h)0
-rw-r--r--keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/keymap.c (renamed from keyboards/gergo/keymaps/manna-harbour_miryoku/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/oled/config.h4
-rw-r--r--keyboards/gboards/gergo/keymaps/oled/glcdfont.c (renamed from keyboards/gergo/keymaps/oled/glcdfont.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/oled/keymap.c (renamed from keyboards/gergo/keymaps/oled/keymap.c)0
-rw-r--r--keyboards/gboards/gergo/keymaps/oled/readme.md10
-rw-r--r--keyboards/gboards/gergo/keymaps/oled/rules.mk40
-rw-r--r--keyboards/gboards/gergo/matrix.c440
-rw-r--r--keyboards/gboards/gergo/readme.md26
-rw-r--r--keyboards/gboards/gergo/rules.mk (renamed from keyboards/gergo/rules.mk)0
-rw-r--r--keyboards/gboards/gergoplex/matrix.c5
-rw-r--r--keyboards/gboards/readme.md6
-rw-r--r--keyboards/geminate60/readme.md16
-rw-r--r--keyboards/georgi/matrix.c366
-rw-r--r--keyboards/georgi/readme.md32
-rw-r--r--keyboards/gergo/keymaps/abstractkb/readme.md10
-rw-r--r--keyboards/gergo/keymaps/abstractkb/rules.mk37
-rw-r--r--keyboards/gergo/keymaps/colemak/readme.md16
-rw-r--r--keyboards/gergo/keymaps/default/readme.md10
-rw-r--r--keyboards/gergo/keymaps/default/rules.mk37
-rw-r--r--keyboards/gergo/keymaps/germ/readme.md10
-rw-r--r--keyboards/gergo/keymaps/germ/rules.mk37
-rw-r--r--keyboards/gergo/keymaps/gotham/rules.mk37
-rw-r--r--keyboards/gergo/keymaps/oled/config.h4
-rw-r--r--keyboards/gergo/keymaps/oled/readme.md10
-rw-r--r--keyboards/gergo/keymaps/oled/rules.mk39
-rw-r--r--keyboards/gergo/matrix.c445
-rw-r--r--keyboards/gergo/readme.md26
-rw-r--r--keyboards/getta25/getta25.h7
-rw-r--r--keyboards/getta25/readme.md17
-rw-r--r--keyboards/getta25/rules.mk21
-rw-r--r--keyboards/gingham/readme.md23
-rw-r--r--keyboards/glenpickle/chimera_ergo/chimera_ergo.c (renamed from keyboards/chimera_ergo/chimera_ergo.c)0
-rw-r--r--keyboards/glenpickle/chimera_ergo/chimera_ergo.h (renamed from keyboards/chimera_ergo/chimera_ergo.h)0
-rw-r--r--keyboards/glenpickle/chimera_ergo/config.h58
-rw-r--r--keyboards/glenpickle/chimera_ergo/info.json (renamed from keyboards/chimera_ergo/info.json)0
-rw-r--r--keyboards/glenpickle/chimera_ergo/keymaps/default/keymap.c (renamed from keyboards/chimera_ergo/keymaps/default/keymap.c)0
-rw-r--r--keyboards/glenpickle/chimera_ergo/matrix.c65
-rw-r--r--keyboards/glenpickle/chimera_ergo/readme.md16
-rw-r--r--keyboards/glenpickle/chimera_ergo/rules.mk23
-rw-r--r--keyboards/glenpickle/chimera_ls/chimera_ls.c (renamed from keyboards/chimera_ls/chimera_ls.c)0
-rw-r--r--keyboards/glenpickle/chimera_ls/chimera_ls.h (renamed from keyboards/chimera_ls/chimera_ls.h)0
-rw-r--r--keyboards/glenpickle/chimera_ls/config.h58
-rw-r--r--keyboards/glenpickle/chimera_ls/info.json (renamed from keyboards/chimera_ls/info.json)0
-rw-r--r--keyboards/glenpickle/chimera_ls/keymaps/default/keymap.c (renamed from keyboards/chimera_ls/keymaps/default/keymap.c)0
-rw-r--r--keyboards/glenpickle/chimera_ls/matrix.c65
-rw-r--r--keyboards/glenpickle/chimera_ls/readme.md15
-rw-r--r--keyboards/glenpickle/chimera_ls/rules.mk30
-rw-r--r--keyboards/glenpickle/chimera_ortho/chimera_ortho.c (renamed from keyboards/chimera_ortho/chimera_ortho.c)0
-rw-r--r--keyboards/glenpickle/chimera_ortho/chimera_ortho.h (renamed from keyboards/chimera_ortho/chimera_ortho.h)0
-rw-r--r--keyboards/glenpickle/chimera_ortho/config.h58
-rw-r--r--keyboards/glenpickle/chimera_ortho/info.json (renamed from keyboards/chimera_ortho/info.json)0
-rw-r--r--keyboards/glenpickle/chimera_ortho/keymaps/default/config.h (renamed from keyboards/chimera_ortho/keymaps/default/config.h)0
-rw-r--r--keyboards/glenpickle/chimera_ortho/keymaps/default/keymap.c (renamed from keyboards/chimera_ortho/keymaps/default/keymap.c)0
-rw-r--r--keyboards/glenpickle/chimera_ortho/matrix.c65
-rw-r--r--keyboards/glenpickle/chimera_ortho/readme.md19
-rw-r--r--keyboards/glenpickle/chimera_ortho/rules.mk23
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.c (renamed from keyboards/chimera_ortho_plus/chimera_ortho_plus.c)0
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.h (renamed from keyboards/chimera_ortho_plus/chimera_ortho_plus.h)0
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/config.h58
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/info.json (renamed from keyboards/chimera_ortho_plus/info.json)0
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/keymaps/default/config.h (renamed from keyboards/chimera_ortho_plus/keymaps/default/config.h)0
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/keymaps/default/keymap.c (renamed from keyboards/chimera_ortho_plus/keymaps/default/keymap.c)0
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/matrix.c65
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/readme.md15
-rw-r--r--keyboards/glenpickle/chimera_ortho_plus/rules.mk24
-rw-r--r--keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c154
-rw-r--r--keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h185
-rw-r--r--keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk2
-rw-r--r--keyboards/gmmk/pro/iso/keymaps/vitoni/config.h20
-rw-r--r--keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c148
-rw-r--r--keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc104
-rw-r--r--keyboards/gurindam/readme.md23
-rw-r--r--keyboards/halberd/readme.md15
-rw-r--r--keyboards/handwired/42/rules.mk2
-rw-r--r--keyboards/handwired/bdn9_ble/rules.mk2
-rw-r--r--keyboards/handwired/carpolly/rules.mk1
-rw-r--r--keyboards/handwired/croxsplit44/rules.mk7
-rw-r--r--keyboards/handwired/dactyl/matrix.c8
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk2
-rw-r--r--keyboards/handwired/dygma/raise/rules.mk2
-rw-r--r--keyboards/handwired/frenchdev/matrix.c6
-rw-r--r--keyboards/handwired/fruity60/rules.mk2
-rw-r--r--keyboards/handwired/hillside/0_1/info.json96
-rw-r--r--keyboards/handwired/hillside/0_1/keymaps/default/keymap.json101
-rw-r--r--keyboards/handwired/hillside/0_1/keymaps/default/readme.md212
-rwxr-xr-xkeyboards/handwired/hillside/0_1/keymaps/json2hill.py (renamed from keyboards/handwired/hillside/keymaps/json2hill.py)0
-rw-r--r--keyboards/handwired/hillside/0_1/keymaps/via/keymap.json61
-rw-r--r--keyboards/handwired/hillside/0_1/readme.md29
-rw-r--r--keyboards/handwired/hillside/info.json93
-rw-r--r--keyboards/handwired/hillside/keymaps/default/keymap.json102
-rw-r--r--keyboards/handwired/hillside/keymaps/default/readme.md216
-rw-r--r--keyboards/handwired/hillside/keymaps/via/keymap.json101
-rw-r--r--keyboards/handwired/hillside/readme.md26
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.c (renamed from keyboards/handwired/ms_sculpt_mobile/babblePaste.c)0
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.h (renamed from keyboards/handwired/ms_sculpt_mobile/babblePaste.h)0
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.txt (renamed from keyboards/handwired/ms_sculpt_mobile/babblePaste.txt)0
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk3
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/rules.mk3
-rw-r--r--keyboards/handwired/not_so_minidox/config.h5
-rw-r--r--keyboards/handwired/not_so_minidox/i2c.c162
-rw-r--r--keyboards/handwired/not_so_minidox/i2c.h46
-rw-r--r--keyboards/handwired/not_so_minidox/keymaps/default/keymap.c56
-rw-r--r--keyboards/handwired/not_so_minidox/matrix.c308
-rw-r--r--keyboards/handwired/not_so_minidox/rules.mk17
-rw-r--r--keyboards/handwired/not_so_minidox/serial.c228
-rw-r--r--keyboards/handwired/not_so_minidox/serial.h23
-rw-r--r--keyboards/handwired/not_so_minidox/split_util.c84
-rw-r--r--keyboards/handwired/not_so_minidox/split_util.h17
-rw-r--r--keyboards/handwired/onekey/nucleo_l432kc/config.h21
-rw-r--r--keyboards/handwired/onekey/nucleo_l432kc/readme.md5
-rw-r--r--keyboards/handwired/onekey/nucleo_l432kc/rules.mk5
-rw-r--r--keyboards/handwired/onekey/teensy_32/rules.mk3
-rw-r--r--keyboards/handwired/onekey/teensy_lc/rules.mk3
-rw-r--r--keyboards/handwired/ortho_brass/rules.mk7
-rw-r--r--keyboards/handwired/prkl30/feather/rules.mk2
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c6
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c6
-rw-r--r--keyboards/handwired/promethium/matrix.c8
-rw-r--r--keyboards/handwired/promethium/promethium.c4
-rw-r--r--keyboards/handwired/promethium/rules.mk2
-rw-r--r--keyboards/handwired/pterodactyl/matrix.c8
-rw-r--r--keyboards/handwired/pterodactyl/rules.mk2
-rw-r--r--keyboards/handwired/qc60/config.h2
-rw-r--r--keyboards/handwired/slash/rules.mk2
-rw-r--r--keyboards/handwired/tractyl_manuform/4x6_right/rules.mk6
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/config.h1
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h3
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c4
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/rules.mk2
-rw-r--r--keyboards/handwired/tractyl_manuform/config.h7
-rw-r--r--keyboards/handwired/tractyl_manuform/tm_sync.c180
-rw-r--r--keyboards/handwired/tractyl_manuform/tractyl_manuform.c421
-rw-r--r--keyboards/handwired/tractyl_manuform/tractyl_manuform.h111
-rw-r--r--keyboards/handwired/twadlee/tp69/rules.mk3
-rw-r--r--keyboards/handwired/wakizashi40/config.h20
-rw-r--r--keyboards/handwired/wakizashi40/info.json88
-rw-r--r--keyboards/handwired/wakizashi40/keymaps/default/keymap.c44
-rw-r--r--keyboards/handwired/wakizashi40/keymaps/via/keymap.c92
-rw-r--r--keyboards/handwired/wakizashi40/keymaps/via/rules.mk4
-rw-r--r--keyboards/handwired/wakizashi40/readme.md19
-rw-r--r--keyboards/handwired/wakizashi40/rules.mk1
-rw-r--r--keyboards/hecomi/readme.md17
-rw-r--r--keyboards/hecomi/rules.mk21
-rw-r--r--keyboards/helix/pico/matrix.c6
-rw-r--r--keyboards/helix/rev1/matrix.c6
-rw-r--r--keyboards/helix/rev2/matrix.c6
-rw-r--r--keyboards/hhkb/ansi/matrix.c9
-rw-r--r--keyboards/hhkb/ansi/post_rules.mk12
-rw-r--r--keyboards/hhkb/jp/matrix.c9
-rw-r--r--keyboards/hhkb/jp/post_rules.mk12
-rwxr-xr-xkeyboards/hid_liber/matrix.c265
-rwxr-xr-xkeyboards/hid_liber/readme.md17
-rw-r--r--keyboards/hnahkb/freyr/config.h (renamed from keyboards/freyr/config.h)0
-rw-r--r--keyboards/hnahkb/freyr/freyr.c (renamed from keyboards/freyr/freyr.c)0
-rw-r--r--keyboards/hnahkb/freyr/freyr.h (renamed from keyboards/freyr/freyr.h)0
-rw-r--r--keyboards/hnahkb/freyr/info.json (renamed from keyboards/freyr/info.json)0
-rw-r--r--keyboards/hnahkb/freyr/keymaps/default/keymap.c (renamed from keyboards/freyr/keymaps/default/keymap.c)0
-rw-r--r--keyboards/hnahkb/freyr/keymaps/default/readme.md (renamed from keyboards/freyr/keymaps/default/readme.md)0
-rw-r--r--keyboards/hnahkb/freyr/readme.md20
-rw-r--r--keyboards/hnahkb/freyr/rules.mk (renamed from keyboards/freyr/rules.mk)0
-rw-r--r--keyboards/hnahkb/stella/config.h (renamed from keyboards/stella/config.h)0
-rw-r--r--keyboards/hnahkb/stella/info.json (renamed from keyboards/stella/info.json)0
-rw-r--r--keyboards/hnahkb/stella/keymaps/default/keymap.c (renamed from keyboards/stella/keymaps/default/keymap.c)0
-rw-r--r--keyboards/hnahkb/stella/keymaps/default/readme.md (renamed from keyboards/stella/keymaps/default/readme.md)0
-rw-r--r--keyboards/hnahkb/stella/readme.md19
-rw-r--r--keyboards/hnahkb/stella/rules.mk (renamed from keyboards/stella/rules.mk)0
-rw-r--r--keyboards/hnahkb/stella/stella.c (renamed from keyboards/stella/stella.c)0
-rw-r--r--keyboards/hnahkb/stella/stella.h (renamed from keyboards/stella/stella.h)0
-rw-r--r--keyboards/hnahkb/vn66/config.h (renamed from keyboards/vn66/config.h)0
-rw-r--r--keyboards/hnahkb/vn66/info.json (renamed from keyboards/vn66/info.json)0
-rw-r--r--keyboards/hnahkb/vn66/keymaps/default/keymap.c (renamed from keyboards/vn66/keymaps/default/keymap.c)0
-rw-r--r--keyboards/hnahkb/vn66/keymaps/default/readme.md (renamed from keyboards/vn66/keymaps/default/readme.md)0
-rw-r--r--keyboards/hnahkb/vn66/readme.md19
-rw-r--r--keyboards/hnahkb/vn66/rules.mk (renamed from keyboards/vn66/rules.mk)0
-rw-r--r--keyboards/hnahkb/vn66/vn66.c (renamed from keyboards/vn66/vn66.c)0
-rw-r--r--keyboards/hnahkb/vn66/vn66.h (renamed from keyboards/vn66/vn66.h)0
-rwxr-xr-xkeyboards/honeycomb/config.h9
-rwxr-xr-xkeyboards/honeycomb/honeycomb.c6
-rwxr-xr-xkeyboards/honeycomb/matrix.c10
-rwxr-xr-xkeyboards/honeycomb/rules.mk4
-rw-r--r--keyboards/ibnuda/alicia_cook/alicia_cook.c (renamed from keyboards/alicia_cook/alicia_cook.c)0
-rw-r--r--keyboards/ibnuda/alicia_cook/alicia_cook.h (renamed from keyboards/alicia_cook/alicia_cook.h)0
-rw-r--r--keyboards/ibnuda/alicia_cook/config.h (renamed from keyboards/alicia_cook/config.h)0
-rw-r--r--keyboards/ibnuda/alicia_cook/info.json (renamed from keyboards/alicia_cook/info.json)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/default/keymap.c (renamed from keyboards/alicia_cook/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/default/readme.md (renamed from keyboards/alicia_cook/keymaps/default/readme.md)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/rick/config.h (renamed from keyboards/alicia_cook/keymaps/rick/config.h)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c (renamed from keyboards/alicia_cook/keymaps/rick/keymap.c)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/rick/readme.md (renamed from keyboards/alicia_cook/keymaps/rick/readme.md)0
-rw-r--r--keyboards/ibnuda/alicia_cook/keymaps/rick/rules.mk (renamed from keyboards/alicia_cook/keymaps/rick/rules.mk)0
-rw-r--r--keyboards/ibnuda/alicia_cook/readme.md26
-rw-r--r--keyboards/ibnuda/alicia_cook/rules.mk (renamed from keyboards/alicia_cook/rules.mk)0
-rw-r--r--keyboards/ibnuda/gurindam/config.h (renamed from keyboards/gurindam/config.h)0
-rw-r--r--keyboards/ibnuda/gurindam/gurindam.c (renamed from keyboards/gurindam/gurindam.c)0
-rw-r--r--keyboards/ibnuda/gurindam/gurindam.h (renamed from keyboards/gurindam/gurindam.h)0
-rw-r--r--keyboards/ibnuda/gurindam/info.json (renamed from keyboards/gurindam/info.json)0
-rw-r--r--keyboards/ibnuda/gurindam/keymaps/default/keymap.c (renamed from keyboards/gurindam/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ibnuda/gurindam/keymaps/default/readme.md (renamed from keyboards/gurindam/keymaps/default/readme.md)0
-rw-r--r--keyboards/ibnuda/gurindam/keymaps/via/keymap.c (renamed from keyboards/gurindam/keymaps/via/keymap.c)0
-rw-r--r--keyboards/ibnuda/gurindam/keymaps/via/rules.mk (renamed from keyboards/7skb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/ibnuda/gurindam/readme.md23
-rw-r--r--keyboards/ibnuda/gurindam/rules.mk (renamed from keyboards/gurindam/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/config.h (renamed from keyboards/squiggle/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default/config.h (renamed from keyboards/squiggle/keymaps/default/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default/keymap.c (renamed from keyboards/squiggle/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default/readme.md (renamed from keyboards/squiggle/keymaps/default/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default/rules.mk (renamed from keyboards/le_chiffre/keymaps/default/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default38/config.h (renamed from keyboards/squiggle/keymaps/default38/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default38/keymap.c (renamed from keyboards/squiggle/keymaps/default38/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default38/readme.md (renamed from keyboards/squiggle/keymaps/default38/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/default38/rules.mk (renamed from keyboards/minidox/keymaps/rsthd_combos/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h (renamed from keyboards/squiggle/keymaps/defaultfull/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c (renamed from keyboards/squiggle/keymaps/defaultfull/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultfull/readme.md (renamed from keyboards/squiggle/keymaps/defaultfull/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultfull/rules.mk (renamed from keyboards/ogurec/keymaps/default/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h (renamed from keyboards/squiggle/keymaps/defaultminidox/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c (renamed from keyboards/squiggle/keymaps/defaultminidox/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultminidox/readme.md (renamed from keyboards/squiggle/keymaps/defaultminidox/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/defaultminidox/rules.mk (renamed from keyboards/packrat/keymaps/3uc/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h (renamed from keyboards/squiggle/keymaps/rick-complicated/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c (renamed from keyboards/squiggle/keymaps/rick-complicated/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick-complicated/readme.md (renamed from keyboards/squiggle/keymaps/rick-complicated/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick-complicated/rules.mk (renamed from keyboards/squiggle/keymaps/rick-complicated/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick/config.h (renamed from keyboards/squiggle/keymaps/rick/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick/keymap.c (renamed from keyboards/squiggle/keymaps/rick/keymap.c)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick/readme.md (renamed from keyboards/squiggle/keymaps/rick/readme.md)0
-rw-r--r--keyboards/ibnuda/squiggle/keymaps/rick/rules.mk (renamed from keyboards/packrat/keymaps/default/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/readme.md24
-rw-r--r--keyboards/ibnuda/squiggle/rev1/.noci (renamed from keyboards/bigseries/2key/.noci)0
-rw-r--r--keyboards/ibnuda/squiggle/rev1/config.h (renamed from keyboards/squiggle/rev1/config.h)0
-rw-r--r--keyboards/ibnuda/squiggle/rev1/info.json (renamed from keyboards/squiggle/rev1/info.json)0
-rw-r--r--keyboards/ibnuda/squiggle/rev1/rev1.c (renamed from keyboards/claw44/rev1/rev1.c)0
-rw-r--r--keyboards/ibnuda/squiggle/rev1/rev1.h (renamed from keyboards/squiggle/rev1/rev1.h)0
-rw-r--r--keyboards/ibnuda/squiggle/rev1/rules.mk (renamed from keyboards/squiggle/rev1/rules.mk)0
-rw-r--r--keyboards/ibnuda/squiggle/rules.mk1
-rw-r--r--keyboards/ibnuda/squiggle/squiggle.c (renamed from keyboards/squiggle/squiggle.c)0
-rw-r--r--keyboards/ibnuda/squiggle/squiggle.h23
-rw-r--r--keyboards/id67/readme.md29
-rw-r--r--keyboards/id80/id80.c16
-rw-r--r--keyboards/id80/readme.md27
-rw-r--r--keyboards/id80/rules.mk24
-rw-r--r--keyboards/id87/id87.c15
-rw-r--r--keyboards/id87/readme.md19
-rw-r--r--keyboards/idobao/id67/default_rgb/config.h (renamed from keyboards/id67/default_rgb/config.h)0
-rw-r--r--keyboards/idobao/id67/default_rgb/default_rgb.c (renamed from keyboards/id67/default_rgb/default_rgb.c)0
-rw-r--r--keyboards/idobao/id67/default_rgb/default_rgb.h (renamed from keyboards/id67/default_rgb/default_rgb.h)0
-rw-r--r--keyboards/idobao/id67/default_rgb/info.json (renamed from keyboards/id67/default_rgb/info.json)0
-rw-r--r--keyboards/idobao/id67/default_rgb/readme.md (renamed from keyboards/id67/default_rgb/readme.md)0
-rw-r--r--keyboards/idobao/id67/default_rgb/rules.mk (renamed from keyboards/id67/default_rgb/rules.mk)0
-rw-r--r--keyboards/idobao/id67/keymaps/default/keymap.c (renamed from keyboards/id67/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id67/keymaps/via/keymap.c (renamed from keyboards/id67/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/id67/keymaps/via/rules.mk (renamed from keyboards/id67/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/id67/readme.md29
-rw-r--r--keyboards/idobao/id67/rgb/config.h (renamed from keyboards/id67/rgb/config.h)0
-rw-r--r--keyboards/idobao/id67/rgb/info.json (renamed from keyboards/id67/rgb/info.json)0
-rw-r--r--keyboards/idobao/id67/rgb/keymaps/default/keymap.c (renamed from keyboards/id67/rgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id67/rgb/keymaps/thewerther/config.h (renamed from keyboards/id67/rgb/keymaps/thewerther/config.h)0
-rw-r--r--keyboards/idobao/id67/rgb/keymaps/thewerther/keymap.c (renamed from keyboards/id67/rgb/keymaps/thewerther/keymap.c)0
-rw-r--r--keyboards/idobao/id67/rgb/keymaps/thewerther/rules.mk (renamed from keyboards/id67/rgb/keymaps/thewerther/rules.mk)0
-rw-r--r--keyboards/idobao/id67/rgb/readme.md (renamed from keyboards/id67/rgb/readme.md)0
-rw-r--r--keyboards/idobao/id67/rgb/rgb.c (renamed from keyboards/id67/rgb/rgb.c)0
-rw-r--r--keyboards/idobao/id67/rgb/rgb.h (renamed from keyboards/id67/rgb/rgb.h)0
-rw-r--r--keyboards/idobao/id67/rgb/rules.mk (renamed from keyboards/id67/rgb/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/default/keymap.c (renamed from keyboards/idobo/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/default/readme.md (renamed from keyboards/idobo/keymaps/default/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/default75/keymap.c (renamed from keyboards/idobo/keymaps/default75/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/default75/readme.md (renamed from keyboards/idobo/keymaps/default75/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/drewdobo/config.h (renamed from keyboards/idobo/keymaps/drewdobo/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/drewdobo/keymap.c (renamed from keyboards/idobo/keymaps/drewdobo/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/drewdobo/readme.md (renamed from keyboards/idobo/keymaps/drewdobo/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/drewdobo/rules.mk (renamed from keyboards/idobo/keymaps/drewdobo/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/egstad/config.h (renamed from keyboards/idobo/keymaps/egstad/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/egstad/keymap.c (renamed from keyboards/idobo/keymaps/egstad/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/egstad/readme.md (renamed from keyboards/idobo/keymaps/egstad/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/egstad/rules.mk (renamed from keyboards/idobo/keymaps/egstad/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd/config.h (renamed from keyboards/idobo/keymaps/gkbd/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd/keymap.c (renamed from keyboards/idobo/keymaps/gkbd/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd/readme.md (renamed from keyboards/idobo/keymaps/gkbd/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd/rules.mk (renamed from keyboards/idobo/keymaps/gkbd/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_75/config.h (renamed from keyboards/idobo/keymaps/gkbd_75/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_75/keymap.c (renamed from keyboards/idobo/keymaps/gkbd_75/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_75/readme.md (renamed from keyboards/idobo/keymaps/gkbd_75/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_orthon/config.h (renamed from keyboards/idobo/keymaps/gkbd_orthon/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c (renamed from keyboards/idobo/keymaps/gkbd_orthon/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/gkbd_orthon/readme.md (renamed from keyboards/idobo/keymaps/gkbd_orthon/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json (renamed from keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json)0
-rw-r--r--keyboards/idobao/id75/keymaps/greenshadowmaker/keymap.c (renamed from keyboards/idobo/keymaps/greenshadowmaker/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/greenshadowmaker/readme.md (renamed from keyboards/idobo/keymaps/greenshadowmaker/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/greenshadowmaker/rules.mk (renamed from keyboards/idobo/keymaps/greenshadowmaker/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/ifohancroft/config.h (renamed from keyboards/idobo/keymaps/ifohancroft/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/ifohancroft/keymap.c (renamed from keyboards/idobo/keymaps/ifohancroft/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/ifohancroft/readme.md (renamed from keyboards/idobo/keymaps/ifohancroft/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/ifohancroft/rules.mk (renamed from keyboards/idobo/keymaps/ifohancroft/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/pathnirvana/config.h (renamed from keyboards/idobo/keymaps/pathnirvana/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/pathnirvana/keymap.c (renamed from keyboards/idobo/keymaps/pathnirvana/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/pathnirvana/rules.mk (renamed from keyboards/idobo/keymaps/pathnirvana/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/config.h (renamed from keyboards/idobo/keymaps/revok75/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/keymap.c (renamed from keyboards/idobo/keymaps/revok75/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/readme.md (renamed from keyboards/idobo/keymaps/revok75/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/revok75/rules.mk (renamed from keyboards/idobo/keymaps/revok75/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/via/keymap.c (renamed from keyboards/idobo/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/via/rules.mk (renamed from keyboards/claw44/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h (renamed from keyboards/idobo/keymaps/xaceofspaidsx/config.h)0
-rw-r--r--keyboards/idobao/id75/keymaps/xaceofspaidsx/keymap.c (renamed from keyboards/idobo/keymaps/xaceofspaidsx/keymap.c)0
-rw-r--r--keyboards/idobao/id75/keymaps/xaceofspaidsx/readme.md (renamed from keyboards/idobo/keymaps/xaceofspaidsx/readme.md)0
-rw-r--r--keyboards/idobao/id75/keymaps/xaceofspaidsx/rules.mk (renamed from keyboards/idobo/keymaps/xaceofspaidsx/rules.mk)0
-rw-r--r--keyboards/idobao/id75/v1/config.h122
-rw-r--r--keyboards/idobao/id75/v1/info.json (renamed from keyboards/idobo/info.json)0
-rw-r--r--keyboards/idobao/id75/v1/readme.md19
-rw-r--r--keyboards/idobao/id75/v1/rules.mk21
-rw-r--r--keyboards/idobao/id75/v1/v1.c16
-rw-r--r--keyboards/idobao/id75/v1/v1.h (renamed from keyboards/idobo/idobo.h)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/config.h (renamed from keyboards/id80/ansi/config.h)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/default/keymap.c (renamed from keyboards/id80/ansi/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/default/readme.md (renamed from keyboards/id80/ansi/keymaps/default/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/msf/config.h (renamed from keyboards/id80/ansi/keymaps/msf/config.h)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/msf/keymap.c (renamed from keyboards/id80/ansi/keymaps/msf/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/msf/readme.md (renamed from keyboards/id80/ansi/keymaps/msf/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/msf/rules.mk (renamed from keyboards/qaz/keymaps/default/rules.mk)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/rverst/keymap.c (renamed from keyboards/id80/keymaps/rverst/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/rverst/readme.md (renamed from keyboards/id80/keymaps/rverst/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/rverst/rverst.json (renamed from keyboards/id80/keymaps/rverst/rverst.json)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/via/keymap.c (renamed from keyboards/id80/ansi/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/keymaps/via/rules.mk (renamed from keyboards/id80/ansi/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/readme.md (renamed from keyboards/id80/ansi/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/ansi/rules.mk (renamed from keyboards/id80/ansi/rules.mk)0
-rw-r--r--keyboards/idobao/id80/v1/config.h (renamed from keyboards/id80/config.h)0
-rw-r--r--keyboards/idobao/id80/v1/info.json (renamed from keyboards/id80/info.json)0
-rw-r--r--keyboards/idobao/id80/v1/iso/config.h (renamed from keyboards/id80/iso/config.h)0
-rw-r--r--keyboards/idobao/id80/v1/iso/keymaps/default/keymap.c (renamed from keyboards/id80/iso/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/iso/keymaps/default/readme.md (renamed from keyboards/id80/iso/keymaps/default/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/iso/keymaps/via/keymap.c (renamed from keyboards/id80/iso/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/id80/v1/iso/keymaps/via/rules.mk (renamed from keyboards/id80/iso/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/id80/v1/iso/readme.md (renamed from keyboards/id80/iso/readme.md)0
-rw-r--r--keyboards/idobao/id80/v1/iso/rules.mk (renamed from keyboards/id80/iso/rules.mk)0
-rw-r--r--keyboards/idobao/id80/v1/readme.md27
-rw-r--r--keyboards/idobao/id80/v1/rules.mk24
-rw-r--r--keyboards/idobao/id80/v1/v1.c16
-rw-r--r--keyboards/idobao/id80/v1/v1.h (renamed from keyboards/id80/id80.h)0
-rw-r--r--keyboards/idobao/id80/v3/config.h10
-rw-r--r--keyboards/idobao/id80/v3/rules.mk1
-rw-r--r--keyboards/idobao/id87/v1/config.h (renamed from keyboards/id87/config.h)0
-rw-r--r--keyboards/idobao/id87/v1/info.json (renamed from keyboards/id87/info.json)0
-rw-r--r--keyboards/idobao/id87/v1/keymaps/default/keymap.c (renamed from keyboards/id87/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/id87/v1/keymaps/default/readme.md (renamed from keyboards/id87/keymaps/default/readme.md)0
-rw-r--r--keyboards/idobao/id87/v1/keymaps/via/keymap.c (renamed from keyboards/id87/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/id87/v1/keymaps/via/rules.mk (renamed from keyboards/id87/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/id87/v1/readme.md19
-rw-r--r--keyboards/idobao/id87/v1/rules.mk (renamed from keyboards/id87/rules.mk)0
-rw-r--r--keyboards/idobao/id87/v1/v1.c15
-rw-r--r--keyboards/idobao/id87/v1/v1.h (renamed from keyboards/id87/id87.h)0
-rw-r--r--keyboards/idobao/montex/v1/config.h (renamed from keyboards/montex/config.h)0
-rw-r--r--keyboards/idobao/montex/v1/info.json (renamed from keyboards/montex/info.json)0
-rw-r--r--keyboards/idobao/montex/v1/keymaps/default/keymap.c (renamed from keyboards/montex/keymaps/default/keymap.c)0
-rw-r--r--keyboards/idobao/montex/v1/keymaps/via/keymap.c (renamed from keyboards/montex/keymaps/via/keymap.c)0
-rw-r--r--keyboards/idobao/montex/v1/keymaps/via/rules.mk (renamed from keyboards/montex/keymaps/via/rules.mk)0
-rw-r--r--keyboards/idobao/montex/v1/readme.md21
-rw-r--r--keyboards/idobao/montex/v1/rules.mk (renamed from keyboards/montex/rules.mk)0
-rw-r--r--keyboards/idobao/montex/v1/v1.c17
-rw-r--r--keyboards/idobao/montex/v1/v1.h (renamed from keyboards/montex/montex.h)0
-rw-r--r--keyboards/idobo/config.h122
-rw-r--r--keyboards/idobo/idobo.c16
-rw-r--r--keyboards/idobo/readme.md17
-rw-r--r--keyboards/idobo/rules.mk21
-rw-r--r--keyboards/infinity60/readme.md17
-rw-r--r--keyboards/infinity60/rules.mk34
-rw-r--r--keyboards/input_club/ergodox_infinity/MEMO.txt (renamed from keyboards/ergodox_infinity/MEMO.txt)0
-rw-r--r--keyboards/input_club/ergodox_infinity/chconf.h (renamed from keyboards/ergodox_infinity/chconf.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/config.h (renamed from keyboards/ergodox_infinity/config.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/ergodox_infinity.c (renamed from keyboards/ergodox_infinity/ergodox_infinity.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/ergodox_infinity.h (renamed from keyboards/ergodox_infinity/ergodox_infinity.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/halconf.h (renamed from keyboards/ergodox_infinity/halconf.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/info.json (renamed from keyboards/ergodox_infinity/info.json)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/default/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md (renamed from keyboards/ergodox_infinity/keymaps/dudeofawesome/README.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h (renamed from keyboards/ergodox_infinity/keymaps/dudeofawesome/config.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/dudeofawesome/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h (renamed from keyboards/ergodox_infinity/keymaps/dudeofawesome/layers.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h (renamed from keyboards/ergodox_infinity/keymaps/gordon/config.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/gordon/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk (renamed from keyboards/ergodox_infinity/keymaps/gordon/rules.mk)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h (renamed from keyboards/ergodox_infinity/keymaps/halfkeyboard/config.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/halfkeyboard/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk (renamed from keyboards/ergodox_infinity/keymaps/halfkeyboard/rules.mk)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md (renamed from keyboards/ergodox_infinity/keymaps/input_club/README.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/input_club/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/config.h (renamed from keyboards/ergodox_infinity/keymaps/narze/config.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md (renamed from keyboards/ergodox_infinity/keymaps/narze/default.png.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md (renamed from keyboards/ergodox_infinity/keymaps/narze/default_highres.png.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/narze/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md (renamed from keyboards/ergodox_infinity/keymaps/narze/readme.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk (renamed from keyboards/ergodox_infinity/keymaps/narze/rules.mk)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c (renamed from keyboards/ergodox_infinity/keymaps/narze/visualizer.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/nordic_ergo/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md (renamed from keyboards/ergodox_infinity/keymaps/nordic_ergo/readme.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md (renamed from keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk (renamed from keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rask/README.md (renamed from keyboards/ergodox_infinity/keymaps/rask/README.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/rask/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/rjhilgefort/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md (renamed from keyboards/ergodox_infinity/keymaps/rjhilgefort/readme.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md (renamed from keyboards/ergodox_infinity/keymaps/trulyergonomic/README.md)0
-rw-r--r--keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c (renamed from keyboards/ergodox_infinity/keymaps/trulyergonomic/keymap.c)0
-rw-r--r--keyboards/input_club/ergodox_infinity/mcuconf.h (renamed from keyboards/ergodox_infinity/mcuconf.h)0
-rw-r--r--keyboards/input_club/ergodox_infinity/readme.md66
-rw-r--r--keyboards/input_club/ergodox_infinity/rules.mk (renamed from keyboards/ergodox_infinity/rules.mk)0
-rw-r--r--keyboards/input_club/infinity60/chconf.h (renamed from keyboards/infinity60/chconf.h)0
-rw-r--r--keyboards/input_club/infinity60/config.h (renamed from keyboards/infinity60/config.h)0
-rw-r--r--keyboards/input_club/infinity60/halconf.h (renamed from keyboards/infinity60/halconf.h)0
-rw-r--r--keyboards/input_club/infinity60/infinity60.c (renamed from keyboards/infinity60/infinity60.c)0
-rw-r--r--keyboards/input_club/infinity60/infinity60.h (renamed from keyboards/infinity60/infinity60.h)0
-rw-r--r--keyboards/input_club/infinity60/info.json (renamed from keyboards/infinity60/info.json)0
-rw-r--r--keyboards/input_club/infinity60/keymaps/default/keymap.c (renamed from keyboards/infinity60/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/input_club/infinity60/keymaps/depariel/keymap.c (renamed from keyboards/infinity60/keymaps/depariel/keymap.c)0
-rw-r--r--keyboards/input_club/infinity60/keymaps/hasu/keymap.c (renamed from keyboards/infinity60/keymaps/hasu/keymap.c)0
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/config.h (renamed from keyboards/infinity60/keymaps/jpetermans/config.h)0
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c (renamed from keyboards/infinity60/keymaps/jpetermans/keymap.c)0
-rw-r--r--keyboards/input_club/infinity60/keymaps/jpetermans/readme.md (renamed from keyboards/infinity60/keymaps/jpetermans/readme.md)0
-rw-r--r--keyboards/input_club/infinity60/led.c (renamed from keyboards/infinity60/led.c)0
-rw-r--r--keyboards/input_club/infinity60/led/config.h (renamed from keyboards/infinity60/led/config.h)0
-rw-r--r--keyboards/input_club/infinity60/led/readme.md (renamed from keyboards/infinity60/led/readme.md)0
-rw-r--r--keyboards/input_club/infinity60/led/rules.mk (renamed from keyboards/infinity60/led/rules.mk)0
-rw-r--r--keyboards/input_club/infinity60/led_controller.c (renamed from keyboards/infinity60/led_controller.c)0
-rw-r--r--keyboards/input_club/infinity60/led_controller.h (renamed from keyboards/infinity60/led_controller.h)0
-rw-r--r--keyboards/input_club/infinity60/mcuconf.h (renamed from keyboards/infinity60/mcuconf.h)0
-rw-r--r--keyboards/input_club/infinity60/readme.md17
-rw-r--r--keyboards/input_club/infinity60/rev1/config.h (renamed from keyboards/infinity60/rev1/config.h)0
-rw-r--r--keyboards/input_club/infinity60/rev1/readme.md (renamed from keyboards/infinity60/rev1/readme.md)0
-rw-r--r--keyboards/input_club/infinity60/rev1/rules.mk (renamed from keyboards/jisplit89/rev1/rules.mk)0
-rw-r--r--keyboards/input_club/infinity60/rules.mk34
-rw-r--r--keyboards/input_club/k_type/chconf.h (renamed from keyboards/k_type/chconf.h)0
-rw-r--r--keyboards/input_club/k_type/config.h (renamed from keyboards/k_type/config.h)0
-rw-r--r--keyboards/input_club/k_type/halconf.h (renamed from keyboards/k_type/halconf.h)0
-rw-r--r--keyboards/input_club/k_type/i2c_master.c (renamed from keyboards/k_type/i2c_master.c)0
-rw-r--r--keyboards/input_club/k_type/i2c_master.h (renamed from keyboards/k_type/i2c_master.h)0
-rw-r--r--keyboards/input_club/k_type/info.json (renamed from keyboards/k_type/info.json)0
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.c (renamed from keyboards/k_type/is31fl3733-dual.c)0
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.h (renamed from keyboards/k_type/is31fl3733-dual.h)0
-rw-r--r--keyboards/input_club/k_type/k_type-rgbdriver.c (renamed from keyboards/k_type/k_type-rgbdriver.c)0
-rw-r--r--keyboards/input_club/k_type/k_type.c (renamed from keyboards/k_type/k_type.c)0
-rw-r--r--keyboards/input_club/k_type/k_type.h (renamed from keyboards/k_type/k_type.h)0
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h (renamed from keyboards/k_type/keymaps/andrew-fahmy/config.h)0
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c (renamed from keyboards/k_type/keymaps/andrew-fahmy/keymap.c)0
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk (renamed from keyboards/k_type/keymaps/andrew-fahmy/rules.mk)0
-rw-r--r--keyboards/input_club/k_type/keymaps/belak/keymap.c (renamed from keyboards/k_type/keymaps/belak/keymap.c)0
-rw-r--r--keyboards/input_club/k_type/keymaps/default/keymap.c (renamed from keyboards/k_type/keymaps/default/keymap.c)0
-rw-r--r--keyboards/input_club/k_type/keymaps/default/rules.mk (renamed from keyboards/k_type/keymaps/default/rules.mk)0
-rw-r--r--keyboards/input_club/k_type/mcuconf.h (renamed from keyboards/k_type/mcuconf.h)0
-rw-r--r--keyboards/input_club/k_type/readme.md17
-rw-r--r--keyboards/input_club/k_type/rules.mk (renamed from keyboards/k_type/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/board_is31fl3731c.h (renamed from keyboards/whitefox/board_is31fl3731c.h)0
-rw-r--r--keyboards/input_club/whitefox/chconf.h (renamed from keyboards/whitefox/chconf.h)0
-rw-r--r--keyboards/input_club/whitefox/config.h (renamed from keyboards/whitefox/config.h)0
-rw-r--r--keyboards/input_club/whitefox/halconf.h (renamed from keyboards/whitefox/halconf.h)0
-rw-r--r--keyboards/input_club/whitefox/info.json (renamed from keyboards/whitefox/info.json)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/config.h (renamed from keyboards/whitefox/keymaps/billypython/config.h)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/keymap.c (renamed from keyboards/whitefox/keymaps/billypython/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/billypython/rules.mk (renamed from keyboards/whitefox/keymaps/billypython/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/default/keymap.c (renamed from keyboards/whitefox/keymaps/default/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/dhertz/keymap.c (renamed from keyboards/whitefox/keymaps/dhertz/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c (renamed from keyboards/whitefox/keymaps/dudeofawesome/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md (renamed from keyboards/whitefox/keymaps/dudeofawesome/readme.md)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c (renamed from keyboards/whitefox/keymaps/jetpacktuxedo/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md (renamed from keyboards/whitefox/keymaps/jetpacktuxedo/readme.md)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk (renamed from keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c (renamed from keyboards/whitefox/keymaps/kim-kim/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/config.h (renamed from keyboards/whitefox/keymaps/konstantin/config.h)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/keymap.c (renamed from keyboards/whitefox/keymaps/konstantin/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/konstantin/rules.mk (renamed from keyboards/whitefox/keymaps/konstantin/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/matt3o/keymap.c (renamed from keyboards/whitefox/keymaps/matt3o/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c (renamed from keyboards/whitefox/keymaps/mattrighetti/keymap.c)0
-rw-r--r--keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk (renamed from keyboards/whitefox/keymaps/mattrighetti/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/mcuconf.h (renamed from keyboards/whitefox/mcuconf.h)0
-rw-r--r--keyboards/input_club/whitefox/readme.md17
-rw-r--r--keyboards/input_club/whitefox/rules.mk (renamed from keyboards/whitefox/rules.mk)0
-rw-r--r--keyboards/input_club/whitefox/whitefox.c (renamed from keyboards/whitefox/whitefox.c)0
-rw-r--r--keyboards/input_club/whitefox/whitefox.h (renamed from keyboards/whitefox/whitefox.h)0
-rw-r--r--keyboards/ivy/ivy.h7
-rw-r--r--keyboards/ivy/readme.md15
-rw-r--r--keyboards/ivy/rules.mk20
-rw-r--r--keyboards/jisplit89/jisplit89.h22
-rw-r--r--keyboards/jisplit89/readme.md17
-rw-r--r--keyboards/jisplit89/rules.mk22
-rw-r--r--keyboards/jm60/jm60.c5
-rw-r--r--keyboards/jm60/rules.mk3
-rw-r--r--keyboards/jnao/readme.md14
-rw-r--r--keyboards/jolofsor/denial75/rules.mk3
-rw-r--r--keyboards/just60/readme.md17
-rw-r--r--keyboards/k_type/readme.md17
-rw-r--r--keyboards/kabedon/kabedon980/config.h10
-rw-r--r--keyboards/kabedon/kabedon980/keymaps/via/keymap.c20
-rw-r--r--keyboards/kagamidget/readme.md14
-rw-r--r--keyboards/kagizaraya/chidori/.noci (renamed from keyboards/bigseries/3key/.noci)0
-rw-r--r--keyboards/kagizaraya/chidori/board.c (renamed from keyboards/chidori/board.c)0
-rw-r--r--keyboards/kagizaraya/chidori/board.h (renamed from keyboards/chidori/board.h)0
-rw-r--r--keyboards/kagizaraya/chidori/chidori.c (renamed from keyboards/chidori/chidori.c)0
-rw-r--r--keyboards/kagizaraya/chidori/chidori.h (renamed from keyboards/chidori/chidori.h)0
-rw-r--r--keyboards/kagizaraya/chidori/config.h (renamed from keyboards/chidori/config.h)0
-rw-r--r--keyboards/kagizaraya/chidori/info.json (renamed from keyboards/chidori/info.json)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/default/config.h (renamed from keyboards/chidori/keymaps/default/config.h)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/default/keymap.c (renamed from keyboards/chidori/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/default/readme.md (renamed from keyboards/chidori/keymaps/default/readme.md)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/extended/config.h (renamed from keyboards/chidori/keymaps/extended/config.h)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/extended/keymap.c (renamed from keyboards/chidori/keymaps/extended/keymap.c)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/extended/readme.md (renamed from keyboards/chidori/keymaps/extended/readme.md)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/oled_sample/keymap.c (renamed from keyboards/chidori/keymaps/oled_sample/keymap.c)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/oled_sample/readme.md (renamed from keyboards/chidori/keymaps/oled_sample/readme.md)0
-rw-r--r--keyboards/kagizaraya/chidori/keymaps/oled_sample/rules.mk (renamed from keyboards/chidori/keymaps/oled_sample/rules.mk)0
-rw-r--r--keyboards/kagizaraya/chidori/matrix.c (renamed from keyboards/chidori/matrix.c)0
-rw-r--r--keyboards/kagizaraya/chidori/readme.md15
-rw-r--r--keyboards/kagizaraya/chidori/rules.mk (renamed from keyboards/chidori/rules.mk)0
-rw-r--r--keyboards/kagizaraya/halberd/config.h (renamed from keyboards/halberd/config.h)0
-rw-r--r--keyboards/kagizaraya/halberd/halberd.c (renamed from keyboards/halberd/halberd.c)0
-rw-r--r--keyboards/kagizaraya/halberd/halberd.h (renamed from keyboards/halberd/halberd.h)0
-rw-r--r--keyboards/kagizaraya/halberd/info.json (renamed from keyboards/halberd/info.json)0
-rw-r--r--keyboards/kagizaraya/halberd/keymaps/default/keymap.c (renamed from keyboards/halberd/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kagizaraya/halberd/keymaps/default/readme.md (renamed from keyboards/halberd/keymaps/default/readme.md)0
-rw-r--r--keyboards/kagizaraya/halberd/keymaps/right_modifiers/keymap.c (renamed from keyboards/halberd/keymaps/right_modifiers/keymap.c)0
-rw-r--r--keyboards/kagizaraya/halberd/keymaps/right_modifiers/readme.md (renamed from keyboards/halberd/keymaps/right_modifiers/readme.md)0
-rw-r--r--keyboards/kagizaraya/halberd/readme.md15
-rw-r--r--keyboards/kagizaraya/halberd/rules.mk (renamed from keyboards/halberd/rules.mk)0
-rw-r--r--keyboards/kagizaraya/scythe/config.h (renamed from keyboards/scythe/config.h)0
-rw-r--r--keyboards/kagizaraya/scythe/info.json (renamed from keyboards/scythe/info.json)0
-rw-r--r--keyboards/kagizaraya/scythe/keymaps/default/keymap.c (renamed from keyboards/scythe/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kagizaraya/scythe/keymaps/default/readme.md (renamed from keyboards/scythe/keymaps/default/readme.md)0
-rw-r--r--keyboards/kagizaraya/scythe/keymaps/forties/keymap.c (renamed from keyboards/scythe/keymaps/forties/keymap.c)0
-rw-r--r--keyboards/kagizaraya/scythe/keymaps/forties/readme.md (renamed from keyboards/scythe/keymaps/forties/readme.md)0
-rw-r--r--keyboards/kagizaraya/scythe/readme.md15
-rw-r--r--keyboards/kagizaraya/scythe/rules.mk (renamed from keyboards/scythe/rules.mk)0
-rw-r--r--keyboards/kagizaraya/scythe/scythe.c (renamed from keyboards/scythe/scythe.c)0
-rw-r--r--keyboards/kagizaraya/scythe/scythe.h (renamed from keyboards/scythe/scythe.h)0
-rw-r--r--keyboards/kakunpc/angel17/.noci (renamed from keyboards/business_card/.noci)0
-rw-r--r--keyboards/kakunpc/angel17/alpha/.noci (renamed from keyboards/business_card/alpha/.noci)0
-rw-r--r--keyboards/kakunpc/angel17/alpha/alpha.c (renamed from keyboards/angel17/alpha/alpha.c)0
-rw-r--r--keyboards/kakunpc/angel17/alpha/alpha.h (renamed from keyboards/angel17/alpha/alpha.h)0
-rw-r--r--keyboards/kakunpc/angel17/alpha/config.h (renamed from keyboards/angel17/alpha/config.h)0
-rw-r--r--keyboards/kakunpc/angel17/alpha/rules.mk (renamed from keyboards/angel17/alpha/rules.mk)0
-rw-r--r--keyboards/kakunpc/angel17/info.json (renamed from keyboards/angel17/info.json)0
-rw-r--r--keyboards/kakunpc/angel17/keymaps/default/keymap.c (renamed from keyboards/angel17/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/angel17/keymaps/default/readme.md (renamed from keyboards/angel17/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/angel17/readme.md15
-rw-r--r--keyboards/kakunpc/angel17/rev1/config.h (renamed from keyboards/angel17/rev1/config.h)0
-rw-r--r--keyboards/kakunpc/angel17/rev1/rev1.c (renamed from keyboards/angel17/rev1/rev1.c)0
-rw-r--r--keyboards/kakunpc/angel17/rev1/rev1.h (renamed from keyboards/angel17/rev1/rev1.h)0
-rw-r--r--keyboards/kakunpc/angel17/rev1/rules.mk (renamed from keyboards/angel17/rev1/rules.mk)0
-rw-r--r--keyboards/kakunpc/angel17/rules.mk22
-rw-r--r--keyboards/kakunpc/angel64/.noci (renamed from keyboards/chidori/.noci)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/.noci (renamed from keyboards/choco60/rev1/.noci)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/alpha.c (renamed from keyboards/angel64/alpha/alpha.c)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/alpha.h (renamed from keyboards/angel64/alpha/alpha.h)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/config.h (renamed from keyboards/angel64/alpha/config.h)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/info.json (renamed from keyboards/angel64/alpha/info.json)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/keymaps/default/keymap.c (renamed from keyboards/angel64/alpha/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/keymaps/default/readme.md (renamed from keyboards/angel64/alpha/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/angel64/alpha/matrix.c280
-rw-r--r--keyboards/kakunpc/angel64/alpha/readme.md15
-rw-r--r--keyboards/kakunpc/angel64/alpha/rules.mk (renamed from keyboards/launchpad/rev1/rules.mk)0
-rw-r--r--keyboards/kakunpc/angel64/readme.md15
-rw-r--r--keyboards/kakunpc/angel64/rev1/config.h (renamed from keyboards/angel64/rev1/config.h)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/info.json (renamed from keyboards/angel64/rev1/info.json)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/default/keymap.c (renamed from keyboards/angel64/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/default/readme.md (renamed from keyboards/angel64/rev1/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h (renamed from keyboards/angel64/rev1/keymaps/kakunpc/config.h)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/keymap.c (renamed from keyboards/angel64/rev1/keymaps/kakunpc/keymap.c)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/readme.md (renamed from keyboards/angel64/rev1/keymaps/kakunpc/readme.md)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/matrix.c280
-rw-r--r--keyboards/kakunpc/angel64/rev1/readme.md15
-rw-r--r--keyboards/kakunpc/angel64/rev1/rev1.c (renamed from keyboards/angel64/rev1/rev1.c)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/rev1.h (renamed from keyboards/angel64/rev1/rev1.h)0
-rw-r--r--keyboards/kakunpc/angel64/rev1/rules.mk (renamed from keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk)0
-rw-r--r--keyboards/kakunpc/angel64/rules.mk25
-rw-r--r--keyboards/kakunpc/business_card/.noci (renamed from keyboards/christmas_tree/.noci)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/.noci (renamed from keyboards/claw44/.noci)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/alpha.c (renamed from keyboards/business_card/alpha/alpha.c)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/alpha.h (renamed from keyboards/business_card/alpha/alpha.h)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/config.h (renamed from keyboards/business_card/alpha/config.h)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/info.json (renamed from keyboards/business_card/alpha/info.json)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/keymaps/default/config.h (renamed from keyboards/business_card/alpha/keymaps/default/config.h)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/keymaps/default/keymap.c (renamed from keyboards/business_card/alpha/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/keymaps/default/readme.md (renamed from keyboards/business_card/alpha/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/business_card/alpha/rules.mk (renamed from keyboards/business_card/alpha/rules.mk)0
-rw-r--r--keyboards/kakunpc/business_card/beta/beta.c (renamed from keyboards/business_card/beta/beta.c)0
-rw-r--r--keyboards/kakunpc/business_card/beta/beta.h (renamed from keyboards/business_card/beta/beta.h)0
-rw-r--r--keyboards/kakunpc/business_card/beta/config.h (renamed from keyboards/business_card/beta/config.h)0
-rw-r--r--keyboards/kakunpc/business_card/beta/info.json (renamed from keyboards/business_card/beta/info.json)0
-rw-r--r--keyboards/kakunpc/business_card/beta/keymaps/default/config.h (renamed from keyboards/business_card/beta/keymaps/default/config.h)0
-rw-r--r--keyboards/kakunpc/business_card/beta/keymaps/default/keymap.c (renamed from keyboards/business_card/beta/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/business_card/beta/keymaps/default/readme.md (renamed from keyboards/business_card/beta/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/business_card/beta/rules.mk (renamed from keyboards/business_card/beta/rules.mk)0
-rw-r--r--keyboards/kakunpc/business_card/business_card.c (renamed from keyboards/business_card/business_card.c)0
-rw-r--r--keyboards/kakunpc/business_card/business_card.h25
-rw-r--r--keyboards/kakunpc/business_card/config.h (renamed from keyboards/business_card/config.h)0
-rw-r--r--keyboards/kakunpc/business_card/readme.md15
-rw-r--r--keyboards/kakunpc/business_card/rules.mk20
-rw-r--r--keyboards/kakunpc/choc_taro/choc_taro.c (renamed from keyboards/choc_taro/choc_taro.c)0
-rw-r--r--keyboards/kakunpc/choc_taro/choc_taro.h (renamed from keyboards/choc_taro/choc_taro.h)0
-rw-r--r--keyboards/kakunpc/choc_taro/config.h (renamed from keyboards/choc_taro/config.h)0
-rw-r--r--keyboards/kakunpc/choc_taro/info.json (renamed from keyboards/choc_taro/info.json)0
-rw-r--r--keyboards/kakunpc/choc_taro/keymaps/default/keymap.c (renamed from keyboards/choc_taro/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/choc_taro/keymaps/default/readme.md (renamed from keyboards/choc_taro/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/choc_taro/keymaps/via/keymap.c (renamed from keyboards/choc_taro/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kakunpc/choc_taro/keymaps/via/readme.md (renamed from keyboards/choc_taro/keymaps/via/readme.md)0
-rw-r--r--keyboards/kakunpc/choc_taro/keymaps/via/rules.mk (renamed from keyboards/delilah/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kakunpc/choc_taro/matrix.c (renamed from keyboards/choc_taro/matrix.c)0
-rw-r--r--keyboards/kakunpc/choc_taro/readme.md15
-rw-r--r--keyboards/kakunpc/choc_taro/rules.mk (renamed from keyboards/choc_taro/rules.mk)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/config.h (renamed from keyboards/rabbit_capture_plan/config.h)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/info.json (renamed from keyboards/rabbit_capture_plan/info.json)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/keymaps/default/keymap.c (renamed from keyboards/rabbit_capture_plan/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/keymaps/default/readme.md (renamed from keyboards/rabbit_capture_plan/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/keymaps/via/keymap.c (renamed from keyboards/rabbit_capture_plan/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/keymaps/via/readme.md (renamed from keyboards/rabbit_capture_plan/keymaps/via/readme.md)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/keymaps/via/rules.mk (renamed from keyboards/dozen0/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.c (renamed from keyboards/rabbit_capture_plan/rabbit_capture_plan.c)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.h (renamed from keyboards/rabbit_capture_plan/rabbit_capture_plan.h)0
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/readme.md19
-rw-r--r--keyboards/kakunpc/rabbit_capture_plan/rules.mk (renamed from keyboards/rabbit_capture_plan/rules.mk)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/alpha.c (renamed from keyboards/suihankey/alpha/alpha.c)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/alpha.h (renamed from keyboards/suihankey/alpha/alpha.h)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/config.h (renamed from keyboards/suihankey/alpha/config.h)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/info.json (renamed from keyboards/suihankey/alpha/info.json)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/keymaps/default/keymap.c (renamed from keyboards/suihankey/alpha/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/keymaps/default/readme.md (renamed from keyboards/suihankey/alpha/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/readme.md (renamed from keyboards/suihankey/alpha/readme.md)0
-rw-r--r--keyboards/kakunpc/suihankey/alpha/rules.mk (renamed from keyboards/launchpad/keymaps/default_rgb/rules.mk)0
-rw-r--r--keyboards/kakunpc/suihankey/readme.md18
-rw-r--r--keyboards/kakunpc/suihankey/rev1/config.h (renamed from keyboards/suihankey/rev1/config.h)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/info.json (renamed from keyboards/suihankey/rev1/info.json)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/keymaps/default/keymap.c (renamed from keyboards/suihankey/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/keymaps/default/readme.md (renamed from keyboards/suihankey/rev1/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/readme.md (renamed from keyboards/suihankey/rev1/readme.md)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/rev1.c (renamed from keyboards/suihankey/rev1/rev1.c)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/rev1.h (renamed from keyboards/suihankey/rev1/rev1.h)0
-rw-r--r--keyboards/kakunpc/suihankey/rev1/rules.mk (renamed from keyboards/reviung34/keymaps/default_rgb/rules.mk)0
-rw-r--r--keyboards/kakunpc/suihankey/rules.mk23
-rw-r--r--keyboards/kakunpc/suihankey/split/.noci (renamed from keyboards/claw44/rev1/.noci)0
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/.noci (renamed from keyboards/cocoa40/.noci)0
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/alpha.c (renamed from keyboards/suihankey/split/alpha/alpha.c)0
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/alpha.h (renamed from keyboards/suihankey/split/alpha/alpha.h)0
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/config.h (renamed from keyboards/suihankey/split/alpha/config.h)0
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/readme.md18
-rw-r--r--keyboards/kakunpc/suihankey/split/alpha/rules.mk (renamed from keyboards/reviung34/keymaps/default_rgb2u/rules.mk)0
-rw-r--r--keyboards/kakunpc/suihankey/split/info.json (renamed from keyboards/suihankey/split/info.json)0
-rw-r--r--keyboards/kakunpc/suihankey/split/keymaps/default/keymap.c (renamed from keyboards/suihankey/split/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/suihankey/split/keymaps/default/readme.md (renamed from keyboards/suihankey/split/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/suihankey/split/readme.md18
-rw-r--r--keyboards/kakunpc/suihankey/split/rev1/config.h (renamed from keyboards/suihankey/split/rev1/config.h)0
-rw-r--r--keyboards/kakunpc/suihankey/split/rev1/readme.md18
-rw-r--r--keyboards/kakunpc/suihankey/split/rev1/rev1.c (renamed from keyboards/suihankey/split/rev1/rev1.c)0
-rw-r--r--keyboards/kakunpc/suihankey/split/rev1/rev1.h (renamed from keyboards/suihankey/split/rev1/rev1.h)0
-rw-r--r--keyboards/kakunpc/suihankey/split/rev1/rules.mk (renamed from keyboards/suihankey/split/rev1/rules.mk)0
-rw-r--r--keyboards/kakunpc/suihankey/split/rules.mk4
-rw-r--r--keyboards/kakunpc/thedogkeyboard/config.h (renamed from keyboards/thedogkeyboard/config.h)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/info.json (renamed from keyboards/thedogkeyboard/info.json)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/keymaps/default/keymap.c (renamed from keyboards/thedogkeyboard/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/keymaps/default/readme.md (renamed from keyboards/thedogkeyboard/keymaps/default/readme.md)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/keymap.c (renamed from keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/readme.md (renamed from keyboards/thedogkeyboard/keymaps/kakunpc/readme.md)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/matrix.c280
-rw-r--r--keyboards/kakunpc/thedogkeyboard/readme.md15
-rw-r--r--keyboards/kakunpc/thedogkeyboard/rules.mk (renamed from keyboards/thedogkeyboard/rules.mk)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/thedogkeyboard.c (renamed from keyboards/thedogkeyboard/thedogkeyboard.c)0
-rw-r--r--keyboards/kakunpc/thedogkeyboard/thedogkeyboard.h (renamed from keyboards/thedogkeyboard/thedogkeyboard.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/config.h (renamed from keyboards/niu_mini/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/info.json (renamed from keyboards/niu_mini/info.json)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/abhixec/keymap.c (renamed from keyboards/niu_mini/keymaps/abhixec/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/abhixec/readme.md (renamed from keyboards/niu_mini/keymaps/abhixec/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/abhixec/rules.mk (renamed from keyboards/niu_mini/keymaps/abhixec/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/keymap.c (renamed from keyboards/niu_mini/keymaps/codecoffeecode/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/readme.md (renamed from keyboards/niu_mini/keymaps/codecoffeecode/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/default/keymap.c (renamed from keyboards/niu_mini/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/default/readme.md (renamed from keyboards/niu_mini/keymaps/default/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/dyesub/keymap.c (renamed from keyboards/niu_mini/keymaps/dyesub/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/dyesub/readme.md (renamed from keyboards/niu_mini/keymaps/dyesub/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/dyesub/rules.mk (renamed from keyboards/niu_mini/keymaps/dyesub/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/edvard/keymap.c (renamed from keyboards/niu_mini/keymaps/edvard/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/edvard/readme.md (renamed from keyboards/niu_mini/keymaps/edvard/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/framtava/config.h (renamed from keyboards/niu_mini/keymaps/framtava/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/framtava/keymap.c (renamed from keyboards/niu_mini/keymaps/framtava/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/framtava/readme.md (renamed from keyboards/niu_mini/keymaps/framtava/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/framtava/rules.mk (renamed from keyboards/niu_mini/keymaps/framtava/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/mason/keymap.c (renamed from keyboards/niu_mini/keymaps/mason/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/nosarthur/README.md (renamed from keyboards/niu_mini/keymaps/nosarthur/README.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap.c (renamed from keyboards/niu_mini/keymaps/nosarthur/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json (renamed from keyboards/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_qwerty.json (renamed from keyboards/niu_mini/keymaps/nosarthur/keymap_qwerty.json)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/nosarthur/rules.mk (renamed from keyboards/niu_mini/keymaps/nosarthur/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/planck/config.h (renamed from keyboards/niu_mini/keymaps/planck/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/planck/keymap.c (renamed from keyboards/niu_mini/keymaps/planck/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/planck/readme.md (renamed from keyboards/niu_mini/keymaps/planck/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk (renamed from keyboards/diverge3/keymaps/workman/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tobias/config.h (renamed from keyboards/niu_mini/keymaps/tobias/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c (renamed from keyboards/niu_mini/keymaps/tobias/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tobias/readme.md (renamed from keyboards/niu_mini/keymaps/tobias/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tobias/rules.mk (renamed from keyboards/niu_mini/keymaps/tobias/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h (renamed from keyboards/niu_mini/keymaps/tucznak/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tucznak/keymap.c (renamed from keyboards/niu_mini/keymaps/tucznak/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tucznak/readme.md (renamed from keyboards/niu_mini/keymaps/tucznak/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/tucznak/rules.mk (renamed from keyboards/niu_mini/keymaps/tucznak/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/via/keymap.c (renamed from keyboards/niu_mini/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/via/rules.mk (renamed from keyboards/niu_mini/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/config.h (renamed from keyboards/niu_mini/keymaps/xtonhasvim/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/keymap.c (renamed from keyboards/niu_mini/keymaps/xtonhasvim/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/readme.md (renamed from keyboards/divergetm2/keymaps/xtonhasvim/readme.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/rules.mk (renamed from keyboards/niu_mini/keymaps/xtonhasvim/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/yttyx/README.md (renamed from keyboards/niu_mini/keymaps/yttyx/README.md)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/yttyx/config.h (renamed from keyboards/niu_mini/keymaps/yttyx/config.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/yttyx/keymap.c (renamed from keyboards/niu_mini/keymaps/yttyx/keymap.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/keymaps/yttyx/rules.mk (renamed from keyboards/niu_mini/keymaps/yttyx/rules.mk)0
-rw-r--r--keyboards/kbdfans/niu_mini/niu_mini.c (renamed from keyboards/niu_mini/niu_mini.c)0
-rw-r--r--keyboards/kbdfans/niu_mini/niu_mini.h (renamed from keyboards/niu_mini/niu_mini.h)0
-rw-r--r--keyboards/kbdfans/niu_mini/readme.md19
-rw-r--r--keyboards/kbdfans/niu_mini/rules.mk (renamed from keyboards/niu_mini/rules.mk)0
-rw-r--r--keyboards/keebio/iris/keymaps/333fred/rules.mk3
-rw-r--r--keyboards/kelowna/rgb64/readme.md17
-rw-r--r--keyboards/keychron/q2/rev_0110/rules.mk3
-rw-r--r--keyboards/keychron/q2/rev_0111/rules.mk3
-rw-r--r--keyboards/keychron/q2/rev_0112/rules.mk3
-rw-r--r--keyboards/keychron/q2/rev_0113/rules.mk3
-rw-r--r--keyboards/kinesis/alvicstep/matrix.c6
-rw-r--r--keyboards/kkatano/bakeneko60/bakeneko60.c (renamed from keyboards/bakeneko60/bakeneko60.c)0
-rw-r--r--keyboards/kkatano/bakeneko60/bakeneko60.h (renamed from keyboards/bakeneko60/bakeneko60.h)0
-rw-r--r--keyboards/kkatano/bakeneko60/config.h (renamed from keyboards/bakeneko60/config.h)0
-rw-r--r--keyboards/kkatano/bakeneko60/info.json (renamed from keyboards/bakeneko60/info.json)0
-rw-r--r--keyboards/kkatano/bakeneko60/keymaps/default/keymap.c (renamed from keyboards/bakeneko60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko60/keymaps/default/readme.md (renamed from keyboards/bakeneko60/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/bakeneko60/keymaps/via/keymap.c (renamed from keyboards/bakeneko60/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko60/keymaps/via/rules.mk (renamed from keyboards/7splus/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko60/readme.md17
-rw-r--r--keyboards/kkatano/bakeneko60/rules.mk (renamed from keyboards/bakeneko60/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/config.h (renamed from keyboards/bakeneko65/rev2/config.h)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/info.json (renamed from keyboards/bakeneko65/rev2/info.json)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/keymaps/default/keymap.c (renamed from keyboards/bakeneko65/rev2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/keymaps/default/readme.md (renamed from keyboards/bakeneko65/rev2/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/keymaps/via/keymap.c (renamed from keyboards/bakeneko65/rev2/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/keymaps/via/rules.mk (renamed from keyboards/geminate60/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/readme.md17
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/rev2.c (renamed from keyboards/bakeneko65/rev2/rev2.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/rev2.h (renamed from keyboards/bakeneko65/rev2/rev2.h)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev2/rules.mk (renamed from keyboards/bakeneko65/rev2/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/config.h (renamed from keyboards/bakeneko65/rev3/config.h)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/info.json (renamed from keyboards/bakeneko65/rev3/info.json)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/keymaps/default/keymap.c (renamed from keyboards/bakeneko65/rev3/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/keymaps/default/readme.md (renamed from keyboards/bakeneko65/rev3/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/keymaps/via/keymap.c (renamed from keyboards/bakeneko65/rev3/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/keymaps/via/rules.mk (renamed from keyboards/gingham/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/readme.md17
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/rev3.c (renamed from keyboards/bakeneko65/rev3/rev3.c)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/rev3.h (renamed from keyboards/bakeneko65/rev3/rev3.h)0
-rw-r--r--keyboards/kkatano/bakeneko65/rev3/rules.mk (renamed from data/templates/avr/rules.mk)0
-rw-r--r--keyboards/kkatano/bakeneko80/bakeneko80.c (renamed from keyboards/bakeneko80/bakeneko80.c)0
-rw-r--r--keyboards/kkatano/bakeneko80/bakeneko80.h (renamed from keyboards/bakeneko80/bakeneko80.h)0
-rw-r--r--keyboards/kkatano/bakeneko80/config.h (renamed from keyboards/bakeneko80/config.h)0
-rw-r--r--keyboards/kkatano/bakeneko80/info.json (renamed from keyboards/bakeneko80/info.json)0
-rw-r--r--keyboards/kkatano/bakeneko80/keymaps/default/keymap.c (renamed from keyboards/bakeneko80/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/bakeneko80/keymaps/default/readme.md (renamed from keyboards/bakeneko80/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/bakeneko80/readme.md13
-rw-r--r--keyboards/kkatano/bakeneko80/rules.mk (renamed from keyboards/bakeneko80/rules.mk)0
-rw-r--r--keyboards/kkatano/wallaby/config.h (renamed from keyboards/wallaby/config.h)0
-rw-r--r--keyboards/kkatano/wallaby/info.json (renamed from keyboards/wallaby/info.json)0
-rw-r--r--keyboards/kkatano/wallaby/keymaps/default/keymap.c (renamed from keyboards/wallaby/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/wallaby/keymaps/default/readme.md (renamed from keyboards/wallaby/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/wallaby/readme.md13
-rw-r--r--keyboards/kkatano/wallaby/rules.mk (renamed from keyboards/wallaby/rules.mk)0
-rw-r--r--keyboards/kkatano/wallaby/wallaby.c (renamed from keyboards/wallaby/wallaby.c)0
-rw-r--r--keyboards/kkatano/wallaby/wallaby.h (renamed from keyboards/wallaby/wallaby.h)0
-rw-r--r--keyboards/kkatano/yurei/config.h (renamed from keyboards/yurei/config.h)0
-rw-r--r--keyboards/kkatano/yurei/info.json (renamed from keyboards/yurei/info.json)0
-rw-r--r--keyboards/kkatano/yurei/keymaps/default/keymap.c (renamed from keyboards/yurei/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kkatano/yurei/keymaps/default/readme.md (renamed from keyboards/yurei/keymaps/default/readme.md)0
-rw-r--r--keyboards/kkatano/yurei/readme.md13
-rw-r--r--keyboards/kkatano/yurei/rules.mk (renamed from keyboards/yurei/rules.mk)0
-rw-r--r--keyboards/kkatano/yurei/yurei.c (renamed from keyboards/yurei/yurei.c)0
-rw-r--r--keyboards/kkatano/yurei/yurei.h (renamed from keyboards/yurei/yurei.h)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.c63
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/config.h (renamed from keyboards/kprepublic/bm65hsrgb_iso/config.h)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json (renamed from keyboards/kprepublic/bm65hsrgb_iso/info.json)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/config.h (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/config.h)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.c (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.h (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.h)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/readme.md (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/readme.md)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/rules.mk (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/rules.mk)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/default/keymap.c (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/keymap.c (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/readme.md (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/readme.md)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/rules.mk (renamed from keyboards/ajisai74/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/readme.md (renamed from keyboards/kprepublic/bm65hsrgb_iso/readme.md)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c63
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.h (renamed from keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.h)0
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/rules.mk (renamed from keyboards/kprepublic/bm65hsrgb_iso/rules.mk)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/bm68hsrgb.c52
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/config.h (renamed from keyboards/kprepublic/bm68hsrgb/config.h)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/info.json (renamed from keyboards/kprepublic/bm68hsrgb/info.json)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/keymap.c (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/readme.md (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/default/readme.md)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/config.h)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.c (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.h (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.h)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/readme.md (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/readme.md)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/keymap.c (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/readme.md (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/via/readme.md)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/rules.mk (renamed from keyboards/idobo/keymaps/via/rules.mk)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/readme.md (renamed from keyboards/kprepublic/bm68hsrgb/readme.md)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/rev1.c52
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/rev1.h (renamed from keyboards/kprepublic/bm68hsrgb/bm68hsrgb.h)0
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/rules.mk (renamed from keyboards/kprepublic/bm68hsrgb/rules.mk)0
-rw-r--r--keyboards/latin17rgb/readme.md20
-rw-r--r--keyboards/latin47ble/readme.md14
-rw-r--r--keyboards/latin47ble/rules.mk25
-rw-r--r--keyboards/latin60rgb/readme.md14
-rw-r--r--keyboards/latin64ble/readme.md14
-rw-r--r--keyboards/latin64ble/rules.mk23
-rw-r--r--keyboards/latin6rgb/readme.md14
-rw-r--r--keyboards/latincompass/latin17rgb/config.h (renamed from keyboards/latin17rgb/config.h)0
-rw-r--r--keyboards/latincompass/latin17rgb/info.json (renamed from keyboards/latin17rgb/info.json)0
-rw-r--r--keyboards/latincompass/latin17rgb/keymaps/default/keymap.c (renamed from keyboards/latin17rgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latin17rgb/keymaps/via/keymap.c (renamed from keyboards/latin17rgb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latin17rgb/keymaps/via/rules.mk (renamed from keyboards/choco60/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latin17rgb/latin17rgb.c (renamed from keyboards/latin17rgb/latin17rgb.c)0
-rw-r--r--keyboards/latincompass/latin17rgb/latin17rgb.h (renamed from keyboards/latin17rgb/latin17rgb.h)0
-rw-r--r--keyboards/latincompass/latin17rgb/readme.md20
-rw-r--r--keyboards/latincompass/latin17rgb/rules.mk (renamed from keyboards/latin17rgb/rules.mk)0
-rw-r--r--keyboards/latincompass/latin47ble/config.h (renamed from keyboards/latin47ble/config.h)0
-rw-r--r--keyboards/latincompass/latin47ble/info.json (renamed from keyboards/latin47ble/info.json)0
-rw-r--r--keyboards/latincompass/latin47ble/keymaps/default/keymap.c (renamed from keyboards/latin47ble/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latin47ble/keymaps/via/keymap.c (renamed from keyboards/latin47ble/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latin47ble/keymaps/via/rules.mk (renamed from keyboards/latin17rgb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latin47ble/latin47ble.c (renamed from keyboards/latin47ble/latin47ble.c)0
-rw-r--r--keyboards/latincompass/latin47ble/latin47ble.h (renamed from keyboards/latin47ble/latin47ble.h)0
-rw-r--r--keyboards/latincompass/latin47ble/readme.md14
-rw-r--r--keyboards/latincompass/latin47ble/rules.mk25
-rw-r--r--keyboards/latincompass/latin60rgb/config.h (renamed from keyboards/latin60rgb/config.h)0
-rw-r--r--keyboards/latincompass/latin60rgb/info.json (renamed from keyboards/latin60rgb/info.json)0
-rw-r--r--keyboards/latincompass/latin60rgb/keymaps/default/keymap.c (renamed from keyboards/latin60rgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latin60rgb/keymaps/via/keymap.c (renamed from keyboards/latin60rgb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latin60rgb/keymaps/via/rules.mk (renamed from keyboards/latin47ble/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latin60rgb/latin60rgb.c (renamed from keyboards/latin60rgb/latin60rgb.c)0
-rw-r--r--keyboards/latincompass/latin60rgb/latin60rgb.h (renamed from keyboards/latin60rgb/latin60rgb.h)0
-rw-r--r--keyboards/latincompass/latin60rgb/readme.md14
-rw-r--r--keyboards/latincompass/latin60rgb/rules.mk (renamed from keyboards/latin60rgb/rules.mk)0
-rw-r--r--keyboards/latincompass/latin64ble/config.h (renamed from keyboards/latin64ble/config.h)0
-rw-r--r--keyboards/latincompass/latin64ble/info.json (renamed from keyboards/latin64ble/info.json)0
-rw-r--r--keyboards/latincompass/latin64ble/keymaps/default/keymap.c (renamed from keyboards/latin64ble/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latin64ble/keymaps/via/keymap.c (renamed from keyboards/latin64ble/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latin64ble/keymaps/via/rules.mk (renamed from keyboards/latin60rgb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latin64ble/latin64ble.c (renamed from keyboards/latin64ble/latin64ble.c)0
-rw-r--r--keyboards/latincompass/latin64ble/latin64ble.h (renamed from keyboards/latin64ble/latin64ble.h)0
-rw-r--r--keyboards/latincompass/latin64ble/readme.md14
-rw-r--r--keyboards/latincompass/latin64ble/rules.mk23
-rw-r--r--keyboards/latincompass/latin6rgb/config.h (renamed from keyboards/latin6rgb/config.h)0
-rw-r--r--keyboards/latincompass/latin6rgb/info.json (renamed from keyboards/latin6rgb/info.json)0
-rw-r--r--keyboards/latincompass/latin6rgb/keymaps/default/keymap.c (renamed from keyboards/latin6rgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latin6rgb/keymaps/via/keymap.c (renamed from keyboards/latin6rgb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latin6rgb/keymaps/via/rules.mk (renamed from keyboards/latin64ble/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latin6rgb/latin6rgb.c (renamed from keyboards/latin6rgb/latin6rgb.c)0
-rw-r--r--keyboards/latincompass/latin6rgb/latin6rgb.h (renamed from keyboards/latin6rgb/latin6rgb.h)0
-rw-r--r--keyboards/latincompass/latin6rgb/readme.md14
-rw-r--r--keyboards/latincompass/latin6rgb/rules.mk (renamed from keyboards/latin6rgb/rules.mk)0
-rw-r--r--keyboards/latincompass/latinpad/config.h (renamed from keyboards/latinpad/config.h)0
-rw-r--r--keyboards/latincompass/latinpad/info.json (renamed from keyboards/latinpad/info.json)0
-rw-r--r--keyboards/latincompass/latinpad/keymaps/default/keymap.c (renamed from keyboards/latinpad/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latinpad/keymaps/via/keymap.c (renamed from keyboards/latinpad/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latinpad/keymaps/via/rules.mk (renamed from keyboards/latin6rgb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latinpad/latinpad.c (renamed from keyboards/latinpad/latinpad.c)0
-rw-r--r--keyboards/latincompass/latinpad/latinpad.h (renamed from keyboards/latinpad/latinpad.h)0
-rw-r--r--keyboards/latincompass/latinpad/lib/glcdfont.c (renamed from keyboards/latinpad/lib/glcdfont.c)0
-rw-r--r--keyboards/latincompass/latinpad/readme.md14
-rw-r--r--keyboards/latincompass/latinpad/rules.mk (renamed from keyboards/latinpad/rules.mk)0
-rw-r--r--keyboards/latincompass/latinpadble/config.h (renamed from keyboards/latinpadble/config.h)0
-rw-r--r--keyboards/latincompass/latinpadble/info.json (renamed from keyboards/latinpadble/info.json)0
-rw-r--r--keyboards/latincompass/latinpadble/keymaps/default/keymap.c (renamed from keyboards/latinpadble/keymaps/default/keymap.c)0
-rw-r--r--keyboards/latincompass/latinpadble/keymaps/via/keymap.c (renamed from keyboards/latinpadble/keymaps/via/keymap.c)0
-rw-r--r--keyboards/latincompass/latinpadble/keymaps/via/rules.mk (renamed from keyboards/latinpad/keymaps/via/rules.mk)0
-rw-r--r--keyboards/latincompass/latinpadble/latinpadble.c (renamed from keyboards/latinpadble/latinpadble.c)0
-rw-r--r--keyboards/latincompass/latinpadble/latinpadble.h (renamed from keyboards/latinpadble/latinpadble.h)0
-rw-r--r--keyboards/latincompass/latinpadble/lib/glcdfont.c (renamed from keyboards/latinpadble/lib/glcdfont.c)0
-rw-r--r--keyboards/latincompass/latinpadble/readme.md14
-rw-r--r--keyboards/latincompass/latinpadble/rules.mk27
-rw-r--r--keyboards/latinpad/readme.md14
-rw-r--r--keyboards/latinpadble/readme.md14
-rw-r--r--keyboards/latinpadble/rules.mk27
-rw-r--r--keyboards/launchpad/launchpad.h7
-rw-r--r--keyboards/launchpad/readme.md32
-rw-r--r--keyboards/launchpad/rules.mk20
-rw-r--r--keyboards/lck75/readme.md17
-rw-r--r--keyboards/le_chiffre/readme.md15
-rw-r--r--keyboards/lefishe/readme.md24
-rw-r--r--keyboards/lets_split_eh/config.h35
-rw-r--r--keyboards/lets_split_eh/lets_split_eh.h7
-rw-r--r--keyboards/lets_split_eh/readme.md13
-rw-r--r--keyboards/lets_split_eh/rules.mk24
-rw-r--r--keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c84
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c216
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c15
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c15
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c15
-rw-r--r--keyboards/lfkeyboards/lfk78/lfk78.c67
-rw-r--r--keyboards/lfkeyboards/lfk78/lfk78.h13
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c307
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c150
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/gbchk/keymap.c150
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c160
-rw-r--r--keyboards/lfkeyboards/lfk87/lfk87.c55
-rw-r--r--keyboards/lfkeyboards/lfk87/lfk87.h14
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c153
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c147
-rw-r--r--keyboards/lfkeyboards/mini1800/mini1800.c58
-rw-r--r--keyboards/lfkeyboards/mini1800/mini1800.h14
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/default/keymap.c90
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c90
-rw-r--r--keyboards/lfkeyboards/smk65/revb/revb.c56
-rw-r--r--keyboards/lfkeyboards/smk65/revb/revb.h13
-rw-r--r--keyboards/lily58/keymaps/druotoni/rules.mk1
-rw-r--r--keyboards/ls_60/readme.md17
-rw-r--r--keyboards/lyso1/lck75/config.h (renamed from keyboards/lck75/config.h)0
-rw-r--r--keyboards/lyso1/lck75/info.json (renamed from keyboards/lck75/info.json)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/7u/keymap.c (renamed from keyboards/lck75/keymaps/7u/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/7u_iso/keymap.c (renamed from keyboards/lck75/keymaps/7u_iso/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/7u_sbs/keymap.c (renamed from keyboards/lck75/keymaps/7u_sbs/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/default/keymap.c (renamed from keyboards/lck75/keymaps/default/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/iso/keymap.c (renamed from keyboards/lck75/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/iso_sbs/keymap.c (renamed from keyboards/lck75/keymaps/iso_sbs/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/sbs/keymap.c (renamed from keyboards/lck75/keymaps/sbs/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/via/keymap.c (renamed from keyboards/lck75/keymaps/via/keymap.c)0
-rw-r--r--keyboards/lyso1/lck75/keymaps/via/rules.mk (renamed from keyboards/lck75/keymaps/via/rules.mk)0
-rw-r--r--keyboards/lyso1/lck75/lck75.c (renamed from keyboards/lck75/lck75.c)0
-rw-r--r--keyboards/lyso1/lck75/lck75.h (renamed from keyboards/lck75/lck75.h)0
-rw-r--r--keyboards/lyso1/lck75/readme.md17
-rw-r--r--keyboards/lyso1/lck75/rules.mk (renamed from keyboards/lck75/rules.mk)0
-rw-r--r--keyboards/lyso1/lefishe/config.h (renamed from keyboards/lefishe/config.h)0
-rw-r--r--keyboards/lyso1/lefishe/info.json (renamed from keyboards/lefishe/info.json)0
-rw-r--r--keyboards/lyso1/lefishe/keymaps/default/keymap.c (renamed from keyboards/lefishe/keymaps/default/keymap.c)0
-rw-r--r--keyboards/lyso1/lefishe/keymaps/wk_sbs/keymap.c (renamed from keyboards/lefishe/keymaps/wk_sbs/keymap.c)0
-rw-r--r--keyboards/lyso1/lefishe/keymaps/wkl/keymap.c (renamed from keyboards/lefishe/keymaps/wkl/keymap.c)0
-rw-r--r--keyboards/lyso1/lefishe/keymaps/wkl_sbs/keymap.c (renamed from keyboards/lefishe/keymaps/wkl_sbs/keymap.c)0
-rw-r--r--keyboards/lyso1/lefishe/lefishe.c (renamed from keyboards/lefishe/lefishe.c)0
-rw-r--r--keyboards/lyso1/lefishe/lefishe.h (renamed from keyboards/lefishe/lefishe.h)0
-rw-r--r--keyboards/lyso1/lefishe/readme.md24
-rw-r--r--keyboards/lyso1/lefishe/rules.mk (renamed from keyboards/lefishe/rules.mk)0
-rw-r--r--keyboards/m3n3van/readme.md21
-rw-r--r--keyboards/maple_computing/6ball/6ball.c (renamed from keyboards/6ball/6ball.c)0
-rw-r--r--keyboards/maple_computing/6ball/6ball.h (renamed from keyboards/6ball/6ball.h)0
-rw-r--r--keyboards/maple_computing/6ball/config.h (renamed from keyboards/6ball/config.h)0
-rw-r--r--keyboards/maple_computing/6ball/info.json (renamed from keyboards/6ball/info.json)0
-rw-r--r--keyboards/maple_computing/6ball/keymaps/default/keymap.c (renamed from keyboards/6ball/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/6ball/readme.md14
-rw-r--r--keyboards/maple_computing/6ball/rules.mk (renamed from keyboards/6ball/rules.mk)0
-rwxr-xr-xkeyboards/maple_computing/c39/c39.c (renamed from keyboards/c39/c39.c)0
-rwxr-xr-xkeyboards/maple_computing/c39/c39.h (renamed from keyboards/c39/c39.h)0
-rwxr-xr-xkeyboards/maple_computing/c39/config.h (renamed from keyboards/c39/config.h)0
-rwxr-xr-xkeyboards/maple_computing/c39/info.json (renamed from keyboards/c39/info.json)0
-rwxr-xr-xkeyboards/maple_computing/c39/keymaps/default/keymap.c (renamed from keyboards/c39/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/maple_computing/c39/keymaps/default/readme.md (renamed from keyboards/c39/keymaps/default/readme.md)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/drashna/config.h (renamed from keyboards/c39/keymaps/drashna/config.h)0
-rwxr-xr-xkeyboards/maple_computing/c39/keymaps/drashna/keymap.c (renamed from keyboards/c39/keymaps/drashna/keymap.c)0
-rwxr-xr-xkeyboards/maple_computing/c39/keymaps/drashna/readme.md (renamed from keyboards/c39/keymaps/drashna/readme.md)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/drashna/rules.mk (renamed from keyboards/c39/keymaps/drashna/rules.mk)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/kuchosauronad0/config.h (renamed from keyboards/c39/keymaps/kuchosauronad0/config.h)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/kuchosauronad0/keymap.c (renamed from keyboards/c39/keymaps/kuchosauronad0/keymap.c)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/kuchosauronad0/readme.md (renamed from keyboards/c39/keymaps/kuchosauronad0/readme.md)0
-rw-r--r--keyboards/maple_computing/c39/keymaps/kuchosauronad0/rules.mk (renamed from keyboards/c39/keymaps/kuchosauronad0/rules.mk)0
-rwxr-xr-xkeyboards/maple_computing/c39/readme.md16
-rwxr-xr-xkeyboards/maple_computing/c39/rules.mk (renamed from keyboards/c39/rules.mk)0
-rw-r--r--keyboards/maple_computing/christmas_tree/.noci (renamed from keyboards/cu75/.noci)0
-rw-r--r--keyboards/maple_computing/christmas_tree/V2017/V2017.c (renamed from keyboards/christmas_tree/V2017/V2017.c)0
-rw-r--r--keyboards/maple_computing/christmas_tree/V2017/V2017.h (renamed from keyboards/christmas_tree/V2017/V2017.h)0
-rw-r--r--keyboards/maple_computing/christmas_tree/V2017/config.h (renamed from keyboards/christmas_tree/V2017/config.h)0
-rw-r--r--keyboards/maple_computing/christmas_tree/V2017/rules.mk (renamed from keyboards/christmas_tree/V2017/rules.mk)0
-rw-r--r--keyboards/maple_computing/christmas_tree/christmas_tree.c (renamed from keyboards/christmas_tree/christmas_tree.c)0
-rw-r--r--keyboards/maple_computing/christmas_tree/christmas_tree.h (renamed from keyboards/christmas_tree/christmas_tree.h)0
-rw-r--r--keyboards/maple_computing/christmas_tree/config.h (renamed from keyboards/christmas_tree/config.h)0
-rw-r--r--keyboards/maple_computing/christmas_tree/info.json (renamed from keyboards/christmas_tree/info.json)0
-rw-r--r--keyboards/maple_computing/christmas_tree/keymaps/default/keymap.c (renamed from keyboards/christmas_tree/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/christmas_tree/keymaps/default/readme.md (renamed from keyboards/christmas_tree/keymaps/default/readme.md)0
-rw-r--r--keyboards/maple_computing/christmas_tree/readme.md14
-rw-r--r--keyboards/maple_computing/christmas_tree/rules.mk20
-rw-r--r--keyboards/maple_computing/ivy/.noci (renamed from keyboards/ergo42/.noci)0
-rw-r--r--keyboards/maple_computing/ivy/config.h (renamed from keyboards/ivy/config.h)0
-rw-r--r--keyboards/maple_computing/ivy/ivy.c (renamed from keyboards/ivy/ivy.c)0
-rw-r--r--keyboards/maple_computing/ivy/ivy.h7
-rw-r--r--keyboards/maple_computing/ivy/keymaps/default/keymap.c (renamed from keyboards/ivy/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/ivy/readme.md15
-rw-r--r--keyboards/maple_computing/ivy/rev1/config.h (renamed from keyboards/ivy/rev1/config.h)0
-rw-r--r--keyboards/maple_computing/ivy/rev1/info.json (renamed from keyboards/ivy/rev1/info.json)0
-rw-r--r--keyboards/maple_computing/ivy/rev1/rev1.c (renamed from keyboards/ivy/rev1/rev1.c)0
-rw-r--r--keyboards/maple_computing/ivy/rev1/rev1.h (renamed from keyboards/ivy/rev1/rev1.h)0
-rw-r--r--keyboards/maple_computing/ivy/rev1/rules.mk (renamed from keyboards/lets_split_eh/keymaps/mikethetiger/rules.mk)0
-rw-r--r--keyboards/maple_computing/ivy/rules.mk20
-rw-r--r--keyboards/maple_computing/jnao/config.h (renamed from keyboards/jnao/config.h)0
-rw-r--r--keyboards/maple_computing/jnao/info.json (renamed from keyboards/jnao/info.json)0
-rw-r--r--keyboards/maple_computing/jnao/jnao.c (renamed from keyboards/jnao/jnao.c)0
-rw-r--r--keyboards/maple_computing/jnao/jnao.h (renamed from keyboards/jnao/jnao.h)0
-rw-r--r--keyboards/maple_computing/jnao/keymaps/default/keymap.c (renamed from keyboards/jnao/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/jnao/keymaps/default_4x12/keymap.c (renamed from keyboards/jnao/keymaps/default_4x12/keymap.c)0
-rw-r--r--keyboards/maple_computing/jnao/keymaps/via/keymap.c (renamed from keyboards/jnao/keymaps/via/keymap.c)0
-rw-r--r--keyboards/maple_computing/jnao/keymaps/via/rules.mk (renamed from keyboards/jisplit89/keymaps/via/rules.mk)0
-rw-r--r--keyboards/maple_computing/jnao/readme.md14
-rw-r--r--keyboards/maple_computing/jnao/rules.mk (renamed from keyboards/jnao/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/.noci (renamed from keyboards/ergodash/.noci)0
-rw-r--r--keyboards/maple_computing/launchpad/config.h (renamed from keyboards/launchpad/config.h)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/brandonschlack/config.h (renamed from keyboards/launchpad/keymaps/brandonschlack/config.h)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/brandonschlack/keymap.c (renamed from keyboards/launchpad/keymaps/brandonschlack/keymap.c)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/brandonschlack/readme.md (renamed from keyboards/launchpad/keymaps/brandonschlack/readme.md)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/brandonschlack/rules.mk (renamed from keyboards/launchpad/keymaps/brandonschlack/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default/keymap.c (renamed from keyboards/launchpad/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h (renamed from keyboards/launchpad/keymaps/default_rgb/config.h)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default_rgb/keymap.c (renamed from keyboards/launchpad/keymaps/default_rgb/keymap.c)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default_rgb/readme.md (renamed from keyboards/launchpad/keymaps/default_rgb/readme.md)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/default_rgb/rules.mk (renamed from keyboards/reviung39/keymaps/default/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/drashna/config.h (renamed from keyboards/launchpad/keymaps/drashna/config.h)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/drashna/keymap.c (renamed from keyboards/launchpad/keymaps/drashna/keymap.c)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk (renamed from keyboards/launchpad/keymaps/drashna/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/via/keymap.c (renamed from keyboards/launchpad/keymaps/via/keymap.c)0
-rw-r--r--keyboards/maple_computing/launchpad/keymaps/via/rules.mk (renamed from keyboards/launchpad/keymaps/via/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/launchpad.c (renamed from keyboards/launchpad/launchpad.c)0
-rw-r--r--keyboards/maple_computing/launchpad/launchpad.h7
-rw-r--r--keyboards/maple_computing/launchpad/readme.md32
-rw-r--r--keyboards/maple_computing/launchpad/rev1/config.h (renamed from keyboards/launchpad/rev1/config.h)0
-rw-r--r--keyboards/maple_computing/launchpad/rev1/info.json (renamed from keyboards/launchpad/rev1/info.json)0
-rw-r--r--keyboards/maple_computing/launchpad/rev1/rev1.c (renamed from keyboards/launchpad/rev1/rev1.c)0
-rw-r--r--keyboards/maple_computing/launchpad/rev1/rev1.h (renamed from keyboards/launchpad/rev1/rev1.h)0
-rw-r--r--keyboards/maple_computing/launchpad/rev1/rules.mk (renamed from keyboards/lets_split_eh/keymaps/that_canadian/rules.mk)0
-rw-r--r--keyboards/maple_computing/launchpad/rules.mk20
-rw-r--r--keyboards/maple_computing/lets_split_eh/.noci (renamed from keyboards/ergodash/mini/.noci)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/config.h35
-rw-r--r--keyboards/maple_computing/lets_split_eh/eh/config.h (renamed from keyboards/lets_split_eh/eh/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/eh/eh.c (renamed from keyboards/lets_split_eh/eh/eh.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/eh/eh.h (renamed from keyboards/lets_split_eh/eh/eh.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/eh/info.json (renamed from keyboards/lets_split_eh/eh/info.json)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/eh/rules.mk (renamed from keyboards/lets_split_eh/eh/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/README.md (renamed from keyboards/lets_split_eh/keymaps/bbaserdem/README.md)0
-rwxr-xr-xkeyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/config.h (renamed from keyboards/lets_split_eh/keymaps/bbaserdem/config.h)0
-rwxr-xr-xkeyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/keymap.c (renamed from keyboards/lets_split_eh/keymaps/bbaserdem/keymap.c)0
-rwxr-xr-xkeyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/rules.mk (renamed from keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/default/keymap.c (renamed from keyboards/lets_split_eh/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h (renamed from keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/keymap.c (renamed from keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/rules.mk (renamed from keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h (renamed from keyboards/lets_split_eh/keymaps/mikethetiger/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/keymap.c (renamed from keyboards/lets_split_eh/keymaps/mikethetiger/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/rules.mk (renamed from keyboards/naked48/rev1/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h (renamed from keyboards/lets_split_eh/keymaps/msiu/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/msiu/keymap.c (renamed from keyboards/lets_split_eh/keymaps/msiu/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/resfury/config.h (renamed from keyboards/lets_split_eh/keymaps/resfury/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/resfury/keymap.c (renamed from keyboards/lets_split_eh/keymaps/resfury/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/resfury/readme.md (renamed from keyboards/lets_split_eh/keymaps/resfury/readme.md)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/resfury/rules.mk (renamed from keyboards/lets_split_eh/keymaps/resfury/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/romus/README.md (renamed from keyboards/lets_split_eh/keymaps/romus/README.md)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/romus/keymap.c (renamed from keyboards/lets_split_eh/keymaps/romus/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/romus/rules.mk (renamed from keyboards/lets_split_eh/keymaps/romus/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/config.h (renamed from keyboards/lets_split_eh/keymaps/that_canadian/config.h)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/keymap.c (renamed from keyboards/lets_split_eh/keymaps/that_canadian/keymap.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/rules.mk (renamed from keyboards/naked60/rev1/rules.mk)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/lets_split_eh.c (renamed from keyboards/lets_split_eh/lets_split_eh.c)0
-rw-r--r--keyboards/maple_computing/lets_split_eh/lets_split_eh.h7
-rw-r--r--keyboards/maple_computing/lets_split_eh/readme.md13
-rw-r--r--keyboards/maple_computing/lets_split_eh/rules.mk24
-rw-r--r--keyboards/maple_computing/minidox/.noci (renamed from keyboards/ergodash/rev1/.noci)0
-rw-r--r--keyboards/maple_computing/minidox/config.h (renamed from keyboards/minidox/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/alairock/config.h (renamed from keyboards/minidox/keymaps/alairock/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/alairock/keymap.c (renamed from keyboards/minidox/keymaps/alairock/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/alairock/rules.mk (renamed from keyboards/minidox/keymaps/alairock/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/bepo/config.h (renamed from keyboards/minidox/keymaps/bepo/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/bepo/keymap.c (renamed from keyboards/minidox/keymaps/bepo/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/bepo/readme.md (renamed from keyboards/minidox/keymaps/bepo/readme.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/default/keymap.c (renamed from keyboards/minidox/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/dustypomerleau/README.md (renamed from keyboards/minidox/keymaps/dustypomerleau/README.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/dustypomerleau/config.h (renamed from keyboards/minidox/keymaps/dustypomerleau/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/dustypomerleau/keymap.c (renamed from keyboards/minidox/keymaps/dustypomerleau/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/dustypomerleau/rules.mk (renamed from keyboards/minidox/keymaps/dustypomerleau/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/haegin/keymap.c (renamed from keyboards/minidox/keymaps/haegin/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/khitsule/config.h (renamed from keyboards/minidox/keymaps/khitsule/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/khitsule/keymap.c (renamed from keyboards/minidox/keymaps/khitsule/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/khitsule/readme.md (renamed from keyboards/minidox/keymaps/khitsule/readme.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/norman/config.h (renamed from keyboards/minidox/keymaps/norman/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/norman/keymap.c (renamed from keyboards/minidox/keymaps/norman/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/norman/readme.md (renamed from keyboards/minidox/keymaps/norman/readme.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h (renamed from keyboards/minidox/keymaps/rsthd_combos/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c (renamed from keyboards/minidox/keymaps/rsthd_combos/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/rsthd_combos/readme.md (renamed from keyboards/minidox/keymaps/rsthd_combos/readme.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/rsthd_combos/rules.mk (renamed from keyboards/qaz/keymaps/default_big_space/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/that_canadian/config.h (renamed from keyboards/minidox/keymaps/that_canadian/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/that_canadian/keymap.c (renamed from keyboards/minidox/keymaps/that_canadian/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/that_canadian/rules.mk (renamed from keyboards/minidox/keymaps/that_canadian/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/tomb0y/README.md (renamed from keyboards/minidox/keymaps/tomb0y/README.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/tomb0y/keymap.c (renamed from keyboards/minidox/keymaps/tomb0y/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/tw1t611/keymap.c (renamed from keyboards/minidox/keymaps/tw1t611/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/tw1t611/readme.md (renamed from keyboards/minidox/keymaps/tw1t611/readme.md)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/tw1t611/rules.mk (renamed from keyboards/minidox/keymaps/tw1t611/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/xyverz/config.h (renamed from keyboards/minidox/keymaps/xyverz/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/xyverz/keymap.c (renamed from keyboards/minidox/keymaps/xyverz/keymap.c)0
-rw-r--r--keyboards/maple_computing/minidox/keymaps/xyverz/rules.mk (renamed from keyboards/minidox/keymaps/xyverz/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/minidox.c (renamed from keyboards/minidox/minidox.c)0
-rw-r--r--keyboards/maple_computing/minidox/minidox.h7
-rw-r--r--keyboards/maple_computing/minidox/readme.md27
-rw-r--r--keyboards/maple_computing/minidox/rev1/config.h (renamed from keyboards/minidox/rev1/config.h)0
-rw-r--r--keyboards/maple_computing/minidox/rev1/info.json (renamed from keyboards/minidox/rev1/info.json)0
-rw-r--r--keyboards/maple_computing/minidox/rev1/rev1.c (renamed from keyboards/minidox/rev1/rev1.c)0
-rw-r--r--keyboards/maple_computing/minidox/rev1/rev1.h (renamed from keyboards/minidox/rev1/rev1.h)0
-rw-r--r--keyboards/maple_computing/minidox/rev1/rules.mk (renamed from keyboards/minidox/rev1/rules.mk)0
-rw-r--r--keyboards/maple_computing/minidox/rules.mk22
-rw-r--r--keyboards/maple_computing/the_ruler/config.h (renamed from keyboards/the_ruler/config.h)0
-rw-r--r--keyboards/maple_computing/the_ruler/info.json (renamed from keyboards/the_ruler/info.json)0
-rw-r--r--keyboards/maple_computing/the_ruler/keymaps/default/keymap.c (renamed from keyboards/the_ruler/keymaps/default/keymap.c)0
-rw-r--r--keyboards/maple_computing/the_ruler/keymaps/default/readme.md (renamed from keyboards/the_ruler/keymaps/default/readme.md)0
-rw-r--r--keyboards/maple_computing/the_ruler/readme.md13
-rw-r--r--keyboards/maple_computing/the_ruler/rules.mk (renamed from keyboards/the_ruler/rules.mk)0
-rw-r--r--keyboards/maple_computing/the_ruler/the_ruler.c (renamed from keyboards/the_ruler/the_ruler.c)0
-rw-r--r--keyboards/maple_computing/the_ruler/the_ruler.h (renamed from keyboards/the_ruler/the_ruler.h)0
-rw-r--r--keyboards/marksard/treadstone32/info.json (renamed from keyboards/treadstone32/info.json)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/default/config.h (renamed from keyboards/treadstone32/keymaps/default/config.h)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/default/keymap.c (renamed from keyboards/treadstone32/keymaps/default/keymap.c)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/default/readme.md (renamed from keyboards/treadstone32/keymaps/default/readme.md)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/default/readme_jp.md (renamed from keyboards/treadstone32/keymaps/default/readme_jp.md)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/default/rules.mk (renamed from keyboards/treadstone32/keymaps/default/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/like_jis/config.h (renamed from keyboards/treadstone32/keymaps/like_jis/config.h)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/like_jis/keymap.c (renamed from keyboards/treadstone32/keymaps/like_jis/keymap.c)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/like_jis/readme.md (renamed from keyboards/treadstone32/keymaps/like_jis/readme.md)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/like_jis/readme_jp.md (renamed from keyboards/treadstone32/keymaps/like_jis/readme_jp.md)0
-rw-r--r--keyboards/marksard/treadstone32/keymaps/like_jis/rules.mk (renamed from keyboards/treadstone32/keymaps/like_jis/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone32/lite/.noci (renamed from keyboards/getta25/.noci)0
-rw-r--r--keyboards/marksard/treadstone32/lite/config.h (renamed from keyboards/treadstone32/lite/config.h)0
-rw-r--r--keyboards/marksard/treadstone32/lite/lite.c (renamed from keyboards/treadstone32/lite/lite.c)0
-rw-r--r--keyboards/marksard/treadstone32/lite/lite.h (renamed from keyboards/treadstone32/lite/lite.h)0
-rw-r--r--keyboards/marksard/treadstone32/lite/rules.mk (renamed from keyboards/treadstone32/lite/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone32/readme.md21
-rw-r--r--keyboards/marksard/treadstone32/rev1/.noci (renamed from keyboards/ivy/.noci)0
-rw-r--r--keyboards/marksard/treadstone32/rev1/config.h (renamed from keyboards/treadstone32/rev1/config.h)0
-rw-r--r--keyboards/marksard/treadstone32/rev1/rev1.c (renamed from keyboards/treadstone32/rev1/rev1.c)0
-rw-r--r--keyboards/marksard/treadstone32/rev1/rev1.h (renamed from keyboards/treadstone32/rev1/rev1.h)0
-rw-r--r--keyboards/marksard/treadstone32/rev1/rules.mk (renamed from keyboards/treadstone32/rev1/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone32/rules.mk18
-rw-r--r--keyboards/marksard/treadstone48/.noci (renamed from keyboards/jisplit89/.noci)0
-rw-r--r--keyboards/marksard/treadstone48/common/glcdfont.c (renamed from keyboards/treadstone48/common/glcdfont.c)0
-rw-r--r--keyboards/marksard/treadstone48/common/oled_helper.c (renamed from keyboards/treadstone48/common/oled_helper.c)0
-rw-r--r--keyboards/marksard/treadstone48/common/oled_helper.h (renamed from keyboards/treadstone48/common/oled_helper.h)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/default/config.h49
-rw-r--r--keyboards/marksard/treadstone48/keymaps/default/keymap.c (renamed from keyboards/treadstone48/keymaps/default/keymap.c)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/default/readme.md (renamed from keyboards/treadstone48/keymaps/default/readme.md)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/default/readme_jp.md (renamed from keyboards/treadstone48/keymaps/default/readme_jp.md)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/default/rules.mk (renamed from keyboards/treadstone48/keymaps/default/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/like_jis/config.h49
-rw-r--r--keyboards/marksard/treadstone48/keymaps/like_jis/keymap.c (renamed from keyboards/treadstone48/keymaps/like_jis/keymap.c)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/like_jis/readme.md (renamed from keyboards/treadstone48/keymaps/like_jis/readme.md)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/like_jis/readme_jp.md (renamed from keyboards/treadstone48/keymaps/like_jis/readme_jp.md)0
-rw-r--r--keyboards/marksard/treadstone48/keymaps/like_jis/rules.mk (renamed from keyboards/treadstone48/keymaps/like_jis/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone48/readme.md21
-rw-r--r--keyboards/marksard/treadstone48/rev1/.noci (renamed from keyboards/launchpad/.noci)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/config.h (renamed from keyboards/treadstone48/rev1/config.h)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/info.json (renamed from keyboards/treadstone48/rev1/info.json)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h51
-rw-r--r--keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/keymap.c (renamed from keyboards/treadstone48/rev1/keymaps/like_jis_rs/keymap.c)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme.md (renamed from keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme.md)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md (renamed from keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/rules.mk (renamed from keyboards/treadstone48/rev1/keymaps/like_jis_rs/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/rev1.c (renamed from keyboards/treadstone48/rev1/rev1.c)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/rev1.h (renamed from keyboards/treadstone48/rev1/rev1.h)0
-rw-r--r--keyboards/marksard/treadstone48/rev1/rules.mk (renamed from keyboards/getta25/rev1/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone48/rev2/config.h (renamed from keyboards/treadstone48/rev2/config.h)0
-rw-r--r--keyboards/marksard/treadstone48/rev2/info.json (renamed from keyboards/treadstone48/rev2/info.json)0
-rw-r--r--keyboards/marksard/treadstone48/rev2/rev2.c (renamed from keyboards/treadstone48/rev2/rev2.c)0
-rw-r--r--keyboards/marksard/treadstone48/rev2/rev2.h (renamed from keyboards/treadstone48/rev2/rev2.h)0
-rw-r--r--keyboards/marksard/treadstone48/rev2/rules.mk (renamed from keyboards/naked48/keymaps/default/rules.mk)0
-rw-r--r--keyboards/marksard/treadstone48/rules.mk25
-rw-r--r--keyboards/massdrop/alt/rules.mk3
-rw-r--r--keyboards/massdrop/ctrl/rules.mk3
-rw-r--r--keyboards/matrix/abelx/abelx.c5
-rw-r--r--keyboards/matrix/abelx/boards/abelx_bd/board.c3
-rw-r--r--keyboards/matrix/abelx/bootloader_defs.h7
-rw-r--r--keyboards/matrix/abelx/rules.mk12
-rw-r--r--keyboards/matrix/m12og/rev1/rev1.c5
-rw-r--r--keyboards/matrix/m12og/rev1/rules.mk3
-rw-r--r--keyboards/matrix/m20add/bootloader_defs.h5
-rw-r--r--keyboards/matrix/m20add/m20add.c24
-rw-r--r--keyboards/matrix/m20add/rules.mk3
-rw-r--r--keyboards/matrix/noah/bootloader_defs.h5
-rw-r--r--keyboards/matrix/noah/noah.c5
-rw-r--r--keyboards/matrix/noah/rules.mk3
-rw-r--r--keyboards/matthewdias/m3n3van/config.h (renamed from keyboards/m3n3van/config.h)0
-rw-r--r--keyboards/matthewdias/m3n3van/info.json (renamed from keyboards/m3n3van/info.json)0
-rw-r--r--keyboards/matthewdias/m3n3van/keymaps/default/keymap.json (renamed from keyboards/m3n3van/keymaps/default/keymap.json)0
-rw-r--r--keyboards/matthewdias/m3n3van/keymaps/matthewdias/keymap.c (renamed from keyboards/m3n3van/keymaps/matthewdias/keymap.c)0
-rw-r--r--keyboards/matthewdias/m3n3van/keymaps/via/keymap.c (renamed from keyboards/m3n3van/keymaps/via/keymap.c)0
-rw-r--r--keyboards/matthewdias/m3n3van/keymaps/via/rules.mk (renamed from keyboards/jnao/keymaps/via/rules.mk)0
-rw-r--r--keyboards/matthewdias/m3n3van/m3n3van.c (renamed from keyboards/m3n3van/m3n3van.c)0
-rw-r--r--keyboards/matthewdias/m3n3van/m3n3van.h (renamed from keyboards/m3n3van/m3n3van.h)0
-rw-r--r--keyboards/matthewdias/m3n3van/readme.md21
-rw-r--r--keyboards/matthewdias/m3n3van/rules.mk (renamed from keyboards/m3n3van/rules.mk)0
-rw-r--r--keyboards/matthewdias/minim/config.h (renamed from keyboards/minim/config.h)0
-rw-r--r--keyboards/matthewdias/minim/info.json (renamed from keyboards/minim/info.json)0
-rw-r--r--keyboards/matthewdias/minim/keymaps/default/keymap.json (renamed from keyboards/minim/keymaps/default/keymap.json)0
-rw-r--r--keyboards/matthewdias/minim/minim.c (renamed from keyboards/minim/minim.c)0
-rw-r--r--keyboards/matthewdias/minim/minim.h (renamed from keyboards/minim/minim.h)0
-rw-r--r--keyboards/matthewdias/minim/readme.md21
-rw-r--r--keyboards/matthewdias/minim/rules.mk (renamed from keyboards/minim/rules.mk)0
-rw-r--r--keyboards/matthewdias/model_v/config.h (renamed from keyboards/model_v/config.h)0
-rw-r--r--keyboards/matthewdias/model_v/info.json (renamed from keyboards/model_v/info.json)0
-rw-r--r--keyboards/matthewdias/model_v/keymaps/default/keymap.c (renamed from keyboards/model_v/keymaps/default/keymap.c)0
-rw-r--r--keyboards/matthewdias/model_v/keymaps/via/keymap.c (renamed from keyboards/model_v/keymaps/via/keymap.c)0
-rw-r--r--keyboards/matthewdias/model_v/keymaps/via/rules.mk (renamed from keyboards/kelowna/rgb64/keymaps/via/rules.mk)0
-rw-r--r--keyboards/matthewdias/model_v/model_v.c (renamed from keyboards/model_v/model_v.c)0
-rw-r--r--keyboards/matthewdias/model_v/model_v.h (renamed from keyboards/model_v/model_v.h)0
-rw-r--r--keyboards/matthewdias/model_v/readme.md20
-rw-r--r--keyboards/matthewdias/model_v/rules.mk (renamed from keyboards/model_v/rules.mk)0
-rw-r--r--keyboards/matthewdias/txuu/config.h (renamed from keyboards/txuu/config.h)0
-rw-r--r--keyboards/matthewdias/txuu/info.json (renamed from keyboards/txuu/info.json)0
-rw-r--r--keyboards/matthewdias/txuu/keymaps/default/keymap.c (renamed from keyboards/txuu/keymaps/default/keymap.c)0
-rw-r--r--keyboards/matthewdias/txuu/keymaps/via/keymap.c (renamed from keyboards/txuu/keymaps/via/keymap.c)0
-rw-r--r--keyboards/matthewdias/txuu/keymaps/via/rules.mk (renamed from keyboards/kprepublic/bm68hsrgb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/matthewdias/txuu/readme.md18
-rw-r--r--keyboards/matthewdias/txuu/rules.mk (renamed from keyboards/txuu/rules.mk)0
-rw-r--r--keyboards/matthewdias/txuu/txuu.c (renamed from keyboards/txuu/txuu.c)0
-rw-r--r--keyboards/matthewdias/txuu/txuu.h (renamed from keyboards/txuu/txuu.h)0
-rw-r--r--keyboards/mechkeys/acr60/acr60.c (renamed from keyboards/acr60/acr60.c)0
-rw-r--r--keyboards/mechkeys/acr60/acr60.h (renamed from keyboards/acr60/acr60.h)0
-rw-r--r--keyboards/mechkeys/acr60/config.h (renamed from keyboards/acr60/config.h)0
-rw-r--r--keyboards/mechkeys/acr60/info.json (renamed from keyboards/acr60/info.json)0
-rw-r--r--keyboards/mechkeys/acr60/keymaps/default/keymap.c (renamed from keyboards/acr60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/mechkeys/acr60/keymaps/mitch/keymap.c (renamed from keyboards/acr60/keymaps/mitch/keymap.c)0
-rw-r--r--keyboards/mechkeys/acr60/readme.md24
-rw-r--r--keyboards/mechkeys/acr60/rules.mk (renamed from keyboards/acr60/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/alu84/alu84.c (renamed from keyboards/alu84/alu84.c)0
-rwxr-xr-xkeyboards/mechkeys/alu84/alu84.h (renamed from keyboards/alu84/alu84.h)0
-rwxr-xr-xkeyboards/mechkeys/alu84/config.h (renamed from keyboards/alu84/config.h)0
-rw-r--r--keyboards/mechkeys/alu84/info.json (renamed from keyboards/alu84/info.json)0
-rwxr-xr-xkeyboards/mechkeys/alu84/keymaps/default/keymap.c (renamed from keyboards/alu84/keymaps/default/keymap.c)0
-rw-r--r--keyboards/mechkeys/alu84/keymaps/turbomech/config.h (renamed from keyboards/alu84/keymaps/turbomech/config.h)0
-rw-r--r--keyboards/mechkeys/alu84/keymaps/turbomech/keymap.c (renamed from keyboards/alu84/keymaps/turbomech/keymap.c)0
-rw-r--r--keyboards/mechkeys/alu84/keymaps/turbomech/readme.md (renamed from keyboards/alu84/keymaps/turbomech/readme.md)0
-rw-r--r--keyboards/mechkeys/alu84/keymaps/turbomech/rules.mk (renamed from keyboards/alu84/keymaps/turbomech/rules.mk)0
-rw-r--r--keyboards/mechkeys/alu84/readme.md21
-rwxr-xr-xkeyboards/mechkeys/alu84/rules.mk (renamed from keyboards/alu84/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/espectro/config.h (renamed from keyboards/espectro/config.h)0
-rwxr-xr-xkeyboards/mechkeys/espectro/espectro.c (renamed from keyboards/espectro/espectro.c)0
-rwxr-xr-xkeyboards/mechkeys/espectro/espectro.h (renamed from keyboards/espectro/espectro.h)0
-rw-r--r--keyboards/mechkeys/espectro/info.json (renamed from keyboards/espectro/info.json)0
-rwxr-xr-xkeyboards/mechkeys/espectro/keymaps/default/keymap.c (renamed from keyboards/espectro/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/mechkeys/espectro/keymaps/iso/keymap.c (renamed from keyboards/espectro/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/mechkeys/espectro/keymaps/mac/config.h (renamed from keyboards/espectro/keymaps/mac/config.h)0
-rw-r--r--keyboards/mechkeys/espectro/keymaps/mac/keymap.c (renamed from keyboards/espectro/keymaps/mac/keymap.c)0
-rw-r--r--keyboards/mechkeys/espectro/keymaps/mac/readme.md (renamed from keyboards/espectro/keymaps/mac/readme.md)0
-rw-r--r--keyboards/mechkeys/espectro/keymaps/mapdev/keymap.c (renamed from keyboards/espectro/keymaps/mapdev/keymap.c)0
-rw-r--r--keyboards/mechkeys/espectro/keymaps/mikethetiger/keymap.c (renamed from keyboards/espectro/keymaps/mikethetiger/keymap.c)0
-rw-r--r--keyboards/mechkeys/espectro/readme.md15
-rwxr-xr-xkeyboards/mechkeys/espectro/rules.mk (renamed from keyboards/espectro/rules.mk)0
-rw-r--r--keyboards/mechkeys/mechmini/mechmini.c (renamed from keyboards/mechmini/mechmini.c)0
-rw-r--r--keyboards/mechkeys/mechmini/mechmini.h25
-rw-r--r--keyboards/mechkeys/mechmini/readme.md28
-rw-r--r--keyboards/mechkeys/mechmini/rules.mk1
-rw-r--r--keyboards/mechkeys/mechmini/v1/.noci (renamed from keyboards/lets_split_eh/.noci)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/config.h (renamed from keyboards/mechmini/v1/config.h)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/info.json (renamed from keyboards/mechmini/v1/info.json)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/keymaps/default/keymap.c (renamed from keyboards/mechmini/v1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/keymaps/pitty/keymap.c (renamed from keyboards/mechmini/v1/keymaps/pitty/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/readme.md19
-rw-r--r--keyboards/mechkeys/mechmini/v1/rules.mk17
-rw-r--r--keyboards/mechkeys/mechmini/v1/v1.c (renamed from keyboards/mechmini/v1/v1.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v1/v1.h48
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/config.h (renamed from keyboards/mechmini/v2/config.h)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/info.json (renamed from keyboards/mechmini/v2/info.json)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/2u_space_ortho/keymap.c (renamed from keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/625_space/keymap.c (renamed from keyboards/mechmini/v2/keymaps/625_space/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/arkag/config.h (renamed from keyboards/mechmini/v2/keymaps/arkag/config.h)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/arkag/keymap.c (renamed from keyboards/mechmini/v2/keymaps/arkag/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/arkag/rules.mk (renamed from keyboards/mechmini/v2/keymaps/arkag/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/default/keymap.c (renamed from keyboards/mechmini/v2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/default/readme.md (renamed from keyboards/mechmini/v2/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/config.h (renamed from keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/keymap.c (renamed from keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/readme.md (renamed from keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/rules.mk (renamed from keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/config.h (renamed from keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/keymap.c (renamed from keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/readme.md (renamed from keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/rules.mk (renamed from keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/ortho/keymap.c (renamed from keyboards/mechmini/v2/keymaps/ortho/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/config.h (renamed from keyboards/mechmini/v2/keymaps/spacebarracecar/config.h)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/keymap.c (renamed from keyboards/mechmini/v2/keymaps/spacebarracecar/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/readme.md (renamed from keyboards/mechmini/v2/keymaps/spacebarracecar/readme.md)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/rules.mk (renamed from keyboards/mechmini/v2/keymaps/spacebarracecar/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/split_space/keymap.c (renamed from keyboards/mechmini/v2/keymaps/split_space/keymap.c)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/split_space/readme.md (renamed from keyboards/mechmini/v2/keymaps/split_space/readme.md)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/via/keymap.c29
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/via/rules.mk (renamed from keyboards/bakeneko60/keymaps/via/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/config.h (renamed from keyboards/mechmini/v2/keymaps/wsturgiss/config.h)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/keymap.c (renamed from keyboards/mechmini/v2/keymaps/wsturgiss/keymap.c)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/rules.mk (renamed from keyboards/mechmini/v2/keymaps/wsturgiss/rules.mk)0
-rw-r--r--keyboards/mechkeys/mechmini/v2/readme.md22
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/rules.mk (renamed from keyboards/mechmini/v2/rules.mk)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/v2.c (renamed from keyboards/mechmini/v2/v2.c)0
-rwxr-xr-xkeyboards/mechkeys/mechmini/v2/v2.h (renamed from keyboards/mechmini/v2/v2.h)0
-rw-r--r--keyboards/mechlovin/mechlovin9/rev1/rules.mk3
-rw-r--r--keyboards/mechlovin/olly/jf/keymaps/via/config.h4
-rw-r--r--keyboards/mechlovin/olly/jf/keymaps/via/keymap.c25
-rw-r--r--keyboards/mechlovin/olly/jf/rules.mk4
-rw-r--r--keyboards/mechmini/mechmini.h25
-rw-r--r--keyboards/mechmini/readme.md28
-rw-r--r--keyboards/mechmini/rules.mk1
-rw-r--r--keyboards/mechmini/v1/readme.md19
-rw-r--r--keyboards/mechmini/v1/rules.mk17
-rw-r--r--keyboards/mechmini/v1/v1.h48
-rw-r--r--keyboards/mechmini/v2/keymaps/via/keymap.c29
-rw-r--r--keyboards/mechmini/v2/readme.md22
-rw-r--r--keyboards/meira/featherble/rules.mk5
-rw-r--r--keyboards/meira/keymaps/cole/rules.mk2
-rw-r--r--keyboards/meira/keymaps/grahampheath/rules.mk5
-rw-r--r--keyboards/meira/matrix.c276
-rw-r--r--keyboards/meira/readme.md28
-rw-r--r--keyboards/meira/rules.mk34
-rw-r--r--keyboards/meishi/readme.md19
-rw-r--r--keyboards/meishi2/readme.md15
-rw-r--r--keyboards/minidox/minidox.h7
-rw-r--r--keyboards/minidox/readme.md27
-rw-r--r--keyboards/minidox/rules.mk22
-rw-r--r--keyboards/minim/readme.md21
-rw-r--r--keyboards/mio/readme.md23
-rw-r--r--keyboards/mitosis/config.h9
-rw-r--r--keyboards/mitosis/matrix.c126
-rw-r--r--keyboards/mitosis/rules.mk21
-rw-r--r--keyboards/mode/m65s/rules.mk5
-rw-r--r--keyboards/model_v/readme.md20
-rwxr-xr-xkeyboards/molecule/rules.mk1
-rw-r--r--keyboards/montex/montex.c17
-rw-r--r--keyboards/montex/readme.md21
-rw-r--r--keyboards/moon/matrix.c8
-rw-r--r--keyboards/mschwingen/modelm/matrix.c14
-rw-r--r--keyboards/nacly/splitreus62/config.h (renamed from keyboards/splitreus62/config.h)0
-rw-r--r--keyboards/nacly/splitreus62/info.json (renamed from keyboards/splitreus62/info.json)0
-rw-r--r--keyboards/nacly/splitreus62/keymaps/default/keymap.c (renamed from keyboards/splitreus62/keymaps/default/keymap.c)0
-rw-r--r--keyboards/nacly/splitreus62/keymaps/scheiklp/config.h (renamed from keyboards/splitreus62/keymaps/scheiklp/config.h)0
-rw-r--r--keyboards/nacly/splitreus62/keymaps/scheiklp/keymap.c (renamed from keyboards/splitreus62/keymaps/scheiklp/keymap.c)0
-rw-r--r--keyboards/nacly/splitreus62/keymaps/scheiklp/rules.mk (renamed from keyboards/splitreus62/keymaps/scheiklp/rules.mk)0
-rw-r--r--keyboards/nacly/splitreus62/readme.md13
-rw-r--r--keyboards/nacly/splitreus62/rules.mk (renamed from keyboards/splitreus62/rules.mk)0
-rw-r--r--keyboards/nacly/splitreus62/splitreus62.c (renamed from keyboards/splitreus62/splitreus62.c)0
-rw-r--r--keyboards/nacly/splitreus62/splitreus62.h (renamed from keyboards/splitreus62/splitreus62.h)0
-rw-r--r--keyboards/nacly/ua62/config.h (renamed from keyboards/ua62/config.h)0
-rw-r--r--keyboards/nacly/ua62/info.json (renamed from keyboards/ua62/info.json)0
-rw-r--r--keyboards/nacly/ua62/keymaps/default/keymap.c (renamed from keyboards/ua62/keymaps/default/keymap.c)0
-rw-r--r--keyboards/nacly/ua62/readme.md14
-rw-r--r--keyboards/nacly/ua62/rules.mk (renamed from keyboards/ua62/rules.mk)0
-rw-r--r--keyboards/nacly/ua62/ua62.c (renamed from keyboards/ua62/ua62.c)0
-rw-r--r--keyboards/nacly/ua62/ua62.h (renamed from keyboards/ua62/ua62.h)0
-rw-r--r--keyboards/nafuda/readme.md17
-rw-r--r--keyboards/naiping/np64/readme.md17
-rw-r--r--keyboards/naiping/nphhkb/readme.md17
-rw-r--r--keyboards/naiping/npminila/readme.md17
-rw-r--r--keyboards/naked48/naked48.h24
-rw-r--r--keyboards/naked48/readme.md18
-rw-r--r--keyboards/naked48/rules.mk24
-rw-r--r--keyboards/naked60/naked60.h24
-rw-r--r--keyboards/naked60/readme.md18
-rw-r--r--keyboards/naked60/rules.mk22
-rw-r--r--keyboards/naked64/naked64.h7
-rw-r--r--keyboards/naked64/readme.md18
-rw-r--r--keyboards/naked64/rules.mk24
-rw-r--r--keyboards/namecard2x4/readme.md24
-rw-r--r--keyboards/namecard2x4/rules.mk21
-rwxr-xr-xkeyboards/nebula12/readme.md32
-rwxr-xr-xkeyboards/nebula68/readme.md32
-rwxr-xr-xkeyboards/nebula68b/readme.md32
-rw-r--r--keyboards/nek_type_a/matrix.c8
-rw-r--r--keyboards/nek_type_a/rules.mk2
-rw-r--r--keyboards/niu_mini/readme.md19
-rw-r--r--keyboards/nk1/readme.md32
-rwxr-xr-xkeyboards/nk65/readme.md39
-rwxr-xr-xkeyboards/nk87/readme.md34
-rw-r--r--keyboards/nknl7en/readme.md17
-rw-r--r--keyboards/nknl7jp/readme.md17
-rw-r--r--keyboards/nomu30/nomu30.h34
-rw-r--r--keyboards/nomu30/readme.md15
-rw-r--r--keyboards/nomu30/rules.mk1
-rw-r--r--keyboards/novelkeys/nk1/config.h (renamed from keyboards/nk1/config.h)0
-rwxr-xr-xkeyboards/novelkeys/nk1/info.json (renamed from keyboards/nk1/info.json)0
-rw-r--r--keyboards/novelkeys/nk1/keymaps/default/keymap.c (renamed from keyboards/nk1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/novelkeys/nk1/keymaps/default/readme.md (renamed from keyboards/nk1/keymaps/default/readme.md)0
-rw-r--r--keyboards/novelkeys/nk1/keymaps/via/keymap.c (renamed from keyboards/nk1/keymaps/via/keymap.c)0
-rw-r--r--keyboards/novelkeys/nk1/keymaps/via/readme.md (renamed from keyboards/nk1/keymaps/via/readme.md)0
-rw-r--r--keyboards/novelkeys/nk1/keymaps/via/rules.mk (renamed from keyboards/ergoarrows/keymaps/via/rules.mk)0
-rw-r--r--keyboards/novelkeys/nk1/nk1.c (renamed from keyboards/nk1/nk1.c)0
-rw-r--r--keyboards/novelkeys/nk1/nk1.h (renamed from keyboards/nk1/nk1.h)0
-rw-r--r--keyboards/novelkeys/nk1/readme.md32
-rw-r--r--keyboards/novelkeys/nk1/rules.mk (renamed from keyboards/nk1/rules.mk)0
-rwxr-xr-xkeyboards/novelkeys/nk65/config.h (renamed from keyboards/nk65/config.h)0
-rw-r--r--keyboards/novelkeys/nk65/halconf.h (renamed from keyboards/nk65/halconf.h)0
-rwxr-xr-xkeyboards/novelkeys/nk65/info.json (renamed from keyboards/nk65/info.json)0
-rwxr-xr-xkeyboards/novelkeys/nk65/keymaps/default/keymap.c (renamed from keyboards/nk65/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/nk65/keymaps/default/readme.md (renamed from keyboards/nk65/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/novelkeys/nk65/keymaps/madhatter/keymap.c (renamed from keyboards/nk65/keymaps/madhatter/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/nk65/keymaps/via/keymap.c (renamed from keyboards/nk65/keymaps/via/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/nk65/keymaps/via/readme.md (renamed from keyboards/nk65/keymaps/via/readme.md)0
-rwxr-xr-x[-rw-r--r--]keyboards/novelkeys/nk65/keymaps/via/rules.mk (renamed from keyboards/le_chiffre/keymaps/via/rules.mk)0
-rw-r--r--keyboards/novelkeys/nk65/mcuconf.h (renamed from keyboards/nk65/mcuconf.h)0
-rwxr-xr-xkeyboards/novelkeys/nk65/nk65.c (renamed from keyboards/nk65/nk65.c)0
-rwxr-xr-xkeyboards/novelkeys/nk65/nk65.h (renamed from keyboards/nk65/nk65.h)0
-rwxr-xr-xkeyboards/novelkeys/nk65/readme.md39
-rwxr-xr-xkeyboards/novelkeys/nk65/rules.mk (renamed from keyboards/nk65/rules.mk)0
-rwxr-xr-xkeyboards/novelkeys/nk65/v1_4/config.h (renamed from keyboards/nk65/v1_4/config.h)0
-rwxr-xr-xkeyboards/novelkeys/nk65/v1_4/readme.md (renamed from keyboards/nk65/v1_4/readme.md)0
-rwxr-xr-x[-rw-r--r--]keyboards/novelkeys/nk65/v1_4/rules.mk (renamed from keyboards/niu_mini/keymaps/planck/rules.mk)0
-rwxr-xr-xkeyboards/novelkeys/nk87/config.h (renamed from keyboards/nk87/config.h)0
-rw-r--r--keyboards/novelkeys/nk87/halconf.h (renamed from keyboards/nk87/halconf.h)0
-rwxr-xr-xkeyboards/novelkeys/nk87/info.json (renamed from keyboards/nk87/info.json)0
-rwxr-xr-xkeyboards/novelkeys/nk87/keymaps/default/keymap.c (renamed from keyboards/nk87/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/nk87/keymaps/default/readme.md (renamed from keyboards/nk87/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/novelkeys/nk87/keymaps/via/keymap.c (renamed from keyboards/nk87/keymaps/via/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/nk87/keymaps/via/readme.md (renamed from keyboards/nk87/keymaps/via/readme.md)0
-rwxr-xr-x[-rw-r--r--]keyboards/novelkeys/nk87/keymaps/via/rules.mk (renamed from keyboards/ls_60/keymaps/via/rules.mk)0
-rw-r--r--keyboards/novelkeys/nk87/mcuconf.h (renamed from keyboards/nk87/mcuconf.h)0
-rwxr-xr-xkeyboards/novelkeys/nk87/nk87.c (renamed from keyboards/nk87/nk87.c)0
-rwxr-xr-xkeyboards/novelkeys/nk87/nk87.h (renamed from keyboards/nk87/nk87.h)0
-rwxr-xr-xkeyboards/novelkeys/nk87/readme.md34
-rwxr-xr-xkeyboards/novelkeys/nk87/rules.mk (renamed from keyboards/nk87/rules.mk)0
-rwxr-xr-xkeyboards/novelkeys/novelpad/config.h (renamed from keyboards/novelpad/config.h)0
-rw-r--r--keyboards/novelkeys/novelpad/info.json (renamed from keyboards/novelpad/info.json)0
-rwxr-xr-xkeyboards/novelkeys/novelpad/keymaps/0xdec/keymap.c (renamed from keyboards/novelpad/keymaps/0xdec/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/novelpad/keymaps/default/keymap.c (renamed from keyboards/novelpad/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/novelkeys/novelpad/novelpad.c (renamed from keyboards/novelpad/novelpad.c)0
-rwxr-xr-xkeyboards/novelkeys/novelpad/novelpad.h (renamed from keyboards/novelpad/novelpad.h)0
-rw-r--r--keyboards/novelkeys/novelpad/readme.md15
-rwxr-xr-xkeyboards/novelkeys/novelpad/rules.mk (renamed from keyboards/novelpad/rules.mk)0
-rw-r--r--keyboards/novelpad/readme.md15
-rw-r--r--keyboards/noxary/valhalla/rules.mk2
-rw-r--r--keyboards/obosob/arch_36/arch_36.c (renamed from keyboards/arch_36/arch_36.c)0
-rw-r--r--keyboards/obosob/arch_36/arch_36.h (renamed from keyboards/arch_36/arch_36.h)0
-rw-r--r--keyboards/obosob/arch_36/config.h (renamed from keyboards/arch_36/config.h)0
-rw-r--r--keyboards/obosob/arch_36/info.json (renamed from keyboards/arch_36/info.json)0
-rw-r--r--keyboards/obosob/arch_36/keymaps/default/keymap.c (renamed from keyboards/arch_36/keymaps/default/keymap.c)0
-rw-r--r--keyboards/obosob/arch_36/keymaps/obosob/config.h (renamed from keyboards/arch_36/keymaps/obosob/config.h)0
-rw-r--r--keyboards/obosob/arch_36/keymaps/obosob/keymap.c (renamed from keyboards/arch_36/keymaps/obosob/keymap.c)0
-rw-r--r--keyboards/obosob/arch_36/keymaps/obosob/readme.md (renamed from keyboards/arch_36/keymaps/obosob/readme.md)0
-rw-r--r--keyboards/obosob/arch_36/keymaps/obosob/rules.mk (renamed from keyboards/arch_36/keymaps/obosob/rules.mk)0
-rw-r--r--keyboards/obosob/arch_36/readme.md16
-rw-r--r--keyboards/obosob/arch_36/rules.mk (renamed from keyboards/arch_36/rules.mk)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/config.h (renamed from keyboards/steal_this_keyboard/config.h)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/info.json (renamed from keyboards/steal_this_keyboard/info.json)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/keymaps/default/config.h (renamed from keyboards/steal_this_keyboard/keymaps/default/config.h)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/keymaps/default/keymap.c (renamed from keyboards/steal_this_keyboard/keymaps/default/keymap.c)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/readme.md11
-rw-r--r--keyboards/obosob/steal_this_keyboard/rules.mk (renamed from keyboards/steal_this_keyboard/rules.mk)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/steal_this_keyboard.c (renamed from keyboards/steal_this_keyboard/steal_this_keyboard.c)0
-rw-r--r--keyboards/obosob/steal_this_keyboard/steal_this_keyboard.h (renamed from keyboards/steal_this_keyboard/steal_this_keyboard.h)0
-rw-r--r--keyboards/ogurec/ogurec.h24
-rw-r--r--keyboards/ogurec/readme.md27
-rw-r--r--keyboards/ogurec/rules.mk19
-rw-r--r--keyboards/omkbd/ergodash/.noci (renamed from keyboards/mechmini/v1/.noci)0
-rw-r--r--keyboards/omkbd/ergodash/config.h (renamed from keyboards/getta25/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/ergodash.c (renamed from keyboards/ergodash/ergodash.c)0
-rw-r--r--keyboards/omkbd/ergodash/ergodash.h11
-rw-r--r--keyboards/omkbd/ergodash/mini/.noci (renamed from keyboards/minidox/.noci)0
-rw-r--r--keyboards/omkbd/ergodash/mini/config.h (renamed from keyboards/ergodash/mini/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/mini/info.json (renamed from keyboards/ergodash/mini/info.json)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/default/config.h (renamed from keyboards/ergodash/mini/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/default/keymap.c (renamed from keyboards/ergodash/mini/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/default/rules.mk (renamed from keyboards/ergodash/mini/keymaps/default/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h (renamed from keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c (renamed from keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md (renamed from keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk (renamed from keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h (renamed from keyboards/ergodash/mini/keymaps/yoshimaru46/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c (renamed from keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md (renamed from keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk (renamed from keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/mini/mini.c (renamed from keyboards/ergodash/mini/mini.c)0
-rw-r--r--keyboards/omkbd/ergodash/mini/mini.h (renamed from keyboards/ergodash/mini/mini.h)0
-rw-r--r--keyboards/omkbd/ergodash/mini/readme.md18
-rw-r--r--keyboards/omkbd/ergodash/mini/rules.mk (renamed from keyboards/ergodash/mini/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/readme.md32
-rw-r--r--keyboards/omkbd/ergodash/rev1/.noci (renamed from keyboards/naked48/.noci)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/config.h (renamed from keyboards/ergodash/rev1/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/info.json (renamed from keyboards/ergodash/rev1/info.json)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/333fred/config.h (renamed from keyboards/ergodash/rev1/keymaps/333fred/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/333fred/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/333fred/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/333fred/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/333fred/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/default/config.h (renamed from keyboards/ergodash/rev1/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/default/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/default/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/default/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/config.h (renamed from keyboards/ergodash/rev1/keymaps/greenshadowmaker/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json (renamed from keyboards/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/greenshadowmaker/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/greenshadowmaker/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/config.h (renamed from keyboards/ergodash/rev1/keymaps/ifohancroft/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/ifohancroft/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/readme.md (renamed from keyboards/ergodash/rev1/keymaps/ifohancroft/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/ifohancroft/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h (renamed from keyboards/ergodash/rev1/keymaps/m47ch4n/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/m47ch4n/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json (renamed from keyboards/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md (renamed from keyboards/ergodash/rev1/keymaps/m47ch4n/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/m47ch4n/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/config.h (renamed from keyboards/ergodash/rev1/keymaps/nopunin10did/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/nopunin10did/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/layers.json (renamed from keyboards/ergodash/rev1/keymaps/nopunin10did/layers.json)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/readme.md (renamed from keyboards/ergodash/rev1/keymaps/nopunin10did/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/nopunin10did/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h (renamed from keyboards/ergodash/rev1/keymaps/shadowprogr/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/shadowprogr/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md (renamed from keyboards/ergodash/rev1/keymaps/shadowprogr/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/shadowprogr/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/config.h (renamed from keyboards/ergodash/rev1/keymaps/tw1t611/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/tw1t611/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/readme.md (renamed from keyboards/ergodash/rev1/keymaps/tw1t611/readme.md)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/tw1t611/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/config.h (renamed from keyboards/ergodash/rev1/keymaps/yet-another-developer/config.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/keymap.c (renamed from keyboards/ergodash/rev1/keymaps/yet-another-developer/keymap.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/rules.mk (renamed from keyboards/ergodash/rev1/keymaps/yet-another-developer/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/rev1.c (renamed from keyboards/ergodash/rev1/rev1.c)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/rev1.h (renamed from keyboards/ergodash/rev1/rev1.h)0
-rw-r--r--keyboards/omkbd/ergodash/rev1/rules.mk (renamed from keyboards/ergodash/rev1/rules.mk)0
-rw-r--r--keyboards/omkbd/ergodash/rules.mk22
-rw-r--r--keyboards/omkbd/runner3680/3x6/.noci (renamed from keyboards/naked64/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/3x6.c (renamed from keyboards/runner3680/3x6/3x6.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/3x6.h (renamed from keyboards/runner3680/3x6/3x6.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/config.h (renamed from keyboards/runner3680/3x6/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/info.json (renamed from keyboards/runner3680/3x6/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/keymaps/default/config.h (renamed from keyboards/runner3680/3x6/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/keymaps/default/keymap.c (renamed from keyboards/runner3680/3x6/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x6/rules.mk (renamed from keyboards/naked64/keymaps/default/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/.noci (renamed from keyboards/namecard2x4/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/3x7.c (renamed from keyboards/runner3680/3x7/3x7.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/3x7.h (renamed from keyboards/runner3680/3x7/3x7.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/config.h (renamed from keyboards/runner3680/3x7/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/info.json (renamed from keyboards/runner3680/3x7/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/keymaps/default/config.h (renamed from keyboards/runner3680/3x7/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/keymaps/default/keymap.c (renamed from keyboards/runner3680/3x7/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x7/rules.mk (renamed from keyboards/naked64/keymaps/default_with_setta21/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/.noci (renamed from keyboards/namecard2x4/rev1/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/3x8.c (renamed from keyboards/runner3680/3x8/3x8.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/3x8.h (renamed from keyboards/runner3680/3x8/3x8.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/config.h (renamed from keyboards/runner3680/3x8/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/info.json (renamed from keyboards/runner3680/3x8/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/keymaps/default/config.h (renamed from keyboards/runner3680/3x8/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/keymaps/default/keymap.c (renamed from keyboards/runner3680/3x8/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/3x8/rules.mk (renamed from keyboards/naked64/rev1/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/.noci (renamed from keyboards/nomu30/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/4x6.c (renamed from keyboards/runner3680/4x6/4x6.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/4x6.h (renamed from keyboards/runner3680/4x6/4x6.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/config.h (renamed from keyboards/runner3680/4x6/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/info.json (renamed from keyboards/runner3680/4x6/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/keymaps/default/config.h (renamed from keyboards/runner3680/4x6/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/keymaps/default/keymap.c (renamed from keyboards/runner3680/4x6/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x6/rules.mk (renamed from keyboards/namecard2x4/rev1/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/.noci (renamed from keyboards/nomu30/rev1/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/4x7.c (renamed from keyboards/runner3680/4x7/4x7.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/4x7.h (renamed from keyboards/runner3680/4x7/4x7.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/config.h (renamed from keyboards/runner3680/4x7/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/info.json (renamed from keyboards/runner3680/4x7/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/keymaps/default/config.h (renamed from keyboards/runner3680/4x7/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/keymaps/default/keymap.c (renamed from keyboards/runner3680/4x7/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x7/rules.mk (renamed from keyboards/namecard2x4/rev2/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/.noci (renamed from keyboards/nomu30/rev2/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/4x8.c (renamed from keyboards/runner3680/4x8/4x8.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/4x8.h (renamed from keyboards/runner3680/4x8/4x8.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/config.h (renamed from keyboards/runner3680/4x8/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/info.json (renamed from keyboards/runner3680/4x8/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/keymaps/default/config.h (renamed from keyboards/runner3680/4x8/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/keymaps/default/keymap.c (renamed from keyboards/runner3680/4x8/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/4x8/rules.mk (renamed from keyboards/ogurec/left_pm/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/.noci (renamed from keyboards/otaku_split/rev0/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/5x6.c (renamed from keyboards/runner3680/5x6/5x6.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/5x6.h (renamed from keyboards/runner3680/5x6/5x6.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/config.h (renamed from keyboards/runner3680/5x6/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/info.json (renamed from keyboards/runner3680/5x6/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/keymaps/default/config.h (renamed from keyboards/runner3680/5x6/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/keymaps/default/keymap.c (renamed from keyboards/runner3680/5x6/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6/rules.mk (renamed from keyboards/ogurec/right_pm/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/.noci (renamed from keyboards/reviung33/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c (renamed from keyboards/runner3680/5x6_5x8/5x6_5x8.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.h (renamed from keyboards/runner3680/5x6_5x8/5x6_5x8.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/config.h (renamed from keyboards/runner3680/5x6_5x8/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/info.json (renamed from keyboards/runner3680/5x6_5x8/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/config.h (renamed from keyboards/runner3680/5x6_5x8/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/keymap.c (renamed from keyboards/runner3680/5x6_5x8/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h (renamed from keyboards/runner3680/5x6_5x8/keymaps/derekhsu/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c (renamed from keyboards/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk (renamed from keyboards/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/config.h (renamed from keyboards/runner3680/5x6_5x8/keymaps/jis/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/keymap.c (renamed from keyboards/runner3680/5x6_5x8/keymaps/jis/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/config.h (renamed from keyboards/runner3680/5x6_5x8/keymaps/via/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/keymap.c (renamed from keyboards/runner3680/5x6_5x8/keymaps/via/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/rules.mk (renamed from keyboards/m3n3van/keymaps/via/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/rules.mk (renamed from keyboards/runner3680/5x6_5x8/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/.noci (renamed from keyboards/reviung61/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/5x7.c (renamed from keyboards/runner3680/5x7/5x7.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/5x7.h (renamed from keyboards/runner3680/5x7/5x7.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/config.h (renamed from keyboards/runner3680/5x7/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/info.json (renamed from keyboards/runner3680/5x7/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/keymaps/default/config.h (renamed from keyboards/runner3680/5x7/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/keymaps/default/keymap.c (renamed from keyboards/runner3680/5x7/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x7/rules.mk (renamed from keyboards/runner3680/3x6/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/.noci (renamed from keyboards/runner3680/3x6/.noci)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/5x8.c (renamed from keyboards/runner3680/5x8/5x8.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/5x8.h (renamed from keyboards/runner3680/5x8/5x8.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/config.h (renamed from keyboards/runner3680/5x8/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/info.json (renamed from keyboards/runner3680/5x8/info.json)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/keymaps/JIS/config.h (renamed from keyboards/runner3680/5x8/keymaps/JIS/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/keymaps/JIS/keymap.c (renamed from keyboards/runner3680/5x8/keymaps/JIS/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/keymaps/default/config.h (renamed from keyboards/runner3680/5x8/keymaps/default/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/keymaps/default/keymap.c (renamed from keyboards/runner3680/5x8/keymaps/default/keymap.c)0
-rw-r--r--keyboards/omkbd/runner3680/5x8/rules.mk (renamed from keyboards/runner3680/3x7/rules.mk)0
-rw-r--r--keyboards/omkbd/runner3680/config.h (renamed from keyboards/runner3680/config.h)0
-rw-r--r--keyboards/omkbd/runner3680/readme.md15
-rw-r--r--keyboards/omkbd/runner3680/rules.mk22
-rw-r--r--keyboards/omkbd/runner3680/runner3680.c (renamed from keyboards/runner3680/runner3680.c)0
-rw-r--r--keyboards/omkbd/runner3680/runner3680.h43
-rw-r--r--keyboards/otaku_split/rev0/readme.md16
-rw-r--r--keyboards/otaku_split/rev1/readme.md19
-rw-r--r--keyboards/owl8/readme.md19
-rw-r--r--keyboards/packrat/readme.md25
-rw-r--r--keyboards/paprikman/albacore/rules.mk5
-rw-r--r--keyboards/peej/rosaline/rules.mk2
-rw-r--r--keyboards/pistachio/pistachio.h25
-rw-r--r--keyboards/pistachio/readme.md18
-rw-r--r--keyboards/pistachio/rules.mk1
-rw-r--r--keyboards/pistachio_mp/readme.md21
-rw-r--r--keyboards/pistachio_pro/config.h108
-rw-r--r--keyboards/pistachio_pro/readme.md21
-rw-r--r--keyboards/planck/keymaps/thermal_printer/config.h12
-rw-r--r--keyboards/plexus75/readme.md15
-rw-r--r--keyboards/ploopyco/mouse/readme.md2
-rw-r--r--keyboards/ploopyco/trackball/readme.md4
-rw-r--r--keyboards/ploopyco/trackball/trackball.c2
-rw-r--r--keyboards/prototypist/allison/allison.c (renamed from keyboards/allison/allison.c)0
-rw-r--r--keyboards/prototypist/allison/allison.h (renamed from keyboards/allison/allison.h)0
-rw-r--r--keyboards/prototypist/allison/config.h (renamed from keyboards/allison/config.h)0
-rw-r--r--keyboards/prototypist/allison/info.json (renamed from keyboards/allison/info.json)0
-rw-r--r--keyboards/prototypist/allison/keymaps/default/keymap.c (renamed from keyboards/allison/keymaps/default/keymap.c)0
-rw-r--r--keyboards/prototypist/allison/keymaps/default/readme.md (renamed from keyboards/allison/keymaps/default/readme.md)0
-rw-r--r--keyboards/prototypist/allison/keymaps/via/keymap.c (renamed from keyboards/allison/keymaps/via/keymap.c)0
-rw-r--r--keyboards/prototypist/allison/keymaps/via/readme.md (renamed from keyboards/allison/keymaps/via/readme.md)0
-rw-r--r--keyboards/prototypist/allison/keymaps/via/rules.mk (renamed from keyboards/model_v/keymaps/via/rules.mk)0
-rw-r--r--keyboards/prototypist/allison/readme.md15
-rw-r--r--keyboards/prototypist/allison/rules.mk (renamed from keyboards/allison/rules.mk)0
-rw-r--r--keyboards/prototypist/allison_numpad/allison_numpad.c (renamed from keyboards/allison_numpad/allison_numpad.c)0
-rw-r--r--keyboards/prototypist/allison_numpad/allison_numpad.h (renamed from keyboards/allison_numpad/allison_numpad.h)0
-rw-r--r--keyboards/prototypist/allison_numpad/config.h (renamed from keyboards/allison_numpad/config.h)0
-rw-r--r--keyboards/prototypist/allison_numpad/info.json (renamed from keyboards/allison_numpad/info.json)0
-rw-r--r--keyboards/prototypist/allison_numpad/keymaps/default/keymap.c (renamed from keyboards/allison_numpad/keymaps/default/keymap.c)0
-rw-r--r--keyboards/prototypist/allison_numpad/keymaps/default/readme.md (renamed from keyboards/allison_numpad/keymaps/default/readme.md)0
-rw-r--r--keyboards/prototypist/allison_numpad/keymaps/via/keymap.c (renamed from keyboards/allison_numpad/keymaps/via/keymap.c)0
-rw-r--r--keyboards/prototypist/allison_numpad/keymaps/via/readme.md (renamed from keyboards/allison_numpad/keymaps/via/readme.md)0
-rw-r--r--keyboards/prototypist/allison_numpad/keymaps/via/rules.mk (renamed from keyboards/naiping/np64/keymaps/via/rules.mk)0
-rw-r--r--keyboards/prototypist/allison_numpad/readme.md15
-rw-r--r--keyboards/prototypist/allison_numpad/rules.mk (renamed from keyboards/allison_numpad/rules.mk)0
-rw-r--r--keyboards/pursuit40/readme.md15
-rw-r--r--keyboards/qaz/readme.md15
-rw-r--r--keyboards/qpockets/eggman/config.h (renamed from keyboards/eggman/config.h)0
-rw-r--r--keyboards/qpockets/eggman/eggman.c (renamed from keyboards/eggman/eggman.c)0
-rw-r--r--keyboards/qpockets/eggman/eggman.h (renamed from keyboards/eggman/eggman.h)0
-rw-r--r--keyboards/qpockets/eggman/info.json (renamed from keyboards/eggman/info.json)0
-rw-r--r--keyboards/qpockets/eggman/keymaps/default/config.h (renamed from keyboards/eggman/keymaps/default/config.h)0
-rw-r--r--keyboards/qpockets/eggman/keymaps/default/keymap.c (renamed from keyboards/eggman/keymaps/default/keymap.c)0
-rw-r--r--keyboards/qpockets/eggman/keymaps/default/rules.mk (renamed from keyboards/space_space/rev2/keymaps/default/rules.mk)0
-rw-r--r--keyboards/qpockets/eggman/readme.md18
-rw-r--r--keyboards/qpockets/eggman/rules.mk (renamed from keyboards/eggman/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/readme.md18
-rw-r--r--keyboards/qpockets/space_space/rev1/config.h (renamed from keyboards/space_space/rev1/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev1/info.json (renamed from keyboards/space_space/rev1/info.json)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h (renamed from keyboards/space_space/rev1/keymaps/big_space/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c (renamed from keyboards/space_space/rev1/keymaps/big_space/keymap.c)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/big_space/rules.mk (renamed from keyboards/space_space/rev1/keymaps/big_space/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/default/config.h (renamed from keyboards/space_space/rev1/keymaps/default/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c (renamed from keyboards/space_space/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/default/rules.mk (renamed from keyboards/space_space/rev1/keymaps/default/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev1/keymaps/readme.md (renamed from keyboards/space_space/rev1/keymaps/readme.md)0
-rw-r--r--keyboards/qpockets/space_space/rev1/readme.md (renamed from keyboards/space_space/rev1/readme.md)0
-rw-r--r--keyboards/qpockets/space_space/rev1/rev1.c (renamed from keyboards/space_space/rev1/rev1.c)0
-rw-r--r--keyboards/qpockets/space_space/rev1/rev1.h (renamed from keyboards/space_space/rev1/rev1.h)0
-rw-r--r--keyboards/qpockets/space_space/rev1/rules.mk (renamed from keyboards/space_space/rev1/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev2/config.h (renamed from keyboards/space_space/rev2/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev2/info.json (renamed from keyboards/space_space/rev2/info.json)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h (renamed from keyboards/space_space/rev2/keymaps/big_space/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c (renamed from keyboards/space_space/rev2/keymaps/big_space/keymap.c)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/big_space/rules.mk (renamed from keyboards/space_space/rev2/keymaps/big_space/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/default/config.h (renamed from keyboards/space_space/rev2/keymaps/default/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c (renamed from keyboards/space_space/rev2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/default/rules.mk (renamed from keyboards/squiggle/keymaps/default/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h (renamed from keyboards/space_space/rev2/keymaps/qpockets/config.h)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c (renamed from keyboards/space_space/rev2/keymaps/qpockets/keymap.c)0
-rw-r--r--keyboards/qpockets/space_space/rev2/keymaps/qpockets/rules.mk (renamed from keyboards/space_space/rev2/keymaps/qpockets/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rev2/readme.md (renamed from keyboards/space_space/rev2/readme.md)0
-rw-r--r--keyboards/qpockets/space_space/rev2/rev2.c (renamed from keyboards/space_space/rev2/rev2.c)0
-rw-r--r--keyboards/qpockets/space_space/rev2/rev2.h (renamed from keyboards/space_space/rev2/rev2.h)0
-rw-r--r--keyboards/qpockets/space_space/rev2/rules.mk (renamed from keyboards/space_space/rev2/rules.mk)0
-rw-r--r--keyboards/qpockets/space_space/rules.mk1
-rw-r--r--keyboards/qpockets/wanten/config.h (renamed from keyboards/wanten/config.h)0
-rw-r--r--keyboards/qpockets/wanten/info.json (renamed from keyboards/wanten/info.json)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/2u_bars/config.h (renamed from keyboards/wanten/keymaps/2u_bars/config.h)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c (renamed from keyboards/wanten/keymaps/2u_bars/keymap.c)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/2u_bars/rules.mk (renamed from keyboards/squiggle/keymaps/default38/rules.mk)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/625_bar/config.h (renamed from keyboards/wanten/keymaps/625_bar/config.h)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/625_bar/keymap.c (renamed from keyboards/wanten/keymaps/625_bar/keymap.c)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/625_bar/rules.mk (renamed from keyboards/squiggle/keymaps/defaultfull/rules.mk)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/default/config.h (renamed from keyboards/wanten/keymaps/default/config.h)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/default/keymap.c (renamed from keyboards/wanten/keymaps/default/keymap.c)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/default/readme.md (renamed from keyboards/wanten/keymaps/default/readme.md)0
-rw-r--r--keyboards/qpockets/wanten/keymaps/default/rules.mk (renamed from keyboards/squiggle/keymaps/defaultminidox/rules.mk)0
-rw-r--r--keyboards/qpockets/wanten/readme.md27
-rw-r--r--keyboards/qpockets/wanten/rules.mk (renamed from keyboards/wanten/rules.mk)0
-rw-r--r--keyboards/qpockets/wanten/wanten.c (renamed from keyboards/wanten/wanten.c)0
-rw-r--r--keyboards/qpockets/wanten/wanten.h (renamed from keyboards/wanten/wanten.h)0
-rw-r--r--keyboards/quark/readme.md15
-rw-r--r--keyboards/rabbit_capture_plan/readme.md19
-rw-r--r--keyboards/rainkeeb/readme.md24
-rw-r--r--keyboards/rainkeebs/delilah/config.h (renamed from keyboards/delilah/config.h)0
-rw-r--r--keyboards/rainkeebs/delilah/delilah.c (renamed from keyboards/delilah/delilah.c)0
-rw-r--r--keyboards/rainkeebs/delilah/delilah.h (renamed from keyboards/delilah/delilah.h)0
-rw-r--r--keyboards/rainkeebs/delilah/info.json (renamed from keyboards/delilah/info.json)0
-rw-r--r--keyboards/rainkeebs/delilah/keymaps/default/keymap.c (renamed from keyboards/delilah/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rainkeebs/delilah/keymaps/via/keymap.c (renamed from keyboards/delilah/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rainkeebs/delilah/keymaps/via/rules.mk (renamed from keyboards/naiping/nphhkb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rainkeebs/delilah/readme.md22
-rw-r--r--keyboards/rainkeebs/delilah/rules.mk (renamed from keyboards/delilah/rules.mk)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/config.h (renamed from keyboards/rainkeeb/config.h)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/info.json (renamed from keyboards/rainkeeb/info.json)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/keymaps/default/keymap.c (renamed from keyboards/rainkeeb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/keymaps/via/keymap.c (renamed from keyboards/rainkeeb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/keymaps/via/rules.mk (renamed from keyboards/gurindam/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/rainkeeb.c (renamed from keyboards/rainkeeb/rainkeeb.c)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/rainkeeb.h (renamed from keyboards/rainkeeb/rainkeeb.h)0
-rw-r--r--keyboards/rainkeebs/rainkeeb/readme.md24
-rw-r--r--keyboards/rainkeebs/rainkeeb/rules.mk (renamed from keyboards/rainkeeb/rules.mk)0
-rw-r--r--keyboards/rainkeebs/yasui/config.h (renamed from keyboards/yasui/config.h)0
-rw-r--r--keyboards/rainkeebs/yasui/info.json (renamed from keyboards/yasui/info.json)0
-rw-r--r--keyboards/rainkeebs/yasui/keymaps/default/keymap.c (renamed from keyboards/yasui/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rainkeebs/yasui/keymaps/via/keymap.c (renamed from keyboards/yasui/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rainkeebs/yasui/keymaps/via/rules.mk (renamed from keyboards/naiping/npminila/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rainkeebs/yasui/readme.md22
-rw-r--r--keyboards/rainkeebs/yasui/rules.mk (renamed from keyboards/yasui/rules.mk)0
-rw-r--r--keyboards/rainkeebs/yasui/yasui.c (renamed from keyboards/yasui/yasui.c)0
-rw-r--r--keyboards/rainkeebs/yasui/yasui.h (renamed from keyboards/yasui/yasui.h)0
-rw-r--r--keyboards/ramonimbao/mona/v32a/rules.mk3
-rw-r--r--keyboards/ramonimbao/squishytkl/config.h2
-rw-r--r--keyboards/rate/pistachio/config.h (renamed from keyboards/pistachio/config.h)0
-rw-r--r--keyboards/rate/pistachio/info.json (renamed from keyboards/pistachio/info.json)0
-rw-r--r--keyboards/rate/pistachio/keymaps/default/keymap.c (renamed from keyboards/pistachio/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rate/pistachio/keymaps/rate/keymap.c (renamed from keyboards/pistachio/keymaps/rate/keymap.c)0
-rw-r--r--keyboards/rate/pistachio/keymaps/via/keymap.c (renamed from keyboards/pistachio/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rate/pistachio/keymaps/via/rules.mk (renamed from keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rate/pistachio/pistachio.c (renamed from keyboards/pistachio/pistachio.c)0
-rw-r--r--keyboards/rate/pistachio/pistachio.h25
-rw-r--r--keyboards/rate/pistachio/readme.md18
-rw-r--r--keyboards/rate/pistachio/rev1/config.h (renamed from keyboards/pistachio/rev1/config.h)0
-rw-r--r--keyboards/rate/pistachio/rev1/readme.md (renamed from keyboards/pistachio/rev1/readme.md)0
-rw-r--r--keyboards/rate/pistachio/rev1/rev1.c (renamed from keyboards/pistachio/rev1/rev1.c)0
-rw-r--r--keyboards/rate/pistachio/rev1/rev1.h (renamed from keyboards/pistachio/rev1/rev1.h)0
-rw-r--r--keyboards/rate/pistachio/rev1/rules.mk (renamed from keyboards/pistachio/rev1/rules.mk)0
-rw-r--r--keyboards/rate/pistachio/rev2/config.h (renamed from keyboards/pistachio/rev2/config.h)0
-rw-r--r--keyboards/rate/pistachio/rev2/readme.md (renamed from keyboards/pistachio/rev2/readme.md)0
-rw-r--r--keyboards/rate/pistachio/rev2/rev2.c (renamed from keyboards/pistachio/rev2/rev2.c)0
-rw-r--r--keyboards/rate/pistachio/rev2/rev2.h (renamed from keyboards/pistachio/rev2/rev2.h)0
-rw-r--r--keyboards/rate/pistachio/rev2/rules.mk (renamed from keyboards/pistachio/rev2/rules.mk)0
-rw-r--r--keyboards/rate/pistachio/rules.mk1
-rw-r--r--keyboards/rate/pistachio_mp/config.h (renamed from keyboards/pistachio_mp/config.h)0
-rw-r--r--keyboards/rate/pistachio_mp/info.json (renamed from keyboards/pistachio_mp/info.json)0
-rw-r--r--keyboards/rate/pistachio_mp/keymaps/default/keymap.c (renamed from keyboards/pistachio_mp/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rate/pistachio_mp/keymaps/default/readme.md (renamed from keyboards/pistachio_mp/keymaps/default/readme.md)0
-rw-r--r--keyboards/rate/pistachio_mp/keymaps/via/keymap.c (renamed from keyboards/pistachio_mp/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rate/pistachio_mp/keymaps/via/readme.md (renamed from keyboards/pistachio_mp/keymaps/via/readme.md)0
-rw-r--r--keyboards/rate/pistachio_mp/keymaps/via/rules.mk (renamed from keyboards/mechmini/v2/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rate/pistachio_mp/pistachio_mp.c (renamed from keyboards/pistachio_mp/pistachio_mp.c)0
-rw-r--r--keyboards/rate/pistachio_mp/pistachio_mp.h (renamed from keyboards/pistachio_mp/pistachio_mp.h)0
-rw-r--r--keyboards/rate/pistachio_mp/readme.md21
-rw-r--r--keyboards/rate/pistachio_mp/rules.mk (renamed from keyboards/pistachio_mp/rules.mk)0
-rw-r--r--keyboards/rate/pistachio_pro/config.h108
-rw-r--r--keyboards/rate/pistachio_pro/info.json (renamed from keyboards/pistachio_pro/info.json)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/default/keymap.c (renamed from keyboards/pistachio_pro/keymaps/default/keymap.c)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/default/readme.md (renamed from keyboards/pistachio_pro/keymaps/default/readme.md)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/rate/keymap.c (renamed from keyboards/pistachio_pro/keymaps/rate/keymap.c)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/rate/readme.md (renamed from keyboards/pistachio_pro/keymaps/rate/readme.md)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/via/keymap.c (renamed from keyboards/pistachio_pro/keymaps/via/keymap.c)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/via/readme.md (renamed from keyboards/pistachio_pro/keymaps/via/readme.md)0
-rw-r--r--keyboards/rate/pistachio_pro/keymaps/via/rules.mk (renamed from keyboards/latinpadble/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rate/pistachio_pro/lib/bme280.c (renamed from keyboards/pistachio_pro/lib/bme280.c)0
-rw-r--r--keyboards/rate/pistachio_pro/lib/bme280.h (renamed from keyboards/pistachio_pro/lib/bme280.h)0
-rw-r--r--keyboards/rate/pistachio_pro/lib/glcdfont.c (renamed from keyboards/pistachio_pro/lib/glcdfont.c)0
-rw-r--r--keyboards/rate/pistachio_pro/matrix.c (renamed from keyboards/pistachio_pro/matrix.c)0
-rw-r--r--keyboards/rate/pistachio_pro/pistachio_pro.c (renamed from keyboards/pistachio_pro/pistachio_pro.c)0
-rw-r--r--keyboards/rate/pistachio_pro/pistachio_pro.h (renamed from keyboards/pistachio_pro/pistachio_pro.h)0
-rw-r--r--keyboards/rate/pistachio_pro/readme.md21
-rw-r--r--keyboards/rate/pistachio_pro/rules.mk (renamed from keyboards/pistachio_pro/rules.mk)0
-rw-r--r--keyboards/recompile_keys/choco60/choco60.c (renamed from keyboards/choco60/choco60.c)0
-rw-r--r--keyboards/recompile_keys/choco60/choco60.h (renamed from keyboards/choco60/choco60.h)0
-rw-r--r--keyboards/recompile_keys/choco60/config.h (renamed from keyboards/choco60/config.h)0
-rw-r--r--keyboards/recompile_keys/choco60/info.json (renamed from keyboards/choco60/info.json)0
-rw-r--r--keyboards/recompile_keys/choco60/keymaps/default/keymap.c (renamed from keyboards/choco60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/recompile_keys/choco60/keymaps/default/readme.md (renamed from keyboards/choco60/keymaps/default/readme.md)0
-rw-r--r--keyboards/recompile_keys/choco60/keymaps/via/keymap.c (renamed from keyboards/choco60/keymaps/via/keymap.c)0
-rw-r--r--keyboards/recompile_keys/choco60/keymaps/via/rules.mk (renamed from keyboards/mio/keymaps/via/rules.mk)0
-rw-r--r--keyboards/recompile_keys/choco60/readme.md17
-rw-r--r--keyboards/recompile_keys/choco60/rev1/.noci (renamed from keyboards/runner3680/3x7/.noci)0
-rw-r--r--keyboards/recompile_keys/choco60/rev1/config.h (renamed from keyboards/choco60/rev1/config.h)0
-rw-r--r--keyboards/recompile_keys/choco60/rev1/readme.md (renamed from keyboards/choco60/rev1/readme.md)0
-rw-r--r--keyboards/recompile_keys/choco60/rev1/rev1.c (renamed from keyboards/choco60/rev1/rev1.c)0
-rw-r--r--keyboards/recompile_keys/choco60/rev1/rev1.h (renamed from keyboards/choco60/rev1/rev1.h)0
-rw-r--r--keyboards/recompile_keys/choco60/rev1/rules.mk (renamed from keyboards/choco60/rev1/rules.mk)0
-rw-r--r--keyboards/recompile_keys/choco60/rev2/config.h (renamed from keyboards/choco60/rev2/config.h)0
-rw-r--r--keyboards/recompile_keys/choco60/rev2/readme.md (renamed from keyboards/choco60/rev2/readme.md)0
-rw-r--r--keyboards/recompile_keys/choco60/rev2/rev2.c (renamed from keyboards/choco60/rev2/rev2.c)0
-rw-r--r--keyboards/recompile_keys/choco60/rev2/rev2.h (renamed from keyboards/choco60/rev2/rev2.h)0
-rw-r--r--keyboards/recompile_keys/choco60/rev2/rules.mk (renamed from keyboards/choco60/rev2/rules.mk)0
-rw-r--r--keyboards/recompile_keys/choco60/rules.mk1
-rw-r--r--keyboards/recompile_keys/cocoa40/.noci (renamed from keyboards/runner3680/3x8/.noci)0
-rw-r--r--keyboards/recompile_keys/cocoa40/cocoa40.c (renamed from keyboards/cocoa40/cocoa40.c)0
-rw-r--r--keyboards/recompile_keys/cocoa40/cocoa40.h (renamed from keyboards/cocoa40/cocoa40.h)0
-rw-r--r--keyboards/recompile_keys/cocoa40/config.h (renamed from keyboards/cocoa40/config.h)0
-rw-r--r--keyboards/recompile_keys/cocoa40/info.json (renamed from keyboards/cocoa40/info.json)0
-rw-r--r--keyboards/recompile_keys/cocoa40/keymaps/default/keymap.c (renamed from keyboards/cocoa40/keymaps/default/keymap.c)0
-rw-r--r--keyboards/recompile_keys/cocoa40/keymaps/default/readme.md (renamed from keyboards/cocoa40/keymaps/default/readme.md)0
-rw-r--r--keyboards/recompile_keys/cocoa40/readme.md15
-rw-r--r--keyboards/recompile_keys/cocoa40/rules.mk (renamed from keyboards/cocoa40/rules.mk)0
-rw-r--r--keyboards/recompile_keys/mio/config.h (renamed from keyboards/mio/config.h)0
-rw-r--r--keyboards/recompile_keys/mio/info.json (renamed from keyboards/mio/info.json)0
-rw-r--r--keyboards/recompile_keys/mio/keymaps/default/keymap.c (renamed from keyboards/mio/keymaps/default/keymap.c)0
-rw-r--r--keyboards/recompile_keys/mio/keymaps/default/readme.md (renamed from keyboards/mio/keymaps/default/readme.md)0
-rw-r--r--keyboards/recompile_keys/mio/keymaps/via/keymap.c (renamed from keyboards/mio/keymaps/via/keymap.c)0
-rw-r--r--keyboards/recompile_keys/mio/keymaps/via/rules.mk (renamed from keyboards/nomu30/keymaps/via/rules.mk)0
-rw-r--r--keyboards/recompile_keys/mio/mio.c (renamed from keyboards/mio/mio.c)0
-rw-r--r--keyboards/recompile_keys/mio/mio.h (renamed from keyboards/mio/mio.h)0
-rw-r--r--keyboards/recompile_keys/mio/readme.md23
-rw-r--r--keyboards/recompile_keys/mio/rules.mk (renamed from keyboards/mio/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/.noci (renamed from keyboards/runner3680/4x6/.noci)0
-rw-r--r--keyboards/recompile_keys/nomu30/config.h (renamed from keyboards/nomu30/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/info.json (renamed from keyboards/nomu30/info.json)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/center_sprit/config.h (renamed from keyboards/nomu30/keymaps/center_sprit/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/center_sprit/keymap.c (renamed from keyboards/nomu30/keymaps/center_sprit/keymap.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/center_sprit/readme.md (renamed from keyboards/nomu30/keymaps/center_sprit/readme.md)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/center_sprit/rules.mk (renamed from keyboards/nomu30/keymaps/center_sprit/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/default/config.h (renamed from keyboards/nomu30/keymaps/default/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/default/keymap.c (renamed from keyboards/nomu30/keymaps/default/keymap.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/default/readme.md (renamed from keyboards/nomu30/keymaps/default/readme.md)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/like_jis/config.h (renamed from keyboards/nomu30/keymaps/like_jis/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/like_jis/keymap.c (renamed from keyboards/nomu30/keymaps/like_jis/keymap.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/like_jis/readme.md (renamed from keyboards/nomu30/keymaps/like_jis/readme.md)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/like_jis/rules.mk (renamed from keyboards/nomu30/keymaps/like_jis/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/via/keymap.c (renamed from keyboards/nomu30/keymaps/via/keymap.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/keymaps/via/rules.mk (renamed from keyboards/pistachio_pro/keymaps/via/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/nomu30.c (renamed from keyboards/nomu30/nomu30.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/nomu30.h34
-rw-r--r--keyboards/recompile_keys/nomu30/readme.md15
-rw-r--r--keyboards/recompile_keys/nomu30/rev1/.noci (renamed from keyboards/runner3680/4x7/.noci)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev1/config.h (renamed from keyboards/nomu30/rev1/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev1/rev1.c (renamed from keyboards/nomu30/rev1/rev1.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev1/rev1.h (renamed from keyboards/nomu30/rev1/rev1.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev1/rules.mk (renamed from keyboards/nomu30/rev1/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev2/.noci (renamed from keyboards/runner3680/4x8/.noci)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev2/config.h (renamed from keyboards/nomu30/rev2/config.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev2/rev2.c (renamed from keyboards/nomu30/rev2/rev2.c)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev2/rev2.h (renamed from keyboards/nomu30/rev2/rev2.h)0
-rw-r--r--keyboards/recompile_keys/nomu30/rev2/rules.mk (renamed from keyboards/nomu30/rev2/rules.mk)0
-rw-r--r--keyboards/recompile_keys/nomu30/rules.mk1
-rw-r--r--keyboards/redox_w/config.h9
-rw-r--r--keyboards/redox_w/matrix.c135
-rw-r--r--keyboards/redox_w/rules.mk19
-rwxr-xr-xkeyboards/redscarf_iiplus/verb/matrix.c7
-rwxr-xr-xkeyboards/redscarf_iiplus/verc/matrix.c7
-rw-r--r--keyboards/redscarf_iiplus/verd/matrix.c7
-rw-r--r--keyboards/reviung/reviung33/.noci (renamed from keyboards/runner3680/5x6/.noci)0
-rw-r--r--keyboards/reviung/reviung33/config.h (renamed from keyboards/reviung33/config.h)0
-rw-r--r--keyboards/reviung/reviung33/info.json (renamed from keyboards/reviung33/info.json)0
-rw-r--r--keyboards/reviung/reviung33/keymaps/default/keymap.c (renamed from keyboards/reviung33/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung33/keymaps/default/readme.md (renamed from keyboards/reviung33/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung33/keymaps/default_jp/keymap.c (renamed from keyboards/reviung33/keymaps/default_jp/keymap.c)0
-rw-r--r--keyboards/reviung/reviung33/keymaps/default_jp/readme.md (renamed from keyboards/reviung33/keymaps/default_jp/readme.md)0
-rw-r--r--keyboards/reviung/reviung33/readme.md (renamed from keyboards/reviung33/readme.md)0
-rw-r--r--keyboards/reviung/reviung33/reviung33.c (renamed from keyboards/reviung33/reviung33.c)0
-rw-r--r--keyboards/reviung/reviung33/reviung33.h (renamed from keyboards/reviung33/reviung33.h)0
-rw-r--r--keyboards/reviung/reviung33/rules.mk (renamed from keyboards/reviung33/rules.mk)0
-rwxr-xr-xkeyboards/reviung/reviung34/config.h (renamed from keyboards/reviung34/config.h)0
-rwxr-xr-xkeyboards/reviung/reviung34/info.json (renamed from keyboards/reviung34/info.json)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default/keymap.c (renamed from keyboards/reviung34/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default/readme.md (renamed from keyboards/reviung34/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_2uL/keymap.c (renamed from keyboards/reviung34/keymaps/default_2uL/keymap.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_2uL/readme.md (renamed from keyboards/reviung34/keymaps/default_2uL/readme.md)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_jp/keymap.c (renamed from keyboards/reviung34/keymaps/default_jp/keymap.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_jp/readme.md (renamed from keyboards/reviung34/keymaps/default_jp/readme.md)0
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb/config.h (renamed from keyboards/reviung34/keymaps/default_rgb/config.h)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_rgb/keymap.c (renamed from keyboards/reviung34/keymaps/default_rgb/keymap.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_rgb/readme.md (renamed from keyboards/reviung34/keymaps/default_rgb/readme.md)0
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb/rules.mk (renamed from keyboards/reviung39/keymaps/default_s/rules.mk)0
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h (renamed from keyboards/reviung34/keymaps/default_rgb2u/config.h)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_rgb2u/keymap.c (renamed from keyboards/reviung34/keymaps/default_rgb2u/keymap.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/keymaps/default_rgb2u/readme.md (renamed from keyboards/reviung34/keymaps/default_rgb2u/readme.md)0
-rw-r--r--keyboards/reviung/reviung34/keymaps/default_rgb2u/rules.mk (renamed from keyboards/suihankey/alpha/rules.mk)0
-rwxr-xr-xkeyboards/reviung/reviung34/readme.md (renamed from keyboards/reviung34/readme.md)0
-rwxr-xr-xkeyboards/reviung/reviung34/reviung34.c (renamed from keyboards/reviung34/reviung34.c)0
-rwxr-xr-xkeyboards/reviung/reviung34/reviung34.h (renamed from keyboards/reviung34/reviung34.h)0
-rwxr-xr-xkeyboards/reviung/reviung34/rules.mk (renamed from keyboards/reviung34/rules.mk)0
-rw-r--r--keyboards/reviung/reviung39/config.h (renamed from keyboards/reviung39/config.h)0
-rw-r--r--keyboards/reviung/reviung39/info.json (renamed from keyboards/reviung39/info.json)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default/config.h (renamed from keyboards/reviung39/keymaps/default/config.h)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default/keymap.c (renamed from keyboards/reviung39/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default/readme.md (renamed from keyboards/reviung39/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default/rules.mk (renamed from keyboards/suihankey/rev1/rules.mk)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/config.h (renamed from keyboards/reviung39/keymaps/default_s/config.h)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/keymap.c (renamed from keyboards/reviung39/keymaps/default_s/keymap.c)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/readme.md (renamed from keyboards/reviung39/keymaps/default_s/readme.md)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/default_s/rules.mk (renamed from keyboards/suihankey/split/alpha/rules.mk)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/toshi0383/config.h (renamed from keyboards/reviung39/keymaps/toshi0383/config.h)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/toshi0383/keymap.c (renamed from keyboards/reviung39/keymaps/toshi0383/keymap.c)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/toshi0383/readme.md (renamed from keyboards/reviung39/keymaps/toshi0383/readme.md)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/toshi0383/rules.mk (renamed from keyboards/reviung39/keymaps/toshi0383/rules.mk)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/via/keymap.c (renamed from keyboards/reviung39/keymaps/via/keymap.c)0
-rw-r--r--keyboards/reviung/reviung39/keymaps/via/rules.mk (renamed from keyboards/reviung39/keymaps/via/rules.mk)0
-rw-r--r--keyboards/reviung/reviung39/readme.md (renamed from keyboards/reviung39/readme.md)0
-rw-r--r--keyboards/reviung/reviung39/reviung39.c (renamed from keyboards/reviung39/reviung39.c)0
-rw-r--r--keyboards/reviung/reviung39/reviung39.h (renamed from keyboards/reviung39/reviung39.h)0
-rw-r--r--keyboards/reviung/reviung39/rules.mk (renamed from keyboards/reviung39/rules.mk)0
-rw-r--r--keyboards/reviung/reviung41/config.h (renamed from keyboards/reviung41/config.h)0
-rw-r--r--keyboards/reviung/reviung41/info.json (renamed from keyboards/reviung41/info.json)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/ciutadellla/config.h (renamed from keyboards/reviung41/keymaps/ciutadellla/config.h)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c (renamed from keyboards/reviung41/keymaps/ciutadellla/keymap.c)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk (renamed from keyboards/reviung41/keymaps/ciutadellla/rules.mk)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/default/keymap.c (renamed from keyboards/reviung41/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/default/readme.md (renamed from keyboards/reviung41/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/via/keymap.c (renamed from keyboards/reviung41/keymaps/via/keymap.c)0
-rw-r--r--keyboards/reviung/reviung41/keymaps/via/rules.mk (renamed from keyboards/reviung41/keymaps/via/rules.mk)0
-rw-r--r--keyboards/reviung/reviung41/readme.md (renamed from keyboards/reviung41/readme.md)0
-rw-r--r--keyboards/reviung/reviung41/reviung41.c (renamed from keyboards/reviung41/reviung41.c)0
-rw-r--r--keyboards/reviung/reviung41/reviung41.h (renamed from keyboards/reviung41/reviung41.h)0
-rw-r--r--keyboards/reviung/reviung41/rules.mk (renamed from keyboards/reviung41/rules.mk)0
-rw-r--r--keyboards/reviung/reviung5/config.h (renamed from keyboards/reviung5/config.h)0
-rw-r--r--keyboards/reviung/reviung5/info.json (renamed from keyboards/reviung5/info.json)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default/keymap.c (renamed from keyboards/reviung5/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default/readme.md (renamed from keyboards/reviung5/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default_lre/keymap.c (renamed from keyboards/reviung5/keymaps/default_lre/keymap.c)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default_lre/readme.md (renamed from keyboards/reviung5/keymaps/default_lre/readme.md)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default_rre/keymap.c (renamed from keyboards/reviung5/keymaps/default_rre/keymap.c)0
-rw-r--r--keyboards/reviung/reviung5/keymaps/default_rre/readme.md (renamed from keyboards/reviung5/keymaps/default_rre/readme.md)0
-rw-r--r--keyboards/reviung/reviung5/readme.md (renamed from keyboards/reviung5/readme.md)0
-rw-r--r--keyboards/reviung/reviung5/reviung5.c (renamed from keyboards/reviung5/reviung5.c)0
-rw-r--r--keyboards/reviung/reviung5/reviung5.h (renamed from keyboards/reviung5/reviung5.h)0
-rw-r--r--keyboards/reviung/reviung5/rules.mk (renamed from keyboards/reviung5/rules.mk)0
-rw-r--r--keyboards/reviung/reviung53/config.h (renamed from keyboards/reviung53/config.h)0
-rw-r--r--keyboards/reviung/reviung53/info.json (renamed from keyboards/reviung53/info.json)0
-rw-r--r--keyboards/reviung/reviung53/keymaps/default/keymap.c (renamed from keyboards/reviung53/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung53/keymaps/default/readme.md (renamed from keyboards/reviung53/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung53/keymaps/via/keymap.c (renamed from keyboards/reviung53/keymaps/via/keymap.c)0
-rw-r--r--keyboards/reviung/reviung53/keymaps/via/readme.md (renamed from keyboards/reviung53/keymaps/via/readme.md)0
-rw-r--r--keyboards/reviung/reviung53/keymaps/via/rules.mk (renamed from keyboards/naked60/keymaps/via/rules.mk)0
-rw-r--r--keyboards/reviung/reviung53/readme.md (renamed from keyboards/reviung53/readme.md)0
-rw-r--r--keyboards/reviung/reviung53/reviung53.c (renamed from keyboards/reviung53/reviung53.c)0
-rw-r--r--keyboards/reviung/reviung53/reviung53.h (renamed from keyboards/reviung53/reviung53.h)0
-rw-r--r--keyboards/reviung/reviung53/rules.mk18
-rw-r--r--keyboards/reviung/reviung61/.noci (renamed from keyboards/runner3680/5x6_5x8/.noci)0
-rw-r--r--keyboards/reviung/reviung61/config.h (renamed from keyboards/reviung61/config.h)0
-rw-r--r--keyboards/reviung/reviung61/info.json (renamed from keyboards/reviung61/info.json)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default/keymap.c (renamed from keyboards/reviung61/keymaps/default/keymap.c)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default/readme.md (renamed from keyboards/reviung61/keymaps/default/readme.md)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default_rgb/config.h (renamed from keyboards/reviung61/keymaps/default_rgb/config.h)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default_rgb/keymap.c (renamed from keyboards/reviung61/keymaps/default_rgb/keymap.c)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default_rgb/readme.md (renamed from keyboards/reviung61/keymaps/default_rgb/readme.md)0
-rw-r--r--keyboards/reviung/reviung61/keymaps/default_rgb/rules.mk (renamed from keyboards/reviung61/keymaps/default_rgb/rules.mk)0
-rw-r--r--keyboards/reviung/reviung61/readme.md (renamed from keyboards/reviung61/readme.md)0
-rw-r--r--keyboards/reviung/reviung61/reviung61.c (renamed from keyboards/reviung61/reviung61.c)0
-rw-r--r--keyboards/reviung/reviung61/reviung61.h (renamed from keyboards/reviung61/reviung61.h)0
-rw-r--r--keyboards/reviung/reviung61/rules.mk (renamed from keyboards/reviung61/rules.mk)0
-rw-r--r--keyboards/reviung53/rules.mk19
-rw-r--r--keyboards/rgbkb/common/touch_encoder.c6
-rw-r--r--keyboards/rgbkb/common/touch_encoder.h4
-rw-r--r--keyboards/rgbkb/mun/config.h6
-rw-r--r--keyboards/rgbkb/mun/keymaps/default/keymap.c4
-rw-r--r--keyboards/rgbkb/mun/keymaps/via/keymap.c4
-rw-r--r--keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c4
-rw-r--r--keyboards/rgbkb/mun/rules.mk11
-rw-r--r--keyboards/rgbkb/sol3/.noci (renamed from keyboards/runner3680/5x7/.noci)0
-rw-r--r--keyboards/rgbkb/sol3/config.h182
-rw-r--r--keyboards/rgbkb/sol3/halconf.h22
-rw-r--r--keyboards/rgbkb/sol3/keymaps/default/config.h24
-rw-r--r--keyboards/rgbkb/sol3/keymaps/default/keymap.c173
-rw-r--r--keyboards/rgbkb/sol3/keymaps/kageurufu/config.h32
-rw-r--r--keyboards/rgbkb/sol3/keymaps/kageurufu/keymap.c61
-rw-r--r--[-rwxr-xr-x]keyboards/rgbkb/sol3/keymaps/kageurufu/rules.mk (renamed from keyboards/nebula12/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rgbkb/sol3/keymaps/via/config.h32
-rw-r--r--keyboards/rgbkb/sol3/keymaps/via/keymap.c218
-rw-r--r--[-rwxr-xr-x]keyboards/rgbkb/sol3/keymaps/via/rules.mk (renamed from keyboards/nebula68/keymaps/via/rules.mk)0
-rw-r--r--keyboards/rgbkb/sol3/mcuconf.h30
-rw-r--r--keyboards/rgbkb/sol3/rev1/config.h12
-rw-r--r--keyboards/rgbkb/sol3/rev1/rev1.c287
-rw-r--r--keyboards/rgbkb/sol3/rev1/rev1.h74
-rw-r--r--keyboards/rgbkb/sol3/rev1/rules.mk (renamed from keyboards/runner3680/3x8/rules.mk)0
-rw-r--r--keyboards/rgbkb/sol3/rules.mk49
-rw-r--r--keyboards/rgbkb/sol3/sol3.c38
-rw-r--r--keyboards/rgbkb/sol3/sol3.h18
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/333fred/rules.mk2
-rw-r--r--keyboards/rgbkb/zygomorph/keymaps/kageurufu/rules.mk2
-rw-r--r--keyboards/rocketboard_16/keycode_lookup.c34
-rw-r--r--keyboards/rocketboard_16/keycode_lookup.h2
-rw-r--r--keyboards/rocketboard_16/rules.mk2
-rw-r--r--keyboards/runner3680/readme.md15
-rw-r--r--keyboards/runner3680/rules.mk22
-rw-r--r--keyboards/runner3680/runner3680.h43
-rw-r--r--keyboards/salicylic_acid3/7skb/.noci (renamed from keyboards/runner3680/5x8/.noci)0
-rw-r--r--keyboards/salicylic_acid3/7skb/7skb.c (renamed from keyboards/7skb/7skb.c)0
-rw-r--r--keyboards/salicylic_acid3/7skb/7skb.h7
-rw-r--r--keyboards/salicylic_acid3/7skb/config.h (renamed from keyboards/naked64/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7skb/info.json (renamed from keyboards/7skb/info.json)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/default/config.h (renamed from keyboards/7skb/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/default/keymap.c (renamed from keyboards/7skb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/salicylic/config.h (renamed from keyboards/7skb/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/salicylic/keymap.c (renamed from keyboards/7skb/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/salicylic/rules.mk (renamed from keyboards/7skb/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/via/keymap.c (renamed from keyboards/7skb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/via/readme.md (renamed from keyboards/7skb/keymaps/via/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/7skb/keymaps/via/rules.mk (renamed from keyboards/nk1/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/7skb/readme.md17
-rw-r--r--keyboards/salicylic_acid3/7skb/rev1/config.h (renamed from keyboards/7skb/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7skb/rev1/rev1.c (renamed from keyboards/getta25/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/7skb/rev1/rev1.h (renamed from keyboards/7skb/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/7skb/rev1/rules.mk (renamed from keyboards/runner3680/4x6/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/7skb/rules.mk22
-rw-r--r--keyboards/salicylic_acid3/7splus/7splus.c (renamed from keyboards/7splus/7splus.c)0
-rw-r--r--keyboards/salicylic_acid3/7splus/7splus.h (renamed from keyboards/7splus/7splus.h)0
-rw-r--r--keyboards/salicylic_acid3/7splus/config.h (renamed from keyboards/7splus/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7splus/info.json (renamed from keyboards/7splus/info.json)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/default/keymap.c (renamed from keyboards/7splus/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/salicylic/config.h (renamed from keyboards/7splus/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/salicylic/keymap.c (renamed from keyboards/7splus/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/salicylic/rules.mk (renamed from keyboards/7splus/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/via/config.h (renamed from keyboards/7splus/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/via/keymap.c (renamed from keyboards/7splus/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/7splus/keymaps/via/rules.mk (renamed from keyboards/nknl7en/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/7splus/readme.md17
-rw-r--r--keyboards/salicylic_acid3/7splus/rules.mk (renamed from keyboards/7splus/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/ajisai74.c (renamed from keyboards/ajisai74/ajisai74.c)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/ajisai74.h (renamed from keyboards/ajisai74/ajisai74.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/config.h (renamed from keyboards/ajisai74/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/info.json (renamed from keyboards/ajisai74/info.json)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/default/config.h (renamed from keyboards/ajisai74/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/default/keymap.c (renamed from keyboards/ajisai74/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/jis/config.h (renamed from keyboards/ajisai74/keymaps/jis/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/jis/keymap.c (renamed from keyboards/ajisai74/keymaps/jis/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/jis/rules.mk (renamed from keyboards/ajisai74/keymaps/jis/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/config.h (renamed from keyboards/ajisai74/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/keymap.c (renamed from keyboards/ajisai74/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/rules.mk (renamed from keyboards/ajisai74/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/via/config.h (renamed from keyboards/ajisai74/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/via/keymap.c (renamed from keyboards/ajisai74/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/keymaps/via/rules.mk (renamed from keyboards/nknl7jp/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ajisai74/readme.md17
-rw-r--r--keyboards/salicylic_acid3/ajisai74/rules.mk (renamed from keyboards/ajisai74/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/config.h (renamed from keyboards/ergoarrows/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/ergoarrows.c (renamed from keyboards/ergoarrows/ergoarrows.c)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/ergoarrows.h (renamed from keyboards/ergoarrows/ergoarrows.h)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/info.json (renamed from keyboards/ergoarrows/info.json)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/default/config.h (renamed from keyboards/ergoarrows/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/default/keymap.c (renamed from keyboards/ergoarrows/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/config.h (renamed from keyboards/ergoarrows/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/keymap.c (renamed from keyboards/ergoarrows/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/via/config.h (renamed from keyboards/ergoarrows/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/via/keymap.c (renamed from keyboards/ergoarrows/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/keymaps/via/rules.mk (renamed from keyboards/pistachio/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/readme.md17
-rw-r--r--keyboards/salicylic_acid3/ergoarrows/rules.mk (renamed from keyboards/ergoarrows/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/getta25/.noci (renamed from keyboards/setta21/rev1/.noci)0
-rw-r--r--keyboards/salicylic_acid3/getta25/config.h (renamed from keyboards/setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/getta25/getta25.c (renamed from keyboards/getta25/getta25.c)0
-rw-r--r--keyboards/salicylic_acid3/getta25/getta25.h7
-rw-r--r--keyboards/salicylic_acid3/getta25/info.json (renamed from keyboards/getta25/info.json)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/default/config.h (renamed from keyboards/getta25/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/default/keymap.c (renamed from keyboards/getta25/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/oled/config.h (renamed from keyboards/getta25/keymaps/oled/config.h)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/oled/glcdfont.c (renamed from keyboards/getta25/keymaps/oled/glcdfont.c)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/oled/keymap.c (renamed from keyboards/getta25/keymaps/oled/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/getta25/keymaps/oled/rules.mk (renamed from keyboards/getta25/keymaps/oled/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/getta25/readme.md17
-rw-r--r--keyboards/salicylic_acid3/getta25/rev1/config.h (renamed from keyboards/getta25/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/getta25/rev1/rev1.c (renamed from keyboards/naked64/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/getta25/rev1/rev1.h (renamed from keyboards/getta25/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/getta25/rev1/rules.mk (renamed from keyboards/treadstone48/rev1/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/getta25/rules.mk21
-rw-r--r--keyboards/salicylic_acid3/jisplit89/.noci (renamed from keyboards/squiggle/rev1/.noci)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/config.h (renamed from keyboards/jisplit89/config.h)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/info.json (renamed from keyboards/jisplit89/info.json)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/jisplit89.c (renamed from keyboards/jisplit89/jisplit89.c)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/jisplit89.h22
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/default/keymap.c (renamed from keyboards/jisplit89/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/config.h (renamed from keyboards/jisplit89/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/keymap.c (renamed from keyboards/jisplit89/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/rules.mk (renamed from keyboards/jisplit89/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/via/config.h (renamed from keyboards/jisplit89/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/keymaps/via/keymap.c (renamed from keyboards/jisplit89/keymaps/via/keymap.c)0
-rw-r--r--[-rwxr-xr-x]keyboards/salicylic_acid3/jisplit89/keymaps/via/rules.mk (renamed from keyboards/nebula68b/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/readme.md17
-rw-r--r--keyboards/salicylic_acid3/jisplit89/rev1/config.h (renamed from keyboards/jisplit89/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/rev1/rev1.c (renamed from keyboards/jisplit89/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/rev1/rev1.h (renamed from keyboards/jisplit89/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/rev1/rules.mk (renamed from keyboards/runner3680/4x7/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/jisplit89/rules.mk22
-rw-r--r--keyboards/salicylic_acid3/nafuda/config.h (renamed from keyboards/nafuda/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/info.json (renamed from keyboards/nafuda/info.json)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/keymaps/default/config.h (renamed from keyboards/nafuda/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/keymaps/default/keymap.c (renamed from keyboards/nafuda/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/keymaps/default/readme.md (renamed from keyboards/nafuda/keymaps/default/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/nafuda.c (renamed from keyboards/nafuda/nafuda.c)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/nafuda.h (renamed from keyboards/nafuda/nafuda.h)0
-rw-r--r--keyboards/salicylic_acid3/nafuda/readme.md17
-rw-r--r--keyboards/salicylic_acid3/nafuda/rules.mk (renamed from keyboards/nafuda/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/.noci (renamed from keyboards/suihankey/split/.noci)0
-rw-r--r--keyboards/salicylic_acid3/naked48/config.h (renamed from keyboards/naked48/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/info.json (renamed from keyboards/naked48/info.json)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default/config.h (renamed from keyboards/naked48/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default/keymap.c (renamed from keyboards/naked48/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default/readme.md (renamed from keyboards/naked48/keymaps/default/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default/rules.mk (renamed from keyboards/treadstone48/rev2/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h (renamed from keyboards/naked48/keymaps/default_with_nafuda/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/keymap.c (renamed from keyboards/naked48/keymaps/default_with_nafuda/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/readme.md (renamed from keyboards/naked48/keymaps/default_with_nafuda/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/rules.mk (renamed from keyboards/quark/keymaps/ajp10304/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h (renamed from keyboards/naked48/keymaps/default_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/keymap.c (renamed from keyboards/naked48/keymaps/default_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/readme.md (renamed from keyboards/naked48/keymaps/default_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h (renamed from keyboards/naked48/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic/keymap.c (renamed from keyboards/naked48/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic/readme.md (renamed from keyboards/naked48/keymaps/salicylic/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic/rules.mk (renamed from keyboards/naked48/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/config.h (renamed from keyboards/naked48/keymaps/salicylic_with_nafuda/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/keymap.c (renamed from keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/readme.md (renamed from keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/rules.mk (renamed from keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/config.h (renamed from keyboards/naked48/keymaps/salicylic_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/keymap.c (renamed from keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/readme.md (renamed from keyboards/naked48/keymaps/salicylic_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/rules.mk (renamed from keyboards/runner3680/4x8/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/scheiklp/config.h (renamed from keyboards/naked48/keymaps/scheiklp/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/scheiklp/keymap.c (renamed from keyboards/naked48/keymaps/scheiklp/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/scheiklp/readme.md (renamed from keyboards/naked48/keymaps/scheiklp/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/scheiklp/rules.mk (renamed from keyboards/naked48/keymaps/scheiklp/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via/config.h (renamed from keyboards/naked48/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via/keymap.c (renamed from keyboards/naked48/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via/rules.mk (renamed from keyboards/naked48/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h (renamed from keyboards/naked48/keymaps/via_rgb_matrix/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/keymap.c (renamed from keyboards/naked48/keymaps/via_rgb_matrix/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/rules.mk (renamed from keyboards/naked48/keymaps/via_rgb_matrix/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/naked48.c (renamed from keyboards/naked48/naked48.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/naked48.h24
-rw-r--r--keyboards/salicylic_acid3/naked48/readme.md18
-rw-r--r--keyboards/salicylic_acid3/naked48/rev1/config.h (renamed from keyboards/naked48/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/rev1/rev1.c (renamed from keyboards/naked48/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/naked48/rev1/rev1.h (renamed from keyboards/naked48/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/naked48/rev1/rules.mk (renamed from keyboards/runner3680/5x6/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked48/rules.mk24
-rw-r--r--keyboards/salicylic_acid3/naked60/config.h (renamed from keyboards/naked60/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/info.json (renamed from keyboards/naked60/info.json)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/333fred/config.h (renamed from keyboards/naked60/keymaps/333fred/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/333fred/keymap.c (renamed from keyboards/naked60/keymaps/333fred/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default/config.h (renamed from keyboards/naked60/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default/keymap.c (renamed from keyboards/naked60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default/readme.md (renamed from keyboards/naked60/keymaps/default/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/config.h (renamed from keyboards/naked60/keymaps/default_with_nafuda/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/keymap.c (renamed from keyboards/naked60/keymaps/default_with_nafuda/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/readme.md (renamed from keyboards/naked60/keymaps/default_with_nafuda/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/config.h (renamed from keyboards/naked60/keymaps/default_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/keymap.c (renamed from keyboards/naked60/keymaps/default_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/readme.md (renamed from keyboards/naked60/keymaps/default_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic/config.h (renamed from keyboards/naked60/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic/keymap.c (renamed from keyboards/naked60/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic/readme.md (renamed from keyboards/naked60/keymaps/salicylic/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic/rules.mk (renamed from keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/config.h (renamed from keyboards/naked60/keymaps/salicylic_with_nafuda/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/keymap.c (renamed from keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/readme.md (renamed from keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/rules.mk (renamed from keyboards/diverge3/keymaps/default/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/config.h (renamed from keyboards/naked60/keymaps/salicylic_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/keymap.c (renamed from keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/readme.md (renamed from keyboards/naked60/keymaps/salicylic_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/rules.mk (renamed from keyboards/naked60/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/via/config.h (renamed from keyboards/naked60/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/keymaps/via/keymap.c (renamed from keyboards/naked60/keymaps/via/keymap.c)0
-rw-r--r--[-rwxr-xr-x]keyboards/salicylic_acid3/naked60/keymaps/via/rules.mk (renamed from keyboards/nk65/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked60/naked60.c (renamed from keyboards/naked60/naked60.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/naked60.h24
-rw-r--r--keyboards/salicylic_acid3/naked60/readme.md18
-rw-r--r--keyboards/salicylic_acid3/naked60/rev1/config.h (renamed from keyboards/naked60/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/rev1/rev1.c (renamed from keyboards/naked60/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/naked60/rev1/rev1.h (renamed from keyboards/naked60/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/naked60/rev1/rules.mk (renamed from keyboards/runner3680/5x7/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked60/rules.mk22
-rw-r--r--keyboards/salicylic_acid3/naked64/.noci (renamed from keyboards/suihankey/split/alpha/.noci)0
-rw-r--r--keyboards/salicylic_acid3/naked64/config.h (renamed from keyboards/wings42/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/info.json (renamed from keyboards/naked64/info.json)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default/config.h (renamed from keyboards/naked64/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default/keymap.c (renamed from keyboards/naked64/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default/readme.md (renamed from keyboards/naked64/keymaps/default/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default/rules.mk (renamed from keyboards/runner3680/5x8/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h (renamed from keyboards/naked64/keymaps/default_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/keymap.c (renamed from keyboards/naked64/keymaps/default_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/readme.md (renamed from keyboards/naked64/keymaps/default_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/rules.mk (renamed from keyboards/setta21/rev1/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic/config.h (renamed from keyboards/naked64/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic/keymap.c (renamed from keyboards/naked64/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic/readme.md (renamed from keyboards/naked64/keymaps/salicylic/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic/rules.mk (renamed from keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/config.h (renamed from keyboards/naked64/keymaps/salicylic_with_setta21/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/keymap.c (renamed from keyboards/naked64/keymaps/salicylic_with_setta21/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/readme.md (renamed from keyboards/naked64/keymaps/salicylic_with_setta21/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/rules.mk (renamed from keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked64/naked64.c (renamed from keyboards/naked64/naked64.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/naked64.h7
-rw-r--r--keyboards/salicylic_acid3/naked64/readme.md18
-rw-r--r--keyboards/salicylic_acid3/naked64/rev1/config.h (renamed from keyboards/naked64/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/rev1/rev1.c (renamed from keyboards/squiggle/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/naked64/rev1/rev1.h (renamed from keyboards/naked64/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/naked64/rev1/rules.mk (renamed from keyboards/wings42/rev1/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/naked64/rules.mk24
-rw-r--r--keyboards/salicylic_acid3/nknl7en/config.h (renamed from keyboards/nknl7en/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/info.json (renamed from keyboards/nknl7en/info.json)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/default/config.h (renamed from keyboards/nknl7en/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/default/keymap.c (renamed from keyboards/nknl7en/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/config.h (renamed from keyboards/nknl7en/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/keymap.c (renamed from keyboards/nknl7en/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/via/config.h (renamed from keyboards/nknl7en/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/via/keymap.c (renamed from keyboards/nknl7en/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/keymaps/via/rules.mk (renamed from keyboards/pistachio_mp/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/nknl7en.c (renamed from keyboards/nknl7en/nknl7en.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/nknl7en.h (renamed from keyboards/nknl7en/nknl7en.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7en/readme.md17
-rw-r--r--keyboards/salicylic_acid3/nknl7en/rules.mk (renamed from keyboards/nknl7en/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/config.h (renamed from keyboards/nknl7jp/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/info.json (renamed from keyboards/nknl7jp/info.json)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/default/config.h (renamed from keyboards/nknl7jp/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/default/keymap.c (renamed from keyboards/nknl7jp/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/config.h (renamed from keyboards/nknl7jp/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/keymap.c (renamed from keyboards/nknl7jp/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/via/config.h (renamed from keyboards/nknl7jp/keymaps/via/config.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/via/keymap.c (renamed from keyboards/nknl7jp/keymaps/via/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/keymaps/via/rules.mk (renamed from keyboards/rainkeeb/keymaps/via/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/nknl7jp.c (renamed from keyboards/nknl7jp/nknl7jp.c)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/nknl7jp.h (renamed from keyboards/nknl7jp/nknl7jp.h)0
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/readme.md17
-rw-r--r--keyboards/salicylic_acid3/nknl7jp/rules.mk (renamed from keyboards/nknl7jp/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/setta21/config.h (renamed from keyboards/zinc/config.h)0
-rw-r--r--keyboards/salicylic_acid3/setta21/info.json (renamed from keyboards/setta21/info.json)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/default/config.h (renamed from keyboards/setta21/keymaps/default/config.h)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/default/keymap.c (renamed from keyboards/setta21/keymaps/default/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/default/readme.md (renamed from keyboards/setta21/keymaps/default/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h (renamed from keyboards/setta21/keymaps/salicylic/config.h)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/salicylic/keymap.c (renamed from keyboards/setta21/keymaps/salicylic/keymap.c)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/salicylic/readme.md (renamed from keyboards/setta21/keymaps/salicylic/readme.md)0
-rw-r--r--keyboards/salicylic_acid3/setta21/keymaps/salicylic/rules.mk (renamed from keyboards/setta21/keymaps/salicylic/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/setta21/readme.md17
-rw-r--r--keyboards/salicylic_acid3/setta21/rev1/.noci (renamed from keyboards/treadstone32/lite/.noci)0
-rw-r--r--keyboards/salicylic_acid3/setta21/rev1/config.h (renamed from keyboards/setta21/rev1/config.h)0
-rw-r--r--keyboards/salicylic_acid3/setta21/rev1/rev1.c (renamed from keyboards/setta21/rev1/rev1.c)0
-rw-r--r--keyboards/salicylic_acid3/setta21/rev1/rev1.h (renamed from keyboards/setta21/rev1/rev1.h)0
-rw-r--r--keyboards/salicylic_acid3/setta21/rev1/rules.mk (renamed from keyboards/wings42/rev1_extkeys/rules.mk)0
-rw-r--r--keyboards/salicylic_acid3/setta21/rules.mk26
-rw-r--r--keyboards/salicylic_acid3/setta21/setta21.c (renamed from keyboards/setta21/setta21.c)0
-rw-r--r--keyboards/salicylic_acid3/setta21/setta21.h7
-rw-r--r--keyboards/satt/comet46/comet46.c (renamed from keyboards/comet46/comet46.c)0
-rw-r--r--keyboards/satt/comet46/comet46.h (renamed from keyboards/comet46/comet46.h)0
-rw-r--r--keyboards/satt/comet46/config.h64
-rw-r--r--keyboards/satt/comet46/i2c.c (renamed from keyboards/comet46/i2c.c)0
-rw-r--r--keyboards/satt/comet46/i2c.h (renamed from keyboards/comet46/i2c.h)0
-rw-r--r--keyboards/satt/comet46/info.json (renamed from keyboards/comet46/info.json)0
-rw-r--r--keyboards/satt/comet46/keymaps/default-rgbled/keymap.c (renamed from keyboards/comet46/keymaps/default-rgbled/keymap.c)0
-rw-r--r--keyboards/satt/comet46/keymaps/default-rgbled/readme.md (renamed from keyboards/comet46/keymaps/default-rgbled/readme.md)0
-rw-r--r--keyboards/satt/comet46/keymaps/default/config.h (renamed from keyboards/comet46/keymaps/default/config.h)0
-rw-r--r--keyboards/satt/comet46/keymaps/default/keymap.c (renamed from keyboards/comet46/keymaps/default/keymap.c)0
-rw-r--r--keyboards/satt/comet46/keymaps/default/readme.md (renamed from keyboards/comet46/keymaps/default/readme.md)0
-rw-r--r--keyboards/satt/comet46/keymaps/default/rules.mk (renamed from keyboards/comet46/keymaps/default/rules.mk)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.c (renamed from keyboards/comet46/keymaps/satt/action_pseudo_lut.c)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.h (renamed from keyboards/comet46/keymaps/satt/action_pseudo_lut.h)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/config.h (renamed from keyboards/comet46/keymaps/satt/config.h)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/keymap.c (renamed from keyboards/comet46/keymaps/satt/keymap.c)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/keymap_jis2us.h (renamed from keyboards/comet46/keymaps/satt/keymap_jis2us.h)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/readme.md (renamed from keyboards/comet46/keymaps/satt/readme.md)0
-rw-r--r--keyboards/satt/comet46/keymaps/satt/rules.mk (renamed from keyboards/comet46/keymaps/satt/rules.mk)0
-rw-r--r--keyboards/satt/comet46/lib/glcdfont.c (renamed from keyboards/comet46/lib/glcdfont.c)0
-rw-r--r--keyboards/satt/comet46/lib/host_led_state_reader.c (renamed from keyboards/comet46/lib/host_led_state_reader.c)0
-rw-r--r--keyboards/satt/comet46/lib/keylogger.c (renamed from keyboards/comet46/lib/keylogger.c)0
-rw-r--r--keyboards/satt/comet46/lib/modifier_state_reader.c (renamed from keyboards/comet46/lib/modifier_state_reader.c)0
-rw-r--r--keyboards/satt/comet46/matrix.c65
-rw-r--r--keyboards/satt/comet46/readme.md17
-rw-r--r--keyboards/satt/comet46/rules.mk25
-rw-r--r--keyboards/satt/comet46/ssd1306.c (renamed from keyboards/comet46/ssd1306.c)0
-rw-r--r--keyboards/satt/comet46/ssd1306.h (renamed from keyboards/comet46/ssd1306.h)0
-rw-r--r--keyboards/scarletbandana/readme.md11
-rw-r--r--keyboards/scythe/readme.md15
-rw-r--r--keyboards/seigaiha/readme.md23
-rw-r--r--keyboards/sekigon/grs_70ec/matrix.c47
-rw-r--r--keyboards/senselessclay/gos65/rules.mk13
-rw-r--r--keyboards/setta21/readme.md17
-rw-r--r--keyboards/setta21/rules.mk26
-rw-r--r--keyboards/setta21/setta21.h7
-rw-r--r--keyboards/sirius/uni660/rev1/config.h9
-rw-r--r--keyboards/sirius/uni660/rev1/matrix.c131
-rw-r--r--keyboards/sirius/uni660/rev1/rules.mk5
-rw-r--r--keyboards/sirius/uni660/rev2/ansi/config.h9
-rw-r--r--keyboards/sirius/uni660/rev2/iso/config.h9
-rw-r--r--keyboards/sirius/uni660/rev2/matrix.c131
-rw-r--r--keyboards/sirius/uni660/rev2/rules.mk5
-rw-r--r--keyboards/sirius/unigo66/custom_matrix.cpp6
-rw-r--r--keyboards/sixkeyboard/matrix.c5
-rw-r--r--keyboards/space_space/readme.md18
-rw-r--r--keyboards/space_space/rules.mk1
-rw-r--r--keyboards/spaceholdings/nebula12/chconf.h (renamed from keyboards/nebula12/chconf.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/config.h (renamed from keyboards/nebula12/config.h)0
-rw-r--r--keyboards/spaceholdings/nebula12/halconf.h (renamed from keyboards/nebula12/halconf.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/info.json (renamed from keyboards/nebula12/info.json)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keymaps/default/keymap.c (renamed from keyboards/nebula12/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keymaps/default/readme.md (renamed from keyboards/nebula12/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keymaps/via/keymap.c (renamed from keyboards/nebula12/keymaps/via/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keymaps/via/readme.md (renamed from keyboards/nebula12/keymaps/via/readme.md)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keymaps/via/rules.mk (renamed from keyboards/nk87/keymaps/via/rules.mk)0
-rw-r--r--keyboards/spaceholdings/nebula12/mcuconf.h (renamed from keyboards/nebula12/mcuconf.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/nebula12.c (renamed from keyboards/nebula12/nebula12.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/nebula12.h (renamed from keyboards/nebula12/nebula12.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula12/readme.md32
-rwxr-xr-xkeyboards/spaceholdings/nebula12/rules.mk (renamed from keyboards/nebula12/rules.mk)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/config.h (renamed from keyboards/nebula68/config.h)0
-rw-r--r--keyboards/spaceholdings/nebula68/halconf.h (renamed from keyboards/nebula68/halconf.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/info.json (renamed from keyboards/nebula68/info.json)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/keymaps/default/keymap.c (renamed from keyboards/nebula68/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/keymaps/default/readme.md (renamed from keyboards/nebula68/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/keymaps/via/keymap.c (renamed from keyboards/nebula68/keymaps/via/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/keymaps/via/readme.md (renamed from keyboards/nebula68/keymaps/via/readme.md)0
-rwxr-xr-x[-rw-r--r--]keyboards/spaceholdings/nebula68/keymaps/via/rules.mk (renamed from keyboards/owl8/keymaps/via/rules.mk)0
-rw-r--r--keyboards/spaceholdings/nebula68/mcuconf.h (renamed from keyboards/nebula68/mcuconf.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/nebula68.c (renamed from keyboards/nebula68/nebula68.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/nebula68.h (renamed from keyboards/nebula68/nebula68.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68/readme.md32
-rwxr-xr-xkeyboards/spaceholdings/nebula68/rules.mk (renamed from keyboards/nebula68/rules.mk)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/config.h (renamed from keyboards/nebula68b/config.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/info.json (renamed from keyboards/nebula68b/info.json)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/keymaps/default/keymap.c (renamed from keyboards/nebula68b/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/keymaps/default/readme.md (renamed from keyboards/nebula68b/keymaps/default/readme.md)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/keymaps/via/keymap.c (renamed from keyboards/nebula68b/keymaps/via/keymap.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/keymaps/via/readme.md (renamed from keyboards/nebula68b/keymaps/via/readme.md)0
-rwxr-xr-x[-rw-r--r--]keyboards/spaceholdings/nebula68b/keymaps/via/rules.mk (renamed from keyboards/plexus75/keymaps/via/rules.mk)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/nebula68b.c (renamed from keyboards/nebula68b/nebula68b.c)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/nebula68b.h (renamed from keyboards/nebula68b/nebula68b.h)0
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/readme.md32
-rwxr-xr-xkeyboards/spaceholdings/nebula68b/rules.mk (renamed from keyboards/nebula68b/rules.mk)0
-rw-r--r--keyboards/spaceman/pancake/rev1/feather/rules.mk2
-rw-r--r--keyboards/spacetime/config.h2
-rw-r--r--keyboards/spiderisland/winry25tc/readme.md14
-rw-r--r--keyboards/splitkb/kyria/keymaps/gotham/rules.mk1
-rw-r--r--keyboards/splitreus62/readme.md13
-rw-r--r--keyboards/squiggle/readme.md24
-rw-r--r--keyboards/squiggle/rules.mk1
-rw-r--r--keyboards/squiggle/squiggle.h23
-rw-r--r--keyboards/standaside/readme.md15
-rw-r--r--keyboards/steal_this_keyboard/readme.md11
-rw-r--r--keyboards/stella/readme.md19
-rw-r--r--keyboards/suihankey/readme.md18
-rw-r--r--keyboards/suihankey/rules.mk23
-rw-r--r--keyboards/suihankey/split/alpha/readme.md18
-rw-r--r--keyboards/suihankey/split/readme.md18
-rw-r--r--keyboards/suihankey/split/rev1/readme.md18
-rw-r--r--keyboards/suihankey/split/rules.mk4
-rw-r--r--keyboards/switchplate/southpaw_65/matrix.c13
-rw-r--r--keyboards/sx60/matrix.c8
-rw-r--r--keyboards/takashiski/hecomi/alpha/config.h (renamed from keyboards/hecomi/alpha/config.h)0
-rw-r--r--keyboards/takashiski/hecomi/alpha/info.json (renamed from keyboards/hecomi/alpha/info.json)0
-rw-r--r--keyboards/takashiski/hecomi/alpha/readme.md (renamed from keyboards/hecomi/alpha/readme.md)0
-rw-r--r--keyboards/takashiski/hecomi/alpha/rules.mk (renamed from keyboards/hecomi/alpha/rules.mk)0
-rw-r--r--keyboards/takashiski/hecomi/hecomi.c (renamed from keyboards/hecomi/hecomi.c)0
-rw-r--r--keyboards/takashiski/hecomi/hecomi.h (renamed from keyboards/hecomi/hecomi.h)0
-rw-r--r--keyboards/takashiski/hecomi/keymaps/default/keymap.c (renamed from keyboards/hecomi/keymaps/default/keymap.c)0
-rw-r--r--keyboards/takashiski/hecomi/keymaps/default/readme.md (renamed from keyboards/hecomi/keymaps/default/readme.md)0
-rw-r--r--keyboards/takashiski/hecomi/keymaps/kakunpc/config.h (renamed from keyboards/hecomi/keymaps/kakunpc/config.h)0
-rw-r--r--keyboards/takashiski/hecomi/keymaps/kakunpc/keymap.c (renamed from keyboards/hecomi/keymaps/kakunpc/keymap.c)0
-rw-r--r--keyboards/takashiski/hecomi/keymaps/kakunpc/readme.md (renamed from keyboards/hecomi/keymaps/kakunpc/readme.md)0
-rw-r--r--keyboards/takashiski/hecomi/readme.md17
-rw-r--r--keyboards/takashiski/hecomi/rules.mk21
-rw-r--r--keyboards/takashiski/namecard2x4/.noci (renamed from keyboards/treadstone32/rev1/.noci)0
-rw-r--r--keyboards/takashiski/namecard2x4/info.json (renamed from keyboards/namecard2x4/info.json)0
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h (renamed from keyboards/namecard2x4/keymaps/brainfuck/config.h)0
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/brainfuck/keymap.c (renamed from keyboards/namecard2x4/keymaps/brainfuck/keymap.c)0
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/brainfuck/readme.md (renamed from keyboards/namecard2x4/keymaps/brainfuck/readme.md)0
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/default/keymap.c (renamed from keyboards/namecard2x4/keymaps/default/keymap.c)0
-rw-r--r--keyboards/takashiski/namecard2x4/keymaps/default/readme.md (renamed from keyboards/namecard2x4/keymaps/default/readme.md)0
-rw-r--r--keyboards/takashiski/namecard2x4/namecard2x4.c (renamed from keyboards/namecard2x4/namecard2x4.c)0
-rw-r--r--keyboards/takashiski/namecard2x4/namecard2x4.h (renamed from keyboards/namecard2x4/namecard2x4.h)0
-rw-r--r--keyboards/takashiski/namecard2x4/readme.md24
-rw-r--r--keyboards/takashiski/namecard2x4/rev1/.noci (renamed from keyboards/treadstone48/.noci)0
-rw-r--r--keyboards/takashiski/namecard2x4/rev1/config.h (renamed from keyboards/namecard2x4/rev1/config.h)0
-rw-r--r--keyboards/takashiski/namecard2x4/rev1/rules.mk (renamed from keyboards/wings42/rev2/rules.mk)0
-rw-r--r--keyboards/takashiski/namecard2x4/rev2/config.h (renamed from keyboards/namecard2x4/rev2/config.h)0
-rw-r--r--keyboards/takashiski/namecard2x4/rev2/rules.mk (renamed from keyboards/yd60mq/12led/rules.mk)0
-rw-r--r--keyboards/takashiski/namecard2x4/rules.mk21
-rw-r--r--keyboards/takashiski/otaku_split/rev0/.noci (renamed from keyboards/treadstone48/rev1/.noci)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/config.h (renamed from keyboards/otaku_split/rev0/config.h)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/info.json (renamed from keyboards/otaku_split/rev0/info.json)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/keymaps/default/keymap.c (renamed from keyboards/otaku_split/rev0/keymaps/default/keymap.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/keymaps/default/readme.md (renamed from keyboards/otaku_split/rev0/keymaps/default/readme.md)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/keymaps/sample/keymap.c (renamed from keyboards/otaku_split/rev0/keymaps/sample/keymap.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/keymaps/sample/readme.md (renamed from keyboards/otaku_split/rev0/keymaps/sample/readme.md)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/readme.md16
-rw-r--r--keyboards/takashiski/otaku_split/rev0/rev0.c (renamed from keyboards/otaku_split/rev0/rev0.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/rev0.h (renamed from keyboards/otaku_split/rev0/rev0.h)0
-rw-r--r--keyboards/takashiski/otaku_split/rev0/rules.mk (renamed from keyboards/otaku_split/rev0/rules.mk)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/config.h (renamed from keyboards/otaku_split/rev1/config.h)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/info.json (renamed from keyboards/otaku_split/rev1/info.json)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/keymaps/default/keymap.c (renamed from keyboards/otaku_split/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/keymaps/default/readme.md (renamed from keyboards/otaku_split/rev1/keymaps/default/readme.md)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/keymaps/sample/keymap.c (renamed from keyboards/otaku_split/rev1/keymaps/sample/keymap.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/keymaps/sample/readme.md (renamed from keyboards/otaku_split/rev1/keymaps/sample/readme.md)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/readme.md19
-rw-r--r--keyboards/takashiski/otaku_split/rev1/rev1.c (renamed from keyboards/otaku_split/rev1/rev1.c)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/rev1.h (renamed from keyboards/otaku_split/rev1/rev1.h)0
-rw-r--r--keyboards/takashiski/otaku_split/rev1/rules.mk (renamed from keyboards/otaku_split/rev1/rules.mk)0
-rw-r--r--keyboards/telophase/config.h9
-rw-r--r--keyboards/telophase/matrix.c10
-rw-r--r--keyboards/telophase/rules.mk3
-rw-r--r--keyboards/tempo_turtle/bradpad/info.json2
-rw-r--r--keyboards/tgr/jane/v2ce/rules.mk2
-rw-r--r--keyboards/the_ruler/readme.md13
-rw-r--r--keyboards/thedogkeyboard/matrix.c287
-rw-r--r--keyboards/thedogkeyboard/readme.md15
-rw-r--r--keyboards/tiger910/readme.md15
-rw-r--r--keyboards/tokyokeyboard/alix40/rules.mk2
-rw-r--r--keyboards/tominabox1/adalyn/adalyn.c (renamed from keyboards/adalyn/adalyn.c)0
-rw-r--r--keyboards/tominabox1/adalyn/adalyn.h (renamed from keyboards/adalyn/adalyn.h)0
-rw-r--r--keyboards/tominabox1/adalyn/config.h (renamed from keyboards/adalyn/config.h)0
-rw-r--r--keyboards/tominabox1/adalyn/info.json (renamed from keyboards/adalyn/info.json)0
-rw-r--r--keyboards/tominabox1/adalyn/keymaps/default/config.h (renamed from keyboards/adalyn/keymaps/default/config.h)0
-rw-r--r--keyboards/tominabox1/adalyn/keymaps/default/keymap.c (renamed from keyboards/adalyn/keymaps/default/keymap.c)0
-rw-r--r--keyboards/tominabox1/adalyn/keymaps/default/readme.md (renamed from keyboards/adalyn/keymaps/default/readme.md)0
-rw-r--r--keyboards/tominabox1/adalyn/keymaps/default/rules.mk (renamed from keyboards/squiggle/keymaps/rick/rules.mk)0
-rw-r--r--keyboards/tominabox1/adalyn/readme.md19
-rw-r--r--keyboards/tominabox1/adalyn/rules.mk19
-rw-r--r--keyboards/tominabox1/le_chiffre/config.h (renamed from keyboards/le_chiffre/config.h)0
-rw-r--r--keyboards/tominabox1/le_chiffre/info.json (renamed from keyboards/le_chiffre/info.json)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/default/config.h (renamed from keyboards/le_chiffre/keymaps/default/config.h)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c (renamed from keyboards/le_chiffre/keymaps/default/keymap.c)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/default/readme.md (renamed from keyboards/le_chiffre/keymaps/default/readme.md)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk (renamed from keyboards/underscore33/rev1/keymaps/default/rules.mk)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/via/keymap.c (renamed from keyboards/le_chiffre/keymaps/via/keymap.c)0
-rw-r--r--keyboards/tominabox1/le_chiffre/keymaps/via/rules.mk (renamed from keyboards/pursuit40/keymaps/via/rules.mk)0
-rw-r--r--keyboards/tominabox1/le_chiffre/le_chiffre.c (renamed from keyboards/le_chiffre/le_chiffre.c)0
-rw-r--r--keyboards/tominabox1/le_chiffre/le_chiffre.h (renamed from keyboards/le_chiffre/le_chiffre.h)0
-rw-r--r--keyboards/tominabox1/le_chiffre/readme.md15
-rw-r--r--keyboards/tominabox1/le_chiffre/rules.mk (renamed from keyboards/le_chiffre/rules.mk)0
-rw-r--r--keyboards/tominabox1/qaz/config.h (renamed from keyboards/qaz/config.h)0
-rw-r--r--keyboards/tominabox1/qaz/info.json (renamed from keyboards/qaz/info.json)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default/config.h (renamed from keyboards/qaz/keymaps/default/config.h)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default/keymap.c (renamed from keyboards/qaz/keymaps/default/keymap.c)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default/readme.md (renamed from keyboards/qaz/keymaps/default/readme.md)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default/rules.mk (renamed from keyboards/underscore33/rev1/keymaps/default_big_space/rules.mk)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default_big_space/config.h (renamed from keyboards/qaz/keymaps/default_big_space/config.h)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c (renamed from keyboards/qaz/keymaps/default_big_space/keymap.c)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default_big_space/readme.md (renamed from keyboards/qaz/keymaps/default_big_space/readme.md)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/default_big_space/rules.mk (renamed from keyboards/underscore33/rev2/keymaps/default/rules.mk)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/via/keymap.c (renamed from keyboards/qaz/keymaps/via/keymap.c)0
-rw-r--r--keyboards/tominabox1/qaz/keymaps/via/rules.mk (renamed from keyboards/qaz/keymaps/via/rules.mk)0
-rw-r--r--keyboards/tominabox1/qaz/qaz.c (renamed from keyboards/qaz/qaz.c)0
-rw-r--r--keyboards/tominabox1/qaz/qaz.h (renamed from keyboards/qaz/qaz.h)0
-rw-r--r--keyboards/tominabox1/qaz/readme.md15
-rw-r--r--keyboards/tominabox1/qaz/rules.mk (renamed from keyboards/qaz/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/.noci (renamed from keyboards/underscore33/.noci)0
-rw-r--r--keyboards/tominabox1/underscore33/readme.md19
-rw-r--r--keyboards/tominabox1/underscore33/rev1/.noci (renamed from keyboards/underscore33/rev1/.noci)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/config.h (renamed from keyboards/underscore33/rev1/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/info.json (renamed from keyboards/underscore33/rev1/info.json)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h (renamed from keyboards/underscore33/rev1/keymaps/default/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c (renamed from keyboards/underscore33/rev1/keymaps/default/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default/readme.md (renamed from keyboards/underscore33/rev1/keymaps/default/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default/rules.mk (renamed from keyboards/underscore33/rev2/keymaps/default_big_space/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h (renamed from keyboards/underscore33/rev1/keymaps/default_big_space/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c (renamed from keyboards/underscore33/rev1/keymaps/default_big_space/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/readme.md (renamed from keyboards/underscore33/rev1/keymaps/default_big_space/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/rules.mk (renamed from keyboards/wanten/keymaps/2u_bars/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/via/keymap.c (renamed from keyboards/underscore33/rev1/keymaps/via/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/via/readme.md (renamed from keyboards/underscore33/rev1/keymaps/via/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keymaps/via/rules.mk (renamed from keyboards/quark/keymaps/via/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/rev1.c (renamed from keyboards/underscore33/rev1/rev1.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/rev1.h (renamed from keyboards/underscore33/rev1/rev1.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev1/rules.mk (renamed from keyboards/underscore33/rev1/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/config.h (renamed from keyboards/underscore33/rev2/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/info.json (renamed from keyboards/underscore33/rev2/info.json)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h (renamed from keyboards/underscore33/rev2/keymaps/default/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c (renamed from keyboards/underscore33/rev2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default/readme.md (renamed from keyboards/underscore33/rev2/keymaps/default/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default/rules.mk (renamed from keyboards/wanten/keymaps/625_bar/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h (renamed from keyboards/underscore33/rev2/keymaps/default_big_space/config.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c (renamed from keyboards/underscore33/rev2/keymaps/default_big_space/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/readme.md (renamed from keyboards/underscore33/rev2/keymaps/default_big_space/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/rules.mk (renamed from keyboards/wanten/keymaps/default/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/via/keymap.c (renamed from keyboards/underscore33/rev2/keymaps/via/keymap.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/via/readme.md (renamed from keyboards/underscore33/rev2/keymaps/via/readme.md)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keymaps/via/rules.mk (renamed from keyboards/underscore33/rev2/keymaps/via/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/rev2.c (renamed from keyboards/underscore33/rev2/rev2.c)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/rev2.h (renamed from keyboards/underscore33/rev2/rev2.h)0
-rw-r--r--keyboards/tominabox1/underscore33/rev2/rules.mk (renamed from keyboards/underscore33/rev2/rules.mk)0
-rw-r--r--keyboards/tominabox1/underscore33/rules.mk1
-rw-r--r--keyboards/treadstone32/readme.md21
-rw-r--r--keyboards/treadstone32/rules.mk18
-rw-r--r--keyboards/treadstone48/keymaps/default/config.h49
-rw-r--r--keyboards/treadstone48/keymaps/like_jis/config.h49
-rw-r--r--keyboards/treadstone48/readme.md21
-rw-r--r--keyboards/treadstone48/rev1/keymaps/like_jis_rs/config.h51
-rw-r--r--keyboards/treadstone48/rules.mk25
-rw-r--r--keyboards/txuu/readme.md18
-rw-r--r--keyboards/ua62/readme.md14
-rw-r--r--keyboards/underscore33/readme.md19
-rw-r--r--keyboards/underscore33/rules.mk1
-rw-r--r--keyboards/unikeyboard/diverge3/config.h (renamed from keyboards/diverge3/config.h)0
-rw-r--r--keyboards/unikeyboard/diverge3/diverge3.c (renamed from keyboards/diverge3/diverge3.c)0
-rw-r--r--keyboards/unikeyboard/diverge3/diverge3.h (renamed from keyboards/diverge3/diverge3.h)0
-rw-r--r--keyboards/unikeyboard/diverge3/info.json (renamed from keyboards/diverge3/info.json)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/default/config.h (renamed from keyboards/diverge3/keymaps/default/config.h)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/default/keymap.c (renamed from keyboards/diverge3/keymaps/default/keymap.c)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/default/readme.md (renamed from keyboards/diverge3/keymaps/default/readme.md)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/default/rules.mk (renamed from keyboards/naked64/keymaps/salicylic/rules.mk)0
-rwxr-xr-xkeyboards/unikeyboard/diverge3/keymaps/iso_uk/config.h (renamed from keyboards/diverge3/keymaps/iso_uk/config.h)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/iso_uk/keymap.c (renamed from keyboards/diverge3/keymaps/iso_uk/keymap.c)0
-rwxr-xr-xkeyboards/unikeyboard/diverge3/keymaps/iso_uk/readme.md (renamed from keyboards/diverge3/keymaps/iso_uk/readme.md)0
-rwxr-xr-xkeyboards/unikeyboard/diverge3/keymaps/iso_uk/rules.mk (renamed from keyboards/diverge3/keymaps/iso_uk/rules.mk)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/workman/config.h (renamed from keyboards/diverge3/keymaps/workman/config.h)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c (renamed from keyboards/diverge3/keymaps/workman/keymap.c)0
-rw-r--r--keyboards/unikeyboard/diverge3/keymaps/workman/readme.md (renamed from keyboards/diverge3/keymaps/workman/readme.md)0
-rw-r--r--[-rwxr-xr-x]keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk (renamed from keyboards/nk65/v1_4/rules.mk)0
-rw-r--r--keyboards/unikeyboard/diverge3/readme.md20
-rw-r--r--keyboards/unikeyboard/diverge3/rules.mk (renamed from keyboards/diverge3/rules.mk)0
-rw-r--r--keyboards/unikeyboard/divergetm2/config.h (renamed from keyboards/divergetm2/config.h)0
-rw-r--r--keyboards/unikeyboard/divergetm2/divergetm2.c (renamed from keyboards/divergetm2/divergetm2.c)0
-rw-r--r--keyboards/unikeyboard/divergetm2/divergetm2.h (renamed from keyboards/divergetm2/divergetm2.h)0
-rw-r--r--keyboards/unikeyboard/divergetm2/info.json (renamed from keyboards/divergetm2/info.json)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/default/config.h (renamed from keyboards/divergetm2/keymaps/default/config.h)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/default/keymap.c (renamed from keyboards/divergetm2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/default/readme.md (renamed from keyboards/divergetm2/keymaps/default/readme.md)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/config.h (renamed from keyboards/divergetm2/keymaps/xtonhasvim/config.h)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/keymap.c (renamed from keyboards/divergetm2/keymaps/xtonhasvim/keymap.c)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/readme.md (renamed from keyboards/niu_mini/keymaps/xtonhasvim/readme.md)0
-rw-r--r--keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/rules.mk (renamed from keyboards/divergetm2/keymaps/xtonhasvim/rules.mk)0
-rw-r--r--keyboards/unikeyboard/divergetm2/readme.md21
-rw-r--r--keyboards/unikeyboard/divergetm2/rules.mk (renamed from keyboards/divergetm2/rules.mk)0
-rw-r--r--keyboards/unikeyboard/felix/config.h (renamed from keyboards/felix/config.h)0
-rw-r--r--keyboards/unikeyboard/felix/felix.c (renamed from keyboards/felix/felix.c)0
-rw-r--r--keyboards/unikeyboard/felix/felix.h (renamed from keyboards/felix/felix.h)0
-rw-r--r--keyboards/unikeyboard/felix/info.json (renamed from keyboards/felix/info.json)0
-rw-r--r--keyboards/unikeyboard/felix/keymaps/default/keymap.c (renamed from keyboards/felix/keymaps/default/keymap.c)0
-rw-r--r--keyboards/unikeyboard/felix/readme.md13
-rw-r--r--keyboards/unikeyboard/felix/rules.mk (renamed from keyboards/felix/rules.mk)0
-rw-r--r--keyboards/viktus/smolka/rules.mk3
-rw-r--r--keyboards/viktus/sp111/mcp23018.c120
-rw-r--r--keyboards/viktus/sp111/mcp23018.h34
-rw-r--r--keyboards/viktus/sp111/rules.mk1
-rw-r--r--keyboards/vn66/readme.md19
-rw-r--r--keyboards/wallaby/readme.md13
-rw-r--r--keyboards/wanten/readme.md27
-rw-r--r--keyboards/weirdo/geminate60/chconf.h (renamed from keyboards/geminate60/chconf.h)0
-rw-r--r--keyboards/weirdo/geminate60/config.h (renamed from keyboards/geminate60/config.h)0
-rw-r--r--keyboards/weirdo/geminate60/geminate60.c (renamed from keyboards/geminate60/geminate60.c)0
-rw-r--r--keyboards/weirdo/geminate60/geminate60.h (renamed from keyboards/geminate60/geminate60.h)0
-rw-r--r--keyboards/weirdo/geminate60/info.json (renamed from keyboards/geminate60/info.json)0
-rw-r--r--keyboards/weirdo/geminate60/keymaps/default/keymap.c (renamed from keyboards/geminate60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/geminate60/keymaps/via/keymap.c (renamed from keyboards/geminate60/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/geminate60/keymaps/via/rules.mk (renamed from keyboards/rabbit_capture_plan/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/geminate60/readme.md16
-rw-r--r--keyboards/weirdo/geminate60/rules.mk (renamed from keyboards/geminate60/rules.mk)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/config.h (renamed from keyboards/kelowna/rgb64/config.h)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/info.json (renamed from keyboards/kelowna/rgb64/info.json)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/keymaps/default/keymap.c (renamed from keyboards/kelowna/rgb64/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/keymaps/via/keymap.c (renamed from keyboards/kelowna/rgb64/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/keymaps/via/rules.mk (renamed from keyboards/reviung53/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/readme.md17
-rw-r--r--keyboards/weirdo/kelowna/rgb64/rgb64.c (renamed from keyboards/kelowna/rgb64/rgb64.c)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/rgb64.h (renamed from keyboards/kelowna/rgb64/rgb64.h)0
-rw-r--r--keyboards/weirdo/kelowna/rgb64/rules.mk (renamed from keyboards/kelowna/rgb64/rules.mk)0
-rw-r--r--keyboards/weirdo/ls_60/chconf.h (renamed from keyboards/ls_60/chconf.h)0
-rw-r--r--keyboards/weirdo/ls_60/config.h (renamed from keyboards/ls_60/config.h)0
-rw-r--r--keyboards/weirdo/ls_60/info.json (renamed from keyboards/ls_60/info.json)0
-rw-r--r--keyboards/weirdo/ls_60/keymaps/default/keymap.c (renamed from keyboards/ls_60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/ls_60/keymaps/via/keymap.c (renamed from keyboards/ls_60/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/ls_60/keymaps/via/rules.mk (renamed from keyboards/runner3680/5x6_5x8/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/ls_60/ls_60.c (renamed from keyboards/ls_60/ls_60.c)0
-rw-r--r--keyboards/weirdo/ls_60/ls_60.h (renamed from keyboards/ls_60/ls_60.h)0
-rw-r--r--keyboards/weirdo/ls_60/readme.md17
-rw-r--r--keyboards/weirdo/ls_60/rules.mk (renamed from keyboards/ls_60/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/np64/chconf.h (renamed from keyboards/naiping/np64/chconf.h)0
-rw-r--r--keyboards/weirdo/naiping/np64/config.h (renamed from keyboards/naiping/np64/config.h)0
-rw-r--r--keyboards/weirdo/naiping/np64/info.json (renamed from keyboards/naiping/np64/info.json)0
-rw-r--r--keyboards/weirdo/naiping/np64/keymaps/default/keymap.c (renamed from keyboards/naiping/np64/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/np64/keymaps/via/keymap.c (renamed from keyboards/naiping/np64/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/np64/keymaps/via/rules.mk (renamed from keyboards/seigaiha/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/np64/np64.c (renamed from keyboards/naiping/np64/np64.c)0
-rw-r--r--keyboards/weirdo/naiping/np64/np64.h (renamed from keyboards/naiping/np64/np64.h)0
-rw-r--r--keyboards/weirdo/naiping/np64/readme.md17
-rw-r--r--keyboards/weirdo/naiping/np64/rules.mk (renamed from keyboards/naiping/np64/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/chconf.h (renamed from keyboards/naiping/nphhkb/chconf.h)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/config.h (renamed from keyboards/naiping/nphhkb/config.h)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/info.json (renamed from keyboards/naiping/nphhkb/info.json)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c (renamed from keyboards/naiping/nphhkb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/keymaps/via/keymap.c (renamed from keyboards/naiping/nphhkb/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/keymaps/via/rules.mk (renamed from keyboards/txuu/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/nphhkb.c (renamed from keyboards/naiping/nphhkb/nphhkb.c)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/nphhkb.h (renamed from keyboards/naiping/nphhkb/nphhkb.h)0
-rw-r--r--keyboards/weirdo/naiping/nphhkb/readme.md17
-rw-r--r--keyboards/weirdo/naiping/nphhkb/rules.mk (renamed from keyboards/naiping/nphhkb/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/npminila/chconf.h (renamed from keyboards/naiping/npminila/chconf.h)0
-rw-r--r--keyboards/weirdo/naiping/npminila/config.h (renamed from keyboards/naiping/npminila/config.h)0
-rw-r--r--keyboards/weirdo/naiping/npminila/info.json (renamed from keyboards/naiping/npminila/info.json)0
-rw-r--r--keyboards/weirdo/naiping/npminila/keymaps/default/keymap.c (renamed from keyboards/naiping/npminila/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/npminila/keymaps/via/keymap.c (renamed from keyboards/naiping/npminila/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/naiping/npminila/keymaps/via/rules.mk (renamed from keyboards/underscore33/rev1/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/naiping/npminila/npminila.c (renamed from keyboards/naiping/npminila/npminila.c)0
-rw-r--r--keyboards/weirdo/naiping/npminila/npminila.h (renamed from keyboards/naiping/npminila/npminila.h)0
-rw-r--r--keyboards/weirdo/naiping/npminila/readme.md17
-rw-r--r--keyboards/weirdo/naiping/npminila/rules.mk (renamed from keyboards/naiping/npminila/rules.mk)0
-rw-r--r--keyboards/weirdo/tiger910/config.h (renamed from keyboards/tiger910/config.h)0
-rw-r--r--keyboards/weirdo/tiger910/info.json (renamed from keyboards/tiger910/info.json)0
-rw-r--r--keyboards/weirdo/tiger910/keymaps/default/keymap.c (renamed from keyboards/tiger910/keymaps/default/keymap.c)0
-rw-r--r--keyboards/weirdo/tiger910/keymaps/via/keymap.c (renamed from keyboards/tiger910/keymaps/via/keymap.c)0
-rw-r--r--keyboards/weirdo/tiger910/keymaps/via/rules.mk (renamed from keyboards/tiger910/keymaps/via/rules.mk)0
-rw-r--r--keyboards/weirdo/tiger910/readme.md15
-rw-r--r--keyboards/weirdo/tiger910/rules.mk (renamed from keyboards/tiger910/rules.mk)0
-rw-r--r--keyboards/weirdo/tiger910/tiger910.c (renamed from keyboards/tiger910/tiger910.c)0
-rw-r--r--keyboards/weirdo/tiger910/tiger910.h (renamed from keyboards/tiger910/tiger910.h)0
-rw-r--r--keyboards/whitefox/readme.md17
-rw-r--r--keyboards/wings42/readme.md19
-rw-r--r--keyboards/wings42/rev1/readme.md21
-rw-r--r--keyboards/wings42/rev1_extkeys/readme.md21
-rw-r--r--keyboards/wings42/rev2/readme.md21
-rw-r--r--keyboards/wings42/rules.mk22
-rw-r--r--keyboards/wings42/wings42.h30
-rw-r--r--keyboards/winry/winry25tc/config.h (renamed from keyboards/spiderisland/winry25tc/config.h)0
-rw-r--r--keyboards/winry/winry25tc/info.json (renamed from keyboards/spiderisland/winry25tc/info.json)0
-rw-r--r--keyboards/winry/winry25tc/keymaps/default/keymap.c (renamed from keyboards/spiderisland/winry25tc/keymaps/default/keymap.c)0
-rw-r--r--keyboards/winry/winry25tc/readme.md19
-rw-r--r--keyboards/winry/winry25tc/rules.mk (renamed from keyboards/spiderisland/winry25tc/rules.mk)0
-rw-r--r--keyboards/winry/winry25tc/winry25tc.c (renamed from keyboards/spiderisland/winry25tc/winry25tc.c)0
-rw-r--r--keyboards/winry/winry25tc/winry25tc.h (renamed from keyboards/spiderisland/winry25tc/winry25tc.h)0
-rw-r--r--keyboards/wolfmarkclub/wm1/rules.mk3
-rw-r--r--keyboards/wolfmarkclub/wm1/wm1.c5
-rw-r--r--keyboards/woodkeys/bigseries/1key/.noci (renamed from keyboards/ymd75/.noci)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/1key.c (renamed from keyboards/bigseries/1key/1key.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/1key.h (renamed from keyboards/bigseries/1key/1key.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/config.h (renamed from keyboards/bigseries/1key/config.h)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/info.json (renamed from keyboards/bigseries/1key/info.json)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/8ball/keymap.c (renamed from keyboards/bigseries/1key/keymaps/8ball/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/ctrl-alt-del/keymap.c (renamed from keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/default/keymap.c (renamed from keyboards/bigseries/1key/keymaps/default/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/README.md (renamed from keyboards/bigseries/1key/keymaps/dudeofawesome/README.md)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/config.h (renamed from keyboards/bigseries/1key/keymaps/dudeofawesome/config.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/keymap.c (renamed from keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/rules.mk (renamed from keyboards/naked64/keymaps/salicylic_with_setta21/rules.mk)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/keymaps/leddance/config.h (renamed from keyboards/bigseries/1key/keymaps/leddance/config.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/leddance/keymap.c (renamed from keyboards/bigseries/1key/keymaps/leddance/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/keymaps/leddance/rules.mk (renamed from keyboards/bigseries/1key/keymaps/leddance/rules.mk)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/lock/keymap.c (renamed from keyboards/bigseries/1key/keymaps/lock/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/keymaps/tester/keymap.c (renamed from keyboards/bigseries/1key/keymaps/tester/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/1key/readme.md15
-rwxr-xr-xkeyboards/woodkeys/bigseries/1key/rules.mk (renamed from keyboards/bigseries/1key/rules.mk)0
-rw-r--r--keyboards/woodkeys/bigseries/2key/.noci (renamed from keyboards/ymd75/rev1/.noci)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/2key.c (renamed from keyboards/bigseries/2key/2key.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/2key.h (renamed from keyboards/bigseries/2key/2key.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/config.h (renamed from keyboards/bigseries/2key/config.h)0
-rw-r--r--keyboards/woodkeys/bigseries/2key/info.json (renamed from keyboards/bigseries/2key/info.json)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/keymaps/default/keymap.c (renamed from keyboards/bigseries/2key/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/keymaps/lock/keymap.c (renamed from keyboards/bigseries/2key/keymaps/lock/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/keymaps/tester/keymap.c (renamed from keyboards/bigseries/2key/keymaps/tester/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/2key/readme.md15
-rwxr-xr-xkeyboards/woodkeys/bigseries/2key/rules.mk (renamed from keyboards/bigseries/2key/rules.mk)0
-rw-r--r--keyboards/woodkeys/bigseries/3key/.noci (renamed from keyboards/ymd75/rev2/.noci)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/3key.c (renamed from keyboards/bigseries/3key/3key.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/3key.h (renamed from keyboards/bigseries/3key/3key.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/config.h (renamed from keyboards/bigseries/3key/config.h)0
-rw-r--r--keyboards/woodkeys/bigseries/3key/info.json (renamed from keyboards/bigseries/3key/info.json)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/keymaps/ctrl-alt-del/keymap.c (renamed from keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/keymaps/default/keymap.c (renamed from keyboards/bigseries/3key/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/keymaps/tester/keymap.c (renamed from keyboards/bigseries/3key/keymaps/tester/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/3key/readme.md15
-rwxr-xr-xkeyboards/woodkeys/bigseries/3key/rules.mk (renamed from keyboards/bigseries/3key/rules.mk)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/4key.c (renamed from keyboards/bigseries/4key/4key.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/4key.h (renamed from keyboards/bigseries/4key/4key.h)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/config.h (renamed from keyboards/bigseries/4key/config.h)0
-rw-r--r--keyboards/woodkeys/bigseries/4key/info.json (renamed from keyboards/bigseries/4key/info.json)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/keymaps/default/keymap.c (renamed from keyboards/bigseries/4key/keymaps/default/keymap.c)0
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/keymaps/tester/keymap.c (renamed from keyboards/bigseries/4key/keymaps/tester/keymap.c)0
-rw-r--r--keyboards/woodkeys/bigseries/4key/readme.md15
-rwxr-xr-xkeyboards/woodkeys/bigseries/4key/rules.mk (renamed from keyboards/bigseries/4key/rules.mk)0
-rw-r--r--keyboards/woodkeys/bigseries/readme.md16
-rwxr-xr-xkeyboards/woodkeys/meira/TWIlib.c (renamed from keyboards/meira/TWIlib.c)0
-rwxr-xr-xkeyboards/woodkeys/meira/TWIlib.h (renamed from keyboards/meira/TWIlib.h)0
-rw-r--r--keyboards/woodkeys/meira/config.h (renamed from keyboards/meira/config.h)0
-rw-r--r--keyboards/woodkeys/meira/featherble/config.h (renamed from keyboards/meira/featherble/config.h)0
-rw-r--r--keyboards/woodkeys/meira/featherble/featherble.c (renamed from keyboards/meira/featherble/featherble.c)0
-rw-r--r--keyboards/woodkeys/meira/featherble/featherble.h (renamed from keyboards/meira/featherble/featherble.h)0
-rw-r--r--keyboards/woodkeys/meira/featherble/rules.mk5
-rw-r--r--keyboards/woodkeys/meira/info.json (renamed from keyboards/meira/info.json)0
-rwxr-xr-xkeyboards/woodkeys/meira/issi.c (renamed from keyboards/meira/issi.c)0
-rwxr-xr-xkeyboards/woodkeys/meira/issi.h (renamed from keyboards/meira/issi.h)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/cole/config.h (renamed from keyboards/meira/keymaps/cole/config.h)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/cole/keymap.c (renamed from keyboards/meira/keymaps/cole/keymap.c)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/cole/readme.md (renamed from keyboards/meira/keymaps/cole/readme.md)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/cole/rules.mk2
-rw-r--r--keyboards/woodkeys/meira/keymaps/default/config.h (renamed from keyboards/meira/keymaps/default/config.h)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/default/keymap.c (renamed from keyboards/meira/keymaps/default/keymap.c)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/default/readme.md (renamed from keyboards/meira/keymaps/default/readme.md)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/grahampheath/config.h (renamed from keyboards/meira/keymaps/grahampheath/config.h)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/grahampheath/keymap.c (renamed from keyboards/meira/keymaps/grahampheath/keymap.c)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/grahampheath/readme.md (renamed from keyboards/meira/keymaps/grahampheath/readme.md)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/grahampheath/rules.mk5
-rw-r--r--keyboards/woodkeys/meira/keymaps/takmiya/config.h (renamed from keyboards/meira/keymaps/takmiya/config.h)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/takmiya/keymap.c (renamed from keyboards/meira/keymaps/takmiya/keymap.c)0
-rw-r--r--keyboards/woodkeys/meira/keymaps/takmiya/readme.md (renamed from keyboards/meira/keymaps/takmiya/readme.md)0
-rwxr-xr-xkeyboards/woodkeys/meira/lighting.c (renamed from keyboards/meira/lighting.c)0
-rwxr-xr-xkeyboards/woodkeys/meira/lighting.h (renamed from keyboards/meira/lighting.h)0
-rw-r--r--keyboards/woodkeys/meira/matrix.c270
-rw-r--r--keyboards/woodkeys/meira/meira.c (renamed from keyboards/meira/meira.c)0
-rw-r--r--keyboards/woodkeys/meira/meira.h (renamed from keyboards/meira/meira.h)0
-rw-r--r--keyboards/woodkeys/meira/promicro/config.h (renamed from keyboards/meira/promicro/config.h)0
-rw-r--r--keyboards/woodkeys/meira/promicro/promicro.c (renamed from keyboards/meira/promicro/promicro.c)0
-rw-r--r--keyboards/woodkeys/meira/promicro/promicro.h (renamed from keyboards/meira/promicro/promicro.h)0
-rw-r--r--keyboards/woodkeys/meira/promicro/rules.mk (renamed from keyboards/meira/promicro/rules.mk)0
-rw-r--r--keyboards/woodkeys/meira/readme.md28
-rw-r--r--keyboards/woodkeys/meira/rules.mk34
-rw-r--r--keyboards/woodkeys/scarletbandana/config.h (renamed from keyboards/scarletbandana/config.h)0
-rw-r--r--keyboards/woodkeys/scarletbandana/info.json (renamed from keyboards/scarletbandana/info.json)0
-rw-r--r--keyboards/woodkeys/scarletbandana/keymaps/default/keymap.c (renamed from keyboards/scarletbandana/keymaps/default/keymap.c)0
-rw-r--r--keyboards/woodkeys/scarletbandana/keymaps/default/readme.md (renamed from keyboards/scarletbandana/keymaps/default/readme.md)0
-rw-r--r--keyboards/woodkeys/scarletbandana/readme.md11
-rw-r--r--keyboards/woodkeys/scarletbandana/rules.mk (renamed from keyboards/scarletbandana/rules.mk)0
-rw-r--r--keyboards/woodkeys/scarletbandana/scarletbandana.c (renamed from keyboards/scarletbandana/scarletbandana.c)0
-rw-r--r--keyboards/woodkeys/scarletbandana/scarletbandana.h (renamed from keyboards/scarletbandana/scarletbandana.h)0
-rw-r--r--keyboards/work_louder/work_board/work_board.c14
-rw-r--r--keyboards/wren/rules.mk7
-rw-r--r--keyboards/xiaomi/mk02/rules.mk3
-rw-r--r--keyboards/xiudi/xd002/rules.mk2
-rw-r--r--keyboards/xiudi/xd84/matrix.c3
-rw-r--r--keyboards/xiudi/xd96/matrix.c11
-rw-r--r--keyboards/yanghu/unicorne/config.h6
-rw-r--r--keyboards/yasui/readme.md22
-rw-r--r--keyboards/yd60mq/readme.md29
-rw-r--r--keyboards/yd60mq/rules.mk22
-rw-r--r--keyboards/yd68/readme.md15
-rw-r--r--keyboards/ydkb/chili/chili.c (renamed from keyboards/chili/chili.c)0
-rw-r--r--keyboards/ydkb/chili/chili.h (renamed from keyboards/chili/chili.h)0
-rw-r--r--keyboards/ydkb/chili/config.h (renamed from keyboards/chili/config.h)0
-rw-r--r--keyboards/ydkb/chili/info.json (renamed from keyboards/chili/info.json)0
-rw-r--r--keyboards/ydkb/chili/keymaps/default/keymap.c (renamed from keyboards/chili/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ydkb/chili/keymaps/via/keymap.c (renamed from keyboards/chili/keymaps/via/keymap.c)0
-rw-r--r--keyboards/ydkb/chili/keymaps/via/rules.mk (renamed from keyboards/wings42/rev1/keymaps/via/rules.mk)0
-rw-r--r--keyboards/ydkb/chili/readme.md15
-rw-r--r--keyboards/ydkb/chili/rules.mk (renamed from keyboards/chili/rules.mk)0
-rw-r--r--keyboards/ydkb/just60/config.h (renamed from keyboards/just60/config.h)0
-rw-r--r--keyboards/ydkb/just60/info.json (renamed from keyboards/just60/info.json)0
-rw-r--r--keyboards/ydkb/just60/just60.h (renamed from keyboards/just60/just60.h)0
-rw-r--r--keyboards/ydkb/just60/keymaps/default/keymap.c (renamed from keyboards/just60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ydkb/just60/keymaps/default/readme.md (renamed from keyboards/just60/keymaps/default/readme.md)0
-rw-r--r--keyboards/ydkb/just60/keymaps/thinxer/keymap.c (renamed from keyboards/just60/keymaps/thinxer/keymap.c)0
-rw-r--r--keyboards/ydkb/just60/keymaps/thinxer/readme.md (renamed from keyboards/just60/keymaps/thinxer/readme.md)0
-rw-r--r--keyboards/ydkb/just60/keymaps/thinxer/rules.mk (renamed from keyboards/just60/keymaps/thinxer/rules.mk)0
-rw-r--r--keyboards/ydkb/just60/readme.md17
-rw-r--r--keyboards/ydkb/just60/rules.mk (renamed from keyboards/just60/rules.mk)0
-rw-r--r--keyboards/ydkb/yd68/config.h (renamed from keyboards/yd68/config.h)0
-rw-r--r--keyboards/ydkb/yd68/info.json (renamed from keyboards/yd68/info.json)0
-rw-r--r--keyboards/ydkb/yd68/keymaps/default/keymap.c (renamed from keyboards/yd68/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ydkb/yd68/keymaps/default/readme.md (renamed from keyboards/yd68/keymaps/default/readme.md)0
-rw-r--r--keyboards/ydkb/yd68/readme.md15
-rw-r--r--keyboards/ydkb/yd68/rules.mk (renamed from keyboards/yd68/rules.mk)0
-rw-r--r--keyboards/ydkb/yd68/yd68.c (renamed from keyboards/yd68/yd68.c)0
-rw-r--r--keyboards/ydkb/yd68/yd68.h (renamed from keyboards/yd68/yd68.h)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/barleycorn.c (renamed from keyboards/barleycorn/barleycorn.c)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/barleycorn.h (renamed from keyboards/barleycorn/barleycorn.h)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/config.h (renamed from keyboards/barleycorn/config.h)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/info.json (renamed from keyboards/barleycorn/info.json)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/default/keymap.c (renamed from keyboards/barleycorn/keymaps/default/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/default/readme.md (renamed from keyboards/barleycorn/keymaps/default/readme.md)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/iso/keymap.c (renamed from keyboards/barleycorn/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/iso/readme.md (renamed from keyboards/barleycorn/keymaps/iso/readme.md)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/via/keymap.c (renamed from keyboards/barleycorn/keymaps/via/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/via/readme.md (renamed from keyboards/barleycorn/keymaps/via/readme.md)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/keymaps/via/rules.mk (renamed from keyboards/wings42/rev1_extkeys/keymaps/via/rules.mk)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/matrix.c (renamed from keyboards/barleycorn/matrix.c)0
-rw-r--r--keyboards/yiancardesigns/barleycorn/readme.md23
-rw-r--r--keyboards/yiancardesigns/barleycorn/rules.mk (renamed from keyboards/barleycorn/rules.mk)0
-rw-r--r--keyboards/yiancardesigns/gingham/config.h (renamed from keyboards/gingham/config.h)0
-rw-r--r--keyboards/yiancardesigns/gingham/gingham.c (renamed from keyboards/gingham/gingham.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/gingham.h (renamed from keyboards/gingham/gingham.h)0
-rw-r--r--keyboards/yiancardesigns/gingham/info.json (renamed from keyboards/gingham/info.json)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/keymap.c (renamed from keyboards/gingham/keymaps/codecoffeecode/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/readme.md (renamed from keyboards/gingham/keymaps/codecoffeecode/readme.md)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/default/keymap.c (renamed from keyboards/gingham/keymaps/default/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/default/readme.md (renamed from keyboards/gingham/keymaps/default/readme.md)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/iso/keymap.c (renamed from keyboards/gingham/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/iso/readme.md (renamed from keyboards/gingham/keymaps/iso/readme.md)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/via/keymap.c (renamed from keyboards/gingham/keymaps/via/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/via/readme.md (renamed from keyboards/gingham/keymaps/via/readme.md)0
-rw-r--r--keyboards/yiancardesigns/gingham/keymaps/via/rules.mk (renamed from keyboards/yasui/keymaps/via/rules.mk)0
-rw-r--r--keyboards/yiancardesigns/gingham/matrix.c (renamed from keyboards/gingham/matrix.c)0
-rw-r--r--keyboards/yiancardesigns/gingham/readme.md23
-rw-r--r--keyboards/yiancardesigns/gingham/rules.mk (renamed from keyboards/gingham/rules.mk)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/config.h (renamed from keyboards/seigaiha/config.h)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/info.json (renamed from keyboards/seigaiha/info.json)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/keymaps/default/keymap.c (renamed from keyboards/seigaiha/keymaps/default/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/keymaps/default/readme.md (renamed from keyboards/seigaiha/keymaps/default/readme.md)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/keymaps/via/keymap.c (renamed from keyboards/seigaiha/keymaps/via/keymap.c)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/keymaps/via/readme.md (renamed from keyboards/seigaiha/keymaps/via/readme.md)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/keymaps/via/rules.mk1
-rw-r--r--keyboards/yiancardesigns/seigaiha/matrix.c (renamed from keyboards/seigaiha/matrix.c)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/readme.md23
-rw-r--r--keyboards/yiancardesigns/seigaiha/rules.mk (renamed from keyboards/seigaiha/rules.mk)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/seigaiha.c (renamed from keyboards/seigaiha/seigaiha.c)0
-rw-r--r--keyboards/yiancardesigns/seigaiha/seigaiha.h (renamed from keyboards/seigaiha/seigaiha.h)0
-rw-r--r--keyboards/ymd75/readme.md24
-rw-r--r--keyboards/ymd75/rules.mk1
-rw-r--r--keyboards/ymd75/ymd75.h11
-rw-r--r--keyboards/ymd96/readme.md19
-rw-r--r--keyboards/ymdk/np21/config.h (renamed from keyboards/ymdk_np21/config.h)0
-rw-r--r--keyboards/ymdk/np21/info.json (renamed from keyboards/ymdk_np21/info.json)0
-rw-r--r--keyboards/ymdk/np21/keymaps/default/keymap.c (renamed from keyboards/ymdk_np21/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ymdk/np21/keymaps/default/readme.md (renamed from keyboards/ymdk_np21/keymaps/default/readme.md)0
-rw-r--r--keyboards/ymdk/np21/keymaps/via/keymap.c (renamed from keyboards/ymdk_np21/keymaps/via/keymap.c)0
-rw-r--r--keyboards/ymdk/np21/keymaps/via/rules.mk (renamed from keyboards/yd60mq/keymaps/via/rules.mk)0
-rw-r--r--keyboards/ymdk/np21/np21.c19
-rw-r--r--keyboards/ymdk/np21/np21.h (renamed from keyboards/ymdk_np21/ymdk_np21.h)0
-rw-r--r--keyboards/ymdk/np21/readme.md21
-rw-r--r--keyboards/ymdk/np21/rules.mk (renamed from keyboards/ymdk_np21/rules.mk)0
-rw-r--r--keyboards/ymdk/yd60mq/12led/config.h (renamed from keyboards/yd60mq/12led/config.h)0
-rw-r--r--keyboards/ymdk/yd60mq/12led/readme.md (renamed from keyboards/yd60mq/12led/readme.md)0
-rw-r--r--keyboards/ymdk/yd60mq/12led/rules.mk (renamed from keyboards/yd60mq/16led/rules.mk)0
-rw-r--r--keyboards/ymdk/yd60mq/16led/config.h (renamed from keyboards/yd60mq/16led/config.h)0
-rw-r--r--keyboards/ymdk/yd60mq/16led/readme.md (renamed from keyboards/yd60mq/16led/readme.md)0
-rw-r--r--keyboards/ymdk/yd60mq/16led/rules.mk (renamed from keyboards/zinc/.noci)0
-rw-r--r--keyboards/ymdk/yd60mq/config.h (renamed from keyboards/yd60mq/config.h)0
-rw-r--r--keyboards/ymdk/yd60mq/info.json (renamed from keyboards/yd60mq/info.json)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/64key/keymap.c (renamed from keyboards/yd60mq/keymaps/64key/keymap.c)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/default/keymap.c (renamed from keyboards/yd60mq/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/iso/keymap.c (renamed from keyboards/yd60mq/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/krusli/keymap.c (renamed from keyboards/yd60mq/keymaps/krusli/keymap.c)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/via/keymap.c (renamed from keyboards/yd60mq/keymaps/via/keymap.c)0
-rw-r--r--keyboards/ymdk/yd60mq/keymaps/via/rules.mk (renamed from keyboards/ymdk_np21/keymaps/via/rules.mk)0
-rw-r--r--keyboards/ymdk/yd60mq/readme.md29
-rw-r--r--keyboards/ymdk/yd60mq/rules.mk22
-rw-r--r--keyboards/ymdk/yd60mq/yd60mq.c (renamed from keyboards/yd60mq/yd60mq.c)0
-rw-r--r--keyboards/ymdk/yd60mq/yd60mq.h (renamed from keyboards/yd60mq/yd60mq.h)0
-rw-r--r--keyboards/ymdk/ymd75/.noci (renamed from keyboards/zinc/rev1/.noci)0
-rw-r--r--keyboards/ymdk/ymd75/config.h (renamed from keyboards/ymd75/config.h)0
-rw-r--r--keyboards/ymdk/ymd75/info.json (renamed from keyboards/ymd75/info.json)0
-rw-r--r--keyboards/ymdk/ymd75/keymaps/default/keymap.c (renamed from keyboards/ymd75/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd75/keymaps/default_iso/keymap.c (renamed from keyboards/ymd75/keymaps/default_iso/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd75/keymaps/default_iso_rwkl/keymap.c (renamed from keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd75/keymaps/via/keymap.c (renamed from keyboards/ymd75/keymaps/via/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd75/keymaps/via/rules.mk (renamed from keyboards/ymd75/keymaps/via/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd75/readme.md24
-rw-r--r--keyboards/ymdk/ymd75/rev1/.noci (renamed from keyboards/zinc/reva/.noci)0
-rw-r--r--keyboards/ymdk/ymd75/rev1/config.h (renamed from keyboards/ymd75/rev1/config.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev1/rev1.c (renamed from keyboards/ymd75/rev1/rev1.c)0
-rw-r--r--keyboards/ymdk/ymd75/rev1/rev1.h (renamed from keyboards/ymd75/rev1/rev1.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev1/rules.mk (renamed from keyboards/ymd75/rev1/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd75/rev2/.noci0
-rw-r--r--keyboards/ymdk/ymd75/rev2/config.h (renamed from keyboards/ymd75/rev2/config.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev2/rev2.c (renamed from keyboards/ymd75/rev2/rev2.c)0
-rw-r--r--keyboards/ymdk/ymd75/rev2/rev2.h (renamed from keyboards/ymd75/rev2/rev2.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev2/rules.mk (renamed from keyboards/ymd75/rev2/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd75/rev3/config.h (renamed from keyboards/ymd75/rev3/config.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev3/rev3.c (renamed from keyboards/ymd75/rev3/rev3.c)0
-rw-r--r--keyboards/ymdk/ymd75/rev3/rev3.h (renamed from keyboards/ymd75/rev3/rev3.h)0
-rw-r--r--keyboards/ymdk/ymd75/rev3/rules.mk (renamed from keyboards/ymd75/rev3/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd75/rules.mk1
-rw-r--r--keyboards/ymdk/ymd75/ymd75.c (renamed from keyboards/ymd75/ymd75.c)0
-rw-r--r--keyboards/ymdk/ymd75/ymd75.h11
-rw-r--r--keyboards/ymdk/ymd96/config.h (renamed from keyboards/ymd96/config.h)0
-rw-r--r--keyboards/ymdk/ymd96/info.json (renamed from keyboards/ymd96/info.json)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/AnthonyWharton/README.md (renamed from keyboards/ymd96/keymaps/AnthonyWharton/README.md)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h (renamed from keyboards/ymd96/keymaps/AnthonyWharton/config.h)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/AnthonyWharton/keymap.c (renamed from keyboards/ymd96/keymaps/AnthonyWharton/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/default/keymap.c (renamed from keyboards/ymd96/keymaps/default/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/epx/keymap.c (renamed from keyboards/ymd96/keymaps/epx/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/hgoel89/config.h (renamed from keyboards/ymd96/keymaps/hgoel89/config.h)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/hgoel89/keymap.c (renamed from keyboards/ymd96/keymaps/hgoel89/keymap.c)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/hgoel89/readme.md (renamed from keyboards/ymd96/keymaps/hgoel89/readme.md)0
-rw-r--r--keyboards/ymdk/ymd96/keymaps/hgoel89/rules.mk (renamed from keyboards/ymd96/keymaps/hgoel89/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd96/readme.md19
-rw-r--r--keyboards/ymdk/ymd96/rules.mk (renamed from keyboards/ymd96/rules.mk)0
-rw-r--r--keyboards/ymdk/ymd96/ymd96.c (renamed from keyboards/ymd96/ymd96.c)0
-rw-r--r--keyboards/ymdk/ymd96/ymd96.h (renamed from keyboards/ymd96/ymd96.h)0
-rw-r--r--keyboards/ymdk_np21/readme.md21
-rw-r--r--keyboards/ymdk_np21/ymdk_np21.c19
-rw-r--r--keyboards/yoichiro/lunakey_mini/keymaps/via/rules.mk2
-rw-r--r--keyboards/yosino58/rev1/matrix.c6
-rw-r--r--keyboards/yurei/readme.md13
-rw-r--r--keyboards/yynmt/dozen0/config.h (renamed from keyboards/dozen0/config.h)0
-rw-r--r--keyboards/yynmt/dozen0/dozen0.c (renamed from keyboards/dozen0/dozen0.c)0
-rw-r--r--keyboards/yynmt/dozen0/dozen0.h (renamed from keyboards/dozen0/dozen0.h)0
-rw-r--r--keyboards/yynmt/dozen0/info.json (renamed from keyboards/dozen0/info.json)0
-rw-r--r--keyboards/yynmt/dozen0/keymaps/default/keymap.c (renamed from keyboards/dozen0/keymaps/default/keymap.c)0
-rw-r--r--keyboards/yynmt/dozen0/keymaps/default/readme.md (renamed from keyboards/dozen0/keymaps/default/readme.md)0
-rw-r--r--keyboards/yynmt/dozen0/keymaps/f12/keymap.c (renamed from keyboards/dozen0/keymaps/f12/keymap.c)0
-rw-r--r--keyboards/yynmt/dozen0/keymaps/via/keymap.c (renamed from keyboards/dozen0/keymaps/via/keymap.c)0
-rw-r--r--keyboards/yynmt/dozen0/keymaps/via/rules.mk1
-rw-r--r--keyboards/yynmt/dozen0/readme.md15
-rw-r--r--keyboards/yynmt/dozen0/rules.mk (renamed from keyboards/dozen0/rules.mk)0
-rw-r--r--keyboards/yynmt/kagamidget/config.h (renamed from keyboards/kagamidget/config.h)0
-rw-r--r--keyboards/yynmt/kagamidget/info.json (renamed from keyboards/kagamidget/info.json)0
-rw-r--r--keyboards/yynmt/kagamidget/kagamidget.c (renamed from keyboards/kagamidget/kagamidget.c)0
-rw-r--r--keyboards/yynmt/kagamidget/kagamidget.h (renamed from keyboards/kagamidget/kagamidget.h)0
-rw-r--r--keyboards/yynmt/kagamidget/keymaps/default/keymap.c (renamed from keyboards/kagamidget/keymaps/default/keymap.c)0
-rw-r--r--keyboards/yynmt/kagamidget/keymaps/default/readme.md (renamed from keyboards/kagamidget/keymaps/default/readme.md)0
-rw-r--r--keyboards/yynmt/kagamidget/readme.md14
-rw-r--r--keyboards/yynmt/kagamidget/rules.mk (renamed from keyboards/kagamidget/rules.mk)0
-rw-r--r--keyboards/zinc/readme.md17
-rw-r--r--keyboards/zinc/rules.mk25
-rw-r--r--keyboards/zinc/zinc.h10
-rwxr-xr-xlib/python/qmk/cli/generate/config_h.py6
-rwxr-xr-xlib/python/qmk/cli/generate/develop_pr_list.py14
-rw-r--r--lib/python/qmk/cli/generate/version_h.py3
-rwxr-xr-xlib/python/qmk/cli/multibuild.py3
-rw-r--r--lib/python/qmk/cli/new/keyboard.py293
-rw-r--r--lib/python/qmk/commands.py2
-rw-r--r--lib/python/qmk/constants.py2
-rw-r--r--lib/python/qmk/info.py28
-rw-r--r--lib/python/qmk/path.py2
-rw-r--r--lib/python/qmk/tests/test_cli_commands.py2
-rw-r--r--paths.mk4
-rw-r--r--platforms/arm_atsam/bootloader.c57
-rw-r--r--platforms/arm_atsam/bootloaders/md_boot.c65
-rw-r--r--platforms/arm_atsam/eeprom.c184
-rw-r--r--platforms/arm_atsam/eeprom_samd.c182
-rw-r--r--platforms/arm_atsam/eeprom_samd.h8
-rw-r--r--platforms/arm_atsam/gpio.h12
-rw-r--r--platforms/arm_atsam/suspend.c45
-rw-r--r--platforms/arm_atsam/timer.c32
-rw-r--r--platforms/avr/bootloader.c293
-rw-r--r--platforms/avr/bootloaders/bootloadhid.c33
-rw-r--r--platforms/avr/bootloaders/caterina.c39
-rw-r--r--platforms/avr/bootloaders/custom.c19
-rw-r--r--platforms/avr/bootloaders/dfu.c52
-rw-r--r--platforms/avr/bootloaders/halfkay.c128
-rw-r--r--platforms/avr/bootloaders/usbasploader.c56
-rw-r--r--platforms/avr/drivers/analog.c8
-rw-r--r--platforms/avr/drivers/analog.h18
-rw-r--r--platforms/avr/drivers/audio_pwm_hardware.c8
-rw-r--r--platforms/avr/drivers/glcdfont.c18
-rw-r--r--platforms/avr/drivers/hd44780.c22
-rw-r--r--platforms/avr/drivers/i2c_master.c13
-rw-r--r--platforms/avr/drivers/i2c_slave.c12
-rw-r--r--platforms/avr/drivers/i2c_slave.h6
-rw-r--r--platforms/avr/drivers/ps2/ps2_io.c8
-rw-r--r--platforms/avr/drivers/ps2/ps2_usart.c8
-rw-r--r--platforms/avr/drivers/serial.c162
-rw-r--r--platforms/avr/drivers/spi_master.c2
-rw-r--r--platforms/avr/drivers/ssd1306.c22
-rw-r--r--platforms/avr/drivers/uart.c4
-rw-r--r--platforms/avr/drivers/ws2812.c14
-rw-r--r--platforms/avr/drivers/ws2812_i2c.c4
-rw-r--r--platforms/avr/gpio.h17
-rw-r--r--platforms/avr/pin_defs.h2
-rw-r--r--platforms/avr/platform.mk2
-rw-r--r--platforms/avr/printf.c4
-rw-r--r--platforms/avr/sleep_led.c2
-rw-r--r--platforms/avr/suspend.c55
-rw-r--r--platforms/avr/timer.c24
-rw-r--r--platforms/chibios/boards/BLACKPILL_STM32_F401/configs/bootloader_defs.h5
-rw-r--r--platforms/chibios/boards/BLACKPILL_STM32_F411/configs/bootloader_defs.h5
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F042X6/configs/bootloader_defs.h5
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F072XB/configs/bootloader_defs.h5
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F303XC/configs/bootloader_defs.h5
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F405XG/configs/config.h2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F407XE/configs/config.h2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_G431XB/configs/config.h23
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_L412XB/configs/config.h1
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_L432XC/board/board.mk9
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_L432XC/configs/config.h10
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h267
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_L433XC/configs/config.h1
-rw-r--r--platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/bootloader_defs.h12
-rw-r--r--platforms/chibios/boards/QMK_PROTON_C/configs/bootloader_defs.h7
-rw-r--r--platforms/chibios/bootloader.c145
-rw-r--r--platforms/chibios/bootloaders/custom.c21
-rw-r--r--platforms/chibios/bootloaders/gd32v_dfu.c40
-rw-r--r--platforms/chibios/bootloaders/halfkay.c25
-rw-r--r--platforms/chibios/bootloaders/kiibohd.c32
-rw-r--r--platforms/chibios/bootloaders/stm32_dfu.c94
-rw-r--r--platforms/chibios/bootloaders/stm32duino.c23
-rw-r--r--platforms/chibios/bootloaders/tinyuf2.c34
-rw-r--r--platforms/chibios/chibios_config.h4
-rw-r--r--platforms/chibios/drivers/analog.c6
-rw-r--r--platforms/chibios/drivers/analog.h4
-rw-r--r--platforms/chibios/drivers/audio_dac_additive.c26
-rw-r--r--platforms/chibios/drivers/audio_dac_basic.c16
-rw-r--r--platforms/chibios/drivers/audio_pwm_hardware.c18
-rw-r--r--platforms/chibios/drivers/audio_pwm_software.c18
-rw-r--r--platforms/chibios/drivers/eeprom/eeprom_stm32_L0_L1.h2
-rw-r--r--platforms/chibios/drivers/i2c_master.c63
-rw-r--r--platforms/chibios/drivers/i2c_master.h61
-rw-r--r--platforms/chibios/drivers/serial.c55
-rw-r--r--platforms/chibios/drivers/serial_usart.c34
-rw-r--r--platforms/chibios/drivers/serial_usart.h6
-rw-r--r--platforms/chibios/drivers/spi_master.c2
-rw-r--r--platforms/chibios/drivers/uart.c16
-rw-r--r--platforms/chibios/drivers/usbpd_stm32g4.c4
-rw-r--r--platforms/chibios/drivers/ws2812.c10
-rw-r--r--platforms/chibios/drivers/ws2812_pwm.c30
-rw-r--r--platforms/chibios/drivers/ws2812_spi.c40
-rw-r--r--platforms/chibios/eeprom_stm32.c74
-rw-r--r--platforms/chibios/eeprom_stm32_defs.h88
-rw-r--r--platforms/chibios/eeprom_teensy.c108
-rwxr-xr-xplatforms/chibios/eeprom_teensy.h25
-rw-r--r--platforms/chibios/gd32v_compatibility.h4
-rw-r--r--platforms/chibios/gpio.h24
-rw-r--r--platforms/chibios/platform.mk2
-rw-r--r--platforms/chibios/sleep_led.c36
-rw-r--r--platforms/chibios/suspend.c37
-rw-r--r--platforms/chibios/syscall-fallbacks.c8
-rw-r--r--platforms/chibios/timer.c110
-rw-r--r--platforms/common.mk3
-rw-r--r--platforms/eeprom.h49
-rw-r--r--platforms/suspend.c51
-rw-r--r--platforms/suspend.h1
-rw-r--r--platforms/test/bootloaders/none.c (renamed from platforms/test/bootloader.c)0
-rw-r--r--platforms/test/eeprom.c8
-rw-r--r--platforms/test/eeprom_stm32_tests.cpp57
-rw-r--r--platforms/test/eeprom_stm32_tests.h8
-rw-r--r--platforms/test/flash_stm32_mock.c12
-rw-r--r--platforms/test/rules.mk2
-rw-r--r--platforms/test/timer.c36
-rw-r--r--platforms/timer.h16
-rw-r--r--quantum/action.c90
-rw-r--r--quantum/action.h18
-rw-r--r--quantum/action_code.h32
-rw-r--r--quantum/action_layer.c88
-rw-r--r--quantum/action_macro.c93
-rw-r--r--quantum/action_macro.h123
-rw-r--r--quantum/action_tapping.c34
-rw-r--r--quantum/action_util.c174
-rw-r--r--quantum/action_util.h19
-rw-r--r--quantum/audio/audio.c81
-rw-r--r--quantum/audio/audio.h6
-rw-r--r--quantum/audio/song_list.h2
-rw-r--r--quantum/audio/voices.c48
-rw-r--r--quantum/audio/voices.h2
-rw-r--r--quantum/backlight/backlight.c54
-rw-r--r--quantum/backlight/backlight.h2
-rw-r--r--quantum/backlight/backlight_avr.c50
-rw-r--r--quantum/backlight/backlight_chibios.c16
-rw-r--r--quantum/backlight/backlight_driver_common.c8
-rw-r--r--quantum/backlight/backlight_software.c12
-rw-r--r--quantum/backlight/backlight_timer.c32
-rw-r--r--quantum/bitwise.c9
-rw-r--r--quantum/bootmagic/bootmagic_lite.c8
-rw-r--r--quantum/color.c4
-rw-r--r--quantum/color.h2
-rw-r--r--quantum/command.c2
-rw-r--r--quantum/debounce.h2
-rw-r--r--quantum/debounce/asym_eager_defer_pk.c1
-rw-r--r--quantum/debounce/none.c2
-rw-r--r--quantum/debounce/sym_defer_g.c4
-rw-r--r--quantum/debounce/sym_defer_pk.c1
-rw-r--r--quantum/debounce/sym_defer_pr.c74
-rw-r--r--quantum/debounce/sym_eager_pk.c3
-rw-r--r--quantum/debounce/sym_eager_pr.c1
-rw-r--r--quantum/debounce/tests/debounce_test_common.cpp4
-rw-r--r--quantum/debounce/tests/rules.mk5
-rw-r--r--quantum/debounce/tests/sym_defer_pr_tests.cpp238
-rw-r--r--quantum/debounce/tests/testlist.mk1
-rw-r--r--quantum/deferred_exec.c93
-rw-r--r--quantum/deferred_exec.h119
-rw-r--r--quantum/digitizer.c8
-rw-r--r--quantum/dip_switch.c16
-rw-r--r--quantum/dynamic_keymap.c45
-rw-r--r--quantum/eeconfig.c70
-rw-r--r--quantum/eeconfig.h52
-rw-r--r--quantum/encoder.c14
-rw-r--r--quantum/encoder/tests/mock.c4
-rw-r--r--quantum/encoder/tests/mock_split.c4
-rw-r--r--quantum/haptic.c4
-rw-r--r--quantum/keyboard.c227
-rw-r--r--quantum/keyboard.h38
-rw-r--r--quantum/keycode.h69
-rw-r--r--quantum/keymap.h9
-rw-r--r--quantum/keymap_common.c43
-rw-r--r--quantum/keymap_extras/keymap_nordic.h2
-rw-r--r--quantum/keymap_extras/keymap_steno.h2
-rw-r--r--quantum/led.c67
-rw-r--r--quantum/led.h12
-rw-r--r--quantum/led_matrix/animations/alpha_mods_anim.h4
-rw-r--r--quantum/led_matrix/animations/band_anim.h8
-rw-r--r--quantum/led_matrix/animations/band_pinwheel_anim.h12
-rw-r--r--quantum/led_matrix/animations/band_spiral_anim.h12
-rw-r--r--quantum/led_matrix/animations/breathing_anim.h4
-rw-r--r--quantum/led_matrix/animations/cycle_left_right_anim.h12
-rw-r--r--quantum/led_matrix/animations/cycle_out_in_anim.h12
-rw-r--r--quantum/led_matrix/animations/cycle_up_down_anim.h12
-rw-r--r--quantum/led_matrix/animations/dual_beacon_anim.h12
-rw-r--r--quantum/led_matrix/animations/runners/effect_runner_reactive.h2
-rw-r--r--quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h2
-rw-r--r--quantum/led_matrix/animations/solid_anim.h2
-rw-r--r--quantum/led_matrix/animations/solid_reactive_cross.h14
-rw-r--r--quantum/led_matrix/animations/solid_reactive_nexus.h14
-rw-r--r--quantum/led_matrix/animations/solid_reactive_simple_anim.h14
-rw-r--r--quantum/led_matrix/animations/solid_reactive_wide.h14
-rw-r--r--quantum/led_matrix/animations/solid_splash_anim.h14
-rw-r--r--quantum/led_matrix/animations/wave_left_right_anim.h12
-rw-r--r--quantum/led_matrix/animations/wave_up_down_anim.h12
-rw-r--r--quantum/led_matrix/led_matrix.c179
-rw-r--r--quantum/led_matrix/led_matrix.h6
-rw-r--r--quantum/led_matrix/led_matrix_drivers.c52
-rw-r--r--quantum/led_matrix/led_matrix_types.h6
-rw-r--r--quantum/logging/debug.c10
-rw-r--r--quantum/logging/print.c12
-rw-r--r--quantum/logging/print.h2
-rw-r--r--quantum/logging/sendchar.c4
-rw-r--r--quantum/main.c4
-rw-r--r--quantum/matrix.c85
-rw-r--r--quantum/matrix.h3
-rw-r--r--quantum/matrix_common.c114
-rw-r--r--quantum/mousekey.c4
-rw-r--r--quantum/mousekey.h18
-rw-r--r--quantum/pointing_device.c409
-rw-r--r--quantum/pointing_device.h19
-rw-r--r--quantum/pointing_device_drivers.c85
-rw-r--r--quantum/process_keycode/process_audio.c13
-rw-r--r--quantum/process_keycode/process_audio.h1
-rw-r--r--quantum/process_keycode/process_auto_shift.c36
-rw-r--r--quantum/process_keycode/process_clicky.c32
-rw-r--r--quantum/process_keycode/process_combo.c88
-rw-r--r--quantum/process_keycode/process_dynamic_macro.c18
-rw-r--r--quantum/process_keycode/process_grave_esc.c4
-rw-r--r--quantum/process_keycode/process_haptic.c3
-rw-r--r--quantum/process_keycode/process_joystick.c4
-rw-r--r--quantum/process_keycode/process_key_lock.c5
-rw-r--r--quantum/process_keycode/process_key_lock.h1
-rw-r--r--quantum/process_keycode/process_key_override.c24
-rw-r--r--quantum/process_keycode/process_leader.c4
-rw-r--r--quantum/process_keycode/process_magic.c12
-rw-r--r--quantum/process_keycode/process_midi.c26
-rw-r--r--quantum/process_keycode/process_midi.h4
-rw-r--r--quantum/process_keycode/process_music.c26
-rw-r--r--quantum/process_keycode/process_music.h8
-rw-r--r--quantum/process_keycode/process_printer.c12
-rw-r--r--quantum/process_keycode/process_printer.h2
-rw-r--r--quantum/process_keycode/process_printer_bb.c23
-rw-r--r--quantum/process_keycode/process_rgb.c6
-rw-r--r--quantum/process_keycode/process_steno.c24
-rw-r--r--quantum/process_keycode/process_tap_dance.c6
-rw-r--r--quantum/process_keycode/process_terminal.c34
-rw-r--r--quantum/process_keycode/process_ucis.c2
-rw-r--r--quantum/process_keycode/process_unicode_common.c24
-rw-r--r--quantum/process_keycode/process_unicode_common.h12
-rw-r--r--quantum/programmable_button.c28
-rw-r--r--quantum/quantum.c182
-rw-r--r--quantum/quantum.h9
-rw-r--r--quantum/quantum_keycodes.h737
-rw-r--r--quantum/quantum_keycodes_legacy.h13
-rw-r--r--quantum/rgb_matrix/animations/alpha_mods_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/breathing_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/colorband_pinwheel_sat_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/colorband_pinwheel_val_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/colorband_sat_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/colorband_spiral_sat_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/colorband_spiral_val_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/colorband_val_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_all_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_left_right_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_out_in_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_out_in_dual_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_pinwheel_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_spiral_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/cycle_up_down_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/digital_rain_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/dual_beacon_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/gradient_left_right_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/gradient_up_down_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/hue_breathing_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/hue_pendulum_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/hue_wave_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/jellybean_raindrops_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/pixel_flow_anim.h51
-rw-r--r--quantum/rgb_matrix/animations/pixel_fractal_anim.h16
-rw-r--r--quantum/rgb_matrix/animations/pixel_rain_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/rainbow_beacon_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/rainbow_moving_chevron_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/rainbow_pinwheels_anim.h8
-rw-r--r--quantum/rgb_matrix/animations/raindrops_anim.h4
-rw-r--r--quantum/rgb_matrix/animations/rgb_matrix_effects.inc1
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_reactive.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h2
-rw-r--r--quantum/rgb_matrix/animations/solid_color_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/solid_reactive_anim.h10
-rw-r--r--quantum/rgb_matrix/animations/solid_reactive_cross.h14
-rw-r--r--quantum/rgb_matrix/animations/solid_reactive_nexus.h14
-rw-r--r--quantum/rgb_matrix/animations/solid_reactive_simple_anim.h10
-rw-r--r--quantum/rgb_matrix/animations/solid_reactive_wide.h14
-rw-r--r--quantum/rgb_matrix/animations/solid_splash_anim.h14
-rw-r--r--quantum/rgb_matrix/animations/splash_anim.h14
-rw-r--r--quantum/rgb_matrix/animations/typing_heatmap_anim.h4
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c257
-rw-r--r--quantum/rgb_matrix/rgb_matrix.h5
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.c63
-rw-r--r--quantum/rgb_matrix/rgb_matrix_types.h6
-rw-r--r--quantum/rgblight/rgblight.c226
-rw-r--r--quantum/rgblight/rgblight.h10
-rw-r--r--quantum/ring_buffer.h8
-rw-r--r--quantum/send_string.c22
-rw-r--r--quantum/sequencer/sequencer.c62
-rw-r--r--quantum/sequencer/sequencer.h8
-rw-r--r--quantum/sequencer/tests/midi_mock.c12
-rw-r--r--quantum/sequencer/tests/sequencer_tests.cpp4
-rw-r--r--quantum/split_common/post_config.h2
-rw-r--r--quantum/split_common/split_util.c20
-rw-r--r--quantum/split_common/split_util.h1
-rw-r--r--quantum/split_common/transaction_id_define.h40
-rw-r--r--quantum/split_common/transactions.c176
-rw-r--r--quantum/split_common/transactions.h1
-rw-r--r--quantum/split_common/transport.c32
-rw-r--r--quantum/split_common/transport.h69
-rw-r--r--quantum/sync_timer.c4
-rw-r--r--quantum/velocikey.c8
-rw-r--r--quantum/via.c22
-rw-r--r--quantum/via.h7
-rw-r--r--quantum/via_ensure_keycode.h6
-rw-r--r--quantum/wpm.c95
-rw-r--r--quantum/wpm.h2
-rw-r--r--readme.md4
-rw-r--r--testlist.mk19
-rw-r--r--tests/auto_shift/test_auto_shift.cpp3
-rw-r--r--tests/basic/test_action_layer.cpp33
-rw-r--r--tests/basic/test_keypress.cpp55
-rw-r--r--tests/basic/test_macro.cpp88
-rw-r--r--tests/basic/test_one_shot_keys.cpp8
-rw-r--r--tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp3
-rw-r--r--tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp3
-rw-r--r--tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp3
-rw-r--r--tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp2
-rw-r--r--tests/test_common/keyboard_report_util.cpp14
-rw-r--r--tests/test_common/matrix.c16
-rw-r--r--tests/test_common/test_driver.cpp20
-rw-r--r--tests/test_common/test_fixture.cpp7
-rw-r--r--tests/test_common/test_logger.cpp8
-rw-r--r--tmk_core/protocol.mk5
-rw-r--r--tmk_core/protocol/arm_atsam/adc.c26
-rw-r--r--tmk_core/protocol/arm_atsam/adc.h2
-rw-r--r--tmk_core/protocol/arm_atsam/arm_atsam_protocol.h5
-rw-r--r--tmk_core/protocol/arm_atsam/clks.c42
-rw-r--r--tmk_core/protocol/arm_atsam/clks.h24
-rw-r--r--tmk_core/protocol/arm_atsam/d51_util.c34
-rw-r--r--tmk_core/protocol/arm_atsam/d51_util.h4
-rw-r--r--tmk_core/protocol/arm_atsam/i2c_master.c132
-rw-r--r--tmk_core/protocol/arm_atsam/i2c_master.h4
-rw-r--r--tmk_core/protocol/arm_atsam/issi3733_driver.h200
-rw-r--r--tmk_core/protocol/arm_atsam/main_arm_atsam.c113
-rw-r--r--tmk_core/protocol/arm_atsam/main_arm_atsam.h2
-rw-r--r--tmk_core/protocol/arm_atsam/md_bootloader.h24
-rw-r--r--tmk_core/protocol/arm_atsam/md_rgb_matrix.c82
-rw-r--r--tmk_core/protocol/arm_atsam/md_rgb_matrix.h142
-rw-r--r--tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c4
-rw-r--r--tmk_core/protocol/arm_atsam/shift_register.c12
-rw-r--r--tmk_core/protocol/arm_atsam/spi_master.c22
-rw-r--r--tmk_core/protocol/arm_atsam/startup.c6
-rw-r--r--tmk_core/protocol/arm_atsam/usb/compiler.h124
-rw-r--r--tmk_core/protocol/arm_atsam/usb/conf_usb.h4
-rw-r--r--tmk_core/protocol/arm_atsam/usb/main_usb.c48
-rw-r--r--tmk_core/protocol/arm_atsam/usb/status_codes.h28
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udc.c69
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udc.h18
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udc_desc.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udd.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_cdc.c158
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_cdc.h6
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_cdc_conf.h8
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_device_conf.h20
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid.c2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c146
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h12
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_conf.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c6
-rw-r--r--tmk_core/protocol/arm_atsam/usb/ui.c2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/ui.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb.c28
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb.h32
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_atmel.h4
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_device_udd.c38
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_hub.c76
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_hub.h2
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_main.h12
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_protocol.h76
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_protocol_cdc.h80
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h102
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_util.c22
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_util.h2
-rw-r--r--tmk_core/protocol/chibios/chibios.c11
-rw-r--r--tmk_core/protocol/chibios/usb_driver.c32
-rw-r--r--tmk_core/protocol/chibios/usb_main.c55
-rw-r--r--tmk_core/protocol/chibios/usb_util.c8
-rw-r--r--tmk_core/protocol/host.c28
-rw-r--r--tmk_core/protocol/lufa/lufa.c156
-rw-r--r--tmk_core/protocol/lufa/usb_util.c8
-rw-r--r--tmk_core/protocol/midi/bytequeue/bytequeue.c4
-rw-r--r--tmk_core/protocol/midi/bytequeue/interrupt_setting.c8
-rw-r--r--tmk_core/protocol/midi/midi.c130
-rw-r--r--tmk_core/protocol/midi/midi.h6
-rw-r--r--tmk_core/protocol/midi/midi_device.c11
-rw-r--r--tmk_core/protocol/midi/qmk_midi.c2
-rw-r--r--tmk_core/protocol/midi/sysex_tools.c2
-rw-r--r--tmk_core/protocol/usb_descriptor.c2
-rw-r--r--tmk_core/protocol/usb_descriptor.h2
-rw-r--r--tmk_core/protocol/usb_device_state.c4
-rw-r--r--tmk_core/protocol/usb_device_state.h8
-rw-r--r--tmk_core/protocol/usb_util.c4
-rw-r--r--tmk_core/protocol/vusb/protocol.c4
-rw-r--r--tmk_core/protocol/vusb/usb_util.c4
-rw-r--r--tmk_core/protocol/vusb/vusb.c359
-rw-r--r--tmk_core/rules.mk524
-rw-r--r--users/cedrikl/cedrikl.c36
-rw-r--r--users/cedrikl/cedrikl.h21
-rw-r--r--users/cedrikl/config.h25
-rw-r--r--users/cedrikl/rules.mk4
-rw-r--r--users/drashna/oled/oled_stuff.c2
-rw-r--r--users/drashna/pointing/pointing.c4
-rw-r--r--users/vitoni/readme.adoc16
-rw-r--r--users/vitoni/rgb_matrix_effects.c236
-rw-r--r--users/vitoni/rgb_matrix_effects.h174
-rw-r--r--users/vitoni/rules.mk4
-rw-r--r--users/vitoni/utils.c129
-rw-r--r--users/vitoni/utils.h80
-rw-r--r--users/vitoni/vitoni.c131
-rw-r--r--users/vitoni/vitoni.h30
-rw-r--r--users/wanleg/rules.mk2
-rwxr-xr-xutil/docker_cmd.sh59
-rwxr-xr-xutil/new_keyboard.sh181
-rwxr-xr-xutil/new_keymap.sh40
-rwxr-xr-xutil/size_regression.sh22
-rwxr-xr-xutil/update_chibios_mirror.sh8
4158 files changed, 31184 insertions, 26729 deletions
diff --git a/.clang-format b/.clang-format
index b4f7967831..ce145e299c 100644
--- a/.clang-format
+++ b/.clang-format
@@ -5,6 +5,9 @@ AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AlignOperands: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'false'
+AllowShortCaseLabelsOnASingleLine: 'false'
+AllowShortFunctionsOnASingleLine: Empty
+AllowShortLoopsOnASingleLine: 'false'
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: 'false'
@@ -20,6 +23,7 @@ SortIncludes: 'false'
SpaceBeforeAssignmentOperators: 'true'
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: 'false'
+SpacesBeforeTrailingComments: 1
TabWidth: '4'
UseTab: Never
diff --git a/.gitignore b/.gitignore
index 768f40b191..e3a02fe8f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
*.swp
*~
.DS_Store
+._*
# Build artifacts
.clang_complete
diff --git a/Makefile b/Makefile
index 88f430619e..4c2e6a04dc 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,10 @@ endif
# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
override SILENT := false
+ifdef SKIP_VERSION
+ SKIP_GIT := yes
+endif
+
ifndef SUB_IS_SILENT
ifndef SKIP_GIT
QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
@@ -50,47 +54,11 @@ ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
-BUILD_DIR := $(ROOT_DIR)/.build
-TEST_DIR := $(BUILD_DIR)/test
-ERROR_FILE := $(BUILD_DIR)/error_occurred
-
-# Helper function to process the newt element of a space separated path
-# It works a bit like the traditional functional head tail
-# so the CURRENT_PATH_ELEMENT will become the new head
-# and the PATH_ELEMENTS are the rest that are still unprocessed
-define NEXT_PATH_ELEMENT
- $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
- $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
-endef
-
-# We change the / to spaces so that we more easily can work with the elements
-# separately
-PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
-# Initialize the path elements list for further processing
-$(eval $(call NEXT_PATH_ELEMENT))
-
-
-# Phony targets to enable a few simple make commands outside the main processing below.
-.PHONY: list-keyboards
-list-keyboards:
- util/list_keyboards.sh | sort -u | tr '\n' ' '
-
-.PHONY: generate-keyboards-file
-generate-keyboards-file:
- util/list_keyboards.sh | sort -u
-
-.PHONY: clean
-clean:
- echo -n 'Deleting .build/ ... '
- rm -rf $(BUILD_DIR)
- echo 'done.'
-.PHONY: distclean
-distclean: clean
- echo -n 'Deleting *.bin, *.hex, and *.uf2 ... '
- rm -f *.bin *.hex *.uf2
- echo 'done.'
+include paths.mk
+TEST_OUTPUT_DIR := $(BUILD_DIR)/test
+ERROR_FILE := $(BUILD_DIR)/error_occurred
.DEFAULT_GOAL := all:all
@@ -119,53 +87,20 @@ endef
# a function that returns the value
COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
-
-# Recursively try to find a match for the start of the rule to be checked
-# $1 The list to be checked
-# If a match is found, then RULE_FOUND is set to true
-# and MATCHED_ITEM to the item that was matched
-define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
- ifneq ($1,)
- ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
- MATCHED_ITEM := $$(firstword $1)
- else
- $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
- endif
- endif
-endef
-
-# A recursive helper function for finding the longest match
-# $1 The list to be checked
-# It works by always removing the currently matched item from the list
-define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
- # Stop the recursion when the list is empty
- ifneq ($1,)
- RULE_BEFORE := $$(RULE)
- $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
- # If a match is found in the current list, otherwise just return what we had before
- ifeq ($$(RULE_FOUND),true)
- # Save the best match so far and call itself recursively
- BEST_MATCH := $$(MATCHED_ITEM)
- BEST_MATCH_RULE := $$(RULE)
- RULE_FOUND := false
- RULE := $$(RULE_BEFORE)
- $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
- endif
- endif
-endef
-
-
-# Recursively try to find the longest match for the start of the rule to be checked
+# Try to find a match for the start of the rule to be checked
# $1 The list to be checked
# If a match is found, then RULE_FOUND is set to true
# and MATCHED_ITEM to the item that was matched
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
- BEST_MATCH :=
- $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
- ifneq ($$(BEST_MATCH),)
+ # Split on ":", padding with empty strings to avoid indexing issues
+ TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
+ TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
+
+ FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
+ ifneq ($$(FOUNDx),)
+ RULE := $$(TOKENr)
RULE_FOUND := true
- RULE := $$(BEST_MATCH_RULE)
- MATCHED_ITEM := $$(BEST_MATCH)
+ MATCHED_ITEM := $$(TOKEN1)
else
RULE_FOUND := false
MATCHED_ITEM :=
@@ -340,7 +275,7 @@ define PARSE_KEYMAP
# Specify the variables that we are passing forward to submake
MAKE_VARS := KEYBOARD=$$(CURRENT_KB) KEYMAP=$$(CURRENT_KM) REQUIRE_PLATFORM_KEY=$$(REQUIRE_PLATFORM_KEY) QMK_BIN=$$(QMK_BIN)
# And the first part of the make command
- MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
+ MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f $(BUILDDEFS_PATH)/build_keyboard.mk $$(MAKE_TARGET)
# The message to display
MAKE_MSG := $$(MSG_MAKE_KB)
# We run the command differently, depending on if we want more output or not
@@ -382,12 +317,12 @@ define BUILD_TEST
TEST_NAME := $$(notdir $$(TEST_PATH))
MAKE_TARGET := $2
COMMAND := $1
- MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
+ MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f $(BUILDDEFS_PATH)/build_test.mk $$(MAKE_TARGET)
MAKE_VARS := TEST=$$(TEST_NAME) TEST_PATH=$$(TEST_PATH) FULL_TESTS="$$(FULL_TESTS)"
MAKE_MSG := $$(MSG_MAKE_TEST)
$$(eval $$(call BUILD))
ifneq ($$(MAKE_TARGET),clean)
- TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
+ TEST_EXECUTABLE := $$(TEST_OUTPUT_DIR)/$$(TEST_NAME).elf
TESTS += $$(TEST_NAME)
TEST_MSG := $$(MSG_TEST)
$$(TEST_NAME)_COMMAND := \
@@ -404,6 +339,7 @@ define PARSE_TEST
TESTS :=
TEST_NAME := $$(firstword $$(subst :, ,$$(RULE)))
TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME):,,$$(RULE)))
+ include $(BUILDDEFS_PATH)/testlist.mk
ifeq ($$(TEST_NAME),all)
MATCHED_TESTS := $$(TEST_LIST)
else
@@ -426,7 +362,6 @@ define SET_SILENT_MODE
endif
endef
-include paths.mk
include $(BUILDDEFS_PATH)/message.mk
ifeq ($(strip $(BREAK_ON_ERRORS)), yes)
@@ -496,14 +431,22 @@ git-submodule:
git submodule sync --recursive
git submodule update --init --recursive --progress
-# Generate the version.h file
-ifdef SKIP_GIT
-VERSION_H_FLAGS := --skip-git
-endif
-ifdef SKIP_VERSION
-VERSION_H_FLAGS := --skip-all
-SKIP_GIT := yes
-endif
-$(shell $(QMK_BIN) generate-version-h $(VERSION_H_FLAGS) -q -o quantum/version.h)
+.PHONY: list-keyboards
+list-keyboards:
+ util/list_keyboards.sh | sort -u | tr '\n' ' '
+
+.PHONY: generate-keyboards-file
+generate-keyboards-file:
+ util/list_keyboards.sh | sort -u
+
+.PHONY: clean
+clean:
+ echo -n 'Deleting .build/ ... '
+ rm -rf $(BUILD_DIR)
+ echo 'done.'
-include $(ROOT_DIR)/testlist.mk
+.PHONY: distclean
+distclean: clean
+ echo -n 'Deleting *.bin, *.hex, and *.uf2 ... '
+ rm -f *.bin *.hex *.uf2
+ echo 'done.'
diff --git a/build_full_test.mk b/build_full_test.mk
deleted file mode 100644
index 4cd1ac61b5..0000000000
--- a/build_full_test.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2017 Fred Sundvik
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-$(TEST)_INC := \
- tests\test_common\common_config.h
-
-$(TEST)_SRC := \
- $(TMK_COMMON_SRC) \
- $(QUANTUM_SRC) \
- $(SRC) \
- tests/test_common/keymap.c \
- tests/test_common/matrix.c \
- tests/test_common/test_driver.cpp \
- tests/test_common/keyboard_report_util.cpp \
- tests/test_common/test_fixture.cpp \
- tests/test_common/test_keymap_key.cpp \
- tests/test_common/test_logger.cpp \
- $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
-
-$(TEST)_DEFS := $(TMK_COMMON_DEFS) $(OPT_DEFS)
-
-$(TEST)_CONFIG := $(TEST_PATH)/config.h
-
-VPATH += $(TOP_DIR)/tests/test_common \ No newline at end of file
diff --git a/build_keyboard.mk b/build_keyboard.mk
deleted file mode 100644
index 6473e3e473..0000000000
--- a/build_keyboard.mk
+++ /dev/null
@@ -1,456 +0,0 @@
-# Determine what keyboard we are building and setup the build environment.
-#
-# We support folders up to 5 levels deep below `keyboards/`. This file is
-# responsible for determining which folder is being used and doing the
-# corresponding environment setup.
-
-ifndef VERBOSE
-.SILENT:
-endif
-
-.DEFAULT_GOAL := all
-
-include paths.mk
-include $(BUILDDEFS_PATH)/message.mk
-
-# Set the qmk cli to use
-QMK_BIN ?= qmk
-
-# Set the filename for the final firmware binary
-KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
-TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
-KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
-
-# Force expansion
-TARGET := $(TARGET)
-
-ifneq ($(FORCE_LAYOUT),)
- TARGET := $(TARGET)_$(FORCE_LAYOUT)
-endif
-
-# Object files and generated keymap directory
-# To put object files in current directory, use a dot (.), do NOT make
-# this an empty or blank macro!
-KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
-
-ifdef SKIP_VERSION
- OPT_DEFS += -DSKIP_VERSION
-endif
-
-# Determine which subfolders exist.
-KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
-KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
-KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
-KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
-KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
-KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
-KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
-KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
-KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
-KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
-KEYBOARD_PATHS :=
-KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
-KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
-KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
-KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
-KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
-
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
- KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
- KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
- KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
- KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
- KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
-endif
-
-
-# Pull in rules.mk files from all our subfolders
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
- include $(KEYBOARD_PATH_5)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
- include $(KEYBOARD_PATH_4)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
- include $(KEYBOARD_PATH_3)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
- include $(KEYBOARD_PATH_2)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
- include $(KEYBOARD_PATH_1)/rules.mk
-endif
-
-MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
-
-# Pull in rules from info.json
-INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_rules.mk)
-include $(INFO_RULES_MK)
-
-# Check for keymap.json first, so we can regenerate keymap.c
-include build_json.mk
-
-# Pull in keymap level rules.mk
-ifeq ("$(wildcard $(KEYMAP_PATH))", "")
- # Look through the possible keymap folders until we find a matching keymap.c
- ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_5)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_4)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_3)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_2)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_1)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
- else ifneq ($(LAYOUTS),)
- # If we haven't found a keymap yet fall back to community layouts
- include build_layout.mk
- else
- $(error Could not find keymap)
- # this state should never be reached
- endif
-endif
-
-# Have we found a keymap.json?
-ifneq ("$(wildcard $(KEYMAP_JSON))", "")
- KEYMAP_C := $(KEYMAP_OUTPUT)/src/keymap.c
- KEYMAP_H := $(KEYMAP_OUTPUT)/src/config.h
-
- # Load the keymap-level rules.mk if exists
- -include $(KEYMAP_PATH)/rules.mk
-
- # Load any rules.mk content from keymap.json
- INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/src/rules.mk)
- include $(INFO_RULES_MK)
-
-# Add rules to generate the keymap files - indentation here is important
-$(KEYMAP_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
- $(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
-
-$(KEYMAP_OUTPUT)/src/config.h: $(KEYMAP_JSON)
- $(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_H)
-
-generated-files: $(KEYMAP_OUTPUT)/src/config.h $(KEYMAP_OUTPUT)/src/keymap.c
-
-endif
-
-ifeq ($(strip $(CTPC)), yes)
- CONVERT_TO_PROTON_C=yes
-endif
-
-ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
- include platforms/chibios/boards/QMK_PROTON_C/convert_to_proton_c.mk
-endif
-
-include $(BUILDDEFS_PATH)/mcu_selection.mk
-
-# Find all the C source files to be compiled in subfolders.
-KEYBOARD_SRC :=
-
-KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
-KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c
-KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c
-KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c
-KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c
-
-ifneq ("$(wildcard $(KEYBOARD_C_5))","")
- KEYBOARD_SRC += $(KEYBOARD_C_5)
-endif
-ifneq ("$(wildcard $(KEYBOARD_C_4))","")
- KEYBOARD_SRC += $(KEYBOARD_C_4)
-endif
-ifneq ("$(wildcard $(KEYBOARD_C_3))","")
- KEYBOARD_SRC += $(KEYBOARD_C_3)
-endif
-ifneq ("$(wildcard $(KEYBOARD_C_2))","")
- KEYBOARD_SRC += $(KEYBOARD_C_2)
-endif
-ifneq ("$(wildcard $(KEYBOARD_C_1))","")
- KEYBOARD_SRC += $(KEYBOARD_C_1)
-endif
-
-# Generate KEYBOARD_name_subname for all levels of the keyboard folder
-KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1)))
-KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2)))
-KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3)))
-KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4)))
-KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5)))
-
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
- OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
- OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
- OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
- OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2)
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
- OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1)
-endif
-
-# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
-# that the same keymap may be used on multiple keyboards.
-#
-# We grab the most top-level include file that we can. That file should
-# use #ifdef statements to include all the neccesary subfolder includes,
-# as described here:
-#
-# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
-#
-QMK_KEYBOARD_H = $(KEYBOARD_OUTPUT)/src/default_keyboard.h
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
- QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","")
- QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","")
- QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","")
- QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
- QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
-endif
-
-# Determine and set parameters based on the keyboard's processor family.
-# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
-# not used for LUFA
-ifdef MCU_FAMILY
- PLATFORM=CHIBIOS
- PLATFORM_KEY=chibios
- FIRMWARE_FORMAT?=bin
- OPT_DEFS += -DMCU_$(MCU_FAMILY)
-else ifdef ARM_ATSAM
- PLATFORM=ARM_ATSAM
- PLATFORM_KEY=arm_atsam
- FIRMWARE_FORMAT=bin
-else
- PLATFORM=AVR
- PLATFORM_KEY=avr
- FIRMWARE_FORMAT?=hex
-endif
-
-# Find all of the config.h files and add them to our CONFIG_H define.
-CONFIG_H :=
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
- CONFIG_H += $(KEYBOARD_PATH_5)/config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","")
- CONFIG_H += $(KEYBOARD_PATH_4)/config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","")
- CONFIG_H += $(KEYBOARD_PATH_3)/config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","")
- CONFIG_H += $(KEYBOARD_PATH_2)/config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
- CONFIG_H += $(KEYBOARD_PATH_1)/config.h
-endif
-
-POST_CONFIG_H :=
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
- POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","")
- POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","")
- POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","")
- POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
- POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
-endif
-
-# Pull in stuff from info.json
-INFO_JSON_FILES :=
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
- INFO_JSON_FILES += $(KEYBOARD_PATH_1)/info.json
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
- INFO_JSON_FILES += $(KEYBOARD_PATH_2)/info.json
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
- INFO_JSON_FILES += $(KEYBOARD_PATH_3)/info.json
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
- INFO_JSON_FILES += $(KEYBOARD_PATH_4)/info.json
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
- INFO_JSON_FILES += $(KEYBOARD_PATH_5)/info.json
-endif
-
-CONFIG_H += $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h
-
-$(KEYBOARD_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
- $(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h
-
-$(KEYBOARD_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
- $(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/default_keyboard.h
-
-$(KEYBOARD_OUTPUT)/src/layouts.h: $(INFO_JSON_FILES)
- $(QMK_BIN) generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h
-
-generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.h $(KEYBOARD_OUTPUT)/src/layouts.h
-
-.INTERMEDIATE : generated-files
-
-# Userspace setup and definitions
-ifeq ("$(USER_NAME)","")
- USER_NAME := $(KEYMAP)
-endif
-USER_PATH := users/$(USER_NAME)
-
-# Pull in user level rules.mk
--include $(USER_PATH)/rules.mk
-ifneq ("$(wildcard $(USER_PATH)/config.h)","")
- CONFIG_H += $(USER_PATH)/config.h
-endif
-ifneq ("$(wildcard $(USER_PATH)/post_config.h)","")
- POST_CONFIG_H += $(USER_PATH)/post_config.h
-endif
-
-# Disable features that a keyboard doesn't support
--include $(BUILDDEFS_PATH)/disable_features.mk
-
-# Pull in post_rules.mk files from all our subfolders
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_rules.mk)","")
- include $(KEYBOARD_PATH_1)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_rules.mk)","")
- include $(KEYBOARD_PATH_2)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_rules.mk)","")
- include $(KEYBOARD_PATH_3)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_rules.mk)","")
- include $(KEYBOARD_PATH_4)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_rules.mk)","")
- include $(KEYBOARD_PATH_5)/post_rules.mk
-endif
-
-ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
- CONFIG_H += $(KEYMAP_PATH)/config.h
-endif
-ifneq ("$(KEYMAP_H)","")
- CONFIG_H += $(KEYMAP_H)
-endif
-
-# project specific files
-SRC += \
- $(KEYBOARD_SRC) \
- $(KEYMAP_C) \
- $(QUANTUM_SRC) \
- $(QUANTUM_DIR)/main.c \
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(KEYMAP_PATH)
-VPATH += $(USER_PATH)
-VPATH += $(KEYBOARD_PATHS)
-VPATH += $(COMMON_VPATH)
-
-include common_features.mk
-include $(BUILDDEFS_PATH)/generic_features.mk
-include $(TMK_PATH)/protocol.mk
-include $(PLATFORM_PATH)/common.mk
-include $(BUILDDEFS_PATH)/bootloader.mk
-
-SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
-SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
-SRC += $(TMK_COMMON_SRC)
-OPT_DEFS += $(TMK_COMMON_DEFS)
-EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
-
-SKIP_COMPILE := no
-ifneq ($(REQUIRE_PLATFORM_KEY),)
- ifneq ($(REQUIRE_PLATFORM_KEY),$(PLATFORM_KEY))
- SKIP_COMPILE := yes
- endif
-endif
-
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
--include $(PLATFORM_PATH)/$(PLATFORM_KEY)/flash.mk
-
-ifneq ($(strip $(PROTOCOL)),)
- include $(TMK_PATH)/protocol/$(strip $(shell echo $(PROTOCOL) | tr '[:upper:]' '[:lower:]')).mk
-else
- include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
-endif
-
-# TODO: remove this bodge?
-PROJECT_DEFS := $(OPT_DEFS)
-PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
-PROJECT_CONFIG := $(CONFIG_H)
-
-CONFIG_H += $(POST_CONFIG_H)
-ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H)
-
-OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
-$(KEYMAP_OUTPUT)_SRC := $(SRC)
-$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) \
--DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" \
--DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\"
-$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
-$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
-$(KEYBOARD_OUTPUT)_SRC := $(PLATFORM_SRC)
-$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
-$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
-$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
-
-# Default target.
-ifeq ($(SKIP_COMPILE),no)
-all: build check-size
-else
-all:
- echo "skipped" >&2
-endif
-
-build: elf cpfirmware
-check-size: build
-check-md5: build
-objs-size: build
-
-include $(BUILDDEFS_PATH)/show_options.mk
-include $(TMK_PATH)/rules.mk
-
-# Ensure we have generated files available for each of the objects
-define GEN_FILES
-$1: generated-files
-endef
-$(foreach O,$(OBJ),$(eval $(call GEN_FILES,$(patsubst %.a,%.o,$(O)))))
diff --git a/build_layout.mk b/build_layout.mk
deleted file mode 100644
index b4b00793ea..0000000000
--- a/build_layout.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-LAYOUTS_PATH := layouts
-LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
-
-define SEARCH_LAYOUTS_REPO
- LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
- LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
- LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
- ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
- -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
- KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
- KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
- else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
- -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
- KEYMAP_C := $$(LAYOUT_KEYMAP_C)
- KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
- endif
-endef
-
-define SEARCH_LAYOUTS
- $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
-endef
-
-ifneq ($(FORCE_LAYOUT),)
- ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
- $(info Forcing layout: $(FORCE_LAYOUT))
- LAYOUTS := $(FORCE_LAYOUT)
- else
- $(error Forced layout does not exist)
- endif
-endif
-
-$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
diff --git a/build_test.mk b/build_test.mk
deleted file mode 100644
index 136a0455f0..0000000000
--- a/build_test.mk
+++ /dev/null
@@ -1,83 +0,0 @@
-ifndef VERBOSE
-.SILENT:
-endif
-
-.DEFAULT_GOAL := all
-
-include paths.mk
-include $(BUILDDEFS_PATH)/message.mk
-
-TARGET=test/$(TEST)
-
-GTEST_OUTPUT = $(BUILD_DIR)/gtest
-
-TEST_OBJ = $(BUILD_DIR)/test_obj
-
-OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
-
-GTEST_INC := \
- $(LIB_PATH)/googletest/googletest/include \
- $(LIB_PATH)/googletest/googlemock/include
-
-GTEST_INTERNAL_INC := \
- $(LIB_PATH)/googletest/googletest \
- $(LIB_PATH)/googletest/googlemock
-
-$(GTEST_OUTPUT)_SRC := \
- googletest/src/gtest-all.cc\
- googlemock/src/gmock-all.cc
-
-$(GTEST_OUTPUT)_DEFS :=
-$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
-
-LDFLAGS += -lstdc++ -lpthread -shared-libgcc
-CREATE_MAP := no
-
-VPATH += \
- $(LIB_PATH)/googletest \
- $(LIB_PATH)/googlemock \
- $(LIB_PATH)/printf
-
-all: elf
-
-VPATH += $(COMMON_VPATH)
-PLATFORM:=TEST
-PLATFORM_KEY:=test
-
-ifeq ($(strip $(DEBUG)), 1)
-CONSOLE_ENABLE = yes
-endif
-
-ifneq ($(filter $(FULL_TESTS),$(TEST)),)
-include tests/test_common/build.mk
-include $(TEST_PATH)/test.mk
-endif
-
-include common_features.mk
-include $(BUILDDEFS_PATH)/generic_features.mk
-include $(PLATFORM_PATH)/common.mk
-include $(TMK_PATH)/protocol.mk
-include $(QUANTUM_PATH)/debounce/tests/rules.mk
-include $(QUANTUM_PATH)/encoder/tests/rules.mk
-include $(QUANTUM_PATH)/sequencer/tests/rules.mk
-include $(PLATFORM_PATH)/test/rules.mk
-ifneq ($(filter $(FULL_TESTS),$(TEST)),)
-include build_full_test.mk
-endif
-
-$(TEST)_SRC += \
- tests/test_common/main.c \
- $(LIB_PATH)/printf/printf.c \
- $(QUANTUM_PATH)/logging/print.c
-
-$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
-$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
-$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
-$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
-
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
-include $(TMK_PATH)/rules.mk
-
-
-$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
-$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
diff --git a/builddefs/bootloader.mk b/builddefs/bootloader.mk
index ccb92392d9..226213297e 100644
--- a/builddefs/bootloader.mk
+++ b/builddefs/bootloader.mk
@@ -30,6 +30,7 @@
# bootloadhid HIDBootFlash compatible (ATmega32A)
# usbasploader USBaspLoader (ATmega328P)
# ARM:
+# halfkay PJRC Teensy
# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
# stm32duino STM32Duino (STM32F103x8)
# stm32-dfu STM32 USB DFU in ROM
@@ -37,12 +38,23 @@
# RISC-V:
# gd32v-dfu GD32V USB DFU in ROM
#
+# If you need to provide your own implementation, you can set inside `rules.mk`
+# `BOOTLOADER = custom` -- you'll need to provide your own implementations. See
+# the respective file under `platforms/<PLATFORM>/bootloaders/custom.c` to see
+# which functions may be overridden.
+#
# BOOTLOADER_SIZE can still be defined manually, but it's recommended
# you add any possible configuration to this list
+ifeq ($(strip $(BOOTLOADER)), custom)
+ OPT_DEFS += -DBOOTLOADER_CUSTOM
+ BOOTLOADER_TYPE = custom
+endif
ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_TYPE = dfu
+
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE = 4096
endif
@@ -53,6 +65,8 @@ endif
ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
OPT_DEFS += -DBOOTLOADER_LUFA_DFU
OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_TYPE = dfu
+
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE ?= 4096
endif
@@ -63,6 +77,8 @@ endif
ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
OPT_DEFS += -DBOOTLOADER_QMK_DFU
OPT_DEFS += -DBOOTLOADER_DFU
+ BOOTLOADER_TYPE = dfu
+
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE ?= 4096
endif
@@ -73,10 +89,14 @@ endif
ifeq ($(strip $(BOOTLOADER)), qmk-hid)
OPT_DEFS += -DBOOTLOADER_QMK_HID
OPT_DEFS += -DBOOTLOADER_HID
+ BOOTLOADER_TYPE = dfu
+
BOOTLOADER_SIZE ?= 4096
endif
ifeq ($(strip $(BOOTLOADER)), halfkay)
OPT_DEFS += -DBOOTLOADER_HALFKAY
+ BOOTLOADER_TYPE = halfkay
+
ifeq ($(strip $(MCU)), atmega32u4)
BOOTLOADER_SIZE = 512
endif
@@ -86,18 +106,26 @@ ifeq ($(strip $(BOOTLOADER)), halfkay)
endif
ifeq ($(strip $(BOOTLOADER)), caterina)
OPT_DEFS += -DBOOTLOADER_CATERINA
+ BOOTLOADER_TYPE = caterina
+
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID))
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID
+ BOOTLOADER_TYPE = bootloadhid
+
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp))
OPT_DEFS += -DBOOTLOADER_USBASP
+ BOOTLOADER_TYPE = usbasploader
+
BOOTLOADER_SIZE = 4096
endif
ifeq ($(strip $(BOOTLOADER)), lufa-ms)
OPT_DEFS += -DBOOTLOADER_MS
+ BOOTLOADER_TYPE = dfu
+
BOOTLOADER_SIZE ?= 8192
FIRMWARE_FORMAT = bin
cpfirmware: lufa_warning
@@ -115,6 +143,7 @@ endif
ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
OPT_DEFS += -DBOOTLOADER_STM32_DFU
+ BOOTLOADER_TYPE = stm32_dfu
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
@@ -122,6 +151,7 @@ ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
endif
ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
OPT_DEFS += -DBOOTLOADER_APM32_DFU
+ BOOTLOADER_TYPE = stm32_dfu
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave
@@ -129,6 +159,7 @@ ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
endif
ifeq ($(strip $(BOOTLOADER)), gd32v-dfu)
OPT_DEFS += -DBOOTLOADER_GD32V_DFU
+ BOOTLOADER_TYPE = gd32v_dfu
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 28E9:0189 -a 0 -s 0x08000000:leave
@@ -136,6 +167,8 @@ ifeq ($(strip $(BOOTLOADER)), gd32v-dfu)
endif
ifeq ($(strip $(BOOTLOADER)), kiibohd)
OPT_DEFS += -DBOOTLOADER_KIIBOHD
+ BOOTLOADER_TYPE = kiibohd
+
ifeq ($(strip $(MCU_ORIG)), MK20DX128)
MCU_LDSCRIPT = MK20DX128BLDR4
endif
@@ -151,8 +184,7 @@ ifeq ($(strip $(BOOTLOADER)), stm32duino)
OPT_DEFS += -DBOOTLOADER_STM32DUINO
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = STM32_F103_STM32DUINO
- # STM32F103 does NOT have an USB bootloader in ROM (only serial), so setting anything here does not make much sense
- STM32_BOOTLOADER_ADDRESS = 0x80000000
+ BOOTLOADER_TYPE = stm32duino
# Options to pass to dfu-util when flashing
DFU_ARGS = -d 1EAF:0003 -a 2 -R
@@ -160,4 +192,17 @@ ifeq ($(strip $(BOOTLOADER)), stm32duino)
endif
ifeq ($(strip $(BOOTLOADER)), tinyuf2)
OPT_DEFS += -DBOOTLOADER_TINYUF2
+ BOOTLOADER_TYPE = tinyuf2
+endif
+ifeq ($(strip $(BOOTLOADER)), halfkay)
+ OPT_DEFS += -DBOOTLOADER_HALFKAY
+ BOOTLOADER_TYPE = halfkay
+endif
+ifeq ($(strip $(BOOTLOADER)), md-boot)
+ OPT_DEFS += -DBOOTLOADER_MD_BOOT
+ BOOTLOADER_TYPE = md_boot
+endif
+
+ifeq ($(strip $(BOOTLOADER_TYPE)),)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.)
endif
diff --git a/builddefs/build_full_test.mk b/builddefs/build_full_test.mk
new file mode 100644
index 0000000000..4e4b4e4bfd
--- /dev/null
+++ b/builddefs/build_full_test.mk
@@ -0,0 +1,36 @@
+# Copyright 2017 Fred Sundvik
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+$(TEST)_INC := \
+ tests/test_common/common_config.h
+
+$(TEST)_SRC := \
+ $(TMK_COMMON_SRC) \
+ $(QUANTUM_SRC) \
+ $(SRC) \
+ tests/test_common/keymap.c \
+ tests/test_common/matrix.c \
+ tests/test_common/test_driver.cpp \
+ tests/test_common/keyboard_report_util.cpp \
+ tests/test_common/test_fixture.cpp \
+ tests/test_common/test_keymap_key.cpp \
+ tests/test_common/test_logger.cpp \
+ $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
+
+$(TEST)_DEFS := $(TMK_COMMON_DEFS) $(OPT_DEFS)
+
+$(TEST)_CONFIG := $(TEST_PATH)/config.h
+
+VPATH += $(TOP_DIR)/tests/test_common
diff --git a/build_json.mk b/builddefs/build_json.mk
index 0c034eb2ae..0c034eb2ae 100644
--- a/build_json.mk
+++ b/builddefs/build_json.mk
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk
new file mode 100644
index 0000000000..d5efcb4193
--- /dev/null
+++ b/builddefs/build_keyboard.mk
@@ -0,0 +1,469 @@
+# Determine what keyboard we are building and setup the build environment.
+#
+# We support folders up to 5 levels deep below `keyboards/`. This file is
+# responsible for determining which folder is being used and doing the
+# corresponding environment setup.
+
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include paths.mk
+include $(BUILDDEFS_PATH)/message.mk
+
+# Set the qmk cli to use
+QMK_BIN ?= qmk
+
+# Set the filename for the final firmware binary
+KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
+TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
+KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
+
+# Force expansion
+TARGET := $(TARGET)
+
+ifneq ($(FORCE_LAYOUT),)
+ TARGET := $(TARGET)_$(FORCE_LAYOUT)
+endif
+
+# Object files and generated keymap directory
+# To put object files in current directory, use a dot (.), do NOT make
+# this an empty or blank macro!
+KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
+
+ifdef SKIP_VERSION
+ OPT_DEFS += -DSKIP_VERSION
+endif
+
+# Generate the version.h file
+ifdef SKIP_VERSION
+VERSION_H_FLAGS := --skip-all
+endif
+ifdef SKIP_GIT
+VERSION_H_FLAGS := --skip-git
+endif
+
+# Generate the board's version.h file.
+$(shell $(QMK_BIN) generate-version-h $(VERSION_H_FLAGS) -q -o $(KEYMAP_OUTPUT)/src/version.h)
+
+# Determine which subfolders exist.
+KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
+KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
+KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
+KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
+KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
+KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
+KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
+KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
+KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
+KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
+KEYBOARD_PATHS :=
+KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
+KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
+KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
+KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
+KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
+
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
+ KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
+ KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
+ KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
+ KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
+ KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
+endif
+
+
+# Pull in rules.mk files from all our subfolders
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
+ include $(KEYBOARD_PATH_5)/rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
+ include $(KEYBOARD_PATH_4)/rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
+ include $(KEYBOARD_PATH_3)/rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
+ include $(KEYBOARD_PATH_2)/rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
+ include $(KEYBOARD_PATH_1)/rules.mk
+endif
+
+MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
+
+# Pull in rules from info.json
+INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_rules.mk)
+include $(INFO_RULES_MK)
+
+# Check for keymap.json first, so we can regenerate keymap.c
+include $(BUILDDEFS_PATH)/build_json.mk
+
+# Pull in keymap level rules.mk
+ifeq ("$(wildcard $(KEYMAP_PATH))", "")
+ # Look through the possible keymap folders until we find a matching keymap.c
+ ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_5)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_4)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_3)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_2)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_1)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+ else ifneq ($(LAYOUTS),)
+ # If we haven't found a keymap yet fall back to community layouts
+ include $(BUILDDEFS_PATH)/build_layout.mk
+ else
+ $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
+ # this state should never be reached
+ endif
+endif
+
+# Have we found a keymap.json?
+ifneq ("$(wildcard $(KEYMAP_JSON))", "")
+ KEYMAP_C := $(KEYMAP_OUTPUT)/src/keymap.c
+ KEYMAP_H := $(KEYMAP_OUTPUT)/src/config.h
+
+ # Load the keymap-level rules.mk if exists
+ -include $(KEYMAP_PATH)/rules.mk
+
+ # Load any rules.mk content from keymap.json
+ INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/src/rules.mk)
+ include $(INFO_RULES_MK)
+
+# Add rules to generate the keymap files - indentation here is important
+$(KEYMAP_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
+ $(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
+
+$(KEYMAP_OUTPUT)/src/config.h: $(KEYMAP_JSON)
+ $(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_H)
+
+generated-files: $(KEYMAP_OUTPUT)/src/config.h $(KEYMAP_OUTPUT)/src/keymap.c
+
+endif
+
+ifeq ($(strip $(CTPC)), yes)
+ CONVERT_TO_PROTON_C=yes
+endif
+
+ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
+ include platforms/chibios/boards/QMK_PROTON_C/convert_to_proton_c.mk
+endif
+
+include $(BUILDDEFS_PATH)/mcu_selection.mk
+
+# Find all the C source files to be compiled in subfolders.
+KEYBOARD_SRC :=
+
+KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
+KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c
+KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c
+KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c
+KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c
+
+ifneq ("$(wildcard $(KEYBOARD_C_5))","")
+ KEYBOARD_SRC += $(KEYBOARD_C_5)
+endif
+ifneq ("$(wildcard $(KEYBOARD_C_4))","")
+ KEYBOARD_SRC += $(KEYBOARD_C_4)
+endif
+ifneq ("$(wildcard $(KEYBOARD_C_3))","")
+ KEYBOARD_SRC += $(KEYBOARD_C_3)
+endif
+ifneq ("$(wildcard $(KEYBOARD_C_2))","")
+ KEYBOARD_SRC += $(KEYBOARD_C_2)
+endif
+ifneq ("$(wildcard $(KEYBOARD_C_1))","")
+ KEYBOARD_SRC += $(KEYBOARD_C_1)
+endif
+
+# Generate KEYBOARD_name_subname for all levels of the keyboard folder
+KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1)))
+KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2)))
+KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3)))
+KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4)))
+KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5)))
+
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
+ OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
+ OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
+ OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
+ OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2)
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
+ OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1)
+endif
+
+# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
+# that the same keymap may be used on multiple keyboards.
+#
+# We grab the most top-level include file that we can. That file should
+# use #ifdef statements to include all the neccesary subfolder includes,
+# as described here:
+#
+# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
+#
+QMK_KEYBOARD_H = $(KEYBOARD_OUTPUT)/src/default_keyboard.h
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
+ QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
+endif
+
+# Determine and set parameters based on the keyboard's processor family.
+# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
+# not used for LUFA
+ifdef MCU_FAMILY
+ PLATFORM=CHIBIOS
+ PLATFORM_KEY=chibios
+ FIRMWARE_FORMAT?=bin
+ OPT_DEFS += -DMCU_$(MCU_FAMILY)
+else ifdef ARM_ATSAM
+ PLATFORM=ARM_ATSAM
+ PLATFORM_KEY=arm_atsam
+ FIRMWARE_FORMAT=bin
+else
+ PLATFORM=AVR
+ PLATFORM_KEY=avr
+ FIRMWARE_FORMAT?=hex
+endif
+
+# Find all of the config.h files and add them to our CONFIG_H define.
+CONFIG_H :=
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
+ CONFIG_H += $(KEYBOARD_PATH_5)/config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","")
+ CONFIG_H += $(KEYBOARD_PATH_4)/config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","")
+ CONFIG_H += $(KEYBOARD_PATH_3)/config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","")
+ CONFIG_H += $(KEYBOARD_PATH_2)/config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
+ CONFIG_H += $(KEYBOARD_PATH_1)/config.h
+endif
+
+POST_CONFIG_H :=
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
+ POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","")
+ POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","")
+ POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","")
+ POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
+ POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
+endif
+
+# Pull in stuff from info.json
+INFO_JSON_FILES :=
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
+ INFO_JSON_FILES += $(KEYBOARD_PATH_1)/info.json
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
+ INFO_JSON_FILES += $(KEYBOARD_PATH_2)/info.json
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
+ INFO_JSON_FILES += $(KEYBOARD_PATH_3)/info.json
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
+ INFO_JSON_FILES += $(KEYBOARD_PATH_4)/info.json
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
+ INFO_JSON_FILES += $(KEYBOARD_PATH_5)/info.json
+endif
+
+CONFIG_H += $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h
+
+$(KEYBOARD_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
+ $(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h
+
+$(KEYBOARD_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
+ $(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/default_keyboard.h
+
+$(KEYBOARD_OUTPUT)/src/layouts.h: $(INFO_JSON_FILES)
+ $(QMK_BIN) generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h
+
+generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.h $(KEYBOARD_OUTPUT)/src/layouts.h
+
+.INTERMEDIATE : generated-files
+
+# Userspace setup and definitions
+ifeq ("$(USER_NAME)","")
+ USER_NAME := $(KEYMAP)
+endif
+USER_PATH := users/$(USER_NAME)
+
+# Pull in user level rules.mk
+-include $(USER_PATH)/rules.mk
+ifneq ("$(wildcard $(USER_PATH)/config.h)","")
+ CONFIG_H += $(USER_PATH)/config.h
+endif
+ifneq ("$(wildcard $(USER_PATH)/post_config.h)","")
+ POST_CONFIG_H += $(USER_PATH)/post_config.h
+endif
+
+# Disable features that a keyboard doesn't support
+-include $(BUILDDEFS_PATH)/disable_features.mk
+
+# Pull in post_rules.mk files from all our subfolders
+ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_rules.mk)","")
+ include $(KEYBOARD_PATH_1)/post_rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_rules.mk)","")
+ include $(KEYBOARD_PATH_2)/post_rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_rules.mk)","")
+ include $(KEYBOARD_PATH_3)/post_rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_rules.mk)","")
+ include $(KEYBOARD_PATH_4)/post_rules.mk
+endif
+ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_rules.mk)","")
+ include $(KEYBOARD_PATH_5)/post_rules.mk
+endif
+
+ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
+ CONFIG_H += $(KEYMAP_PATH)/config.h
+endif
+ifneq ("$(KEYMAP_H)","")
+ CONFIG_H += $(KEYMAP_H)
+endif
+
+# project specific files
+SRC += \
+ $(KEYBOARD_SRC) \
+ $(KEYMAP_C) \
+ $(QUANTUM_SRC) \
+ $(QUANTUM_DIR)/main.c \
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+# Search Path
+VPATH += $(KEYMAP_PATH)
+VPATH += $(USER_PATH)
+VPATH += $(KEYBOARD_PATHS)
+VPATH += $(COMMON_VPATH)
+VPATH += $(KEYBOARD_OUTPUT)/src
+VPATH += $(KEYMAP_OUTPUT)/src
+
+include $(BUILDDEFS_PATH)/common_features.mk
+include $(BUILDDEFS_PATH)/generic_features.mk
+include $(TMK_PATH)/protocol.mk
+include $(PLATFORM_PATH)/common.mk
+include $(BUILDDEFS_PATH)/bootloader.mk
+
+SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
+SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
+SRC += $(TMK_COMMON_SRC)
+OPT_DEFS += $(TMK_COMMON_DEFS)
+EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
+
+SKIP_COMPILE := no
+ifneq ($(REQUIRE_PLATFORM_KEY),)
+ ifneq ($(REQUIRE_PLATFORM_KEY),$(PLATFORM_KEY))
+ SKIP_COMPILE := yes
+ endif
+endif
+
+include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
+-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/flash.mk
+
+ifneq ($(strip $(PROTOCOL)),)
+ include $(TMK_PATH)/protocol/$(strip $(shell echo $(PROTOCOL) | tr '[:upper:]' '[:lower:]')).mk
+else
+ include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
+endif
+
+# TODO: remove this bodge?
+PROJECT_DEFS := $(OPT_DEFS)
+PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
+PROJECT_CONFIG := $(CONFIG_H)
+
+CONFIG_H += $(POST_CONFIG_H)
+ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H)
+
+OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
+$(KEYMAP_OUTPUT)_SRC := $(SRC)
+$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) \
+-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" \
+-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\"
+$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
+$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
+$(KEYBOARD_OUTPUT)_SRC := $(PLATFORM_SRC)
+$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
+$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
+$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
+
+# Default target.
+ifeq ($(SKIP_COMPILE),no)
+all: build check-size
+else
+all:
+ echo "skipped" >&2
+endif
+
+build: elf cpfirmware
+check-size: build
+check-md5: build
+objs-size: build
+
+include $(BUILDDEFS_PATH)/show_options.mk
+include $(BUILDDEFS_PATH)/common_rules.mk
+
+# Ensure we have generated files available for each of the objects
+define GEN_FILES
+$1: generated-files
+endef
+$(foreach O,$(OBJ),$(eval $(call GEN_FILES,$(patsubst %.a,%.o,$(O)))))
diff --git a/builddefs/build_layout.mk b/builddefs/build_layout.mk
new file mode 100644
index 0000000000..6166bd847c
--- /dev/null
+++ b/builddefs/build_layout.mk
@@ -0,0 +1,32 @@
+LAYOUTS_PATH := layouts
+LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
+
+define SEARCH_LAYOUTS_REPO
+ LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
+ LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
+ LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
+ ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
+ -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
+ KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
+ KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
+ else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
+ -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
+ KEYMAP_C := $$(LAYOUT_KEYMAP_C)
+ KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
+ endif
+endef
+
+define SEARCH_LAYOUTS
+ $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
+endef
+
+ifneq ($(FORCE_LAYOUT),)
+ ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
+ $(info Forcing layout: $(FORCE_LAYOUT))
+ LAYOUTS := $(FORCE_LAYOUT)
+ else
+ $(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
+ endif
+endif
+
+$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
diff --git a/builddefs/build_test.mk b/builddefs/build_test.mk
new file mode 100644
index 0000000000..7226004aab
--- /dev/null
+++ b/builddefs/build_test.mk
@@ -0,0 +1,84 @@
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include paths.mk
+include $(BUILDDEFS_PATH)/message.mk
+
+TARGET=test/$(TEST)
+
+GTEST_OUTPUT = $(BUILD_DIR)/gtest
+
+TEST_OBJ = $(BUILD_DIR)/test_obj
+
+OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
+
+GTEST_INC := \
+ $(LIB_PATH)/googletest/googletest/include \
+ $(LIB_PATH)/googletest/googlemock/include
+
+GTEST_INTERNAL_INC := \
+ $(LIB_PATH)/googletest/googletest \
+ $(LIB_PATH)/googletest/googlemock
+
+$(GTEST_OUTPUT)_SRC := \
+ googletest/src/gtest-all.cc\
+ googlemock/src/gmock-all.cc
+
+$(GTEST_OUTPUT)_DEFS :=
+$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
+
+LDFLAGS += -lstdc++ -lpthread -shared-libgcc
+CREATE_MAP := no
+
+VPATH += \
+ $(LIB_PATH)/googletest \
+ $(LIB_PATH)/googlemock \
+ $(LIB_PATH)/printf
+
+all: elf
+
+VPATH += $(COMMON_VPATH)
+PLATFORM:=TEST
+PLATFORM_KEY:=test
+BOOTLOADER_TYPE:=none
+
+ifeq ($(strip $(DEBUG)), 1)
+CONSOLE_ENABLE = yes
+endif
+
+ifneq ($(filter $(FULL_TESTS),$(TEST)),)
+include tests/test_common/build.mk
+include $(TEST_PATH)/test.mk
+endif
+
+include $(BUILDDEFS_PATH)/common_features.mk
+include $(BUILDDEFS_PATH)/generic_features.mk
+include $(PLATFORM_PATH)/common.mk
+include $(TMK_PATH)/protocol.mk
+include $(QUANTUM_PATH)/debounce/tests/rules.mk
+include $(QUANTUM_PATH)/encoder/tests/rules.mk
+include $(QUANTUM_PATH)/sequencer/tests/rules.mk
+include $(PLATFORM_PATH)/test/rules.mk
+ifneq ($(filter $(FULL_TESTS),$(TEST)),)
+include $(BUILDDEFS_PATH)/build_full_test.mk
+endif
+
+$(TEST)_SRC += \
+ tests/test_common/main.c \
+ $(LIB_PATH)/printf/printf.c \
+ $(QUANTUM_PATH)/logging/print.c
+
+$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
+$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
+$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
+$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
+
+include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
+include $(BUILDDEFS_PATH)/common_rules.mk
+
+
+$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
+$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
new file mode 100644
index 0000000000..08d186d656
--- /dev/null
+++ b/builddefs/common_features.mk
@@ -0,0 +1,816 @@
+# Copyright 2017 Fred Sundvik
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+QUANTUM_SRC += \
+ $(QUANTUM_DIR)/quantum.c \
+ $(QUANTUM_DIR)/send_string.c \
+ $(QUANTUM_DIR)/bitwise.c \
+ $(QUANTUM_DIR)/led.c \
+ $(QUANTUM_DIR)/action.c \
+ $(QUANTUM_DIR)/action_layer.c \
+ $(QUANTUM_DIR)/action_tapping.c \
+ $(QUANTUM_DIR)/action_util.c \
+ $(QUANTUM_DIR)/eeconfig.c \
+ $(QUANTUM_DIR)/keyboard.c \
+ $(QUANTUM_DIR)/keymap_common.c \
+ $(QUANTUM_DIR)/keycode_config.c \
+ $(QUANTUM_DIR)/sync_timer.c \
+ $(QUANTUM_DIR)/logging/debug.c \
+ $(QUANTUM_DIR)/logging/sendchar.c \
+
+VPATH += $(QUANTUM_DIR)/logging
+# Fall back to lib/printf if there is no platform provided print
+ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","")
+ include $(QUANTUM_PATH)/logging/print.mk
+else
+ include $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk
+endif
+
+ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
+ CONSOLE_ENABLE = yes
+else ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), api)
+ OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
+endif
+
+AUDIO_ENABLE ?= no
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+ ifeq ($(PLATFORM),CHIBIOS)
+ AUDIO_DRIVER ?= dac_basic
+ ifeq ($(strip $(AUDIO_DRIVER)), dac_basic)
+ OPT_DEFS += -DAUDIO_DRIVER_DAC
+ else ifeq ($(strip $(AUDIO_DRIVER)), dac_additive)
+ OPT_DEFS += -DAUDIO_DRIVER_DAC
+ ## stm32f2 and above have a usable DAC unit, f1 do not, and need to use pwm instead
+ else ifeq ($(strip $(AUDIO_DRIVER)), pwm_software)
+ OPT_DEFS += -DAUDIO_DRIVER_PWM
+ else ifeq ($(strip $(AUDIO_DRIVER)), pwm_hardware)
+ OPT_DEFS += -DAUDIO_DRIVER_PWM
+ endif
+ else
+ # fallback for all other platforms is pwm
+ AUDIO_DRIVER ?= pwm_hardware
+ OPT_DEFS += -DAUDIO_DRIVER_PWM
+ endif
+ OPT_DEFS += -DAUDIO_ENABLE
+ MUSIC_ENABLE = yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
+ SRC += $(QUANTUM_DIR)/process_keycode/process_clicky.c
+ SRC += $(QUANTUM_DIR)/audio/audio.c ## common audio code, hardware agnostic
+ SRC += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/audio_$(strip $(AUDIO_DRIVER)).c
+ SRC += $(QUANTUM_DIR)/audio/voices.c
+ SRC += $(QUANTUM_DIR)/audio/luts.c
+endif
+
+ifeq ($(strip $(SEQUENCER_ENABLE)), yes)
+ OPT_DEFS += -DSEQUENCER_ENABLE
+ MUSIC_ENABLE = yes
+ SRC += $(QUANTUM_DIR)/sequencer/sequencer.c
+ SRC += $(QUANTUM_DIR)/process_keycode/process_sequencer.c
+endif
+
+ifeq ($(strip $(MIDI_ENABLE)), yes)
+ OPT_DEFS += -DMIDI_ENABLE
+ MUSIC_ENABLE = yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
+endif
+
+MUSIC_ENABLE ?= no
+ifeq ($(MUSIC_ENABLE), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
+endif
+
+ifeq ($(strip $(STENO_ENABLE)), yes)
+ OPT_DEFS += -DSTENO_ENABLE
+ VIRTSER_ENABLE ?= yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
+endif
+
+ifeq ($(strip $(VIRTSER_ENABLE)), yes)
+ OPT_DEFS += -DVIRTSER_ENABLE
+endif
+
+ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
+ OPT_DEFS += -DMOUSEKEY_ENABLE
+ MOUSE_ENABLE := yes
+ SRC += $(QUANTUM_DIR)/mousekey.c
+endif
+
+VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick cirque_pinnacle_i2c cirque_pinnacle_spi pmw3360 pmw3389 pimoroni_trackball custom
+ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
+ ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid POINTING_DEVICE_DRIVER,POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type)
+ else
+ OPT_DEFS += -DPOINTING_DEVICE_ENABLE
+ MOUSE_ENABLE := yes
+ SRC += $(QUANTUM_DIR)/pointing_device.c
+ SRC += $(QUANTUM_DIR)/pointing_device_drivers.c
+ ifneq ($(strip $(POINTING_DEVICE_DRIVER)), custom)
+ SRC += drivers/sensors/$(strip $(POINTING_DEVICE_DRIVER)).c
+ OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(shell echo $(POINTING_DEVICE_DRIVER) | tr '[:lower:]' '[:upper:]'))
+ endif
+ OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(POINTING_DEVICE_DRIVER))
+ ifeq ($(strip $(POINTING_DEVICE_DRIVER)), adns9800)
+ OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ QUANTUM_LIB_SRC += spi_master.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), analog_joystick)
+ OPT_DEFS += -DSTM32_ADC -DHAL_USE_ADC=TRUE
+ LIB_SRC += analog.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_i2c)
+ OPT_DEFS += -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ SRC += drivers/sensors/cirque_pinnacle.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_spi)
+ OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ SRC += drivers/sensors/cirque_pinnacle.c
+ QUANTUM_LIB_SRC += spi_master.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
+ OPT_DEFS += -DSTM32_SPI -DHAL_USE_I2C=TRUE
+ QUANTUM_LIB_SRC += i2c_master.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3360)
+ OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ QUANTUM_LIB_SRC += spi_master.c
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3389)
+ OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ QUANTUM_LIB_SRC += spi_master.c
+ endif
+ endif
+endif
+
+VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi
+EEPROM_DRIVER ?= vendor
+ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
+else
+ OPT_DEFS += -DEEPROM_ENABLE
+ ifeq ($(strip $(EEPROM_DRIVER)), custom)
+ # Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ SRC += eeprom_driver.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
+ # External I2C EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ QUANTUM_LIB_SRC += i2c_master.c
+ SRC += eeprom_driver.c eeprom_i2c.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), spi)
+ # External SPI EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ QUANTUM_LIB_SRC += spi_master.c
+ SRC += eeprom_driver.c eeprom_spi.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), transient)
+ # Transient EEPROM implementation -- no data storage but provides runtime area for it
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ SRC += eeprom_driver.c eeprom_transient.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
+ # Vendor-implemented EEPROM
+ OPT_DEFS += -DEEPROM_VENDOR
+ ifeq ($(PLATFORM),AVR)
+ # Automatically provided by avr-libc, nothing required
+ else ifeq ($(PLATFORM),CHIBIOS)
+ ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
+ # Emulated EEPROM
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_FLASH_EMULATED
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ SRC += eeprom_driver.c
+ SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
+ SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
+ else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
+ # True EEPROM on STM32L0xx, L1xx
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
+ SRC += eeprom_driver.c
+ SRC += eeprom_stm32_L0_L1.c
+ else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
+ # Teensy EEPROM implementations
+ OPT_DEFS += -DEEPROM_TEENSY
+ SRC += eeprom_teensy.c
+ else
+ # Fall back to transient, i.e. non-persistent
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ SRC += eeprom_driver.c eeprom_transient.c
+ endif
+ else ifeq ($(PLATFORM),ARM_ATSAM)
+ # arm_atsam EEPROM
+ OPT_DEFS += -DEEPROM_SAMD
+ SRC += $(PLATFORM_COMMON_DIR)/eeprom_samd.c
+ else ifeq ($(PLATFORM),TEST)
+ # Test harness "EEPROM"
+ OPT_DEFS += -DEEPROM_TEST_HARNESS
+ SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+ endif
+ endif
+endif
+
+VALID_FLASH_DRIVER_TYPES := spi
+FLASH_DRIVER ?= no
+ifneq ($(strip $(FLASH_DRIVER)), no)
+ ifeq ($(filter $(FLASH_DRIVER),$(VALID_FLASH_DRIVER_TYPES)),)
+ $(error FLASH_DRIVER="$(FLASH_DRIVER)" is not a valid FLASH driver)
+ else
+ OPT_DEFS += -DFLASH_ENABLE
+ ifeq ($(strip $(FLASH_DRIVER)), spi)
+ OPT_DEFS += -DFLASH_DRIVER -DFLASH_SPI
+ COMMON_VPATH += $(DRIVER_PATH)/flash
+ SRC += flash_spi.c
+ endif
+ endif
+endif
+
+RGBLIGHT_ENABLE ?= no
+VALID_RGBLIGHT_TYPES := WS2812 APA102 custom
+
+ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
+ RGBLIGHT_DRIVER ?= custom
+endif
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ RGBLIGHT_DRIVER ?= WS2812
+
+ ifeq ($(filter $(RGBLIGHT_DRIVER),$(VALID_RGBLIGHT_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid RGBLIGHT_DRIVER,RGBLIGHT_DRIVER="$(RGBLIGHT_DRIVER)" is not a valid RGB type)
+ else
+ COMMON_VPATH += $(QUANTUM_DIR)/rgblight
+ POST_CONFIG_H += $(QUANTUM_DIR)/rgblight/rgblight_post_config.h
+ OPT_DEFS += -DRGBLIGHT_ENABLE
+ SRC += $(QUANTUM_DIR)/color.c
+ SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
+ CIE1931_CURVE := yes
+ RGB_KEYCODES_ENABLE := yes
+ endif
+
+ ifeq ($(strip $(RGBLIGHT_DRIVER)), WS2812)
+ WS2812_DRIVER_REQUIRED := yes
+ endif
+
+ ifeq ($(strip $(RGBLIGHT_DRIVER)), APA102)
+ APA102_DRIVER_REQUIRED := yes
+ endif
+
+ ifeq ($(strip $(RGBLIGHT_DRIVER)), custom)
+ OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
+ endif
+endif
+
+LED_MATRIX_ENABLE ?= no
+VALID_LED_MATRIX_TYPES := IS31FL3731 IS31FL3742A IS31FL3743A IS31FL3745 IS31FL3746A custom
+# TODO: IS31FL3733 IS31FL3737 IS31FL3741
+
+ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
+ ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid LED_MATRIX_DRIVER,LED_MATRIX_DRIVER="$(LED_MATRIX_DRIVER)" is not a valid matrix type)
+ endif
+ OPT_DEFS += -DLED_MATRIX_ENABLE
+ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
+ # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
+ OPT_DEFS += -DLIB8_ATTINY
+endif
+ COMMON_VPATH += $(QUANTUM_DIR)/led_matrix
+ COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations
+ COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations/runners
+ SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
+ SRC += $(QUANTUM_DIR)/led_matrix/led_matrix.c
+ SRC += $(QUANTUM_DIR)/led_matrix/led_matrix_drivers.c
+ SRC += $(LIB_PATH)/lib8tion/lib8tion.c
+ CIE1931_CURVE := yes
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3731)
+ OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3731-simple.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3742A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3742A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3743A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3743A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3745)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3745 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3746A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3746A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+endif
+
+RGB_MATRIX_ENABLE ?= no
+
+VALID_RGB_MATRIX_TYPES := AW20216 IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 IS31FL3742A IS31FL3743A IS31FL3745 IS31FL3746A CKLED2001 WS2812 custom
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
+ ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid RGB_MATRIX_DRIVER,RGB_MATRIX_DRIVER="$(RGB_MATRIX_DRIVER)" is not a valid matrix type)
+ endif
+ OPT_DEFS += -DRGB_MATRIX_ENABLE
+ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
+ # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
+ OPT_DEFS += -DLIB8_ATTINY
+endif
+ COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix
+ COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations
+ COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations/runners
+ SRC += $(QUANTUM_DIR)/color.c
+ SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix.c
+ SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix_drivers.c
+ SRC += $(LIB_PATH)/lib8tion/lib8tion.c
+ CIE1931_CURVE := yes
+ RGB_KEYCODES_ENABLE := yes
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), AW20216)
+ OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led
+ SRC += aw20216.c
+ QUANTUM_LIB_SRC += spi_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3731)
+ OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3731.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3733)
+ OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3733.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3737)
+ OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3737.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3741)
+ OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3741.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3742A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3742A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3743A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3743A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3745)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3745 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3746A)
+ OPT_DEFS += -DIS31FLCOMMON -DIS31FL3746A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31flcommon.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), CKLED2001)
+ OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ COMMON_VPATH += $(DRIVER_PATH)/led
+ SRC += ckled2001.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), WS2812)
+ OPT_DEFS += -DWS2812
+ WS2812_DRIVER_REQUIRED := yes
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), APA102)
+ OPT_DEFS += -DAPA102
+ APA102_DRIVER_REQUIRED := yes
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes)
+ OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes)
+ OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER
+ endif
+endif
+
+ifeq ($(strip $(RGB_KEYCODES_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_rgb.c
+endif
+
+ifeq ($(strip $(PRINTING_ENABLE)), yes)
+ OPT_DEFS += -DPRINTING_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
+ QUANTUM_LIB_SRC += uart.c
+endif
+
+VARIABLE_TRACE ?= no
+ifneq ($(strip $(VARIABLE_TRACE)),no)
+ SRC += $(QUANTUM_DIR)/variable_trace.c
+ OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
+ ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
+ OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
+ endif
+endif
+
+ifeq ($(strip $(SLEEP_LED_ENABLE)), yes)
+ SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
+ OPT_DEFS += -DSLEEP_LED_ENABLE
+
+ NO_SUSPEND_POWER_DOWN := yes
+endif
+
+VALID_BACKLIGHT_TYPES := pwm timer software custom
+
+BACKLIGHT_ENABLE ?= no
+ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
+ BACKLIGHT_DRIVER ?= software
+else
+ BACKLIGHT_DRIVER ?= pwm
+endif
+ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
+ ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid BACKLIGHT_DRIVER,BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
+ endif
+
+ COMMON_VPATH += $(QUANTUM_DIR)/backlight
+ SRC += $(QUANTUM_DIR)/backlight/backlight.c
+ SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
+ OPT_DEFS += -DBACKLIGHT_ENABLE
+
+ ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
+ OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
+ else
+ SRC += $(QUANTUM_DIR)/backlight/backlight_driver_common.c
+ ifeq ($(strip $(BACKLIGHT_DRIVER)), pwm)
+ SRC += $(QUANTUM_DIR)/backlight/backlight_$(PLATFORM_KEY).c
+ else
+ SRC += $(QUANTUM_DIR)/backlight/backlight_$(strip $(BACKLIGHT_DRIVER)).c
+ endif
+ endif
+endif
+
+VALID_WS2812_DRIVER_TYPES := bitbang pwm spi i2c
+
+WS2812_DRIVER ?= bitbang
+ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
+ ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid WS2812_DRIVER,WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
+ endif
+
+ OPT_DEFS += -DWS2812_DRIVER_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
+ ifeq ($(strip $(WS2812_DRIVER)), bitbang)
+ SRC += ws2812.c
+ else
+ SRC += ws2812_$(strip $(WS2812_DRIVER)).c
+
+ ifeq ($(strip $(PLATFORM)), CHIBIOS)
+ ifeq ($(strip $(WS2812_DRIVER)), pwm)
+ OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
+ endif
+ endif
+ endif
+
+ # add extra deps
+ ifeq ($(strip $(WS2812_DRIVER)), i2c)
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+endif
+
+ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
+ COMMON_VPATH += $(DRIVER_PATH)/led
+ SRC += apa102.c
+endif
+
+ifeq ($(strip $(CIE1931_CURVE)), yes)
+ OPT_DEFS += -DUSE_CIE1931_CURVE
+ LED_TABLES := yes
+endif
+
+ifeq ($(strip $(LED_TABLES)), yes)
+ SRC += $(QUANTUM_DIR)/led_tables.c
+endif
+
+ifeq ($(strip $(TERMINAL_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
+ OPT_DEFS += -DTERMINAL_ENABLE
+ OPT_DEFS += -DUSER_PRINT
+endif
+
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ DYNAMIC_KEYMAP_ENABLE := yes
+ RAW_ENABLE := yes
+ BOOTMAGIC_ENABLE := yes
+ SRC += $(QUANTUM_DIR)/via.c
+ OPT_DEFS += -DVIA_ENABLE
+endif
+
+VALID_MAGIC_TYPES := yes
+BOOTMAGIC_ENABLE ?= no
+ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
+ ifeq ($(filter $(BOOTMAGIC_ENABLE),$(VALID_MAGIC_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTMAGIC_ENABLE,BOOTMAGIC_ENABLE="$(BOOTMAGIC_ENABLE)" is not a valid type of magic)
+ endif
+ ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
+ OPT_DEFS += -DBOOTMAGIC_LITE
+ QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/bootmagic_lite.c
+ endif
+endif
+COMMON_VPATH += $(QUANTUM_DIR)/bootmagic
+QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/magic.c
+
+VALID_CUSTOM_MATRIX_TYPES:= yes lite no
+
+CUSTOM_MATRIX ?= no
+
+ifneq ($(strip $(CUSTOM_MATRIX)), yes)
+ ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid CUSTOM_MATRIX,CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type)
+ endif
+
+ # Include common stuff for all non custom matrix users
+ QUANTUM_SRC += $(QUANTUM_DIR)/matrix_common.c
+
+ # if 'lite' then skip the actual matrix implementation
+ ifneq ($(strip $(CUSTOM_MATRIX)), lite)
+ # Include the standard or split matrix code if needed
+ QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
+ endif
+endif
+
+# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
+DEBOUNCE_TYPE ?= sym_defer_g
+ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
+ QUANTUM_SRC += $(QUANTUM_DIR)/debounce/$(strip $(DEBOUNCE_TYPE)).c
+endif
+
+ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
+ POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h
+ OPT_DEFS += -DSPLIT_KEYBOARD
+ CRC_ENABLE := yes
+
+ # Include files used by all split keyboards
+ QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
+
+ # Determine which (if any) transport files are required
+ ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
+ QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c \
+ $(QUANTUM_DIR)/split_common/transactions.c
+
+ OPT_DEFS += -DSPLIT_COMMON_TRANSACTIONS
+
+ # Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
+ # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
+ ifeq ($(PLATFORM),AVR)
+ ifneq ($(NO_I2C),yes)
+ QUANTUM_LIB_SRC += i2c_master.c \
+ i2c_slave.c
+ endif
+ endif
+
+ SERIAL_DRIVER ?= bitbang
+ OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
+ ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
+ QUANTUM_LIB_SRC += serial.c
+ else
+ QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
+ endif
+ endif
+ COMMON_VPATH += $(QUANTUM_PATH)/split_common
+endif
+
+ifeq ($(strip $(CRC_ENABLE)), yes)
+ OPT_DEFS += -DCRC_ENABLE
+ SRC += crc.c
+endif
+
+ifeq ($(strip $(HAPTIC_ENABLE)),yes)
+ COMMON_VPATH += $(DRIVER_PATH)/haptic
+
+ ifneq ($(filter DRV2605L, $(HAPTIC_DRIVER)), )
+ SRC += DRV2605L.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ OPT_DEFS += -DDRV2605L
+ endif
+
+ ifneq ($(filter SOLENOID, $(HAPTIC_DRIVER)), )
+ SRC += solenoid.c
+ OPT_DEFS += -DSOLENOID_ENABLE
+ endif
+endif
+
+ifeq ($(strip $(HD44780_ENABLE)), yes)
+ SRC += platforms/avr/drivers/hd44780.c
+ OPT_DEFS += -DHD44780_ENABLE
+endif
+
+VALID_OLED_DRIVER_TYPES := SSD1306 custom
+OLED_DRIVER ?= SSD1306
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ ifeq ($(filter $(OLED_DRIVER),$(VALID_OLED_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid OLED_DRIVER,OLED_DRIVER="$(OLED_DRIVER)" is not a valid OLED driver)
+ else
+ OPT_DEFS += -DOLED_ENABLE
+ COMMON_VPATH += $(DRIVER_PATH)/oled
+
+ OPT_DEFS += -DOLED_DRIVER_$(strip $(shell echo $(OLED_DRIVER) | tr '[:lower:]' '[:upper:]'))
+ ifeq ($(strip $(OLED_DRIVER)), SSD1306)
+ SRC += ssd1306_sh1106.c
+ QUANTUM_LIB_SRC += i2c_master.c
+ endif
+ endif
+endif
+
+ifeq ($(strip $(ST7565_ENABLE)), yes)
+ OPT_DEFS += -DST7565_ENABLE
+ COMMON_VPATH += $(DRIVER_PATH)/oled # For glcdfont.h
+ COMMON_VPATH += $(DRIVER_PATH)/lcd
+ QUANTUM_LIB_SRC += spi_master.c
+ SRC += st7565.c
+endif
+
+ifeq ($(strip $(UCIS_ENABLE)), yes)
+ OPT_DEFS += -DUCIS_ENABLE
+ UNICODE_COMMON := yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
+endif
+
+ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
+ OPT_DEFS += -DUNICODEMAP_ENABLE
+ UNICODE_COMMON := yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
+endif
+
+ifeq ($(strip $(UNICODE_ENABLE)), yes)
+ OPT_DEFS += -DUNICODE_ENABLE
+ UNICODE_COMMON := yes
+ SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
+endif
+
+ifeq ($(strip $(UNICODE_COMMON)), yes)
+ OPT_DEFS += -DUNICODE_COMMON_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
+endif
+
+MAGIC_ENABLE ?= yes
+ifeq ($(strip $(MAGIC_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
+ OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
+endif
+
+ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
+ OPT_DEFS += -DAUTO_SHIFT_ENABLE
+ ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
+ OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
+ endif
+endif
+
+ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
+ PS2_ENABLE := yes
+ SRC += ps2_mouse.c
+ OPT_DEFS += -DPS2_MOUSE_ENABLE
+ OPT_DEFS += -DMOUSE_ENABLE
+endif
+
+ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
+ PS2_ENABLE := yes
+ SRC += ps2_busywait.c
+ SRC += ps2_io.c
+ OPT_DEFS += -DPS2_USE_BUSYWAIT
+endif
+
+ifeq ($(strip $(PS2_USE_INT)), yes)
+ PS2_ENABLE := yes
+ SRC += ps2_interrupt.c
+ SRC += ps2_io.c
+ OPT_DEFS += -DPS2_USE_INT
+endif
+
+ifeq ($(strip $(PS2_USE_USART)), yes)
+ PS2_ENABLE := yes
+ SRC += ps2_usart.c
+ SRC += ps2_io.c
+ OPT_DEFS += -DPS2_USE_USART
+endif
+
+ifeq ($(strip $(PS2_ENABLE)), yes)
+ COMMON_VPATH += $(DRIVER_PATH)/ps2
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/ps2
+ OPT_DEFS += -DPS2_ENABLE
+endif
+
+JOYSTICK_ENABLE ?= no
+VALID_JOYSTICK_TYPES := analog digital
+JOYSTICK_DRIVER ?= analog
+ifeq ($(strip $(JOYSTICK_ENABLE)), yes)
+ ifeq ($(filter $(JOYSTICK_DRIVER),$(VALID_JOYSTICK_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid JOYSTICK_DRIVER,JOYSTICK_DRIVER="$(JOYSTICK_DRIVER)" is not a valid joystick driver)
+ endif
+ OPT_DEFS += -DJOYSTICK_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_joystick.c
+ SRC += $(QUANTUM_DIR)/joystick.c
+
+ ifeq ($(strip $(JOYSTICK_DRIVER)), analog)
+ OPT_DEFS += -DANALOG_JOYSTICK_ENABLE
+ SRC += analog.c
+ endif
+ ifeq ($(strip $(JOYSTICK_DRIVER)), digital)
+ OPT_DEFS += -DDIGITAL_JOYSTICK_ENABLE
+ endif
+endif
+
+USBPD_ENABLE ?= no
+VALID_USBPD_DRIVER_TYPES = custom vendor
+USBPD_DRIVER ?= vendor
+ifeq ($(strip $(USBPD_ENABLE)), yes)
+ ifeq ($(filter $(strip $(USBPD_DRIVER)),$(VALID_USBPD_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid USBPD_DRIVER,USBPD_DRIVER="$(USBPD_DRIVER)" is not a valid USBPD driver)
+ else
+ OPT_DEFS += -DUSBPD_ENABLE
+ ifeq ($(strip $(USBPD_DRIVER)), vendor)
+ # Vendor-specific implementations
+ OPT_DEFS += -DUSBPD_VENDOR
+ ifeq ($(strip $(MCU_SERIES)), STM32G4xx)
+ OPT_DEFS += -DUSBPD_STM32G4
+ SRC += usbpd_stm32g4.c
+ else
+ $(call CATASTROPHIC_ERROR,Invalid USBPD_DRIVER,There is no vendor-provided USBPD driver available)
+ endif
+ else ifeq ($(strip $(USBPD_DRIVER)), custom)
+ OPT_DEFS += -DUSBPD_CUSTOM
+ # Board designers can add their own driver to $(SRC)
+ endif
+ endif
+endif
+
+BLUETOOTH_ENABLE ?= no
+VALID_BLUETOOTH_DRIVER_TYPES := BluefruitLE RN42 custom
+ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
+ ifeq ($(filter $(strip $(BLUETOOTH_DRIVER)),$(VALID_BLUETOOTH_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid BLUETOOTH_DRIVER,BLUETOOTH_DRIVER="$(BLUETOOTH_DRIVER)" is not a valid Bluetooth driver type)
+ endif
+ OPT_DEFS += -DBLUETOOTH_ENABLE
+ NO_USB_STARTUP_CHECK := yes
+ COMMON_VPATH += $(DRIVER_PATH)/bluetooth
+ SRC += outputselect.c
+
+ ifeq ($(strip $(BLUETOOTH_DRIVER)), BluefruitLE)
+ OPT_DEFS += -DBLUETOOTH_BLUEFRUIT_LE
+ SRC += analog.c
+ SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
+ QUANTUM_LIB_SRC += spi_master.c
+ endif
+
+ ifeq ($(strip $(BLUETOOTH_DRIVER)), RN42)
+ OPT_DEFS += -DBLUETOOTH_RN42
+ SRC += $(DRIVER_PATH)/bluetooth/rn42.c
+ QUANTUM_LIB_SRC += uart.c
+ endif
+endif
diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk
new file mode 100644
index 0000000000..b303a87919
--- /dev/null
+++ b/builddefs/common_rules.mk
@@ -0,0 +1,523 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+# Carlos Lamas
+#
+
+# Enable vpath seraching for source files only
+# Without this, output files, could be read from the wrong .build directories
+VPATH_SRC := $(VPATH)
+vpath %.c $(VPATH_SRC)
+vpath %.h $(VPATH_SRC)
+vpath %.cpp $(VPATH_SRC)
+vpath %.cc $(VPATH_SRC)
+vpath %.hpp $(VPATH_SRC)
+vpath %.S $(VPATH_SRC)
+VPATH :=
+
+# Convert all SRC to OBJ
+define OBJ_FROM_SRC
+$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$(patsubst %.clib,$1/%.a,$($1_SRC))))))
+endef
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
+
+# Define a list of all objects
+OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
+NO_LTO_OBJ := $(filter %.a,$(OBJ))
+
+MASTER_OUTPUT := $(firstword $(OUTPUTS))
+
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# Optimization level, can be [0, 1, 2, 3, s].
+# 0 = turn off optimization. s = optimize for size.
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT ?= s
+
+# Compiler flag to set the C Standard level.
+# c89 = "ANSI" C
+# gnu89 = c89 plus GCC extensions
+# c99 = ISO C99 standard (not yet fully implemented)
+# gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here for C sources
+#CDEFS +=
+
+
+# Place -D or -U options here for ASM sources
+#ADEFS +=
+
+
+# Place -D or -U options here for C++ sources
+#CXXDEFS += -D__STDC_LIMIT_MACROS
+#CXXDEFS += -D__STDC_CONSTANT_MACROS
+#CXXDEFS +=
+
+# Speed up recompilations by opt-in usage of ccache
+USE_CCACHE ?= no
+ifneq ($(USE_CCACHE),no)
+ CC_PREFIX ?= ccache
+endif
+
+#---------------- Compiler Options C ----------------
+# -g*: generate debugging information
+# -O*: optimization level
+# -f...: tuning, see GCC manual and avr-libc documentation
+# -Wall...: warning level
+# -Wa,...: tell GCC to pass this to the assembler.
+ifeq ($(strip $(LTO_ENABLE)), yes)
+ ifeq ($(PLATFORM),CHIBIOS)
+ $(info Enabling LTO on ChibiOS-targeting boards is known to have a high likelihood of failure.)
+ $(info If unsure, set LTO_ENABLE = no.)
+ endif
+ CDEFS += -flto
+ CDEFS += -DLTO_ENABLE
+endif
+
+DEBUG_ENABLE ?= yes
+ifeq ($(strip $(SKIP_DEBUG_INFO)),yes)
+ DEBUG_ENABLE=no
+endif
+
+ifeq ($(strip $(DEBUG_ENABLE)),yes)
+ CFLAGS += -g$(DEBUG)
+endif
+CFLAGS += $(CDEFS)
+CFLAGS += -O$(OPT)
+# add color
+ifeq ($(COLOR),true)
+ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "")
+ CFLAGS+= -fdiagnostics-color
+endif
+endif
+CFLAGS += -Wall
+CFLAGS += -Wstrict-prototypes
+ifneq ($(strip $(ALLOW_WARNINGS)), yes)
+ CFLAGS += -Werror
+endif
+#CFLAGS += -mshort-calls
+#CFLAGS += -fno-unit-at-a-time
+#CFLAGS += -Wundef
+#CFLAGS += -Wunreachable-code
+#CFLAGS += -Wsign-compare
+CFLAGS += $(CSTANDARD)
+
+# This fixes lots of keyboards linking errors but SHOULDN'T BE A FINAL SOLUTION
+# Fixing of multiple variable definitions must be made.
+CFLAGS += -fcommon
+
+#---------------- Compiler Options C++ ----------------
+# -g*: generate debugging information
+# -O*: optimization level
+# -f...: tuning, see GCC manual and avr-libc documentation
+# -Wall...: warning level
+# -Wa,...: tell GCC to pass this to the assembler.
+ifeq ($(strip $(DEBUG_ENABLE)),yes)
+ CXXFLAGS += -g$(DEBUG)
+endif
+CXXFLAGS += $(CXXDEFS)
+CXXFLAGS += -O$(OPT)
+# to supress "warning: only initialized variables can be placed into program memory area"
+CXXFLAGS += -w
+CXXFLAGS += -Wall
+CXXFLAGS += -Wundef
+
+ifneq ($(strip $(ALLOW_WARNINGS)), yes)
+ CXXFLAGS += -Werror
+endif
+#CXXFLAGS += -mshort-calls
+#CXXFLAGS += -fno-unit-at-a-time
+#CXXFLAGS += -Wstrict-prototypes
+#CXXFLAGS += -Wunreachable-code
+#CXXFLAGS += -Wsign-compare
+#CXXFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+ASFLAGS += $(ADEFS)
+ifeq ($(VERBOSE_AS_CMD),yes)
+ ASFLAGS += -v
+endif
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+CREATE_MAP ?= yes
+
+
+#---------------- Linker Options ----------------
+# -Wl,...: tell GCC to pass this to linker.
+# -Map: create map file
+# --cref: add cross reference to map file
+#
+# Comennt out "--relax" option to avoid a error such:
+# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
+#
+
+ifeq ($(CREATE_MAP),yes)
+ LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+endif
+ifeq ($(VERBOSE_LD_CMD),yes)
+ LDFLAGS += -v
+endif
+#LDFLAGS += -Wl,--relax
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+#LDFLAGS += -T linker_script.x
+# You can give EXTRALDFLAGS at 'make' command line.
+LDFLAGS += $(EXTRALDFLAGS)
+
+#---------------- Assembler Listings ----------------
+# -Wa,...: tell GCC to pass this to the assembler.
+# -adhlns: create listing
+# -gstabs: have the assembler create line number information; note that
+# for use in COFF files, additional information about filenames
+# and function names needs to be present in the assembler source
+# files -- see avr-libc docs [FIXME: not yet described there]
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex
+# dump that will be displayed for a given single line of source input.
+
+ADHLNS_ENABLE ?= no
+ifeq ($(ADHLNS_ENABLE),yes)
+ # Avoid "Options to '-Xassembler' do not match" - only specify assembler options at LTO link time
+ ifeq ($(strip $(LTO_ENABLE)), yes)
+ LDFLAGS += -Wa,-adhlns=$(BUILD_DIR)/$(TARGET).lst
+ else
+ CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
+ CXXFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
+ ifeq ($(strip $(DEBUG_ENABLE)),yes)
+ ASFLAGS = -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
+ else
+ ASFLAGS = -Wa,-adhlns=$(@:%.o=%.lst),--listing-cont-lines=100
+ endif
+ endif
+endif
+
+# Define programs and commands.
+SHELL = sh
+SED = sed
+REMOVE = rm -f
+REMOVEDIR = rmdir
+COPY = cp
+WINSHELL = cmd
+SECHO = $(SILENT) || echo
+MD5SUM ?= md5sum
+ifneq ($(filter Darwin FreeBSD,$(shell uname -s)),)
+ MD5SUM = md5
+endif
+
+# UF2 format settings
+# To produce a UF2 file in your build, add to your keyboard's rules.mk:
+# FIRMWARE_FORMAT = uf2
+UF2CONV = $(TOP_DIR)/util/uf2conv.py
+UF2_FAMILY ?= 0x0
+
+# Compiler flags to generate dependency files.
+#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
+GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
+ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
+ALL_CXXFLAGS = $(MCUFLAGS) -x c++ $(CXXFLAGS) $(EXTRAFLAGS)
+ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
+
+define NO_LTO
+$(patsubst %.a,%.o,$1): NOLTO_CFLAGS += -fno-lto
+endef
+$(foreach LOBJ, $(NO_LTO_OBJ), $(eval $(call NO_LTO,$(LOBJ))))
+
+MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
+
+# For a ChibiOS build, ensure that the board files have the hook overrides injected
+define BOARDSRC_INJECT_HOOKS
+$(KEYBOARD_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): INIT_HOOK_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h
+endef
+$(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ))))
+
+# Add QMK specific flags
+DFU_SUFFIX ?= dfu-suffix
+DFU_SUFFIX_ARGS ?=
+
+
+elf: $(BUILD_DIR)/$(TARGET).elf
+hex: $(BUILD_DIR)/$(TARGET).hex
+uf2: $(BUILD_DIR)/$(TARGET).uf2
+cpfirmware: $(FIRMWARE_FORMAT)
+ $(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to qmk_firmware folder" | $(AWK_CMD)
+ $(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
+eep: $(BUILD_DIR)/$(TARGET).eep
+lss: $(BUILD_DIR)/$(TARGET).lss
+sym: $(BUILD_DIR)/$(TARGET).sym
+LIBNAME=lib$(TARGET).a
+lib: $(LIBNAME)
+
+# Display size of file, modifying the output so people don't mistakenly grab the hex output
+BINARY_SIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(SED) -e 's/\.build\/.*$$/$(TARGET).$(FIRMWARE_FORMAT)/g'
+
+sizebefore:
+ @if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(BINARY_SIZE); \
+ 2>/dev/null; $(SECHO); fi
+
+sizeafter: $(BUILD_DIR)/$(TARGET).hex
+ @if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(BINARY_SIZE); \
+ 2>/dev/null; $(SECHO); fi
+
+# Display compiler version information.
+gccversion :
+ @$(SILENT) || $(CC) --version
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+ $(eval CMD=$(HEX) $< $@)
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+
+%.uf2: %.hex
+ $(eval CMD=$(UF2CONV) $(BUILD_DIR)/$(TARGET).hex -o $(BUILD_DIR)/$(TARGET).uf2 -c -f $(UF2_FAMILY) >/dev/null 2>&1)
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_UF2) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+
+%.eep: %.elf
+ $(eval CMD=$(EEP) $< $@ || exit 0)
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+ $(eval CMD=$(OBJDUMP) -h -S -z $< > $@)
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_EXTENDED_LISTING) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+ $(eval CMD=$(NM) -n $< > $@ )
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_SYMBOL_TABLE) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+
+%.bin: %.elf
+ $(eval CMD=$(BIN) $< $@ || exit 0)
+ #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
+ @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD)
+ @$(BUILD_CMD)
+ if [ ! -z "$(DFU_SUFFIX_ARGS)" ]; then \
+ $(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null ;\
+ fi
+ #$(SILENT) || printf "$(MSG_EXECUTING) '$(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null':\n" ;\
+ $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
+
+BEGIN = gccversion sizebefore
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
+.PRECIOUS : $(OBJ)
+# Note the obj.txt depeendency is there to force linking if a source file is deleted
+%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
+ @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
+ $(eval CMD=MAKE=$(MAKE) $(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
+ @$(BUILD_CMD)
+
+
+define GEN_OBJRULE
+$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
+ifdef $1_CONFIG
+$1_CONFIG_FLAGS += $$(patsubst %,-include %,$$($1_CONFIG))
+endif
+$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
+$1_CXXFLAGS = $$(ALL_CXXFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
+$1_ASFLAGS = $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+
+# Compile: create object files from C source files.
+$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
+ $$(eval CC_EXEC := $$(CC))
+ ifneq ($$(VERBOSE_C_CMD),)
+ $$(if $$(filter $$(notdir $$(VERBOSE_C_CMD)),$$(notdir $$<)),$$(eval CC_EXEC += -v))
+ endif
+ ifneq ($$(VERBOSE_C_INCLUDE),)
+ $$(if $$(filter $$(notdir $$(VERBOSE_C_INCLUDE)),$$(notdir $$<)),$$(eval CC_EXEC += -H))
+ endif
+ $$(eval CMD := $$(CC_EXEC) -c $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
+ ifneq ($$(DUMP_C_MACROS),)
+ $$(eval CMD := $$(CC) -E -dM $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$<)
+ @$$(if $$(filter $$(notdir $$(DUMP_C_MACROS)),$$(notdir $$<)),$$(BUILD_CMD))
+ endif
+
+# Compile: create object files from C++ source files.
+$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
+
+$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
+
+# Assemble: create object files from assembler source files.
+$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
+ @$$(BUILD_CMD)
+
+$1/%.a : $1/%.o
+ @mkdir -p $$(@D)
+ @$(SILENT) || printf "Archiving: $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(AR) rcs $$@ $$<)
+ @$$(BUILD_CMD)
+
+$1/force:
+
+$1/cflags.txt: $1/force
+ echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
+
+$1/cxxflags.txt: $1/force
+ echo '$$($1_CXXFLAGS)' | cmp -s - $$@ || echo '$$($1_CXXFLAGS)' > $$@
+
+$1/asflags.txt: $1/force
+ echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
+
+$1/compiler.txt: $1/force
+ $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
+endef
+
+.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
+$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
+ echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
+
+.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
+$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
+ echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
+
+
+# We have to use static rules for the .d files for some reason
+DEPS = $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
+# Keep the .d files
+.PRECIOUS: $(DEPS)
+# Empty rule to force recompilation if the .d file is missing
+$(DEPS):
+
+
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c | $(BEGIN)
+ $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
+
+# Target: clean project.
+clean:
+ $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
+ $(REMOVE) $(BUILD_DIR)/$(TARGET).*
+
+show_path:
+ @echo VPATH=$(VPATH)
+ @echo SRC=$(SRC)
+ @echo OBJ=$(OBJ)
+
+dump_vars: ERROR_IF_EMPTY=""
+dump_vars: ERROR_IF_NONBOOL=""
+dump_vars: ERROR_IF_UNSET=""
+dump_vars:
+ @$(foreach V,$(sort $(.VARIABLES)),$(if $(filter-out environment% default automatic,$(origin $V)),$(info $V=$($V))))
+
+objs-size:
+ for i in $(OBJ); do echo $$i; done | sort | xargs $(SIZE)
+
+ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
+SIZE_MARGIN = 1024
+
+check-size:
+ $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) -D__ASSEMBLER__ $(CFLAGS) $(OPT_DEFS) platforms/avr/bootloader_size.c 2> /dev/null | $(SED) -ne 's/\r//;/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
+ $(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
+ $(eval FREE_SIZE=$(shell expr $(MAX_SIZE) - $(CURRENT_SIZE)))
+ $(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
+ $(eval PERCENT_SIZE=$(shell expr $(CURRENT_SIZE) \* 100 / $(MAX_SIZE)))
+ if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \
+ $(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \
+ if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then \
+ printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); \
+ else \
+ if [ $(FREE_SIZE) -lt $(SIZE_MARGIN) ]; then \
+ $(PRINT_WARNING_PLAIN); printf " * $(MSG_FILE_NEAR_LIMIT)"; \
+ else \
+ $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; \
+ fi ; \
+ fi ; \
+ fi
+else
+check-size:
+ $(SILENT) || echo "$(MSG_CHECK_FILESIZE_SKIPPED)"
+endif
+
+check-md5:
+ $(MD5SUM) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT)
+
+# Create build directory
+$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
+
+# Create object files directory
+$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
+
+# Include the dependency files.
+-include $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
+
+
+# Listing of phony targets.
+.PHONY : all dump_vars finish sizebefore sizeafter qmkversion \
+gccversion build elf hex uf2 eep lss sym coff extcoff \
+clean clean_list debug gdb-config show_path \
+program teensy dfu dfu-ee dfu-start \
+flash dfu-split-left dfu-split-right \
+avrdude-split-left avrdude-split-right \
+avrdude-loop usbasp
diff --git a/builddefs/mcu_selection.mk b/builddefs/mcu_selection.mk
index 46d34aabe4..9fdd22c3b6 100644
--- a/builddefs/mcu_selection.mk
+++ b/builddefs/mcu_selection.mk
@@ -143,6 +143,9 @@ ifneq ($(findstring STM32F042, $(MCU)),)
# This ensures that the EEPROM page buffer fits into RAM
USE_PROCESS_STACKSIZE = 0x600
USE_EXCEPTIONS_STACKSIZE = 0x300
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFFC400
endif
ifneq ($(findstring STM32F072, $(MCU)),)
@@ -175,6 +178,9 @@ ifneq ($(findstring STM32F072, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F0
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFFC800
endif
ifneq ($(findstring STM32F103, $(MCU)),)
@@ -239,6 +245,9 @@ ifneq ($(findstring STM32F303, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F3
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFFD800
endif
ifneq ($(findstring STM32F401, $(MCU)),)
@@ -276,6 +285,9 @@ ifneq ($(findstring STM32F401, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32F405, $(MCU)),)
@@ -308,6 +320,9 @@ ifneq ($(findstring STM32F405, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32F407, $(MCU)),)
@@ -340,6 +355,9 @@ ifneq ($(findstring STM32F407, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32F411, $(MCU)),)
@@ -377,6 +395,9 @@ ifneq ($(findstring STM32F411, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32F4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32F446, $(MCU)),)
@@ -406,6 +427,9 @@ ifneq ($(findstring STM32F446, $(MCU)),)
BOARD ?= GENERIC_STM32_F446XE
USE_FPU ?= yes
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32G431, $(MCU)),)
@@ -438,6 +462,9 @@ ifneq ($(findstring STM32G431, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32G4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring STM32G474, $(MCU)),)
@@ -470,6 +497,46 @@ ifneq ($(findstring STM32G474, $(MCU)),)
# UF2 settings
UF2_FAMILY ?= STM32G4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
+endif
+
+ifneq (,$(filter $(MCU),STM32L432 STM32L442))
+ # Cortex version
+ MCU = cortex-m4
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 7
+
+ ## chip/board settings
+ # - the next two should match the directories in
+ # <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY = STM32
+ MCU_SERIES = STM32L4xx
+
+ # Linker script to use
+ # - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/
+ # or <keyboard_dir>/ld/
+ MCU_LDSCRIPT ?= STM32L432xC
+
+ # Startup code to use
+ # - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP ?= stm32l4xx
+
+ # Board: it should exist either in <chibios>/os/hal/boards/,
+ # <keyboard_dir>/boards/, or drivers/boards/
+ BOARD ?= GENERIC_STM32_L432XC
+
+ PLATFORM_NAME ?= platform_l432
+
+ USE_FPU ?= yes
+
+ # UF2 settings
+ UF2_FAMILY ?= STM32L4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq (,$(filter $(MCU),STM32L433 STM32L443))
@@ -504,6 +571,9 @@ ifneq (,$(filter $(MCU),STM32L433 STM32L443))
# UF2 settings
UF2_FAMILY ?= STM32L4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq (,$(filter $(MCU),STM32L412 STM32L422))
@@ -538,6 +608,9 @@ ifneq (,$(filter $(MCU),STM32L412 STM32L422))
# UF2 settings
UF2_FAMILY ?= STM32L4
+
+ # Bootloader address for STM32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
endif
ifneq ($(findstring WB32F3G71, $(MCU)),)
@@ -567,6 +640,10 @@ ifneq ($(findstring WB32F3G71, $(MCU)),)
BOARD ?= GENERIC_WB32_F3G71XX
USE_FPU ?= no
+
+ # Bootloader address for WB32 DFU
+ STM32_BOOTLOADER_ADDRESS ?= 0x1FFFE000
+ WB32_BOOTLOADER_ADDRESS ?= 0x1FFFE000
endif
ifneq ($(findstring GD32VF103, $(MCU)),)
diff --git a/builddefs/message.mk b/builddefs/message.mk
index cb4ef43719..d441f560be 100644
--- a/builddefs/message.mk
+++ b/builddefs/message.mk
@@ -87,6 +87,7 @@ define GENERATE_MSG_AVAILABLE_KEYMAPS
endef
MSG_AVAILABLE_KEYMAPS = $(eval $(call GENERATE_MSG_AVAILABLE_KEYMAPS))$(MSG_AVAILABLE_KEYMAPS_ACTUAL)
+MSG_BOOTLOADER_NOT_FOUND_BASE = Bootloader not found. Make sure the board is in bootloader mode. See https://docs.qmk.fm/\#/newbs_flashing\n
MSG_CHECK_FILESIZE = Checking file size of $(TARGET).$(FIRMWARE_FORMAT)
MSG_CHECK_FILESIZE_SKIPPED = (Firmware size check does not yet support $(MCU_ORIG); skipping)
MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n
@@ -97,6 +98,11 @@ MSG_PYTHON_MISSING = $(ERROR_COLOR)ERROR:$(NO_COLOR) Cannot run \"qmk hello\"!\n
Please run $(BOLD)qmk setup$(NO_COLOR) to install all the dependencies QMK requires.\n\n
MSG_FLASH_BOOTLOADER = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's bootloader is not specified or is not supported by the \":flash\" target at this time.\n\n
MSG_FLASH_ARCH = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's architecture is not supported by the \":flash\" target at this time.\n\n
-MSG_BOOTLOADER_NOT_FOUND = $(ERROR_COLOR)ERROR:$(NO_COLOR) Bootloader not found. Trying again in 5s (Ctrl+C to cancel)\n
+MSG_BOOTLOADER_NOT_FOUND = $(ERROR_COLOR)ERROR:$(NO_COLOR) $(MSG_BOOTLOADER_NOT_FOUND_BASE) Trying again in 5s (Ctrl+C to cancel)\n
BOOTLOADER_RETRY_TIME ?= 0.5
-MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY = Bootloader not found. Trying again every $(BOOTLOADER_RETRY_TIME)s (Ctrl+C to cancel)
+MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY = $(MSG_BOOTLOADER_NOT_FOUND_BASE) Trying again every $(BOOTLOADER_RETRY_TIME)s (Ctrl+C to cancel)
+
+define CATASTROPHIC_ERROR
+ $(shell printf "\n * %-99s $(ERROR_STRING)\n" "$2" >&2)
+ $(error $1)
+endef \ No newline at end of file
diff --git a/builddefs/testlist.mk b/builddefs/testlist.mk
new file mode 100644
index 0000000000..86da5668ac
--- /dev/null
+++ b/builddefs/testlist.mk
@@ -0,0 +1,19 @@
+TEST_LIST = $(sort $(patsubst %/test.mk,%, $(shell find $(ROOT_DIR)tests -type f -name test.mk)))
+FULL_TESTS := $(notdir $(TEST_LIST))
+
+include $(QUANTUM_PATH)/debounce/tests/testlist.mk
+include $(QUANTUM_PATH)/sequencer/tests/testlist.mk
+include $(PLATFORM_PATH)/test/testlist.mk
+
+define VALIDATE_TEST_LIST
+ ifneq ($1,)
+ ifeq ($$(findstring -,$1),-)
+ $$(call CATASTROPHIC_ERROR,Invalid test name,Test names can't contain '-', but '$1' does.)
+ else
+ $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2)))
+ endif
+ endif
+endef
+
+
+$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
diff --git a/common_features.mk b/common_features.mk
deleted file mode 100644
index 8c593024f0..0000000000
--- a/common_features.mk
+++ /dev/null
@@ -1,724 +0,0 @@
-# Copyright 2017 Fred Sundvik
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-QUANTUM_SRC += \
- $(QUANTUM_DIR)/quantum.c \
- $(QUANTUM_DIR)/send_string.c \
- $(QUANTUM_DIR)/bitwise.c \
- $(QUANTUM_DIR)/led.c \
- $(QUANTUM_DIR)/action.c \
- $(QUANTUM_DIR)/action_layer.c \
- $(QUANTUM_DIR)/action_macro.c \
- $(QUANTUM_DIR)/action_tapping.c \
- $(QUANTUM_DIR)/action_util.c \
- $(QUANTUM_DIR)/eeconfig.c \
- $(QUANTUM_DIR)/keyboard.c \
- $(QUANTUM_DIR)/keymap_common.c \
- $(QUANTUM_DIR)/keycode_config.c \
- $(QUANTUM_DIR)/sync_timer.c \
- $(QUANTUM_DIR)/logging/debug.c \
- $(QUANTUM_DIR)/logging/sendchar.c \
-
-VPATH += $(QUANTUM_DIR)/logging
-# Fall back to lib/printf if there is no platform provided print
-ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","")
- include $(QUANTUM_PATH)/logging/print.mk
-else
- include $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk
-endif
-
-ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), yes)
- OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
- CONSOLE_ENABLE = yes
-else ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), api)
- OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
-endif
-
-AUDIO_ENABLE ?= no
-ifeq ($(strip $(AUDIO_ENABLE)), yes)
- ifeq ($(PLATFORM),CHIBIOS)
- AUDIO_DRIVER ?= dac_basic
- ifeq ($(strip $(AUDIO_DRIVER)), dac_basic)
- OPT_DEFS += -DAUDIO_DRIVER_DAC
- else ifeq ($(strip $(AUDIO_DRIVER)), dac_additive)
- OPT_DEFS += -DAUDIO_DRIVER_DAC
- ## stm32f2 and above have a usable DAC unit, f1 do not, and need to use pwm instead
- else ifeq ($(strip $(AUDIO_DRIVER)), pwm_software)
- OPT_DEFS += -DAUDIO_DRIVER_PWM
- else ifeq ($(strip $(AUDIO_DRIVER)), pwm_hardware)
- OPT_DEFS += -DAUDIO_DRIVER_PWM
- endif
- else
- # fallback for all other platforms is pwm
- AUDIO_DRIVER ?= pwm_hardware
- OPT_DEFS += -DAUDIO_DRIVER_PWM
- endif
- OPT_DEFS += -DAUDIO_ENABLE
- MUSIC_ENABLE = yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
- SRC += $(QUANTUM_DIR)/process_keycode/process_clicky.c
- SRC += $(QUANTUM_DIR)/audio/audio.c ## common audio code, hardware agnostic
- SRC += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/audio_$(strip $(AUDIO_DRIVER)).c
- SRC += $(QUANTUM_DIR)/audio/voices.c
- SRC += $(QUANTUM_DIR)/audio/luts.c
-endif
-
-ifeq ($(strip $(SEQUENCER_ENABLE)), yes)
- OPT_DEFS += -DSEQUENCER_ENABLE
- MUSIC_ENABLE = yes
- SRC += $(QUANTUM_DIR)/sequencer/sequencer.c
- SRC += $(QUANTUM_DIR)/process_keycode/process_sequencer.c
-endif
-
-ifeq ($(strip $(MIDI_ENABLE)), yes)
- OPT_DEFS += -DMIDI_ENABLE
- MUSIC_ENABLE = yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
-endif
-
-MUSIC_ENABLE ?= no
-ifeq ($(MUSIC_ENABLE), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
-endif
-
-ifeq ($(strip $(STENO_ENABLE)), yes)
- OPT_DEFS += -DSTENO_ENABLE
- VIRTSER_ENABLE ?= yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
-endif
-
-ifeq ($(strip $(VIRTSER_ENABLE)), yes)
- OPT_DEFS += -DVIRTSER_ENABLE
-endif
-
-ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
- OPT_DEFS += -DMOUSEKEY_ENABLE
- MOUSE_ENABLE := yes
- SRC += $(QUANTUM_DIR)/mousekey.c
-endif
-
-VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick cirque_pinnacle_i2c cirque_pinnacle_spi pmw3360 pimoroni_trackball custom
-POINTING_DEVICE_DRIVER ?= custom
-ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
- ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),)
- $(error POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type)
- else
- OPT_DEFS += -DPOINTING_DEVICE_ENABLE
- MOUSE_ENABLE := yes
- SRC += $(QUANTUM_DIR)/pointing_device.c
- SRC += $(QUANTUM_DIR)/pointing_device_drivers.c
- ifneq ($(strip $(POINTING_DEVICE_DRIVER)), custom)
- SRC += drivers/sensors/$(strip $(POINTING_DEVICE_DRIVER)).c
- OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(shell echo $(POINTING_DEVICE_DRIVER) | tr '[:lower:]' '[:upper:]'))
- endif
- OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(POINTING_DEVICE_DRIVER))
- ifeq ($(strip $(POINTING_DEVICE_DRIVER)), adns9800)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
- QUANTUM_LIB_SRC += spi_master.c
- else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), analog_joystick)
- OPT_DEFS += -DSTM32_ADC -DHAL_USE_ADC=TRUE
- LIB_SRC += analog.c
- else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_i2c)
- OPT_DEFS += -DSTM32_I2C -DHAL_USE_I2C=TRUE
- SRC += drivers/sensors/cirque_pinnacle.c
- QUANTUM_LIB_SRC += i2c_master.c
- else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_spi)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
- SRC += drivers/sensors/cirque_pinnacle.c
- QUANTUM_LIB_SRC += spi_master.c
- else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_I2C=TRUE
- QUANTUM_LIB_SRC += i2c_master.c
- else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3360)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
- QUANTUM_LIB_SRC += spi_master.c
- endif
- endif
-endif
-
-VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi
-EEPROM_DRIVER ?= vendor
-ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
- $(error EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
-else
- OPT_DEFS += -DEEPROM_ENABLE
- ifeq ($(strip $(EEPROM_DRIVER)), custom)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- SRC += eeprom_driver.c
- else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- QUANTUM_LIB_SRC += i2c_master.c
- SRC += eeprom_driver.c eeprom_i2c.c
- else ifeq ($(strip $(EEPROM_DRIVER)), spi)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- QUANTUM_LIB_SRC += spi_master.c
- SRC += eeprom_driver.c eeprom_spi.c
- else ifeq ($(strip $(EEPROM_DRIVER)), transient)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- SRC += eeprom_driver.c eeprom_transient.c
- else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
- OPT_DEFS += -DEEPROM_VENDOR
- ifeq ($(PLATFORM),AVR)
- # Automatically provided by avr-libc, nothing required
- else ifeq ($(PLATFORM),CHIBIOS)
- ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
- OPT_DEFS += -DEEPROM_DRIVER
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- SRC += eeprom_driver.c
- SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
- SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
- else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
- OPT_DEFS += -DEEPROM_DRIVER
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
- SRC += eeprom_driver.c
- SRC += eeprom_stm32_L0_L1.c
- else
- # This will effectively work the same as "transient" if not supported by the chip
- SRC += $(PLATFORM_COMMON_DIR)/eeprom_teensy.c
- endif
- else ifeq ($(PLATFORM),ARM_ATSAM)
- SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
- else ifeq ($(PLATFORM),TEST)
- SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
- endif
- endif
-endif
-
-RGBLIGHT_ENABLE ?= no
-VALID_RGBLIGHT_TYPES := WS2812 APA102 custom
-
-ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
- RGBLIGHT_DRIVER ?= custom
-endif
-
-ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
- RGBLIGHT_DRIVER ?= WS2812
-
- ifeq ($(filter $(RGBLIGHT_DRIVER),$(VALID_RGBLIGHT_TYPES)),)
- $(error RGBLIGHT_DRIVER="$(RGBLIGHT_DRIVER)" is not a valid RGB type)
- else
- COMMON_VPATH += $(QUANTUM_DIR)/rgblight
- POST_CONFIG_H += $(QUANTUM_DIR)/rgblight/rgblight_post_config.h
- OPT_DEFS += -DRGBLIGHT_ENABLE
- SRC += $(QUANTUM_DIR)/color.c
- SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
- CIE1931_CURVE := yes
- RGB_KEYCODES_ENABLE := yes
- endif
-
- ifeq ($(strip $(RGBLIGHT_DRIVER)), WS2812)
- WS2812_DRIVER_REQUIRED := yes
- endif
-
- ifeq ($(strip $(RGBLIGHT_DRIVER)), APA102)
- APA102_DRIVER_REQUIRED := yes
- endif
-
- ifeq ($(strip $(RGBLIGHT_DRIVER)), custom)
- OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
- endif
-endif
-
-LED_MATRIX_ENABLE ?= no
-VALID_LED_MATRIX_TYPES := IS31FL3731 custom
-# TODO: IS31FL3733 IS31FL3737 IS31FL3741
-
-ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
- ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
- $(error "$(LED_MATRIX_DRIVER)" is not a valid matrix type)
- endif
- OPT_DEFS += -DLED_MATRIX_ENABLE
-ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
- # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
- OPT_DEFS += -DLIB8_ATTINY
-endif
- COMMON_VPATH += $(QUANTUM_DIR)/led_matrix
- COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations
- COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations/runners
- SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
- SRC += $(QUANTUM_DIR)/led_matrix/led_matrix.c
- SRC += $(QUANTUM_DIR)/led_matrix/led_matrix_drivers.c
- SRC += $(LIB_PATH)/lib8tion/lib8tion.c
- CIE1931_CURVE := yes
-
- ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3731)
- OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led/issi
- SRC += is31fl3731-simple.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-endif
-
-RGB_MATRIX_ENABLE ?= no
-VALID_RGB_MATRIX_TYPES := AW20216 IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 CKLED2001 WS2812 custom
-
-ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),)
- $(error "$(RGB_MATRIX_DRIVER)" is not a valid matrix type)
- endif
- OPT_DEFS += -DRGB_MATRIX_ENABLE
-ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
- # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
- OPT_DEFS += -DLIB8_ATTINY
-endif
- COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix
- COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations
- COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations/runners
- SRC += $(QUANTUM_DIR)/color.c
- SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix.c
- SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix_drivers.c
- SRC += $(LIB_PATH)/lib8tion/lib8tion.c
- CIE1931_CURVE := yes
- RGB_KEYCODES_ENABLE := yes
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), AW20216)
- OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += aw20216.c
- QUANTUM_LIB_SRC += spi_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3731)
- OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led/issi
- SRC += is31fl3731.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3733)
- OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led/issi
- SRC += is31fl3733.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3737)
- OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led/issi
- SRC += is31fl3737.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3741)
- OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led/issi
- SRC += is31fl3741.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), CKLED2001)
- OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
- COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += ckled2001.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), WS2812)
- OPT_DEFS += -DWS2812
- WS2812_DRIVER_REQUIRED := yes
- endif
-
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), APA102)
- OPT_DEFS += -DAPA102
- APA102_DRIVER_REQUIRED := yes
- endif
-
- ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes)
- OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB
- endif
-
- ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes)
- OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER
- endif
-endif
-
-ifeq ($(strip $(RGB_KEYCODES_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_rgb.c
-endif
-
-ifeq ($(strip $(PRINTING_ENABLE)), yes)
- OPT_DEFS += -DPRINTING_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
- SRC += $(TMK_DIR)/protocol/serial_uart.c
-endif
-
-VARIABLE_TRACE ?= no
-ifneq ($(strip $(VARIABLE_TRACE)),no)
- SRC += $(QUANTUM_DIR)/variable_trace.c
- OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
- ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
- OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
- endif
-endif
-
-ifeq ($(strip $(SLEEP_LED_ENABLE)), yes)
- SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
- OPT_DEFS += -DSLEEP_LED_ENABLE
-
- NO_SUSPEND_POWER_DOWN := yes
-endif
-
-VALID_BACKLIGHT_TYPES := pwm timer software custom
-
-BACKLIGHT_ENABLE ?= no
-ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
- BACKLIGHT_DRIVER ?= software
-else
- BACKLIGHT_DRIVER ?= pwm
-endif
-ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
- ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
- $(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
- endif
-
- COMMON_VPATH += $(QUANTUM_DIR)/backlight
- SRC += $(QUANTUM_DIR)/backlight/backlight.c
- SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
- OPT_DEFS += -DBACKLIGHT_ENABLE
-
- ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
- OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
- else
- SRC += $(QUANTUM_DIR)/backlight/backlight_driver_common.c
- ifeq ($(strip $(BACKLIGHT_DRIVER)), pwm)
- SRC += $(QUANTUM_DIR)/backlight/backlight_$(PLATFORM_KEY).c
- else
- SRC += $(QUANTUM_DIR)/backlight/backlight_$(strip $(BACKLIGHT_DRIVER)).c
- endif
- endif
-endif
-
-VALID_WS2812_DRIVER_TYPES := bitbang pwm spi i2c
-
-WS2812_DRIVER ?= bitbang
-ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
- ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
- $(error WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
- endif
-
- OPT_DEFS += -DWS2812_DRIVER_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
-
- ifeq ($(strip $(WS2812_DRIVER)), bitbang)
- SRC += ws2812.c
- else
- SRC += ws2812_$(strip $(WS2812_DRIVER)).c
-
- ifeq ($(strip $(PLATFORM)), CHIBIOS)
- ifeq ($(strip $(WS2812_DRIVER)), pwm)
- OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
- endif
- endif
- endif
-
- # add extra deps
- ifeq ($(strip $(WS2812_DRIVER)), i2c)
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-endif
-
-ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
- COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += apa102.c
-endif
-
-ifeq ($(strip $(CIE1931_CURVE)), yes)
- OPT_DEFS += -DUSE_CIE1931_CURVE
- LED_TABLES := yes
-endif
-
-ifeq ($(strip $(LED_TABLES)), yes)
- SRC += $(QUANTUM_DIR)/led_tables.c
-endif
-
-ifeq ($(strip $(TERMINAL_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
- OPT_DEFS += -DTERMINAL_ENABLE
- OPT_DEFS += -DUSER_PRINT
-endif
-
-ifeq ($(strip $(VIA_ENABLE)), yes)
- DYNAMIC_KEYMAP_ENABLE := yes
- RAW_ENABLE := yes
- BOOTMAGIC_ENABLE := yes
- SRC += $(QUANTUM_DIR)/via.c
- OPT_DEFS += -DVIA_ENABLE
-endif
-
-VALID_MAGIC_TYPES := yes
-BOOTMAGIC_ENABLE ?= no
-ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
- ifeq ($(filter $(BOOTMAGIC_ENABLE),$(VALID_MAGIC_TYPES)),)
- $(error BOOTMAGIC_ENABLE="$(BOOTMAGIC_ENABLE)" is not a valid type of magic)
- endif
- ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
- OPT_DEFS += -DBOOTMAGIC_LITE
- QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/bootmagic_lite.c
- endif
-endif
-COMMON_VPATH += $(QUANTUM_DIR)/bootmagic
-QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/magic.c
-
-VALID_CUSTOM_MATRIX_TYPES:= yes lite no
-
-CUSTOM_MATRIX ?= no
-
-ifneq ($(strip $(CUSTOM_MATRIX)), yes)
- ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),)
- $(error CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type)
- endif
-
- # Include common stuff for all non custom matrix users
- QUANTUM_SRC += $(QUANTUM_DIR)/matrix_common.c
-
- # if 'lite' then skip the actual matrix implementation
- ifneq ($(strip $(CUSTOM_MATRIX)), lite)
- # Include the standard or split matrix code if needed
- QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
- endif
-endif
-
-# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
-DEBOUNCE_TYPE ?= sym_defer_g
-ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
- QUANTUM_SRC += $(QUANTUM_DIR)/debounce/$(strip $(DEBOUNCE_TYPE)).c
-endif
-
-ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
- POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h
- OPT_DEFS += -DSPLIT_KEYBOARD
- CRC_ENABLE := yes
-
- # Include files used by all split keyboards
- QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
-
- # Determine which (if any) transport files are required
- ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
- QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c \
- $(QUANTUM_DIR)/split_common/transactions.c
-
- OPT_DEFS += -DSPLIT_COMMON_TRANSACTIONS
-
- # Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
- # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
- ifeq ($(PLATFORM),AVR)
- ifneq ($(NO_I2C),yes)
- QUANTUM_LIB_SRC += i2c_master.c \
- i2c_slave.c
- endif
- endif
-
- SERIAL_DRIVER ?= bitbang
- OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
- ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
- QUANTUM_LIB_SRC += serial.c
- else
- QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
- endif
- endif
- COMMON_VPATH += $(QUANTUM_PATH)/split_common
-endif
-
-ifeq ($(strip $(CRC_ENABLE)), yes)
- OPT_DEFS += -DCRC_ENABLE
- SRC += crc.c
-endif
-
-ifeq ($(strip $(HAPTIC_ENABLE)),yes)
- COMMON_VPATH += $(DRIVER_PATH)/haptic
-
- ifneq ($(filter DRV2605L, $(HAPTIC_DRIVER)), )
- SRC += DRV2605L.c
- QUANTUM_LIB_SRC += i2c_master.c
- OPT_DEFS += -DDRV2605L
- endif
-
- ifneq ($(filter SOLENOID, $(HAPTIC_DRIVER)), )
- SRC += solenoid.c
- OPT_DEFS += -DSOLENOID_ENABLE
- endif
-endif
-
-ifeq ($(strip $(HD44780_ENABLE)), yes)
- SRC += platforms/avr/drivers/hd44780.c
- OPT_DEFS += -DHD44780_ENABLE
-endif
-
-VALID_OLED_DRIVER_TYPES := SSD1306 custom
-OLED_DRIVER ?= SSD1306
-ifeq ($(strip $(OLED_ENABLE)), yes)
- ifeq ($(filter $(OLED_DRIVER),$(VALID_OLED_DRIVER_TYPES)),)
- $(error OLED_DRIVER="$(OLED_DRIVER)" is not a valid OLED driver)
- else
- OPT_DEFS += -DOLED_ENABLE
- COMMON_VPATH += $(DRIVER_PATH)/oled
-
- OPT_DEFS += -DOLED_DRIVER_$(strip $(shell echo $(OLED_DRIVER) | tr '[:lower:]' '[:upper:]'))
- ifeq ($(strip $(OLED_DRIVER)), SSD1306)
- SRC += ssd1306_sh1106.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
- endif
-endif
-
-ifeq ($(strip $(ST7565_ENABLE)), yes)
- OPT_DEFS += -DST7565_ENABLE
- COMMON_VPATH += $(DRIVER_PATH)/oled # For glcdfont.h
- COMMON_VPATH += $(DRIVER_PATH)/lcd
- QUANTUM_LIB_SRC += spi_master.c
- SRC += st7565.c
-endif
-
-ifeq ($(strip $(UCIS_ENABLE)), yes)
- OPT_DEFS += -DUCIS_ENABLE
- UNICODE_COMMON := yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
-endif
-
-ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
- OPT_DEFS += -DUNICODEMAP_ENABLE
- UNICODE_COMMON := yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
-endif
-
-ifeq ($(strip $(UNICODE_ENABLE)), yes)
- OPT_DEFS += -DUNICODE_ENABLE
- UNICODE_COMMON := yes
- SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
-endif
-
-ifeq ($(strip $(UNICODE_COMMON)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
-endif
-
-MAGIC_ENABLE ?= yes
-ifeq ($(strip $(MAGIC_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
- OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
-endif
-
-ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
- OPT_DEFS += -DAUTO_SHIFT_ENABLE
- ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
- OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
- endif
-endif
-
-ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
- PS2_ENABLE := yes
- SRC += ps2_mouse.c
- OPT_DEFS += -DPS2_MOUSE_ENABLE
- OPT_DEFS += -DMOUSE_ENABLE
-endif
-
-ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
- PS2_ENABLE := yes
- SRC += ps2_busywait.c
- SRC += ps2_io_avr.c
- OPT_DEFS += -DPS2_USE_BUSYWAIT
-endif
-
-ifeq ($(strip $(PS2_USE_INT)), yes)
- PS2_ENABLE := yes
- SRC += ps2_interrupt.c
- SRC += ps2_io.c
- OPT_DEFS += -DPS2_USE_INT
-endif
-
-ifeq ($(strip $(PS2_USE_USART)), yes)
- PS2_ENABLE := yes
- SRC += ps2_usart.c
- SRC += ps2_io.c
- OPT_DEFS += -DPS2_USE_USART
-endif
-
-ifeq ($(strip $(PS2_ENABLE)), yes)
- COMMON_VPATH += $(DRIVER_PATH)/ps2
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/ps2
- OPT_DEFS += -DPS2_ENABLE
-endif
-
-JOYSTICK_ENABLE ?= no
-VALID_JOYSTICK_TYPES := analog digital
-JOYSTICK_DRIVER ?= analog
-ifeq ($(strip $(JOYSTICK_ENABLE)), yes)
- ifeq ($(filter $(JOYSTICK_DRIVER),$(VALID_JOYSTICK_TYPES)),)
- $(error "$(JOYSTICK_DRIVER)" is not a valid joystick driver)
- endif
- OPT_DEFS += -DJOYSTICK_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_joystick.c
- SRC += $(QUANTUM_DIR)/joystick.c
-
- ifeq ($(strip $(JOYSTICK_DRIVER)), analog)
- OPT_DEFS += -DANALOG_JOYSTICK_ENABLE
- SRC += analog.c
- endif
- ifeq ($(strip $(JOYSTICK_DRIVER)), digital)
- OPT_DEFS += -DDIGITAL_JOYSTICK_ENABLE
- endif
-endif
-
-USBPD_ENABLE ?= no
-VALID_USBPD_DRIVER_TYPES = custom vendor
-USBPD_DRIVER ?= vendor
-ifeq ($(strip $(USBPD_ENABLE)), yes)
- ifeq ($(filter $(strip $(USBPD_DRIVER)),$(VALID_USBPD_DRIVER_TYPES)),)
- $(error USBPD_DRIVER="$(USBPD_DRIVER)" is not a valid USBPD driver)
- else
- OPT_DEFS += -DUSBPD_ENABLE
- ifeq ($(strip $(USBPD_DRIVER)), vendor)
- # Vendor-specific implementations
- OPT_DEFS += -DUSBPD_VENDOR
- ifeq ($(strip $(MCU_SERIES)), STM32G4xx)
- OPT_DEFS += -DUSBPD_STM32G4
- SRC += usbpd_stm32g4.c
- else
- $(error There is no vendor-provided USBPD driver available)
- endif
- else ifeq ($(strip $(USBPD_DRIVER)), custom)
- OPT_DEFS += -DUSBPD_CUSTOM
- # Board designers can add their own driver to $(SRC)
- endif
- endif
-endif
-
-BLUETOOTH_ENABLE ?= no
-VALID_BLUETOOTH_DRIVER_TYPES := AdafruitBLE RN42 custom
-ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
- ifeq ($(filter $(strip $(BLUETOOTH_DRIVER)),$(VALID_BLUETOOTH_DRIVER_TYPES)),)
- $(error "$(BLUETOOTH_DRIVER)" is not a valid Bluetooth driver type)
- endif
- OPT_DEFS += -DBLUETOOTH_ENABLE
- NO_USB_STARTUP_CHECK := yes
- COMMON_VPATH += $(DRIVER_PATH)/bluetooth
- SRC += outputselect.c
-
- ifeq ($(strip $(BLUETOOTH_DRIVER)), AdafruitBLE)
- OPT_DEFS += -DMODULE_ADAFRUIT_BLE
- SRC += analog.c
- SRC += $(DRIVER_PATH)/bluetooth/adafruit_ble.cpp
- QUANTUM_LIB_SRC += spi_master.c
- endif
-
- ifeq ($(strip $(BLUETOOTH_DRIVER)), RN42)
- OPT_DEFS += -DMODULE_RN42
- SRC += $(TMK_DIR)/protocol/serial_uart.c
- endif
-endif
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json
index 3cb64dd3a2..cfe8807d43 100644
--- a/data/mappings/info_config.json
+++ b/data/mappings/info_config.json
@@ -15,6 +15,8 @@
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
"DEBOUNCE": {"info_key": "debounce", "value_type": "int"},
"DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
+ # TODO: Replace ^^^ with vvv
+ #"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version"},
"DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},
"DIODE_DIRECTION": {"info_key": "diode_direction"},
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
diff --git a/data/mappings/keyboard_aliases.json b/data/mappings/keyboard_aliases.json
index c9467f7c84..343812718e 100644
--- a/data/mappings/keyboard_aliases.json
+++ b/data/mappings/keyboard_aliases.json
@@ -41,8 +41,14 @@
'atom47/rev3': {
target: 'maartenwut/atom47/rev3'
},
+ bakeneko60: {
+ target: 'kkatano/bakeneko60'
+ },
bakeneko65: {
- target: 'bakeneko65/rev2'
+ target: 'kkatano/bakeneko65/rev2'
+ },
+ bakeneko80: {
+ target: 'kkatano/bakeneko80'
},
bear_face: {
target: 'bear_face/v1'
@@ -215,6 +221,9 @@
LAYOUT: 'LAYOUT_all'
}
},
+ idobo: {
+ target: 'idobao/id75'
+ },
'jj40': {
target: 'kprepublic/jj40'
},
@@ -260,6 +269,9 @@
'lfkeyboards/smk65': {
target: 'lfkeyboards/smk65/revb'
},
+ m3v3van: {
+ target: 'matthewdias/m3n3van'
+ },
'maartenwut/atom47/rev2': {
target: 'evyd13/atom47/rev2'
},
@@ -353,9 +365,15 @@
'mechlovin/hannah65': {
target: 'mechlovin/hannah65/rev1'
},
+ minim: {
+ target: 'matthewdias/minim'
+ },
model01: {
target: 'keyboardio/model01'
},
+ model_v: {
+ target: 'matthewdias/model_v'
+ },
m0lly: {
target: 'tkc/m0lly'
},
@@ -498,6 +516,9 @@
'tokyo60': {
target: 'tokyokeyboard/tokyo60'
},
+ 'txuu': {
+ target: 'matthewdias/txuu'
+ },
underscore33: {
target: 'underscore33/rev1'
},
@@ -550,7 +571,7 @@
target: 'xelus/valor/rev1'
},
yd60mq: {
- target: 'yd60mq/12led'
+ target: 'ymdk/yd60mq/12led'
},
ymd75: {
target: 'ymd75/rev1'
@@ -563,5 +584,615 @@
},
zeal65: {
target: 'wilba_tech/zeal65'
+ },
+ # Moved during 2022 Q1 cycle
+ 6ball: {
+ target: 'maple_computing/6ball'
+ },
+ 7skb: {
+ target: 'salicylic_acid3/7skb'
+ },
+ 7splus: {
+ target: 'salicylic_acid3/7splus'
+ },
+ acr60: {
+ target: 'mechkeys/acr60'
+ },
+ adalyn: {
+ target: 'tominabox1/adalyn'
+ },
+ ajisai74: {
+ target: 'salicylic_acid3/ajisai74'
+ },
+ aleth42: {
+ target: '25keys/aleth42'
+ },
+ alicia_cook: {
+ target: 'ibnuda/alicia_cook'
+ },
+ allison: {
+ target: 'prototypist/allison'
+ },
+ allison_numpad: {
+ target: 'prototypist/allison_numpad'
+ },
+ alu84: {
+ target: 'mechkeys/alu84'
+ },
+ angel17: {
+ target: 'kakunpc/angel17'
+ },
+ angel64/alpha: {
+ target: 'kakunpc/angel64/alpha'
+ },
+ angel64/rev1: {
+ target: 'kakunpc/angel64/rev1'
+ },
+ arch_36: {
+ target: 'obosob/arch_36'
+ },
+ bakeneko60: {
+ target: 'kkatano/bakeneko60'
+ },
+ bakeneko65/rev2: {
+ target: 'kkatano/bakeneko65/rev2'
+ },
+ bakeneko65/rev3: {
+ target: 'kkatano/bakeneko65/rev3'
+ },
+ bakeneko80: {
+ target: 'kkatano/bakeneko80'
+ },
+ barleycorn: {
+ target: 'yiancardesigns/barleycorn'
+ },
+ bat43/rev1: {
+ target: 'dailycraft/bat43/rev1'
+ },
+ bat43/rev2: {
+ target: 'dailycraft/bat43/rev2'
+ },
+ bigseries/1key: {
+ target: 'woodkeys/bigseries/1key'
+ },
+ bigseries/2key: {
+ target: 'woodkeys/bigseries/2key'
+ },
+ bigseries/3key: {
+ target: 'woodkeys/bigseries/3key'
+ },
+ bigseries/4key: {
+ target: 'woodkeys/bigseries/4key'
+ },
+ bkf: {
+ target: 'drhigsby/bkf'
+ },
+ business_card/alpha: {
+ target: 'kakunpc/business_card/alpha'
+ },
+ business_card/beta: {
+ target: 'kakunpc/business_card/beta'
+ },
+ butterstick: {
+ target: 'gboards/butterstick'
+ },
+ c39: {
+ target: 'maple_computing/c39'
+ },
+ cassette42: {
+ target: '25keys/cassette42'
+ },
+ chidori: {
+ target: 'kagizaraya/chidori'
+ },
+ chili: {
+ target: 'ydkb/chili'
+ },
+ chimera_ergo: {
+ target: 'glenpickle/chimera_ergo'
+ },
+ chimera_ls: {
+ target: 'glenpickle/chimera_ls'
+ },
+ chimera_ortho: {
+ target: 'glenpickle/chimera_ortho'
+ },
+ chimera_ortho_plus: {
+ target: 'glenpickle/chimera_ortho_plus'
+ },
+ choc_taro: {
+ target: 'kakunpc/choc_taro'
+ },
+ choco60: {
+ target: 'recompile_keys/choco60'
+ },
+ christmas_tree: {
+ target: 'maple_computing/christmas_tree'
+ },
+ claw44/rev1: {
+ target: 'dailycraft/claw44/rev1'
+ },
+ cocoa40: {
+ target: 'recompile_keys/cocoa40'
+ },
+ comet46: {
+ target: 'satt/comet46'
+ },
+ cu24: {
+ target: 'capsunlocked/cu24'
+ },
+ cu75: {
+ target: 'capsunlocked/cu75'
+ },
+ cu80: {
+ target: 'capsunlocked/cu80/v1'
+ },
+ delilah: {
+ target: 'rainkeebs/delilah'
+ },
+ diverge3: {
+ target: 'unikeyboard/diverge3'
+ },
+ divergetm2: {
+ target: 'unikeyboard/divergetm2'
+ },
+ dozen0: {
+ target: 'yynmt/dozen0'
+ },
+ dubba175: {
+ target: 'drhigsby/dubba175'
+ },
+ eggman: {
+ target: 'qpockets/eggman'
+ },
+ ergo42: {
+ target: 'biacco42/ergo42'
+ },
+ ergoarrows: {
+ target: 'salicylic_acid3/ergoarrows'
+ },
+ ergodash/mini: {
+ target: 'omkbd/ergodash/mini'
+ },
+ ergodash/rev1: {
+ target: 'omkbd/ergodash/rev1'
+ },
+ ergodox_infinity: {
+ target: 'input_club/ergodox_infinity'
+ },
+ ergotaco: {
+ target: 'gboards/ergotaco'
+ },
+ espectro: {
+ target: 'mechkeys/espectro'
+ },
+ felix: {
+ target: 'unikeyboard/felix'
+ },
+ four_banger: {
+ target: 'bpiphany/four_banger'
+ },
+ freyr: {
+ target: 'hnahkb/freyr'
+ },
+ geminate60: {
+ target: 'weirdo/geminate60'
+ },
+ georgi: {
+ target: 'gboards/georgi'
+ },
+ gergo: {
+ target: 'gboards/gergo'
+ },
+ getta25: {
+ target: 'salicylic_acid3/getta25'
+ },
+ gingham: {
+ target: 'yiancardesigns/gingham'
+ },
+ gurindam: {
+ target: 'ibnuda/gurindam'
+ },
+ halberd: {
+ target: 'kagizaraya/halberd'
+ },
+ hecomi/alpha: {
+ target: 'takashiski/hecomi/alpha'
+ },
+ hid_liber: {
+ target: 'bpiphany/hid_liber'
+ },
+ id67/default_rgb: {
+ target: 'idobao/id67/default_rgb'
+ },
+ id67/rgb: {
+ target: 'idobao/id67/rgb'
+ },
+ id80: {
+ target: 'idobao/id80/v1'
+ },
+ id87: {
+ target: 'idobao/id87/v1'
+ },
+ idobo: {
+ target: 'idobao/id75/v1'
+ },
+ infinity60: {
+ target: 'input_club/infinity60'
+ },
+ ivy/rev1: {
+ target: 'maple_computing/ivy/rev1'
+ },
+ jisplit89: {
+ target: 'salicylic_acid3/jisplit89'
+ },
+ jnao: {
+ target: 'maple_computing/jnao'
+ },
+ just60: {
+ target: 'ydkb/just60'
+ },
+ k_type: {
+ target: 'input_club/k_type'
+ },
+ kagamidget: {
+ target: 'yynmt/kagamidget'
+ },
+ kelowna/rgb64: {
+ target: 'weirdo/kelowna/rgb64'
+ },
+ kprepublic/bm65hsrgb_iso: {
+ target: 'kprepublic/bm65hsrgb_iso/rev1'
+ },
+ kprepublic/bm68hsrgb: {
+ target: 'kprepublic/bm68hsrgb/rev1'
+ },
+ latin17rgb: {
+ target: 'latincompass/latin17rgb'
+ },
+ latin47ble: {
+ target: 'latincompass/latin47ble'
+ },
+ latin60rgb: {
+ target: 'latincompass/latin60rgb'
+ },
+ latin64ble: {
+ target: 'latincompass/latin64ble'
+ },
+ latin6rgb: {
+ target: 'latincompass/latin6rgb'
+ },
+ latinpad: {
+ target: 'latincompass/latinpad'
+ },
+ latinpadble: {
+ target: 'latincompass/latinpadble'
+ },
+ launchpad/rev1: {
+ target: 'maple_computing/launchpad/rev1'
+ },
+ lck75: {
+ target: 'lyso1/lck75'
+ },
+ le_chiffre: {
+ target: 'tominabox1/le_chiffre'
+ },
+ lefishe: {
+ target: 'lyso1/lefishe'
+ },
+ lets_split_eh/eh: {
+ target: 'maple_computing/lets_split_eh/eh'
+ },
+ ls_60: {
+ target: 'weirdo/ls_60'
+ },
+ m3n3van: {
+ target: 'matthewdias/m3n3van'
+ },
+ mechmini/v1: {
+ target: 'mechkeys/mechmini/v1'
+ },
+ mechmini/v2: {
+ target: 'mechkeys/mechmini/v2'
+ },
+ meira: {
+ target: 'woodkeys/meira'
+ },
+ meishi: {
+ target: 'biacco42/meishi'
+ },
+ meishi2: {
+ target: 'biacco42/meishi2'
+ },
+ minidox/rev1: {
+ target: 'maple_computing/minidox/rev1'
+ },
+ minim: {
+ target: 'matthewdias/minim'
+ },
+ mio: {
+ target: 'recompile_keys/mio'
+ },
+ model_v: {
+ target: 'matthewdias/model_v'
+ },
+ montex: {
+ target: 'idobao/montex/v1'
+ },
+ nafuda: {
+ target: 'salicylic_acid3/nafuda'
+ },
+ naiping/np64: {
+ target: 'weirdo/naiping/np64'
+ },
+ naiping/nphhkb: {
+ target: 'weirdo/naiping/nphhkb'
+ },
+ naiping/npminila: {
+ target: 'weirdo/naiping/npminila'
+ },
+ naked48: {
+ target: 'salicylic_acid3/naked48'
+ },
+ naked60: {
+ target: 'salicylic_acid3/naked60'
+ },
+ naked64: {
+ target: 'salicylic_acid3/naked64'
+ },
+ namecard2x4: {
+ target: 'takashiski/namecard2x4'
+ },
+ nebula12: {
+ target: 'spaceholdings/nebula12'
+ },
+ nebula68: {
+ target: 'spaceholdings/nebula68'
+ },
+ nebula68b: {
+ target: 'spaceholdings/nebula68b'
+ },
+ niu_mini: {
+ target: 'kbdfans/niu_mini'
+ },
+ nk1: {
+ target: 'novelkeys/nk1'
+ },
+ nk65: {
+ target: 'novelkeys/nk65'
+ },
+ nk87: {
+ target: 'novelkeys/nk87'
+ },
+ nknl7en: {
+ target: 'salicylic_acid3/nknl7en'
+ },
+ nknl7jp: {
+ target: 'salicylic_acid3/nknl7jp'
+ },
+ nomu30: {
+ target: 'recompile_keys/nomu30'
+ },
+ novelpad: {
+ target: 'novelkeys/novelpad'
+ },
+ ogurec: {
+ target: 'drhigsby/ogurec'
+ },
+ otaku_split/rev0: {
+ target: 'takashiski/otaku_split/rev0'
+ },
+ otaku_split/rev1: {
+ target: 'takashiski/otaku_split/rev1'
+ },
+ owl8: {
+ target: 'dailycraft/owl8'
+ },
+ packrat: {
+ target: 'drhigsby/packrat'
+ },
+ pistachio: {
+ target: 'rate/pistachio'
+ },
+ pistachio_mp: {
+ target: 'rate/pistachio_mp'
+ },
+ pistachio_pro: {
+ target: 'rate/pistachio_pro'
+ },
+ plexus75: {
+ target: 'checkerboards/plexus75'
+ },
+ pursuit40: {
+ target: 'checkerboards/pursuit40'
+ },
+ qaz: {
+ target: 'tominabox1/qaz'
+ },
+ quark: {
+ target: 'checkerboards/quark'
+ },
+ rabbit_capture_plan: {
+ target: 'kakunpc/rabbit_capture_plan'
+ },
+ rainkeeb: {
+ target: 'rainkeebs/rainkeeb'
+ },
+ reviung33: {
+ target: 'reviung/reviung33'
+ },
+ reviung34: {
+ target: 'reviung/reviung34'
+ },
+ reviung39: {
+ target: 'reviung/reviung39'
+ },
+ reviung41: {
+ target: 'reviung/reviung41'
+ },
+ reviung5: {
+ target: 'reviung/reviung5'
+ },
+ reviung53: {
+ target: 'reviung/reviung53'
+ },
+ reviung61: {
+ target: 'reviung/reviung61'
+ },
+ runner3680/3x6: {
+ target: 'omkbd/runner3680/3x6'
+ },
+ runner3680/3x7: {
+ target: 'omkbd/runner3680/3x7'
+ },
+ runner3680/3x8: {
+ target: 'omkbd/runner3680/3x8'
+ },
+ runner3680/4x6: {
+ target: 'omkbd/runner3680/4x6'
+ },
+ runner3680/4x7: {
+ target: 'omkbd/runner3680/4x7'
+ },
+ runner3680/4x8: {
+ target: 'omkbd/runner3680/4x8'
+ },
+ runner3680/5x6: {
+ target: 'omkbd/runner3680/5x6'
+ },
+ runner3680/5x6_5x8: {
+ target: 'omkbd/runner3680/5x6_5x8'
+ },
+ runner3680/5x7: {
+ target: 'omkbd/runner3680/5x7'
+ },
+ runner3680/5x8: {
+ target: 'omkbd/runner3680/5x8'
+ },
+ scarletbandana: {
+ target: 'woodkeys/scarletbandana'
+ },
+ scythe: {
+ target: 'kagizaraya/scythe'
+ },
+ seigaiha: {
+ target: 'yiancardesigns/seigaiha'
+ },
+ setta21: {
+ target: 'salicylic_acid3/setta21'
+ },
+ space_space/rev1: {
+ target: 'qpockets/space_space/rev1'
+ },
+ space_space/rev2: {
+ target: 'qpockets/space_space/rev2'
+ },
+ spiderisland/winry25tc: {
+ target: 'winry/winry25tc'
+ },
+ splitreus62: {
+ target: 'nacly/splitreus62'
+ },
+ squiggle/rev1: {
+ target: 'ibnuda/squiggle/rev1'
+ },
+ standaside: {
+ target: 'edi/standaside'
+ },
+ steal_this_keyboard: {
+ target: 'obosob/steal_this_keyboard'
+ },
+ stella: {
+ target: 'hnahkb/stella'
+ },
+ suihankey/alpha: {
+ target: 'kakunpc/suihankey/alpha'
+ },
+ suihankey/rev1: {
+ target: 'kakunpc/suihankey/rev1'
+ },
+ suihankey/split: {
+ target: 'kakunpc/suihankey/split'
+ },
+ the_ruler: {
+ target: 'maple_computing/the_ruler'
+ },
+ thedogkeyboard: {
+ target: 'kakunpc/thedogkeyboard'
+ },
+ tiger910: {
+ target: 'weirdo/tiger910'
+ },
+ treadstone32: {
+ target: 'marksard/treadstone32'
+ },
+ treadstone48/rev1: {
+ target: 'marksard/treadstone48/rev1'
+ },
+ treadstone48/rev2: {
+ target: 'marksard/treadstone48/rev2'
+ },
+ txuu: {
+ target: 'matthewdias/txuu'
+ },
+ ua62: {
+ target: 'nacly/ua62'
+ },
+ underscore33/rev1: {
+ target: 'tominabox1/underscore33/rev1'
+ },
+ underscore33/rev2: {
+ target: 'tominabox1/underscore33/rev2'
+ },
+ vn66: {
+ target: 'hnahkb/vn66'
+ },
+ wallaby: {
+ target: 'kkatano/wallaby'
+ },
+ wanten: {
+ target: 'qpockets/wanten'
+ },
+ whitefox: {
+ target: 'input_club/whitefox'
+ },
+ wings42/rev1: {
+ target: 'dailycraft/wings42/rev1'
+ },
+ wings42/rev1_extkeys: {
+ target: 'dailycraft/wings42/rev1_extkeys'
+ },
+ wings42/rev2: {
+ target: 'dailycraft/wings42/rev2'
+ },
+ yasui: {
+ target: 'rainkeebs/yasui'
+ },
+ yd60mq: {
+ target: 'ymdk/yd60mq'
+ },
+ yd68: {
+ target: 'ydkb/yd68'
+ },
+ ymd75: {
+ target: 'ymdk/ymd75'
+ },
+ ymd96: {
+ target: 'ymdk/ymd96'
+ },
+ ymdk_np21: {
+ target: 'ymdk/np21'
+ },
+ yurei: {
+ target: 'kkatano/yurei'
+ },
+ zinc: {
+ target: '25keys/zinc'
+ },
+ zinc/rev1: {
+ target: '25keys/zinc/rev1'
+ },
+ zinc/reva: {
+ target: '25keys/zinc/reva'
}
}
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
index 822f237073..3f92e289a7 100644
--- a/data/schemas/definitions.jsonschema
+++ b/data/schemas/definitions.jsonschema
@@ -20,6 +20,10 @@
"type": "string",
"pattern": "^0x[0-9A-F]{4}$"
},
+ "bcd_version": {
+ "type": "string",
+ "pattern": "^[0-9]{1,2}\\.[0-9]\\.[0-9]$"
+ },
"text_identifier": {
"type": "string",
"minLength": 1,
@@ -70,13 +74,13 @@
"signed_int": {
"type": "number",
"multipleOf": 1
- }
+ },
"signed_int_8": {
"type": "number",
"min": -127,
"max": 127,
"multipleOf": 1
- }
+ },
"string_array": {
"type": "array",
"items": {
@@ -97,7 +101,7 @@
"type": "number",
"min": 0,
"multipleOf": 1
- }
+ },
"unsigned_int_8": {
"type": "number",
"min": 0,
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 308f9b782b..fc0844a086 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -13,7 +13,7 @@
},
"processor": {
"type": "string",
- "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L433", "STM32L443", "GD32VF103", "WB32F3G71", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
+ "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
},
"audio": {
"type": "object",
@@ -45,7 +45,7 @@
"properties": {
"driver": {
"type": "string",
- "enum": ["AdafruitBLE", "RN42"]
+ "enum": ["BluefruitLE", "RN42"]
},
"lto": {"type": "boolean"},
}
@@ -57,7 +57,7 @@
},
"bootloader": {
"type": "string",
- "enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2"],
+ "enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2"],
},
"bootloader_instructions": {
"type": "string",
@@ -69,7 +69,7 @@
"properties": {
"debounce_type": {
"type": "string",
- "enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_eager_pk"]
+ "enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_defer_pr", "sym_eager_pk"]
},
"firmware_format": {
"type": "string",
@@ -320,7 +320,8 @@
"type": "object",
"additionalProperties": false,
"properties": {
- "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
+ "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, # Deprecated
+ "device_version": {"$ref": "qmk.definitions.v1#/bcd_version"},
"force_nkro": {"type": "boolean"},
"pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
diff --git a/data/templates/avr/config.h b/data/templates/avr/config.h
deleted file mode 100644
index 7c15e8e704..0000000000
--- a/data/templates/avr/config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright %(YEAR)s %(YOUR_NAME)s (@%(USER_NAME)s)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
-#define DEVICE_VER 0x0001
-#define MANUFACTURER %(USER_NAME)s
-#define PRODUCT %(KEYBOARD)s
-
-/* key matrix size */
-#define MATRIX_ROWS 2
-#define MATRIX_COLS 3
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
- */
-#define MATRIX_ROW_PINS { D0, D5 }
-#define MATRIX_COL_PINS { F1, F0, B0 }
-#define UNUSED_PINS
-
-/* COL2ROW, ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/*
- * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
- */
-#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
-
-//#define LED_NUM_LOCK_PIN B0
-//#define LED_CAPS_LOCK_PIN B1
-//#define LED_SCROLL_LOCK_PIN B2
-//#define LED_COMPOSE_PIN B3
-//#define LED_KANA_PIN B4
-
-//#define BACKLIGHT_PIN B7
-//#define BACKLIGHT_LEVELS 3
-//#define BACKLIGHT_BREATHING
-
-//#define RGB_DI_PIN E2
-//#ifdef RGB_DI_PIN
-//# define RGBLED_NUM 16
-//# define RGBLIGHT_HUE_STEP 8
-//# define RGBLIGHT_SAT_STEP 8
-//# define RGBLIGHT_VAL_STEP 8
-//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-/*== all animations enable ==*/
-//# define RGBLIGHT_ANIMATIONS
-/*== or choose animations ==*/
-//# define RGBLIGHT_EFFECT_BREATHING
-//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-//# define RGBLIGHT_EFFECT_SNAKE
-//# define RGBLIGHT_EFFECT_KNIGHT
-//# define RGBLIGHT_EFFECT_CHRISTMAS
-//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-//# define RGBLIGHT_EFFECT_RGB_TEST
-//# define RGBLIGHT_EFFECT_ALTERNATING
-/*== customize breathing effect ==*/
-/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
-//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
-/*==== use exp() and sin() ====*/
-//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
-//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
-//#endif
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
- * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
- */
-//#define GRAVE_ESC_CTRL_OVERRIDE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-
-/* disable these deprecated features by default */
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-/* Bootmagic Lite key configuration */
-//#define BOOTMAGIC_LITE_ROW 0
-//#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/data/templates/avr/readme.md b/data/templates/avr/readme.md
deleted file mode 100644
index 207850e065..0000000000
--- a/data/templates/avr/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# %(KEYBOARD)s
-
-![%(KEYBOARD)s](imgur.com image replace me!)
-
-*A short description of the keyboard/project*
-
-* Keyboard Maintainer: [%(YOUR_NAME)s](https://github.com/%(USER_NAME)s)
-* Hardware Supported: *The PCBs, controllers supported*
-* Hardware Availability: *Links to where you can find this hardware*
-
-Make example for this keyboard (after setting up your build environment):
-
- make %(KEYBOARD)s:default
-
-Flashing example for this keyboard:
-
- make %(KEYBOARD)s: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 (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/data/templates/base/%(KEYBOARD)s.c b/data/templates/base/%(KEYBOARD)s.c
deleted file mode 100644
index 0c509aff65..0000000000
--- a/data/templates/base/%(KEYBOARD)s.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright %(YEAR)s %(YOUR_NAME)s (@%(USER_NAME)s)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "%(KEYBOARD)s.h"
diff --git a/data/templates/base/%(KEYBOARD)s.h b/data/templates/base/%(KEYBOARD)s.h
deleted file mode 100644
index 3e8ca3912d..0000000000
--- a/data/templates/base/%(KEYBOARD)s.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright %(YEAR)s %(YOUR_NAME)s (@%(USER_NAME)s)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "quantum.h"
-
-/* This is a shortcut to help you visually see your layout.
- *
- * The first section contains all of the arguments representing the physical
- * layout of the board and position of the keys.
- *
- * The second converts the arguments into a two-dimensional array which
- * represents the switch matrix.
- */
-#define LAYOUT( \
- k00, k01, k02, \
- k10, k12 \
-) { \
- { k00, k01, k02 }, \
- { k10, KC_NO, k12 } \
-}
diff --git a/data/templates/base/info.json b/data/templates/base/info.json
deleted file mode 100644
index a50ccba7bf..0000000000
--- a/data/templates/base/info.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "keyboard_name": "%(KEYBOARD)s",
- "url": "",
- "maintainer": "%(USER_NAME)s",
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label": "k00", "x": 0, "y": 0},
- {"label": "k01", "x": 1, "y": 0},
- {"label": "k02", "x": 2, "y": 0},
-
- {"label": "k10", "x": 0, "y": 1, "w": 1.5},
- {"label": "k12", "x": 1.5, "y": 1, "w": 1.5}
- ]
- }
- }
-}
diff --git a/data/templates/base/keymaps/default/keymap.c b/data/templates/base/keymaps/default/keymap.c
deleted file mode 100644
index 3fec3d5120..0000000000
--- a/data/templates/base/keymaps/default/keymap.c
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright %(YEAR)s %(YOUR_NAME)s (@%(USER_NAME)s)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
- _BASE,
- _FN
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base */
- [_BASE] = LAYOUT(
- KC_A, KC_1, MO(_FN),
- KC_TAB, KC_SPC
- ),
- [_FN] = LAYOUT(
- _______, _______, _______,
- RESET, XXXXXXX
- )
-};
diff --git a/data/templates/base/keymaps/default/readme.md b/data/templates/base/keymaps/default/readme.md
deleted file mode 100644
index 63a0643275..0000000000
--- a/data/templates/base/keymaps/default/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default keymap for %(KEYBOARD)s
diff --git a/data/templates/keyboard/info.json b/data/templates/keyboard/info.json
new file mode 100644
index 0000000000..92718faf3a
--- /dev/null
+++ b/data/templates/keyboard/info.json
@@ -0,0 +1,24 @@
+{
+ "keyboard_name": "%KEYBOARD%",
+ "maintainer": "%USER_NAME%",
+ "processor": "%MCU%",
+ "bootloader": "%BOOTLOADER%",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["C2"],
+ "rows": ["D1"]
+ },
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0x0000",
+ "device_ver": "0x0001"
+ },
+ "features": {
+ "bootmagic_lite": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ }
+} \ No newline at end of file
diff --git a/data/templates/keyboard/readme.md b/data/templates/keyboard/readme.md
new file mode 100644
index 0000000000..ca703c53f0
--- /dev/null
+++ b/data/templates/keyboard/readme.md
@@ -0,0 +1,27 @@
+# %KEYBOARD%
+
+![%KEYBOARD%](imgur.com image replace me!)
+
+*A short description of the keyboard/project*
+
+* Keyboard Maintainer: [%REAL_NAME%](https://github.com/%USER_NAME%)
+* Hardware Supported: *The PCBs, controllers supported*
+* Hardware Availability: *Links to where you can find this hardware*
+
+Make example for this keyboard (after setting up your build environment):
+
+ make %KEYBOARD%:default
+
+Flashing example for this keyboard:
+
+ make %KEYBOARD%: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 (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/data/templates/keyboard/rules.mk b/data/templates/keyboard/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/data/templates/keyboard/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/data/templates/ps2avrgb/config.h b/data/templates/ps2avrgb/config.h
deleted file mode 100644
index 876a60252f..0000000000
--- a/data/templates/ps2avrgb/config.h
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright %(YEAR)s %(YOUR_NAME)s (@%(USER_NAME)s)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
-#define DEVICE_VER 0x0001
-#define MANUFACTURER %(USER_NAME)s
-#define PRODUCT %(KEYBOARD)s
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 15
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
- */
-#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
-#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
-#define UNUSED_PINS
-
-/* COL2ROW, ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-//#define LED_NUM_LOCK_PIN D0
-//#define LED_CAPS_LOCK_PIN D1
-//#define LED_SCROLL_LOCK_PIN D6
-
-#define BACKLIGHT_PIN D4
-//#define BACKLIGHT_LEVELS 3
-//#define BACKLIGHT_BREATHING
-
-#define RGBLED_NUM 16
-//#define RGBLIGHT_HUE_STEP 8
-//#define RGBLIGHT_SAT_STEP 8
-//#define RGBLIGHT_VAL_STEP 8
-//#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-//#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-/*== all animations enable ==*/
-//#define RGBLIGHT_ANIMATIONS
-/*== or choose animations ==*/
-//#define RGBLIGHT_EFFECT_BREATHING
-//#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-//#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-//#define RGBLIGHT_EFFECT_SNAKE
-//#define RGBLIGHT_EFFECT_KNIGHT
-//#define RGBLIGHT_EFFECT_CHRISTMAS
-//#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-//#define RGBLIGHT_EFFECT_RGB_TEST
-//#define RGBLIGHT_EFFECT_ALTERNATING
-/*== customize breathing effect ==*/
-/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
-//#define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
-/*==== use exp() and sin() ====*/
-//#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
-//#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
- * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
- */
-//#define GRAVE_ESC_CTRL_OVERRIDE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-
-/* disable these deprecated features by default */
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-/* Bootmagic Lite key configuration */
-//#define BOOTMAGIC_LITE_ROW 0
-//#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/data/templates/ps2avrgb/readme.md b/data/templates/ps2avrgb/readme.md
deleted file mode 100644
index a2ac4495b6..0000000000
--- a/data/templates/ps2avrgb/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# %(KEYBOARD)s
-
-![%(KEYBOARD)s](imgur.com image replace me!)
-
-*A short description of the keyboard/project*
-
-* Keyboard Maintainer: [%(YOUR_NAME)s](https://github.com/yourusername)
-* Hardware Supported: *The PCBs, controllers supported*
-* Hardware Availability: *Links to where you can find this hardware*
-
-Make example for this keyboard (after setting up your build environment):
-
- make %(KEYBOARD)s:default
-
-Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-
- make %(KEYBOARD)s: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 (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **BootloadHID reset**: Hold down the key connected to the `A0` and `B0` pins on the MCU if it is known (often top left or bottom left) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/data/templates/ps2avrgb/rules.mk b/data/templates/ps2avrgb/rules.mk
deleted file mode 100644
index 1bbfa8fa0e..0000000000
--- a/data/templates/ps2avrgb/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# MCU name
-MCU = atmega32a
-
-# Bootloader selection
-BOOTLOADER = bootloadhid
-
-# 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
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-WS2812_DRIVER = i2c
diff --git a/docs/ChangeLog/20220226/PR15304.md b/docs/ChangeLog/20220226/PR15304.md
new file mode 100644
index 0000000000..3cdb40db10
--- /dev/null
+++ b/docs/ChangeLog/20220226/PR15304.md
@@ -0,0 +1,13 @@
+### Split Common core now supports Pointing Devices ([#15304](https://github.com/qmk/qmk_firmware/pull/15304))
+
+Pointing devices can now be shared across a split keyboard with support for a single pointing device or a pointing device on each side.
+
+This feature can be enabled with `#define SPLIT_POINTING_ENABLE` and one of the following options:
+
+| Setting | Description |
+|---------------------------|------------------------------------|
+|`POINTING_DEVICE_LEFT` | Pointing device on the left side |
+|`POINTING_DEVICE_RIGHT` | Pointing device on the right side |
+|`POINTING_DEVICE_COMBINED` | Pointing device on both sides |
+
+See the [Pointing Device](../feature_pointing_device.md) documentation for further configuration options.
diff --git a/docs/cli_commands.md b/docs/cli_commands.md
index dfbd4c6a28..93af906b8a 100644
--- a/docs/cli_commands.md
+++ b/docs/cli_commands.md
@@ -310,7 +310,7 @@ Any arguments that are not provided will prompt for input. If `-u` is not passed
**Usage**:
```
-qmk new-keyboard [-kb KEYBOARD] [-t {avr,ps2avrgb}] -u USERNAME
+qmk new-keyboard [-kb KEYBOARD] [-t {atmega32u4,STM32F303,etc}] [-l {60_ansi,75_iso,etc}] -u USERNAME
```
## `qmk new-keymap`
diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md
index 1f46a1c634..1c5e37f724 100644
--- a/docs/compatible_microcontrollers.md
+++ b/docs/compatible_microcontrollers.md
@@ -1,6 +1,6 @@
# Compatible Microcontrollers
-QMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generally 32kB or more, though it will *just* squeeze into 16kB with most features disabled.
+QMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generally 32kB+ for AVR, and 64kB+ for ARM. With significant disabling of features, QMK may *just* squeeze into 16kB AVR MCUs.
## Atmel AVR
@@ -8,7 +8,11 @@ The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB
* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
+ * SparkFun Pro Micro (and clones)
+ * PJRC Teensy 2.0
+ * Adafruit Feather 32U4
* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
+ * PJRC Teensy++ 2.0
* [AT90USB162](https://www.microchip.com/wwwproducts/en/AT90USB162)
Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead:
@@ -25,17 +29,23 @@ You can also use any ARM chip with USB that [ChibiOS](https://www.chibios.org) s
* [STM32F0x2](https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html)
* [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
+ * Bluepill (with STM32duino bootloader)
* [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
+ * QMK Proton-C
* [STM32F401](https://www.st.com/en/microcontrollers-microprocessors/stm32f401.html)
+ * WeAct Blackpill
* [STM32F405](https://www.st.com/en/microcontrollers-microprocessors/stm32f405-415.html)
* [STM32F407](https://www.st.com/en/microcontrollers-microprocessors/stm32f407-417.html)
* [STM32F411](https://www.st.com/en/microcontrollers-microprocessors/stm32f411.html)
+ * WeAct Blackpill
* [STM32F446](https://www.st.com/en/microcontrollers-microprocessors/stm32f446.html)
* [STM32G431](https://www.st.com/en/microcontrollers-microprocessors/stm32g4x1.html)
* [STM32G474](https://www.st.com/en/microcontrollers-microprocessors/stm32g4x4.html)
* [STM32L412](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x2.html)
* [STM32L422](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x2.html)
+ * [STM32L432](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x2.html)
* [STM32L433](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x3.html)
+ * [STM32L442](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x2.html)
* [STM32L443](https://www.st.com/en/microcontrollers-microprocessors/stm32l4x3.html)
### WestBerryTech (WB32)
@@ -45,13 +55,16 @@ You can also use any ARM chip with USB that [ChibiOS](https://www.chibios.org) s
### NXP (Kinetis)
* [MKL26Z64](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/kl-series-cortex-m0-plus/kinetis-kl2x-72-96-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
+ * PJRC Teensy LC
* [MK20DX128](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-50-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-based-on-arm-cortex-m4-core:K20_50)
* [MK20DX256](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
+ * PJRC Teensy 3.2
* [MK66FX1M0](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k6x-ethernet/kinetis-k66-180-mhz-dual-high-speed-full-speed-usbs-2mb-flash-microcontrollers-mcus-based-on-arm-cortex-m4-core:K66_180)
+ * PJRC Teensy 3.6
## Atmel ATSAM
-There is limited support for one of Atmel's ATSAM microcontrollers, that being the [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) used by the [Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop).
+There is limited support for one of Atmel's ATSAM microcontrollers, that being the [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) used by the [Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop). However, it is not recommended to design a board with this microcontroller as the support is quite specialized to Massdrop hardware.
## RISC-V
diff --git a/docs/config_options.md b/docs/config_options.md
index 15ad945b22..838c4d86fd 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -126,10 +126,6 @@ If you define these options you will disable the associated feature, which can s
* disable tap dance and other tapping features
* `#define NO_ACTION_ONESHOT`
* disable one-shot modifiers
-* `#define NO_ACTION_MACRO`
- * disable old-style macro handling using `MACRO()`, `action_get_macro()` _(deprecated)_
-* `#define NO_ACTION_FUNCTION`
- * disable old-style function handling using `fn_actions`, `action_function()` _(deprecated)_
## Features That Can Be Enabled
@@ -385,7 +381,6 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* A list of [layouts](feature_layouts.md) this keyboard supports.
* `LTO_ENABLE`
* Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable).
-However, this will automatically disable the legacy TMK Macros and Functions features, as these break when LTO is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`. (Note: This does not affect QMK [Macros](feature_macros.md) and [Layers](feature_layers.md).)
## AVR MCU Options
* `MCU = atmega32u4`
@@ -436,8 +431,8 @@ Use these to enable or disable building certain features. The more you have enab
* MIDI controls
* `UNICODE_ENABLE`
* Unicode
-* `BLUETOOTH`
- * Current options are AdafruitBLE, RN42
+* `BLUETOOTH_ENABLE`
+ * Current options are BluefruitLE, RN42
* `SPLIT_KEYBOARD`
* Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
* `CUSTOM_MATRIX`
diff --git a/docs/feature_bluetooth.md b/docs/feature_bluetooth.md
index f6fb02d948..d4ed494053 100644
--- a/docs/feature_bluetooth.md
+++ b/docs/feature_bluetooth.md
@@ -7,7 +7,7 @@ Currently Bluetooth support is limited to AVR based chips. For Bluetooth 2.1, QM
|Board |Bluetooth Protocol |Connection Type|rules.mk |Bluetooth Chip|
|----------------------------------------------------------------|--------------------|---------------|--------------------------------|--------------|
|Roving Networks RN-42 (Sparkfun Bluesmirf) |Bluetooth Classic |UART |`BLUETOOTH_DRIVER = RN42` |RN-42 |
-|[Bluefruit LE SPI Friend](https://www.adafruit.com/product/2633)|Bluetooth Low Energy|SPI |`BLUETOOTH_DRIVER = AdafruitBLE`|nRF51822 |
+|[Bluefruit LE SPI Friend](https://www.adafruit.com/product/2633)|Bluetooth Low Energy|SPI |`BLUETOOTH_DRIVER = BluefruitLE`|nRF51822 |
Not Supported Yet but possible:
* [Bluefruit LE UART Friend](https://www.adafruit.com/product/2479). [Possible tmk implementation found in](https://github.com/tmk/tmk_keyboard/issues/514)
@@ -17,9 +17,9 @@ Not Supported Yet but possible:
### Adafruit BLE SPI Friend
Currently The only bluetooth chipset supported by QMK is the Adafruit Bluefruit SPI Friend. It's a Nordic nRF51822 based chip running Adafruit's custom firmware. Data is transmitted via Adafruit's SDEP over Hardware SPI. The [Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829) is supported as it's an AVR mcu connected via SPI to the Nordic BLE chip with Adafruit firmware. If Building a custom board with the SPI friend it would be easiest to just use the pin selection that the 32u4 feather uses but you can change the pins in the config.h options with the following defines:
-* `#define ADAFRUIT_BLE_RST_PIN D4`
-* `#define ADAFRUIT_BLE_CS_PIN B4`
-* `#define ADAFRUIT_BLE_IRQ_PIN E6`
+* `#define BLUEFRUIT_LE_RST_PIN D4`
+* `#define BLUEFRUIT_LE_CS_PIN B4`
+* `#define BLUEFRUIT_LE_IRQ_PIN E6`
A Bluefruit UART friend can be converted to an SPI friend, however this [requires](https://github.com/qmk/qmk_firmware/issues/2274) some reflashing and soldering directly to the MDBT40 chip.
@@ -32,7 +32,7 @@ Add the following to your `rules.mk`:
```make
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE # or RN42
+BLUETOOTH_DRIVER = BluefruitLE # or RN42
```
## Bluetooth Keycodes
diff --git a/docs/feature_combo.md b/docs/feature_combo.md
index 47128c431b..c0e10f09d5 100644
--- a/docs/feature_combo.md
+++ b/docs/feature_combo.md
@@ -141,10 +141,13 @@ Processing combos has two buffers, one for the key presses, another for the comb
## Modifier Combos
If a combo resolves to a Modifier, the window for processing the combo can be extended independently from normal combos. By default, this is disabled but can be enabled with `#define COMBO_MUST_HOLD_MODS`, and the time window can be configured with `#define COMBO_HOLD_TERM 150` (default: `TAPPING_TERM`). With `COMBO_MUST_HOLD_MODS`, you cannot tap the combo any more which makes the combo less prone to misfires.
-## Per Combo Timing, Holding and Tapping
-For each combo, it is possible to configure the time window it has to pressed in, if it needs to be held down, or if it needs to be tapped.
+## Strict key press order
+By defining `COMBO_MUST_PRESS_IN_ORDER` combos only activate when the keys are pressed in the same order as they are defined in the key array.
-For example, tap-only combos are useful if any (or all) of the underlying keys is a Mod-Tap or a Layer-Tap key. When you tap the combo, you get the combo result. When you press the combo and hold it down, the combo doesn't actually activate. Instead the keys are processed separately as if the combo wasn't even there.
+## Per Combo Timing, Holding, Tapping and Key Press Order
+For each combo, it is possible to configure the time window it has to pressed in, if it needs to be held down, if it needs to be tapped, or if its keys need to be pressed in order.
+
+For example, tap-only combos are useful if any (or all) of the underlying keys are mod-tap or layer-tap keys. When you tap the combo, you get the combo result. When you press the combo and hold it down, the combo doesn't activate. Instead the keys are processed separately as if the combo wasn't even there.
In order to use these features, the following configuration options and functions need to be defined. Coming up with useful timings and configuration is left as an exercise for the reader.
@@ -153,6 +156,7 @@ In order to use these features, the following configuration options and function
| `COMBO_TERM_PER_COMBO` | uint16_t get_combo_term(uint16_t index, combo_t \*combo) | Optional per-combo timeout window. (default: `COMBO_TERM`) |
| `COMBO_MUST_HOLD_PER_COMBO` | bool get_combo_must_hold(uint16_t index, combo_t \*combo) | Controls if a given combo should fire immediately on tap or if it needs to be held. (default: `false`) |
| `COMBO_MUST_TAP_PER_COMBO` | bool get_combo_must_tap(uint16_t index, combo_t \*combo) | Controls if a given combo should fire only if tapped within `COMBO_HOLD_TERM`. (default: `false`) |
+| `COMBO_MUST_PRESS_IN_ORDER_PER_COMBO` | bool get_combo_must_press_in_order(uint16_t index, combo_t \*combo) | Controls if a given combo should fire only if its keys are pressed in order. (default: `true`) |
Examples:
```c
@@ -216,6 +220,38 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) {
return false;
}
+
+bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) {
+ switch (combo_index) {
+ /* List combos here that you want to only activate if their keys
+ * are pressed in the same order as they are defined in the combo's key
+ * array. */
+ case COMBO_NAME_HERE:
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
+## Generic hook to (dis)allow a combo activation
+
+By defining `COMBO_SHOULD_TRIGGER` and its companying function `bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record)` you can block or allow combos to activate on the conditions of your choice.
+For example, you could disallow some combos on the base layer and allow them on another. Or disable combos on the home row when a timer is running.
+
+Examples:
+```c
+bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
+ /* Disable combo `SOME_COMBO` on layer `_LAYER_A` */
+ switch (combo_index) {
+ case SOME_COMBO:
+ if (layer_state_is(_LAYER_A)) {
+ return false;
+ }
+ }
+
+ return true;
+}
```
## Variable Length Combos
diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md
index f37a785b1e..9cd736a24a 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -116,6 +116,7 @@ Where name of algorithm is one of:
For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
+* ```sym_defer_pr``` - debouncing per row. On any state change, a per-row timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that row, the entire row is pushed. Can improve responsiveness over `sym_defer_g` while being less susceptible than per-key debouncers to noise.
* ```sym_defer_pk``` - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key status change is pushed.
* ```asym_eager_defer_pk``` - debouncing per key. On a key-down state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key. On a key-up state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key-up status change is pushed.
diff --git a/docs/feature_grave_esc.md b/docs/feature_grave_esc.md
index f135b1dede..09d098ee4e 100644
--- a/docs/feature_grave_esc.md
+++ b/docs/feature_grave_esc.md
@@ -4,17 +4,17 @@ If you're using a 60% keyboard, or any other layout with no F-row, you will have
## Usage
-Replace the `KC_GRV` key in your keymap (usually to the left of the `1` key) with `KC_GESC`. Most of the time this key will output `KC_ESC` when pressed. However, when Shift or GUI are held down it will output `KC_GRV` instead.
+Replace the `KC_GRV` key in your keymap (usually to the left of the `1` key) with `QK_GESC`. Most of the time this key will output `KC_ESC` when pressed. However, when Shift or GUI are held down it will output `KC_GRV` instead.
## What Your OS Sees
-If Mary presses GESC on her keyboard, the OS will see an KC_ESC character. Now if Mary holds Shift down and presses GESC it will output `~`, or a shifted backtick. Now if she holds GUI/CMD/WIN, it will output a simple <code>&#96;</code> character.
+If Mary presses `QK_GESC` on her keyboard, the OS will see an KC_ESC character. Now if Mary holds Shift down and presses `QK_GESC` it will output `~`, or a shifted backtick. Now if she holds GUI/CMD/WIN, it will output a simple <code>&#96;</code> character.
## Keycodes
-|Key |Aliases |Description |
-|---------|-----------|------------------------------------------------------------------|
-|`KC_GESC`|`GRAVE_ESC`|Escape when pressed, <code>&#96;</code> when Shift or GUI are held|
+|Key |Aliases |Description |
+|-----------------|---------|------------------------------------------------------------------|
+|`QK_GRAVE_ESCAPE`|`QK_GESC`|Escape when pressed, <code>&#96;</code> when Shift or GUI are held|
### Caveats
diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md
index c8c74cb8f0..63ac4305ff 100644
--- a/docs/feature_haptic_feedback.md
+++ b/docs/feature_haptic_feedback.md
@@ -167,7 +167,7 @@ List of waveform sequences from the datasheet:
```
#define DRV_GREETING *sequence name or number*
```
-If haptic feedback is enabled, the keyboard will vibrate to a specific sqeuence during startup. That can be selected using the following define:
+If haptic feedback is enabled, the keyboard will vibrate to a specific sequence during startup. That can be selected using the following define:
```
#define DRV_MODE_DEFAULT *sequence name or number*
@@ -191,9 +191,6 @@ With the entry of `#define NO_HAPTIC_MOD` in config.h, the following keys will n
* `TT()` layer tap toggle keys, when held to activate a layer. However when tapped `TAPPING_TOGGLE` times to permanently toggle the layer, on the last tap haptic feedback is still triggered.
* `MT()` mod tap keys, when held to keep a usual modifier key pressed. However when tapped, and the key is quickly released, and sends a keycode, haptic feedback is still triggered. See also [Mod-Tap](mod_tap.md).
-### NO_HAPTIC_FN
-With the entry of `#define NO_HAPTIC_FN` in config.h, deprecated `fn_actions` type function keys will not trigger a feedback.
-
### NO_HAPTIC_ALPHA
With the entry of `#define NO_HAPTIC_ALPHA` in config.h, none of the alpha keys (A ... Z) will trigger a feedback.
@@ -207,4 +204,4 @@ With the entry of `#define NO_HAPTIC_LOCKKEYS` in config.h, none of the followin
With the entry of `#define NO_HAPTIC_NAV` in config.h, none of the following keys will trigger a feedback: Print Screen, Pause, Insert, Delete, Page Down, Page Up, Left Arrow, Up Arrow, Right Arrow, Down Arrow, End, Home.
### NO_HAPTIC_NUMERIC
-With the entry of `#define NO_HAPTIC_NUMERIC` in config.h, none of the following keys between 0 and 9 (KC_1 ... KC_0) will trigger a feedback. \ No newline at end of file
+With the entry of `#define NO_HAPTIC_NUMERIC` in config.h, none of the following keys between 0 and 9 (KC_1 ... KC_0) will trigger a feedback.
diff --git a/docs/feature_key_lock.md b/docs/feature_key_lock.md
index 8e6e29f0e6..7681394229 100644
--- a/docs/feature_key_lock.md
+++ b/docs/feature_key_lock.md
@@ -19,4 +19,5 @@ First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Th
Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys.md) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
-Switching layers will not cancel the Key Lock.
+Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function.
+
diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index 37f38cc6ed..37c74843aa 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -68,6 +68,109 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/led/issi/is31fl3731-simple.h`. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` ).
---
+### IS31FLCOMMON :id=is31flcommon
+
+There is basic support for addressable LED matrix lighting with a selection of I2C ISSI Lumissil LED controllers through a shared common driver. To enable it, add this to your `rules.mk`:
+
+```makefile
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = <driver name>
+```
+
+Where `<driver name>` is the applicable LED driver chip as below
+
+| Driver Name | Data Sheet | Capability |
+|-------------|------------|------------|
+| `IS31FL3742A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3742A_DS.pdf) | 180 LED, 30x6 Matrix |
+| `ISSIFL3743A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3743A_DS.pdf) | 198 LED, 18x11 Matrix |
+| `IS31FL3745` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3745_DS.pdf) | 144 LED, 18x8 Matrix |
+| `IS31FL3746A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3746A_DS.pdf) | 72 LED, 18x4 Matrix |
+
+You can use between 1 and 4 IC's. Do not specify `DRIVER_ADDR_<N>` define for IC's if not present on your keyboard. The `DRIVER_ADDR_1` default assumes that all Address pins on the controller have been connected to GND. Drivers that have SYNC functionality have the default settings to disable if 1 driver. If more than 1 drivers then `DRIVER_ADDR_1` will be set to Master and the remaiing ones set to Slave.
+
+Configure the hardware via your `config.h`:
+
+| Variable | Description | Default |
+|----------|-------------|---------|
+| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
+| `DRIVER_LED_TOTAL` | (Required) How many LED lights are present across all drivers | |
+| `DRIVER_ADDR_1` | (Optional) Address for the first LED driver | |
+| `DRIVER_ADDR_<N>` | (Required) Address for the additional LED drivers | |
+| `ISSI_SSR_<N>` | (Optional) Configuration for the Spread Spectrum Register | |
+| `ISSI_CONFIGURATION` | (Optional) Configuration for the Configuration Register | |
+| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `ISSI_PULLDOWNUP` | (Optional) Configuration for the Pull Up & Pull Down Register | |
+| `ISSI_TEMP` | (Optional) Configuration for the Tempature Register | |
+| `ISSI_PWM_ENABLE` | (Optional) Configuration for the PWM Enable Register | |
+| `ISSI_PWM_SET` | (Optional) Configuration for the PWM Setting Register | |
+| `ISSI_SCAL_LED ` | (Optional) Configuration for the LEDs Scaling Registers | 0xFF |
+| `ISSI_MANUAL_SCALING` | (Optional) If you wish to configure the Scaling Registers manually | |
+
+
+Defaults
+
+| Variable | IS31FL3742A | IS31FL3743A | IS31FL3745 | IS31FL3746 |
+|----------|-------------|-------------|------------|------------|
+| `DRIVER_ADDR_1` | 0b0110000 | 0b0100000 | 0b0100000 | 0b1100000 |
+| `ISSI_SSR_1` | 0x00 | 0x00 / 0x60 | 0x00 / 0xC0 | 0x00 |
+| `ISSI_SSR_<2-4>` | 0x00 | 0x40 | 0x80 | 0x00 |
+| `ISSI_CONFIGURATION` | 0x31 | 0x01 | 0x31 | 0x01 |
+| `ISSI_PULLDOWNUP` | 0x55 | 0x33 | 0x33 | 0x33 |
+| `ISSI_TEMP` | N/A | 0x00 | 0x00 | 0x00 |
+| `ISSI_PWM_ENABLE` | N/A | N/A | N/A | 0x00 |
+| `ISSI_PWM_SET` | 0x00 | N/A | N/A | 0x00 |
+
+Here is an example using 2 drivers.
+
+```c
+#define DRIVER_ADDR_2 0b0100001
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 66
+#define DRIVER_2_LED_TOTAL 42
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+```
+!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
+
+Currently only 4 drivers are supported, but it would be trivial to support for more. Note that using a combination of different drivers is not supported. All drivers must be of the same model.
+
+Define these arrays listing all the LEDs in your `<keyboard>.c`:
+
+```c
+const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ { 0, CS1_SW1 },
+ { 0, CS2_SW1 },
+ // ...
+}
+```
+
+Where `CSx_SWx` is the location of the LED in the matrix defined by the datasheet. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` for now).
+
+`ISSI_MANUAL_SCALING` is used to override the Scaling for individual LED's. By default they will be set as per `ISSI_SCAL_LED`. In `config.h` set how many LED's you want to manually set scaling for.
+Eg `#define ISSI_MANUAL_SCALING 3`
+
+Then Define the array listing all the LEDs you want to override in your `<keyboard>.c`:
+
+```c
+const is31_led __flash g_is31_scaling[ISSI_MANUAL_SCALING] = {
+ * LED Index
+ * | Scaling
+ * | | */
+ {5, 120},
+ {9, 120},
+ ....
+}
+```
+
+Where LED Index is the position of the LED in the `g_is31_leds` array. The `scaling` value between 0 and 255 to be written to the Scaling Register.
+
+---
## Common Configuration :id=common-configuration
diff --git a/docs/feature_mouse_keys.md b/docs/feature_mouse_keys.md
index 30f563a95d..905da36e43 100644
--- a/docs/feature_mouse_keys.md
+++ b/docs/feature_mouse_keys.md
@@ -59,13 +59,13 @@ This is the default mode. You can adjust the cursor and scrolling acceleration u
|Define |Default|Description |
|----------------------------|-------|---------------------------------------------------------|
-|`MOUSEKEY_DELAY` |300 |Delay between pressing a movement key and cursor movement|
-|`MOUSEKEY_INTERVAL` |50 |Time between cursor movements in milliseconds |
-|`MOUSEKEY_MOVE_DELTA` |5 |Step size |
+|`MOUSEKEY_DELAY` |10 |Delay between pressing a movement key and cursor movement|
+|`MOUSEKEY_INTERVAL` |20 |Time between cursor movements in milliseconds |
+|`MOUSEKEY_MOVE_DELTA` |8 |Step size |
|`MOUSEKEY_MAX_SPEED` |10 |Maximum cursor speed at which acceleration stops |
-|`MOUSEKEY_TIME_TO_MAX` |20 |Time until maximum cursor speed is reached |
-|`MOUSEKEY_WHEEL_DELAY` |300 |Delay between pressing a wheel key and wheel movement |
-|`MOUSEKEY_WHEEL_INTERVAL` |100 |Time between wheel movements |
+|`MOUSEKEY_TIME_TO_MAX` |30 |Time until maximum cursor speed is reached |
+|`MOUSEKEY_WHEEL_DELAY` |10 |Delay between pressing a wheel key and wheel movement |
+|`MOUSEKEY_WHEEL_INTERVAL` |80 |Time between wheel movements |
|`MOUSEKEY_WHEEL_MAX_SPEED` |8 |Maximum number of scroll steps per scroll action |
|`MOUSEKEY_WHEEL_TIME_TO_MAX`|40 |Time until maximum scroll speed is reached |
@@ -85,9 +85,9 @@ This is an extension of the accelerated mode. The kinetic mode uses a quadratic
|Define |Default |Description |
|--------------------------------------|---------|---------------------------------------------------------------|
|`MK_KINETIC_SPEED` |undefined|Enable kinetic mode |
-|`MOUSEKEY_DELAY` |8 |Delay between pressing a movement key and cursor movement |
-|`MOUSEKEY_INTERVAL` |8 |Time between cursor movements in milliseconds |
-|`MOUSEKEY_MOVE_DELTA` |25 |Step size for accelerating from initial to base speed |
+|`MOUSEKEY_DELAY` |5 |Delay between pressing a movement key and cursor movement |
+|`MOUSEKEY_INTERVAL` |10 |Time between cursor movements in milliseconds |
+|`MOUSEKEY_MOVE_DELTA` |5 |Step size for accelerating from initial to base speed |
|`MOUSEKEY_INITIAL_SPEED` |100 |Initial speed of the cursor in pixel per second |
|`MOUSEKEY_BASE_SPEED` |1000 |Maximum cursor speed at which acceleration stops |
|`MOUSEKEY_DECELERATED_SPEED` |400 |Decelerated cursor speed |
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md
index fb6936620c..4b39599f8a 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/feature_pointing_device.md
@@ -2,7 +2,7 @@
Pointing Device is a generic name for a feature intended to be generic: moving the system pointer around. There are certainly other options for it - like mousekeys - but this aims to be easily modifiable and hardware driven. You can implement custom keys to control functionality, or you can gather information from other peripherals and insert it directly here - let QMK handle the processing for you.
-To enable Pointing Device, uncomment the following line in your rules.mk:
+To enable Pointing Device, add the following line in your rules.mk and specify one of the driver options below.
```make
POINTING_DEVICE_ENABLE = yes
@@ -40,13 +40,13 @@ POINTING_DEVICE_DRIVER = adns9800
The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking.
-| Setting | Description | Default |
-|------------------------|------------------------------------------------------------------------|---------------|
-|`ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
-|`ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
-|`ADNS9800_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
-|`ADNS9800_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
-|`ADNS9800_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ |
+| Setting | Description | Default |
+|--------------------------------|------------------------------------------------------------------------|---------------|
+|`ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
+|`ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
+|`ADNS9800_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
+|`ADNS9800_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
+|`ADNS9800_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ |
The CPI range is 800-8200, in increments of 200. Defaults to 1800 CPI.
@@ -69,7 +69,7 @@ The Analog Joystick is an analog (ADC) driven sensor. There are a variety of jo
|`ANALOG_JOYSTICK_AXIS_MAX` | (Optional) Sets the upper range to be considered movement. | `1023` |
|`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 maxiumum value used for motion. | `2` |
+|`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_ |
@@ -127,11 +127,10 @@ The Pimoroni Trackball module is a I2C based breakout board with an RGB enable t
| Setting | Description | Default |
|-------------------------------------|------------------------------------------------------------------------------------|---------|
|`PIMORONI_TRACKBALL_ADDRESS` | (Required) Sets the I2C Address for the Pimoroni Trackball. | `0x0A` |
-|`PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackpad in milliseconds. | `100` |
-|`PIMORONI_TRACKBALL_INTERVAL_MS` | (Optional) The update/read interval for the sensor in milliseconds. | `8` |
+|`PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackball in milliseconds. | `100` |
|`PIMORONI_TRACKBALL_SCALE` | (Optional) The multiplier used to generate reports from the sensor. | `5` |
|`PIMORONI_TRACKBALL_DEBOUNCE_CYCLES` | (Optional) The number of scan cycles used for debouncing on the ball press. | `20` |
-|`PIMORONI_TRACKBALL_ERROR_COUNT` | (Optional) Specifies the number of read/write errors until the sensor is disabled. | `10` |
+|`PIMORONI_TRACKBALL_ERROR_COUNT` | (Optional) Specifies the number of read/write errors until the sensor is disabled. | `10` |
### PMW 3360 Sensor
@@ -145,20 +144,50 @@ The PMW 3360 is an SPI driven optical sensor, that uses a built in IR LED for su
| Setting | Description | Default |
|-----------------------------|--------------------------------------------------------------------------------------------|---------------|
-|`PMW3360_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ |
-|`PMW3360_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
-|`PMW3360_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
-|`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
-|`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
-|`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` |
-|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 30 degrees directly in the sensor. | `0` |
+|`PMW3360_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ |
+|`PMW3360_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
+|`PMW3360_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
+|`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
+|`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
+|`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` |
+|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 127 degrees directly in the sensor.| `0` |
+|`PMW3360_FIRMWARE_UPLOAD_FAST` | (Optional) Skips the 15us wait between firmware blocks. | _not defined_ |
The CPI range is 100-12000, in increments of 100. Defaults to 1600 CPI.
+### PMW 3389 Sensor
+
+To use the PMW 3389 sensor, add this to your `rules.mk`
+
+```make
+POINTING_DEVICE_DRIVER = pmw3389
+```
+
+The PMW 3389 is an SPI driven optical sensor, that uses a built in IR LED for surface tracking.
+
+| Setting | Description | Default |
+|---------------------------------|--------------------------------------------------------------------------------------------|---------------|
+|`PMW3389_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ |
+|`PMW3389_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
+|`PMW3389_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
+|`PMW3389_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
+|`PMW3389_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
+|`PMW3389_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` |
+|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 30 degrees directly in the sensor. | `0` |
+|`PMW3389_FIRMWARE_UPLOAD_FAST` | (Optional) Skips the 15us wait between firmware blocks. | _not defined_ |
+
+The CPI range is 50-16000, in increments of 50. Defaults to 2000 CPI.
+
### Custom Driver
-If you have a sensor type that isn't supported here, you can manually implement it, by adding these functions (with the correct implementation for your device):
+If you have a sensor type that isn't supported above, a custom option is available by adding the following to your `rules.mk`
+
+```make
+POINTING_DEVICE_DRIVER = custom
+```
+
+Using the custom driver will require implementing the following functions:
```c
void pointing_device_driver_init(void) {}
@@ -171,14 +200,35 @@ void pointing_device_driver_set_cpi(uint16_t cpi) {}
## Common Configuration
-| Setting | Description | Default |
-|-------------------------------|-----------------------------------------------------------------------|---------------|
-|`POINTING_DEVICE_ROTATION_90` | (Optional) Rotates the X and Y data by 90 degrees. | _not defined_ |
-|`POINTING_DEVICE_ROTATION_180` | (Optional) Rotates the X and Y data by 180 degrees. | _not defined_ |
-|`POINTING_DEVICE_ROTATION_270` | (Optional) Rotates the X and Y data by 270 degrees. | _not defined_ |
-|`POINTING_DEVICE_INVERT_X` | (Optional) Inverts the X axis report. | _not defined_ |
-|`POINTING_DEVICE_INVERT_Y` | (Optional) Inverts the Y axis report. | _not defined_ |
-|`POINTING_DEVICE_MOTION_PIN` | (Optional) If supported, will only read from sensor if pin is active. | _not defined_ |
+| Setting | Description | Default |
+|----------------------------------|-----------------------------------------------------------------------|-------------------|
+|`POINTING_DEVICE_ROTATION_90` | (Optional) Rotates the X and Y data by 90 degrees. | _not defined_ |
+|`POINTING_DEVICE_ROTATION_180` | (Optional) Rotates the X and Y data by 180 degrees. | _not defined_ |
+|`POINTING_DEVICE_ROTATION_270` | (Optional) Rotates the X and Y data by 270 degrees. | _not defined_ |
+|`POINTING_DEVICE_INVERT_X` | (Optional) Inverts the X axis report. | _not defined_ |
+|`POINTING_DEVICE_INVERT_Y` | (Optional) Inverts the Y axis report. | _not defined_ |
+|`POINTING_DEVICE_MOTION_PIN` | (Optional) If supported, will only read from sensor if pin is active. | _not defined_ |
+|`POINTING_DEVICE_TASK_THROTTLE_MS` | (Optional) Limits the frequency that the sensor is polled for motion. | _not defined_ |
+
+!> When using `SPLIT_POINTING_ENABLE` the `POINTING_DEVICE_MOTION_PIN` functionality is not supported and `POINTING_DEVICE_TASK_THROTTLE_MS` will default to `1`. Increasing this value will increase transport performance at the cost of possible mouse responsiveness.
+
+
+## Split Keyboard Configuration
+
+The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](feature_split_keyboard.md?id=data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device.
+
+| Setting | Description | Default |
+|----------------------------------------|-----------------------------------------------------------------------|---------------|
+|`POINTING_DEVICE_LEFT` | Pointing device on the left side (Required - pick one only) | _not defined_ |
+|`POINTING_DEVICE_RIGHT` | Pointing device on the right side (Required - pick one only) | _not defined_ |
+|`POINTING_DEVICE_COMBINED` | Pointing device on both sides (Required - pick one only) | _not defined_ |
+|`POINTING_DEVICE_ROTATION_90_RIGHT` | (Optional) Rotates the X and Y data by 90 degrees. | _not defined_ |
+|`POINTING_DEVICE_ROTATION_180_RIGHT` | (Optional) Rotates the X and Y data by 180 degrees. | _not defined_ |
+|`POINTING_DEVICE_ROTATION_270_RIGHT` | (Optional) Rotates the X and Y data by 270 degrees. | _not defined_ |
+|`POINTING_DEVICE_INVERT_X_RIGHT` | (Optional) Inverts the X axis report. | _not defined_ |
+|`POINTING_DEVICE_INVERT_Y_RIGHT` | (Optional) Inverts the Y axis report. | _not defined_ |
+
+!> If there is a `_RIGHT` configuration option or callback, the [common configuration](feature_pointing_device.md?id=common-configuration) option will work for the left. For correct left/right detection you should setup a [handedness option](feature_split_keyboard?id=setting-handedness), `EE_HANDS` is usually a good option for an existing board that doesn't do handedness by hardware.
## Callbacks and Functions
@@ -188,7 +238,7 @@ void pointing_device_driver_set_cpi(uint16_t cpi) {}
| `pointing_device_init_kb(void)` | Callback to allow for keyboard level initialization. Useful for additional hardware sensors. |
| `pointing_device_init_user(void)` | Callback to allow for user level initialization. Useful for additional hardware sensors. |
| `pointing_device_task_kb(mouse_report)` | Callback that sends sensor data, so keyboard code can intercept and modify the data. Returns a mouse report. |
-| `pointing_device_task_user(mouse_report)` | Callback that sends sensor data, so user coe can intercept and modify the data. Returns a mouse report. |
+| `pointing_device_task_user(mouse_report)` | Callback that sends sensor data, so user code can intercept and modify the data. Returns a mouse report. |
| `pointing_device_handle_buttons(buttons, pressed, button)` | Callback to handle hardware button presses. Returns a `uint8_t`. |
| `pointing_device_get_cpi(void)` | Gets the current CPI/DPI setting from the sensor, if supported. |
| `pointing_device_set_cpi(uint16_t)` | Sets the CPI/DPI, if supported. |
@@ -196,6 +246,21 @@ void pointing_device_driver_set_cpi(uint16_t cpi) {}
| `pointing_device_set_report(mouse_report)` | Sets the mouse report to the assigned `mouse_report_t` data structured passed to the function. |
| `pointing_device_send(void)` | Sends the current mouse report to the host system. Function can be replaced. |
| `has_mouse_report_changed(old, new)` | Compares the old and new `mouse_report_t` data and returns true only if it has changed. |
+| `pointing_device_adjust_by_defines(mouse_report)` | Applies rotations and invert configurations to a raw mouse report. |
+
+
+## Split Keyboard Callbacks and Functions
+
+The combined functions below are only available when using `SPLIT_POINTING_ENABLE` and `POINTING_DEVICE_COMBINED`. The 2 callbacks `pointing_device_task_combined_*` replace the single sided equivalents above. See the [combined pointing devices example](feature_pointing_device.md?id=combined-pointing-devices)
+
+| Function | Description |
+|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
+| `pointing_device_set_shared_report(mouse_report)` | Sets the shared mouse report to the assigned `mouse_report_t` data structured passed to the function. |
+| `pointing_device_set_cpi_on_side(bool, uint16_t)` | Sets the CPI/DPI of one side, if supported. Passing `true` will set the left and `false` the right` |
+| `pointing_device_combine_reports(left_report, right_report)` | Returns a combined mouse_report of left_report and right_report (as a `mouse_report_t` data structure) |
+| `pointing_device_task_combined_kb(left_report, right_report)` | Callback, so keyboard code can intercept and modify the data. Returns a combined mouse report. |
+| `pointing_device_task_combined_user(left_report, right_report)` | Callback, so user code can intercept and modify. Returns a combined mouse report using `pointing_device_combine_reports` |
+| `pointing_device_adjust_by_defines_right(mouse_report)` | Applies right side rotations and invert configurations to a raw mouse report. |
# Manipulating Mouse Reports
@@ -274,3 +339,62 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
```
This allows you to toggle between scrolling and cursor movement by pressing the DRAG_SCROLL key.
+
+## Split Examples
+
+The following examples make use the `SPLIT_POINTING_ENABLE` functionality and show how to manipulate the mouse report for a scrolling mode.
+
+### Single Pointing Device
+
+The following example will work with either `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` and enables scrolling mode while on a particular layer.
+
+```c
+
+static bool scrolling_mode = false;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _RAISE: // If we're on the _RAISE layer enable scrolling mode
+ scrolling_mode = true;
+ pointing_device_set_cpi(2000);
+ break;
+ default:
+ if (scrolling_mode) { // check if we were scrolling before and set disable if so
+ scrolling_mode = false;
+ pointing_device_set_cpi(8000);
+ }
+ break;
+ }
+ return state;
+}
+
+report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
+ if (scrolling_mode) {
+ mouse_report.h = mouse_report.x;
+ mouse_report.v = mouse_report.y;
+ mouse_report.x = 0;
+ mouse_report.y = 0;
+ }
+ return mouse_report;
+}
+```
+
+### Combined Pointing Devices
+
+The following example requires `POINTING_DEVICE_COMBINED` and sets the left side pointing device to scroll only.
+
+```c
+void keyboard_post_init_user(void) {
+ pointing_device_set_cpi_on_side(true, 1000); //Set cpi on left side to a low value for slower scrolling.
+ pointing_device_set_cpi_on_side(false, 8000); //Set cpi on right side to a reasonable value for mousing.
+}
+
+report_mouse_t pointing_device_task_combined_user(report_mouse_t left_report, report_mouse_t right_report) {
+ left_report.h = left_report.x;
+ left_report.v = left_report.y;
+ left_report.x = 0;
+ left_report.y = 0;
+ return pointing_device_combine_reports(left_report, right_report);
+}
+```
+=======
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 536609b39a..a021779d43 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -233,6 +233,115 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3737.pdf) and the header file `drivers/led/issi/is31fl3737.h`. The `driver` is the index of the driver you defined in your `config.h` (Only `0`, `1` for now).
---
+### IS31FLCOMMON :id=is31flcommon
+
+There is basic support for addressable RGB matrix lighting with a selection of I2C ISSI Lumissil RGB controllers through a shared common driver. To enable it, add this to your `rules.mk`:
+
+```makefile
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = <driver name>
+```
+
+Where `<driver name>` is the applicable LED driver chip as below
+
+| Driver Name | Data Sheet | Capability |
+|-------------|------------|------------|
+| `IS31FL3742A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3742A_DS.pdf) | 60 RGB, 30x6 Matrix |
+| `ISSIFL3743A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3743A_DS.pdf) | 66 RGB, 18x11 Matrix |
+| `IS31FL3745` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3745_DS.pdf) | 48 RGB, 18x8 Matrix |
+| `IS31FL3746A` | [datasheet](https://www.lumissil.com/assets/pdf/core/IS31FL3746A_DS.pdf) | 24 RGB, 18x4 Matrix |
+
+You can use between 1 and 4 IC's. Do not specify `DRIVER_ADDR_<N>` define for IC's if not present on your keyboard. The `DRIVER_ADDR_1` default assumes that all Address pins on the controller have been connected to GND. Drivers that have SYNC functionality have the default settings to disable if 1 driver. If more than 1 drivers then `DRIVER_ADDR_1` will be set to Master and the remaining ones set to Slave.
+
+Configure the hardware via your `config.h`:
+
+| Variable | Description | Default |
+|----------|-------------|---------|
+| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
+| `DRIVER_ADDR_1` | (Optional) Address for the first RGB driver | |
+| `DRIVER_ADDR_<N>` | (Required) Address for the additional RGB drivers | |
+| `ISSI_SSR_<N>` | (Optional) Configuration for the Spread Spectrum Register | |
+| `ISSI_CONFIGURATION` | (Optional) Configuration for the Configuration Register | |
+| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `ISSI_PULLDOWNUP` | (Optional) Configuration for the Pull Up & Pull Down Register | |
+| `ISSI_TEMP` | (Optional) Configuration for the Tempature Register | |
+| `ISSI_PWM_ENABLE` | (Optional) Configuration for the PWM Enable Register | |
+| `ISSI_PWM_SET` | (Optional) Configuration for the PWM Setting Register | |
+| `ISSI_SCAL_RED` | (Optional) Configuration for the RED LEDs in Scaling Registers | 0xFF |
+| `ISSI_SCAL_BLUE` | (Optional) Configuration for the BLUE LEDs in Scaling Registers | 0xFF |
+| `ISSI_SCAL_GREEN` | (Optional) Configuration for the GREEN LEDs in Scaling Registers | 0xFF |
+| `ISSI_MANUAL_SCALING` | (Optional) If you wish to configure the Scaling Registers manually | |
+
+
+Defaults
+
+| Variable | IS31FL3742A | IS31FL3743A | IS31FL3745 | IS31FL3746 |
+|----------|-------------|-------------|------------|------------|
+| `DRIVER_ADDR_1` | 0b0110000 | 0b0100000 | 0b0100000 | 0b1100000 |
+| `ISSI_SSR_1` | 0x00 | 0x00 / 0x60 | 0x00 / 0xC0 | 0x00 |
+| `ISSI_SSR_<2-4>` | 0x00 | 0x40 | 0x80 | 0x00 |
+| `ISSI_CONFIGURATION` | 0x31 | 0x01 | 0x31 | 0x01 |
+| `ISSI_PULLDOWNUP` | 0x55 | 0x33 | 0x33 | 0x33 |
+| `ISSI_TEMP` | N/A | 0x00 | 0x00 | 0x00 |
+| `ISSI_PWM_ENABLE` | N/A | N/A | N/A | 0x00 |
+| `ISSI_PWM_SET` | 0x00 | N/A | N/A | 0x00 |
+
+Here is an example using 2 drivers.
+
+```c
+#define DRIVER_ADDR_2 0b0100001
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 66
+#define DRIVER_2_LED_TOTAL 42
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+```
+
+!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
+
+Currently only 4 drivers are supported, but it would be trivial to support for more. Note that using a combination of different drivers is not supported. All drivers must be of the same model.
+
+Define these arrays listing all the LEDs in your `<keyboard>.c`:
+
+```c
+const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, CS1_SW1, CS2_SW1, CS3_SW1},
+ ....
+}
+```
+
+Where `CSx_SWx` is the location of the LED in the matrix defined by the datasheet. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` for now).
+
+`ISSI_MANUAL_SCALING` is used to override the Scaling for individual LED's. By default they will be set as per `ISSI_SCAL_<colour>`. In `config.h` set how many LED's you want to manually set scaling for.
+Eg `#define ISSI_MANUAL_SCALING 3`
+
+Then Define the array listing all the LEDs you want to override in your `<keyboard>.c`:
+
+```c
+const is31_led __flash g_is31_scaling[ISSI_MANUAL_SCALING] = {
+ * LED Index
+ * | R scaling
+ * | | G scaling
+ * | | | B scaling
+ * | | | | */
+ {5, 120, 155, 167},
+ {9, 120, 155, 167},
+ ....
+}
+```
+
+Where LED Index is the position of the LED in the `g_is31_leds` array. The `scaling` value between 0 and 255 to be written to the Scaling Register.
+
+---
### WS2812 :id=ws2812
@@ -457,6 +566,7 @@ enum rgb_matrix_effects {
RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left
RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right
RGB_MATRIX_PIXEL_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges
+ RGB_MATRIX_PIXEL_FLOW, // Pulsing RGB flow along LED wiring with random hues
RGB_MATRIX_PIXEL_RAIN, // Randomly light keys with random hues
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM!
@@ -512,6 +622,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_HUE_PENDULUM` |Enables `RGB_MATRIX_HUE_PENDULUM` |
|`#define ENABLE_RGB_MATRIX_HUE_WAVE` |Enables `RGB_MATRIX_HUE_WAVE ` |
|`#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL` |Enables `RGB_MATRIX_PIXEL_FRACTAL` |
+|`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` |
|`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` |
?> These modes don't require any additional defines.
@@ -707,6 +818,7 @@ Where `28` is an unused index from `eeconfig.h`.
|`rgb_matrix_decrease_speed_noeeprom()` |Decrease the speed of the animations (not written to EEPROM) |
|`rgb_matrix_set_speed(speed)` |Set the speed of the animations to the given value where `speed` is between 0 and 255 |
|`rgb_matrix_set_speed_noeeprom(speed)` |Set the speed of the animations to the given value where `speed` is between 0 and 255 (not written to EEPROM) |
+|`rgb_matrix_reload_from_eeprom()` |Reload the effect configuration (enabled, mode and color) from EEPROM |
### Change Color :id=change-color
|Function |Description |
diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md
index dbc7740f98..6ef70bf788 100644
--- a/docs/feature_split_keyboard.md
+++ b/docs/feature_split_keyboard.md
@@ -273,6 +273,14 @@ This enables transmitting the current OLED on/off status to the slave side of th
This enables transmitting the current ST7565 on/off status to the slave side of the split keyboard. The purpose of this feature is to support state (on/off state only) syncing.
+```c
+#define SPLIT_POINTING_ENABLE
+```
+
+This enables transmitting the pointing device status to the master side of the split keyboard. The purpose of this feature is to enable use pointing devices on the slave side.
+
+!> There is additional required configuration for `SPLIT_POINTING_ENABLE` outlined in the [pointing device documentation](feature_pointing_device.md?id=split-keyboard-configuration).
+
### Custom data sync between sides :id=custom-data-sync
QMK's split transport allows for arbitrary data transactions at both the keyboard and user levels. This is modelled on a remote procedure call, with the master invoking a function on the slave side, with the ability to send data from master to slave, process it slave side, and send data back from slave to master.
diff --git a/docs/feature_wpm.md b/docs/feature_wpm.md
index 87145c97e3..9f98ef8336 100644
--- a/docs/feature_wpm.md
+++ b/docs/feature_wpm.md
@@ -16,7 +16,7 @@ For split keyboards using soft serial, the computed WPM score will be available
| `WPM_ALLOW_COUNT_REGRESSION` | _Not defined_ | If defined allows the WPM to be decreased when hitting Delete or Backspace |
| `WPM_UNFILTERED` | _Not defined_ | If undefined (the default), WPM values will be smoothed to avoid sudden changes in value |
| `WPM_SAMPLE_SECONDS` | `5` | This defines how many seconds of typing to average, when calculating WPM |
-| `WPM_SAMPLE_PERIODS` | `50` | This defines how many sampling periods to use when calculating WPM |
+| `WPM_SAMPLE_PERIODS` | `25` | This defines how many sampling periods to use when calculating WPM |
| `WPM_LAUNCH_CONTROL` | _Not defined_ | If defined, WPM values will be calculated using partial buffers when typing begins |
'WPM_UNFILTERED' is potentially useful if you're filtering data in some other way (and also because it reduces the code required for the WPM feature), or if reducing measurement latency to a minimum is important for you.
diff --git a/docs/flash_driver.md b/docs/flash_driver.md
new file mode 100644
index 0000000000..fa7fed5171
--- /dev/null
+++ b/docs/flash_driver.md
@@ -0,0 +1,24 @@
+# FLASH Driver Configuration :id=flash-driver-configuration
+
+The FLASH driver can be swapped out depending on the needs of the keyboard, or whether extra hardware is present.
+
+Driver | Description
+-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+`FLASH_DRIVER = spi` | Supports writing to almost all NOR Flash chips. See the driver section below.
+
+
+## SPI FLASH Driver Configuration :id=spi-flash-driver-configuration
+
+Currently QMK supports almost all NOR Flash chips over SPI. As such, requires a working spi_master driver configuration. You can override the driver configuration via your config.h:
+
+`config.h` override | Description | Default Value
+-----------------------------------------------|--------------------------------------------------------------------------------------|-----------------
+`#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN` | SPI Slave select pin in order to inform that the FLASH is currently being addressed | _none_
+`#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR` | Clock divisor used to divide the peripheral clock to derive the SPI frequency | `8`
+`#define EXTERNAL_FLASH_PAGE_SIZE` | The Page size of the FLASH in bytes, as specified in the datasheet | `256`
+`#define EXTERNAL_FLASH_SECTOR_SIZE` | The sector size of the FLASH in bytes, as specified in the datasheet | `(4 * 1024)`
+`#define EXTERNAL_FLASH_BLOCK_SIZE` | The block size of the FLASH in bytes, as specified in the datasheet | `(64 * 1024)`
+`#define EXTERNAL_FLASH_SIZE` | The total size of the FLASH in bytes, as specified in the datasheet | `(512 * 1024)`
+`#define EXTERNAL_FLASH_ADDRESS_SIZE` | The Flash address size in bytes, as specified in datasheet | `3`
+
+!> All the above default configurations are based on MX25L4006E NOR Flash.
diff --git a/docs/internals_gpio_control.md b/docs/internals_gpio_control.md
index ccd3f8c74d..e1f1515b71 100644
--- a/docs/internals_gpio_control.md
+++ b/docs/internals_gpio_control.md
@@ -6,17 +6,19 @@ QMK has a GPIO control abstraction layer which is microcontroller agnostic. This
The following functions provide basic control of GPIOs and are found in `platforms/<platform>/gpio.h`.
-|Function |Description | Old AVR Examples | Old ChibiOS/ARM Examples |
-|------------------------|--------------------------------------------------|-------------------------------------------------|-------------------------------------------------|
-| `setPinInput(pin)` | Set pin as input with high impedance (High-Z) | `DDRB &= ~(1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT)` |
-| `setPinInputHigh(pin)` | Set pin as input with builtin pull-up resistor | `DDRB &= ~(1<<2); PORTB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)` |
-| `setPinInputLow(pin)` | Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR) | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)` |
-| `setPinOutput(pin)` | Set pin as output | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
-| `writePinHigh(pin)` | Set pin level as high, assuming it is an output | `PORTB \|= (1<<2)` | `palSetLine(pin)` |
-| `writePinLow(pin)` | Set pin level as low, assuming it is an output | `PORTB &= ~(1<<2)` | `palClearLine(pin)` |
-| `writePin(pin, level)` | Set pin level, assuming it is an output | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` |
-| `readPin(pin)` | Returns the level of the pin | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)` | `palReadLine(pin)` |
-| `togglePin(pin)` | Invert pin level, assuming it is an output | `PORTB ^= (1<<2)` | `palToggleLine(pin)` |
+| Function | Description | Old AVR Examples | Old ChibiOS/ARM Examples |
+|------------------------------|-----------------------------------------------------|-------------------------------------------------|--------------------------------------------------|
+| `setPinInput(pin)` | Set pin as input with high impedance (High-Z) | `DDRB &= ~(1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT)` |
+| `setPinInputHigh(pin)` | Set pin as input with builtin pull-up resistor | `DDRB &= ~(1<<2); PORTB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)` |
+| `setPinInputLow(pin)` | Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR) | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)` |
+| `setPinOutput(pin)` | Set pin as output (alias of `setPinOutputPushPull`) | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
+| `setPinOutputPushPull(pin)` | Set pin as output, push/pull mode | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
+| `setPinOutputOpenDrain(pin)` | Set pin as output, open-drain mode | N/A (Not implemented on AVR) | `palSetLineMode(pin, PAL_MODE_OUTPUT_OPENDRAIN)` |
+| `writePinHigh(pin)` | Set pin level as high, assuming it is an output | `PORTB \|= (1<<2)` | `palSetLine(pin)` |
+| `writePinLow(pin)` | Set pin level as low, assuming it is an output | `PORTB &= ~(1<<2)` | `palClearLine(pin)` |
+| `writePin(pin, level)` | Set pin level, assuming it is an output | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` |
+| `readPin(pin)` | Returns the level of the pin | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)` | `palReadLine(pin)` |
+| `togglePin(pin)` | Invert pin level, assuming it is an output | `PORTB ^= (1<<2)` | `palToggleLine(pin)` |
## Advanced Settings :id=advanced-settings
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 84a6d456ba..58ce43d309 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -219,11 +219,11 @@ See also: [Basic Keycodes](keycodes_basic.md)
See also: [Quantum Keycodes](quantum_keycodes.md#qmk-keycodes)
-|Key |Aliases |Description |
-|--------------|---------|-------------------------------------------------------|
-|`RESET` | |Put the keyboard into bootloader mode for flashing |
-|`DEBUG` | |Toggle debug mode |
-|`EEPROM_RESET`|`EEP_RST`|Reinitializes the keyboard's EEPROM (persistent memory)|
+|Key |Aliases |Description |
+|-----------------|---------|-------------------------------------------------------|
+|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
+|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
+|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)|
## Audio Keys :id=audio-keys
@@ -283,9 +283,9 @@ See also: [Dynamic Macros](feature_dynamic_macros.md)
See also: [Grave Escape](feature_grave_esc.md)
-|Key |Aliases |Description |
-|-----------|---------|------------------------------------------------------------------|
-|`GRAVE_ESC`|`KC_GESC`|Escape when pressed, <code>&#96;</code> when Shift or GUI are held|
+|Key |Aliases |Description |
+|-----------------|---------|------------------------------------------------------------------|
+|`QK_GRAVE_ESCAPE`|`QK_GESC`|Escape when pressed, <code>&#96;</code> when Shift or GUI are held|
## Key Lock :id=key-lock
@@ -326,6 +326,7 @@ See also: [Magic Keycodes](keycodes_magic.md)
|----------------------------------|---------|--------------------------------------------------------------------------|
|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
+|`MAGIC_TOGGLE_CONTROL_CAPSLOCK` |`CL_TOGG`|Toggle Caps Lock and Left Control swap |
|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
diff --git a/docs/keycodes_magic.md b/docs/keycodes_magic.md
index 7e1b1a4f62..01eb69168e 100644
--- a/docs/keycodes_magic.md
+++ b/docs/keycodes_magic.md
@@ -6,6 +6,7 @@
|----------------------------------|---------|--------------------------------------------------------------------------|
|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
+|`MAGIC_TOGGLE_CONTROL_CAPSLOCK` |`CL_TOGG`|Toggle Caps Lock and Left Control swap |
|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
diff --git a/docs/keymap.md b/docs/keymap.md
index bec781e684..a7c9c50d74 100644
--- a/docs/keymap.md
+++ b/docs/keymap.md
@@ -136,7 +136,7 @@ After this you'll find a list of LAYOUT() macros. A LAYOUT() is simply a list of
`keymaps[][MATRIX_ROWS][MATRIX_COLS]` in QMK holds the 16 bit action code (sometimes referred as the quantum keycode) in it. For the keycode representing typical keys, its high byte is 0 and its low byte is the USB HID usage ID for keyboard.
-> TMK from which QMK was forked uses `const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]` instead and holds the 8 bit keycode. Some keycode values are reserved to induce execution of certain action codes via the `fn_actions[]` array.
+> TMK from which QMK was forked uses `const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]` instead and holds the 8 bit keycode.
#### Base Layer
diff --git a/docs/platformdev_chibios_earlyinit.md b/docs/platformdev_chibios_earlyinit.md
index eb932bc774..aaa91ba438 100644
--- a/docs/platformdev_chibios_earlyinit.md
+++ b/docs/platformdev_chibios_earlyinit.md
@@ -17,7 +17,6 @@ As such, if you wish to override this API consider limiting use to writing to lo
| `config.h` override | Description | Default |
|-----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|
| `#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP` | Whether or not bootloader is to be executed during the early initialisation code of QMK. | `FALSE` |
-| `#define STM32_BOOTLOADER_ADDRESS` | Relevant for single-bank STM32 MCUs, signifies the memory address to jump to bootloader. Consult [AN2606](https://www.st.com/content/st_com/en/search.html#q=an2606-t=resources-page=1) for the _System Memory_ address for your MCU. This value should be of the format `0x11111111`. | `<none>` |
| `#define STM32_BOOTLOADER_DUAL_BANK` | Relevant for dual-bank STM32 MCUs, signifies that a GPIO is to be toggled in order to enter bootloader mode. | `FALSE` |
| `#define STM32_BOOTLOADER_DUAL_BANK_GPIO` | Relevant for dual-bank STM32 MCUs, the pin to toggle when attempting to enter bootloader mode, e.g. `B8` | `<none>` |
| `#define STM32_BOOTLOADER_DUAL_BANK_POLARITY` | Relevant for dual-bank STM32 MCUs, the value to set the pin to in order to trigger charging of the RC circuit. e.g. `0` or `1`. | `0` |
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index 7ebad2c1ee..8e29e05886 100644
--- a/docs/quantum_keycodes.md
+++ b/docs/quantum_keycodes.md
@@ -8,8 +8,8 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
## QMK Keycodes :id=qmk-keycodes
-|Key |Aliases |Description |
-|--------------|---------|-------------------------------------------------------|
-|`RESET` | |Put the keyboard into bootloader mode for flashing |
-|`DEBUG` | |Toggle debug mode |
-|`EEPROM_RESET`|`EEP_RST`|Reinitializes the keyboard's EEPROM (persistent memory)|
+|Key |Aliases |Description |
+|-----------------|---------|-------------------------------------------------------|
+|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
+|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
+|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)|
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index b2e6cae28e..3cc807c179 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -172,7 +172,7 @@ The following animations can be enabled:
### USB
-Every USB keyboard needs to have its USB parmaters defined. At a minimum you need to set vid, pid, and device version.
+Every USB keyboard needs to have its USB parameters defined. At a minimum you need to set the Vendor ID, Product ID, and device version.
Example:
@@ -181,7 +181,9 @@ Example:
"usb": {
"vid": "0xC1ED",
"pid": "0x23B0",
- "device_ver": "0x0001"
+ "device_version": "1.0.0"
}
}
```
+
+The device version is a BCD (binary coded decimal) value, in the format `MMmr`, so the below value would look like `0x0100` in the generated code. This also means the maximum valid values for each part are `99.9.9`, despite it being a hexadecimal value under the hood.
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md
index e4d8d7c146..4a147e0c66 100644
--- a/docs/squeezing_avr.md
+++ b/docs/squeezing_avr.md
@@ -147,6 +147,7 @@ For RGB Matrix, these need to be explicitly enabled as well. To disable any that
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
#undef ENABLE_RGB_MATRIX_HUE_WAVE
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
diff --git a/drivers/bluetooth/adafruit_ble.cpp b/drivers/bluetooth/adafruit_ble.cpp
deleted file mode 100644
index 34a780e9a5..0000000000
--- a/drivers/bluetooth/adafruit_ble.cpp
+++ /dev/null
@@ -1,699 +0,0 @@
-#include "adafruit_ble.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <alloca.h>
-#include "debug.h"
-#include "timer.h"
-#include "action_util.h"
-#include "ringbuffer.hpp"
-#include <string.h>
-#include "spi_master.h"
-#include "wait.h"
-#include "analog.h"
-#include "progmem.h"
-
-// These are the pin assignments for the 32u4 boards.
-// You may define them to something else in your config.h
-// if yours is wired up differently.
-#ifndef ADAFRUIT_BLE_RST_PIN
-# define ADAFRUIT_BLE_RST_PIN D4
-#endif
-
-#ifndef ADAFRUIT_BLE_CS_PIN
-# define ADAFRUIT_BLE_CS_PIN B4
-#endif
-
-#ifndef ADAFRUIT_BLE_IRQ_PIN
-# define ADAFRUIT_BLE_IRQ_PIN E6
-#endif
-
-#ifndef ADAFRUIT_BLE_SCK_DIVISOR
-# define ADAFRUIT_BLE_SCK_DIVISOR 2 // 4MHz SCK/8MHz CPU, calculated for Feather 32U4 BLE
-#endif
-
-#define SAMPLE_BATTERY
-#define ConnectionUpdateInterval 1000 /* milliseconds */
-
-#ifndef BATTERY_LEVEL_PIN
-# define BATTERY_LEVEL_PIN B5
-#endif
-
-static struct {
- bool is_connected;
- bool initialized;
- bool configured;
-
-#define ProbedEvents 1
-#define UsingEvents 2
- bool event_flags;
-
-#ifdef SAMPLE_BATTERY
- uint16_t last_battery_update;
- uint32_t vbat;
-#endif
- uint16_t last_connection_update;
-} state;
-
-// Commands are encoded using SDEP and sent via SPI
-// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md
-
-#define SdepMaxPayload 16
-struct sdep_msg {
- uint8_t type;
- uint8_t cmd_low;
- uint8_t cmd_high;
- struct __attribute__((packed)) {
- uint8_t len : 7;
- uint8_t more : 1;
- };
- uint8_t payload[SdepMaxPayload];
-} __attribute__((packed));
-
-// The recv latency is relatively high, so when we're hammering keys quickly,
-// we want to avoid waiting for the responses in the matrix loop. We maintain
-// a short queue for that. Since there is quite a lot of space overhead for
-// the AT command representation wrapped up in SDEP, we queue the minimal
-// information here.
-
-enum queue_type {
- QTKeyReport, // 1-byte modifier + 6-byte key report
- QTConsumer, // 16-bit key code
-#ifdef MOUSE_ENABLE
- QTMouseMove, // 4-byte mouse report
-#endif
-};
-
-struct queue_item {
- enum queue_type queue_type;
- uint16_t added;
- union __attribute__((packed)) {
- struct __attribute__((packed)) {
- uint8_t modifier;
- uint8_t keys[6];
- } key;
-
- uint16_t consumer;
- struct __attribute__((packed)) {
- int8_t x, y, scroll, pan;
- uint8_t buttons;
- } mousemove;
- };
-};
-
-// Items that we wish to send
-static RingBuffer<queue_item, 40> send_buf;
-// Pending response; while pending, we can't send any more requests.
-// This records the time at which we sent the command for which we
-// are expecting a response.
-static RingBuffer<uint16_t, 2> resp_buf;
-
-static bool process_queue_item(struct queue_item *item, uint16_t timeout);
-
-enum sdep_type {
- SdepCommand = 0x10,
- SdepResponse = 0x20,
- SdepAlert = 0x40,
- SdepError = 0x80,
- SdepSlaveNotReady = 0xFE, // Try again later
- SdepSlaveOverflow = 0xFF, // You read more data than is available
-};
-
-enum ble_cmd {
- BleInitialize = 0xBEEF,
- BleAtWrapper = 0x0A00,
- BleUartTx = 0x0A01,
- BleUartRx = 0x0A02,
-};
-
-enum ble_system_event_bits {
- BleSystemConnected = 0,
- BleSystemDisconnected = 1,
- BleSystemUartRx = 8,
- BleSystemMidiRx = 10,
-};
-
-#define SdepTimeout 150 /* milliseconds */
-#define SdepShortTimeout 10 /* milliseconds */
-#define SdepBackOff 25 /* microseconds */
-#define BatteryUpdateInterval 10000 /* milliseconds */
-
-static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbose, uint16_t timeout = SdepTimeout);
-static bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose = false);
-
-// Send a single SDEP packet
-static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
- spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
- uint16_t timerStart = timer_read();
- bool success = false;
- bool ready = false;
-
- do {
- ready = spi_write(msg->type) != SdepSlaveNotReady;
- if (ready) {
- break;
- }
-
- // Release it and let it initialize
- spi_stop();
- wait_us(SdepBackOff);
- spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
- } while (timer_elapsed(timerStart) < timeout);
-
- if (ready) {
- // Slave is ready; send the rest of the packet
- spi_transmit(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len);
- success = true;
- }
-
- spi_stop();
-
- return success;
-}
-
-static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command, const uint8_t *payload, uint8_t len, bool moredata) {
- msg->type = SdepCommand;
- msg->cmd_low = command & 0xFF;
- msg->cmd_high = command >> 8;
- msg->len = len;
- msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0;
-
- static_assert(sizeof(*msg) == 20, "msg is correctly packed");
-
- memcpy(msg->payload, payload, len);
-}
-
-// Read a single SDEP packet
-static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
- bool success = false;
- uint16_t timerStart = timer_read();
- bool ready = false;
-
- do {
- ready = readPin(ADAFRUIT_BLE_IRQ_PIN);
- if (ready) {
- break;
- }
- wait_us(1);
- } while (timer_elapsed(timerStart) < timeout);
-
- if (ready) {
- spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
-
- do {
- // Read the command type, waiting for the data to be ready
- msg->type = spi_read();
- if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) {
- // Release it and let it initialize
- spi_stop();
- wait_us(SdepBackOff);
- spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
- continue;
- }
-
- // Read the rest of the header
- spi_receive(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)));
-
- // and get the payload if there is any
- if (msg->len <= SdepMaxPayload) {
- spi_receive(msg->payload, msg->len);
- }
- success = true;
- break;
- } while (timer_elapsed(timerStart) < timeout);
-
- spi_stop();
- }
- return success;
-}
-
-static void resp_buf_read_one(bool greedy) {
- uint16_t last_send;
- if (!resp_buf.peek(last_send)) {
- return;
- }
-
- if (readPin(ADAFRUIT_BLE_IRQ_PIN)) {
- struct sdep_msg msg;
-
- again:
- if (sdep_recv_pkt(&msg, SdepTimeout)) {
- if (!msg.more) {
- // We got it; consume this entry
- resp_buf.get(last_send);
- dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send));
- }
-
- if (greedy && resp_buf.peek(last_send) && readPin(ADAFRUIT_BLE_IRQ_PIN)) {
- goto again;
- }
- }
-
- } else if (timer_elapsed(last_send) > SdepTimeout * 2) {
- dprintf("waiting_for_result: timeout, resp_buf size %d\n", (int)resp_buf.size());
-
- // Timed out: consume this entry
- resp_buf.get(last_send);
- }
-}
-
-static void send_buf_send_one(uint16_t timeout = SdepTimeout) {
- struct queue_item item;
-
- // Don't send anything more until we get an ACK
- if (!resp_buf.empty()) {
- return;
- }
-
- if (!send_buf.peek(item)) {
- return;
- }
- if (process_queue_item(&item, timeout)) {
- // commit that peek
- send_buf.get(item);
- dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size());
- } else {
- dprint("failed to send, will retry\n");
- wait_ms(SdepTimeout);
- resp_buf_read_one(true);
- }
-}
-
-static void resp_buf_wait(const char *cmd) {
- bool didPrint = false;
- while (!resp_buf.empty()) {
- if (!didPrint) {
- dprintf("wait on buf for %s\n", cmd);
- didPrint = true;
- }
- resp_buf_read_one(true);
- }
-}
-
-static bool ble_init(void) {
- state.initialized = false;
- state.configured = false;
- state.is_connected = false;
-
- setPinInput(ADAFRUIT_BLE_IRQ_PIN);
-
- spi_init();
-
- // Perform a hardware reset
- setPinOutput(ADAFRUIT_BLE_RST_PIN);
- writePinHigh(ADAFRUIT_BLE_RST_PIN);
- writePinLow(ADAFRUIT_BLE_RST_PIN);
- wait_ms(10);
- writePinHigh(ADAFRUIT_BLE_RST_PIN);
-
- wait_ms(1000); // Give it a second to initialize
-
- state.initialized = true;
- return state.initialized;
-}
-
-static inline uint8_t min(uint8_t a, uint8_t b) { return a < b ? a : b; }
-
-static bool read_response(char *resp, uint16_t resplen, bool verbose) {
- char *dest = resp;
- char *end = dest + resplen;
-
- while (true) {
- struct sdep_msg msg;
-
- if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) {
- dprint("sdep_recv_pkt failed\n");
- return false;
- }
-
- if (msg.type != SdepResponse) {
- *resp = 0;
- return false;
- }
-
- uint8_t len = min(msg.len, end - dest);
- if (len > 0) {
- memcpy(dest, msg.payload, len);
- dest += len;
- }
-
- if (!msg.more) {
- // No more data is expected!
- break;
- }
- }
-
- // Ensure the response is NUL terminated
- *dest = 0;
-
- // "Parse" the result text; we want to snip off the trailing OK or ERROR line
- // Rewind past the possible trailing CRLF so that we can strip it
- --dest;
- while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) {
- *dest = 0;
- --dest;
- }
-
- // Look back for start of preceeding line
- char *last_line = strrchr(resp, '\n');
- if (last_line) {
- ++last_line;
- } else {
- last_line = resp;
- }
-
- bool success = false;
- static const char kOK[] PROGMEM = "OK";
-
- success = !strcmp_P(last_line, kOK);
-
- if (verbose || !success) {
- dprintf("result: %s\n", resp);
- }
- return success;
-}
-
-static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbose, uint16_t timeout) {
- const char * end = cmd + strlen(cmd);
- struct sdep_msg msg;
-
- if (verbose) {
- dprintf("ble send: %s\n", cmd);
- }
-
- if (resp) {
- // They want to decode the response, so we need to flush and wait
- // for all pending I/O to finish before we start this one, so
- // that we don't confuse the results
- resp_buf_wait(cmd);
- *resp = 0;
- }
-
- // Fragment the command into a series of SDEP packets
- while (end - cmd > SdepMaxPayload) {
- sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true);
- if (!sdep_send_pkt(&msg, timeout)) {
- return false;
- }
- cmd += SdepMaxPayload;
- }
-
- sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false);
- if (!sdep_send_pkt(&msg, timeout)) {
- return false;
- }
-
- if (resp == NULL) {
- uint16_t now = timer_read();
- while (!resp_buf.enqueue(now)) {
- resp_buf_read_one(false);
- }
- uint16_t later = timer_read();
- if (TIMER_DIFF_16(later, now) > 0) {
- dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now));
- }
- return true;
- }
-
- return read_response(resp, resplen, verbose);
-}
-
-bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) {
- char *cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
- strcpy_P(cmdbuf, cmd);
- return at_command(cmdbuf, resp, resplen, verbose);
-}
-
-bool adafruit_ble_is_connected(void) { return state.is_connected; }
-
-bool adafruit_ble_enable_keyboard(void) {
- char resbuf[128];
-
- if (!state.initialized && !ble_init()) {
- return false;
- }
-
- state.configured = false;
-
- // Disable command echo
- static const char kEcho[] PROGMEM = "ATE=0";
- // Make the advertised name match the keyboard
- static const char kGapDevName[] PROGMEM = "AT+GAPDEVNAME=" STR(PRODUCT);
- // Turn on keyboard support
- static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1";
-
- // Adjust intervals to improve latency. This causes the "central"
- // system (computer/tablet) to poll us every 10-30 ms. We can't
- // set a smaller value than 10ms, and 30ms seems to be the natural
- // processing time on my macbook. Keeping it constrained to that
- // feels reasonable to type to.
- static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,";
-
- // Reset the device so that it picks up the above changes
- static const char kATZ[] PROGMEM = "ATZ";
-
- // Turn down the power level a bit
- static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12";
- static PGM_P const configure_commands[] PROGMEM = {
- kEcho, kGapIntervals, kGapDevName, kHidEnOn, kPower, kATZ,
- };
-
- uint8_t i;
- for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]); ++i) {
- PGM_P cmd;
- memcpy_P(&cmd, configure_commands + i, sizeof(cmd));
-
- if (!at_command_P(cmd, resbuf, sizeof(resbuf))) {
- dprintf("failed BLE command: %S: %s\n", cmd, resbuf);
- goto fail;
- }
- }
-
- state.configured = true;
-
- // Check connection status in a little while; allow the ATZ time
- // to kick in.
- state.last_connection_update = timer_read();
-fail:
- return state.configured;
-}
-
-static void set_connected(bool connected) {
- if (connected != state.is_connected) {
- if (connected) {
- dprint("BLE connected\n");
- } else {
- dprint("BLE disconnected\n");
- }
- state.is_connected = connected;
-
- // TODO: if modifiers are down on the USB interface and
- // we cut over to BLE or vice versa, they will remain stuck.
- // This feels like a good point to do something like clearing
- // the keyboard and/or generating a fake all keys up message.
- // However, I've noticed that it takes a couple of seconds
- // for macOS to to start recognizing key presses after BLE
- // is in the connected state, so I worry that doing that
- // here may not be good enough.
- }
-}
-
-void adafruit_ble_task(void) {
- char resbuf[48];
-
- if (!state.configured && !adafruit_ble_enable_keyboard()) {
- return;
- }
- resp_buf_read_one(true);
- send_buf_send_one(SdepShortTimeout);
-
- if (resp_buf.empty() && (state.event_flags & UsingEvents) && readPin(ADAFRUIT_BLE_IRQ_PIN)) {
- // Must be an event update
- if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) {
- uint32_t mask = strtoul(resbuf, NULL, 16);
-
- if (mask & BleSystemConnected) {
- set_connected(true);
- } else if (mask & BleSystemDisconnected) {
- set_connected(false);
- }
- }
- }
-
- if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) {
- bool shouldPoll = true;
- if (!(state.event_flags & ProbedEvents)) {
- // Request notifications about connection status changes.
- // This only works in SPIFRIEND firmware > 0.6.7, which is why
- // we check for this conditionally here.
- // Note that at the time of writing, HID reports only work correctly
- // with Apple products on firmware version 0.6.7!
- // https://forums.adafruit.com/viewtopic.php?f=8&t=104052
- if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) {
- at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf));
- state.event_flags |= UsingEvents;
- }
- state.event_flags |= ProbedEvents;
-
- // leave shouldPoll == true so that we check at least once
- // before relying solely on events
- } else {
- shouldPoll = false;
- }
-
- static const char kGetConn[] PROGMEM = "AT+GAPGETCONN";
- state.last_connection_update = timer_read();
-
- if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) {
- set_connected(atoi(resbuf));
- }
- }
-
-#ifdef SAMPLE_BATTERY
- if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval && resp_buf.empty()) {
- state.last_battery_update = timer_read();
-
- state.vbat = analogReadPin(BATTERY_LEVEL_PIN);
- }
-#endif
-}
-
-static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
- char cmdbuf[48];
- char fmtbuf[64];
-
- // Arrange to re-check connection after keys have settled
- state.last_connection_update = timer_read();
-
-#if 1
- if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) {
- dprintf("send latency %dms\n", TIMER_DIFF_16(state.last_connection_update, item->added));
- }
-#endif
-
- switch (item->queue_type) {
- case QTKeyReport:
- strcpy_P(fmtbuf, PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x"));
- snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier, item->key.keys[0], item->key.keys[1], item->key.keys[2], item->key.keys[3], item->key.keys[4], item->key.keys[5]);
- return at_command(cmdbuf, NULL, 0, true, timeout);
-
- case QTConsumer:
- strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x"));
- snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer);
- return at_command(cmdbuf, NULL, 0, true, timeout);
-
-#ifdef MOUSE_ENABLE
- case QTMouseMove:
- strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
- snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x, item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
- if (!at_command(cmdbuf, NULL, 0, true, timeout)) {
- return false;
- }
- strcpy_P(cmdbuf, PSTR("AT+BLEHIDMOUSEBUTTON="));
- if (item->mousemove.buttons & MOUSE_BTN1) {
- strcat(cmdbuf, "L");
- }
- if (item->mousemove.buttons & MOUSE_BTN2) {
- strcat(cmdbuf, "R");
- }
- if (item->mousemove.buttons & MOUSE_BTN3) {
- strcat(cmdbuf, "M");
- }
- if (item->mousemove.buttons == 0) {
- strcat(cmdbuf, "0");
- }
- return at_command(cmdbuf, NULL, 0, true, timeout);
-#endif
- default:
- return true;
- }
-}
-
-void adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys) {
- struct queue_item item;
- bool didWait = false;
-
- item.queue_type = QTKeyReport;
- item.key.modifier = hid_modifier_mask;
- item.added = timer_read();
-
- while (nkeys >= 0) {
- item.key.keys[0] = keys[0];
- item.key.keys[1] = nkeys >= 1 ? keys[1] : 0;
- item.key.keys[2] = nkeys >= 2 ? keys[2] : 0;
- item.key.keys[3] = nkeys >= 3 ? keys[3] : 0;
- item.key.keys[4] = nkeys >= 4 ? keys[4] : 0;
- item.key.keys[5] = nkeys >= 5 ? keys[5] : 0;
-
- if (!send_buf.enqueue(item)) {
- if (!didWait) {
- dprint("wait for buf space\n");
- didWait = true;
- }
- send_buf_send_one();
- continue;
- }
-
- if (nkeys <= 6) {
- return;
- }
-
- nkeys -= 6;
- keys += 6;
- }
-}
-
-void adafruit_ble_send_consumer_key(uint16_t usage) {
- struct queue_item item;
-
- item.queue_type = QTConsumer;
- item.consumer = usage;
-
- while (!send_buf.enqueue(item)) {
- send_buf_send_one();
- }
-}
-
-#ifdef MOUSE_ENABLE
-void adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons) {
- struct queue_item item;
-
- item.queue_type = QTMouseMove;
- item.mousemove.x = x;
- item.mousemove.y = y;
- item.mousemove.scroll = scroll;
- item.mousemove.pan = pan;
- item.mousemove.buttons = buttons;
-
- while (!send_buf.enqueue(item)) {
- send_buf_send_one();
- }
-}
-#endif
-
-uint32_t adafruit_ble_read_battery_voltage(void) { return state.vbat; }
-
-bool adafruit_ble_set_mode_leds(bool on) {
- if (!state.configured) {
- return false;
- }
-
- // The "mode" led is the red blinky one
- at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0);
-
- // Pin 19 is the blue "connected" LED; turn that off too.
- // When turning LEDs back on, don't turn that LED on if we're
- // not connected, as that would be confusing.
- at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1") : PSTR("AT+HWGPIO=19,0"), NULL, 0);
- return true;
-}
-
-// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel
-bool adafruit_ble_set_power_level(int8_t level) {
- char cmd[46];
- if (!state.configured) {
- return false;
- }
- snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level);
- return at_command(cmd, NULL, 0, false);
-}
diff --git a/drivers/bluetooth/adafruit_ble.h b/drivers/bluetooth/adafruit_ble.h
deleted file mode 100644
index b43e0771d9..0000000000
--- a/drivers/bluetooth/adafruit_ble.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Bluetooth Low Energy Protocol for QMK.
- * Author: Wez Furlong, 2016
- * Supports the Adafruit BLE board built around the nRF51822 chip.
- */
-
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "config_common.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Instruct the module to enable HID keyboard support and reset */
-extern bool adafruit_ble_enable_keyboard(void);
-
-/* Query to see if the BLE module is connected */
-extern bool adafruit_ble_query_is_connected(void);
-
-/* Returns true if we believe that the BLE module is connected.
- * This uses our cached understanding that is maintained by
- * calling ble_task() periodically. */
-extern bool adafruit_ble_is_connected(void);
-
-/* Call this periodically to process BLE-originated things */
-extern void adafruit_ble_task(void);
-
-/* Generates keypress events for a set of keys.
- * The hid modifier mask specifies the state of the modifier keys for
- * this set of keys.
- * Also sends a key release indicator, so that the keys do not remain
- * held down. */
-extern void adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys);
-
-/* Send a consumer usage.
- * (milliseconds) */
-extern void adafruit_ble_send_consumer_key(uint16_t usage);
-
-#ifdef MOUSE_ENABLE
-/* Send a mouse/wheel movement report.
- * The parameters are signed and indicate positive or negative direction
- * change. */
-extern void adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons);
-#endif
-
-/* Compute battery voltage by reading an analog pin.
- * Returns the integer number of millivolts */
-extern uint32_t adafruit_ble_read_battery_voltage(void);
-
-extern bool adafruit_ble_set_mode_leds(bool on);
-extern bool adafruit_ble_set_power_level(int8_t level);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/drivers/bluetooth/bluefruit_le.cpp b/drivers/bluetooth/bluefruit_le.cpp
new file mode 100644
index 0000000000..19310767cf
--- /dev/null
+++ b/drivers/bluetooth/bluefruit_le.cpp
@@ -0,0 +1,705 @@
+#include "bluefruit_le.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <alloca.h>
+#include "debug.h"
+#include "timer.h"
+#include "action_util.h"
+#include "ringbuffer.hpp"
+#include <string.h>
+#include "spi_master.h"
+#include "wait.h"
+#include "analog.h"
+#include "progmem.h"
+
+// These are the pin assignments for the 32u4 boards.
+// You may define them to something else in your config.h
+// if yours is wired up differently.
+#ifndef BLUEFRUIT_LE_RST_PIN
+# define BLUEFRUIT_LE_RST_PIN D4
+#endif
+
+#ifndef BLUEFRUIT_LE_CS_PIN
+# define BLUEFRUIT_LE_CS_PIN B4
+#endif
+
+#ifndef BLUEFRUIT_LE_IRQ_PIN
+# define BLUEFRUIT_LE_IRQ_PIN E6
+#endif
+
+#ifndef BLUEFRUIT_LE_SCK_DIVISOR
+# define BLUEFRUIT_LE_SCK_DIVISOR 2 // 4MHz SCK/8MHz CPU, calculated for Feather 32U4 BLE
+#endif
+
+#define SAMPLE_BATTERY
+#define ConnectionUpdateInterval 1000 /* milliseconds */
+
+#ifndef BATTERY_LEVEL_PIN
+# define BATTERY_LEVEL_PIN B5
+#endif
+
+static struct {
+ bool is_connected;
+ bool initialized;
+ bool configured;
+
+#define ProbedEvents 1
+#define UsingEvents 2
+ bool event_flags;
+
+#ifdef SAMPLE_BATTERY
+ uint16_t last_battery_update;
+ uint32_t vbat;
+#endif
+ uint16_t last_connection_update;
+} state;
+
+// Commands are encoded using SDEP and sent via SPI
+// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md
+
+#define SdepMaxPayload 16
+struct sdep_msg {
+ uint8_t type;
+ uint8_t cmd_low;
+ uint8_t cmd_high;
+ struct __attribute__((packed)) {
+ uint8_t len : 7;
+ uint8_t more : 1;
+ };
+ uint8_t payload[SdepMaxPayload];
+} __attribute__((packed));
+
+// The recv latency is relatively high, so when we're hammering keys quickly,
+// we want to avoid waiting for the responses in the matrix loop. We maintain
+// a short queue for that. Since there is quite a lot of space overhead for
+// the AT command representation wrapped up in SDEP, we queue the minimal
+// information here.
+
+enum queue_type {
+ QTKeyReport, // 1-byte modifier + 6-byte key report
+ QTConsumer, // 16-bit key code
+#ifdef MOUSE_ENABLE
+ QTMouseMove, // 4-byte mouse report
+#endif
+};
+
+struct queue_item {
+ enum queue_type queue_type;
+ uint16_t added;
+ union __attribute__((packed)) {
+ struct __attribute__((packed)) {
+ uint8_t modifier;
+ uint8_t keys[6];
+ } key;
+
+ uint16_t consumer;
+ struct __attribute__((packed)) {
+ int8_t x, y, scroll, pan;
+ uint8_t buttons;
+ } mousemove;
+ };
+};
+
+// Items that we wish to send
+static RingBuffer<queue_item, 40> send_buf;
+// Pending response; while pending, we can't send any more requests.
+// This records the time at which we sent the command for which we
+// are expecting a response.
+static RingBuffer<uint16_t, 2> resp_buf;
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout);
+
+enum sdep_type {
+ SdepCommand = 0x10,
+ SdepResponse = 0x20,
+ SdepAlert = 0x40,
+ SdepError = 0x80,
+ SdepSlaveNotReady = 0xFE, // Try again later
+ SdepSlaveOverflow = 0xFF, // You read more data than is available
+};
+
+enum ble_cmd {
+ BleInitialize = 0xBEEF,
+ BleAtWrapper = 0x0A00,
+ BleUartTx = 0x0A01,
+ BleUartRx = 0x0A02,
+};
+
+enum ble_system_event_bits {
+ BleSystemConnected = 0,
+ BleSystemDisconnected = 1,
+ BleSystemUartRx = 8,
+ BleSystemMidiRx = 10,
+};
+
+#define SdepTimeout 150 /* milliseconds */
+#define SdepShortTimeout 10 /* milliseconds */
+#define SdepBackOff 25 /* microseconds */
+#define BatteryUpdateInterval 10000 /* milliseconds */
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbose, uint16_t timeout = SdepTimeout);
+static bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose = false);
+
+// Send a single SDEP packet
+static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
+ spi_start(BLUEFRUIT_LE_CS_PIN, false, 0, BLUEFRUIT_LE_SCK_DIVISOR);
+ uint16_t timerStart = timer_read();
+ bool success = false;
+ bool ready = false;
+
+ do {
+ ready = spi_write(msg->type) != SdepSlaveNotReady;
+ if (ready) {
+ break;
+ }
+
+ // Release it and let it initialize
+ spi_stop();
+ wait_us(SdepBackOff);
+ spi_start(BLUEFRUIT_LE_CS_PIN, false, 0, BLUEFRUIT_LE_SCK_DIVISOR);
+ } while (timer_elapsed(timerStart) < timeout);
+
+ if (ready) {
+ // Slave is ready; send the rest of the packet
+ spi_transmit(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len);
+ success = true;
+ }
+
+ spi_stop();
+
+ return success;
+}
+
+static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command, const uint8_t *payload, uint8_t len, bool moredata) {
+ msg->type = SdepCommand;
+ msg->cmd_low = command & 0xFF;
+ msg->cmd_high = command >> 8;
+ msg->len = len;
+ msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0;
+
+ static_assert(sizeof(*msg) == 20, "msg is correctly packed");
+
+ memcpy(msg->payload, payload, len);
+}
+
+// Read a single SDEP packet
+static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
+ bool success = false;
+ uint16_t timerStart = timer_read();
+ bool ready = false;
+
+ do {
+ ready = readPin(BLUEFRUIT_LE_IRQ_PIN);
+ if (ready) {
+ break;
+ }
+ wait_us(1);
+ } while (timer_elapsed(timerStart) < timeout);
+
+ if (ready) {
+ spi_start(BLUEFRUIT_LE_CS_PIN, false, 0, BLUEFRUIT_LE_SCK_DIVISOR);
+
+ do {
+ // Read the command type, waiting for the data to be ready
+ msg->type = spi_read();
+ if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) {
+ // Release it and let it initialize
+ spi_stop();
+ wait_us(SdepBackOff);
+ spi_start(BLUEFRUIT_LE_CS_PIN, false, 0, BLUEFRUIT_LE_SCK_DIVISOR);
+ continue;
+ }
+
+ // Read the rest of the header
+ spi_receive(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)));
+
+ // and get the payload if there is any
+ if (msg->len <= SdepMaxPayload) {
+ spi_receive(msg->payload, msg->len);
+ }
+ success = true;
+ break;
+ } while (timer_elapsed(timerStart) < timeout);
+
+ spi_stop();
+ }
+ return success;
+}
+
+static void resp_buf_read_one(bool greedy) {
+ uint16_t last_send;
+ if (!resp_buf.peek(last_send)) {
+ return;
+ }
+
+ if (readPin(BLUEFRUIT_LE_IRQ_PIN)) {
+ struct sdep_msg msg;
+
+ again:
+ if (sdep_recv_pkt(&msg, SdepTimeout)) {
+ if (!msg.more) {
+ // We got it; consume this entry
+ resp_buf.get(last_send);
+ dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send));
+ }
+
+ if (greedy && resp_buf.peek(last_send) && readPin(BLUEFRUIT_LE_IRQ_PIN)) {
+ goto again;
+ }
+ }
+
+ } else if (timer_elapsed(last_send) > SdepTimeout * 2) {
+ dprintf("waiting_for_result: timeout, resp_buf size %d\n", (int)resp_buf.size());
+
+ // Timed out: consume this entry
+ resp_buf.get(last_send);
+ }
+}
+
+static void send_buf_send_one(uint16_t timeout = SdepTimeout) {
+ struct queue_item item;
+
+ // Don't send anything more until we get an ACK
+ if (!resp_buf.empty()) {
+ return;
+ }
+
+ if (!send_buf.peek(item)) {
+ return;
+ }
+ if (process_queue_item(&item, timeout)) {
+ // commit that peek
+ send_buf.get(item);
+ dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size());
+ } else {
+ dprint("failed to send, will retry\n");
+ wait_ms(SdepTimeout);
+ resp_buf_read_one(true);
+ }
+}
+
+static void resp_buf_wait(const char *cmd) {
+ bool didPrint = false;
+ while (!resp_buf.empty()) {
+ if (!didPrint) {
+ dprintf("wait on buf for %s\n", cmd);
+ didPrint = true;
+ }
+ resp_buf_read_one(true);
+ }
+}
+
+static bool ble_init(void) {
+ state.initialized = false;
+ state.configured = false;
+ state.is_connected = false;
+
+ setPinInput(BLUEFRUIT_LE_IRQ_PIN);
+
+ spi_init();
+
+ // Perform a hardware reset
+ setPinOutput(BLUEFRUIT_LE_RST_PIN);
+ writePinHigh(BLUEFRUIT_LE_RST_PIN);
+ writePinLow(BLUEFRUIT_LE_RST_PIN);
+ wait_ms(10);
+ writePinHigh(BLUEFRUIT_LE_RST_PIN);
+
+ wait_ms(1000); // Give it a second to initialize
+
+ state.initialized = true;
+ return state.initialized;
+}
+
+static inline uint8_t min(uint8_t a, uint8_t b) {
+ return a < b ? a : b;
+}
+
+static bool read_response(char *resp, uint16_t resplen, bool verbose) {
+ char *dest = resp;
+ char *end = dest + resplen;
+
+ while (true) {
+ struct sdep_msg msg;
+
+ if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) {
+ dprint("sdep_recv_pkt failed\n");
+ return false;
+ }
+
+ if (msg.type != SdepResponse) {
+ *resp = 0;
+ return false;
+ }
+
+ uint8_t len = min(msg.len, end - dest);
+ if (len > 0) {
+ memcpy(dest, msg.payload, len);
+ dest += len;
+ }
+
+ if (!msg.more) {
+ // No more data is expected!
+ break;
+ }
+ }
+
+ // Ensure the response is NUL terminated
+ *dest = 0;
+
+ // "Parse" the result text; we want to snip off the trailing OK or ERROR line
+ // Rewind past the possible trailing CRLF so that we can strip it
+ --dest;
+ while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) {
+ *dest = 0;
+ --dest;
+ }
+
+ // Look back for start of preceeding line
+ char *last_line = strrchr(resp, '\n');
+ if (last_line) {
+ ++last_line;
+ } else {
+ last_line = resp;
+ }
+
+ bool success = false;
+ static const char kOK[] PROGMEM = "OK";
+
+ success = !strcmp_P(last_line, kOK);
+
+ if (verbose || !success) {
+ dprintf("result: %s\n", resp);
+ }
+ return success;
+}
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbose, uint16_t timeout) {
+ const char * end = cmd + strlen(cmd);
+ struct sdep_msg msg;
+
+ if (verbose) {
+ dprintf("ble send: %s\n", cmd);
+ }
+
+ if (resp) {
+ // They want to decode the response, so we need to flush and wait
+ // for all pending I/O to finish before we start this one, so
+ // that we don't confuse the results
+ resp_buf_wait(cmd);
+ *resp = 0;
+ }
+
+ // Fragment the command into a series of SDEP packets
+ while (end - cmd > SdepMaxPayload) {
+ sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true);
+ if (!sdep_send_pkt(&msg, timeout)) {
+ return false;
+ }
+ cmd += SdepMaxPayload;
+ }
+
+ sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false);
+ if (!sdep_send_pkt(&msg, timeout)) {
+ return false;
+ }
+
+ if (resp == NULL) {
+ uint16_t now = timer_read();
+ while (!resp_buf.enqueue(now)) {
+ resp_buf_read_one(false);
+ }
+ uint16_t later = timer_read();
+ if (TIMER_DIFF_16(later, now) > 0) {
+ dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now));
+ }
+ return true;
+ }
+
+ return read_response(resp, resplen, verbose);
+}
+
+bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) {
+ char *cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
+ strcpy_P(cmdbuf, cmd);
+ return at_command(cmdbuf, resp, resplen, verbose);
+}
+
+bool bluefruit_le_is_connected(void) {
+ return state.is_connected;
+}
+
+bool bluefruit_le_enable_keyboard(void) {
+ char resbuf[128];
+
+ if (!state.initialized && !ble_init()) {
+ return false;
+ }
+
+ state.configured = false;
+
+ // Disable command echo
+ static const char kEcho[] PROGMEM = "ATE=0";
+ // Make the advertised name match the keyboard
+ static const char kGapDevName[] PROGMEM = "AT+GAPDEVNAME=" STR(PRODUCT);
+ // Turn on keyboard support
+ static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1";
+
+ // Adjust intervals to improve latency. This causes the "central"
+ // system (computer/tablet) to poll us every 10-30 ms. We can't
+ // set a smaller value than 10ms, and 30ms seems to be the natural
+ // processing time on my macbook. Keeping it constrained to that
+ // feels reasonable to type to.
+ static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,";
+
+ // Reset the device so that it picks up the above changes
+ static const char kATZ[] PROGMEM = "ATZ";
+
+ // Turn down the power level a bit
+ static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12";
+ static PGM_P const configure_commands[] PROGMEM = {
+ kEcho, kGapIntervals, kGapDevName, kHidEnOn, kPower, kATZ,
+ };
+
+ uint8_t i;
+ for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]); ++i) {
+ PGM_P cmd;
+ memcpy_P(&cmd, configure_commands + i, sizeof(cmd));
+
+ if (!at_command_P(cmd, resbuf, sizeof(resbuf))) {
+ dprintf("failed BLE command: %S: %s\n", cmd, resbuf);
+ goto fail;
+ }
+ }
+
+ state.configured = true;
+
+ // Check connection status in a little while; allow the ATZ time
+ // to kick in.
+ state.last_connection_update = timer_read();
+fail:
+ return state.configured;
+}
+
+static void set_connected(bool connected) {
+ if (connected != state.is_connected) {
+ if (connected) {
+ dprint("BLE connected\n");
+ } else {
+ dprint("BLE disconnected\n");
+ }
+ state.is_connected = connected;
+
+ // TODO: if modifiers are down on the USB interface and
+ // we cut over to BLE or vice versa, they will remain stuck.
+ // This feels like a good point to do something like clearing
+ // the keyboard and/or generating a fake all keys up message.
+ // However, I've noticed that it takes a couple of seconds
+ // for macOS to to start recognizing key presses after BLE
+ // is in the connected state, so I worry that doing that
+ // here may not be good enough.
+ }
+}
+
+void bluefruit_le_task(void) {
+ char resbuf[48];
+
+ if (!state.configured && !bluefruit_le_enable_keyboard()) {
+ return;
+ }
+ resp_buf_read_one(true);
+ send_buf_send_one(SdepShortTimeout);
+
+ if (resp_buf.empty() && (state.event_flags & UsingEvents) && readPin(BLUEFRUIT_LE_IRQ_PIN)) {
+ // Must be an event update
+ if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) {
+ uint32_t mask = strtoul(resbuf, NULL, 16);
+
+ if (mask & BleSystemConnected) {
+ set_connected(true);
+ } else if (mask & BleSystemDisconnected) {
+ set_connected(false);
+ }
+ }
+ }
+
+ if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) {
+ bool shouldPoll = true;
+ if (!(state.event_flags & ProbedEvents)) {
+ // Request notifications about connection status changes.
+ // This only works in SPIFRIEND firmware > 0.6.7, which is why
+ // we check for this conditionally here.
+ // Note that at the time of writing, HID reports only work correctly
+ // with Apple products on firmware version 0.6.7!
+ // https://forums.adafruit.com/viewtopic.php?f=8&t=104052
+ if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) {
+ at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf));
+ state.event_flags |= UsingEvents;
+ }
+ state.event_flags |= ProbedEvents;
+
+ // leave shouldPoll == true so that we check at least once
+ // before relying solely on events
+ } else {
+ shouldPoll = false;
+ }
+
+ static const char kGetConn[] PROGMEM = "AT+GAPGETCONN";
+ state.last_connection_update = timer_read();
+
+ if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) {
+ set_connected(atoi(resbuf));
+ }
+ }
+
+#ifdef SAMPLE_BATTERY
+ if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval && resp_buf.empty()) {
+ state.last_battery_update = timer_read();
+
+ state.vbat = analogReadPin(BATTERY_LEVEL_PIN);
+ }
+#endif
+}
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
+ char cmdbuf[48];
+ char fmtbuf[64];
+
+ // Arrange to re-check connection after keys have settled
+ state.last_connection_update = timer_read();
+
+#if 1
+ if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) {
+ dprintf("send latency %dms\n", TIMER_DIFF_16(state.last_connection_update, item->added));
+ }
+#endif
+
+ switch (item->queue_type) {
+ case QTKeyReport:
+ strcpy_P(fmtbuf, PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier, item->key.keys[0], item->key.keys[1], item->key.keys[2], item->key.keys[3], item->key.keys[4], item->key.keys[5]);
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+
+ case QTConsumer:
+ strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer);
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+
+#ifdef MOUSE_ENABLE
+ case QTMouseMove:
+ strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x, item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
+ if (!at_command(cmdbuf, NULL, 0, true, timeout)) {
+ return false;
+ }
+ strcpy_P(cmdbuf, PSTR("AT+BLEHIDMOUSEBUTTON="));
+ if (item->mousemove.buttons & MOUSE_BTN1) {
+ strcat(cmdbuf, "L");
+ }
+ if (item->mousemove.buttons & MOUSE_BTN2) {
+ strcat(cmdbuf, "R");
+ }
+ if (item->mousemove.buttons & MOUSE_BTN3) {
+ strcat(cmdbuf, "M");
+ }
+ if (item->mousemove.buttons == 0) {
+ strcat(cmdbuf, "0");
+ }
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+#endif
+ default:
+ return true;
+ }
+}
+
+void bluefruit_le_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys) {
+ struct queue_item item;
+ bool didWait = false;
+
+ item.queue_type = QTKeyReport;
+ item.key.modifier = hid_modifier_mask;
+ item.added = timer_read();
+
+ while (nkeys >= 0) {
+ item.key.keys[0] = keys[0];
+ item.key.keys[1] = nkeys >= 1 ? keys[1] : 0;
+ item.key.keys[2] = nkeys >= 2 ? keys[2] : 0;
+ item.key.keys[3] = nkeys >= 3 ? keys[3] : 0;
+ item.key.keys[4] = nkeys >= 4 ? keys[4] : 0;
+ item.key.keys[5] = nkeys >= 5 ? keys[5] : 0;
+
+ if (!send_buf.enqueue(item)) {
+ if (!didWait) {
+ dprint("wait for buf space\n");
+ didWait = true;
+ }
+ send_buf_send_one();
+ continue;
+ }
+
+ if (nkeys <= 6) {
+ return;
+ }
+
+ nkeys -= 6;
+ keys += 6;
+ }
+}
+
+void bluefruit_le_send_consumer_key(uint16_t usage) {
+ struct queue_item item;
+
+ item.queue_type = QTConsumer;
+ item.consumer = usage;
+
+ while (!send_buf.enqueue(item)) {
+ send_buf_send_one();
+ }
+}
+
+#ifdef MOUSE_ENABLE
+void bluefruit_le_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons) {
+ struct queue_item item;
+
+ item.queue_type = QTMouseMove;
+ item.mousemove.x = x;
+ item.mousemove.y = y;
+ item.mousemove.scroll = scroll;
+ item.mousemove.pan = pan;
+ item.mousemove.buttons = buttons;
+
+ while (!send_buf.enqueue(item)) {
+ send_buf_send_one();
+ }
+}
+#endif
+
+uint32_t bluefruit_le_read_battery_voltage(void) {
+ return state.vbat;
+}
+
+bool bluefruit_le_set_mode_leds(bool on) {
+ if (!state.configured) {
+ return false;
+ }
+
+ // The "mode" led is the red blinky one
+ at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0);
+
+ // Pin 19 is the blue "connected" LED; turn that off too.
+ // When turning LEDs back on, don't turn that LED on if we're
+ // not connected, as that would be confusing.
+ at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1") : PSTR("AT+HWGPIO=19,0"), NULL, 0);
+ return true;
+}
+
+// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel
+bool bluefruit_le_set_power_level(int8_t level) {
+ char cmd[46];
+ if (!state.configured) {
+ return false;
+ }
+ snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level);
+ return at_command(cmd, NULL, 0, false);
+}
diff --git a/drivers/bluetooth/bluefruit_le.h b/drivers/bluetooth/bluefruit_le.h
new file mode 100644
index 0000000000..de301c6167
--- /dev/null
+++ b/drivers/bluetooth/bluefruit_le.h
@@ -0,0 +1,59 @@
+/* Bluetooth Low Energy Protocol for QMK.
+ * Author: Wez Furlong, 2016
+ * Supports the Adafruit BLE board built around the nRF51822 chip.
+ */
+
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "config_common.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Instruct the module to enable HID keyboard support and reset */
+extern bool bluefruit_le_enable_keyboard(void);
+
+/* Query to see if the BLE module is connected */
+extern bool bluefruit_le_query_is_connected(void);
+
+/* Returns true if we believe that the BLE module is connected.
+ * This uses our cached understanding that is maintained by
+ * calling ble_task() periodically. */
+extern bool bluefruit_le_is_connected(void);
+
+/* Call this periodically to process BLE-originated things */
+extern void bluefruit_le_task(void);
+
+/* Generates keypress events for a set of keys.
+ * The hid modifier mask specifies the state of the modifier keys for
+ * this set of keys.
+ * Also sends a key release indicator, so that the keys do not remain
+ * held down. */
+extern void bluefruit_le_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys);
+
+/* Send a consumer usage.
+ * (milliseconds) */
+extern void bluefruit_le_send_consumer_key(uint16_t usage);
+
+#ifdef MOUSE_ENABLE
+/* Send a mouse/wheel movement report.
+ * The parameters are signed and indicate positive or negative direction
+ * change. */
+extern void bluefruit_le_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons);
+#endif
+
+/* Compute battery voltage by reading an analog pin.
+ * Returns the integer number of millivolts */
+extern uint32_t bluefruit_le_read_battery_voltage(void);
+
+extern bool bluefruit_le_set_mode_leds(bool on);
+extern bool bluefruit_le_set_power_level(int8_t level);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/drivers/bluetooth/outputselect.c b/drivers/bluetooth/outputselect.c
index f758c65280..b986ba274e 100644
--- a/drivers/bluetooth/outputselect.c
+++ b/drivers/bluetooth/outputselect.c
@@ -13,13 +13,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "outputselect.h"
+#include "usb_util.h"
-#if defined(PROTOCOL_LUFA)
-# include "lufa.h"
-#endif
-
-#ifdef MODULE_ADAFRUIT_BLE
-# include "adafruit_ble.h"
+#ifdef BLUETOOTH_BLUEFRUIT_LE
+# include "bluefruit_le.h"
#endif
uint8_t desired_output = OUTPUT_DEFAULT;
@@ -39,29 +36,23 @@ void set_output(uint8_t output) {
*/
__attribute__((weak)) void set_output_user(uint8_t output) {}
-static bool is_usb_configured(void) {
-#if defined(PROTOCOL_LUFA)
- return USB_DeviceState == DEVICE_STATE_Configured;
-#endif
-}
-
/** \brief Auto Detect Output
*
* FIXME: Needs doc
*/
uint8_t auto_detect_output(void) {
- if (is_usb_configured()) {
+ if (usb_connected_state()) {
return OUTPUT_USB;
}
-#ifdef MODULE_ADAFRUIT_BLE
- if (adafruit_ble_is_connected()) {
+#ifdef BLUETOOTH_BLUEFRUIT_LE
+ if (bluefruit_le_is_connected()) {
return OUTPUT_BLUETOOTH;
}
#endif
#ifdef BLUETOOTH_ENABLE
- return OUTPUT_BLUETOOTH; // should check if BT is connected here
+ return OUTPUT_BLUETOOTH; // should check if BT is connected here
#endif
return OUTPUT_NONE;
diff --git a/drivers/bluetooth/rn42.c b/drivers/bluetooth/rn42.c
new file mode 100644
index 0000000000..5d497cda20
--- /dev/null
+++ b/drivers/bluetooth/rn42.c
@@ -0,0 +1,101 @@
+/* Copyright 2021
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "report.h"
+#include "uart.h"
+
+#ifndef RN42_BAUD_RATE
+# define RN42_BAUD_RATE 115200
+#endif
+
+// https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf#G7.663734
+static inline uint16_t rn42_consumer_usage_to_bitmap(uint16_t usage) {
+ switch (usage) {
+ case AC_HOME:
+ return 0x0001;
+ case AL_EMAIL:
+ return 0x0002;
+ case AC_SEARCH:
+ return 0x0004;
+ case AL_KEYBOARD_LAYOUT:
+ return 0x0008;
+ case AUDIO_VOL_UP:
+ return 0x0010;
+ case AUDIO_VOL_DOWN:
+ return 0x0020;
+ case AUDIO_MUTE:
+ return 0x0040;
+ case TRANSPORT_PLAY_PAUSE:
+ return 0x0080;
+ case TRANSPORT_NEXT_TRACK:
+ return 0x0100;
+ case TRANSPORT_PREV_TRACK:
+ return 0x0200;
+ case TRANSPORT_STOP:
+ return 0x0400;
+ case TRANSPORT_EJECT:
+ return 0x0800;
+ case TRANSPORT_FAST_FORWARD:
+ return 0x1000;
+ case TRANSPORT_REWIND:
+ return 0x2000;
+ case TRANSPORT_STOP_EJECT:
+ return 0x4000;
+ case AL_LOCAL_BROWSER:
+ return 0x8000;
+ default:
+ return 0;
+ }
+}
+
+void rn42_init(void) {
+ uart_init(RN42_BAUD_RATE);
+}
+
+void rn42_send_keyboard(report_keyboard_t *report) {
+ uart_write(0xFD);
+ uart_write(0x09);
+ uart_write(0x01);
+ uart_write(report->mods);
+ uart_write(0x00);
+ for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
+ uart_write(report->keys[i]);
+ }
+}
+
+void rn42_send_mouse(report_mouse_t *report) {
+ uart_write(0xFD);
+ uart_write(0x00);
+ uart_write(0x03);
+ uart_write(report->buttons);
+ uart_write(report->x);
+ uart_write(report->y);
+ uart_write(report->v); // should try sending the wheel v here
+ uart_write(report->h); // should try sending the wheel h here
+ uart_write(0x00);
+}
+
+void rn42_send_consumer(uint16_t data) {
+ static uint16_t last_data = 0;
+ if (data == last_data) return;
+ last_data = data;
+ uint16_t bitmap = rn42_consumer_usage_to_bitmap(data);
+ uart_write(0xFD);
+ uart_write(0x03);
+ uart_write(0x03);
+ uart_write(bitmap & 0xFF);
+ uart_write((bitmap >> 8) & 0xFF);
+}
diff --git a/drivers/bluetooth/rn42.h b/drivers/bluetooth/rn42.h
new file mode 100644
index 0000000000..4747759111
--- /dev/null
+++ b/drivers/bluetooth/rn42.h
@@ -0,0 +1,25 @@
+/* Copyright 2021
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "report.h"
+
+void rn42_init(void);
+
+void rn42_send_keyboard(report_keyboard_t *report);
+
+void rn42_send_mouse(report_mouse_t *report);
+
+void rn42_send_consumer(uint16_t data);
diff --git a/drivers/eeprom/eeprom_driver.c b/drivers/eeprom/eeprom_driver.c
index 6ce47faf7d..885cf21981 100644
--- a/drivers/eeprom/eeprom_driver.c
+++ b/drivers/eeprom/eeprom_driver.c
@@ -37,11 +37,17 @@ uint32_t eeprom_read_dword(const uint32_t *addr) {
return ret;
}
-void eeprom_write_byte(uint8_t *addr, uint8_t value) { eeprom_write_block(&value, addr, 1); }
+void eeprom_write_byte(uint8_t *addr, uint8_t value) {
+ eeprom_write_block(&value, addr, 1);
+}
-void eeprom_write_word(uint16_t *addr, uint16_t value) { eeprom_write_block(&value, addr, 2); }
+void eeprom_write_word(uint16_t *addr, uint16_t value) {
+ eeprom_write_block(&value, addr, 2);
+}
-void eeprom_write_dword(uint32_t *addr, uint32_t value) { eeprom_write_block(&value, addr, 4); }
+void eeprom_write_dword(uint32_t *addr, uint32_t value) {
+ eeprom_write_block(&value, addr, 4);
+}
void eeprom_update_block(const void *buf, void *addr, size_t len) {
uint8_t read_buf[len];
diff --git a/drivers/eeprom/eeprom_i2c.c b/drivers/eeprom/eeprom_i2c.c
index 8e80ff544f..a74a010415 100644
--- a/drivers/eeprom/eeprom_i2c.c
+++ b/drivers/eeprom/eeprom_i2c.c
@@ -43,7 +43,7 @@
#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
# include "timer.h"
# include "debug.h"
-#endif // DEBUG_EEPROM_OUTPUT
+#endif // DEBUG_EEPROM_OUTPUT
static inline void fill_target_address(uint8_t *buffer, const void *addr) {
uintptr_t p = (uintptr_t)addr;
@@ -91,7 +91,7 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
}
dprintf("\n");
-#endif // DEBUG_EEPROM_OUTPUT
+#endif // DEBUG_EEPROM_OUTPUT
}
void eeprom_write_block(const void *buf, void *addr, size_t len) {
@@ -122,7 +122,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
dprintf(" %02X", (int)(read_buf[i]));
}
dprintf("\n");
-#endif // DEBUG_EEPROM_OUTPUT
+#endif // DEBUG_EEPROM_OUTPUT
i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE + write_length, 100);
wait_ms(EXTERNAL_EEPROM_WRITE_TIME);
diff --git a/drivers/eeprom/eeprom_spi.c b/drivers/eeprom/eeprom_spi.c
index e273090854..25955498c4 100644
--- a/drivers/eeprom/eeprom_spi.c
+++ b/drivers/eeprom/eeprom_spi.c
@@ -52,7 +52,9 @@
# define EXTERNAL_EEPROM_SPI_TIMEOUT 100
#endif
-static bool spi_eeprom_start(void) { return spi_start(EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN, EXTERNAL_EEPROM_SPI_LSBFIRST, EXTERNAL_EEPROM_SPI_MODE, EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR); }
+static bool spi_eeprom_start(void) {
+ return spi_start(EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN, EXTERNAL_EEPROM_SPI_LSBFIRST, EXTERNAL_EEPROM_SPI_MODE, EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR);
+}
static spi_status_t spi_eeprom_wait_while_busy(int timeout) {
uint32_t deadline = timer_read32() + timeout;
@@ -80,7 +82,9 @@ static void spi_eeprom_transmit_address(uintptr_t addr) {
//----------------------------------------------------------------------------------------------------------------------
-void eeprom_driver_init(void) { spi_init(); }
+void eeprom_driver_init(void) {
+ spi_init();
+}
void eeprom_driver_erase(void) {
#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
@@ -135,7 +139,7 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
}
dprintf("\n");
-#endif // DEBUG_EEPROM_OUTPUT
+#endif // DEBUG_EEPROM_OUTPUT
spi_stop();
}
@@ -192,7 +196,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
dprintf(" %02X", (int)(uint8_t)(read_buf[i]));
}
dprintf("\n");
-#endif // DEBUG_EEPROM_OUTPUT
+#endif // DEBUG_EEPROM_OUTPUT
spi_write(CMD_WRITE);
spi_eeprom_transmit_address(target_addr);
diff --git a/drivers/eeprom/eeprom_transient.c b/drivers/eeprom/eeprom_transient.c
index b4c78c6f40..9dc4289c27 100644
--- a/drivers/eeprom/eeprom_transient.c
+++ b/drivers/eeprom/eeprom_transient.c
@@ -30,9 +30,13 @@ size_t clamp_length(intptr_t offset, size_t len) {
return len;
}
-void eeprom_driver_init(void) { eeprom_driver_erase(); }
+void eeprom_driver_init(void) {
+ eeprom_driver_erase();
+}
-void eeprom_driver_erase(void) { memset(transientBuffer, 0x00, TRANSIENT_EEPROM_SIZE); }
+void eeprom_driver_erase(void) {
+ memset(transientBuffer, 0x00, TRANSIENT_EEPROM_SIZE);
+}
void eeprom_read_block(void *buf, const void *addr, size_t len) {
intptr_t offset = (intptr_t)addr;
diff --git a/drivers/eeprom/eeprom_transient.h b/drivers/eeprom/eeprom_transient.h
index d06189b246..687b8619fe 100644
--- a/drivers/eeprom/eeprom_transient.h
+++ b/drivers/eeprom/eeprom_transient.h
@@ -21,5 +21,5 @@
*/
#ifndef TRANSIENT_EEPROM_SIZE
# include "eeconfig.h"
-# define TRANSIENT_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
+# define TRANSIENT_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
#endif
diff --git a/drivers/flash/flash_spi.c b/drivers/flash/flash_spi.c
new file mode 100644
index 0000000000..f4cbf65159
--- /dev/null
+++ b/drivers/flash/flash_spi.c
@@ -0,0 +1,376 @@
+/*
+Copyright (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <string.h>
+
+#include "util.h"
+#include "wait.h"
+#include "debug.h"
+#include "timer.h"
+#include "flash_spi.h"
+#include "spi_master.h"
+
+/*
+ The time-out time of spi flash transmission.
+*/
+#ifndef EXTERNAL_FLASH_SPI_TIMEOUT
+# define EXTERNAL_FLASH_SPI_TIMEOUT 1000
+#endif
+
+/* ID comands */
+#define FLASH_CMD_RDID 0x9F /* RDID (Read Identification) */
+#define FLASH_CMD_RES 0xAB /* RES (Read Electronic ID) */
+#define FLASH_CMD_REMS 0x90 /* REMS (Read Electronic & Device ID) */
+
+/* register comands */
+#define FLASH_CMD_WRSR 0x01 /* WRSR (Write Status register) */
+#define FLASH_CMD_RDSR 0x05 /* RDSR (Read Status register) */
+
+/* READ comands */
+#define FLASH_CMD_READ 0x03 /* READ (1 x I/O) */
+#define FLASH_CMD_FASTREAD 0x0B /* FAST READ (Fast read data) */
+#define FLASH_CMD_DREAD 0x3B /* DREAD (1In/2 Out fast read) */
+
+/* Program comands */
+#define FLASH_CMD_WREN 0x06 /* WREN (Write Enable) */
+#define FLASH_CMD_WRDI 0x04 /* WRDI (Write Disable) */
+#define FLASH_CMD_PP 0x02 /* PP (page program) */
+
+/* Erase comands */
+#define FLASH_CMD_SE 0x20 /* SE (Sector Erase) */
+#define FLASH_CMD_BE 0xD8 /* BE (Block Erase) */
+#define FLASH_CMD_CE 0x60 /* CE (Chip Erase) hex code: 60 or C7 */
+
+/* Mode setting comands */
+#define FLASH_CMD_DP 0xB9 /* DP (Deep Power Down) */
+#define FLASH_CMD_RDP 0xAB /* RDP (Release form Deep Power Down) */
+
+/* Status register */
+#define FLASH_FLAG_WIP 0x01 /* Write in progress bit */
+#define FLASH_FLAG_WEL 0x02 /* Write enable latch bit */
+
+// #define DEBUG_FLASH_SPI_OUTPUT
+
+static bool spi_flash_start(void) {
+ return spi_start(EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN, EXTERNAL_FLASH_SPI_LSBFIRST, EXTERNAL_FLASH_SPI_MODE, EXTERNAL_FLASH_SPI_CLOCK_DIVISOR);
+}
+
+static flash_status_t spi_flash_wait_while_busy(void) {
+ uint32_t deadline = timer_read32() + EXTERNAL_FLASH_SPI_TIMEOUT;
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+ uint8_t retval;
+
+ do {
+ bool res = spi_flash_start();
+ if (!res) {
+ dprint("Failed to start SPI! [spi flash wait while busy]\n");
+ return FLASH_STATUS_ERROR;
+ }
+
+ spi_write(FLASH_CMD_RDSR);
+
+ retval = (uint8_t)spi_read();
+
+ spi_stop();
+
+ if (timer_read32() >= deadline) {
+ response = FLASH_STATUS_TIMEOUT;
+ break;
+ }
+ } while (retval & FLASH_FLAG_WIP);
+
+ return response;
+}
+
+static flash_status_t spi_flash_write_enable(void) {
+ bool res = spi_flash_start();
+ if (!res) {
+ dprint("Failed to start SPI! [spi flash write enable]\n");
+ return FLASH_STATUS_ERROR;
+ }
+
+ spi_write(FLASH_CMD_WREN);
+
+ spi_stop();
+
+ return FLASH_STATUS_SUCCESS;
+}
+
+static flash_status_t spi_flash_write_disable(void) {
+ bool res = spi_flash_start();
+ if (!res) {
+ dprint("Failed to start SPI! [spi flash write disable]\n");
+ return FLASH_STATUS_ERROR;
+ }
+
+ spi_write(FLASH_CMD_WRDI);
+
+ spi_stop();
+
+ return FLASH_STATUS_SUCCESS;
+}
+
+/* This function is used for read transfer, write transfer and erase transfer. */
+static flash_status_t spi_flash_transaction(uint8_t cmd, uint32_t addr, uint8_t *data, size_t len) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+ uint8_t buffer[EXTERNAL_FLASH_ADDRESS_SIZE + 1];
+
+ buffer[0] = cmd;
+ for (int i = 0; i < EXTERNAL_FLASH_ADDRESS_SIZE; ++i) {
+ buffer[EXTERNAL_FLASH_ADDRESS_SIZE - i] = addr & 0xFF;
+ addr >>= 8;
+ }
+
+ bool res = spi_flash_start();
+ if (!res) {
+ dprint("Failed to start SPI! [spi flash transmit]\n");
+ return FLASH_STATUS_ERROR;
+ }
+
+ response = spi_transmit(buffer, sizeof(buffer));
+
+ if ((!response) && (data != NULL)) {
+ switch (cmd) {
+ case FLASH_CMD_READ:
+ response = spi_receive(data, len);
+ break;
+ case FLASH_CMD_PP:
+ response = spi_transmit(data, len);
+ break;
+ default:
+ response = FLASH_STATUS_ERROR;
+ break;
+ }
+ }
+
+ spi_stop();
+
+ return response;
+}
+
+void flash_init(void) {
+ spi_init();
+}
+
+flash_status_t flash_erase_chip(void) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase chip]\n");
+ return response;
+ }
+
+ /* Enable writes. */
+ response = spi_flash_write_enable();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write-enable! [spi flash erase chip]\n");
+ return response;
+ }
+
+ /* Erase Chip. */
+ bool res = spi_flash_start();
+ if (!res) {
+ dprint("Failed to start SPI! [spi flash erase chip]\n");
+ return FLASH_STATUS_ERROR;
+ }
+ spi_write(FLASH_CMD_CE);
+ spi_stop();
+
+ /* Wait for the write-in-progress bit to be cleared.*/
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase chip]\n");
+ return response;
+ }
+
+ return response;
+}
+
+flash_status_t flash_erase_sector(uint32_t addr) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+
+ /* Check that the address exceeds the limit. */
+ if ((addr + (EXTERNAL_FLASH_SECTOR_SIZE)) >= (EXTERNAL_FLASH_SIZE) || ((addr % (EXTERNAL_FLASH_SECTOR_SIZE)) != 0)) {
+ dprintf("Flash erase sector address over limit! [addr:0x%x]\n", (uint32_t)addr);
+ return FLASH_STATUS_ERROR;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase sector]\n");
+ return response;
+ }
+
+ /* Enable writes. */
+ response = spi_flash_write_enable();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write-enable! [spi flash erase sector]\n");
+ return response;
+ }
+
+ /* Erase Sector. */
+ response = spi_flash_transaction(FLASH_CMD_SE, addr, NULL, 0);
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to erase sector! [spi flash erase sector]\n");
+ return response;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared.*/
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase sector]\n");
+ return response;
+ }
+
+ return response;
+}
+
+flash_status_t flash_erase_block(uint32_t addr) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+
+ /* Check that the address exceeds the limit. */
+ if ((addr + (EXTERNAL_FLASH_BLOCK_SIZE)) >= (EXTERNAL_FLASH_SIZE) || ((addr % (EXTERNAL_FLASH_BLOCK_SIZE)) != 0)) {
+ dprintf("Flash erase block address over limit! [addr:0x%x]\n", (uint32_t)addr);
+ return FLASH_STATUS_ERROR;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase block]\n");
+ return response;
+ }
+
+ /* Enable writes. */
+ response = spi_flash_write_enable();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write-enable! [spi flash erase block]\n");
+ return response;
+ }
+
+ /* Erase Block. */
+ response = spi_flash_transaction(FLASH_CMD_BE, addr, NULL, 0);
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to erase block! [spi flash erase block]\n");
+ return response;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared.*/
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash erase block]\n");
+ return response;
+ }
+
+ return response;
+}
+
+flash_status_t flash_read_block(uint32_t addr, void *buf, size_t len) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+ uint8_t * read_buf = (uint8_t *)buf;
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash read block]\n");
+ memset(read_buf, 0, len);
+ return response;
+ }
+
+ /* Perform read. */
+ response = spi_flash_transaction(FLASH_CMD_READ, addr, read_buf, len);
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to read block! [spi flash read block]\n");
+ memset(read_buf, 0, len);
+ return response;
+ }
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_FLASH_SPI_OUTPUT)
+ dprintf("[SPI FLASH R] 0x%08lX: ", addr);
+ for (size_t i = 0; i < len; ++i) {
+ dprintf(" %02X", (int)(((uint8_t *)read_buf)[i]));
+ }
+ dprintf("\n");
+#endif // DEBUG_FLASH_SPI_OUTPUT
+
+ return response;
+}
+
+flash_status_t flash_write_block(uint32_t addr, const void *buf, size_t len) {
+ flash_status_t response = FLASH_STATUS_SUCCESS;
+ uint8_t * write_buf = (uint8_t *)buf;
+
+ while (len > 0) {
+ uint32_t page_offset = addr % EXTERNAL_FLASH_PAGE_SIZE;
+ size_t write_length = EXTERNAL_FLASH_PAGE_SIZE - page_offset;
+ if (write_length > len) {
+ write_length = len;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash write block]\n");
+ return response;
+ }
+
+ /* Enable writes. */
+ response = spi_flash_write_enable();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write-enable! [spi flash write block]\n");
+ return response;
+ }
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_FLASH_SPI_OUTPUT)
+ dprintf("[SPI FLASH W] 0x%08lX: ", addr);
+ for (size_t i = 0; i < write_length; i++) {
+ dprintf(" %02X", (int)(uint8_t)(write_buf[i]));
+ }
+ dprintf("\n");
+#endif // DEBUG_FLASH_SPI_OUTPUT
+
+ /* Perform the write. */
+ response = spi_flash_transaction(FLASH_CMD_PP, addr, write_buf, write_length);
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write block! [spi flash write block]\n");
+ return response;
+ }
+
+ write_buf += write_length;
+ addr += write_length;
+ len -= write_length;
+ }
+
+ /* Wait for the write-in-progress bit to be cleared. */
+ response = spi_flash_wait_while_busy();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to check WIP flag! [spi flash write block]\n");
+ return response;
+ }
+
+ /* Disable writes. */
+ response = spi_flash_write_disable();
+ if (response != FLASH_STATUS_SUCCESS) {
+ dprint("Failed to write-disable! [spi flash write block]\n");
+ return response;
+ }
+
+ return response;
+}
diff --git a/drivers/flash/flash_spi.h b/drivers/flash/flash_spi.h
new file mode 100644
index 0000000000..abe95e955e
--- /dev/null
+++ b/drivers/flash/flash_spi.h
@@ -0,0 +1,136 @@
+/*
+Copyright (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* All the following default configurations are based on MX25L4006E Nor FLASH. */
+
+/*
+ The slave select pin of the FLASH.
+ This needs to be a normal GPIO pin_t value, such as B14.
+*/
+#ifndef EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN
+# error "No chip select pin defined -- missing EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN"
+#endif
+
+/*
+ The clock divisor for SPI to ensure that the MCU is within the
+ specifications of the FLASH chip. Generally this will be PCLK divided by
+ the intended divisor -- check your clock settings and the datasheet of
+ your FLASH.
+*/
+#ifndef EXTERNAL_FLASH_SPI_CLOCK_DIVISOR
+# ifdef __AVR__
+# define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 4
+# else
+# define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 8
+# endif
+#endif
+
+/*
+ The SPI mode to communicate with the FLASH.
+*/
+#ifndef EXTERNAL_FLASH_SPI_MODE
+# define EXTERNAL_FLASH_SPI_MODE 0
+#endif
+
+/*
+ Whether or not the SPI communication between the MCU and FLASH should be
+ LSB-first.
+*/
+#ifndef EXTERNAL_FLASH_SPI_LSBFIRST
+# define EXTERNAL_FLASH_SPI_LSBFIRST false
+#endif
+
+/*
+ The Flash address size in bytes, as specified in datasheet.
+*/
+#ifndef EXTERNAL_FLASH_ADDRESS_SIZE
+# define EXTERNAL_FLASH_ADDRESS_SIZE 3
+#endif
+
+/*
+ The page size of the FLASH in bytes, as specified in the datasheet.
+*/
+#ifndef EXTERNAL_FLASH_PAGE_SIZE
+# define EXTERNAL_FLASH_PAGE_SIZE 256
+#endif
+
+/*
+ The sector size of the FLASH in bytes, as specified in the datasheet.
+*/
+#ifndef EXTERNAL_FLASH_SECTOR_SIZE
+# define EXTERNAL_FLASH_SECTOR_SIZE (4 * 1024)
+#endif
+
+/*
+ The block size of the FLASH in bytes, as specified in the datasheet.
+*/
+#ifndef EXTERNAL_FLASH_BLOCK_SIZE
+# define EXTERNAL_FLASH_BLOCK_SIZE (64 * 1024)
+#endif
+
+/*
+ The total size of the FLASH in bytes, as specified in the datasheet.
+*/
+#ifndef EXTERNAL_FLASH_SIZE
+# define EXTERNAL_FLASH_SIZE (512 * 1024)
+#endif
+
+/*
+ The block count of the FLASH, calculated by total FLASH size and block size.
+*/
+#define EXTERNAL_FLASH_BLOCK_COUNT ((EXTERNAL_FLASH_SIZE) / (EXTERNAL_FLASH_BLOCK_SIZE))
+
+/*
+ The sector count of the FLASH, calculated by total FLASH size and sector size.
+*/
+#define EXTERNAL_FLASH_SECTOR_COUNT ((EXTERNAL_FLASH_SIZE) / (EXTERNAL_FLASH_SECTOR_SIZE))
+
+/*
+ The page count of the FLASH, calculated by total FLASH size and page size.
+*/
+#define EXTERNAL_FLASH_PAGE_COUNT ((EXTERNAL_FLASH_SIZE) / (EXTERNAL_FLASH_PAGE_SIZE))
+
+typedef int16_t flash_status_t;
+
+#define FLASH_STATUS_SUCCESS (0)
+#define FLASH_STATUS_ERROR (-1)
+#define FLASH_STATUS_TIMEOUT (-2)
+#define FLASH_STATUS_BAD_ADDRESS (-3)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+void flash_init(void);
+
+flash_status_t flash_erase_chip(void);
+
+flash_status_t flash_erase_block(uint32_t addr);
+
+flash_status_t flash_erase_sector(uint32_t addr);
+
+flash_status_t flash_read_block(uint32_t addr, void *buf, size_t len);
+
+flash_status_t flash_write_block(uint32_t addr, const void *buf, size_t len);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/drivers/gpio/mcp23018.c b/drivers/gpio/mcp23018.c
new file mode 100644
index 0000000000..41cbfe087e
--- /dev/null
+++ b/drivers/gpio/mcp23018.c
@@ -0,0 +1,108 @@
+// Copyright 2022 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "mcp23018.h"
+#include "i2c_master.h"
+#include "wait.h"
+#include "debug.h"
+
+#define SLAVE_TO_ADDR(n) (n << 1)
+#define TIMEOUT 100
+
+enum {
+ CMD_IODIRA = 0x00, // i/o direction register
+ CMD_IODIRB = 0x01,
+ CMD_GPPUA = 0x0C, // GPIO pull-up resistor register
+ CMD_GPPUB = 0x0D,
+ CMD_GPIOA = 0x12, // general purpose i/o port register (write modifies OLAT)
+ CMD_GPIOB = 0x13,
+};
+
+void mcp23018_init(uint8_t addr) {
+ static uint8_t s_init = 0;
+ if (!s_init) {
+ i2c_init();
+ wait_ms(1000);
+
+ s_init = 1;
+ }
+}
+
+bool mcp23018_set_config(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+ uint8_t cmdDirection = port ? CMD_IODIRB : CMD_IODIRA;
+ uint8_t cmdPullup = port ? CMD_GPPUB : CMD_GPPUA;
+
+ i2c_status_t ret = i2c_writeReg(addr, cmdDirection, &conf, sizeof(conf), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_set_config::directionFAILED::%u\n", ret);
+ return false;
+ }
+
+ ret = i2c_writeReg(addr, cmdPullup, &conf, sizeof(conf), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_set_config::pullupFAILED::%u\n", ret);
+ return false;
+ }
+
+ return true;
+}
+
+bool mcp23018_set_output(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+ uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA;
+
+ i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_set_output::FAILED::%u\n", ret);
+ return false;
+ }
+
+ return true;
+}
+
+bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+ uint8_t conf[2] = {confA, confB};
+
+ i2c_status_t ret = i2c_writeReg(addr, CMD_GPIOA, &conf[0], sizeof(conf), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_set_output::FAILED::%u\n", ret);
+ return false;
+ }
+
+ return true;
+}
+
+bool mcp23018_readPins(uint8_t slave_addr, mcp23018_port_t port, uint8_t* out) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+ uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA;
+
+ i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_readPins::FAILED::%u\n", ret);
+ return false;
+ }
+
+ return true;
+}
+
+bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* out) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+
+ typedef union {
+ uint8_t u8[2];
+ uint16_t u16;
+ } data16;
+
+ data16 data = {.u16 = 0};
+
+ i2c_status_t ret = i2c_readReg(addr, CMD_GPIOA, &data.u8[0], sizeof(data), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("mcp23018_readPins::FAILED::%u\n", ret);
+ return false;
+ }
+
+ *out = data.u16;
+ return true;
+}
diff --git a/drivers/gpio/mcp23018.h b/drivers/gpio/mcp23018.h
new file mode 100644
index 0000000000..e7c2730dd1
--- /dev/null
+++ b/drivers/gpio/mcp23018.h
@@ -0,0 +1,65 @@
+// Copyright 2022 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * Port ID
+ */
+typedef enum {
+ mcp23018_PORTA,
+ mcp23018_PORTB,
+} mcp23018_port_t;
+
+/**
+ * Helpers for set_config
+ */
+enum {
+ ALL_OUTPUT = 0,
+ ALL_INPUT = 0xFF,
+};
+
+/**
+ * Helpers for set_output
+ */
+enum {
+ ALL_LOW = 0,
+ ALL_HIGH = 0xFF,
+};
+
+/**
+ * Init expander and any other dependent drivers
+ */
+void mcp23018_init(uint8_t slave_addr);
+
+/**
+ * Configure input/output to a given port
+ */
+bool mcp23018_set_config(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf);
+
+/**
+ * Write high/low to a given port
+ */
+bool mcp23018_set_output(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf);
+
+/**
+ * Write high/low to both ports sequentially
+ *
+ * - slightly faster than multiple set_output
+ */
+bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB);
+
+/**
+ * Read state of a given port
+ */
+bool mcp23018_readPins(uint8_t slave_addr, mcp23018_port_t port, uint8_t* ret);
+
+/**
+ * Read state of both ports sequentially
+ *
+ * - slightly faster than multiple readPins
+ */
+bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* ret);
diff --git a/drivers/gpio/pca9555.c b/drivers/gpio/pca9555.c
index 02b5abbdde..adcd040083 100644
--- a/drivers/gpio/pca9555.c
+++ b/drivers/gpio/pca9555.c
@@ -1,18 +1,6 @@
-/* Copyright 2019
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
+// Copyright 2020 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include "i2c_master.h"
#include "pca9555.h"
@@ -45,39 +33,59 @@ void pca9555_init(uint8_t slave_addr) {
// i2c_stop();
}
-void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+bool pca9555_set_config(uint8_t slave_addr, pca9555_port_t port, uint8_t conf) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0;
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9555_set_config::FAILED\n");
+ return false;
}
+
+ return true;
}
-void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+bool pca9555_set_output(uint8_t slave_addr, pca9555_port_t port, uint8_t conf) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0;
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9555_set_output::FAILED\n");
+ return false;
}
+
+ return true;
}
-uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
+bool pca9555_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+ uint8_t conf[2] = {confA, confB};
+
+ i2c_status_t ret = i2c_writeReg(addr, CMD_OUTPUT_0, &conf[0], sizeof(conf), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ dprintf("pca9555_set_output::FAILED::%u\n", ret);
+ return false;
+ }
+
+ return true;
+}
+
+bool pca9555_readPins(uint8_t slave_addr, pca9555_port_t port, uint8_t* out) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0;
- uint8_t data = 0;
- i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT);
+ i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9555_readPins::FAILED\n");
+ return false;
}
- return data;
+
+ return true;
}
-uint16_t pca9555_readAllPins(uint8_t slave_addr) {
+bool pca9555_readPins_all(uint8_t slave_addr, uint16_t* out) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
typedef union {
@@ -85,11 +93,14 @@ uint16_t pca9555_readAllPins(uint8_t slave_addr) {
uint16_t u16;
} data16;
- data16 data;
+ data16 data = {.u16 = 0};
i2c_status_t ret = i2c_readReg(addr, CMD_INPUT_0, &data.u8[0], sizeof(data), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
- print("pca9555_readAllPins::FAILED\n");
+ print("pca9555_readPins_all::FAILED\n");
+ return false;
}
- return data.u16;
+
+ *out = data.u16;
+ return true;
}
diff --git a/drivers/gpio/pca9555.h b/drivers/gpio/pca9555.h
index 3341ec3eb5..6362ab68ae 100644
--- a/drivers/gpio/pca9555.h
+++ b/drivers/gpio/pca9555.h
@@ -1,20 +1,11 @@
-/* Copyright 2019
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
+// Copyright 2020 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#pragma once
+#include <stdint.h>
+#include <stdbool.h>
+
/*
PCA9555
,----------.
@@ -38,20 +29,60 @@
`----------'
*/
-#define PCA9555_PORT0 0
-#define PCA9555_PORT1 1
+/**
+ * Port ID
+ */
+typedef enum {
+ PCA9555_PORT0,
+ PCA9555_PORT1,
+} pca9555_port_t;
-#define ALL_OUTPUT 0
-#define ALL_INPUT 0xFF
-#define ALL_LOW 0
-#define ALL_HIGH 0xFF
+/**
+ * Helpers for set_config
+ */
+enum {
+ ALL_OUTPUT = 0,
+ ALL_INPUT = 0xFF,
+};
+
+/**
+ * Helpers for set_output
+ */
+enum {
+ ALL_LOW = 0,
+ ALL_HIGH = 0xFF,
+};
+/**
+ * Init expander and any other dependent drivers
+ */
void pca9555_init(uint8_t slave_addr);
-void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
+/**
+ * Configure input/output to a given port
+ */
+bool pca9555_set_config(uint8_t slave_addr, pca9555_port_t port, uint8_t conf);
-void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
+/**
+ * Write high/low to a given port
+ */
+bool pca9555_set_output(uint8_t slave_addr, pca9555_port_t port, uint8_t conf);
-uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port);
+/**
+ * Write high/low to both ports sequentially
+ *
+ * - slightly faster than multiple set_output
+ */
+bool pca9555_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB);
-uint16_t pca9555_readAllPins(uint8_t slave_addr);
+/**
+ * Read state of a given port
+ */
+bool pca9555_readPins(uint8_t slave_addr, pca9555_port_t port, uint8_t* ret);
+
+/**
+ * Read state of both ports sequentially
+ *
+ * - slightly faster than multiple readPins
+ */
+bool pca9555_readPins_all(uint8_t slave_addr, uint16_t* ret);
diff --git a/drivers/gpio/sn74x138.c b/drivers/gpio/sn74x138.c
new file mode 100644
index 0000000000..222e5db56c
--- /dev/null
+++ b/drivers/gpio/sn74x138.c
@@ -0,0 +1,65 @@
+/* Copyright 2022
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "sn74x138.h"
+#include "gpio.h"
+
+#define ADDRESS_PIN_COUNT 3
+
+#ifndef SN74X138_ADDRESS_PINS
+# error sn74x138: no address pins defined!
+#endif
+
+static const pin_t address_pins[ADDRESS_PIN_COUNT] = SN74X138_ADDRESS_PINS;
+
+void sn74x138_init(void) {
+ for (int i = 0; i < ADDRESS_PIN_COUNT; i++) {
+ setPinOutput(address_pins[i]);
+ writePinLow(address_pins[i]);
+ }
+
+#if defined(SN74X138_E1_PIN)
+ setPinOutput(SN74X138_E1_PIN);
+ writePinHigh(SN74X138_E1_PIN);
+#endif
+
+#if defined(SN74X138_E2_PIN)
+ setPinOutput(SN74X138_E2_PIN);
+ writePinHigh(SN74X138_E2_PIN);
+#endif
+#if defined(SN74X138_E3_PIN)
+ setPinOutput(SN74X138_E3_PIN);
+ writePinLow(SN74X138_E3_PIN);
+#endif
+}
+
+void sn74x138_set_enabled(bool enabled) {
+#if defined(SN74X138_E1_PIN)
+ writePin(SN74X138_E1_PIN, !enabled);
+#endif
+#if defined(SN74X138_E2_PIN)
+ writePin(SN74X138_E2_PIN, !enabled);
+#endif
+#if defined(SN74X138_E3_PIN)
+ writePin(SN74X138_E3_PIN, enabled);
+#endif
+}
+
+void sn74x138_set_addr(uint8_t address) {
+ for (int i = 0; i < ADDRESS_PIN_COUNT; i++) {
+ writePin(address_pins[i], address & (1 << i));
+ }
+}
diff --git a/drivers/gpio/sn74x138.h b/drivers/gpio/sn74x138.h
new file mode 100644
index 0000000000..6f1f20e618
--- /dev/null
+++ b/drivers/gpio/sn74x138.h
@@ -0,0 +1,48 @@
+/* Copyright 2022
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * Driver for 74x138 3-to-8 decoder/demultiplexer with inverting outputs
+ * https://assets.nexperia.com/documents/data-sheet/74HC_HCT138.pdf
+ */
+
+/**
+ * Initialize the address and output enable pins.
+ */
+void sn74x138_init(void);
+
+/**
+ * Set the enabled state.
+ *
+ * When enabled is true, pulls the E1 and E2 pins low, and the E3 pin high.
+ *
+ * \param enabled The enable state to set.
+ */
+void sn74x138_set_enabled(bool enabled);
+
+/**
+ * Set the output pin address.
+ *
+ * The selected output pin will be pulled low, while the remaining output pins will be high.
+ *
+ * \param address The address to set, from 0 to 7.
+ */
+void sn74x138_set_addr(uint8_t address);
diff --git a/drivers/haptic/DRV2605L.c b/drivers/haptic/DRV2605L.c
index 5de2b354c9..5a1d2ca0af 100644
--- a/drivers/haptic/DRV2605L.c
+++ b/drivers/haptic/DRV2605L.c
@@ -106,12 +106,14 @@ void DRV_init(void) {
void DRV_rtp_init(void) {
DRV_write(DRV_GO, 0x00);
- DRV_write(DRV_RTP_INPUT, 20); // 20 is the lowest value I've found where haptics can still be felt.
+ DRV_write(DRV_RTP_INPUT, 20); // 20 is the lowest value I've found where haptics can still be felt.
DRV_write(DRV_MODE, 0x05);
DRV_write(DRV_GO, 0x01);
}
-void DRV_amplitude(uint8_t amplitude) { DRV_write(DRV_RTP_INPUT, amplitude); }
+void DRV_amplitude(uint8_t amplitude) {
+ DRV_write(DRV_RTP_INPUT, amplitude);
+}
void DRV_pulse(uint8_t sequence) {
DRV_write(DRV_GO, 0x00);
diff --git a/drivers/haptic/solenoid.c b/drivers/haptic/solenoid.c
index 7a09940f78..14d868bffe 100644
--- a/drivers/haptic/solenoid.c
+++ b/drivers/haptic/solenoid.c
@@ -28,13 +28,21 @@ uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
extern haptic_config_t haptic_config;
-void solenoid_buzz_on(void) { haptic_set_buzz(1); }
+void solenoid_buzz_on(void) {
+ haptic_set_buzz(1);
+}
-void solenoid_buzz_off(void) { haptic_set_buzz(0); }
+void solenoid_buzz_off(void) {
+ haptic_set_buzz(0);
+}
-void solenoid_set_buzz(int buzz) { haptic_set_buzz(buzz); }
+void solenoid_set_buzz(int buzz) {
+ haptic_set_buzz(buzz);
+}
-void solenoid_set_dwell(uint8_t dwell) { solenoid_dwell = dwell; }
+void solenoid_set_dwell(uint8_t dwell) {
+ solenoid_dwell = dwell;
+}
void solenoid_stop(void) {
SOLENOID_PIN_WRITE_INACTIVE();
@@ -89,4 +97,6 @@ void solenoid_setup(void) {
}
}
-void solenoid_shutdown(void) { SOLENOID_PIN_WRITE_INACTIVE(); }
+void solenoid_shutdown(void) {
+ SOLENOID_PIN_WRITE_INACTIVE();
+}
diff --git a/drivers/lcd/st7565.c b/drivers/lcd/st7565.c
index 49b13c00f1..47ee02804b 100644
--- a/drivers/lcd/st7565.c
+++ b/drivers/lcd/st7565.c
@@ -39,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Addressing Setting Commands
#define PAM_SETCOLUMN_LSB 0x00
#define PAM_SETCOLUMN_MSB 0x10
-#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
+#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
// Hardware Configuration Commands
#define DISPLAY_START_LINE 0x40
@@ -138,7 +138,9 @@ bool st7565_init(display_rotation_t rotation) {
return true;
}
-__attribute__((weak)) display_rotation_t st7565_init_user(display_rotation_t rotation) { return rotation; }
+__attribute__((weak)) display_rotation_t st7565_init_user(display_rotation_t rotation) {
+ return rotation;
+}
void st7565_clear(void) {
memset(st7565_buffer, 0, sizeof(st7565_buffer));
@@ -212,7 +214,8 @@ void st7565_advance_page(bool clearPageRemainder) {
remaining = remaining / ST7565_FONT_WIDTH;
// Write empty character until next line
- while (remaining--) st7565_write_char(' ', false);
+ while (remaining--)
+ st7565_write_char(' ', false);
} else {
// Next page index out of bounds?
if (index + remaining >= ST7565_MATRIX_SIZE) {
@@ -263,7 +266,7 @@ void st7565_write_char(const char data, bool invert) {
_Static_assert(sizeof(font) >= ((ST7565_FONT_END + 1 - ST7565_FONT_START) * ST7565_FONT_WIDTH), "ST7565_FONT_END references outside array");
// set the reder buffer data
- uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
+ uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
if (cast_data < ST7565_FONT_START || cast_data > ST7565_FONT_END) {
memset(st7565_cursor, 0x00, ST7565_FONT_WIDTH);
} else {
@@ -389,7 +392,7 @@ void st7565_write_raw_P(const char *data, uint16_t size) {
st7565_dirty |= ((ST7565_BLOCK_TYPE)1 << (i / ST7565_BLOCK_SIZE));
}
}
-#endif // defined(__AVR__)
+#endif // defined(__AVR__)
bool st7565_on(void) {
if (!st7565_initialized) {
@@ -429,7 +432,9 @@ bool st7565_off(void) {
__attribute__((weak)) void st7565_off_user(void) {}
-bool st7565_is_on(void) { return st7565_active; }
+bool st7565_is_on(void) {
+ return st7565_active;
+}
bool st7565_invert(bool invert) {
if (!st7565_initialized) {
@@ -445,9 +450,13 @@ bool st7565_invert(bool invert) {
return st7565_inverted;
}
-uint8_t st7565_max_chars(void) { return ST7565_DISPLAY_WIDTH / ST7565_FONT_WIDTH; }
+uint8_t st7565_max_chars(void) {
+ return ST7565_DISPLAY_WIDTH / ST7565_FONT_WIDTH;
+}
-uint8_t st7565_max_lines(void) { return ST7565_DISPLAY_HEIGHT / ST7565_FONT_HEIGHT; }
+uint8_t st7565_max_lines(void) {
+ return ST7565_DISPLAY_HEIGHT / ST7565_FONT_HEIGHT;
+}
void st7565_task(void) {
if (!st7565_initialized) {
diff --git a/drivers/lcd/st7565.h b/drivers/lcd/st7565.h
index d453dbe6da..0e42c8765b 100644
--- a/drivers/lcd/st7565.h
+++ b/drivers/lcd/st7565.h
@@ -29,16 +29,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define ST7565_DISPLAY_HEIGHT 32
#endif
#ifndef ST7565_MATRIX_SIZE
-# define ST7565_MATRIX_SIZE (ST7565_DISPLAY_HEIGHT / 8 * ST7565_DISPLAY_WIDTH) // 1024 (compile time mathed)
+# define ST7565_MATRIX_SIZE (ST7565_DISPLAY_HEIGHT / 8 * ST7565_DISPLAY_WIDTH) // 1024 (compile time mathed)
#endif
#ifndef ST7565_BLOCK_TYPE
# define ST7565_BLOCK_TYPE uint16_t
#endif
#ifndef ST7565_BLOCK_COUNT
-# define ST7565_BLOCK_COUNT (sizeof(ST7565_BLOCK_TYPE) * 8) // 32 (compile time mathed)
+# define ST7565_BLOCK_COUNT (sizeof(ST7565_BLOCK_TYPE) * 8) // 32 (compile time mathed)
#endif
#ifndef ST7565_BLOCK_SIZE
-# define ST7565_BLOCK_SIZE (ST7565_MATRIX_SIZE / ST7565_BLOCK_COUNT) // 32 (compile time mathed)
+# define ST7565_BLOCK_SIZE (ST7565_MATRIX_SIZE / ST7565_BLOCK_COUNT) // 32 (compile time mathed)
#endif
// the column address corresponding to the first column in the display hardware
@@ -174,7 +174,7 @@ void st7565_write_raw_P(const char *data, uint16_t size);
# define st7565_write_P(data, invert) st7565_write(data, invert)
# define st7565_write_ln_P(data, invert) st7565_write_ln(data, invert)
# define st7565_write_raw_P(data, size) st7565_write_raw(data, size)
-#endif // defined(__AVR__)
+#endif // defined(__AVR__)
// Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on
diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c
index 00e7eb4505..f291948975 100644
--- a/drivers/led/apa102.c
+++ b/drivers/led/apa102.c
@@ -20,15 +20,15 @@
#ifndef APA102_NOPS
# if defined(__AVR__)
-# define APA102_NOPS 0 // AVR at 16 MHz already spends 62.5 ns per clock, so no extra delay is needed
+# define APA102_NOPS 0 // AVR at 16 MHz already spends 62.5 ns per clock, so no extra delay is needed
# elif defined(PROTOCOL_CHIBIOS)
# include "hal.h"
# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX) || defined(GD32VF103)
-# define APA102_NOPS (100 / (1000000000L / (CPU_CLOCK / 4))) // This calculates how many loops of 4 nops to run to delay 100 ns
+# define APA102_NOPS (100 / (1000000000L / (CPU_CLOCK / 4))) // This calculates how many loops of 4 nops to run to delay 100 ns
# else
# error("APA102_NOPS configuration required")
-# define APA102_NOPS 0 // this just pleases the compile so the above error is easier to spot
+# define APA102_NOPS 0 // this just pleases the compile so the above error is easier to spot
# endif
# endif
#endif
@@ -72,7 +72,9 @@ void apa102_setleds(LED_TYPE *start_led, uint16_t num_leds) {
}
// Overwrite the default rgblight_call_driver to use apa102 driver
-void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { apa102_setleds(start_led, num_leds); }
+void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) {
+ apa102_setleds(start_led, num_leds);
+}
void static apa102_init(void) {
setPinOutput(RGB_DI_PIN);
diff --git a/drivers/led/aw20216.c b/drivers/led/aw20216.c
index 2c7ff8f088..59389cdcd6 100644
--- a/drivers/led/aw20216.c
+++ b/drivers/led/aw20216.c
@@ -23,17 +23,17 @@
*/
#define AWINIC_ID 0b1010 << 4
-#define AW_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers
-#define AW_PAGE_PWM 0x01 << 1 // PG1, LED PWM control
-#define AW_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control
-#define AW_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice?
-#define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control?
+#define AW_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers
+#define AW_PAGE_PWM 0x01 << 1 // PG1, LED PWM control
+#define AW_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control
+#define AW_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice?
+#define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control?
#define AW_WRITE 0
#define AW_READ 1
-#define AW_REG_CONFIGURATION 0x00 // PG0
-#define AW_REG_GLOBALCURRENT 0x01 // PG0
+#define AW_REG_CONFIGURATION 0x00 // PG0
+#define AW_REG_GLOBALCURRENT 0x01 // PG0
// Default value of AW_REG_CONFIGURATION
// D7:D4 = 1011, SWSEL (SW1~SW12 active)
diff --git a/drivers/led/ckled2001.c b/drivers/led/ckled2001.c
index 990e50cb60..8d71805a24 100644
--- a/drivers/led/ckled2001.c
+++ b/drivers/led/ckled2001.c
@@ -125,7 +125,16 @@ void CKLED2001_init(uint8_t addr) {
// Set CURRENT PAGE (Page 4)
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
- CKLED2001_write_register(addr, i, 0xFF);
+ switch (i) {
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ CKLED2001_write_register(addr, i, 0xA0);
+ break;
+ default:
+ CKLED2001_write_register(addr, i, 0xFF);
+ }
}
// Enable LEDs ON/OFF
diff --git a/drivers/led/issi/is31fl3731-simple.c b/drivers/led/issi/is31fl3731-simple.c
index f51e2e38af..3abe9ea337 100644
--- a/drivers/led/issi/is31fl3731-simple.c
+++ b/drivers/led/issi/is31fl3731-simple.c
@@ -42,13 +42,13 @@
#define ISSI_REG_PICTUREFRAME 0x01
// Not defined in the datasheet -- See AN for IC
-#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
+#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
+#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
@@ -148,7 +148,7 @@ void IS31FL3731_init(uint8_t addr) {
// enable software shutdown
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
-#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
+#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
IS31FL3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
#endif
diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c
index e6190a6b90..9c6c29f081 100644
--- a/drivers/led/issi/is31fl3731.c
+++ b/drivers/led/issi/is31fl3731.c
@@ -41,13 +41,13 @@
#define ISSI_REG_PICTUREFRAME 0x01
// Not defined in the datasheet -- See AN for IC
-#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
+#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
+#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
@@ -136,7 +136,7 @@ void IS31FL3731_init(uint8_t addr) {
// enable software shutdown
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
-#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
+#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
IS31FL3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
#endif
diff --git a/drivers/led/issi/is31fl3733-simple.c b/drivers/led/issi/is31fl3733-simple.c
new file mode 100644
index 0000000000..af006f756d
--- /dev/null
+++ b/drivers/led/issi/is31fl3733-simple.c
@@ -0,0 +1,248 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2021 Doni Crosby
+ * Copyright 2021 Leo Deng
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "is31fl3733-simple.h"
+#include "i2c_master.h"
+#include "wait.h"
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b101(ADDR2)(ADDR1)
+#define ISSI_ADDR_DEFAULT 0x50
+
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_INTERRUPTMASKREGISTER 0xF0
+#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
+
+#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
+#define ISSI_PAGE_PWM 0x01 // PG1
+#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
+#define ISSI_PAGE_FUNCTION 0x03 // PG3
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG3
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
+#define ISSI_REG_RESET 0x11 // PG3
+#define ISSI_REG_SWPULLUP 0x0F // PG3
+#define ISSI_REG_CSPULLUP 0x10 // PG3
+
+#ifndef ISSI_TIMEOUT
+# define ISSI_TIMEOUT 100
+#endif
+
+#ifndef ISSI_PERSISTENCE
+# define ISSI_PERSISTENCE 0
+#endif
+
+#ifndef ISSI_PWM_FREQUENCY
+# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
+#endif
+
+#ifndef ISSI_SWPULLUP
+# define ISSI_SWPULLUP PUR_0R
+#endif
+
+#ifndef ISSI_CSPULLUP
+# define ISSI_CSPULLUP PUR_0R
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the IS31FL3733 PWM registers.
+// The control buffers match the PG0 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
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[LED_DRIVER_COUNT][192];
+bool g_pwm_buffer_update_required[LED_DRIVER_COUNT] = {false};
+
+/* There's probably a better way to init this... */
+#if LED_DRIVER_COUNT == 1
+uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}};
+#elif LED_DRIVER_COUNT == 2
+uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}};
+#elif LED_DRIVER_COUNT == 3
+uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}, {0}};
+#elif LED_DRIVER_COUNT == 4
+uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}, {0}, {0}};
+#endif
+bool g_led_control_registers_update_required[LED_DRIVER_COUNT] = {false};
+
+bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ // If the transaction fails function returns false.
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ return true;
+}
+
+bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // Assumes PG1 is already selected.
+ // If any of the transactions fails function returns false.
+ // Transmit PWM registers in 12 transfers of 16 bytes.
+ // g_twi_transfer_buffer[] is 20 bytes
+
+ // Iterate over the pwm_buffer contents at 16 byte intervals.
+ for (int i = 0; i < 192; i += 16) {
+ g_twi_transfer_buffer[0] = i;
+ // Copy the data from i to i+15.
+ // Device will auto-increment register for data after the first byte
+ // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
+ for (int j = 0; j < 16; j++) {
+ g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ }
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+
+void IS31FL3733_init(uint8_t addr, uint8_t sync) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+ // Sync is passed so set it according to the datasheet.
+
+ // Unlock the command register.
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+
+ // Select PG0
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ // Turn off all LEDs.
+ for (int i = 0x00; i <= 0x17; i++) {
+ IS31FL3733_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+
+ // Select PG1
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ // Set PWM on all LEDs to 0
+ // No need to setup Breath registers to PWM as that is the default.
+ for (int i = 0x00; i <= 0xBF; i++) {
+ IS31FL3733_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+
+ // Select PG3
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ // Set de-ghost pull-up resistors (SWx)
+ IS31FL3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+ // Set de-ghost pull-down resistors (CSx)
+ IS31FL3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+ // Set global current to maximum.
+ IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
+ // Disable software shutdown.
+ IS31FL3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void IS31FL3733_set_value(int index, uint8_t value) {
+ if (index >= 0 && index < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[index];
+
+ g_pwm_buffer[led.driver][led.v] = value;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void IS31FL3733_set_value_all(uint8_t value) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ IS31FL3733_set_value(i, value);
+ }
+}
+
+void IS31FL3733_set_led_control_register(uint8_t index, bool value) {
+ is31_led led = g_is31_leds[index];
+
+ uint8_t control_register = led.v / 8;
+ uint8_t bit_value = led.v % 8;
+
+ if (value) {
+ g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
+ } else {
+ g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+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, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+
+ // If any of the transactions fail we risk writing dirty PG0,
+ // refresh page 0 just in case.
+ if (!IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
+ g_led_control_registers_update_required[index] = true;
+ }
+ g_pwm_buffer_update_required[index] = false;
+ }
+}
+
+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, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ for (int i = 0; i < 24; i++) {
+ IS31FL3733_write_register(addr, i, g_led_control_registers[index][i]);
+ }
+ g_led_control_registers_update_required[index] = false;
+ }
+}
diff --git a/drivers/led/issi/is31fl3733-simple.h b/drivers/led/issi/is31fl3733-simple.h
new file mode 100644
index 0000000000..f5253e3101
--- /dev/null
+++ b/drivers/led/issi/is31fl3733-simple.h
@@ -0,0 +1,260 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2021 Doni Crosby
+ * Copyright 2021 Leo Deng
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "progmem.h"
+
+typedef struct is31_led {
+ uint8_t driver : 2;
+ uint8_t v;
+} __attribute__((packed)) is31_led;
+
+extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL];
+
+void IS31FL3733_init(uint8_t addr, uint8_t sync);
+bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void IS31FL3733_set_value(int index, uint8_t value);
+void IS31FL3733_set_value_all(uint8_t value);
+
+void IS31FL3733_set_led_control_register(uint8_t index, bool value);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index);
+void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
+
+#define PUR_0R 0x00 // No PUR resistor
+#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
+#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
+#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
+#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
+#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
+#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+
+#define A_1 0x00
+#define A_2 0x01
+#define A_3 0x02
+#define A_4 0x03
+#define A_5 0x04
+#define A_6 0x05
+#define A_7 0x06
+#define A_8 0x07
+#define A_9 0x08
+#define A_10 0x09
+#define A_11 0x0A
+#define A_12 0x0B
+#define A_13 0x0C
+#define A_14 0x0D
+#define A_15 0x0E
+#define A_16 0x0F
+
+#define B_1 0x10
+#define B_2 0x11
+#define B_3 0x12
+#define B_4 0x13
+#define B_5 0x14
+#define B_6 0x15
+#define B_7 0x16
+#define B_8 0x17
+#define B_9 0x18
+#define B_10 0x19
+#define B_11 0x1A
+#define B_12 0x1B
+#define B_13 0x1C
+#define B_14 0x1D
+#define B_15 0x1E
+#define B_16 0x1F
+
+#define C_1 0x20
+#define C_2 0x21
+#define C_3 0x22
+#define C_4 0x23
+#define C_5 0x24
+#define C_6 0x25
+#define C_7 0x26
+#define C_8 0x27
+#define C_9 0x28
+#define C_10 0x29
+#define C_11 0x2A
+#define C_12 0x2B
+#define C_13 0x2C
+#define C_14 0x2D
+#define C_15 0x2E
+#define C_16 0x2F
+
+#define D_1 0x30
+#define D_2 0x31
+#define D_3 0x32
+#define D_4 0x33
+#define D_5 0x34
+#define D_6 0x35
+#define D_7 0x36
+#define D_8 0x37
+#define D_9 0x38
+#define D_10 0x39
+#define D_11 0x3A
+#define D_12 0x3B
+#define D_13 0x3C
+#define D_14 0x3D
+#define D_15 0x3E
+#define D_16 0x3F
+
+#define E_1 0x40
+#define E_2 0x41
+#define E_3 0x42
+#define E_4 0x43
+#define E_5 0x44
+#define E_6 0x45
+#define E_7 0x46
+#define E_8 0x47
+#define E_9 0x48
+#define E_10 0x49
+#define E_11 0x4A
+#define E_12 0x4B
+#define E_13 0x4C
+#define E_14 0x4D
+#define E_15 0x4E
+#define E_16 0x4F
+
+#define F_1 0x50
+#define F_2 0x51
+#define F_3 0x52
+#define F_4 0x53
+#define F_5 0x54
+#define F_6 0x55
+#define F_7 0x56
+#define F_8 0x57
+#define F_9 0x58
+#define F_10 0x59
+#define F_11 0x5A
+#define F_12 0x5B
+#define F_13 0x5C
+#define F_14 0x5D
+#define F_15 0x5E
+#define F_16 0x5F
+
+#define G_1 0x60
+#define G_2 0x61
+#define G_3 0x62
+#define G_4 0x63
+#define G_5 0x64
+#define G_6 0x65
+#define G_7 0x66
+#define G_8 0x67
+#define G_9 0x68
+#define G_10 0x69
+#define G_11 0x6A
+#define G_12 0x6B
+#define G_13 0x6C
+#define G_14 0x6D
+#define G_15 0x6E
+#define G_16 0x6F
+
+#define H_1 0x70
+#define H_2 0x71
+#define H_3 0x72
+#define H_4 0x73
+#define H_5 0x74
+#define H_6 0x75
+#define H_7 0x76
+#define H_8 0x77
+#define H_9 0x78
+#define H_10 0x79
+#define H_11 0x7A
+#define H_12 0x7B
+#define H_13 0x7C
+#define H_14 0x7D
+#define H_15 0x7E
+#define H_16 0x7F
+
+#define I_1 0x80
+#define I_2 0x81
+#define I_3 0x82
+#define I_4 0x83
+#define I_5 0x84
+#define I_6 0x85
+#define I_7 0x86
+#define I_8 0x87
+#define I_9 0x88
+#define I_10 0x89
+#define I_11 0x8A
+#define I_12 0x8B
+#define I_13 0x8C
+#define I_14 0x8D
+#define I_15 0x8E
+#define I_16 0x8F
+
+#define J_1 0x90
+#define J_2 0x91
+#define J_3 0x92
+#define J_4 0x93
+#define J_5 0x94
+#define J_6 0x95
+#define J_7 0x96
+#define J_8 0x97
+#define J_9 0x98
+#define J_10 0x99
+#define J_11 0x9A
+#define J_12 0x9B
+#define J_13 0x9C
+#define J_14 0x9D
+#define J_15 0x9E
+#define J_16 0x9F
+
+#define K_1 0xA0
+#define K_2 0xA1
+#define K_3 0xA2
+#define K_4 0xA3
+#define K_5 0xA4
+#define K_6 0xA5
+#define K_7 0xA6
+#define K_8 0xA7
+#define K_9 0xA8
+#define K_10 0xA9
+#define K_11 0xAA
+#define K_12 0xAB
+#define K_13 0xAC
+#define K_14 0xAD
+#define K_15 0xAE
+#define K_16 0xAF
+
+#define L_1 0xB0
+#define L_2 0xB1
+#define L_3 0xB2
+#define L_4 0xB3
+#define L_5 0xB4
+#define L_6 0xB5
+#define L_7 0xB6
+#define L_8 0xB7
+#define L_9 0xB8
+#define L_10 0xB9
+#define L_11 0xBA
+#define L_12 0xBB
+#define L_13 0xBC
+#define L_14 0xBD
+#define L_15 0xBE
+#define L_16 0xBF
diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c
index 696491d070..a2fdaa90fa 100644
--- a/drivers/led/issi/is31fl3733.c
+++ b/drivers/led/issi/is31fl3733.c
@@ -38,16 +38,16 @@
#define ISSI_INTERRUPTMASKREGISTER 0xF0
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
+#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
+#define ISSI_PAGE_PWM 0x01 // PG1
+#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
+#define ISSI_PAGE_FUNCTION 0x03 // PG3
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
+#define ISSI_REG_CONFIGURATION 0x00 // PG3
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
+#define ISSI_REG_RESET 0x11 // PG3
+#define ISSI_REG_SWPULLUP 0x0F // PG3
+#define ISSI_REG_CSPULLUP 0x10 // PG3
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
@@ -58,7 +58,7 @@
#endif
#ifndef ISSI_PWM_FREQUENCY
-# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
+# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
#endif
#ifndef ISSI_SWPULLUP
diff --git a/drivers/led/issi/is31fl3733.h b/drivers/led/issi/is31fl3733.h
index c5d62fed85..7653dd17c0 100644
--- a/drivers/led/issi/is31fl3733.h
+++ b/drivers/led/issi/is31fl3733.h
@@ -48,13 +48,13 @@ 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);
void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
-#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
-#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
-#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
-#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+#define PUR_0R 0x00 // No PUR resistor
+#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
+#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
+#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
+#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
+#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
+#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
#define A_1 0x00
#define A_2 0x01
diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c
index c9a871118d..7752a3f6cb 100644
--- a/drivers/led/issi/is31fl3736.c
+++ b/drivers/led/issi/is31fl3736.c
@@ -36,16 +36,16 @@
#define ISSI_INTERRUPTMASKREGISTER 0xF0
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
+#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
+#define ISSI_PAGE_PWM 0x01 // PG1
+#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
+#define ISSI_PAGE_FUNCTION 0x03 // PG3
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG3
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
+#define ISSI_REG_RESET 0x11 // PG3
+#define ISSI_REG_SWPULLUP 0x0F // PG3
+#define ISSI_REG_CSPULLUP 0x10 // PG3
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
diff --git a/drivers/led/issi/is31fl3736.h b/drivers/led/issi/is31fl3736.h
index 9fbe1cc577..f126034615 100644
--- a/drivers/led/issi/is31fl3736.h
+++ b/drivers/led/issi/is31fl3736.h
@@ -61,14 +61,14 @@ void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enabled);
void IS31FL3736_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr2);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor
-#define PUR_1KR 0x02 // 1.0k Ohm resistor
-#define PUR_2KR 0x03 // 2.0k Ohm resistor
-#define PUR_4KR 0x04 // 4.0k Ohm resistor
-#define PUR_8KR 0x05 // 8.0k Ohm resistor
-#define PUR_16KR 0x06 // 16k Ohm resistor
-#define PUR_32KR 0x07 // 32k Ohm resistor
+#define PUR_0R 0x00 // No PUR resistor
+#define PUR_05KR 0x01 // 0.5k Ohm resistor
+#define PUR_1KR 0x02 // 1.0k Ohm resistor
+#define PUR_2KR 0x03 // 2.0k Ohm resistor
+#define PUR_4KR 0x04 // 4.0k Ohm resistor
+#define PUR_8KR 0x05 // 8.0k Ohm resistor
+#define PUR_16KR 0x06 // 16k Ohm resistor
+#define PUR_32KR 0x07 // 32k Ohm resistor
#define A_1 0x00
#define A_2 0x02
diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c
index 0722e18869..9f2a13de45 100644
--- a/drivers/led/issi/is31fl3737.c
+++ b/drivers/led/issi/is31fl3737.c
@@ -38,16 +38,16 @@
#define ISSI_INTERRUPTMASKREGISTER 0xF0
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
+#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
+#define ISSI_PAGE_PWM 0x01 // PG1
+#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
+#define ISSI_PAGE_FUNCTION 0x03 // PG3
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG3
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
+#define ISSI_REG_RESET 0x11 // PG3
+#define ISSI_REG_SWPULLUP 0x0F // PG3
+#define ISSI_REG_CSPULLUP 0x10 // PG3
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
diff --git a/drivers/led/issi/is31fl3737.h b/drivers/led/issi/is31fl3737.h
index 31b1a22267..ddb70a9df5 100644
--- a/drivers/led/issi/is31fl3737.h
+++ b/drivers/led/issi/is31fl3737.h
@@ -48,14 +48,14 @@ void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bo
void IS31FL3737_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
-#define PUR_1KR 0x02 // 1.0k Ohm resistor in t_NOL
-#define PUR_2KR 0x03 // 2.0k Ohm resistor in t_NOL
-#define PUR_4KR 0x04 // 4.0k Ohm resistor in t_NOL
-#define PUR_8KR 0x05 // 8.0k Ohm resistor in t_NOL
-#define PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+#define PUR_0R 0x00 // No PUR resistor
+#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
+#define PUR_1KR 0x02 // 1.0k Ohm resistor in t_NOL
+#define PUR_2KR 0x03 // 2.0k Ohm resistor in t_NOL
+#define PUR_4KR 0x04 // 4.0k Ohm resistor in t_NOL
+#define PUR_8KR 0x05 // 8.0k Ohm resistor in t_NOL
+#define PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
+#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
#define A_1 0x00
#define A_2 0x01
diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c
index 8d347a5e60..393b0179b5 100644
--- a/drivers/led/issi/is31fl3741.c
+++ b/drivers/led/issi/is31fl3741.c
@@ -42,16 +42,16 @@
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
#define ISSI_IDREGISTER 0xFC
-#define ISSI_PAGE_PWM0 0x00 // PG0
-#define ISSI_PAGE_PWM1 0x01 // PG1
-#define ISSI_PAGE_SCALING_0 0x02 // PG2
-#define ISSI_PAGE_SCALING_1 0x03 // PG3
-#define ISSI_PAGE_FUNCTION 0x04 // PG4
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG4
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG4
-#define ISSI_REG_PULLDOWNUP 0x02 // PG4
-#define ISSI_REG_RESET 0x3F // PG4
+#define ISSI_PAGE_PWM0 0x00 // PG0
+#define ISSI_PAGE_PWM1 0x01 // PG1
+#define ISSI_PAGE_SCALING_0 0x02 // PG2
+#define ISSI_PAGE_SCALING_1 0x03 // PG3
+#define ISSI_PAGE_FUNCTION 0x04 // PG4
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG4
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG4
+#define ISSI_REG_PULLDOWNUP 0x02 // PG4
+#define ISSI_REG_RESET 0x3F // PG4
#ifndef ISSI_TIMEOUT
# define ISSI_TIMEOUT 100
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
index 8154f8be70..3bdb23bd2d 100644
--- a/drivers/led/issi/is31fl3741.h
+++ b/drivers/led/issi/is31fl3741.h
@@ -51,14 +51,14 @@ void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor
-#define PUR_1KR 0x02 // 1.0k Ohm resistor
-#define PUR_2KR 0x03 // 2.0k Ohm resistor
-#define PUR_4KR 0x04 // 4.0k Ohm resistor
-#define PUR_8KR 0x05 // 8.0k Ohm resistor
-#define PUR_16KR 0x06 // 16k Ohm resistor
-#define PUR_32KR 0x07 // 32k Ohm resistor
+#define PUR_0R 0x00 // No PUR resistor
+#define PUR_05KR 0x01 // 0.5k Ohm resistor
+#define PUR_1KR 0x02 // 1.0k Ohm resistor
+#define PUR_2KR 0x03 // 2.0k Ohm resistor
+#define PUR_4KR 0x04 // 4.0k Ohm resistor
+#define PUR_8KR 0x05 // 8.0k Ohm resistor
+#define PUR_16KR 0x06 // 16k Ohm resistor
+#define PUR_32KR 0x07 // 32k Ohm resistor
#define CS1_SW1 0x00
#define CS2_SW1 0x01
diff --git a/drivers/led/issi/is31fl3742.h b/drivers/led/issi/is31fl3742.h
new file mode 100644
index 0000000000..c96f12d0f1
--- /dev/null
+++ b/drivers/led/issi/is31fl3742.h
@@ -0,0 +1,299 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR represents A1:A0 of the 7-bit address.
+// The result is: 0b01100(ADDR)
+#ifndef DRIVER_ADDR_1
+# define DRIVER_ADDR_1 0b0110000
+#endif
+
+// Command Registers
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_IDREGISTER 0xFC
+#define ISSI_REGISTER_UNLOCK 0xC5
+
+// Response Registers
+#define ISSI_PAGE_PWM 0x00
+#define ISSI_PAGE_SCALING 0x02
+#define ISSI_PAGE_FUNCTION 0x04
+
+// Registers under Function Register
+#define ISSI_REG_CONFIGURATION 0x00
+#define ISSI_REG_GLOBALCURRENT 0x01
+#define ISSI_REG_PULLDOWNUP 0x02
+#define ISSI_REG_SSR 0x41
+#define ISSI_REG_RESET 0x3F
+#define ISSI_REG_PWM_SET 0x36
+
+// Set defaults for Function Registers
+#ifndef ISSI_CONFIGURATION
+# define ISSI_CONFIGURATION 0x31
+#endif
+#ifndef ISSI_GLOBALCURRENT
+# define ISSI_GLOBALCURRENT 0xFF
+#endif
+#ifndef ISSI_PULLDOWNUP
+# define ISSI_PULLDOWNUP 0x55
+#endif
+#ifndef ISSI_PWM_SET
+# define ISSI_PWM_SET 0x00
+#endif
+
+// Set defaults for Spread Spectrum Register
+#ifndef ISSI_SSR_1
+# define ISSI_SSR_1 0x00
+#endif
+#ifndef ISSI_SSR_2
+# define ISSI_SSR_2 0x00
+#endif
+#ifndef ISSI_SSR_3
+# define ISSI_SSR_3 0x00
+#endif
+#ifndef ISSI_SSR_4
+# define ISSI_SSR_4 0x00
+#endif
+
+// Set defaults for Scaling registers
+#ifndef ISSI_SCAL_RED
+# define ISSI_SCAL_RED 0xFF
+#endif
+#ifndef ISSI_SCAL_BLUE
+# define ISSI_SCAL_BLUE 0xFF
+#endif
+#ifndef ISSI_SCAL_GREEN
+# define ISSI_SCAL_GREEN 0xFF
+#endif
+#define ISSI_SCAL_RED_OFF 0x00
+#define ISSI_SCAL_GREEN_OFF 0x00
+#define ISSI_SCAL_BLUE_OFF 0x00
+
+#ifndef ISSI_SCAL_LED
+# define ISSI_SCAL_LED 0xFF
+#endif
+#define ISSI_SCAL_LED_OFF 0x00
+
+// Set buffer sizes
+#define ISSI_MAX_LEDS 180
+#define ISSI_SCALING_SIZE 180
+#define ISSI_PWM_TRF_SIZE 18
+#define ISSI_SCALING_TRF_SIZE 18
+
+// Location of 1st bit for PWM and Scaling registers
+#define ISSI_PWM_REG_1ST 0x00
+#define ISSI_SCL_REG_1ST 0x00
+
+// Map CS SW locations to order in PWM / Scaling buffers
+// This matches the ORDER in the Datasheet Register not the POSITION
+// It will always count from 0x00 to (ISSI_MAX_LEDS - 1)
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+#define CS19_SW1 0x12
+#define CS20_SW1 0x13
+#define CS21_SW1 0x14
+#define CS22_SW1 0x15
+#define CS23_SW1 0x16
+#define CS24_SW1 0x17
+#define CS25_SW1 0x18
+#define CS26_SW1 0x19
+#define CS27_SW1 0x1A
+#define CS28_SW1 0x1B
+#define CS29_SW1 0x1C
+#define CS30_SW1 0x1D
+
+#define CS1_SW2 0x1E
+#define CS2_SW2 0x1F
+#define CS3_SW2 0x20
+#define CS4_SW2 0x21
+#define CS5_SW2 0x22
+#define CS6_SW2 0x23
+#define CS7_SW2 0x24
+#define CS8_SW2 0x25
+#define CS9_SW2 0x26
+#define CS10_SW2 0x27
+#define CS11_SW2 0x28
+#define CS12_SW2 0x29
+#define CS13_SW2 0x2A
+#define CS14_SW2 0x2B
+#define CS15_SW2 0x2C
+#define CS16_SW2 0x2D
+#define CS17_SW2 0x2E
+#define CS18_SW2 0x2F
+#define CS19_SW2 0x30
+#define CS20_SW2 0x31
+#define CS21_SW2 0x32
+#define CS22_SW2 0x33
+#define CS23_SW2 0x34
+#define CS24_SW2 0x35
+#define CS25_SW2 0x36
+#define CS26_SW2 0x37
+#define CS27_SW2 0x38
+#define CS28_SW2 0x39
+#define CS29_SW2 0x3A
+#define CS30_SW2 0x3B
+
+#define CS1_SW3 0x3C
+#define CS2_SW3 0x3D
+#define CS3_SW3 0x3E
+#define CS4_SW3 0x3F
+#define CS5_SW3 0x40
+#define CS6_SW3 0x41
+#define CS7_SW3 0x42
+#define CS8_SW3 0x43
+#define CS9_SW3 0x44
+#define CS10_SW3 0x45
+#define CS11_SW3 0x46
+#define CS12_SW3 0x47
+#define CS13_SW3 0x48
+#define CS14_SW3 0x49
+#define CS15_SW3 0x4A
+#define CS16_SW3 0x4B
+#define CS17_SW3 0x4C
+#define CS18_SW3 0x4D
+#define CS19_SW3 0x4E
+#define CS20_SW3 0x4F
+#define CS21_SW3 0x50
+#define CS22_SW3 0x51
+#define CS23_SW3 0x52
+#define CS24_SW3 0x53
+#define CS25_SW3 0x54
+#define CS26_SW3 0x55
+#define CS27_SW3 0x56
+#define CS28_SW3 0x57
+#define CS29_SW3 0x58
+#define CS30_SW3 0x59
+
+#define CS1_SW4 0x5A
+#define CS2_SW4 0x5B
+#define CS3_SW4 0x5C
+#define CS4_SW4 0x5D
+#define CS5_SW4 0x5E
+#define CS6_SW4 0x5F
+#define CS7_SW4 0x60
+#define CS8_SW4 0x61
+#define CS9_SW4 0x62
+#define CS10_SW4 0x63
+#define CS11_SW4 0x64
+#define CS12_SW4 0x65
+#define CS13_SW4 0x66
+#define CS14_SW4 0x67
+#define CS15_SW4 0x68
+#define CS16_SW4 0x69
+#define CS17_SW4 0x6A
+#define CS18_SW4 0x6B
+#define CS19_SW4 0x6C
+#define CS20_SW4 0x6D
+#define CS21_SW4 0x6E
+#define CS22_SW4 0x6F
+#define CS23_SW4 0x70
+#define CS24_SW4 0x71
+#define CS25_SW4 0x72
+#define CS26_SW4 0x73
+#define CS27_SW4 0x74
+#define CS28_SW4 0x75
+#define CS29_SW4 0x76
+#define CS30_SW4 0x77
+
+#define CS1_SW5 0x78
+#define CS2_SW5 0x79
+#define CS3_SW5 0x7A
+#define CS4_SW5 0x7B
+#define CS5_SW5 0x7C
+#define CS6_SW5 0x7D
+#define CS7_SW5 0x7E
+#define CS8_SW5 0x7F
+#define CS9_SW5 0x80
+#define CS10_SW5 0x81
+#define CS11_SW5 0x82
+#define CS12_SW5 0x83
+#define CS13_SW5 0x84
+#define CS14_SW5 0x85
+#define CS15_SW5 0x86
+#define CS16_SW5 0x87
+#define CS17_SW5 0x88
+#define CS18_SW5 0x89
+#define CS19_SW5 0x8A
+#define CS20_SW5 0x8B
+#define CS21_SW5 0x8C
+#define CS22_SW5 0x8D
+#define CS23_SW5 0x8E
+#define CS24_SW5 0x8F
+#define CS25_SW5 0x90
+#define CS26_SW5 0x91
+#define CS27_SW5 0x92
+#define CS28_SW5 0x93
+#define CS29_SW5 0x94
+#define CS30_SW5 0x95
+
+#define CS1_SW6 0x96
+#define CS2_SW6 0x97
+#define CS3_SW6 0x98
+#define CS4_SW6 0x99
+#define CS5_SW6 0x9A
+#define CS6_SW6 0x9B
+#define CS7_SW6 0x9C
+#define CS8_SW6 0x9D
+#define CS9_SW6 0x9E
+#define CS10_SW6 0x9F
+#define CS11_SW6 0xA0
+#define CS12_SW6 0xA1
+#define CS13_SW6 0xA2
+#define CS14_SW6 0xA3
+#define CS15_SW6 0xA4
+#define CS16_SW6 0xA5
+#define CS17_SW6 0xA6
+#define CS18_SW6 0xA7
+#define CS19_SW6 0xA8
+#define CS20_SW6 0xA9
+#define CS21_SW6 0xAA
+#define CS22_SW6 0xAB
+#define CS23_SW6 0xAC
+#define CS24_SW6 0xAD
+#define CS25_SW6 0xAE
+#define CS26_SW6 0xAF
+#define CS27_SW6 0xB0
+#define CS28_SW6 0xB1
+#define CS29_SW6 0xB2
+#define CS30_SW6 0xB3
diff --git a/drivers/led/issi/is31fl3743.h b/drivers/led/issi/is31fl3743.h
new file mode 100644
index 0000000000..d8fcd79096
--- /dev/null
+++ b/drivers/led/issi/is31fl3743.h
@@ -0,0 +1,327 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b010(ADDR2)(ADDR1)
+#ifndef DRIVER_ADDR_1
+# define DRIVER_ADDR_1 0b0100000
+#endif
+
+// Set defaults for Spread Spectrum Register
+#ifndef ISSI_SSR_1
+# if DRIVER_COUNT == 1
+# define ISSI_SSR_1 0x00
+# else
+# define ISSI_SSR_1 0xC0
+# endif
+#endif
+#ifndef ISSI_SSR_2
+# define ISSI_SSR_2 0x80
+#endif
+#ifndef ISSI_SSR_3
+# define ISSI_SSR_3 0x80
+#endif
+#ifndef ISSI_SSR_4
+# define ISSI_SSR_4 0x80
+#endif
+
+// Command Registers
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_IDREGISTER 0xFC
+#define ISSI_REGISTER_UNLOCK 0xC5
+
+// Response Registers
+#define ISSI_PAGE_PWM 0x00
+#define ISSI_PAGE_SCALING 0x01
+#define ISSI_PAGE_FUNCTION 0x02
+
+// Registers under Function Register
+#define ISSI_REG_CONFIGURATION 0x00
+#define ISSI_REG_GLOBALCURRENT 0x01
+#define ISSI_REG_PULLDOWNUP 0x02
+#define ISSI_REG_TEMP 0x24
+#define ISSI_REG_SSR 0x25
+#define ISSI_REG_RESET 0x2F
+
+// Set defaults for Function Registers
+#ifndef ISSI_CONFIGURATION
+# define ISSI_CONFIGURATION 0x01
+#endif
+#ifndef ISSI_GLOBALCURRENT
+# define ISSI_GLOBALCURRENT 0xFF
+#endif
+#ifndef ISSI_PULLDOWNUP
+# define ISSI_PULLDOWNUP 0x33
+#endif
+#ifndef ISSI_TEMP
+# define ISSI_TEMP 0x00
+#endif
+
+// Set defaults for Scaling registers
+#ifndef ISSI_SCAL_RED
+# define ISSI_SCAL_RED 0xFF
+#endif
+#ifndef ISSI_SCAL_BLUE
+# define ISSI_SCAL_BLUE 0xFF
+#endif
+#ifndef ISSI_SCAL_GREEN
+# define ISSI_SCAL_GREEN 0xFF
+#endif
+#define ISSI_SCAL_RED_OFF 0x00
+#define ISSI_SCAL_GREEN_OFF 0x00
+#define ISSI_SCAL_BLUE_OFF 0x00
+
+#ifndef ISSI_SCAL_LED
+# define ISSI_SCAL_LED 0xFF
+#endif
+#define ISSI_SCAL_LED_OFF 0x00
+
+// Set buffer sizes
+#define ISSI_MAX_LEDS 198
+#define ISSI_SCALING_SIZE 198
+#define ISSI_PWM_TRF_SIZE 18
+#define ISSI_SCALING_TRF_SIZE 18
+
+// Location of 1st bit for PWM and Scaling registers
+#define ISSI_PWM_REG_1ST 0x01
+#define ISSI_SCL_REG_1ST 0x01
+
+// Map CS SW locations to order in PWM / Scaling buffers
+// This matches the ORDER in the Datasheet Register not the POSITION
+// It will always count from 0x00 to (ISSI_MAX_LEDS - 1)
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+
+#define CS1_SW2 0x12
+#define CS2_SW2 0x13
+#define CS3_SW2 0x14
+#define CS4_SW2 0x15
+#define CS5_SW2 0x16
+#define CS6_SW2 0x17
+#define CS7_SW2 0x18
+#define CS8_SW2 0x19
+#define CS9_SW2 0x1A
+#define CS10_SW2 0x1B
+#define CS11_SW2 0x1C
+#define CS12_SW2 0x1D
+#define CS13_SW2 0x1E
+#define CS14_SW2 0x1F
+#define CS15_SW2 0x20
+#define CS16_SW2 0x21
+#define CS17_SW2 0x22
+#define CS18_SW2 0x23
+
+#define CS1_SW3 0x24
+#define CS2_SW3 0x25
+#define CS3_SW3 0x26
+#define CS4_SW3 0x27
+#define CS5_SW3 0x28
+#define CS6_SW3 0x29
+#define CS7_SW3 0x2A
+#define CS8_SW3 0x2B
+#define CS9_SW3 0x2C
+#define CS10_SW3 0x2D
+#define CS11_SW3 0x2E
+#define CS12_SW3 0x2F
+#define CS13_SW3 0x30
+#define CS14_SW3 0x31
+#define CS15_SW3 0x32
+#define CS16_SW3 0x33
+#define CS17_SW3 0x34
+#define CS18_SW3 0x35
+
+#define CS1_SW4 0x36
+#define CS2_SW4 0x37
+#define CS3_SW4 0x38
+#define CS4_SW4 0x39
+#define CS5_SW4 0x3A
+#define CS6_SW4 0x3B
+#define CS7_SW4 0x3C
+#define CS8_SW4 0x3D
+#define CS9_SW4 0x3E
+#define CS10_SW4 0x3F
+#define CS11_SW4 0x40
+#define CS12_SW4 0x41
+#define CS13_SW4 0x42
+#define CS14_SW4 0x43
+#define CS15_SW4 0x44
+#define CS16_SW4 0x45
+#define CS17_SW4 0x46
+#define CS18_SW4 0x47
+
+#define CS1_SW5 0x48
+#define CS2_SW5 0x49
+#define CS3_SW5 0x4A
+#define CS4_SW5 0x4B
+#define CS5_SW5 0x4C
+#define CS6_SW5 0x4D
+#define CS7_SW5 0x4E
+#define CS8_SW5 0x4F
+#define CS9_SW5 0x50
+#define CS10_SW5 0x51
+#define CS11_SW5 0x52
+#define CS12_SW5 0x53
+#define CS13_SW5 0x54
+#define CS14_SW5 0x55
+#define CS15_SW5 0x56
+#define CS16_SW5 0x57
+#define CS17_SW5 0x58
+#define CS18_SW5 0x59
+
+#define CS1_SW6 0x5A
+#define CS2_SW6 0x5B
+#define CS3_SW6 0x5C
+#define CS4_SW6 0x5D
+#define CS5_SW6 0x5E
+#define CS6_SW6 0x5F
+#define CS7_SW6 0x60
+#define CS8_SW6 0x61
+#define CS9_SW6 0x62
+#define CS10_SW6 0x63
+#define CS11_SW6 0x64
+#define CS12_SW6 0x65
+#define CS13_SW6 0x66
+#define CS14_SW6 0x67
+#define CS15_SW6 0x68
+#define CS16_SW6 0x69
+#define CS17_SW6 0x6A
+#define CS18_SW6 0x6B
+
+#define CS1_SW7 0x6C
+#define CS2_SW7 0x6D
+#define CS3_SW7 0x6E
+#define CS4_SW7 0x6F
+#define CS5_SW7 0x70
+#define CS6_SW7 0x71
+#define CS7_SW7 0x72
+#define CS8_SW7 0x73
+#define CS9_SW7 0x74
+#define CS10_SW7 0x75
+#define CS11_SW7 0x76
+#define CS12_SW7 0x77
+#define CS13_SW7 0x78
+#define CS14_SW7 0x79
+#define CS15_SW7 0x7A
+#define CS16_SW7 0x7B
+#define CS17_SW7 0x7C
+#define CS18_SW7 0x7D
+
+#define CS1_SW8 0x7E
+#define CS2_SW8 0x7F
+#define CS3_SW8 0x80
+#define CS4_SW8 0x81
+#define CS5_SW8 0x82
+#define CS6_SW8 0x83
+#define CS7_SW8 0x84
+#define CS8_SW8 0x85
+#define CS9_SW8 0x86
+#define CS10_SW8 0x87
+#define CS11_SW8 0x88
+#define CS12_SW8 0x89
+#define CS13_SW8 0x8A
+#define CS14_SW8 0x8B
+#define CS15_SW8 0x8C
+#define CS16_SW8 0x8D
+#define CS17_SW8 0x8E
+#define CS18_SW8 0x8F
+
+#define CS1_SW9 0x90
+#define CS2_SW9 0x91
+#define CS3_SW9 0x92
+#define CS4_SW9 0x93
+#define CS5_SW9 0x94
+#define CS6_SW9 0x95
+#define CS7_SW9 0x96
+#define CS8_SW9 0x97
+#define CS9_SW9 0x98
+#define CS10_SW9 0x99
+#define CS11_SW9 0x9A
+#define CS12_SW9 0x9B
+#define CS13_SW9 0x9C
+#define CS14_SW9 0x9D
+#define CS15_SW9 0x9E
+#define CS16_SW9 0x9F
+#define CS17_SW9 0xA0
+#define CS18_SW9 0xA1
+
+#define CS1_SW10 0xA2
+#define CS2_SW10 0xA3
+#define CS3_SW10 0xA4
+#define CS4_SW10 0xA5
+#define CS5_SW10 0xA6
+#define CS6_SW10 0xA7
+#define CS7_SW10 0xA8
+#define CS8_SW10 0xA9
+#define CS9_SW10 0xAA
+#define CS10_SW10 0xAB
+#define CS11_SW10 0xAC
+#define CS12_SW10 0xAD
+#define CS13_SW10 0xAE
+#define CS14_SW10 0xAF
+#define CS15_SW10 0xB0
+#define CS16_SW10 0xB1
+#define CS17_SW10 0xB2
+#define CS18_SW10 0xB3
+
+#define CS1_SW11 0xB4
+#define CS2_SW11 0xB5
+#define CS3_SW11 0xB6
+#define CS4_SW11 0xB7
+#define CS5_SW11 0xB8
+#define CS6_SW11 0xB9
+#define CS7_SW11 0xBA
+#define CS8_SW11 0xBB
+#define CS9_SW11 0xBC
+#define CS10_SW11 0xBD
+#define CS11_SW11 0xBE
+#define CS12_SW11 0xBF
+#define CS13_SW11 0xC0
+#define CS14_SW11 0xC1
+#define CS15_SW11 0xC2
+#define CS16_SW11 0xC3
+#define CS17_SW11 0xC4
+#define CS18_SW11 0xC5
diff --git a/drivers/led/issi/is31fl3745.h b/drivers/led/issi/is31fl3745.h
new file mode 100644
index 0000000000..ca5dd4a986
--- /dev/null
+++ b/drivers/led/issi/is31fl3745.h
@@ -0,0 +1,270 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b010(ADDR2)(ADDR1)
+#ifndef DRIVER_ADDR_1
+# define DRIVER_ADDR_1 0b0100000
+#endif
+
+// Set defaults for Spread Spectrum Register
+#ifndef ISSI_SSR_1
+# if DRIVER_COUNT == 1
+# define ISSI_SSR_1 0x00
+# else
+# define ISSI_SSR_1 0xC0
+# endif
+#endif
+#ifndef ISSI_SSR_2
+# define ISSI_SSR_2 0x80
+#endif
+#ifndef ISSI_SSR_3
+# define ISSI_SSR_3 0x80
+#endif
+#ifndef ISSI_SSR_4
+# define ISSI_SSR_4 0x80
+#endif
+
+// Command Registers
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_IDREGISTER 0xFC
+#define ISSI_REGISTER_UNLOCK 0xC5
+
+// Response Registers
+#define ISSI_PAGE_PWM 0x00
+#define ISSI_PAGE_SCALING 0x01
+#define ISSI_PAGE_FUNCTION 0x02
+
+// Registers under Function Register
+#define ISSI_REG_CONFIGURATION 0x00
+#define ISSI_REG_GLOBALCURRENT 0x01
+#define ISSI_REG_PULLDOWNUP 0x02
+#define ISSI_REG_TEMP 0x24
+#define ISSI_REG_SSR 0x25
+#define ISSI_REG_RESET 0x2F
+
+// Set defaults for Function Registers
+#ifndef ISSI_CONFIGURATION
+# define ISSI_CONFIGURATION 0x31
+#endif
+#ifndef ISSI_GLOBALCURRENT
+# define ISSI_GLOBALCURRENT 0xFF
+#endif
+#ifndef ISSI_PULLDOWNUP
+# define ISSI_PULLDOWNUP 0x33
+#endif
+#ifndef ISSI_TEMP
+# define ISSI_TEMP 0x00
+#endif
+
+// Set defaults for Scaling registers
+#ifndef ISSI_SCAL_RED
+# define ISSI_SCAL_RED 0xFF
+#endif
+#ifndef ISSI_SCAL_BLUE
+# define ISSI_SCAL_BLUE 0xFF
+#endif
+#ifndef ISSI_SCAL_GREEN
+# define ISSI_SCAL_GREEN 0xFF
+#endif
+#define ISSI_SCAL_RED_OFF 0x00
+#define ISSI_SCAL_GREEN_OFF 0x00
+#define ISSI_SCAL_BLUE_OFF 0x00
+
+#ifndef ISSI_SCAL_LED
+# define ISSI_SCAL_LED 0xFF
+#endif
+#define ISSI_SCAL_LED_OFF 0x00
+
+// Set buffer sizes
+#define ISSI_MAX_LEDS 144
+#define ISSI_SCALING_SIZE 144
+#define ISSI_PWM_TRF_SIZE 18
+#define ISSI_SCALING_TRF_SIZE 18
+
+// Location of 1st bit for PWM and Scaling registers
+#define ISSI_PWM_REG_1ST 0x01
+#define ISSI_SCL_REG_1ST 0x01
+
+// Map CS SW locations to order in PWM / Scaling buffers
+// This matches the ORDER in the Datasheet Register not the POSITION
+// It will always count from 0x00 to (ISSI_MAX_LEDS - 1)
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+
+#define CS1_SW2 0x12
+#define CS2_SW2 0x13
+#define CS3_SW2 0x14
+#define CS4_SW2 0x15
+#define CS5_SW2 0x16
+#define CS6_SW2 0x17
+#define CS7_SW2 0x18
+#define CS8_SW2 0x19
+#define CS9_SW2 0x1A
+#define CS10_SW2 0x1B
+#define CS11_SW2 0x1C
+#define CS12_SW2 0x1D
+#define CS13_SW2 0x1E
+#define CS14_SW2 0x1F
+#define CS15_SW2 0x20
+#define CS16_SW2 0x21
+#define CS17_SW2 0x22
+#define CS18_SW2 0x23
+
+#define CS1_SW3 0x24
+#define CS2_SW3 0x25
+#define CS3_SW3 0x26
+#define CS4_SW3 0x27
+#define CS5_SW3 0x28
+#define CS6_SW3 0x29
+#define CS7_SW3 0x2A
+#define CS8_SW3 0x2B
+#define CS9_SW3 0x2C
+#define CS10_SW3 0x2D
+#define CS11_SW3 0x2E
+#define CS12_SW3 0x2F
+#define CS13_SW3 0x30
+#define CS14_SW3 0x31
+#define CS15_SW3 0x32
+#define CS16_SW3 0x33
+#define CS17_SW3 0x34
+#define CS18_SW3 0x35
+
+#define CS1_SW4 0x36
+#define CS2_SW4 0x37
+#define CS3_SW4 0x38
+#define CS4_SW4 0x39
+#define CS5_SW4 0x3A
+#define CS6_SW4 0x3B
+#define CS7_SW4 0x3C
+#define CS8_SW4 0x3D
+#define CS9_SW4 0x3E
+#define CS10_SW4 0x3F
+#define CS11_SW4 0x40
+#define CS12_SW4 0x41
+#define CS13_SW4 0x42
+#define CS14_SW4 0x43
+#define CS15_SW4 0x44
+#define CS16_SW4 0x45
+#define CS17_SW4 0x46
+#define CS18_SW4 0x47
+
+#define CS1_SW5 0x48
+#define CS2_SW5 0x49
+#define CS3_SW5 0x4A
+#define CS4_SW5 0x4B
+#define CS5_SW5 0x4C
+#define CS6_SW5 0x4D
+#define CS7_SW5 0x4E
+#define CS8_SW5 0x4F
+#define CS9_SW5 0x50
+#define CS10_SW5 0x51
+#define CS11_SW5 0x52
+#define CS12_SW5 0x53
+#define CS13_SW5 0x54
+#define CS14_SW5 0x55
+#define CS15_SW5 0x56
+#define CS16_SW5 0x57
+#define CS17_SW5 0x58
+#define CS18_SW5 0x59
+
+#define CS1_SW6 0x5A
+#define CS2_SW6 0x5B
+#define CS3_SW6 0x5C
+#define CS4_SW6 0x5D
+#define CS5_SW6 0x5E
+#define CS6_SW6 0x5F
+#define CS7_SW6 0x60
+#define CS8_SW6 0x61
+#define CS9_SW6 0x62
+#define CS10_SW6 0x63
+#define CS11_SW6 0x64
+#define CS12_SW6 0x65
+#define CS13_SW6 0x66
+#define CS14_SW6 0x67
+#define CS15_SW6 0x68
+#define CS16_SW6 0x69
+#define CS17_SW6 0x6A
+#define CS18_SW6 0x6B
+
+#define CS1_SW7 0x6C
+#define CS2_SW7 0x6D
+#define CS3_SW7 0x6E
+#define CS4_SW7 0x6F
+#define CS5_SW7 0x70
+#define CS6_SW7 0x71
+#define CS7_SW7 0x72
+#define CS8_SW7 0x73
+#define CS9_SW7 0x74
+#define CS10_SW7 0x75
+#define CS11_SW7 0x76
+#define CS12_SW7 0x77
+#define CS13_SW7 0x78
+#define CS14_SW7 0x79
+#define CS15_SW7 0x7A
+#define CS16_SW7 0x7B
+#define CS17_SW7 0x7C
+#define CS18_SW7 0x7D
+
+#define CS1_SW8 0x7E
+#define CS2_SW8 0x7F
+#define CS3_SW8 0x80
+#define CS4_SW8 0x81
+#define CS5_SW8 0x82
+#define CS6_SW8 0x83
+#define CS7_SW8 0x84
+#define CS8_SW8 0x85
+#define CS9_SW8 0x86
+#define CS10_SW8 0x87
+#define CS11_SW8 0x88
+#define CS12_SW8 0x89
+#define CS13_SW8 0x8A
+#define CS14_SW8 0x8B
+#define CS15_SW8 0x8C
+#define CS16_SW8 0x8D
+#define CS17_SW8 0x8E
+#define CS18_SW8 0x8F
diff --git a/drivers/led/issi/is31fl3746.h b/drivers/led/issi/is31fl3746.h
new file mode 100644
index 0000000000..f89f281533
--- /dev/null
+++ b/drivers/led/issi/is31fl3746.h
@@ -0,0 +1,198 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b110(ADDR2)(ADDR1)
+#ifndef DRIVER_ADDR_1
+# define DRIVER_ADDR_1 0b1100000
+#endif
+
+// Set defaults for Spread Spectrum Register
+#ifndef ISSI_SSR_1
+# define ISSI_SSR_1 0x00
+#endif
+#ifndef ISSI_SSR_2
+# define ISSI_SSR_2 0x00
+#endif
+#ifndef ISSI_SSR_3
+# define ISSI_SSR_3 0x00
+#endif
+#ifndef ISSI_SSR_4
+# define ISSI_SSR_4 0x00
+#endif
+
+// Command Registers
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_IDREGISTER 0xFC
+#define ISSI_REGISTER_UNLOCK 0xC5
+
+// Response Registers
+#define ISSI_PAGE_PWM 0x00
+#define ISSI_PAGE_SCALING 0x01
+#define ISSI_PAGE_FUNCTION 0x01
+
+// Registers under Function Register
+#define ISSI_REG_CONFIGURATION 0x50
+#define ISSI_REG_GLOBALCURRENT 0x51
+#define ISSI_REG_PULLDOWNUP 0x52
+#define ISSI_REG_TEMP 0x5F
+#define ISSI_REG_SSR 0x60
+#define ISSI_REG_RESET 0x8F
+#define ISSI_REG_PWM_ENABLE 0xE0
+#define ISSI_REG_PWM_SET 0xE2
+
+// Set defaults for Function Registers
+#ifndef ISSI_CONFIGURATION
+# define ISSI_CONFIGURATION 0x01
+#endif
+#ifndef ISSI_GLOBALCURRENT
+# define ISSI_GLOBALCURRENT 0xFF
+#endif
+#ifndef ISSI_PULLDOWNUP
+# define ISSI_PULLDOWNUP 0x33
+#endif
+#ifndef ISSI_TEMP
+# define ISSI_TEMP 0x00
+#endif
+#ifndef ISSI_PWM_ENABLE
+# define ISSI_PWM_ENABLE 0x00
+#endif
+#ifndef ISSI_PWM_SET
+# define ISSI_PWM_SET 0x00
+#endif
+
+// Set defaults for Scaling registers
+#ifndef ISSI_SCAL_RED
+# define ISSI_SCAL_RED 0xFF
+#endif
+#ifndef ISSI_SCAL_BLUE
+# define ISSI_SCAL_BLUE 0xFF
+#endif
+#ifndef ISSI_SCAL_GREEN
+# define ISSI_SCAL_GREEN 0xFF
+#endif
+#define ISSI_SCAL_RED_OFF 0x00
+#define ISSI_SCAL_GREEN_OFF 0x00
+#define ISSI_SCAL_BLUE_OFF 0x00
+
+#ifndef ISSI_SCAL_LED
+# define ISSI_SCAL_LED 0xFF
+#endif
+#define ISSI_SCAL_LED_OFF 0x00
+
+// Set buffer sizes
+#define ISSI_MAX_LEDS 72
+#define ISSI_SCALING_SIZE 72
+#define ISSI_PWM_TRF_SIZE 18
+#define ISSI_SCALING_TRF_SIZE 18
+
+// Location of 1st bit for PWM and Scaling registers
+#define ISSI_PWM_REG_1ST 0x01
+#define ISSI_SCL_REG_1ST 0x01
+
+// Map CS SW locations to order in PWM / Scaling buffers
+// This matches the ORDER in the Datasheet Register not the POSITION
+// It will always count from 0x00 to (ISSI_MAX_LEDS - 1)
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+
+#define CS1_SW2 0x12
+#define CS2_SW2 0x13
+#define CS3_SW2 0x14
+#define CS4_SW2 0x15
+#define CS5_SW2 0x16
+#define CS6_SW2 0x17
+#define CS7_SW2 0x18
+#define CS8_SW2 0x19
+#define CS9_SW2 0x1A
+#define CS10_SW2 0x1B
+#define CS11_SW2 0x1C
+#define CS12_SW2 0x1D
+#define CS13_SW2 0x1E
+#define CS14_SW2 0x1F
+#define CS15_SW2 0x20
+#define CS16_SW2 0x21
+#define CS17_SW2 0x22
+#define CS18_SW2 0x23
+
+#define CS1_SW3 0x24
+#define CS2_SW3 0x25
+#define CS3_SW3 0x26
+#define CS4_SW3 0x27
+#define CS5_SW3 0x28
+#define CS6_SW3 0x29
+#define CS7_SW3 0x2A
+#define CS8_SW3 0x2B
+#define CS9_SW3 0x2C
+#define CS10_SW3 0x2D
+#define CS11_SW3 0x2E
+#define CS12_SW3 0x2F
+#define CS13_SW3 0x30
+#define CS14_SW3 0x31
+#define CS15_SW3 0x32
+#define CS16_SW3 0x33
+#define CS17_SW3 0x34
+#define CS18_SW3 0x35
+
+#define CS1_SW4 0x36
+#define CS2_SW4 0x37
+#define CS3_SW4 0x38
+#define CS4_SW4 0x39
+#define CS5_SW4 0x3A
+#define CS6_SW4 0x3B
+#define CS7_SW4 0x3C
+#define CS8_SW4 0x3D
+#define CS9_SW4 0x3E
+#define CS10_SW4 0x3F
+#define CS11_SW4 0x40
+#define CS12_SW4 0x41
+#define CS13_SW4 0x42
+#define CS14_SW4 0x43
+#define CS15_SW4 0x44
+#define CS16_SW4 0x45
+#define CS17_SW4 0x46
+#define CS18_SW4 0x47
diff --git a/drivers/led/issi/is31flcommon.c b/drivers/led/issi/is31flcommon.c
new file mode 100644
index 0000000000..9f4b2123ff
--- /dev/null
+++ b/drivers/led/issi/is31flcommon.c
@@ -0,0 +1,230 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "is31flcommon.h"
+#include "i2c_master.h"
+#include "wait.h"
+#include <string.h>
+
+// Set defaults for Timeout and Persistence
+#ifndef ISSI_TIMEOUT
+# define ISSI_TIMEOUT 100
+#endif
+#ifndef ISSI_PERSISTENCE
+# define ISSI_PERSISTENCE 0
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the PWM & scaling registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS];
+bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+
+uint8_t g_scaling_buffer[DRIVER_COUNT][ISSI_SCALING_SIZE];
+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;
+
+#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;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+#endif
+}
+
+// For writing of mulitple register entries to make use of address auto increment
+// Once the controller has been called and we have written the first bit of data
+// the controller will move to the next register meaning we can write sequential blocks.
+bool IS31FL_write_multi_registers(uint8_t addr, uint8_t *source_buffer, uint8_t buffer_size, uint8_t transfer_size, uint8_t start_reg_addr) {
+ // 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;
+ // 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);
+
+#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) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+
+void IS31FL_unlock_register(uint8_t addr, uint8_t page) {
+ // unlock the command register and select Page to write
+ IS31FL_write_single_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, ISSI_REGISTER_UNLOCK);
+ IS31FL_write_single_register(addr, ISSI_COMMANDREGISTER, page);
+}
+
+void IS31FL_common_init(uint8_t addr, uint8_t ssr) {
+ // Setup phase, need to take out of software shutdown and configure
+ // ISSI_SSR_x is passed to allow Master / Slave setting where applicable
+
+ // Unlock the command register & select Function Register
+ IS31FL_unlock_register(addr, ISSI_PAGE_FUNCTION);
+ // Set Configuration Register to remove Software shutdown
+ IS31FL_write_single_register(addr, ISSI_REG_CONFIGURATION, ISSI_CONFIGURATION);
+ // Set Golbal Current Control Register
+ IS31FL_write_single_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ // Set Pull up & Down for SWx CSy
+ IS31FL_write_single_register(addr, ISSI_REG_PULLDOWNUP, ISSI_PULLDOWNUP);
+// Set Tempature Status
+#ifdef ISSI_REG_TEMP
+ IS31FL_write_single_register(addr, ISSI_REG_TEMP, ISSI_TEMP);
+#endif
+ // Set Spread Spectrum Register, passed through as sets SYNC function
+ IS31FL_write_single_register(addr, ISSI_REG_SSR, ssr);
+// Set PWM Frequency Enable Register if applicable
+#ifdef ISSI_REG_PWM_ENABLE
+ IS31FL_write_single_register(addr, ISSI_REG_PWM_ENABLE, ISSI_PWM_ENABLE);
+#endif
+// Set PWM Frequency Register if applicable
+#ifdef ISSI_REG_PWM_SET
+ IS31FL_write_single_register(addr, ISSI_REG_PWM_SET, ISSI_PWM_SET);
+#endif
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void IS31FL_common_update_pwm_register(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ // Queue up the correct page
+ IS31FL_unlock_register(addr, ISSI_PAGE_PWM);
+ // Hand off the update to IS31FL_write_multi_registers
+ IS31FL_write_multi_registers(addr, g_pwm_buffer[index], ISSI_MAX_LEDS, ISSI_PWM_TRF_SIZE, ISSI_PWM_REG_1ST);
+ // Update flags that pwm_buffer has been updated
+ g_pwm_buffer_update_required[index] = false;
+ }
+}
+
+#ifdef ISSI_MANUAL_SCALING
+void IS31FL_set_manual_scaling_buffer(void) {
+ for (int i = 0; i < ISSI_MANUAL_SCALING; i++) {
+ is31_led scale = g_is31_scaling[i];
+ if (scale.driver >= 0 && scale.driver < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[scale.driver];
+
+# ifdef RGB_MATRIX_ENABLE
+ g_scaling_buffer[led.driver][led.r] = scale.r;
+ g_scaling_buffer[led.driver][led.g] = scale.g;
+ g_scaling_buffer[led.driver][led.b] = scale.b;
+# elif defined(LED_MATRIX_ENABLE)
+ g_scaling_buffer[led.driver][led.v] = scale.v;
+# endif
+ g_scaling_buffer_update_required[led.driver] = true;
+ }
+ }
+}
+#endif
+
+void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index) {
+ if (g_scaling_buffer_update_required[index]) {
+ // Queue up the correct page
+ IS31FL_unlock_register(addr, ISSI_PAGE_SCALING);
+ // Hand off the update to IS31FL_write_multi_registers
+ IS31FL_write_multi_registers(addr, g_scaling_buffer[index], ISSI_SCALING_SIZE, ISSI_SCALING_TRF_SIZE, ISSI_SCL_REG_1ST);
+ // Update flags that scaling_buffer has been updated
+ g_scaling_buffer_update_required[index] = false;
+ }
+}
+
+#ifdef RGB_MATRIX_ENABLE
+// Colour is set by adjusting PWM register
+void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ if (index >= 0 && index < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[index];
+
+ g_pwm_buffer[led.driver][led.r] = red;
+ g_pwm_buffer[led.driver][led.g] = green;
+ g_pwm_buffer[led.driver][led.b] = blue;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void IS31FL_RGB_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ IS31FL_RGB_set_color(i, red, green, blue);
+ }
+}
+
+// Setup Scaling register that decides the peak current of each LED
+void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blue) {
+ is31_led led = g_is31_leds[index];
+ if (red) {
+ g_scaling_buffer[led.driver][led.r] = ISSI_SCAL_RED;
+ } else {
+ g_scaling_buffer[led.driver][led.r] = ISSI_SCAL_RED_OFF;
+ }
+ if (green) {
+ g_scaling_buffer[led.driver][led.g] = ISSI_SCAL_GREEN;
+ } else {
+ g_scaling_buffer[led.driver][led.g] = ISSI_SCAL_GREEN_OFF;
+ }
+ if (blue) {
+ g_scaling_buffer[led.driver][led.b] = ISSI_SCAL_BLUE;
+ } else {
+ g_scaling_buffer[led.driver][led.b] = ISSI_SCAL_BLUE_OFF;
+ }
+ g_scaling_buffer_update_required[led.driver] = true;
+}
+
+#elif defined(LED_MATRIX_ENABLE)
+// LED Matrix Specific scripts
+void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value) {
+ is31_led led = g_is31_leds[index];
+ if (value) {
+ g_scaling_buffer[led.driver][led.v] = ISSI_SCAL_LED;
+ } else {
+ g_scaling_buffer[led.driver][led.v] = ISSI_SCAL_LED_OFF;
+ }
+ g_scaling_buffer_update_required[led.driver] = true;
+}
+
+void IS31FL_simple_set_brightness(int index, uint8_t value) {
+ if (index >= 0 && index < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[index];
+ g_pwm_buffer[led.driver][led.v] = value;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void IS31FL_simple_set_brigntness_all(uint8_t value) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ IS31FL_simple_set_brightness(i, value);
+ }
+}
+#endif
diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h
new file mode 100644
index 0000000000..77e9665e32
--- /dev/null
+++ b/drivers/led/issi/is31flcommon.h
@@ -0,0 +1,78 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ * Copyright 2021 MasterSpoon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "progmem.h"
+
+// Which variant header file to use
+#ifdef IS31FL3742A
+# include "is31fl3742.h"
+#elif defined(IS31FL3743A)
+# include "is31fl3743.h"
+#elif defined(IS31FL3745)
+# include "is31fl3745.h"
+#elif defined(IS31FL3746A)
+# include "is31fl3746.h"
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+typedef struct is31_led {
+ uint8_t driver;
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} __attribute__((packed)) is31_led;
+
+#elif defined(LED_MATRIX_ENABLE)
+typedef struct is31_led {
+ uint8_t driver;
+ uint8_t v;
+} __attribute__((packed)) is31_led;
+#endif
+
+#ifdef ISSI_MANUAL_SCALING
+extern const is31_led __flash g_is31_scaling[];
+void IS31FL_set_manual_scaling_buffer(void);
+#endif
+
+extern const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL];
+
+void IS31FL_write_single_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool IS31FL_write_multi_registers(uint8_t addr, uint8_t *source_buffer, uint8_t buffer_size, uint8_t transfer_size, uint8_t start_reg_addr);
+void IS31FL_unlock_register(uint8_t addr, uint8_t page);
+void IS31FL_common_init(uint8_t addr, uint8_t ssr);
+
+void IS31FL_common_update_pwm_register(uint8_t addr, uint8_t index);
+void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index);
+
+#ifdef RGB_MATRIX_ENABLE
+// RGB Matrix Specific scripts
+void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+void IS31FL_RGB_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blue);
+#elif defined(LED_MATRIX_ENABLE)
+// LED Matrix Specific scripts
+void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value);
+void IS31FL_simple_set_brightness(int index, uint8_t value);
+void IS31FL_simple_set_brigntness_all(uint8_t value);
+#endif
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h
index 3b56d370dc..918b837f07 100644
--- a/drivers/oled/oled_driver.h
+++ b/drivers/oled/oled_driver.h
@@ -34,16 +34,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define OLED_DISPLAY_HEIGHT 64
# endif
# ifndef OLED_MATRIX_SIZE
-# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 1024 (compile time mathed)
+# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 1024 (compile time mathed)
# endif
# ifndef OLED_BLOCK_TYPE
# define OLED_BLOCK_TYPE uint16_t
# endif
# ifndef OLED_BLOCK_COUNT
-# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 32 (compile time mathed)
+# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 32 (compile time mathed)
# endif
# ifndef OLED_BLOCK_SIZE
-# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
+# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
# endif
# ifndef OLED_COM_PINS
# define OLED_COM_PINS COM_PINS_ALT
@@ -68,7 +68,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// If OLED_BLOCK_TYPE is uint8_t, these tables would look like:
// #define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 }
// #define OLED_TARGET_MAP { 56, 120, 48, 112, 40, 104, 32, 96, 24, 88, 16, 80, 8, 72, 0, 64 }
-#else // defined(OLED_DISPLAY_128X64)
+#else // defined(OLED_DISPLAY_128X64)
// Default 128x32
# ifndef OLED_DISPLAY_WIDTH
# define OLED_DISPLAY_WIDTH 128
@@ -77,16 +77,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define OLED_DISPLAY_HEIGHT 32
# endif
# ifndef OLED_MATRIX_SIZE
-# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 512 (compile time mathed)
+# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 512 (compile time mathed)
# endif
# ifndef OLED_BLOCK_TYPE
-# define OLED_BLOCK_TYPE uint16_t // Type to use for segmenting the oled display for smart rendering, use unsigned types only
+# define OLED_BLOCK_TYPE uint16_t // Type to use for segmenting the oled display for smart rendering, use unsigned types only
# endif
# ifndef OLED_BLOCK_COUNT
-# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 16 (compile time mathed)
+# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 16 (compile time mathed)
# endif
# ifndef OLED_BLOCK_SIZE
-# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
+# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
# endif
# ifndef OLED_COM_PINS
# define OLED_COM_PINS COM_PINS_SEQ
@@ -105,7 +105,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// If OLED_BLOCK_TYPE is uint8_t, these tables would look like:
// #define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56 }
// #define OLED_TARGET_MAP { 48, 32, 16, 0, 56, 40, 24, 8 }
-#endif // defined(OLED_DISPLAY_CUSTOM)
+#endif // defined(OLED_DISPLAY_CUSTOM)
#if !defined(OLED_IC)
# define OLED_IC OLED_IC_SSD1306
@@ -180,7 +180,7 @@ typedef enum {
OLED_ROTATION_0 = 0,
OLED_ROTATION_90 = 1,
OLED_ROTATION_180 = 2,
- OLED_ROTATION_270 = 3, // OLED_ROTATION_90 | OLED_ROTATION_180
+ OLED_ROTATION_270 = 3, // OLED_ROTATION_90 | OLED_ROTATION_180
} oled_rotation_t;
// Initialize the oled display, rotating the rendered output based on the define passed in.
@@ -262,7 +262,7 @@ void oled_write_raw_P(const char *data, uint16_t size);
# define oled_write_P(data, invert) oled_write(data, invert)
# define oled_write_ln_P(data, invert) oled_write(data, invert)
# define oled_write_raw_P(data, size) oled_write_raw(data, size)
-#endif // defined(__AVR__)
+#endif // defined(__AVR__)
// Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on
diff --git a/drivers/oled/ssd1306_sh1106.c b/drivers/oled/ssd1306_sh1106.c
index d9bd3c14bd..30cfeb5648 100644
--- a/drivers/oled/ssd1306_sh1106.c
+++ b/drivers/oled/ssd1306_sh1106.c
@@ -53,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PAGE_ADDR 0x22
#define PAM_SETCOLUMN_LSB 0x00
#define PAM_SETCOLUMN_MSB 0x10
-#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
+#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
// Hardware Configuration Commands
#define DISPLAY_START_LINE 0x40
@@ -97,9 +97,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C_DATA 0x40
#if defined(__AVR__)
# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
-#else // defined(__AVR__)
+#else // defined(__AVR__)
# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
-#endif // defined(__AVR__)
+#endif // defined(__AVR__)
#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, OLED_I2C_TIMEOUT)
@@ -119,7 +119,7 @@ bool oled_inverted = false;
uint8_t oled_brightness = OLED_BRIGHTNESS;
oled_rotation_t oled_rotation = 0;
uint8_t oled_rotation_width = 0;
-uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values
+uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values
uint8_t oled_scroll_start = 0;
uint8_t oled_scroll_end = 7;
#if OLED_TIMEOUT > 0
@@ -190,7 +190,7 @@ bool oled_init(oled_rotation_t rotation) {
#if (OLED_IC != OLED_IC_SH1106)
// MEMORY_MODE is unsupported on SH1106 (Page Addressing only)
MEMORY_MODE,
- 0x00, // Horizontal addressing mode
+ 0x00, // Horizontal addressing mode
#endif
};
if (I2C_TRANSMIT_P(display_setup1) != I2C_STATUS_SUCCESS) {
@@ -232,8 +232,12 @@ bool oled_init(oled_rotation_t rotation) {
return true;
}
-__attribute__((weak)) oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return rotation; }
-__attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rotation) { return rotation; }
+__attribute__((weak)) oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return rotation;
+}
+__attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return rotation;
+}
void oled_clear(void) {
memset(oled_buffer, 0, sizeof(oled_buffer));
@@ -306,9 +310,9 @@ void oled_render(void) {
// Set column & page position
static uint8_t display_start[] = {I2C_CMD, COLUMN_ADDR, 0, OLED_DISPLAY_WIDTH - 1, PAGE_ADDR, 0, OLED_DISPLAY_HEIGHT / 8 - 1};
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- calc_bounds(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
+ calc_bounds(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
} else {
- calc_bounds_90(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
+ calc_bounds_90(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
}
// Send column & page position
@@ -368,7 +372,8 @@ void oled_advance_page(bool clearPageRemainder) {
remaining = remaining / OLED_FONT_WIDTH;
// Write empty character until next line
- while (remaining--) oled_write_char(' ', false);
+ while (remaining--)
+ oled_write_char(' ', false);
} else {
// Next page index out of bounds?
if (index + remaining >= OLED_MATRIX_SIZE) {
@@ -419,7 +424,7 @@ void oled_write_char(const char data, bool invert) {
_Static_assert(sizeof(font) >= ((OLED_FONT_END + 1 - OLED_FONT_START) * OLED_FONT_WIDTH), "OLED_FONT_END references outside array");
// set the reder buffer data
- uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
+ uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
if (cast_data < OLED_FONT_START || cast_data > OLED_FONT_END) {
memset(oled_cursor, 0x00, OLED_FONT_WIDTH);
} else {
@@ -545,7 +550,7 @@ void oled_write_raw_P(const char *data, uint16_t size) {
oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
}
}
-#endif // defined(__AVR__)
+#endif // defined(__AVR__)
bool oled_on(void) {
if (!oled_initialized) {
@@ -595,7 +600,9 @@ bool oled_off(void) {
return !oled_active;
}
-bool is_oled_on(void) { return oled_active; }
+bool is_oled_on(void) {
+ return oled_active;
+}
uint8_t oled_set_brightness(uint8_t level) {
if (!oled_initialized) {
@@ -613,7 +620,9 @@ uint8_t oled_set_brightness(uint8_t level) {
return oled_brightness;
}
-uint8_t oled_get_brightness(void) { return oled_brightness; }
+uint8_t oled_get_brightness(void) {
+ return oled_brightness;
+}
// Set the specific 8 lines rows of the screen to scroll.
// 0 is the default for start, and 7 for end, which is the entire
@@ -693,7 +702,9 @@ bool oled_scroll_off(void) {
return !oled_scrolling;
}
-bool is_oled_scrolling(void) { return oled_scrolling; }
+bool is_oled_scrolling(void) {
+ return oled_scrolling;
+}
bool oled_invert(bool invert) {
if (!oled_initialized) {
@@ -777,5 +788,9 @@ void oled_task(void) {
#endif
}
-__attribute__((weak)) bool oled_task_kb(void) { return oled_task_user(); }
-__attribute__((weak)) bool oled_task_user(void) { return true; }
+__attribute__((weak)) bool oled_task_kb(void) {
+ return oled_task_user();
+}
+__attribute__((weak)) bool oled_task_user(void) {
+ return true;
+}
diff --git a/drivers/ps2/ps2_busywait.c b/drivers/ps2/ps2_busywait.c
index 983194eea8..c5a0183bb7 100644
--- a/drivers/ps2/ps2_busywait.c
+++ b/drivers/ps2/ps2_busywait.c
@@ -71,12 +71,12 @@ uint8_t ps2_host_send(uint8_t data) {
/* terminate a transmission if we have */
inhibit();
- wait_us(100); // 100us [4]p.13, [5]p.50
+ wait_us(100); // 100us [4]p.13, [5]p.50
/* 'Request to Send' and Start bit */
data_lo();
clock_hi();
- WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
+ WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
/* Data bit */
for (uint8_t i = 0; i < 8; i++) {
@@ -143,7 +143,7 @@ uint8_t ps2_host_recv(void) {
idle();
/* start bit [1] */
- WAIT(clock_lo, 100, 1); // TODO: this is enough?
+ WAIT(clock_lo, 100, 1); // TODO: this is enough?
WAIT(data_lo, 1, 2);
WAIT(clock_hi, 50, 3);
diff --git a/drivers/ps2/ps2_interrupt.c b/drivers/ps2/ps2_interrupt.c
index 70debd02f7..c49b4f8b75 100644
--- a/drivers/ps2/ps2_interrupt.c
+++ b/drivers/ps2/ps2_interrupt.c
@@ -43,7 +43,7 @@ POSSIBILITY OF SUCH DAMAGE.
#if defined(__AVR__)
# include <avr/interrupt.h>
-#elif defined(PROTOCOL_CHIBIOS) // TODO: or STM32 ?
+#elif defined(PROTOCOL_CHIBIOS) // TODO: or STM32 ?
// chibiOS headers
# include "ch.h"
# include "hal.h"
@@ -71,7 +71,9 @@ static inline void pbuf_clear(void);
#if defined(PROTOCOL_CHIBIOS)
void ps2_interrupt_service_routine(void);
-void palCallback(void *arg) { ps2_interrupt_service_routine(); }
+void palCallback(void *arg) {
+ ps2_interrupt_service_routine();
+}
# define PS2_INT_INIT() \
{ palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT); } \
@@ -85,7 +87,7 @@ void palCallback(void *arg) { ps2_interrupt_service_routine(); }
# define PS2_INT_OFF() \
{ palDisableLineEvent(PS2_CLOCK_PIN); } \
while (0)
-#endif // PROTOCOL_CHIBIOS
+#endif // PROTOCOL_CHIBIOS
void ps2_host_init(void) {
idle();
@@ -103,12 +105,12 @@ uint8_t ps2_host_send(uint8_t data) {
/* terminate a transmission if we have */
inhibit();
- wait_us(100); // 100us [4]p.13, [5]p.50
+ wait_us(100); // 100us [4]p.13, [5]p.50
/* 'Request to Send' and Start bit */
data_lo();
clock_hi();
- WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
+ WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
/* Data bit[2-9] */
for (uint8_t i = 0; i < 8; i++) {
@@ -244,7 +246,9 @@ RETURN:
}
#if defined(__AVR__)
-ISR(PS2_INT_VECT) { ps2_interrupt_service_routine(); }
+ISR(PS2_INT_VECT) {
+ ps2_interrupt_service_routine();
+}
#endif
/* send LED state to keyboard */
diff --git a/drivers/ps2/ps2_mouse.c b/drivers/ps2/ps2_mouse.c
index 8a6668b410..ccb0a929ae 100644
--- a/drivers/ps2/ps2_mouse.c
+++ b/drivers/ps2/ps2_mouse.c
@@ -42,7 +42,7 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report);
void ps2_mouse_init(void) {
ps2_host_init();
- wait_ms(PS2_MOUSE_INIT_DELAY); // wait for powering up
+ wait_ms(PS2_MOUSE_INIT_DELAY); // wait for powering up
PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset");
@@ -113,9 +113,13 @@ void ps2_mouse_task(void) {
ps2_mouse_clear_report(&mouse_report);
}
-void ps2_mouse_disable_data_reporting(void) { PS2_MOUSE_SEND(PS2_MOUSE_DISABLE_DATA_REPORTING, "ps2 mouse disable data reporting"); }
+void ps2_mouse_disable_data_reporting(void) {
+ PS2_MOUSE_SEND(PS2_MOUSE_DISABLE_DATA_REPORTING, "ps2 mouse disable data reporting");
+}
-void ps2_mouse_enable_data_reporting(void) { PS2_MOUSE_SEND(PS2_MOUSE_ENABLE_DATA_REPORTING, "ps2 mouse enable data reporting"); }
+void ps2_mouse_enable_data_reporting(void) {
+ PS2_MOUSE_SEND(PS2_MOUSE_ENABLE_DATA_REPORTING, "ps2 mouse enable data reporting");
+}
void ps2_mouse_set_remote_mode(void) {
PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_REMOTE_MODE, "ps2 mouse set remote mode");
@@ -127,13 +131,21 @@ void ps2_mouse_set_stream_mode(void) {
ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
}
-void ps2_mouse_set_scaling_2_1(void) { PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_2_1, "ps2 mouse set scaling 2:1"); }
+void ps2_mouse_set_scaling_2_1(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_2_1, "ps2 mouse set scaling 2:1");
+}
-void ps2_mouse_set_scaling_1_1(void) { PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_1_1, "ps2 mouse set scaling 1:1"); }
+void ps2_mouse_set_scaling_1_1(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_1_1, "ps2 mouse set scaling 1:1");
+}
-void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution) { PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_RESOLUTION, resolution, "ps2 mouse set resolution"); }
+void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution) {
+ PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_RESOLUTION, resolution, "ps2 mouse set resolution");
+}
-void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate) { PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_SAMPLE_RATE, sample_rate, "ps2 mouse set sample rate"); }
+void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate) {
+ PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_SAMPLE_RATE, sample_rate, "ps2 mouse set sample rate");
+}
/* ============================= HELPERS ============================ */
@@ -165,7 +177,7 @@ static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report)
#ifdef PS2_MOUSE_INVERT_X
mouse_report->x = -mouse_report->x;
#endif
-#ifndef PS2_MOUSE_INVERT_Y // NOTE if not!
+#ifndef PS2_MOUSE_INVERT_Y // NOTE if not!
// invert coordinate of y to conform to USB HID mouse
mouse_report->y = -mouse_report->y;
#endif
diff --git a/drivers/sensors/adns5050.c b/drivers/sensors/adns5050.c
index c23d24d5af..b76268fba2 100644
--- a/drivers/sensors/adns5050.c
+++ b/drivers/sensors/adns5050.c
@@ -74,9 +74,13 @@ void adns5050_sync(void) {
writePinHigh(ADNS5050_CS_PIN);
}
-void adns5050_cs_select(void) { writePinLow(ADNS5050_CS_PIN); }
+void adns5050_cs_select(void) {
+ writePinLow(ADNS5050_CS_PIN);
+}
-void adns5050_cs_deselect(void) { writePinHigh(ADNS5050_CS_PIN); }
+void adns5050_cs_deselect(void) {
+ writePinHigh(ADNS5050_CS_PIN);
+}
uint8_t adns5050_serial_read(void) {
setPinInput(ADNS5050_SDIO_PIN);
@@ -190,7 +194,7 @@ int8_t convert_twoscomp(uint8_t data) {
// Don't forget to use the definitions for CPI in the header file.
void adns5050_set_cpi(uint16_t cpi) {
- uint8_t cpival = constrain((cpi / 125), 0x1, 0xD); // limits to 0--119
+ uint8_t cpival = constrain((cpi / 125), 0x1, 0xD); // limits to 0--119
adns5050_write_reg(REG_MOUSE_CONTROL2, 0b10000 | cpival);
}
diff --git a/drivers/sensors/adns9800.c b/drivers/sensors/adns9800.c
index c52f991804..3633f23e52 100644
--- a/drivers/sensors/adns9800.c
+++ b/drivers/sensors/adns9800.c
@@ -77,7 +77,9 @@
#define MSB1 0x80
// clang-format on
-void adns9800_spi_start(void) { spi_start(ADNS9800_CS_PIN, false, ADNS9800_SPI_MODE, ADNS9800_SPI_DIVISOR); }
+void adns9800_spi_start(void) {
+ spi_start(ADNS9800_CS_PIN, false, ADNS9800_SPI_MODE, ADNS9800_SPI_DIVISOR);
+}
void adns9800_write(uint8_t reg_addr, uint8_t data) {
adns9800_spi_start();
@@ -135,10 +137,8 @@ void adns9800_init() {
wait_us(15);
// send all bytes of the firmware
- unsigned char c;
- for (int i = 0; i < FIRMWARE_LENGTH; i++) {
- c = (unsigned char)pgm_read_byte(adns9800_firmware_data + i);
- spi_write(c);
+ for (uint16_t i = 0; i < FIRMWARE_LENGTH; i++) {
+ spi_write(pgm_read_byte(firmware_data + i));
wait_us(15);
}
@@ -154,8 +154,8 @@ void adns9800_init() {
}
config_adns9800_t adns9800_get_config(void) {
- uint8_t config_1 = adns9800_read(REG_Configuration_I);
- return (config_adns9800_t){(config_1 & 0xFF) * CPI_STEP};
+ uint8_t cpival = adns9800_read(REG_Configuration_I);
+ return (config_adns9800_t){(cpival & 0xFF) * CPI_STEP};
}
void adns9800_set_config(config_adns9800_t config) {
@@ -164,8 +164,8 @@ void adns9800_set_config(config_adns9800_t config) {
}
uint16_t adns9800_get_cpi(void) {
- uint8_t config_1 = adns9800_read(REG_Configuration_I);
- return (uint16_t){(config_1 & 0xFF) * CPI_STEP};
+ uint8_t cpival = adns9800_read(REG_Configuration_I);
+ return (uint16_t)(cpival & 0xFF) * CPI_STEP;
}
void adns9800_set_cpi(uint16_t cpi) {
@@ -184,7 +184,7 @@ static int16_t convertDeltaToInt(uint8_t high, uint8_t low) {
}
report_adns9800_t adns9800_get_report(void) {
- report_adns9800_t report = {0, 0};
+ report_adns9800_t report = {0};
adns9800_spi_start();
diff --git a/drivers/sensors/adns9800_srom_A6.h b/drivers/sensors/adns9800_srom_A6.h
index d86ecbbd9e..e698a401b9 100644
--- a/drivers/sensors/adns9800_srom_A6.h
+++ b/drivers/sensors/adns9800_srom_A6.h
@@ -6,7 +6,7 @@
// clang-format off
-const uint8_t adns9800_firmware_data[FIRMWARE_LENGTH] PROGMEM = {
+const uint8_t firmware_data[FIRMWARE_LENGTH] PROGMEM = {
0x03, 0xA6, 0x68, 0x1E, 0x7D, 0x10, 0x7E, 0x7E, 0x5F, 0x1C, 0xB8, 0xF2, 0x47, 0x0C, 0x7B, 0x74,
0x4B, 0x14, 0x8B, 0x75, 0x66, 0x51, 0x0B, 0x8C, 0x76, 0x74, 0x4B, 0x14, 0xAA, 0xD6, 0x0F, 0x9C,
0xBA, 0xF6, 0x6E, 0x3F, 0xDD, 0x38, 0xD5, 0x02, 0x80, 0x9B, 0x82, 0x6D, 0x58, 0x13, 0xA4, 0xAB,
diff --git a/drivers/sensors/analog_joystick.c b/drivers/sensors/analog_joystick.c
index 1666bed047..95f8cff23a 100644
--- a/drivers/sensors/analog_joystick.c
+++ b/drivers/sensors/analog_joystick.c
@@ -24,7 +24,7 @@ uint16_t minAxisValue = ANALOG_JOYSTICK_AXIS_MIN;
uint16_t maxAxisValue = ANALOG_JOYSTICK_AXIS_MAX;
uint8_t maxCursorSpeed = ANALOG_JOYSTICK_SPEED_MAX;
-uint8_t speedRegulator = ANALOG_JOYSTICK_SPEED_REGULATOR; // Lower Values Create Faster Movement
+uint8_t speedRegulator = ANALOG_JOYSTICK_SPEED_REGULATOR; // Lower Values Create Faster Movement
int16_t xOrigin, yOrigin;
diff --git a/drivers/sensors/cirque_pinnacle.c b/drivers/sensors/cirque_pinnacle.c
index b807c4f076..2db7f916fe 100644
--- a/drivers/sensors/cirque_pinnacle.c
+++ b/drivers/sensors/cirque_pinnacle.c
@@ -54,7 +54,9 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count);
void RAP_Write(uint8_t address, uint8_t data);
#ifdef CONSOLE_ENABLE
-void print_byte(uint8_t byte) { xprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0')); }
+void print_byte(uint8_t byte) {
+ xprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
+}
#endif
/* Logical Scaling Functions */
@@ -73,8 +75,12 @@ void ClipCoordinates(pinnacle_data_t* coordinates) {
}
}
-uint16_t cirque_pinnacle_get_scale(void) { return scale_data; }
-void cirque_pinnacle_set_scale(uint16_t scale) { scale_data = scale; }
+uint16_t cirque_pinnacle_get_scale(void) {
+ return scale_data;
+}
+void cirque_pinnacle_set_scale(uint16_t scale) {
+ scale_data = scale;
+}
// Scales data to desired X & Y resolution
void cirque_pinnacle_scale_data(pinnacle_data_t* coordinates, uint16_t xResolution, uint16_t yResolution) {
@@ -105,13 +111,13 @@ void cirque_pinnacle_clear_flags() {
void cirque_pinnacle_enable_feed(bool feedEnable) {
uint8_t temp;
- RAP_ReadBytes(FEEDCONFIG_1, &temp, 1); // Store contents of FeedConfig1 register
+ RAP_ReadBytes(FEEDCONFIG_1, &temp, 1); // Store contents of FeedConfig1 register
if (feedEnable) {
- temp |= 0x01; // Set Feed Enable bit
+ temp |= 0x01; // Set Feed Enable bit
RAP_Write(0x04, temp);
} else {
- temp &= ~0x01; // Clear Feed Enable bit
+ temp &= ~0x01; // Clear Feed Enable bit
RAP_Write(0x04, temp);
}
}
@@ -122,13 +128,13 @@ void cirque_pinnacle_enable_feed(bool feedEnable) {
void ERA_ReadBytes(uint16_t address, uint8_t* data, uint16_t count) {
uint8_t ERAControlValue = 0xFF;
- cirque_pinnacle_enable_feed(false); // Disable feed
+ cirque_pinnacle_enable_feed(false); // Disable feed
- RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Send upper byte of ERA address
- RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Send lower byte of ERA address
+ RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Send upper byte of ERA address
+ RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Send lower byte of ERA address
for (uint16_t i = 0; i < count; i++) {
- RAP_Write(ERA_CONTROL, 0x05); // Signal ERA-read (auto-increment) to Pinnacle
+ RAP_Write(ERA_CONTROL, 0x05); // Signal ERA-read (auto-increment) to Pinnacle
// Wait for status register 0x1E to clear
do {
@@ -145,14 +151,14 @@ void ERA_ReadBytes(uint16_t address, uint8_t* data, uint16_t count) {
void ERA_WriteByte(uint16_t address, uint8_t data) {
uint8_t ERAControlValue = 0xFF;
- cirque_pinnacle_enable_feed(false); // Disable feed
+ cirque_pinnacle_enable_feed(false); // Disable feed
- RAP_Write(ERA_VALUE, data); // Send data byte to be written
+ RAP_Write(ERA_VALUE, data); // Send data byte to be written
- RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Upper byte of ERA address
- RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Lower byte of ERA address
+ RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Upper byte of ERA address
+ RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Lower byte of ERA address
- RAP_Write(ERA_CONTROL, 0x02); // Signal an ERA-write to Pinnacle
+ RAP_Write(ERA_CONTROL, 0x02); // Signal an ERA-write to Pinnacle
// Wait for status register 0x1E to clear
do {
@@ -166,7 +172,7 @@ void cirque_pinnacle_set_adc_attenuation(uint8_t adcGain) {
uint8_t temp = 0x00;
ERA_ReadBytes(0x0187, &temp, 1);
- temp &= 0x3F; // clear top two bits
+ temp &= 0x3F; // clear top two bits
temp |= adcGain;
ERA_WriteByte(0x0187, temp);
ERA_ReadBytes(0x0187, &temp, 1);
diff --git a/drivers/sensors/cirque_pinnacle.h b/drivers/sensors/cirque_pinnacle.h
index db891122a6..c8cb360e03 100644
--- a/drivers/sensors/cirque_pinnacle.h
+++ b/drivers/sensors/cirque_pinnacle.h
@@ -26,16 +26,16 @@ void cirque_pinnacle_set_scale(uint16_t scale);
// Coordinate scaling values
#ifndef CIRQUE_PINNACLE_X_LOWER
-# define CIRQUE_PINNACLE_X_LOWER 127 // min "reachable" X value
+# define CIRQUE_PINNACLE_X_LOWER 127 // min "reachable" X value
#endif
#ifndef CIRQUE_PINNACLE_X_UPPER
-# define CIRQUE_PINNACLE_X_UPPER 1919 // max "reachable" X value
+# define CIRQUE_PINNACLE_X_UPPER 1919 // max "reachable" X value
#endif
#ifndef CIRQUE_PINNACLE_Y_LOWER
-# define CIRQUE_PINNACLE_Y_LOWER 63 // min "reachable" Y value
+# define CIRQUE_PINNACLE_Y_LOWER 63 // min "reachable" Y value
#endif
#ifndef CIRQUE_PINNACLE_Y_UPPER
-# define CIRQUE_PINNACLE_Y_UPPER 1471 // max "reachable" Y value
+# define CIRQUE_PINNACLE_Y_UPPER 1471 // max "reachable" Y value
#endif
#ifndef CIRQUE_PINNACLE_X_RANGE
# define CIRQUE_PINNACLE_X_RANGE (CIRQUE_PINNACLE_X_UPPER - CIRQUE_PINNACLE_X_LOWER)
diff --git a/drivers/sensors/cirque_pinnacle_i2c.c b/drivers/sensors/cirque_pinnacle_i2c.c
index 81dd982b0c..8a38f1dcea 100644
--- a/drivers/sensors/cirque_pinnacle_i2c.c
+++ b/drivers/sensors/cirque_pinnacle_i2c.c
@@ -14,7 +14,7 @@ extern bool touchpad_init;
/* RAP Functions */
// Reads <count> Pinnacle registers starting at <address>
void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
- uint8_t cmdByte = READ_MASK | address; // Form the READ command byte
+ uint8_t cmdByte = READ_MASK | address; // Form the READ command byte
if (touchpad_init) {
i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT);
if (i2c_readReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
@@ -29,7 +29,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
// Writes single-byte <data> to <address>
void RAP_Write(uint8_t address, uint8_t data) {
- uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte
+ uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte
if (touchpad_init) {
if (i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
diff --git a/drivers/sensors/cirque_pinnacle_spi.c b/drivers/sensors/cirque_pinnacle_spi.c
index ed40abd9fa..e00e73eb8c 100644
--- a/drivers/sensors/cirque_pinnacle_spi.c
+++ b/drivers/sensors/cirque_pinnacle_spi.c
@@ -13,14 +13,14 @@ extern bool touchpad_init;
/* RAP Functions */
// Reads <count> Pinnacle registers starting at <address>
void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
- uint8_t cmdByte = READ_MASK | address; // Form the READ command byte
+ uint8_t cmdByte = READ_MASK | address; // Form the READ command byte
if (touchpad_init) {
if (spi_start(CIRQUE_PINNACLE_SPI_CS_PIN, CIRQUE_PINNACLE_SPI_LSBFIRST, CIRQUE_PINNACLE_SPI_MODE, CIRQUE_PINNACLE_SPI_DIVISOR)) {
spi_write(cmdByte);
- spi_read(); // filler
- spi_read(); // filler
+ spi_read(); // filler
+ spi_read(); // filler
for (uint8_t i = 0; i < count; i++) {
- data[i] = spi_read(); // each sepsequent read gets another register's contents
+ data[i] = spi_read(); // each sepsequent read gets another register's contents
}
} else {
#ifdef CONSOLE_ENABLE
@@ -34,7 +34,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
// Writes single-byte <data> to <address>
void RAP_Write(uint8_t address, uint8_t data) {
- uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte
+ uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte
if (touchpad_init) {
if (spi_start(CIRQUE_PINNACLE_SPI_CS_PIN, CIRQUE_PINNACLE_SPI_LSBFIRST, CIRQUE_PINNACLE_SPI_MODE, CIRQUE_PINNACLE_SPI_DIVISOR)) {
diff --git a/drivers/sensors/pimoroni_trackball.c b/drivers/sensors/pimoroni_trackball.c
index 7d390056ea..333e017a06 100644
--- a/drivers/sensors/pimoroni_trackball.c
+++ b/drivers/sensors/pimoroni_trackball.c
@@ -33,8 +33,26 @@
static uint16_t precision = 128;
-float pimoroni_trackball_get_precision(void) { return ((float)precision / 128); }
-void pimoroni_trackball_set_precision(float floatprecision) { precision = (floatprecision * 128); }
+uint16_t pimoroni_trackball_get_cpi(void) {
+ return (precision * 125);
+}
+/**
+ * @brief Sets the scaling value for pimoroni trackball
+ *
+ * Sets a scaling value for pimoroni trackball to allow runtime adjustment. This isn't used by the sensor and is an
+ * approximation so the functions are consistent across drivers.
+ *
+ * NOTE: This rounds down to the nearest number divisable by 125 that's a positive integer, values below 125 are clamped to 125.
+ *
+ * @param cpi uint16_t
+ */
+void pimoroni_trackball_set_cpi(uint16_t cpi) {
+ if (cpi < 249) {
+ precision = 1;
+ } else {
+ precision = (cpi - (cpi % 125)) / 125;
+ }
+}
void pimoroni_trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
uint8_t data[4] = {r, g, b, w};
@@ -60,7 +78,7 @@ i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data) {
return status;
}
-__attribute__((weak)) void pimironi_trackball_device_init(void) {
+__attribute__((weak)) void pimoroni_trackball_device_init(void) {
i2c_init();
pimoroni_trackball_set_rgbw(0x00, 0x00, 0x00, 0x00);
}
diff --git a/drivers/sensors/pimoroni_trackball.h b/drivers/sensors/pimoroni_trackball.h
index 59ee8724ba..e20ee748a7 100644
--- a/drivers/sensors/pimoroni_trackball.h
+++ b/drivers/sensors/pimoroni_trackball.h
@@ -23,9 +23,6 @@
#ifndef PIMORONI_TRACKBALL_ADDRESS
# define PIMORONI_TRACKBALL_ADDRESS 0x0A
#endif
-#ifndef PIMORONI_TRACKBALL_INTERVAL_MS
-# define PIMORONI_TRACKBALL_INTERVAL_MS 8
-#endif
#ifndef PIMORONI_TRACKBALL_SCALE
# define PIMORONI_TRACKBALL_SCALE 5
#endif
@@ -52,10 +49,10 @@ typedef struct {
uint8_t click;
} pimoroni_data_t;
-void pimironi_trackball_device_init(void);
+void pimoroni_trackball_device_init(void);
void pimoroni_trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white);
int16_t pimoroni_trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale);
void pimoroni_trackball_adapt_values(int8_t* mouse, int16_t* offset);
-float pimoroni_trackball_get_precision(void);
-void pimoroni_trackball_set_precision(float precision);
+uint16_t pimoroni_trackball_get_cpi(void);
+void pimoroni_trackball_set_cpi(uint16_t cpi);
i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data);
diff --git a/drivers/sensors/pmw3360.c b/drivers/sensors/pmw3360.c
index 50d1c35801..8c977be1c8 100644
--- a/drivers/sensors/pmw3360.c
+++ b/drivers/sensors/pmw3360.c
@@ -16,136 +16,126 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "spi_master.h"
#include "pmw3360.h"
#include "wait.h"
#include "debug.h"
#include "print.h"
-#include PMW3360_FIRMWARE_H
+#include "pmw3360_firmware.h"
// Registers
// clang-format off
-#define REG_Product_ID 0x00
-#define REG_Revision_ID 0x01
-#define REG_Motion 0x02
-#define REG_Delta_X_L 0x03
-#define REG_Delta_X_H 0x04
-#define REG_Delta_Y_L 0x05
-#define REG_Delta_Y_H 0x06
-#define REG_SQUAL 0x07
-#define REG_Raw_Data_Sum 0x08
-#define REG_Maximum_Raw_data 0x09
-#define REG_Minimum_Raw_data 0x0A
-#define REG_Shutter_Lower 0x0B
-#define REG_Shutter_Upper 0x0C
-#define REG_Control 0x0D
-#define REG_Config1 0x0F
-#define REG_Config2 0x10
-#define REG_Angle_Tune 0x11
-#define REG_Frame_Capture 0x12
-#define REG_SROM_Enable 0x13
-#define REG_Run_Downshift 0x14
-#define REG_Rest1_Rate_Lower 0x15
-#define REG_Rest1_Rate_Upper 0x16
-#define REG_Rest1_Downshift 0x17
-#define REG_Rest2_Rate_Lower 0x18
-#define REG_Rest2_Rate_Upper 0x19
-#define REG_Rest2_Downshift 0x1A
-#define REG_Rest3_Rate_Lower 0x1B
-#define REG_Rest3_Rate_Upper 0x1C
-#define REG_Observation 0x24
-#define REG_Data_Out_Lower 0x25
-#define REG_Data_Out_Upper 0x26
-#define REG_Raw_Data_Dump 0x29
-#define REG_SROM_ID 0x2A
-#define REG_Min_SQ_Run 0x2B
-#define REG_Raw_Data_Threshold 0x2C
-#define REG_Config5 0x2F
-#define REG_Power_Up_Reset 0x3A
-#define REG_Shutdown 0x3B
-#define REG_Inverse_Product_ID 0x3F
-#define REG_LiftCutoff_Tune3 0x41
-#define REG_Angle_Snap 0x42
-#define REG_LiftCutoff_Tune1 0x4A
-#define REG_Motion_Burst 0x50
-#define REG_LiftCutoff_Tune_Timeout 0x58
-#define REG_LiftCutoff_Tune_Min_Length 0x5A
-#define REG_SROM_Load_Burst 0x62
-#define REG_Lift_Config 0x63
-#define REG_Raw_Data_Burst 0x64
-#define REG_LiftCutoff_Tune2 0x65
+#define REG_Product_ID 0x00
+#define REG_Revision_ID 0x01
+#define REG_Motion 0x02
+#define REG_Delta_X_L 0x03
+#define REG_Delta_X_H 0x04
+#define REG_Delta_Y_L 0x05
+#define REG_Delta_Y_H 0x06
+#define REG_SQUAL 0x07
+#define REG_Raw_Data_Sum 0x08
+#define REG_Maximum_Raw_data 0x09
+#define REG_Minimum_Raw_data 0x0a
+#define REG_Shutter_Lower 0x0b
+#define REG_Shutter_Upper 0x0c
+#define REG_Control 0x0d
+#define REG_Config1 0x0f
+#define REG_Config2 0x10
+#define REG_Angle_Tune 0x11
+#define REG_Frame_Capture 0x12
+#define REG_SROM_Enable 0x13
+#define REG_Run_Downshift 0x14
+#define REG_Rest1_Rate_Lower 0x15
+#define REG_Rest1_Rate_Upper 0x16
+#define REG_Rest1_Downshift 0x17
+#define REG_Rest2_Rate_Lower 0x18
+#define REG_Rest2_Rate_Upper 0x19
+#define REG_Rest2_Downshift 0x1a
+#define REG_Rest3_Rate_Lower 0x1b
+#define REG_Rest3_Rate_Upper 0x1c
+#define REG_Observation 0x24
+#define REG_Data_Out_Lower 0x25
+#define REG_Data_Out_Upper 0x26
+#define REG_Raw_Data_Dump 0x29
+#define REG_SROM_ID 0x2a
+#define REG_Min_SQ_Run 0x2b
+#define REG_Raw_Data_Threshold 0x2c
+#define REG_Config5 0x2f
+#define REG_Power_Up_Reset 0x3a
+#define REG_Shutdown 0x3b
+#define REG_Inverse_Product_ID 0x3f
+#define REG_LiftCutoff_Tune3 0x41
+#define REG_Angle_Snap 0x42
+#define REG_LiftCutoff_Tune1 0x4a
+#define REG_Motion_Burst 0x50
+#define REG_LiftCutoff_Tune_Timeout 0x58
+#define REG_LiftCutoff_Tune_Min_Length 0x5a
+#define REG_SROM_Load_Burst 0x62
+#define REG_Lift_Config 0x63
+#define REG_Raw_Data_Burst 0x64
+#define REG_LiftCutoff_Tune2 0x65
+
+#define CPI_STEP 100
// clang-format on
+// limits to 0--119, resulting in a CPI range of 100 -- 12000 (as only steps of 100 are possible).
#ifndef MAX_CPI
-# define MAX_CPI 0x77 // limits to 0--119, should be max cpi/100
+# define MAX_CPI 0x77
#endif
bool _inBurst = false;
#ifdef CONSOLE_ENABLE
-void print_byte(uint8_t byte) { dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0')); }
+void print_byte(uint8_t byte) {
+ dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
+}
#endif
#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
-bool spi_start_adv(void) {
+bool pmw3360_spi_start(void) {
bool status = spi_start(PMW3360_CS_PIN, PMW3360_SPI_LSBFIRST, PMW3360_SPI_MODE, PMW3360_SPI_DIVISOR);
+ // tNCS-SCLK, 120ns
wait_us(1);
return status;
}
-void spi_stop_adv(void) {
- wait_us(1);
- spi_stop();
-}
+spi_status_t pmw3360_write(uint8_t reg_addr, uint8_t data) {
+ pmw3360_spi_start();
-spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data) {
if (reg_addr != REG_Motion_Burst) {
_inBurst = false;
}
- spi_start_adv();
// send address of the register, with MSBit = 1 to indicate it's a write
spi_status_t status = spi_write(reg_addr | 0x80);
status = spi_write(data);
- // tSCLK-NCS for write operation
- wait_us(20);
-
- // tSWW/tSWR (=120us) minus tSCLK-NCS. Could be shortened, but is looks like a safe lower bound
- wait_us(100);
+ // tSCLK-NCS for write operation is 35us
+ wait_us(35);
spi_stop();
+
+ // tSWW/tSWR (=180us) minus tSCLK-NCS. Could be shortened, but is looks like a safe lower bound
+ wait_us(145);
return status;
}
-uint8_t spi_read_adv(uint8_t reg_addr) {
- spi_start_adv();
+uint8_t pmw3360_read(uint8_t reg_addr) {
+ pmw3360_spi_start();
// send adress of the register, with MSBit = 0 to indicate it's a read
spi_write(reg_addr & 0x7f);
-
+ // tSRAD (=160us)
+ wait_us(160);
uint8_t data = spi_read();
// tSCLK-NCS for read operation is 120ns
wait_us(1);
+ spi_stop();
// tSRW/tSRR (=20us) minus tSCLK-NCS
wait_us(19);
-
- spi_stop();
return data;
}
-void pmw3360_set_cpi(uint16_t cpi) {
- uint8_t cpival = constrain((cpi / 100) - 1, 0, MAX_CPI);
-
- spi_start_adv();
- spi_write_adv(REG_Config1, cpival);
- spi_stop();
-}
-
-uint16_t pmw3360_get_cpi(void) {
- uint8_t cpival = spi_read_adv(REG_Config1);
- return (uint16_t)((cpival + 1) & 0xFF) * 100;
-}
-
bool pmw3360_init(void) {
setPinOutput(PMW3360_CS_PIN);
@@ -153,42 +143,51 @@ bool pmw3360_init(void) {
_inBurst = false;
spi_stop();
- spi_start_adv();
+ pmw3360_spi_start();
spi_stop();
- spi_write_adv(REG_Shutdown, 0xb6); // Shutdown first
+ pmw3360_write(REG_Shutdown, 0xb6); // Shutdown first
wait_ms(300);
- spi_start_adv();
+ pmw3360_spi_start();
wait_us(40);
- spi_stop_adv();
+ spi_stop();
wait_us(40);
- spi_write_adv(REG_Power_Up_Reset, 0x5a);
+ // power up, need to first drive NCS high then low, see above.
+ pmw3360_write(REG_Power_Up_Reset, 0x5a);
wait_ms(50);
- spi_read_adv(REG_Motion);
- spi_read_adv(REG_Delta_X_L);
- spi_read_adv(REG_Delta_X_H);
- spi_read_adv(REG_Delta_Y_L);
- spi_read_adv(REG_Delta_Y_H);
+ // read registers and discard
+ pmw3360_read(REG_Motion);
+ pmw3360_read(REG_Delta_X_L);
+ pmw3360_read(REG_Delta_X_H);
+ pmw3360_read(REG_Delta_Y_L);
+ pmw3360_read(REG_Delta_Y_H);
pmw3360_upload_firmware();
- spi_stop_adv();
+ spi_stop();
wait_ms(10);
pmw3360_set_cpi(PMW3360_CPI);
wait_ms(1);
- spi_write_adv(REG_Config2, 0x00);
+ pmw3360_write(REG_Config2, 0x00);
- spi_write_adv(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -30, 30));
+ pmw3360_write(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));
- spi_write_adv(REG_Lift_Config, PMW3360_LIFTOFF_DISTANCE);
+ pmw3360_write(REG_Lift_Config, PMW3360_LIFTOFF_DISTANCE);
bool init_success = pmw3360_check_signature();
+#ifdef CONSOLE_ENABLE
+ if (init_success) {
+ dprintf("pmw3360 signature verified");
+ } else {
+ dprintf("pmw3360 signature verification failed!");
+ }
+#endif
writePinLow(PMW3360_CS_PIN);
@@ -196,86 +195,94 @@ bool pmw3360_init(void) {
}
void pmw3360_upload_firmware(void) {
- spi_write_adv(REG_SROM_Enable, 0x1d);
+ // Datasheet claims we need to disable REST mode first, but during startup
+ // it's already disabled and we're not turning it on ...
+ // pmw3360_write(REG_Config2, 0x00); // disable REST mode
+ pmw3360_write(REG_SROM_Enable, 0x1d);
wait_ms(10);
- spi_write_adv(REG_SROM_Enable, 0x18);
+ pmw3360_write(REG_SROM_Enable, 0x18);
- spi_start_adv();
+ pmw3360_spi_start();
spi_write(REG_SROM_Load_Burst | 0x80);
wait_us(15);
- unsigned char c;
- for (int i = 0; i < FIRMWARE_LENGTH; i++) {
- c = (unsigned char)pgm_read_byte(firmware_data + i);
- spi_write(c);
+ for (uint16_t i = 0; i < FIRMWARE_LENGTH; i++) {
+ spi_write(pgm_read_byte(firmware_data + i));
+#ifndef PMW3360_FIRMWARE_UPLOAD_FAST
wait_us(15);
+#endif
}
wait_us(200);
- spi_read_adv(REG_SROM_ID);
+ pmw3360_read(REG_SROM_ID);
+ pmw3360_write(REG_Config2, 0x00);
+}
- spi_write_adv(REG_Config2, 0x00);
+bool pmw3360_check_signature(void) {
+ uint8_t pid = pmw3360_read(REG_Product_ID);
+ uint8_t iv_pid = pmw3360_read(REG_Inverse_Product_ID);
+ uint8_t SROM_ver = pmw3360_read(REG_SROM_ID);
+ return (pid == firmware_signature[0] && iv_pid == firmware_signature[1] && SROM_ver == firmware_signature[2]); // signature for SROM 0x04
+}
- spi_stop();
- wait_ms(10);
+uint16_t pmw3360_get_cpi(void) {
+ uint8_t cpival = pmw3360_read(REG_Config1);
+ return (uint16_t)((cpival + 1) & 0xFF) * CPI_STEP;
}
-bool pmw3360_check_signature(void) {
- uint8_t pid = spi_read_adv(REG_Product_ID);
- uint8_t iv_pid = spi_read_adv(REG_Inverse_Product_ID);
- uint8_t SROM_ver = spi_read_adv(REG_SROM_ID);
- return (pid == firmware_signature[0] && iv_pid == firmware_signature[1] && SROM_ver == firmware_signature[2]); // signature for SROM 0x04
+void pmw3360_set_cpi(uint16_t cpi) {
+ uint8_t cpival = constrain((cpi / CPI_STEP) - 1, 0, MAX_CPI);
+ pmw3360_write(REG_Config1, cpival);
}
report_pmw3360_t pmw3360_read_burst(void) {
+ report_pmw3360_t report = {0};
+
if (!_inBurst) {
#ifdef CONSOLE_ENABLE
dprintf("burst on");
#endif
- spi_write_adv(REG_Motion_Burst, 0x00);
+ pmw3360_write(REG_Motion_Burst, 0x00);
_inBurst = true;
}
- spi_start_adv();
+ pmw3360_spi_start();
spi_write(REG_Motion_Burst);
- wait_us(35); // waits for tSRAD
+ wait_us(35); // waits for tSRAD_MOTBR
- report_pmw3360_t data = {0};
+ report.motion = spi_read();
+ spi_read(); // skip Observation
+ // delta registers
+ report.dx = spi_read();
+ report.mdx = spi_read();
+ report.dy = spi_read();
+ report.mdy = spi_read();
- data.motion = spi_read();
- spi_write(0x00); // skip Observation
- data.dx = spi_read();
- data.mdx = spi_read();
- data.dy = spi_read();
- data.mdy = spi_read();
+ if (report.motion & 0b111) { // panic recovery, sometimes burst mode works weird.
+ _inBurst = false;
+ }
spi_stop();
#ifdef CONSOLE_ENABLE
if (debug_mouse) {
- print_byte(data.motion);
- print_byte(data.dx);
- print_byte(data.mdx);
- print_byte(data.dy);
- print_byte(data.mdy);
+ print_byte(report.motion);
+ print_byte(report.dx);
+ print_byte(report.mdx);
+ print_byte(report.dy);
+ print_byte(report.mdy);
dprintf("\n");
}
#endif
- data.isMotion = (data.motion & 0x80) != 0;
- data.isOnSurface = (data.motion & 0x08) == 0;
- data.dx |= (data.mdx << 8);
- data.dx = data.dx * -1;
- data.dy |= (data.mdy << 8);
- data.dy = data.dy * -1;
-
- spi_stop();
+ report.isMotion = (report.motion & 0x80) != 0;
+ report.isOnSurface = (report.motion & 0x08) == 0;
+ report.dx |= (report.mdx << 8);
+ report.dx = report.dx * -1;
+ report.dy |= (report.mdy << 8);
+ report.dy = report.dy * -1;
- if (data.motion & 0b111) { // panic recovery, sometimes burst mode works weird.
- _inBurst = false;
- }
-
- return data;
+ return report;
}
diff --git a/drivers/sensors/pmw3360.h b/drivers/sensors/pmw3360.h
index 9aa8e13f8e..eec7295871 100644
--- a/drivers/sensors/pmw3360.h
+++ b/drivers/sensors/pmw3360.h
@@ -19,8 +19,6 @@
#pragma once
#include <stdint.h>
-#include "report.h"
-#include "spi_master.h"
#ifndef PMW3360_CPI
# define PMW3360_CPI 1600
@@ -58,41 +56,20 @@
# error "No chip select pin defined -- missing PMW3360_CS_PIN"
#endif
-/*
-The pmw33660 and pmw3389 use the same registers and timing and such.
-The only differences between the two is the firmware used, and the
-range for the DPI. So add a semi-secret hack to allow use of the
-pmw3389's firmware blob. Also, can set the max cpi range too.
-This should work for the 3390 and 3391 too, in theory.
-*/
-#ifndef PMW3360_FIRMWARE_H
-# define PMW3360_FIRMWARE_H "pmw3360_firmware.h"
-#endif
-
-#ifdef CONSOLE_ENABLE
-void print_byte(uint8_t byte);
-#endif
-
typedef struct {
int8_t motion;
- bool isMotion; // True if a motion is detected.
- bool isOnSurface; // True when a chip is on a surface
- int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
+ bool isMotion; // True if a motion is detected.
+ bool isOnSurface; // True when a chip is on a surface
+ int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
int8_t mdx;
- int16_t dy; // displacement on y directions.
+ int16_t dy; // displacement on y directions.
int8_t mdy;
} report_pmw3360_t;
-bool spi_start_adv(void);
-void spi_stop_adv(void);
-spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data);
-uint8_t spi_read_adv(uint8_t reg_addr);
-bool pmw3360_init(void);
-void pmw3360_set_cpi(uint16_t cpi);
-uint16_t pmw3360_get_cpi(void);
-void pmw3360_upload_firmware(void);
-bool pmw3360_check_signature(void);
+bool pmw3360_init(void);
+void pmw3360_upload_firmware(void);
+bool pmw3360_check_signature(void);
+uint16_t pmw3360_get_cpi(void);
+void pmw3360_set_cpi(uint16_t cpi);
+/* Reads and clears the current delta values on the sensor */
report_pmw3360_t pmw3360_read_burst(void);
-
-#define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
-#define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI)
diff --git a/drivers/sensors/pmw3389.c b/drivers/sensors/pmw3389.c
new file mode 100644
index 0000000000..828dafa134
--- /dev/null
+++ b/drivers/sensors/pmw3389.c
@@ -0,0 +1,294 @@
+/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+ * Copyright 2019 Sunjun Kim
+ * Copyright 2020 Ploopy Corporation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "spi_master.h"
+#include "pmw3389.h"
+#include "wait.h"
+#include "debug.h"
+#include "print.h"
+#include "pmw3389_firmware.h"
+
+// Registers
+// clang-format off
+#define REG_Product_ID 0x00
+#define REG_Revision_ID 0x01
+#define REG_Motion 0x02
+#define REG_Delta_X_L 0x03
+#define REG_Delta_X_H 0x04
+#define REG_Delta_Y_L 0x05
+#define REG_Delta_Y_H 0x06
+#define REG_SQUAL 0x07
+#define REG_RawData_Sum 0x08
+#define REG_Maximum_RawData 0x09
+#define REG_Minimum_RawData 0x0a
+#define REG_Shutter_Lower 0x0b
+#define REG_Shutter_Upper 0x0c
+#define REG_Ripple_Control 0x0d
+#define REG_Resolution_L 0x0e
+#define REG_Resolution_H 0x0f
+#define REG_Config2 0x10
+#define REG_Angle_Tune 0x11
+#define REG_Frame_Capture 0x12
+#define REG_SROM_Enable 0x13
+#define REG_Run_Downshift 0x14
+#define REG_Rest1_Rate_Lower 0x15
+#define REG_Rest1_Rate_Upper 0x16
+#define REG_Rest1_Downshift 0x17
+#define REG_Rest2_Rate_Lower 0x18
+#define REG_Rest2_Rate_Upper 0x19
+#define REG_Rest2_Downshift 0x1a
+#define REG_Rest3_Rate_Lower 0x1b
+#define REG_Rest3_Rate_Upper 0x1c
+#define REG_Observation 0x24
+#define REG_Data_Out_Lower 0x25
+#define REG_Data_Out_Upper 0x26
+#define REG_SROM_ID 0x2a
+#define REG_Min_SQ_Run 0x2b
+#define REG_RawData_Threshold 0x2c
+#define REG_Control2 0x2d
+#define REG_Config5_L 0x2e
+#define REG_Config5_H 0x2f
+#define REG_Power_Up_Reset 0X3a
+#define REG_Shutdown 0x3b
+#define REG_Inverse_Product_ID 0x3f
+#define REG_LiftCutoff_Cal3 0x41
+#define REG_Angle_Snap 0x42
+#define REG_LiftCutoff_Cal1 0x4a
+#define REG_Motion_Burst 0x50
+#define REG_SROM_Load_Burst 0x62
+#define REG_Lift_Config 0x63
+#define REG_RawData_Burst 0x64
+#define REG_LiftCutoff_Cal2 0x65
+#define REG_LiftCutoff_Cal_Timeout 0x71
+#define REG_LiftCutoff_Cal_Min_Length 0x72
+#define REG_PWM_Period_Cnt 0x73
+#define REG_PWM_Width_Cnt 0x74
+
+#define CPI_STEP 50
+// clang-format on
+
+// limits to 0--319, resulting in a CPI range of 50 -- 16000 (as only steps of 50 are possible).
+#ifndef MAX_CPI
+# define MAX_CPI 0x013f
+#endif
+
+bool _inBurst = false;
+
+#ifdef CONSOLE_ENABLE
+void print_byte(uint8_t byte) {
+ dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
+}
+#endif
+#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
+
+bool pmw3389_spi_start(void) {
+ bool status = spi_start(PMW3389_CS_PIN, PMW3389_SPI_LSBFIRST, PMW3389_SPI_MODE, PMW3389_SPI_DIVISOR);
+ // tNCS-SCLK, 120ns
+ wait_us(1);
+ return status;
+}
+
+spi_status_t pmw3389_write(uint8_t reg_addr, uint8_t data) {
+ pmw3389_spi_start();
+
+ if (reg_addr != REG_Motion_Burst) {
+ _inBurst = false;
+ }
+
+ // send address of the register, with MSBit = 1 to indicate it's a write
+ spi_status_t status = spi_write(reg_addr | 0x80);
+ status = spi_write(data);
+
+ // tSCLK-NCS for write operation is 35 us
+ wait_us(35);
+ spi_stop();
+
+ // tSWW/tSWR (=180us) minus tSCLK-NCS. Could be shortened, but is looks like a safe lower bound
+ wait_us(145);
+ return status;
+}
+
+uint8_t pmw3389_read(uint8_t reg_addr) {
+ pmw3389_spi_start();
+ // send adress of the register, with MSBit = 0 to indicate it's a read
+ spi_write(reg_addr & 0x7f);
+ // tSRAD (=160us)
+ wait_us(160);
+ uint8_t data = spi_read();
+
+ // tSCLK-NCS, 120ns
+ wait_us(1);
+ spi_stop();
+
+ // tSRW/tSRR (=20us) minus tSCLK-NCS
+ wait_us(19);
+ return data;
+}
+
+bool pmw3389_init(void) {
+ setPinOutput(PMW3389_CS_PIN);
+
+ spi_init();
+ _inBurst = false;
+
+ spi_stop();
+ pmw3389_spi_start();
+ spi_stop();
+
+ pmw3389_write(REG_Shutdown, 0xb6); // Shutdown first
+ wait_ms(300);
+
+ pmw3389_spi_start();
+ wait_us(40);
+ spi_stop();
+ wait_us(40);
+
+ // power up, need to first drive NCS high then low, see above.
+ pmw3389_write(REG_Power_Up_Reset, 0x5a);
+ wait_ms(50);
+
+ // read registers and discard
+ pmw3389_read(REG_Motion);
+ pmw3389_read(REG_Delta_X_L);
+ pmw3389_read(REG_Delta_X_H);
+ pmw3389_read(REG_Delta_Y_L);
+ pmw3389_read(REG_Delta_Y_H);
+
+ pmw3389_upload_firmware();
+
+ spi_stop();
+
+ wait_ms(10);
+ pmw3389_set_cpi(PMW3389_CPI);
+
+ wait_ms(1);
+
+ pmw3389_write(REG_Config2, 0x00);
+
+ pmw3389_write(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));
+
+ pmw3389_write(REG_Lift_Config, PMW3389_LIFTOFF_DISTANCE);
+
+ bool init_success = pmw3389_check_signature();
+#ifdef CONSOLE_ENABLE
+ if (init_success) {
+ dprintf("pmw3389 signature verified");
+ } else {
+ dprintf("pmw3389 signature verification failed!");
+ }
+#endif
+
+ writePinLow(PMW3389_CS_PIN);
+
+ return init_success;
+}
+
+void pmw3389_upload_firmware(void) {
+ // Datasheet claims we need to disable REST mode first, but during startup
+ // it's already disabled and we're not turning it on ...
+ // pmw3389_write(REG_Config2, 0x00); // disable REST mode
+ pmw3389_write(REG_SROM_Enable, 0x1d);
+
+ wait_ms(10);
+
+ pmw3389_write(REG_SROM_Enable, 0x18);
+
+ pmw3389_spi_start();
+ spi_write(REG_SROM_Load_Burst | 0x80);
+ wait_us(15);
+
+ for (uint16_t i = 0; i < FIRMWARE_LENGTH; i++) {
+ spi_write(pgm_read_byte(firmware_data + i));
+#ifndef PMW3389_FIRMWARE_UPLOAD_FAST
+ wait_us(15);
+#endif
+ }
+ wait_us(200);
+
+ pmw3389_read(REG_SROM_ID);
+ pmw3389_write(REG_Config2, 0x00);
+}
+
+bool pmw3389_check_signature(void) {
+ uint8_t pid = pmw3389_read(REG_Product_ID);
+ uint8_t iv_pid = pmw3389_read(REG_Inverse_Product_ID);
+ uint8_t SROM_ver = pmw3389_read(REG_SROM_ID);
+ return (pid == firmware_signature[0] && iv_pid == firmware_signature[1] && SROM_ver == firmware_signature[2]); // signature for SROM 0x04
+}
+
+uint16_t pmw3389_get_cpi(void) {
+ uint16_t cpival = (pmw3389_read(REG_Resolution_H) << 8) | pmw3389_read(REG_Resolution_L);
+ return (uint16_t)((cpival + 1) & 0xffff) * CPI_STEP;
+}
+
+void pmw3389_set_cpi(uint16_t cpi) {
+ uint16_t cpival = constrain((cpi / CPI_STEP) - 1, 0, MAX_CPI);
+ // Sets upper byte first for more consistent setting of cpi
+ pmw3389_write(REG_Resolution_H, (cpival >> 8) & 0xff);
+ pmw3389_write(REG_Resolution_L, cpival & 0xff);
+}
+
+report_pmw3389_t pmw3389_read_burst(void) {
+ report_pmw3389_t report = {0};
+
+ if (!_inBurst) {
+#ifdef CONSOLE_ENABLE
+ dprintf("burst on");
+#endif
+ pmw3389_write(REG_Motion_Burst, 0x00);
+ _inBurst = true;
+ }
+
+ pmw3389_spi_start();
+ spi_write(REG_Motion_Burst);
+ wait_us(35); // waits for tSRAD_MOTBR
+
+ report.motion = spi_read();
+ spi_read(); // skip Observation
+ // delta registers
+ report.dx = spi_read();
+ report.mdx = spi_read();
+ report.dy = spi_read();
+ report.mdy = spi_read();
+
+ if (report.motion & 0b111) { // panic recovery, sometimes burst mode works weird.
+ _inBurst = false;
+ }
+
+ spi_stop();
+
+#ifdef CONSOLE_ENABLE
+ if (debug_mouse) {
+ print_byte(report.motion);
+ print_byte(report.dx);
+ print_byte(report.mdx);
+ print_byte(report.dy);
+ print_byte(report.mdy);
+ dprintf("\n");
+ }
+#endif
+
+ report.isMotion = (report.motion & 0x80) != 0;
+ report.isOnSurface = (report.motion & 0x08) == 0;
+ report.dx |= (report.mdx << 8);
+ report.dx = report.dx * -1;
+ report.dy |= (report.mdy << 8);
+ report.dy = report.dy * -1;
+
+ return report;
+}
diff --git a/drivers/sensors/pmw3389.h b/drivers/sensors/pmw3389.h
new file mode 100644
index 0000000000..db4a763fe3
--- /dev/null
+++ b/drivers/sensors/pmw3389.h
@@ -0,0 +1,76 @@
+/* Copyright 2021 Alabastard (@Alabastard-64)
+ * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+ * Copyright 2019 Sunjun Kim
+ * Copyright 2020 Ploopy Corporation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+#ifndef PMW3389_CPI
+# define PMW3389_CPI 2000
+#endif
+
+#ifndef PMW3389_CLOCK_SPEED
+# define PMW3389_CLOCK_SPEED 2000000
+#endif
+
+#ifndef PMW3389_SPI_LSBFIRST
+# define PMW3389_SPI_LSBFIRST false
+#endif
+
+#ifndef PMW3389_SPI_MODE
+# define PMW3389_SPI_MODE 3
+#endif
+
+#ifndef PMW3389_SPI_DIVISOR
+# ifdef __AVR__
+# define PMW3389_SPI_DIVISOR (F_CPU / PMW3389_CLOCK_SPEED)
+# else
+# define PMW3389_SPI_DIVISOR 64
+# endif
+#endif
+
+#ifndef PMW3389_LIFTOFF_DISTANCE
+# define PMW3389_LIFTOFF_DISTANCE 0x02
+#endif
+
+#ifndef ROTATIONAL_TRANSFORM_ANGLE
+# define ROTATIONAL_TRANSFORM_ANGLE 0x00
+#endif
+
+#ifndef PMW3389_CS_PIN
+# error "No chip select pin defined -- missing PMW3389_CS_PIN"
+#endif
+
+typedef struct {
+ int8_t motion;
+ bool isMotion; // True if a motion is detected.
+ bool isOnSurface; // True when a chip is on a surface
+ int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
+ int8_t mdx;
+ int16_t dy; // displacement on y directions.
+ int8_t mdy;
+} report_pmw3389_t;
+
+bool pmw3389_init(void);
+void pmw3389_upload_firmware(void);
+bool pmw3389_check_signature(void);
+uint16_t pmw3389_get_cpi(void);
+void pmw3389_set_cpi(uint16_t cpi);
+/* Reads and clears the current delta values on the sensor */
+report_pmw3389_t pmw3389_read_burst(void);
diff --git a/drivers/sensors/pmw3389_firmware.h b/drivers/sensors/pmw3389_firmware.h
index 0564dab73a..cd9638b605 100644
--- a/drivers/sensors/pmw3389_firmware.h
+++ b/drivers/sensors/pmw3389_firmware.h
@@ -18,286 +18,290 @@
#pragma once
+#include "progmem.h"
+
// PID, Inverse PID, SROM version
const uint8_t firmware_signature[] PROGMEM = {0x42, 0xBD, 0x04};
+#define FIRMWARE_LENGTH 4094
+
+// Firmware Blob for PMW3389
+
// clang-format off
-// Firmware Blob foor PMW3389
-const uint16_t firmware_length = 4094;
-// clang-format off
-const uint8_t firmware_data[] PROGMEM = { // SROM 0x04
-0x01, 0xe8, 0xba, 0x26, 0x0b, 0xb2, 0xbe, 0xfe, 0x7e, 0x5f, 0x3c, 0xdb, 0x15, 0xa8, 0xb3,
-0xe4, 0x2b, 0xb5, 0xe8, 0x53, 0x07, 0x6d, 0x3b, 0xd1, 0x20, 0xc2, 0x06, 0x6f, 0x3d, 0xd9,
-0x11, 0xa0, 0xc2, 0xe7, 0x2d, 0xb9, 0xd1, 0x20, 0xa3, 0xa5, 0xc8, 0xf3, 0x64, 0x4a, 0xf7,
-0x4d, 0x18, 0x93, 0xa4, 0xca, 0xf7, 0x6c, 0x5a, 0x36, 0xee, 0x5e, 0x3e, 0xfe, 0x7e, 0x7e,
-0x5f, 0x1d, 0x99, 0xb0, 0xc3, 0xe5, 0x29, 0xd3, 0x03, 0x65, 0x48, 0x12, 0x87, 0x6d, 0x58,
-0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xf2, 0x4f, 0xfd, 0x59, 0x11, 0x81, 0x61, 0x21, 0xc0, 0x02,
-0x86, 0x8e, 0x7f, 0x5d, 0x38, 0xf2, 0x47, 0x0c, 0x7b, 0x55, 0x28, 0xb3, 0xe4, 0x4a, 0x16,
-0xab, 0xbf, 0xdd, 0x38, 0xf2, 0x66, 0x4e, 0xff, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xa5, 0xc8,
-0x12, 0xa6, 0xaf, 0xdc, 0x3a, 0xd1, 0x41, 0x60, 0x75, 0x58, 0x24, 0x92, 0xd4, 0x72, 0x6c,
-0xe0, 0x2f, 0xfd, 0x23, 0x8d, 0x1c, 0x5b, 0xb2, 0x97, 0x36, 0x3d, 0x0b, 0xa2, 0x49, 0xb1,
-0x58, 0xf2, 0x1f, 0xc0, 0xcb, 0xf8, 0x41, 0x4f, 0xcd, 0x1e, 0x6b, 0x39, 0xa7, 0x2b, 0xe9,
-0x30, 0x16, 0x83, 0xd2, 0x0e, 0x47, 0x8f, 0xe3, 0xb1, 0xdf, 0xa2, 0x15, 0xdb, 0x5d, 0x30,
-0xc5, 0x1a, 0xab, 0x31, 0x99, 0xf3, 0xfa, 0xb2, 0x86, 0x69, 0xad, 0x7a, 0xe8, 0xa7, 0x18,
-0x6a, 0xcc, 0xc8, 0x65, 0x23, 0x87, 0xa8, 0x5f, 0xf5, 0x21, 0x59, 0x75, 0x09, 0x71, 0x45,
-0x55, 0x25, 0x4b, 0xda, 0xa1, 0xc3, 0xf7, 0x41, 0xab, 0x59, 0xd9, 0x74, 0x12, 0x55, 0x5f,
-0xbc, 0xaf, 0xd9, 0xfd, 0xb0, 0x1e, 0xa3, 0x0f, 0xff, 0xde, 0x11, 0x16, 0x6a, 0xae, 0x0e,
-0xe1, 0x5d, 0x3c, 0x10, 0x43, 0x9a, 0xa1, 0x0b, 0x24, 0x8f, 0x0d, 0x7f, 0x0b, 0x5e, 0x4c,
-0x42, 0xa4, 0x84, 0x2c, 0x40, 0xd0, 0x55, 0x39, 0xe6, 0x4b, 0xf8, 0x9b, 0x2f, 0xdc, 0x28,
-0xff, 0xfa, 0xb5, 0x85, 0x19, 0xe5, 0x28, 0xa1, 0x77, 0xaa, 0x73, 0xf3, 0x03, 0xc7, 0x62,
-0xa6, 0x91, 0x18, 0xc9, 0xb0, 0xcd, 0x05, 0xdc, 0xca, 0x81, 0x26, 0x1a, 0x47, 0x40, 0xda,
-0x36, 0x7d, 0x6a, 0x53, 0xc8, 0x5a, 0x77, 0x5d, 0x19, 0xa4, 0x1b, 0x23, 0x83, 0xd0, 0xb2,
-0xaa, 0x0e, 0xbf, 0x77, 0x4e, 0x3a, 0x3b, 0x59, 0x00, 0x31, 0x0d, 0x02, 0x1b, 0x88, 0x7a,
-0xd4, 0xbd, 0x9d, 0xcc, 0x58, 0x04, 0x69, 0xf6, 0x3b, 0xca, 0x42, 0xe2, 0xfd, 0xc3, 0x3d,
-0x39, 0xc5, 0xd0, 0x71, 0xe4, 0xc8, 0xb7, 0x3e, 0x3f, 0xc8, 0xe9, 0xca, 0xc9, 0x3f, 0x04,
-0x4e, 0x1b, 0x79, 0xca, 0xa5, 0x61, 0xc2, 0xed, 0x1d, 0xa6, 0xda, 0x5a, 0xe9, 0x7f, 0x65,
-0x8c, 0xbe, 0x12, 0x6e, 0xa4, 0x5b, 0x33, 0x2f, 0x84, 0x28, 0x9c, 0x1c, 0x88, 0x2d, 0xff,
-0x07, 0xbf, 0xa6, 0xd7, 0x5a, 0x88, 0x86, 0xb0, 0x3f, 0xf6, 0x31, 0x5b, 0x11, 0x6d, 0xf5,
-0x58, 0xeb, 0x58, 0x02, 0x9e, 0xb5, 0x9a, 0xb1, 0xff, 0x25, 0x9d, 0x8b, 0x4f, 0xb6, 0x0a,
-0xf9, 0xea, 0x3e, 0x3f, 0x21, 0x09, 0x65, 0x21, 0x22, 0xfe, 0x3d, 0x4e, 0x11, 0x5b, 0x9e,
-0x5a, 0x59, 0x8b, 0xdd, 0xd8, 0xce, 0xd6, 0xd9, 0x59, 0xd2, 0x1e, 0xfd, 0xef, 0x0d, 0x1b,
-0xd9, 0x61, 0x7f, 0xd7, 0x2d, 0xad, 0x62, 0x09, 0xe5, 0x22, 0x63, 0xea, 0xc7, 0x31, 0xd9,
-0xa1, 0x38, 0x80, 0x5c, 0xa7, 0x32, 0x82, 0xec, 0x1b, 0xa2, 0x49, 0x5a, 0x06, 0xd2, 0x7c,
-0xc9, 0x96, 0x57, 0xbb, 0x17, 0x75, 0xfc, 0x7a, 0x8f, 0x0d, 0x77, 0xb5, 0x7a, 0x8e, 0x3e,
-0xf4, 0xba, 0x2f, 0x69, 0x13, 0x26, 0xd6, 0xd9, 0x21, 0x60, 0x2f, 0x21, 0x3e, 0x87, 0xee,
-0xfd, 0x87, 0x16, 0x0d, 0xc8, 0x08, 0x00, 0x25, 0x71, 0xac, 0x2c, 0x03, 0x2a, 0x37, 0x2d,
-0xb3, 0x34, 0x09, 0x91, 0xe3, 0x06, 0x2c, 0x38, 0x37, 0x95, 0x3b, 0x17, 0x7a, 0xaf, 0xac,
-0x99, 0x55, 0xab, 0x41, 0x39, 0x5f, 0x8e, 0xa6, 0x43, 0x80, 0x03, 0x88, 0x6f, 0x7d, 0xbd,
-0x5a, 0xb4, 0x2b, 0x32, 0x23, 0x5a, 0xa9, 0x31, 0x32, 0x39, 0x4c, 0x5b, 0xf4, 0x6b, 0xaf,
-0x66, 0x6f, 0x3c, 0x8e, 0x2d, 0x82, 0x97, 0x9f, 0x4a, 0x01, 0xdc, 0x99, 0x98, 0x00, 0xec,
-0x38, 0x7a, 0x79, 0x70, 0xa6, 0x85, 0xd6, 0x21, 0x63, 0x0d, 0x45, 0x9a, 0x2e, 0x5e, 0xa7,
-0xb1, 0xea, 0x66, 0x6a, 0xbc, 0x62, 0x2d, 0x7b, 0x7d, 0x85, 0xea, 0x95, 0x2f, 0xc0, 0xe8,
-0x6f, 0x35, 0xa0, 0x3a, 0x02, 0x25, 0xbc, 0xb2, 0x5f, 0x5c, 0x43, 0x96, 0xcc, 0x26, 0xd2,
-0x16, 0xb4, 0x96, 0x73, 0xd7, 0x13, 0xc7, 0xae, 0x53, 0x15, 0x31, 0x89, 0x68, 0x66, 0x6d,
-0x2c, 0x92, 0x1f, 0xcc, 0x5b, 0xa7, 0x8f, 0x5d, 0xbb, 0xc9, 0xdb, 0xe8, 0x3b, 0x9d, 0x61,
-0x74, 0x8b, 0x05, 0xa1, 0x58, 0x52, 0x68, 0xee, 0x3d, 0x39, 0x79, 0xa0, 0x9b, 0xdd, 0xe1,
-0x55, 0xc9, 0x60, 0xeb, 0xad, 0xb8, 0x5b, 0xc2, 0x5a, 0xb5, 0x2c, 0x18, 0x55, 0xa9, 0x50,
-0xc3, 0xf6, 0x72, 0x5f, 0xcc, 0xe2, 0xf4, 0x55, 0xb5, 0xd6, 0xb5, 0x4a, 0x99, 0xa5, 0x28,
-0x74, 0x97, 0x18, 0xe8, 0xc0, 0x84, 0x89, 0x50, 0x03, 0x86, 0x4d, 0x1a, 0xb7, 0x09, 0x90,
-0xa2, 0x01, 0x04, 0xbb, 0x73, 0x62, 0xcb, 0x97, 0x22, 0x70, 0x5d, 0x52, 0x41, 0x8e, 0xd9,
-0x90, 0x15, 0xaa, 0xab, 0x0a, 0x31, 0x65, 0xb4, 0xda, 0xd0, 0xee, 0x24, 0xc9, 0x41, 0x91,
-0x1e, 0xbc, 0x46, 0x70, 0x40, 0x9d, 0xda, 0x0e, 0x2a, 0xe4, 0xb2, 0x4c, 0x9f, 0xf2, 0xfc,
-0xf3, 0x84, 0x17, 0x44, 0x1e, 0xd7, 0xca, 0x23, 0x1f, 0x3f, 0x5a, 0x22, 0x3d, 0xaf, 0x9b,
-0x2d, 0xfc, 0x41, 0xad, 0x26, 0xb4, 0x45, 0x67, 0x0b, 0x80, 0x0e, 0xf9, 0x61, 0x37, 0xec,
-0x3b, 0xf4, 0x4b, 0x14, 0xdf, 0x5a, 0x0c, 0x3a, 0x50, 0x0b, 0x14, 0x0c, 0x72, 0xae, 0xc6,
-0xc5, 0xec, 0x35, 0x53, 0x2d, 0x59, 0xed, 0x91, 0x74, 0xe2, 0xc4, 0xc8, 0xf2, 0x25, 0x6b,
-0x97, 0x6f, 0xc9, 0x76, 0xce, 0xa9, 0xb1, 0x99, 0x8f, 0x5a, 0x92, 0x3b, 0xc4, 0x8d, 0x54,
-0x50, 0x40, 0x72, 0xd6, 0x90, 0x83, 0xfc, 0xe5, 0x49, 0x8b, 0x17, 0xf5, 0xfd, 0x6b, 0x8d,
-0x32, 0x02, 0xe9, 0x0a, 0xfe, 0xbf, 0x00, 0x6b, 0xa3, 0xad, 0x5f, 0x09, 0x4b, 0x97, 0x2b,
-0x00, 0x58, 0x65, 0x2e, 0x07, 0x49, 0x0a, 0x3b, 0x6b, 0x2e, 0x50, 0x6c, 0x1d, 0xac, 0xb7,
-0x6a, 0x26, 0xd8, 0x13, 0xa4, 0xca, 0x16, 0xae, 0xab, 0x93, 0xb9, 0x1c, 0x1c, 0xb4, 0x47,
-0x6a, 0x38, 0x36, 0x17, 0x27, 0xc9, 0x7f, 0xc7, 0x64, 0xcb, 0x89, 0x58, 0xc5, 0x61, 0xc2,
-0xc6, 0xea, 0x15, 0x0b, 0x34, 0x0c, 0x5d, 0x61, 0x76, 0x6e, 0x2b, 0x62, 0x40, 0x92, 0xa3,
-0x6c, 0xef, 0xf4, 0xe4, 0xc3, 0xa1, 0xa8, 0xf5, 0x94, 0x79, 0x0d, 0xd1, 0x3d, 0xcb, 0x3d,
-0x40, 0xb6, 0xd0, 0xf0, 0x10, 0x54, 0xd8, 0x47, 0x25, 0x51, 0xc5, 0x41, 0x79, 0x00, 0xe5,
-0xa0, 0x72, 0xde, 0xbb, 0x3b, 0x62, 0x17, 0xf6, 0xbc, 0x5d, 0x00, 0x76, 0x2e, 0xa7, 0x3b,
-0xb6, 0xf1, 0x98, 0x72, 0x59, 0x2a, 0x73, 0xb0, 0x21, 0xd6, 0x49, 0xe0, 0xc0, 0xd5, 0xeb,
-0x02, 0x7d, 0x4b, 0x41, 0x28, 0x70, 0x2d, 0xec, 0x2b, 0x71, 0x1f, 0x0b, 0xb9, 0x71, 0x63,
-0x06, 0xe6, 0xbc, 0x60, 0xbb, 0xf4, 0x9a, 0x62, 0x43, 0x09, 0x18, 0x4e, 0x93, 0x06, 0x4d,
-0x76, 0xfa, 0x7f, 0xbd, 0x02, 0xe4, 0x50, 0x91, 0x12, 0xe5, 0x86, 0xff, 0x64, 0x1e, 0xaf,
-0x7e, 0xb3, 0xb2, 0xde, 0x89, 0xc1, 0xa2, 0x6f, 0x40, 0x7b, 0x41, 0x51, 0x63, 0xea, 0x25,
-0xd1, 0x97, 0x57, 0x92, 0xa8, 0x45, 0xa1, 0xa5, 0x45, 0x21, 0x43, 0x7f, 0x83, 0x15, 0x29,
-0xd0, 0x30, 0x53, 0x32, 0xb4, 0x5a, 0x17, 0x96, 0xbc, 0xc2, 0x68, 0xa9, 0xb7, 0xaf, 0xac,
-0xdf, 0xf1, 0xe3, 0x89, 0xba, 0x24, 0x79, 0x54, 0xc6, 0x14, 0x07, 0x1c, 0x1e, 0x0d, 0x3a,
-0x6b, 0xe5, 0x3d, 0x4e, 0x10, 0x60, 0x96, 0xec, 0x6c, 0xda, 0x47, 0xae, 0x03, 0x25, 0x39,
-0x1d, 0x74, 0xc8, 0xac, 0x6a, 0xf2, 0x6b, 0x05, 0x2a, 0x9a, 0xe7, 0xe8, 0x92, 0xd6, 0xc2,
-0x6d, 0xfa, 0xe8, 0xa7, 0x9d, 0x5f, 0x48, 0xc9, 0x75, 0xf1, 0x66, 0x6a, 0xdb, 0x5d, 0x9a,
-0xcd, 0x27, 0xdd, 0xb9, 0x24, 0x04, 0x9c, 0x18, 0xc2, 0x6d, 0x0c, 0x91, 0x34, 0x48, 0x42,
-0x6f, 0xe9, 0x59, 0x70, 0xc4, 0x7e, 0x81, 0x0e, 0x32, 0x0a, 0x93, 0x48, 0xb0, 0xc0, 0x15,
-0x9e, 0x05, 0xac, 0x36, 0x16, 0xcb, 0x59, 0x65, 0xa0, 0x83, 0xdf, 0x3e, 0xda, 0xfb, 0x1d,
-0x1a, 0xdb, 0x65, 0xec, 0x9a, 0xc6, 0xc3, 0x8e, 0x3c, 0x45, 0xfd, 0xc8, 0xf5, 0x1c, 0x6a,
-0x67, 0x0d, 0x8f, 0x99, 0x7d, 0x30, 0x21, 0x8c, 0xea, 0x22, 0x87, 0x65, 0xc9, 0xb2, 0x4c,
-0xe4, 0x1b, 0x46, 0xba, 0x54, 0xbd, 0x7c, 0xca, 0xd5, 0x8f, 0x5b, 0xa5, 0x01, 0x04, 0xd8,
-0x0a, 0x16, 0xbf, 0xb9, 0x50, 0x2e, 0x37, 0x2f, 0x64, 0xf3, 0x70, 0x11, 0x02, 0x05, 0x31,
-0x9b, 0xa0, 0xb2, 0x01, 0x5e, 0x4f, 0x19, 0xc9, 0xd4, 0xea, 0xa1, 0x79, 0x54, 0x53, 0xa7,
-0xde, 0x2f, 0x49, 0xd3, 0xd1, 0x63, 0xb5, 0x03, 0x15, 0x4e, 0xbf, 0x04, 0xb3, 0x26, 0x8b,
-0x20, 0xb2, 0x45, 0xcf, 0xcd, 0x5b, 0x82, 0x32, 0x88, 0x61, 0xa7, 0xa8, 0xb2, 0xa0, 0x72,
-0x96, 0xc0, 0xdb, 0x2b, 0xe2, 0x5f, 0xba, 0xe3, 0xf5, 0x8a, 0xde, 0xf1, 0x18, 0x01, 0x16,
-0x40, 0xd9, 0x86, 0x12, 0x09, 0x18, 0x1b, 0x05, 0x0c, 0xb1, 0xb5, 0x47, 0xe2, 0x43, 0xab,
-0xfe, 0x92, 0x63, 0x7e, 0x95, 0x2b, 0xf0, 0xaf, 0xe1, 0xf1, 0xc3, 0x4a, 0xff, 0x2b, 0x09,
-0xbb, 0x4a, 0x0e, 0x9a, 0xc4, 0xd8, 0x64, 0x7d, 0x83, 0xa0, 0x4f, 0x44, 0xdb, 0xc4, 0xa8,
-0x58, 0xef, 0xfc, 0x9e, 0x77, 0xf9, 0xa6, 0x8f, 0x58, 0x8b, 0x12, 0xf4, 0xe9, 0x81, 0x12,
-0x47, 0x51, 0x41, 0x83, 0xef, 0xf6, 0x73, 0xbc, 0x8e, 0x0f, 0x4c, 0x8f, 0x4e, 0x69, 0x90,
-0x77, 0x29, 0x5d, 0x92, 0xb0, 0x6d, 0x06, 0x67, 0x29, 0x60, 0xbd, 0x4b, 0x17, 0xc8, 0x89,
-0x69, 0x28, 0x29, 0xd6, 0x78, 0xcb, 0x11, 0x4c, 0xba, 0x8b, 0x68, 0xae, 0x7e, 0x9f, 0xef,
-0x95, 0xda, 0xe2, 0x9e, 0x7f, 0xe9, 0x55, 0xe5, 0xe1, 0xe2, 0xb7, 0xe6, 0x5f, 0xbb, 0x2c,
-0xa2, 0xe6, 0xee, 0xc7, 0x0a, 0x60, 0xa9, 0xd1, 0x80, 0xdf, 0x7f, 0xd6, 0x97, 0xab, 0x1d,
-0x22, 0x25, 0xfc, 0x79, 0x23, 0xe0, 0xae, 0xc5, 0xef, 0x16, 0xa4, 0xa1, 0x0f, 0x92, 0xa9,
-0xc7, 0xe3, 0x3a, 0x55, 0xdf, 0x62, 0x49, 0xd9, 0xf5, 0x84, 0x49, 0xc5, 0x90, 0x34, 0xd3,
-0xe1, 0xac, 0x99, 0x21, 0xb1, 0x02, 0x76, 0x4a, 0xfa, 0xd4, 0xbb, 0xa4, 0x9c, 0xa2, 0xe2,
-0xcb, 0x3d, 0x3b, 0x14, 0x75, 0x60, 0xd1, 0x02, 0xb4, 0xa3, 0xb4, 0x72, 0x06, 0xf9, 0x19,
-0x9c, 0xe2, 0xe4, 0xa7, 0x0f, 0x25, 0x88, 0xc6, 0x86, 0xd6, 0x8c, 0x74, 0x4e, 0x6e, 0xfc,
-0xa8, 0x48, 0x9e, 0xa7, 0x9d, 0x1a, 0x4b, 0x37, 0x09, 0xc8, 0xb0, 0x10, 0xbe, 0x6f, 0xfe,
-0xa3, 0xc4, 0x7a, 0xb5, 0x3d, 0xe8, 0x30, 0xf1, 0x0d, 0xa0, 0xb2, 0x44, 0xfc, 0x9b, 0x8c,
-0xf8, 0x61, 0xed, 0x81, 0xd1, 0x62, 0x11, 0xb4, 0xe1, 0xd5, 0x39, 0x52, 0x89, 0xd3, 0xa8,
-0x49, 0x31, 0xdf, 0xb6, 0xf9, 0x91, 0xf4, 0x1c, 0x9d, 0x09, 0x95, 0x40, 0x56, 0xe7, 0xe3,
-0xcd, 0x5c, 0x92, 0xc1, 0x1d, 0x6b, 0xe9, 0x78, 0x6f, 0x8e, 0x94, 0x42, 0x66, 0xa2, 0xaa,
-0xd3, 0xc8, 0x2e, 0xe3, 0xf6, 0x07, 0x72, 0x0b, 0x6b, 0x1e, 0x7b, 0xb9, 0x7c, 0xe0, 0xa0,
-0xbc, 0xd9, 0x25, 0xdf, 0x87, 0xa8, 0x5f, 0x9c, 0xcc, 0xf0, 0xdb, 0x42, 0x8e, 0x07, 0x31,
-0x13, 0x01, 0x66, 0x32, 0xd1, 0xb8, 0xd6, 0xe3, 0x5e, 0x12, 0x76, 0x61, 0xd3, 0x38, 0x89,
-0xe6, 0x17, 0x6f, 0xa5, 0xf2, 0x71, 0x0e, 0xa5, 0xe2, 0x88, 0x30, 0xbb, 0xbe, 0x8a, 0xea,
-0xc7, 0x62, 0xc4, 0xcf, 0xb8, 0xcd, 0x33, 0x8d, 0x3d, 0x3e, 0xb5, 0x60, 0x3a, 0x03, 0x92,
-0xe4, 0x6d, 0x1b, 0xe0, 0xb4, 0x84, 0x08, 0x55, 0x88, 0xa7, 0x3a, 0xb9, 0x3d, 0x43, 0xc3,
-0xc0, 0xfa, 0x07, 0x6a, 0xca, 0x94, 0xad, 0x99, 0x55, 0xf1, 0xf1, 0xc0, 0x23, 0x87, 0x1d,
-0x3d, 0x1c, 0xd1, 0x66, 0xa0, 0x57, 0x10, 0x52, 0xa2, 0x7f, 0xbe, 0xf9, 0x88, 0xb6, 0x02,
-0xbf, 0x08, 0x23, 0xa9, 0x0c, 0x63, 0x17, 0x2a, 0xae, 0xf5, 0xf7, 0xb7, 0x21, 0x83, 0x92,
-0x31, 0x23, 0x0d, 0x20, 0xc3, 0xc2, 0x05, 0x21, 0x62, 0x8e, 0x45, 0xe8, 0x14, 0xc1, 0xda,
-0x75, 0xb8, 0xf8, 0x92, 0x01, 0xd0, 0x5d, 0x18, 0x9f, 0x99, 0x11, 0x19, 0xf5, 0x35, 0xe8,
-0x7f, 0x20, 0x88, 0x8c, 0x05, 0x75, 0xf5, 0xd7, 0x40, 0x17, 0xbb, 0x1e, 0x36, 0x52, 0xd9,
-0xa4, 0x9c, 0xc2, 0x9d, 0x42, 0x81, 0xd8, 0xc7, 0x8a, 0xe7, 0x4c, 0x81, 0xe0, 0xb7, 0x57,
-0xed, 0x48, 0x8b, 0xf0, 0x97, 0x15, 0x61, 0xd9, 0x2c, 0x7c, 0x45, 0xaf, 0xc2, 0xcd, 0xfc,
-0xaa, 0x13, 0xad, 0x59, 0xcc, 0xb2, 0xb2, 0x6e, 0xdd, 0x63, 0x9c, 0x32, 0x0f, 0xec, 0x83,
-0xbe, 0x78, 0xac, 0x91, 0x44, 0x1a, 0x1f, 0xea, 0xfd, 0x5d, 0x8e, 0xb4, 0xc0, 0x84, 0xd4,
-0xac, 0xb4, 0x87, 0x5f, 0xac, 0xef, 0xdf, 0xcd, 0x12, 0x56, 0xc8, 0xcd, 0xfe, 0xc5, 0xda,
-0xd3, 0xc1, 0x69, 0xf3, 0x61, 0x05, 0xea, 0x25, 0xe2, 0x12, 0x05, 0x8f, 0x39, 0x08, 0x08,
-0x7c, 0x37, 0xb6, 0x7e, 0x5b, 0xd8, 0xb1, 0x0e, 0xf2, 0xdb, 0x4b, 0xf1, 0xad, 0x90, 0x01,
-0x57, 0xcd, 0xa0, 0xb4, 0x52, 0xe8, 0xf3, 0xd7, 0x8a, 0xbd, 0x4f, 0x9f, 0x21, 0x40, 0x72,
-0xa4, 0xfc, 0x0b, 0x01, 0x2b, 0x2f, 0xb6, 0x4c, 0x95, 0x2d, 0x35, 0x33, 0x41, 0x6b, 0xa0,
-0x93, 0xe7, 0x2c, 0xf2, 0xd3, 0x72, 0x8b, 0xf4, 0x4f, 0x15, 0x3c, 0xaf, 0xd6, 0x12, 0xde,
-0x3f, 0x83, 0x3f, 0xff, 0xf8, 0x7f, 0xf6, 0xcc, 0xa6, 0x7f, 0xc9, 0x9a, 0x6e, 0x1f, 0xc1,
-0x0c, 0xfb, 0xee, 0x9c, 0xe7, 0xaf, 0xc9, 0x26, 0x54, 0xef, 0xb0, 0x39, 0xef, 0xb2, 0xe9,
-0x23, 0xc4, 0xef, 0xd1, 0xa1, 0xa4, 0x25, 0x24, 0x6f, 0x8d, 0x6a, 0xe5, 0x8a, 0x32, 0x3a,
-0xaf, 0xfc, 0xda, 0xce, 0x18, 0x25, 0x42, 0x07, 0x4d, 0x45, 0x8b, 0xdf, 0x85, 0xcf, 0x55,
-0xb2, 0x24, 0xfe, 0x9c, 0x69, 0x74, 0xa7, 0x6e, 0xa0, 0xce, 0xc0, 0x39, 0xf4, 0x86, 0xc6,
-0x8d, 0xae, 0xb9, 0x48, 0x64, 0x13, 0x0b, 0x40, 0x81, 0xa2, 0xc9, 0xa8, 0x85, 0x51, 0xee,
-0x9f, 0xcf, 0xa2, 0x8c, 0x19, 0x52, 0x48, 0xe2, 0xc1, 0xa8, 0x58, 0xb4, 0x10, 0x24, 0x06,
-0x58, 0x51, 0xfc, 0xb9, 0x12, 0xec, 0xfd, 0x73, 0xb4, 0x6d, 0x84, 0xfa, 0x06, 0x8b, 0x05,
-0x0b, 0x2d, 0xd6, 0xd6, 0x1f, 0x29, 0x82, 0x9f, 0x19, 0x12, 0x1e, 0xb2, 0x04, 0x8f, 0x7f,
-0x4d, 0xbd, 0x30, 0x2e, 0xe3, 0xe0, 0x88, 0x29, 0xc5, 0x93, 0xd6, 0x6c, 0x1f, 0x29, 0x45,
-0x91, 0xa7, 0x58, 0xcd, 0x05, 0x17, 0xd6, 0x6d, 0xb3, 0xca, 0x66, 0xcc, 0x3c, 0x4a, 0x74,
-0xfd, 0x08, 0x10, 0xa6, 0x99, 0x92, 0x10, 0xd2, 0x85, 0xab, 0x6e, 0x1d, 0x0e, 0x8b, 0x26,
-0x46, 0xd1, 0x6c, 0x84, 0xc0, 0x26, 0x43, 0x59, 0x68, 0xf0, 0x13, 0x1d, 0xfb, 0xe3, 0xd1,
-0xd2, 0xb4, 0x71, 0x9e, 0xf2, 0x59, 0x6a, 0x33, 0x29, 0x79, 0xd2, 0xd7, 0x26, 0xf1, 0xae,
-0x78, 0x9e, 0x1f, 0x0f, 0x3f, 0xe3, 0xe8, 0xd0, 0x27, 0x78, 0x77, 0xf6, 0xac, 0x9c, 0x56,
-0x39, 0x73, 0x8a, 0x6b, 0x2f, 0x34, 0x78, 0xb1, 0x11, 0xdb, 0xa4, 0x5c, 0x80, 0x01, 0x71,
-0x6a, 0xc2, 0xd1, 0x2e, 0x5e, 0x76, 0x28, 0x70, 0x93, 0xae, 0x3e, 0x78, 0xb0, 0x1f, 0x0f,
-0xda, 0xbf, 0xfb, 0x8a, 0x67, 0x65, 0x4f, 0x91, 0xed, 0x49, 0x75, 0x78, 0x62, 0xa2, 0x93,
-0xb5, 0x70, 0x7f, 0x4d, 0x08, 0x4e, 0x79, 0x61, 0xa8, 0x5f, 0x7f, 0xb4, 0x65, 0x9f, 0x91,
-0x54, 0x3a, 0xe8, 0x50, 0x33, 0xd3, 0xd5, 0x8a, 0x7c, 0xf3, 0x9e, 0x8b, 0x77, 0x7b, 0xc6,
-0xc6, 0x0c, 0x45, 0x95, 0x1f, 0xb0, 0xd0, 0x0b, 0x27, 0x4a, 0xfd, 0xc7, 0xf7, 0x0d, 0x5a,
-0x43, 0xc9, 0x7d, 0x35, 0xb0, 0x7d, 0xc4, 0x9c, 0x57, 0x1e, 0x76, 0x0d, 0xf1, 0x95, 0x30,
-0x71, 0xcc, 0xb3, 0x66, 0x3b, 0x63, 0xa8, 0x6c, 0xa3, 0x43, 0xa0, 0x24, 0xcc, 0xb7, 0x53,
-0xfe, 0xfe, 0xbc, 0x6e, 0x60, 0x89, 0xaf, 0x16, 0x21, 0xc8, 0x91, 0x6a, 0x89, 0xce, 0x80,
-0x2c, 0xf1, 0x59, 0xce, 0xc3, 0x60, 0x61, 0x3b, 0x0b, 0x19, 0xfe, 0x99, 0xac, 0x65, 0x90,
-0x15, 0x12, 0x05, 0xac, 0x7e, 0xff, 0x98, 0x7b, 0x66, 0x64, 0x0e, 0x4b, 0x5b, 0xaa, 0x8d,
-0x3b, 0xd2, 0x56, 0xcf, 0x99, 0x39, 0xee, 0x22, 0x81, 0xd0, 0x60, 0x06, 0x66, 0x20, 0x81,
-0x48, 0x3c, 0x6f, 0x3a, 0x77, 0xba, 0xcb, 0x52, 0xac, 0x79, 0x56, 0xaf, 0xe9, 0x16, 0x17,
-0x0a, 0xa3, 0x82, 0x08, 0xd5, 0x3c, 0x97, 0xcb, 0x09, 0xff, 0x7f, 0xf9, 0x4f, 0x60, 0x05,
-0xb9, 0x53, 0x26, 0xaa, 0xb8, 0x50, 0xaa, 0x19, 0x25, 0xae, 0x5f, 0xea, 0x8a, 0xd0, 0x89,
-0x12, 0x80, 0x43, 0x50, 0x24, 0x12, 0x21, 0x14, 0xcd, 0x77, 0xeb, 0x21, 0xcc, 0x5c, 0x09,
-0x64, 0xf3, 0xc7, 0xcb, 0xc5, 0x4b, 0xc3, 0xe7, 0xed, 0xe7, 0x86, 0x2c, 0x1d, 0x8e, 0x19,
-0x52, 0x9b, 0x2a, 0x0c, 0x18, 0x72, 0x0b, 0x1e, 0x1b, 0xb0, 0x0f, 0x42, 0x99, 0x04, 0xae,
-0xd5, 0xb7, 0x89, 0x1a, 0xb9, 0x4f, 0xd6, 0xaf, 0xf3, 0xc9, 0x93, 0x6f, 0xb0, 0x60, 0x83,
-0x6e, 0x6b, 0xd1, 0x5f, 0x3f, 0x1a, 0x83, 0x1e, 0x24, 0x00, 0x87, 0xb5, 0x3e, 0xdb, 0xf9,
-0x4d, 0xa7, 0x16, 0x2e, 0x19, 0x5b, 0x8f, 0x1b, 0x0d, 0x47, 0x72, 0x42, 0xe9, 0x0a, 0x11,
-0x08, 0x2d, 0x88, 0x1c, 0xbc, 0xc7, 0xb4, 0xbe, 0x29, 0x4d, 0x03, 0x5e, 0xec, 0xdf, 0xf3,
-0x3d, 0x2f, 0xe8, 0x1d, 0x9a, 0xd2, 0xd1, 0xab, 0x41, 0x3d, 0x87, 0x11, 0x45, 0xb0, 0x0d,
-0x46, 0xf5, 0xe8, 0x95, 0x62, 0x1c, 0x68, 0xf7, 0xa6, 0x5b, 0x39, 0x4e, 0xbf, 0x47, 0xba,
-0x5d, 0x7f, 0xb7, 0x6a, 0xf4, 0xba, 0x1d, 0x69, 0xf6, 0xa4, 0xe7, 0xe4, 0x6b, 0x3b, 0x0d,
-0x23, 0x16, 0x4a, 0xb2, 0x68, 0xf0, 0xb2, 0x0d, 0x09, 0x17, 0x6a, 0x63, 0x8c, 0x83, 0xd3,
-0xbd, 0x05, 0xc9, 0xf6, 0xf0, 0xa1, 0x31, 0x0b, 0x2c, 0xac, 0x83, 0xac, 0x80, 0x34, 0x32,
-0xb4, 0xec, 0xd0, 0xbc, 0x54, 0x82, 0x9a, 0xc8, 0xf6, 0xa0, 0x7d, 0xc6, 0x79, 0x73, 0xf4,
-0x20, 0x99, 0xf3, 0xb4, 0x01, 0xde, 0x91, 0x27, 0xf2, 0xc0, 0xdc, 0x81, 0x00, 0x4e, 0x7e,
-0x07, 0x99, 0xc8, 0x3a, 0x51, 0xbc, 0x38, 0xd6, 0x8a, 0xa2, 0xde, 0x3b, 0x6a, 0x8c, 0x1a,
-0x7c, 0x81, 0x0f, 0x3a, 0x1f, 0xe4, 0x05, 0x7b, 0x20, 0x35, 0x6b, 0xa5, 0x6a, 0xa7, 0xe7,
-0xbc, 0x9c, 0x20, 0xec, 0x00, 0x15, 0xe2, 0x51, 0xaf, 0x77, 0xeb, 0x29, 0x3c, 0x7d, 0x2e,
-0x00, 0x5c, 0x81, 0x21, 0xfa, 0x35, 0x6f, 0x40, 0xef, 0xfb, 0xd1, 0x3f, 0xcc, 0x9d, 0x55,
-0x53, 0xfb, 0x5a, 0xa5, 0x56, 0x89, 0x0b, 0x52, 0xeb, 0x57, 0x73, 0x4f, 0x1b, 0x67, 0x24,
-0xcb, 0xb8, 0x6a, 0x10, 0x69, 0xd6, 0xfb, 0x52, 0x40, 0xff, 0x20, 0xa5, 0xf3, 0x72, 0xe1,
-0x3d, 0xa4, 0x8c, 0x81, 0x66, 0x16, 0x0d, 0x5d, 0xad, 0xa8, 0x50, 0x25, 0x78, 0x31, 0x77,
-0x0c, 0x57, 0xe4, 0xe9, 0x15, 0x2d, 0xdb, 0x07, 0x87, 0xc8, 0xb0, 0x43, 0xde, 0xfc, 0xfe,
-0xa9, 0xeb, 0xf5, 0xb0, 0xd3, 0x7b, 0xe9, 0x1f, 0x6e, 0xca, 0xe4, 0x03, 0x95, 0xc5, 0xd1,
-0x59, 0x72, 0x63, 0xf0, 0x86, 0x54, 0xe8, 0x16, 0x62, 0x0b, 0x35, 0x29, 0xc2, 0x68, 0xd0,
-0xd6, 0x3e, 0x90, 0x60, 0x57, 0x1d, 0xc9, 0xed, 0x3f, 0xed, 0xb0, 0x2f, 0x7e, 0x97, 0x02,
-0x51, 0xec, 0xee, 0x6f, 0x82, 0x74, 0x76, 0x7f, 0xfb, 0xd6, 0xc4, 0xc3, 0xdd, 0xe8, 0xb1,
-0x60, 0xfc, 0xc6, 0xb9, 0x0d, 0x6a, 0x33, 0x78, 0xc6, 0xc1, 0xbf, 0x86, 0x2c, 0x50, 0xcc,
-0x9a, 0x70, 0x8e, 0x7b, 0xec, 0xab, 0x95, 0xac, 0x53, 0xa0, 0x4b, 0x07, 0x88, 0xaf, 0x42,
-0xed, 0x19, 0x8d, 0xf6, 0x32, 0x17, 0x48, 0x47, 0x1d, 0x41, 0x6f, 0xfe, 0x2e, 0xa7, 0x8f,
-0x4b, 0xa0, 0x51, 0xf3, 0xbf, 0x02, 0x0a, 0x48, 0x58, 0xf7, 0xa1, 0x6d, 0xea, 0xa5, 0x13,
-0x5a, 0x5b, 0xea, 0x0c, 0x9e, 0x52, 0x4f, 0x9e, 0xb9, 0x71, 0x7f, 0x23, 0x83, 0xda, 0x1b,
-0x86, 0x9a, 0x41, 0x29, 0xda, 0x70, 0xe7, 0x64, 0xa1, 0x7b, 0xd5, 0x0a, 0x22, 0x0d, 0x5c,
-0x40, 0xc4, 0x81, 0x07, 0x25, 0x35, 0x4a, 0x1c, 0x10, 0xdb, 0x45, 0x0a, 0xff, 0x36, 0xd4,
-0xe0, 0xeb, 0x5f, 0x68, 0xd6, 0x67, 0xc6, 0xd0, 0x8b, 0x76, 0x1a, 0x7d, 0x59, 0x42, 0xa1,
-0xcb, 0x96, 0x4d, 0x84, 0x09, 0x9a, 0x3d, 0xe0, 0x52, 0x85, 0x6e, 0x48, 0x90, 0x85, 0x2a,
-0x63, 0xb2, 0x69, 0xd2, 0x00, 0x43, 0x31, 0x37, 0xb3, 0x52, 0xaf, 0x62, 0xfa, 0xc1, 0xe0,
-0x03, 0xfb, 0x62, 0xaa, 0x88, 0xc9, 0xb2, 0x2c, 0xd5, 0xa8, 0xf5, 0xa5, 0x4c, 0x12, 0x59,
-0x4e, 0x06, 0x5e, 0x9b, 0x15, 0x66, 0x11, 0xb2, 0x27, 0x92, 0xdc, 0x98, 0x59, 0xde, 0xdf,
-0xfa, 0x9a, 0x32, 0x2e, 0xc0, 0x5d, 0x3c, 0x33, 0x41, 0x6d, 0xaf, 0xb2, 0x25, 0x23, 0x14,
-0xa5, 0x7b, 0xc7, 0x9b, 0x68, 0xf3, 0xda, 0xeb, 0xe3, 0xa9, 0xe2, 0x6f, 0x0e, 0x1d, 0x1c,
-0xba, 0x55, 0xb6, 0x34, 0x6a, 0x93, 0x1f, 0x1f, 0xb8, 0x34, 0xc8, 0x84, 0x08, 0xb1, 0x6b,
-0x6a, 0x28, 0x74, 0x74, 0xe5, 0xeb, 0x75, 0xe9, 0x7c, 0xd8, 0xba, 0xd8, 0x42, 0xa5, 0xee,
-0x1f, 0x80, 0xd9, 0x96, 0xb2, 0x2e, 0xe7, 0xbf, 0xba, 0xeb, 0xd1, 0x69, 0xbb, 0x8f, 0xfd,
-0x5a, 0x63, 0x8f, 0x39, 0x7f, 0xdf, 0x1d, 0x37, 0xd2, 0x18, 0x35, 0x9d, 0xb6, 0xcc, 0xe4,
-0x27, 0x81, 0x89, 0x38, 0x38, 0x68, 0x33, 0xe7, 0x78, 0xd8, 0x76, 0xf5, 0xee, 0xd0, 0x4a,
-0x07, 0x69, 0x19, 0x7a, 0xad, 0x18, 0xb1, 0x94, 0x61, 0x45, 0x53, 0xa2, 0x48, 0xda, 0x96,
-0x4a, 0xf9, 0xee, 0x94, 0x2a, 0x1f, 0x6e, 0x18, 0x3c, 0x92, 0x46, 0xd1, 0x1a, 0x28, 0x18,
-0x32, 0x1f, 0x3a, 0x45, 0xbe, 0x04, 0x35, 0x92, 0xe5, 0xa3, 0xcb, 0xb5, 0x2e, 0x32, 0x43,
-0xac, 0x65, 0x17, 0x89, 0x99, 0x15, 0x03, 0x9e, 0xb1, 0x23, 0x2f, 0xed, 0x76, 0x4d, 0xd8,
-0xac, 0x21, 0x40, 0xc4, 0x99, 0x4e, 0x65, 0x71, 0x2c, 0xb3, 0x45, 0xab, 0xfb, 0xe7, 0x72,
-0x39, 0x56, 0x30, 0x6d, 0xfb, 0x74, 0xeb, 0x99, 0xf3, 0xcd, 0x57, 0x5c, 0x78, 0x75, 0xe9,
-0x8d, 0xc3, 0xa2, 0xfb, 0x5d, 0xe0, 0x90, 0xc5, 0x55, 0xad, 0x91, 0x53, 0x4e, 0x9e, 0xbd,
-0x8c, 0x49, 0xa4, 0xa4, 0x69, 0x10, 0x0c, 0xc5, 0x76, 0xe9, 0x25, 0x86, 0x8d, 0x66, 0x23,
-0xa8, 0xdb, 0x5c, 0xe8, 0xd9, 0x30, 0xe1, 0x15, 0x7b, 0xc0, 0x99, 0x0f, 0x03, 0xec, 0xaa,
-0x12, 0xef, 0xce, 0xd4, 0xea, 0x55, 0x5c, 0x08, 0x86, 0xf4, 0xf4, 0xb0, 0x83, 0x42, 0x95,
-0x37, 0xb6, 0x38, 0xe0, 0x2b, 0x54, 0x89, 0xbd, 0x4e, 0x20, 0x9d, 0x3f, 0xc3, 0x4b, 0xb7,
-0xec, 0xfa, 0x5a, 0x14, 0x03, 0xcb, 0x64, 0xc8, 0x34, 0x4a, 0x4b, 0x6e, 0xf8, 0x6e, 0x56,
-0xf6, 0xdd, 0x5f, 0xa1, 0x24, 0xe2, 0xd4, 0xd0, 0x82, 0x64, 0x1f, 0x8e, 0x9b, 0xfa, 0xb4,
-0xcb, 0xdb, 0x0a, 0xe8, 0x15, 0xfc, 0x15, 0xab, 0x4b, 0x18, 0xbf, 0xd4, 0x42, 0x14, 0x48,
-0x82, 0x85, 0xdd, 0xeb, 0x49, 0x1b, 0x0b, 0x0b, 0x05, 0xe9, 0xb4, 0xa1, 0x33, 0x0a, 0x5d,
-0x0e, 0x6c, 0x4b, 0xc0, 0xd6, 0x6c, 0x7c, 0xfb, 0x69, 0x0b, 0x53, 0x19, 0xe4, 0xf3, 0x35,
-0xfc, 0xbe, 0xa1, 0x34, 0x02, 0x09, 0x4f, 0x74, 0x86, 0x92, 0xcd, 0x5d, 0x1a, 0xc1, 0x27,
-0x0c, 0xf2, 0xc5, 0xcf, 0xdd, 0x23, 0x93, 0x02, 0xbd, 0x41, 0x5e, 0x42, 0xf0, 0xa0, 0x9d,
-0x0c, 0x72, 0xc8, 0xec, 0x32, 0x0a, 0x8a, 0xfd, 0x3d, 0x5a, 0x41, 0x27, 0x0c, 0x88, 0x59,
-0xad, 0x94, 0x2e, 0xef, 0x5d, 0x8f, 0xc7, 0xdf, 0x66, 0xe4, 0xdd, 0x56, 0x6c, 0x7b, 0xca,
-0x55, 0x81, 0xae, 0xae, 0x5c, 0x1b, 0x1a, 0xab, 0xae, 0x99, 0x8d, 0xcc, 0x42, 0x97, 0x59,
-0xf4, 0x14, 0x3f, 0x75, 0xc6, 0xd1, 0x88, 0xba, 0xaa, 0x84, 0x4a, 0xd0, 0x34, 0x08, 0x3b,
-0x7d, 0xdb, 0x15, 0x06, 0xb0, 0x5c, 0xbd, 0x40, 0xf5, 0xa8, 0xec, 0xae, 0x36, 0x40, 0xdd,
-0x90, 0x1c, 0x3e, 0x0d, 0x7e, 0x73, 0xc7, 0xc2, 0xc5, 0x6a, 0xff, 0x52, 0x05, 0x7f, 0xbe,
-0xd0, 0x92, 0xfd, 0xb3, 0x6f, 0xff, 0x5d, 0xb7, 0x97, 0x64, 0x73, 0x7b, 0xca, 0xd1, 0x98,
-0x24, 0x6b, 0x0b, 0x01, 0x68, 0xdd, 0x27, 0x85, 0x85, 0xb5, 0x83, 0xc1, 0xe0, 0x50, 0x64,
-0xc7, 0xaf, 0xf1, 0xc6, 0x4d, 0xb1, 0xef, 0xc9, 0xb4, 0x0a, 0x6d, 0x65, 0xf3, 0x47, 0xcc,
-0xa3, 0x02, 0x21, 0x0c, 0xbe, 0x22, 0x29, 0x05, 0xcf, 0x5f, 0xe8, 0x94, 0x6c, 0xe5, 0xdc,
-0xc4, 0xdf, 0xbe, 0x3e, 0xa8, 0xb4, 0x18, 0xb0, 0x99, 0xb8, 0x6f, 0xff, 0x5d, 0xb9, 0xfd,
-0x3b, 0x5d, 0x16, 0xbf, 0x3e, 0xd8, 0xb3, 0xd8, 0x08, 0x34, 0xf6, 0x47, 0x35, 0x5b, 0x72,
-0x1a, 0x33, 0xad, 0x52, 0x5d, 0xb8, 0xd0, 0x77, 0xc6, 0xab, 0xba, 0x55, 0x09, 0x5f, 0x02,
-0xf8, 0xd4, 0x5f, 0x53, 0x06, 0x91, 0xcd, 0x74, 0x42, 0xae, 0x54, 0x91, 0x81, 0x62, 0x13,
-0x6f, 0xd8, 0xa9, 0x77, 0xc3, 0x6c, 0xcb, 0xf1, 0x29, 0x5a, 0xcc, 0xda, 0x35, 0xbd, 0x52,
-0x23, 0xbe, 0x59, 0xeb, 0x12, 0x6d, 0xb7, 0x53, 0xee, 0xfc, 0xb4, 0x1b, 0x13, 0x5e, 0xba,
-0x16, 0x7c, 0xc5, 0xf3, 0xe3, 0x6d, 0x07, 0x78, 0xf5, 0x2b, 0x21, 0x05, 0x88, 0x4c, 0xc0,
-0xa1, 0xe3, 0x36, 0x10, 0xf8, 0x1b, 0xd8, 0x17, 0xfb, 0x6a, 0x4e, 0xd8, 0xb3, 0x47, 0x2d,
-0x99, 0xbd, 0xbb, 0x5d, 0x37, 0x7d, 0xba, 0xf1, 0xe1, 0x7c, 0xc0, 0xc5, 0x54, 0x62, 0x7f,
-0xcf, 0x5a, 0x4a, 0x93, 0xcc, 0xf1, 0x1b, 0x34, 0xc8, 0xa6, 0x05, 0x4c, 0x55, 0x8b, 0x54,
-0x84, 0xd5, 0x77, 0xeb, 0xc0, 0x6d, 0x3a, 0x29, 0xbd, 0x75, 0x61, 0x09, 0x9a, 0x2c, 0xbb,
-0xf7, 0x18, 0x79, 0x34, 0x90, 0x24, 0xa5, 0x81, 0x70, 0x87, 0xc5, 0x02, 0x7c, 0xba, 0xd4,
-0x5e, 0x14, 0x8e, 0xe4, 0xed, 0xa2, 0x61, 0x6a, 0xb9, 0x6e, 0xb5, 0x4a, 0xb9, 0x01, 0x46,
-0xf4, 0xcf, 0xbc, 0x09, 0x2f, 0x27, 0x4b, 0xbd, 0x86, 0x7a, 0x10, 0xe1, 0xd4, 0xc8, 0xd9,
-0x20, 0x8d, 0x8a, 0x63, 0x00, 0x63, 0x44, 0xeb, 0x54, 0x0b, 0x75, 0x49, 0x10, 0xa2, 0xa7,
-0xad, 0xb9, 0xd1, 0x01, 0x80, 0x63, 0x25, 0xc8, 0x12, 0xa6, 0xce, 0x1e, 0xbe, 0xfe, 0x7e,
-0x5f, 0x3c, 0xdb, 0x34, 0xea, 0x37, 0xec, 0x3b, 0xd5, 0x28, 0xd2, 0x07, 0x8c, 0x9a, 0xb6,
-0xee, 0x5e, 0x3e, 0xdf, 0x1d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x5c, 0x1b, 0xb4, 0xea, 0x56,
-0x2e, 0xde, 0x1f, 0x9d, 0xb8, 0xd3, 0x24, 0xab, 0xd4, 0x2a, 0xd6, 0x2e, 0xde, 0x1f, 0x9d,
-0xb8, 0xf2, 0x66, 0x2f, 0xbd, 0xf8, 0x72, 0x66, 0x4e, 0x1e, 0x9f, 0x9d, 0xb8, 0xf2, 0x47,
-0x0c, 0x9a, 0xb6, 0xee, 0x3f, 0xfc, 0x7a, 0x57, 0x0d, 0x79, 0x70, 0x62, 0x27, 0xad, 0xb9,
-0xd1, 0x01, 0x61, 0x40, 0x02, 0x67, 0x2d, 0xd8, 0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xd7, 0x2c,
-0xbb, 0xf4, 0x4b, 0xf5, 0x49, 0xf1, 0x60, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0xf9, 0x51, 0x01,
-0x80, 0x63, 0x25, 0xa9, 0xb1, 0xe0, 0x42, 0xe7, 0x4c, 0x1a, 0x97, 0xac, 0xbb, 0xf4, 0x6a,
-0x37, 0xcd, 0x18, 0xb2, 0xe6, 0x2f, 0xdc, 0x1b, 0x95, 0xa8, 0xd2, 0x07, 0x6d, 0x58, 0x32,
-0xe6, 0x4e, 0x1e, 0x9f, 0xbc, 0xfa, 0x57, 0x0d, 0x79, 0x51, 0x20, 0xc2, 0x06, 0x6f, 0x5c,
-0x1b, 0x95, 0xa8, 0xb3, 0xc5, 0xe9, 0x31, 0xe0, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0x18, 0x93,
-0x85, 0x69, 0x31, 0xc1, 0xe1, 0x21, 0xc0, 0xe3, 0x44, 0x0a, 0x77, 0x6c, 0x5a, 0x17, 0x8d,
-0x98, 0x93, 0xa4, 0xab, 0xd4, 0x2a, 0xb7, 0xec, 0x5a, 0x17, 0xac, 0xbb, 0xf4, 0x4b, 0x14,
-0xaa, 0xb7, 0xec, 0x3b, 0xd5, 0x28, 0xb3, 0xc5, 0xe9, 0x31, 0xc1, 0x00, 0x82, 0x67, 0x4c,
-0xfb, 0x55, 0x28, 0xd2, 0x26, 0xaf, 0xbd, 0xd9, 0x11, 0x81, 0x61, 0x21, 0xa1, 0xa1, 0xc0,
-0x02, 0x86, 0x6f, 0x5c, 0x1b, 0xb4, 0xcb, 0x14, 0x8b, 0x94, 0xaa, 0xd6, 0x2e, 0xbf, 0xdd,
-0x19, 0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x7c, 0x5b, 0x15, 0x89, 0x90, 0x83, 0x84, 0x6b, 0x54,
-0x0b, 0x75, 0x68, 0x52, 0x07, 0x6d, 0x58, 0x32, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0xed, 0x58,
-0x32, 0xe6, 0x4e, 0xff, 0x7c, 0x7a, 0x76, 0x6e, 0x3f, 0xdd, 0x38, 0xd3, 0x05, 0x88, 0x92,
-0xa6, 0xaf, 0xdc, 0x1b, 0xb4, 0xcb, 0xf5, 0x68, 0x52, 0x07, 0x8c, 0x7b, 0x55, 0x09, 0x90,
-0x83, 0x84, 0x6b, 0x54, 0x2a, 0xb7, 0xec, 0x3b, 0xd5, 0x09, 0x90, 0xa2, 0xc6, 0x0e, 0x7f,
-0x7c, 0x7a, 0x57, 0x0d, 0x98, 0xb2, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0x0c, 0x7b, 0x74, 0x4b,
-0x14, 0x8b, 0x94, 0xaa, 0xb7, 0xcd, 0x18, 0x93, 0xa4, 0xca, 0x16, 0xae, 0xbf, 0xdd, 0x19,
-0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x5d, 0x19, 0x91, 0x81, 0x80, 0x63, 0x44, 0xeb, 0x35, 0xc9,
-0x10, 0x83, 0x65, 0x48, 0x12, 0xa6, 0xce, 0x1e, 0x9f, 0xbc, 0xdb, 0x15, 0x89, 0x71, 0x60,
-0x23, 0xc4, 0xeb, 0x54, 0x2a, 0xb7, 0xec, 0x5a, 0x36, 0xcf, 0x81, 0x10, 0xac, 0x74 };
+const uint8_t firmware_data[FIRMWARE_LENGTH] PROGMEM = {
+ 0x01, 0xe8, 0xba, 0x26, 0x0b, 0xb2, 0xbe, 0xfe, 0x7e, 0x5f, 0x3c, 0xdb, 0x15, 0xa8, 0xb3,
+ 0xe4, 0x2b, 0xb5, 0xe8, 0x53, 0x07, 0x6d, 0x3b, 0xd1, 0x20, 0xc2, 0x06, 0x6f, 0x3d, 0xd9,
+ 0x11, 0xa0, 0xc2, 0xe7, 0x2d, 0xb9, 0xd1, 0x20, 0xa3, 0xa5, 0xc8, 0xf3, 0x64, 0x4a, 0xf7,
+ 0x4d, 0x18, 0x93, 0xa4, 0xca, 0xf7, 0x6c, 0x5a, 0x36, 0xee, 0x5e, 0x3e, 0xfe, 0x7e, 0x7e,
+ 0x5f, 0x1d, 0x99, 0xb0, 0xc3, 0xe5, 0x29, 0xd3, 0x03, 0x65, 0x48, 0x12, 0x87, 0x6d, 0x58,
+ 0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xf2, 0x4f, 0xfd, 0x59, 0x11, 0x81, 0x61, 0x21, 0xc0, 0x02,
+ 0x86, 0x8e, 0x7f, 0x5d, 0x38, 0xf2, 0x47, 0x0c, 0x7b, 0x55, 0x28, 0xb3, 0xe4, 0x4a, 0x16,
+ 0xab, 0xbf, 0xdd, 0x38, 0xf2, 0x66, 0x4e, 0xff, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xa5, 0xc8,
+ 0x12, 0xa6, 0xaf, 0xdc, 0x3a, 0xd1, 0x41, 0x60, 0x75, 0x58, 0x24, 0x92, 0xd4, 0x72, 0x6c,
+ 0xe0, 0x2f, 0xfd, 0x23, 0x8d, 0x1c, 0x5b, 0xb2, 0x97, 0x36, 0x3d, 0x0b, 0xa2, 0x49, 0xb1,
+ 0x58, 0xf2, 0x1f, 0xc0, 0xcb, 0xf8, 0x41, 0x4f, 0xcd, 0x1e, 0x6b, 0x39, 0xa7, 0x2b, 0xe9,
+ 0x30, 0x16, 0x83, 0xd2, 0x0e, 0x47, 0x8f, 0xe3, 0xb1, 0xdf, 0xa2, 0x15, 0xdb, 0x5d, 0x30,
+ 0xc5, 0x1a, 0xab, 0x31, 0x99, 0xf3, 0xfa, 0xb2, 0x86, 0x69, 0xad, 0x7a, 0xe8, 0xa7, 0x18,
+ 0x6a, 0xcc, 0xc8, 0x65, 0x23, 0x87, 0xa8, 0x5f, 0xf5, 0x21, 0x59, 0x75, 0x09, 0x71, 0x45,
+ 0x55, 0x25, 0x4b, 0xda, 0xa1, 0xc3, 0xf7, 0x41, 0xab, 0x59, 0xd9, 0x74, 0x12, 0x55, 0x5f,
+ 0xbc, 0xaf, 0xd9, 0xfd, 0xb0, 0x1e, 0xa3, 0x0f, 0xff, 0xde, 0x11, 0x16, 0x6a, 0xae, 0x0e,
+ 0xe1, 0x5d, 0x3c, 0x10, 0x43, 0x9a, 0xa1, 0x0b, 0x24, 0x8f, 0x0d, 0x7f, 0x0b, 0x5e, 0x4c,
+ 0x42, 0xa4, 0x84, 0x2c, 0x40, 0xd0, 0x55, 0x39, 0xe6, 0x4b, 0xf8, 0x9b, 0x2f, 0xdc, 0x28,
+ 0xff, 0xfa, 0xb5, 0x85, 0x19, 0xe5, 0x28, 0xa1, 0x77, 0xaa, 0x73, 0xf3, 0x03, 0xc7, 0x62,
+ 0xa6, 0x91, 0x18, 0xc9, 0xb0, 0xcd, 0x05, 0xdc, 0xca, 0x81, 0x26, 0x1a, 0x47, 0x40, 0xda,
+ 0x36, 0x7d, 0x6a, 0x53, 0xc8, 0x5a, 0x77, 0x5d, 0x19, 0xa4, 0x1b, 0x23, 0x83, 0xd0, 0xb2,
+ 0xaa, 0x0e, 0xbf, 0x77, 0x4e, 0x3a, 0x3b, 0x59, 0x00, 0x31, 0x0d, 0x02, 0x1b, 0x88, 0x7a,
+ 0xd4, 0xbd, 0x9d, 0xcc, 0x58, 0x04, 0x69, 0xf6, 0x3b, 0xca, 0x42, 0xe2, 0xfd, 0xc3, 0x3d,
+ 0x39, 0xc5, 0xd0, 0x71, 0xe4, 0xc8, 0xb7, 0x3e, 0x3f, 0xc8, 0xe9, 0xca, 0xc9, 0x3f, 0x04,
+ 0x4e, 0x1b, 0x79, 0xca, 0xa5, 0x61, 0xc2, 0xed, 0x1d, 0xa6, 0xda, 0x5a, 0xe9, 0x7f, 0x65,
+ 0x8c, 0xbe, 0x12, 0x6e, 0xa4, 0x5b, 0x33, 0x2f, 0x84, 0x28, 0x9c, 0x1c, 0x88, 0x2d, 0xff,
+ 0x07, 0xbf, 0xa6, 0xd7, 0x5a, 0x88, 0x86, 0xb0, 0x3f, 0xf6, 0x31, 0x5b, 0x11, 0x6d, 0xf5,
+ 0x58, 0xeb, 0x58, 0x02, 0x9e, 0xb5, 0x9a, 0xb1, 0xff, 0x25, 0x9d, 0x8b, 0x4f, 0xb6, 0x0a,
+ 0xf9, 0xea, 0x3e, 0x3f, 0x21, 0x09, 0x65, 0x21, 0x22, 0xfe, 0x3d, 0x4e, 0x11, 0x5b, 0x9e,
+ 0x5a, 0x59, 0x8b, 0xdd, 0xd8, 0xce, 0xd6, 0xd9, 0x59, 0xd2, 0x1e, 0xfd, 0xef, 0x0d, 0x1b,
+ 0xd9, 0x61, 0x7f, 0xd7, 0x2d, 0xad, 0x62, 0x09, 0xe5, 0x22, 0x63, 0xea, 0xc7, 0x31, 0xd9,
+ 0xa1, 0x38, 0x80, 0x5c, 0xa7, 0x32, 0x82, 0xec, 0x1b, 0xa2, 0x49, 0x5a, 0x06, 0xd2, 0x7c,
+ 0xc9, 0x96, 0x57, 0xbb, 0x17, 0x75, 0xfc, 0x7a, 0x8f, 0x0d, 0x77, 0xb5, 0x7a, 0x8e, 0x3e,
+ 0xf4, 0xba, 0x2f, 0x69, 0x13, 0x26, 0xd6, 0xd9, 0x21, 0x60, 0x2f, 0x21, 0x3e, 0x87, 0xee,
+ 0xfd, 0x87, 0x16, 0x0d, 0xc8, 0x08, 0x00, 0x25, 0x71, 0xac, 0x2c, 0x03, 0x2a, 0x37, 0x2d,
+ 0xb3, 0x34, 0x09, 0x91, 0xe3, 0x06, 0x2c, 0x38, 0x37, 0x95, 0x3b, 0x17, 0x7a, 0xaf, 0xac,
+ 0x99, 0x55, 0xab, 0x41, 0x39, 0x5f, 0x8e, 0xa6, 0x43, 0x80, 0x03, 0x88, 0x6f, 0x7d, 0xbd,
+ 0x5a, 0xb4, 0x2b, 0x32, 0x23, 0x5a, 0xa9, 0x31, 0x32, 0x39, 0x4c, 0x5b, 0xf4, 0x6b, 0xaf,
+ 0x66, 0x6f, 0x3c, 0x8e, 0x2d, 0x82, 0x97, 0x9f, 0x4a, 0x01, 0xdc, 0x99, 0x98, 0x00, 0xec,
+ 0x38, 0x7a, 0x79, 0x70, 0xa6, 0x85, 0xd6, 0x21, 0x63, 0x0d, 0x45, 0x9a, 0x2e, 0x5e, 0xa7,
+ 0xb1, 0xea, 0x66, 0x6a, 0xbc, 0x62, 0x2d, 0x7b, 0x7d, 0x85, 0xea, 0x95, 0x2f, 0xc0, 0xe8,
+ 0x6f, 0x35, 0xa0, 0x3a, 0x02, 0x25, 0xbc, 0xb2, 0x5f, 0x5c, 0x43, 0x96, 0xcc, 0x26, 0xd2,
+ 0x16, 0xb4, 0x96, 0x73, 0xd7, 0x13, 0xc7, 0xae, 0x53, 0x15, 0x31, 0x89, 0x68, 0x66, 0x6d,
+ 0x2c, 0x92, 0x1f, 0xcc, 0x5b, 0xa7, 0x8f, 0x5d, 0xbb, 0xc9, 0xdb, 0xe8, 0x3b, 0x9d, 0x61,
+ 0x74, 0x8b, 0x05, 0xa1, 0x58, 0x52, 0x68, 0xee, 0x3d, 0x39, 0x79, 0xa0, 0x9b, 0xdd, 0xe1,
+ 0x55, 0xc9, 0x60, 0xeb, 0xad, 0xb8, 0x5b, 0xc2, 0x5a, 0xb5, 0x2c, 0x18, 0x55, 0xa9, 0x50,
+ 0xc3, 0xf6, 0x72, 0x5f, 0xcc, 0xe2, 0xf4, 0x55, 0xb5, 0xd6, 0xb5, 0x4a, 0x99, 0xa5, 0x28,
+ 0x74, 0x97, 0x18, 0xe8, 0xc0, 0x84, 0x89, 0x50, 0x03, 0x86, 0x4d, 0x1a, 0xb7, 0x09, 0x90,
+ 0xa2, 0x01, 0x04, 0xbb, 0x73, 0x62, 0xcb, 0x97, 0x22, 0x70, 0x5d, 0x52, 0x41, 0x8e, 0xd9,
+ 0x90, 0x15, 0xaa, 0xab, 0x0a, 0x31, 0x65, 0xb4, 0xda, 0xd0, 0xee, 0x24, 0xc9, 0x41, 0x91,
+ 0x1e, 0xbc, 0x46, 0x70, 0x40, 0x9d, 0xda, 0x0e, 0x2a, 0xe4, 0xb2, 0x4c, 0x9f, 0xf2, 0xfc,
+ 0xf3, 0x84, 0x17, 0x44, 0x1e, 0xd7, 0xca, 0x23, 0x1f, 0x3f, 0x5a, 0x22, 0x3d, 0xaf, 0x9b,
+ 0x2d, 0xfc, 0x41, 0xad, 0x26, 0xb4, 0x45, 0x67, 0x0b, 0x80, 0x0e, 0xf9, 0x61, 0x37, 0xec,
+ 0x3b, 0xf4, 0x4b, 0x14, 0xdf, 0x5a, 0x0c, 0x3a, 0x50, 0x0b, 0x14, 0x0c, 0x72, 0xae, 0xc6,
+ 0xc5, 0xec, 0x35, 0x53, 0x2d, 0x59, 0xed, 0x91, 0x74, 0xe2, 0xc4, 0xc8, 0xf2, 0x25, 0x6b,
+ 0x97, 0x6f, 0xc9, 0x76, 0xce, 0xa9, 0xb1, 0x99, 0x8f, 0x5a, 0x92, 0x3b, 0xc4, 0x8d, 0x54,
+ 0x50, 0x40, 0x72, 0xd6, 0x90, 0x83, 0xfc, 0xe5, 0x49, 0x8b, 0x17, 0xf5, 0xfd, 0x6b, 0x8d,
+ 0x32, 0x02, 0xe9, 0x0a, 0xfe, 0xbf, 0x00, 0x6b, 0xa3, 0xad, 0x5f, 0x09, 0x4b, 0x97, 0x2b,
+ 0x00, 0x58, 0x65, 0x2e, 0x07, 0x49, 0x0a, 0x3b, 0x6b, 0x2e, 0x50, 0x6c, 0x1d, 0xac, 0xb7,
+ 0x6a, 0x26, 0xd8, 0x13, 0xa4, 0xca, 0x16, 0xae, 0xab, 0x93, 0xb9, 0x1c, 0x1c, 0xb4, 0x47,
+ 0x6a, 0x38, 0x36, 0x17, 0x27, 0xc9, 0x7f, 0xc7, 0x64, 0xcb, 0x89, 0x58, 0xc5, 0x61, 0xc2,
+ 0xc6, 0xea, 0x15, 0x0b, 0x34, 0x0c, 0x5d, 0x61, 0x76, 0x6e, 0x2b, 0x62, 0x40, 0x92, 0xa3,
+ 0x6c, 0xef, 0xf4, 0xe4, 0xc3, 0xa1, 0xa8, 0xf5, 0x94, 0x79, 0x0d, 0xd1, 0x3d, 0xcb, 0x3d,
+ 0x40, 0xb6, 0xd0, 0xf0, 0x10, 0x54, 0xd8, 0x47, 0x25, 0x51, 0xc5, 0x41, 0x79, 0x00, 0xe5,
+ 0xa0, 0x72, 0xde, 0xbb, 0x3b, 0x62, 0x17, 0xf6, 0xbc, 0x5d, 0x00, 0x76, 0x2e, 0xa7, 0x3b,
+ 0xb6, 0xf1, 0x98, 0x72, 0x59, 0x2a, 0x73, 0xb0, 0x21, 0xd6, 0x49, 0xe0, 0xc0, 0xd5, 0xeb,
+ 0x02, 0x7d, 0x4b, 0x41, 0x28, 0x70, 0x2d, 0xec, 0x2b, 0x71, 0x1f, 0x0b, 0xb9, 0x71, 0x63,
+ 0x06, 0xe6, 0xbc, 0x60, 0xbb, 0xf4, 0x9a, 0x62, 0x43, 0x09, 0x18, 0x4e, 0x93, 0x06, 0x4d,
+ 0x76, 0xfa, 0x7f, 0xbd, 0x02, 0xe4, 0x50, 0x91, 0x12, 0xe5, 0x86, 0xff, 0x64, 0x1e, 0xaf,
+ 0x7e, 0xb3, 0xb2, 0xde, 0x89, 0xc1, 0xa2, 0x6f, 0x40, 0x7b, 0x41, 0x51, 0x63, 0xea, 0x25,
+ 0xd1, 0x97, 0x57, 0x92, 0xa8, 0x45, 0xa1, 0xa5, 0x45, 0x21, 0x43, 0x7f, 0x83, 0x15, 0x29,
+ 0xd0, 0x30, 0x53, 0x32, 0xb4, 0x5a, 0x17, 0x96, 0xbc, 0xc2, 0x68, 0xa9, 0xb7, 0xaf, 0xac,
+ 0xdf, 0xf1, 0xe3, 0x89, 0xba, 0x24, 0x79, 0x54, 0xc6, 0x14, 0x07, 0x1c, 0x1e, 0x0d, 0x3a,
+ 0x6b, 0xe5, 0x3d, 0x4e, 0x10, 0x60, 0x96, 0xec, 0x6c, 0xda, 0x47, 0xae, 0x03, 0x25, 0x39,
+ 0x1d, 0x74, 0xc8, 0xac, 0x6a, 0xf2, 0x6b, 0x05, 0x2a, 0x9a, 0xe7, 0xe8, 0x92, 0xd6, 0xc2,
+ 0x6d, 0xfa, 0xe8, 0xa7, 0x9d, 0x5f, 0x48, 0xc9, 0x75, 0xf1, 0x66, 0x6a, 0xdb, 0x5d, 0x9a,
+ 0xcd, 0x27, 0xdd, 0xb9, 0x24, 0x04, 0x9c, 0x18, 0xc2, 0x6d, 0x0c, 0x91, 0x34, 0x48, 0x42,
+ 0x6f, 0xe9, 0x59, 0x70, 0xc4, 0x7e, 0x81, 0x0e, 0x32, 0x0a, 0x93, 0x48, 0xb0, 0xc0, 0x15,
+ 0x9e, 0x05, 0xac, 0x36, 0x16, 0xcb, 0x59, 0x65, 0xa0, 0x83, 0xdf, 0x3e, 0xda, 0xfb, 0x1d,
+ 0x1a, 0xdb, 0x65, 0xec, 0x9a, 0xc6, 0xc3, 0x8e, 0x3c, 0x45, 0xfd, 0xc8, 0xf5, 0x1c, 0x6a,
+ 0x67, 0x0d, 0x8f, 0x99, 0x7d, 0x30, 0x21, 0x8c, 0xea, 0x22, 0x87, 0x65, 0xc9, 0xb2, 0x4c,
+ 0xe4, 0x1b, 0x46, 0xba, 0x54, 0xbd, 0x7c, 0xca, 0xd5, 0x8f, 0x5b, 0xa5, 0x01, 0x04, 0xd8,
+ 0x0a, 0x16, 0xbf, 0xb9, 0x50, 0x2e, 0x37, 0x2f, 0x64, 0xf3, 0x70, 0x11, 0x02, 0x05, 0x31,
+ 0x9b, 0xa0, 0xb2, 0x01, 0x5e, 0x4f, 0x19, 0xc9, 0xd4, 0xea, 0xa1, 0x79, 0x54, 0x53, 0xa7,
+ 0xde, 0x2f, 0x49, 0xd3, 0xd1, 0x63, 0xb5, 0x03, 0x15, 0x4e, 0xbf, 0x04, 0xb3, 0x26, 0x8b,
+ 0x20, 0xb2, 0x45, 0xcf, 0xcd, 0x5b, 0x82, 0x32, 0x88, 0x61, 0xa7, 0xa8, 0xb2, 0xa0, 0x72,
+ 0x96, 0xc0, 0xdb, 0x2b, 0xe2, 0x5f, 0xba, 0xe3, 0xf5, 0x8a, 0xde, 0xf1, 0x18, 0x01, 0x16,
+ 0x40, 0xd9, 0x86, 0x12, 0x09, 0x18, 0x1b, 0x05, 0x0c, 0xb1, 0xb5, 0x47, 0xe2, 0x43, 0xab,
+ 0xfe, 0x92, 0x63, 0x7e, 0x95, 0x2b, 0xf0, 0xaf, 0xe1, 0xf1, 0xc3, 0x4a, 0xff, 0x2b, 0x09,
+ 0xbb, 0x4a, 0x0e, 0x9a, 0xc4, 0xd8, 0x64, 0x7d, 0x83, 0xa0, 0x4f, 0x44, 0xdb, 0xc4, 0xa8,
+ 0x58, 0xef, 0xfc, 0x9e, 0x77, 0xf9, 0xa6, 0x8f, 0x58, 0x8b, 0x12, 0xf4, 0xe9, 0x81, 0x12,
+ 0x47, 0x51, 0x41, 0x83, 0xef, 0xf6, 0x73, 0xbc, 0x8e, 0x0f, 0x4c, 0x8f, 0x4e, 0x69, 0x90,
+ 0x77, 0x29, 0x5d, 0x92, 0xb0, 0x6d, 0x06, 0x67, 0x29, 0x60, 0xbd, 0x4b, 0x17, 0xc8, 0x89,
+ 0x69, 0x28, 0x29, 0xd6, 0x78, 0xcb, 0x11, 0x4c, 0xba, 0x8b, 0x68, 0xae, 0x7e, 0x9f, 0xef,
+ 0x95, 0xda, 0xe2, 0x9e, 0x7f, 0xe9, 0x55, 0xe5, 0xe1, 0xe2, 0xb7, 0xe6, 0x5f, 0xbb, 0x2c,
+ 0xa2, 0xe6, 0xee, 0xc7, 0x0a, 0x60, 0xa9, 0xd1, 0x80, 0xdf, 0x7f, 0xd6, 0x97, 0xab, 0x1d,
+ 0x22, 0x25, 0xfc, 0x79, 0x23, 0xe0, 0xae, 0xc5, 0xef, 0x16, 0xa4, 0xa1, 0x0f, 0x92, 0xa9,
+ 0xc7, 0xe3, 0x3a, 0x55, 0xdf, 0x62, 0x49, 0xd9, 0xf5, 0x84, 0x49, 0xc5, 0x90, 0x34, 0xd3,
+ 0xe1, 0xac, 0x99, 0x21, 0xb1, 0x02, 0x76, 0x4a, 0xfa, 0xd4, 0xbb, 0xa4, 0x9c, 0xa2, 0xe2,
+ 0xcb, 0x3d, 0x3b, 0x14, 0x75, 0x60, 0xd1, 0x02, 0xb4, 0xa3, 0xb4, 0x72, 0x06, 0xf9, 0x19,
+ 0x9c, 0xe2, 0xe4, 0xa7, 0x0f, 0x25, 0x88, 0xc6, 0x86, 0xd6, 0x8c, 0x74, 0x4e, 0x6e, 0xfc,
+ 0xa8, 0x48, 0x9e, 0xa7, 0x9d, 0x1a, 0x4b, 0x37, 0x09, 0xc8, 0xb0, 0x10, 0xbe, 0x6f, 0xfe,
+ 0xa3, 0xc4, 0x7a, 0xb5, 0x3d, 0xe8, 0x30, 0xf1, 0x0d, 0xa0, 0xb2, 0x44, 0xfc, 0x9b, 0x8c,
+ 0xf8, 0x61, 0xed, 0x81, 0xd1, 0x62, 0x11, 0xb4, 0xe1, 0xd5, 0x39, 0x52, 0x89, 0xd3, 0xa8,
+ 0x49, 0x31, 0xdf, 0xb6, 0xf9, 0x91, 0xf4, 0x1c, 0x9d, 0x09, 0x95, 0x40, 0x56, 0xe7, 0xe3,
+ 0xcd, 0x5c, 0x92, 0xc1, 0x1d, 0x6b, 0xe9, 0x78, 0x6f, 0x8e, 0x94, 0x42, 0x66, 0xa2, 0xaa,
+ 0xd3, 0xc8, 0x2e, 0xe3, 0xf6, 0x07, 0x72, 0x0b, 0x6b, 0x1e, 0x7b, 0xb9, 0x7c, 0xe0, 0xa0,
+ 0xbc, 0xd9, 0x25, 0xdf, 0x87, 0xa8, 0x5f, 0x9c, 0xcc, 0xf0, 0xdb, 0x42, 0x8e, 0x07, 0x31,
+ 0x13, 0x01, 0x66, 0x32, 0xd1, 0xb8, 0xd6, 0xe3, 0x5e, 0x12, 0x76, 0x61, 0xd3, 0x38, 0x89,
+ 0xe6, 0x17, 0x6f, 0xa5, 0xf2, 0x71, 0x0e, 0xa5, 0xe2, 0x88, 0x30, 0xbb, 0xbe, 0x8a, 0xea,
+ 0xc7, 0x62, 0xc4, 0xcf, 0xb8, 0xcd, 0x33, 0x8d, 0x3d, 0x3e, 0xb5, 0x60, 0x3a, 0x03, 0x92,
+ 0xe4, 0x6d, 0x1b, 0xe0, 0xb4, 0x84, 0x08, 0x55, 0x88, 0xa7, 0x3a, 0xb9, 0x3d, 0x43, 0xc3,
+ 0xc0, 0xfa, 0x07, 0x6a, 0xca, 0x94, 0xad, 0x99, 0x55, 0xf1, 0xf1, 0xc0, 0x23, 0x87, 0x1d,
+ 0x3d, 0x1c, 0xd1, 0x66, 0xa0, 0x57, 0x10, 0x52, 0xa2, 0x7f, 0xbe, 0xf9, 0x88, 0xb6, 0x02,
+ 0xbf, 0x08, 0x23, 0xa9, 0x0c, 0x63, 0x17, 0x2a, 0xae, 0xf5, 0xf7, 0xb7, 0x21, 0x83, 0x92,
+ 0x31, 0x23, 0x0d, 0x20, 0xc3, 0xc2, 0x05, 0x21, 0x62, 0x8e, 0x45, 0xe8, 0x14, 0xc1, 0xda,
+ 0x75, 0xb8, 0xf8, 0x92, 0x01, 0xd0, 0x5d, 0x18, 0x9f, 0x99, 0x11, 0x19, 0xf5, 0x35, 0xe8,
+ 0x7f, 0x20, 0x88, 0x8c, 0x05, 0x75, 0xf5, 0xd7, 0x40, 0x17, 0xbb, 0x1e, 0x36, 0x52, 0xd9,
+ 0xa4, 0x9c, 0xc2, 0x9d, 0x42, 0x81, 0xd8, 0xc7, 0x8a, 0xe7, 0x4c, 0x81, 0xe0, 0xb7, 0x57,
+ 0xed, 0x48, 0x8b, 0xf0, 0x97, 0x15, 0x61, 0xd9, 0x2c, 0x7c, 0x45, 0xaf, 0xc2, 0xcd, 0xfc,
+ 0xaa, 0x13, 0xad, 0x59, 0xcc, 0xb2, 0xb2, 0x6e, 0xdd, 0x63, 0x9c, 0x32, 0x0f, 0xec, 0x83,
+ 0xbe, 0x78, 0xac, 0x91, 0x44, 0x1a, 0x1f, 0xea, 0xfd, 0x5d, 0x8e, 0xb4, 0xc0, 0x84, 0xd4,
+ 0xac, 0xb4, 0x87, 0x5f, 0xac, 0xef, 0xdf, 0xcd, 0x12, 0x56, 0xc8, 0xcd, 0xfe, 0xc5, 0xda,
+ 0xd3, 0xc1, 0x69, 0xf3, 0x61, 0x05, 0xea, 0x25, 0xe2, 0x12, 0x05, 0x8f, 0x39, 0x08, 0x08,
+ 0x7c, 0x37, 0xb6, 0x7e, 0x5b, 0xd8, 0xb1, 0x0e, 0xf2, 0xdb, 0x4b, 0xf1, 0xad, 0x90, 0x01,
+ 0x57, 0xcd, 0xa0, 0xb4, 0x52, 0xe8, 0xf3, 0xd7, 0x8a, 0xbd, 0x4f, 0x9f, 0x21, 0x40, 0x72,
+ 0xa4, 0xfc, 0x0b, 0x01, 0x2b, 0x2f, 0xb6, 0x4c, 0x95, 0x2d, 0x35, 0x33, 0x41, 0x6b, 0xa0,
+ 0x93, 0xe7, 0x2c, 0xf2, 0xd3, 0x72, 0x8b, 0xf4, 0x4f, 0x15, 0x3c, 0xaf, 0xd6, 0x12, 0xde,
+ 0x3f, 0x83, 0x3f, 0xff, 0xf8, 0x7f, 0xf6, 0xcc, 0xa6, 0x7f, 0xc9, 0x9a, 0x6e, 0x1f, 0xc1,
+ 0x0c, 0xfb, 0xee, 0x9c, 0xe7, 0xaf, 0xc9, 0x26, 0x54, 0xef, 0xb0, 0x39, 0xef, 0xb2, 0xe9,
+ 0x23, 0xc4, 0xef, 0xd1, 0xa1, 0xa4, 0x25, 0x24, 0x6f, 0x8d, 0x6a, 0xe5, 0x8a, 0x32, 0x3a,
+ 0xaf, 0xfc, 0xda, 0xce, 0x18, 0x25, 0x42, 0x07, 0x4d, 0x45, 0x8b, 0xdf, 0x85, 0xcf, 0x55,
+ 0xb2, 0x24, 0xfe, 0x9c, 0x69, 0x74, 0xa7, 0x6e, 0xa0, 0xce, 0xc0, 0x39, 0xf4, 0x86, 0xc6,
+ 0x8d, 0xae, 0xb9, 0x48, 0x64, 0x13, 0x0b, 0x40, 0x81, 0xa2, 0xc9, 0xa8, 0x85, 0x51, 0xee,
+ 0x9f, 0xcf, 0xa2, 0x8c, 0x19, 0x52, 0x48, 0xe2, 0xc1, 0xa8, 0x58, 0xb4, 0x10, 0x24, 0x06,
+ 0x58, 0x51, 0xfc, 0xb9, 0x12, 0xec, 0xfd, 0x73, 0xb4, 0x6d, 0x84, 0xfa, 0x06, 0x8b, 0x05,
+ 0x0b, 0x2d, 0xd6, 0xd6, 0x1f, 0x29, 0x82, 0x9f, 0x19, 0x12, 0x1e, 0xb2, 0x04, 0x8f, 0x7f,
+ 0x4d, 0xbd, 0x30, 0x2e, 0xe3, 0xe0, 0x88, 0x29, 0xc5, 0x93, 0xd6, 0x6c, 0x1f, 0x29, 0x45,
+ 0x91, 0xa7, 0x58, 0xcd, 0x05, 0x17, 0xd6, 0x6d, 0xb3, 0xca, 0x66, 0xcc, 0x3c, 0x4a, 0x74,
+ 0xfd, 0x08, 0x10, 0xa6, 0x99, 0x92, 0x10, 0xd2, 0x85, 0xab, 0x6e, 0x1d, 0x0e, 0x8b, 0x26,
+ 0x46, 0xd1, 0x6c, 0x84, 0xc0, 0x26, 0x43, 0x59, 0x68, 0xf0, 0x13, 0x1d, 0xfb, 0xe3, 0xd1,
+ 0xd2, 0xb4, 0x71, 0x9e, 0xf2, 0x59, 0x6a, 0x33, 0x29, 0x79, 0xd2, 0xd7, 0x26, 0xf1, 0xae,
+ 0x78, 0x9e, 0x1f, 0x0f, 0x3f, 0xe3, 0xe8, 0xd0, 0x27, 0x78, 0x77, 0xf6, 0xac, 0x9c, 0x56,
+ 0x39, 0x73, 0x8a, 0x6b, 0x2f, 0x34, 0x78, 0xb1, 0x11, 0xdb, 0xa4, 0x5c, 0x80, 0x01, 0x71,
+ 0x6a, 0xc2, 0xd1, 0x2e, 0x5e, 0x76, 0x28, 0x70, 0x93, 0xae, 0x3e, 0x78, 0xb0, 0x1f, 0x0f,
+ 0xda, 0xbf, 0xfb, 0x8a, 0x67, 0x65, 0x4f, 0x91, 0xed, 0x49, 0x75, 0x78, 0x62, 0xa2, 0x93,
+ 0xb5, 0x70, 0x7f, 0x4d, 0x08, 0x4e, 0x79, 0x61, 0xa8, 0x5f, 0x7f, 0xb4, 0x65, 0x9f, 0x91,
+ 0x54, 0x3a, 0xe8, 0x50, 0x33, 0xd3, 0xd5, 0x8a, 0x7c, 0xf3, 0x9e, 0x8b, 0x77, 0x7b, 0xc6,
+ 0xc6, 0x0c, 0x45, 0x95, 0x1f, 0xb0, 0xd0, 0x0b, 0x27, 0x4a, 0xfd, 0xc7, 0xf7, 0x0d, 0x5a,
+ 0x43, 0xc9, 0x7d, 0x35, 0xb0, 0x7d, 0xc4, 0x9c, 0x57, 0x1e, 0x76, 0x0d, 0xf1, 0x95, 0x30,
+ 0x71, 0xcc, 0xb3, 0x66, 0x3b, 0x63, 0xa8, 0x6c, 0xa3, 0x43, 0xa0, 0x24, 0xcc, 0xb7, 0x53,
+ 0xfe, 0xfe, 0xbc, 0x6e, 0x60, 0x89, 0xaf, 0x16, 0x21, 0xc8, 0x91, 0x6a, 0x89, 0xce, 0x80,
+ 0x2c, 0xf1, 0x59, 0xce, 0xc3, 0x60, 0x61, 0x3b, 0x0b, 0x19, 0xfe, 0x99, 0xac, 0x65, 0x90,
+ 0x15, 0x12, 0x05, 0xac, 0x7e, 0xff, 0x98, 0x7b, 0x66, 0x64, 0x0e, 0x4b, 0x5b, 0xaa, 0x8d,
+ 0x3b, 0xd2, 0x56, 0xcf, 0x99, 0x39, 0xee, 0x22, 0x81, 0xd0, 0x60, 0x06, 0x66, 0x20, 0x81,
+ 0x48, 0x3c, 0x6f, 0x3a, 0x77, 0xba, 0xcb, 0x52, 0xac, 0x79, 0x56, 0xaf, 0xe9, 0x16, 0x17,
+ 0x0a, 0xa3, 0x82, 0x08, 0xd5, 0x3c, 0x97, 0xcb, 0x09, 0xff, 0x7f, 0xf9, 0x4f, 0x60, 0x05,
+ 0xb9, 0x53, 0x26, 0xaa, 0xb8, 0x50, 0xaa, 0x19, 0x25, 0xae, 0x5f, 0xea, 0x8a, 0xd0, 0x89,
+ 0x12, 0x80, 0x43, 0x50, 0x24, 0x12, 0x21, 0x14, 0xcd, 0x77, 0xeb, 0x21, 0xcc, 0x5c, 0x09,
+ 0x64, 0xf3, 0xc7, 0xcb, 0xc5, 0x4b, 0xc3, 0xe7, 0xed, 0xe7, 0x86, 0x2c, 0x1d, 0x8e, 0x19,
+ 0x52, 0x9b, 0x2a, 0x0c, 0x18, 0x72, 0x0b, 0x1e, 0x1b, 0xb0, 0x0f, 0x42, 0x99, 0x04, 0xae,
+ 0xd5, 0xb7, 0x89, 0x1a, 0xb9, 0x4f, 0xd6, 0xaf, 0xf3, 0xc9, 0x93, 0x6f, 0xb0, 0x60, 0x83,
+ 0x6e, 0x6b, 0xd1, 0x5f, 0x3f, 0x1a, 0x83, 0x1e, 0x24, 0x00, 0x87, 0xb5, 0x3e, 0xdb, 0xf9,
+ 0x4d, 0xa7, 0x16, 0x2e, 0x19, 0x5b, 0x8f, 0x1b, 0x0d, 0x47, 0x72, 0x42, 0xe9, 0x0a, 0x11,
+ 0x08, 0x2d, 0x88, 0x1c, 0xbc, 0xc7, 0xb4, 0xbe, 0x29, 0x4d, 0x03, 0x5e, 0xec, 0xdf, 0xf3,
+ 0x3d, 0x2f, 0xe8, 0x1d, 0x9a, 0xd2, 0xd1, 0xab, 0x41, 0x3d, 0x87, 0x11, 0x45, 0xb0, 0x0d,
+ 0x46, 0xf5, 0xe8, 0x95, 0x62, 0x1c, 0x68, 0xf7, 0xa6, 0x5b, 0x39, 0x4e, 0xbf, 0x47, 0xba,
+ 0x5d, 0x7f, 0xb7, 0x6a, 0xf4, 0xba, 0x1d, 0x69, 0xf6, 0xa4, 0xe7, 0xe4, 0x6b, 0x3b, 0x0d,
+ 0x23, 0x16, 0x4a, 0xb2, 0x68, 0xf0, 0xb2, 0x0d, 0x09, 0x17, 0x6a, 0x63, 0x8c, 0x83, 0xd3,
+ 0xbd, 0x05, 0xc9, 0xf6, 0xf0, 0xa1, 0x31, 0x0b, 0x2c, 0xac, 0x83, 0xac, 0x80, 0x34, 0x32,
+ 0xb4, 0xec, 0xd0, 0xbc, 0x54, 0x82, 0x9a, 0xc8, 0xf6, 0xa0, 0x7d, 0xc6, 0x79, 0x73, 0xf4,
+ 0x20, 0x99, 0xf3, 0xb4, 0x01, 0xde, 0x91, 0x27, 0xf2, 0xc0, 0xdc, 0x81, 0x00, 0x4e, 0x7e,
+ 0x07, 0x99, 0xc8, 0x3a, 0x51, 0xbc, 0x38, 0xd6, 0x8a, 0xa2, 0xde, 0x3b, 0x6a, 0x8c, 0x1a,
+ 0x7c, 0x81, 0x0f, 0x3a, 0x1f, 0xe4, 0x05, 0x7b, 0x20, 0x35, 0x6b, 0xa5, 0x6a, 0xa7, 0xe7,
+ 0xbc, 0x9c, 0x20, 0xec, 0x00, 0x15, 0xe2, 0x51, 0xaf, 0x77, 0xeb, 0x29, 0x3c, 0x7d, 0x2e,
+ 0x00, 0x5c, 0x81, 0x21, 0xfa, 0x35, 0x6f, 0x40, 0xef, 0xfb, 0xd1, 0x3f, 0xcc, 0x9d, 0x55,
+ 0x53, 0xfb, 0x5a, 0xa5, 0x56, 0x89, 0x0b, 0x52, 0xeb, 0x57, 0x73, 0x4f, 0x1b, 0x67, 0x24,
+ 0xcb, 0xb8, 0x6a, 0x10, 0x69, 0xd6, 0xfb, 0x52, 0x40, 0xff, 0x20, 0xa5, 0xf3, 0x72, 0xe1,
+ 0x3d, 0xa4, 0x8c, 0x81, 0x66, 0x16, 0x0d, 0x5d, 0xad, 0xa8, 0x50, 0x25, 0x78, 0x31, 0x77,
+ 0x0c, 0x57, 0xe4, 0xe9, 0x15, 0x2d, 0xdb, 0x07, 0x87, 0xc8, 0xb0, 0x43, 0xde, 0xfc, 0xfe,
+ 0xa9, 0xeb, 0xf5, 0xb0, 0xd3, 0x7b, 0xe9, 0x1f, 0x6e, 0xca, 0xe4, 0x03, 0x95, 0xc5, 0xd1,
+ 0x59, 0x72, 0x63, 0xf0, 0x86, 0x54, 0xe8, 0x16, 0x62, 0x0b, 0x35, 0x29, 0xc2, 0x68, 0xd0,
+ 0xd6, 0x3e, 0x90, 0x60, 0x57, 0x1d, 0xc9, 0xed, 0x3f, 0xed, 0xb0, 0x2f, 0x7e, 0x97, 0x02,
+ 0x51, 0xec, 0xee, 0x6f, 0x82, 0x74, 0x76, 0x7f, 0xfb, 0xd6, 0xc4, 0xc3, 0xdd, 0xe8, 0xb1,
+ 0x60, 0xfc, 0xc6, 0xb9, 0x0d, 0x6a, 0x33, 0x78, 0xc6, 0xc1, 0xbf, 0x86, 0x2c, 0x50, 0xcc,
+ 0x9a, 0x70, 0x8e, 0x7b, 0xec, 0xab, 0x95, 0xac, 0x53, 0xa0, 0x4b, 0x07, 0x88, 0xaf, 0x42,
+ 0xed, 0x19, 0x8d, 0xf6, 0x32, 0x17, 0x48, 0x47, 0x1d, 0x41, 0x6f, 0xfe, 0x2e, 0xa7, 0x8f,
+ 0x4b, 0xa0, 0x51, 0xf3, 0xbf, 0x02, 0x0a, 0x48, 0x58, 0xf7, 0xa1, 0x6d, 0xea, 0xa5, 0x13,
+ 0x5a, 0x5b, 0xea, 0x0c, 0x9e, 0x52, 0x4f, 0x9e, 0xb9, 0x71, 0x7f, 0x23, 0x83, 0xda, 0x1b,
+ 0x86, 0x9a, 0x41, 0x29, 0xda, 0x70, 0xe7, 0x64, 0xa1, 0x7b, 0xd5, 0x0a, 0x22, 0x0d, 0x5c,
+ 0x40, 0xc4, 0x81, 0x07, 0x25, 0x35, 0x4a, 0x1c, 0x10, 0xdb, 0x45, 0x0a, 0xff, 0x36, 0xd4,
+ 0xe0, 0xeb, 0x5f, 0x68, 0xd6, 0x67, 0xc6, 0xd0, 0x8b, 0x76, 0x1a, 0x7d, 0x59, 0x42, 0xa1,
+ 0xcb, 0x96, 0x4d, 0x84, 0x09, 0x9a, 0x3d, 0xe0, 0x52, 0x85, 0x6e, 0x48, 0x90, 0x85, 0x2a,
+ 0x63, 0xb2, 0x69, 0xd2, 0x00, 0x43, 0x31, 0x37, 0xb3, 0x52, 0xaf, 0x62, 0xfa, 0xc1, 0xe0,
+ 0x03, 0xfb, 0x62, 0xaa, 0x88, 0xc9, 0xb2, 0x2c, 0xd5, 0xa8, 0xf5, 0xa5, 0x4c, 0x12, 0x59,
+ 0x4e, 0x06, 0x5e, 0x9b, 0x15, 0x66, 0x11, 0xb2, 0x27, 0x92, 0xdc, 0x98, 0x59, 0xde, 0xdf,
+ 0xfa, 0x9a, 0x32, 0x2e, 0xc0, 0x5d, 0x3c, 0x33, 0x41, 0x6d, 0xaf, 0xb2, 0x25, 0x23, 0x14,
+ 0xa5, 0x7b, 0xc7, 0x9b, 0x68, 0xf3, 0xda, 0xeb, 0xe3, 0xa9, 0xe2, 0x6f, 0x0e, 0x1d, 0x1c,
+ 0xba, 0x55, 0xb6, 0x34, 0x6a, 0x93, 0x1f, 0x1f, 0xb8, 0x34, 0xc8, 0x84, 0x08, 0xb1, 0x6b,
+ 0x6a, 0x28, 0x74, 0x74, 0xe5, 0xeb, 0x75, 0xe9, 0x7c, 0xd8, 0xba, 0xd8, 0x42, 0xa5, 0xee,
+ 0x1f, 0x80, 0xd9, 0x96, 0xb2, 0x2e, 0xe7, 0xbf, 0xba, 0xeb, 0xd1, 0x69, 0xbb, 0x8f, 0xfd,
+ 0x5a, 0x63, 0x8f, 0x39, 0x7f, 0xdf, 0x1d, 0x37, 0xd2, 0x18, 0x35, 0x9d, 0xb6, 0xcc, 0xe4,
+ 0x27, 0x81, 0x89, 0x38, 0x38, 0x68, 0x33, 0xe7, 0x78, 0xd8, 0x76, 0xf5, 0xee, 0xd0, 0x4a,
+ 0x07, 0x69, 0x19, 0x7a, 0xad, 0x18, 0xb1, 0x94, 0x61, 0x45, 0x53, 0xa2, 0x48, 0xda, 0x96,
+ 0x4a, 0xf9, 0xee, 0x94, 0x2a, 0x1f, 0x6e, 0x18, 0x3c, 0x92, 0x46, 0xd1, 0x1a, 0x28, 0x18,
+ 0x32, 0x1f, 0x3a, 0x45, 0xbe, 0x04, 0x35, 0x92, 0xe5, 0xa3, 0xcb, 0xb5, 0x2e, 0x32, 0x43,
+ 0xac, 0x65, 0x17, 0x89, 0x99, 0x15, 0x03, 0x9e, 0xb1, 0x23, 0x2f, 0xed, 0x76, 0x4d, 0xd8,
+ 0xac, 0x21, 0x40, 0xc4, 0x99, 0x4e, 0x65, 0x71, 0x2c, 0xb3, 0x45, 0xab, 0xfb, 0xe7, 0x72,
+ 0x39, 0x56, 0x30, 0x6d, 0xfb, 0x74, 0xeb, 0x99, 0xf3, 0xcd, 0x57, 0x5c, 0x78, 0x75, 0xe9,
+ 0x8d, 0xc3, 0xa2, 0xfb, 0x5d, 0xe0, 0x90, 0xc5, 0x55, 0xad, 0x91, 0x53, 0x4e, 0x9e, 0xbd,
+ 0x8c, 0x49, 0xa4, 0xa4, 0x69, 0x10, 0x0c, 0xc5, 0x76, 0xe9, 0x25, 0x86, 0x8d, 0x66, 0x23,
+ 0xa8, 0xdb, 0x5c, 0xe8, 0xd9, 0x30, 0xe1, 0x15, 0x7b, 0xc0, 0x99, 0x0f, 0x03, 0xec, 0xaa,
+ 0x12, 0xef, 0xce, 0xd4, 0xea, 0x55, 0x5c, 0x08, 0x86, 0xf4, 0xf4, 0xb0, 0x83, 0x42, 0x95,
+ 0x37, 0xb6, 0x38, 0xe0, 0x2b, 0x54, 0x89, 0xbd, 0x4e, 0x20, 0x9d, 0x3f, 0xc3, 0x4b, 0xb7,
+ 0xec, 0xfa, 0x5a, 0x14, 0x03, 0xcb, 0x64, 0xc8, 0x34, 0x4a, 0x4b, 0x6e, 0xf8, 0x6e, 0x56,
+ 0xf6, 0xdd, 0x5f, 0xa1, 0x24, 0xe2, 0xd4, 0xd0, 0x82, 0x64, 0x1f, 0x8e, 0x9b, 0xfa, 0xb4,
+ 0xcb, 0xdb, 0x0a, 0xe8, 0x15, 0xfc, 0x15, 0xab, 0x4b, 0x18, 0xbf, 0xd4, 0x42, 0x14, 0x48,
+ 0x82, 0x85, 0xdd, 0xeb, 0x49, 0x1b, 0x0b, 0x0b, 0x05, 0xe9, 0xb4, 0xa1, 0x33, 0x0a, 0x5d,
+ 0x0e, 0x6c, 0x4b, 0xc0, 0xd6, 0x6c, 0x7c, 0xfb, 0x69, 0x0b, 0x53, 0x19, 0xe4, 0xf3, 0x35,
+ 0xfc, 0xbe, 0xa1, 0x34, 0x02, 0x09, 0x4f, 0x74, 0x86, 0x92, 0xcd, 0x5d, 0x1a, 0xc1, 0x27,
+ 0x0c, 0xf2, 0xc5, 0xcf, 0xdd, 0x23, 0x93, 0x02, 0xbd, 0x41, 0x5e, 0x42, 0xf0, 0xa0, 0x9d,
+ 0x0c, 0x72, 0xc8, 0xec, 0x32, 0x0a, 0x8a, 0xfd, 0x3d, 0x5a, 0x41, 0x27, 0x0c, 0x88, 0x59,
+ 0xad, 0x94, 0x2e, 0xef, 0x5d, 0x8f, 0xc7, 0xdf, 0x66, 0xe4, 0xdd, 0x56, 0x6c, 0x7b, 0xca,
+ 0x55, 0x81, 0xae, 0xae, 0x5c, 0x1b, 0x1a, 0xab, 0xae, 0x99, 0x8d, 0xcc, 0x42, 0x97, 0x59,
+ 0xf4, 0x14, 0x3f, 0x75, 0xc6, 0xd1, 0x88, 0xba, 0xaa, 0x84, 0x4a, 0xd0, 0x34, 0x08, 0x3b,
+ 0x7d, 0xdb, 0x15, 0x06, 0xb0, 0x5c, 0xbd, 0x40, 0xf5, 0xa8, 0xec, 0xae, 0x36, 0x40, 0xdd,
+ 0x90, 0x1c, 0x3e, 0x0d, 0x7e, 0x73, 0xc7, 0xc2, 0xc5, 0x6a, 0xff, 0x52, 0x05, 0x7f, 0xbe,
+ 0xd0, 0x92, 0xfd, 0xb3, 0x6f, 0xff, 0x5d, 0xb7, 0x97, 0x64, 0x73, 0x7b, 0xca, 0xd1, 0x98,
+ 0x24, 0x6b, 0x0b, 0x01, 0x68, 0xdd, 0x27, 0x85, 0x85, 0xb5, 0x83, 0xc1, 0xe0, 0x50, 0x64,
+ 0xc7, 0xaf, 0xf1, 0xc6, 0x4d, 0xb1, 0xef, 0xc9, 0xb4, 0x0a, 0x6d, 0x65, 0xf3, 0x47, 0xcc,
+ 0xa3, 0x02, 0x21, 0x0c, 0xbe, 0x22, 0x29, 0x05, 0xcf, 0x5f, 0xe8, 0x94, 0x6c, 0xe5, 0xdc,
+ 0xc4, 0xdf, 0xbe, 0x3e, 0xa8, 0xb4, 0x18, 0xb0, 0x99, 0xb8, 0x6f, 0xff, 0x5d, 0xb9, 0xfd,
+ 0x3b, 0x5d, 0x16, 0xbf, 0x3e, 0xd8, 0xb3, 0xd8, 0x08, 0x34, 0xf6, 0x47, 0x35, 0x5b, 0x72,
+ 0x1a, 0x33, 0xad, 0x52, 0x5d, 0xb8, 0xd0, 0x77, 0xc6, 0xab, 0xba, 0x55, 0x09, 0x5f, 0x02,
+ 0xf8, 0xd4, 0x5f, 0x53, 0x06, 0x91, 0xcd, 0x74, 0x42, 0xae, 0x54, 0x91, 0x81, 0x62, 0x13,
+ 0x6f, 0xd8, 0xa9, 0x77, 0xc3, 0x6c, 0xcb, 0xf1, 0x29, 0x5a, 0xcc, 0xda, 0x35, 0xbd, 0x52,
+ 0x23, 0xbe, 0x59, 0xeb, 0x12, 0x6d, 0xb7, 0x53, 0xee, 0xfc, 0xb4, 0x1b, 0x13, 0x5e, 0xba,
+ 0x16, 0x7c, 0xc5, 0xf3, 0xe3, 0x6d, 0x07, 0x78, 0xf5, 0x2b, 0x21, 0x05, 0x88, 0x4c, 0xc0,
+ 0xa1, 0xe3, 0x36, 0x10, 0xf8, 0x1b, 0xd8, 0x17, 0xfb, 0x6a, 0x4e, 0xd8, 0xb3, 0x47, 0x2d,
+ 0x99, 0xbd, 0xbb, 0x5d, 0x37, 0x7d, 0xba, 0xf1, 0xe1, 0x7c, 0xc0, 0xc5, 0x54, 0x62, 0x7f,
+ 0xcf, 0x5a, 0x4a, 0x93, 0xcc, 0xf1, 0x1b, 0x34, 0xc8, 0xa6, 0x05, 0x4c, 0x55, 0x8b, 0x54,
+ 0x84, 0xd5, 0x77, 0xeb, 0xc0, 0x6d, 0x3a, 0x29, 0xbd, 0x75, 0x61, 0x09, 0x9a, 0x2c, 0xbb,
+ 0xf7, 0x18, 0x79, 0x34, 0x90, 0x24, 0xa5, 0x81, 0x70, 0x87, 0xc5, 0x02, 0x7c, 0xba, 0xd4,
+ 0x5e, 0x14, 0x8e, 0xe4, 0xed, 0xa2, 0x61, 0x6a, 0xb9, 0x6e, 0xb5, 0x4a, 0xb9, 0x01, 0x46,
+ 0xf4, 0xcf, 0xbc, 0x09, 0x2f, 0x27, 0x4b, 0xbd, 0x86, 0x7a, 0x10, 0xe1, 0xd4, 0xc8, 0xd9,
+ 0x20, 0x8d, 0x8a, 0x63, 0x00, 0x63, 0x44, 0xeb, 0x54, 0x0b, 0x75, 0x49, 0x10, 0xa2, 0xa7,
+ 0xad, 0xb9, 0xd1, 0x01, 0x80, 0x63, 0x25, 0xc8, 0x12, 0xa6, 0xce, 0x1e, 0xbe, 0xfe, 0x7e,
+ 0x5f, 0x3c, 0xdb, 0x34, 0xea, 0x37, 0xec, 0x3b, 0xd5, 0x28, 0xd2, 0x07, 0x8c, 0x9a, 0xb6,
+ 0xee, 0x5e, 0x3e, 0xdf, 0x1d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x5c, 0x1b, 0xb4, 0xea, 0x56,
+ 0x2e, 0xde, 0x1f, 0x9d, 0xb8, 0xd3, 0x24, 0xab, 0xd4, 0x2a, 0xd6, 0x2e, 0xde, 0x1f, 0x9d,
+ 0xb8, 0xf2, 0x66, 0x2f, 0xbd, 0xf8, 0x72, 0x66, 0x4e, 0x1e, 0x9f, 0x9d, 0xb8, 0xf2, 0x47,
+ 0x0c, 0x9a, 0xb6, 0xee, 0x3f, 0xfc, 0x7a, 0x57, 0x0d, 0x79, 0x70, 0x62, 0x27, 0xad, 0xb9,
+ 0xd1, 0x01, 0x61, 0x40, 0x02, 0x67, 0x2d, 0xd8, 0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xd7, 0x2c,
+ 0xbb, 0xf4, 0x4b, 0xf5, 0x49, 0xf1, 0x60, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0xf9, 0x51, 0x01,
+ 0x80, 0x63, 0x25, 0xa9, 0xb1, 0xe0, 0x42, 0xe7, 0x4c, 0x1a, 0x97, 0xac, 0xbb, 0xf4, 0x6a,
+ 0x37, 0xcd, 0x18, 0xb2, 0xe6, 0x2f, 0xdc, 0x1b, 0x95, 0xa8, 0xd2, 0x07, 0x6d, 0x58, 0x32,
+ 0xe6, 0x4e, 0x1e, 0x9f, 0xbc, 0xfa, 0x57, 0x0d, 0x79, 0x51, 0x20, 0xc2, 0x06, 0x6f, 0x5c,
+ 0x1b, 0x95, 0xa8, 0xb3, 0xc5, 0xe9, 0x31, 0xe0, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0x18, 0x93,
+ 0x85, 0x69, 0x31, 0xc1, 0xe1, 0x21, 0xc0, 0xe3, 0x44, 0x0a, 0x77, 0x6c, 0x5a, 0x17, 0x8d,
+ 0x98, 0x93, 0xa4, 0xab, 0xd4, 0x2a, 0xb7, 0xec, 0x5a, 0x17, 0xac, 0xbb, 0xf4, 0x4b, 0x14,
+ 0xaa, 0xb7, 0xec, 0x3b, 0xd5, 0x28, 0xb3, 0xc5, 0xe9, 0x31, 0xc1, 0x00, 0x82, 0x67, 0x4c,
+ 0xfb, 0x55, 0x28, 0xd2, 0x26, 0xaf, 0xbd, 0xd9, 0x11, 0x81, 0x61, 0x21, 0xa1, 0xa1, 0xc0,
+ 0x02, 0x86, 0x6f, 0x5c, 0x1b, 0xb4, 0xcb, 0x14, 0x8b, 0x94, 0xaa, 0xd6, 0x2e, 0xbf, 0xdd,
+ 0x19, 0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x7c, 0x5b, 0x15, 0x89, 0x90, 0x83, 0x84, 0x6b, 0x54,
+ 0x0b, 0x75, 0x68, 0x52, 0x07, 0x6d, 0x58, 0x32, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0xed, 0x58,
+ 0x32, 0xe6, 0x4e, 0xff, 0x7c, 0x7a, 0x76, 0x6e, 0x3f, 0xdd, 0x38, 0xd3, 0x05, 0x88, 0x92,
+ 0xa6, 0xaf, 0xdc, 0x1b, 0xb4, 0xcb, 0xf5, 0x68, 0x52, 0x07, 0x8c, 0x7b, 0x55, 0x09, 0x90,
+ 0x83, 0x84, 0x6b, 0x54, 0x2a, 0xb7, 0xec, 0x3b, 0xd5, 0x09, 0x90, 0xa2, 0xc6, 0x0e, 0x7f,
+ 0x7c, 0x7a, 0x57, 0x0d, 0x98, 0xb2, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0x0c, 0x7b, 0x74, 0x4b,
+ 0x14, 0x8b, 0x94, 0xaa, 0xb7, 0xcd, 0x18, 0x93, 0xa4, 0xca, 0x16, 0xae, 0xbf, 0xdd, 0x19,
+ 0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x5d, 0x19, 0x91, 0x81, 0x80, 0x63, 0x44, 0xeb, 0x35, 0xc9,
+ 0x10, 0x83, 0x65, 0x48, 0x12, 0xa6, 0xce, 0x1e, 0x9f, 0xbc, 0xdb, 0x15, 0x89, 0x71, 0x60,
+ 0x23, 0xc4, 0xeb, 0x54, 0x2a, 0xb7, 0xec, 0x5a, 0x36, 0xcf, 0x81, 0x10, 0xac, 0x74
+};
// clang-format off
diff --git a/drivers/serial.h b/drivers/serial.h
index d9c2a69e96..0cfdbd9959 100644
--- a/drivers/serial.h
+++ b/drivers/serial.h
@@ -26,21 +26,4 @@ void soft_serial_initiator_init(void);
// target is interrupt accept side
void soft_serial_target_init(void);
-// initiator result
-#define TRANSACTION_END 0
-#define TRANSACTION_NO_RESPONSE 0x1
-#define TRANSACTION_DATA_ERROR 0x2
-#define TRANSACTION_TYPE_ERROR 0x4
-int soft_serial_transaction(int sstd_index);
-
-// target status
-// *SSTD_t.status has
-// initiator:
-// TRANSACTION_END
-// or TRANSACTION_NO_RESPONSE
-// or TRANSACTION_DATA_ERROR
-// target:
-// TRANSACTION_DATA_ERROR
-// or TRANSACTION_ACCEPTED
-#define TRANSACTION_ACCEPTED 0x8
-int soft_serial_get_and_clean_status(int sstd_index);
+bool soft_serial_transaction(int sstd_index);
diff --git a/drivers/usb2422.c b/drivers/usb2422.c
index 62b919093b..8ee54b24ee 100644
--- a/drivers/usb2422.c
+++ b/drivers/usb2422.c
@@ -352,7 +352,7 @@ void USB2422_init() {
setPinInput(USB2422_ACTIVE_PIN);
#endif
- i2c_init(); // IC2 clk must be high at USB2422 reset release time to signal SMB configuration
+ i2c_init(); // IC2 clk must be high at USB2422 reset release time to signal SMB configuration
}
void USB2422_configure() {
@@ -363,14 +363,14 @@ void USB2422_configure() {
// configure Usb2422 registers
config.VID.reg = USB2422_VENDOR_ID;
config.PID.reg = USB2422_PRODUCT_ID;
- config.DID.reg = USB2422_DEVICE_VER; // BCD format, eg 01.01
- config.CFG1.bit.SELF_BUS_PWR = 1; // self powered for now
- config.CFG1.bit.HS_DISABLE = 1; // full or high speed
+ config.DID.reg = USB2422_DEVICE_VER; // BCD format, eg 01.01
+ config.CFG1.bit.SELF_BUS_PWR = 1; // self powered for now
+ config.CFG1.bit.HS_DISABLE = 1; // full or high speed
// config.CFG2.bit.COMPOUND = 0; // compound device
- config.CFG3.bit.STRING_EN = 1; // strings enabled
+ config.CFG3.bit.STRING_EN = 1; // strings enabled
// config.NRD.bit.PORT2_NR = 0; // MCU is non-removable
- config.MAXPB.reg = 20; // 0mA
- config.HCMCB.reg = 20; // 0mA
+ config.MAXPB.reg = 20; // 0mA
+ config.HCMCB.reg = 20; // 0mA
config.MFRSL.reg = sizeof(USB2422_MANUFACTURER);
config.PRDSL.reg = sizeof(USB2422_PRODUCT);
config.SERSL.reg = sizeof(SERNAME);
diff --git a/drivers/ws2812.h b/drivers/ws2812.h
index 945b3d0728..5985b5340c 100644
--- a/drivers/ws2812.h
+++ b/drivers/ws2812.h
@@ -33,19 +33,19 @@
#endif
#ifndef WS2812_T1H
-# define WS2812_T1H 900 // Width of a 1 bit in ns
+# define WS2812_T1H 900 // Width of a 1 bit in ns
#endif
#ifndef WS2812_T1L
-# define WS2812_T1L (WS2812_TIMING - WS2812_T1H) // Width of a 1 bit in ns
+# define WS2812_T1L (WS2812_TIMING - WS2812_T1H) // Width of a 1 bit in ns
#endif
#ifndef WS2812_T0H
-# define WS2812_T0H 350 // Width of a 0 bit in ns
+# define WS2812_T0H 350 // Width of a 0 bit in ns
#endif
#ifndef WS2812_T0L
-# define WS2812_T0L (WS2812_TIMING - WS2812_T0H) // Width of a 0 bit in ns
+# define WS2812_T0L (WS2812_TIMING - WS2812_T0H) // Width of a 0 bit in ns
#endif
/*
diff --git a/keyboards/10bleoledhub/rules.mk b/keyboards/10bleoledhub/rules.mk
index 33170c43a2..bd10e11022 100644
--- a/keyboards/10bleoledhub/rules.mk
+++ b/keyboards/10bleoledhub/rules.mk
@@ -20,7 +20,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
ENCODER_ENABLE = yes
diff --git a/keyboards/aleth42/info.json b/keyboards/25keys/aleth42/info.json
index 5a8b564685..5a8b564685 100644
--- a/keyboards/aleth42/info.json
+++ b/keyboards/25keys/aleth42/info.json
diff --git a/keyboards/aleth42/keymaps/default/keymap.c b/keyboards/25keys/aleth42/keymaps/default/keymap.c
index 707af7116a..707af7116a 100644
--- a/keyboards/aleth42/keymaps/default/keymap.c
+++ b/keyboards/25keys/aleth42/keymaps/default/keymap.c
diff --git a/keyboards/aleth42/keymaps/default/readme.md b/keyboards/25keys/aleth42/keymaps/default/readme.md
index 85da46e69f..85da46e69f 100644
--- a/keyboards/aleth42/keymaps/default/readme.md
+++ b/keyboards/25keys/aleth42/keymaps/default/readme.md
diff --git a/keyboards/aleth42/keymaps/via/config.h b/keyboards/25keys/aleth42/keymaps/via/config.h
index f664d664f6..f664d664f6 100644
--- a/keyboards/aleth42/keymaps/via/config.h
+++ b/keyboards/25keys/aleth42/keymaps/via/config.h
diff --git a/keyboards/aleth42/keymaps/via/keymap.c b/keyboards/25keys/aleth42/keymaps/via/keymap.c
index 2801e65ec4..2801e65ec4 100644
--- a/keyboards/aleth42/keymaps/via/keymap.c
+++ b/keyboards/25keys/aleth42/keymaps/via/keymap.c
diff --git a/keyboards/aleth42/keymaps/via/readme.md b/keyboards/25keys/aleth42/keymaps/via/readme.md
index 01f2cfee34..01f2cfee34 100644
--- a/keyboards/aleth42/keymaps/via/readme.md
+++ b/keyboards/25keys/aleth42/keymaps/via/readme.md
diff --git a/keyboards/aleth42/keymaps/via/rules.mk b/keyboards/25keys/aleth42/keymaps/via/rules.mk
index 35a31dea8e..35a31dea8e 100644
--- a/keyboards/aleth42/keymaps/via/rules.mk
+++ b/keyboards/25keys/aleth42/keymaps/via/rules.mk
diff --git a/keyboards/25keys/aleth42/readme.md b/keyboards/25keys/aleth42/readme.md
new file mode 100644
index 0000000000..acf9c38e2e
--- /dev/null
+++ b/keyboards/25keys/aleth42/readme.md
@@ -0,0 +1,15 @@
+# ALETH42
+
+![ALETH42](https://i.imgur.com/6hJVBQl.png)
+
+40% keyboard with rotary encoder (optional)
+
+* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk/) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
+* Hardware Supported: ALETH42 PCB
+* Hardware Availability: [twitter](https://twitter.com/monksoffunkJP), [Booth](https://25keys.booth.pm/items/2420095)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 25keys/aleth42/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/aleth42/rev0/config.h b/keyboards/25keys/aleth42/rev0/config.h
index da10e30a4f..da10e30a4f 100644
--- a/keyboards/aleth42/rev0/config.h
+++ b/keyboards/25keys/aleth42/rev0/config.h
diff --git a/keyboards/aleth42/rev0/readme.md b/keyboards/25keys/aleth42/rev0/readme.md
index 2457a7a10a..2457a7a10a 100644
--- a/keyboards/aleth42/rev0/readme.md
+++ b/keyboards/25keys/aleth42/rev0/readme.md
diff --git a/keyboards/aleth42/rev0/rev0.c b/keyboards/25keys/aleth42/rev0/rev0.c
index ce91e83804..ce91e83804 100644
--- a/keyboards/aleth42/rev0/rev0.c
+++ b/keyboards/25keys/aleth42/rev0/rev0.c
diff --git a/keyboards/aleth42/rev0/rev0.h b/keyboards/25keys/aleth42/rev0/rev0.h
index a5dd74037f..a5dd74037f 100644
--- a/keyboards/aleth42/rev0/rev0.h
+++ b/keyboards/25keys/aleth42/rev0/rev0.h
diff --git a/keyboards/aleth42/rev0/rules.mk b/keyboards/25keys/aleth42/rev0/rules.mk
index fd5789116d..fd5789116d 100644
--- a/keyboards/aleth42/rev0/rules.mk
+++ b/keyboards/25keys/aleth42/rev0/rules.mk
diff --git a/keyboards/aleth42/rev1/config.h b/keyboards/25keys/aleth42/rev1/config.h
index 38c74c6bf1..38c74c6bf1 100644
--- a/keyboards/aleth42/rev1/config.h
+++ b/keyboards/25keys/aleth42/rev1/config.h
diff --git a/keyboards/aleth42/readme.md b/keyboards/25keys/aleth42/rev1/readme.md
index 3da1231d60..3da1231d60 100644
--- a/keyboards/aleth42/readme.md
+++ b/keyboards/25keys/aleth42/rev1/readme.md
diff --git a/keyboards/aleth42/rev1/rev1.c b/keyboards/25keys/aleth42/rev1/rev1.c
index 360cf8e7f1..360cf8e7f1 100644
--- a/keyboards/aleth42/rev1/rev1.c
+++ b/keyboards/25keys/aleth42/rev1/rev1.c
diff --git a/keyboards/aleth42/rev1/rev1.h b/keyboards/25keys/aleth42/rev1/rev1.h
index a5dd74037f..a5dd74037f 100644
--- a/keyboards/aleth42/rev1/rev1.h
+++ b/keyboards/25keys/aleth42/rev1/rev1.h
diff --git a/keyboards/aleth42/rev1/rules.mk b/keyboards/25keys/aleth42/rev1/rules.mk
index 5ff179b0eb..5ff179b0eb 100644
--- a/keyboards/aleth42/rev1/rules.mk
+++ b/keyboards/25keys/aleth42/rev1/rules.mk
diff --git a/keyboards/25keys/aleth42/rules.mk b/keyboards/25keys/aleth42/rules.mk
new file mode 100644
index 0000000000..8034ad5440
--- /dev/null
+++ b/keyboards/25keys/aleth42/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = 25keys/aleth42/rev1
diff --git a/keyboards/cassette42/cassette42.c b/keyboards/25keys/cassette42/cassette42.c
index f5ca2b8a98..f5ca2b8a98 100644
--- a/keyboards/cassette42/cassette42.c
+++ b/keyboards/25keys/cassette42/cassette42.c
diff --git a/keyboards/cassette42/cassette42.h b/keyboards/25keys/cassette42/cassette42.h
index 32a686f3de..32a686f3de 100644
--- a/keyboards/cassette42/cassette42.h
+++ b/keyboards/25keys/cassette42/cassette42.h
diff --git a/keyboards/cassette42/common/glcdfont.c b/keyboards/25keys/cassette42/common/glcdfont.c
index dcffc71958..dcffc71958 100644
--- a/keyboards/cassette42/common/glcdfont.c
+++ b/keyboards/25keys/cassette42/common/glcdfont.c
diff --git a/keyboards/cassette42/common/oled_helper.c b/keyboards/25keys/cassette42/common/oled_helper.c
index 8800699a85..8800699a85 100644
--- a/keyboards/cassette42/common/oled_helper.c
+++ b/keyboards/25keys/cassette42/common/oled_helper.c
diff --git a/keyboards/cassette42/common/oled_helper.h b/keyboards/25keys/cassette42/common/oled_helper.h
index daeb7bfa4d..daeb7bfa4d 100644
--- a/keyboards/cassette42/common/oled_helper.h
+++ b/keyboards/25keys/cassette42/common/oled_helper.h
diff --git a/keyboards/25keys/cassette42/config.h b/keyboards/25keys/cassette42/config.h
new file mode 100644
index 0000000000..cac03f6346
--- /dev/null
+++ b/keyboards/25keys/cassette42/config.h
@@ -0,0 +1,52 @@
+/*
+Copyright 2019 monksoffunk
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xCA42
+#define DEVICE_VER 0x0001
+#define MANUFACTURER monksoffunk
+#define PRODUCT cassette42
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 6
+
+#define DIRECT_PINS {{ B4, F6, F5, F4, B5, F7 }}
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { B6, B3 }
+#define ENCODERS_PAD_B { B2, B1 }
+#define ENCODER_RESOLUTION 4
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+# define RGBLED_NUM 5
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 8
+# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+# define RGBLIGHT_ANIMATIONS
+#endif
+
+#define OLED_FONT_H "keyboards/25keys/cassette42/common/glcdfont.c"
diff --git a/keyboards/cassette42/info.json b/keyboards/25keys/cassette42/info.json
index 87c67df951..87c67df951 100644
--- a/keyboards/cassette42/info.json
+++ b/keyboards/25keys/cassette42/info.json
diff --git a/keyboards/cassette42/keymaps/default/keymap.c b/keyboards/25keys/cassette42/keymaps/default/keymap.c
index 4943be9c7b..4943be9c7b 100644
--- a/keyboards/cassette42/keymaps/default/keymap.c
+++ b/keyboards/25keys/cassette42/keymaps/default/keymap.c
diff --git a/keyboards/cassette42/keymaps/default/readme.md b/keyboards/25keys/cassette42/keymaps/default/readme.md
index cf1a7bc433..cf1a7bc433 100644
--- a/keyboards/cassette42/keymaps/default/readme.md
+++ b/keyboards/25keys/cassette42/keymaps/default/readme.md
diff --git a/keyboards/25keys/cassette42/readme.md b/keyboards/25keys/cassette42/readme.md
new file mode 100644
index 0000000000..cb6b2cc5b7
--- /dev/null
+++ b/keyboards/25keys/cassette42/readme.md
@@ -0,0 +1,15 @@
+# Cassette42
+
+![cassette42](https://pbs.twimg.com/media/D63q5S0UcAE9Rfj?format=jpg&name=large)
+
+An audio control pad with 4 switches and 2 rotary encoders.
+
+* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
+* Hardware Supported: Cassette 42 PCB
+* Hardware Availability: [Yushakobo Shop](https://yushakobo.jp/shop/cassette42/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 25keys/cassette42:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cassette42/rules.mk b/keyboards/25keys/cassette42/rules.mk
index 756fb8ec92..756fb8ec92 100644
--- a/keyboards/cassette42/rules.mk
+++ b/keyboards/25keys/cassette42/rules.mk
diff --git a/keyboards/7skb/.noci b/keyboards/25keys/zinc/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/7skb/.noci
+++ b/keyboards/25keys/zinc/.noci
diff --git a/keyboards/7skb/config.h b/keyboards/25keys/zinc/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/7skb/config.h
+++ b/keyboards/25keys/zinc/config.h
diff --git a/keyboards/zinc/info.json b/keyboards/25keys/zinc/info.json
index 8064e94e2f..8064e94e2f 100644
--- a/keyboards/zinc/info.json
+++ b/keyboards/25keys/zinc/info.json
diff --git a/keyboards/zinc/keymaps/default/config.h b/keyboards/25keys/zinc/keymaps/default/config.h
index 2185dc9ebe..2185dc9ebe 100644
--- a/keyboards/zinc/keymaps/default/config.h
+++ b/keyboards/25keys/zinc/keymaps/default/config.h
diff --git a/keyboards/zinc/keymaps/default/keymap.c b/keyboards/25keys/zinc/keymaps/default/keymap.c
index 449c635a5d..449c635a5d 100644
--- a/keyboards/zinc/keymaps/default/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/default/keymap.c
diff --git a/keyboards/zinc/keymaps/default/readme_en.md b/keyboards/25keys/zinc/keymaps/default/readme_en.md
index 3be6b29616..3be6b29616 100644
--- a/keyboards/zinc/keymaps/default/readme_en.md
+++ b/keyboards/25keys/zinc/keymaps/default/readme_en.md
diff --git a/keyboards/zinc/keymaps/default/readme_jp.md b/keyboards/25keys/zinc/keymaps/default/readme_jp.md
index 8132f5036e..8132f5036e 100644
--- a/keyboards/zinc/keymaps/default/readme_jp.md
+++ b/keyboards/25keys/zinc/keymaps/default/readme_jp.md
diff --git a/keyboards/zinc/keymaps/default/rules.mk b/keyboards/25keys/zinc/keymaps/default/rules.mk
index 09b121d26f..09b121d26f 100644
--- a/keyboards/zinc/keymaps/default/rules.mk
+++ b/keyboards/25keys/zinc/keymaps/default/rules.mk
diff --git a/keyboards/zinc/keymaps/ginjake/config.h b/keyboards/25keys/zinc/keymaps/ginjake/config.h
index 2185dc9ebe..2185dc9ebe 100644
--- a/keyboards/zinc/keymaps/ginjake/config.h
+++ b/keyboards/25keys/zinc/keymaps/ginjake/config.h
diff --git a/keyboards/zinc/keymaps/ginjake/keymap.c b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
index 323d2c7d44..323d2c7d44 100644
--- a/keyboards/zinc/keymaps/ginjake/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
diff --git a/keyboards/zinc/keymaps/ginjake/readme_jp.md b/keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md
index dfedb37c15..dfedb37c15 100644
--- a/keyboards/zinc/keymaps/ginjake/readme_jp.md
+++ b/keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md
diff --git a/keyboards/zinc/keymaps/ginjake/rules.mk b/keyboards/25keys/zinc/keymaps/ginjake/rules.mk
index f2cb3633c6..f2cb3633c6 100644
--- a/keyboards/zinc/keymaps/ginjake/rules.mk
+++ b/keyboards/25keys/zinc/keymaps/ginjake/rules.mk
diff --git a/keyboards/zinc/keymaps/monks/config.h b/keyboards/25keys/zinc/keymaps/monks/config.h
index 2185dc9ebe..2185dc9ebe 100644
--- a/keyboards/zinc/keymaps/monks/config.h
+++ b/keyboards/25keys/zinc/keymaps/monks/config.h
diff --git a/keyboards/zinc/keymaps/monks/keymap.c b/keyboards/25keys/zinc/keymaps/monks/keymap.c
index a30e8ac5fc..a30e8ac5fc 100644
--- a/keyboards/zinc/keymaps/monks/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/monks/keymap.c
diff --git a/keyboards/zinc/keymaps/monks/readme_jp.md b/keyboards/25keys/zinc/keymaps/monks/readme_jp.md
index e518eb7696..e518eb7696 100644
--- a/keyboards/zinc/keymaps/monks/readme_jp.md
+++ b/keyboards/25keys/zinc/keymaps/monks/readme_jp.md
diff --git a/keyboards/zinc/keymaps/monks/rules.mk b/keyboards/25keys/zinc/keymaps/monks/rules.mk
index 46646f919c..46646f919c 100644
--- a/keyboards/zinc/keymaps/monks/rules.mk
+++ b/keyboards/25keys/zinc/keymaps/monks/rules.mk
diff --git a/keyboards/zinc/keymaps/toshi0383/config.h b/keyboards/25keys/zinc/keymaps/toshi0383/config.h
index 0d53d44247..0d53d44247 100644
--- a/keyboards/zinc/keymaps/toshi0383/config.h
+++ b/keyboards/25keys/zinc/keymaps/toshi0383/config.h
diff --git a/keyboards/zinc/keymaps/toshi0383/keymap.c b/keyboards/25keys/zinc/keymaps/toshi0383/keymap.c
index 72c3fee6f3..72c3fee6f3 100644
--- a/keyboards/zinc/keymaps/toshi0383/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/toshi0383/keymap.c
diff --git a/keyboards/zinc/keymaps/toshi0383/rules.mk b/keyboards/25keys/zinc/keymaps/toshi0383/rules.mk
index 9fef6963a1..9fef6963a1 100644
--- a/keyboards/zinc/keymaps/toshi0383/rules.mk
+++ b/keyboards/25keys/zinc/keymaps/toshi0383/rules.mk
diff --git a/keyboards/zinc/keymaps/via/config.h b/keyboards/25keys/zinc/keymaps/via/config.h
index 233977feaf..233977feaf 100644
--- a/keyboards/zinc/keymaps/via/config.h
+++ b/keyboards/25keys/zinc/keymaps/via/config.h
diff --git a/keyboards/zinc/keymaps/via/keymap.c b/keyboards/25keys/zinc/keymaps/via/keymap.c
index 7c961c710d..7c961c710d 100644
--- a/keyboards/zinc/keymaps/via/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/via/keymap.c
diff --git a/keyboards/zinc/keymaps/via/readme_en.md b/keyboards/25keys/zinc/keymaps/via/readme_en.md
index 3c73a18d88..3c73a18d88 100644
--- a/keyboards/zinc/keymaps/via/readme_en.md
+++ b/keyboards/25keys/zinc/keymaps/via/readme_en.md
diff --git a/keyboards/zinc/keymaps/via/readme_jp.md b/keyboards/25keys/zinc/keymaps/via/readme_jp.md
index a929eb07dd..a929eb07dd 100644
--- a/keyboards/zinc/keymaps/via/readme_jp.md
+++ b/keyboards/25keys/zinc/keymaps/via/readme_jp.md
diff --git a/keyboards/zinc/keymaps/via/rules.mk b/keyboards/25keys/zinc/keymaps/via/rules.mk
index 0ea4be9c04..0ea4be9c04 100644
--- a/keyboards/zinc/keymaps/via/rules.mk
+++ b/keyboards/25keys/zinc/keymaps/via/rules.mk
diff --git a/keyboards/25keys/zinc/readme.md b/keyboards/25keys/zinc/readme.md
new file mode 100644
index 0000000000..61172f1635
--- /dev/null
+++ b/keyboards/25keys/zinc/readme.md
@@ -0,0 +1,17 @@
+Zinc
+===
+
+![Zinc](https://i.imgur.com/vxlpWkD.jpg)
+
+40% row-staggered split keyboard.
+
+* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk/) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
+* Hardware Supported: Zinc PCB
+* Hardware Availability: (https://twitter.com/monksoffunkJP)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 25keys/zinc/rev1:default
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel17/.noci b/keyboards/25keys/zinc/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel17/.noci
+++ b/keyboards/25keys/zinc/rev1/.noci
diff --git a/keyboards/zinc/rev1/config.h b/keyboards/25keys/zinc/rev1/config.h
index a0bc34ece4..a0bc34ece4 100644
--- a/keyboards/zinc/rev1/config.h
+++ b/keyboards/25keys/zinc/rev1/config.h
diff --git a/keyboards/zinc/rev1/info.json b/keyboards/25keys/zinc/rev1/info.json
index 1ed5f9130a..1ed5f9130a 100644
--- a/keyboards/zinc/rev1/info.json
+++ b/keyboards/25keys/zinc/rev1/info.json
diff --git a/keyboards/zinc/rev1/post_config.h b/keyboards/25keys/zinc/rev1/post_config.h
index b0254f6bab..b0254f6bab 100644
--- a/keyboards/zinc/rev1/post_config.h
+++ b/keyboards/25keys/zinc/rev1/post_config.h
diff --git a/keyboards/zinc/rev1/rev1.c b/keyboards/25keys/zinc/rev1/rev1.c
index 139919d5a6..139919d5a6 100644
--- a/keyboards/zinc/rev1/rev1.c
+++ b/keyboards/25keys/zinc/rev1/rev1.c
diff --git a/keyboards/zinc/rev1/rev1.h b/keyboards/25keys/zinc/rev1/rev1.h
index 1bf2c565ae..1bf2c565ae 100644
--- a/keyboards/zinc/rev1/rev1.h
+++ b/keyboards/25keys/zinc/rev1/rev1.h
diff --git a/keyboards/zinc/rev1/rules.mk b/keyboards/25keys/zinc/rev1/rules.mk
index d38a618090..d38a618090 100644
--- a/keyboards/zinc/rev1/rules.mk
+++ b/keyboards/25keys/zinc/rev1/rules.mk
diff --git a/keyboards/angel17/alpha/.noci b/keyboards/25keys/zinc/reva/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel17/alpha/.noci
+++ b/keyboards/25keys/zinc/reva/.noci
diff --git a/keyboards/zinc/reva/config.h b/keyboards/25keys/zinc/reva/config.h
index 378fd9e6d9..378fd9e6d9 100644
--- a/keyboards/zinc/reva/config.h
+++ b/keyboards/25keys/zinc/reva/config.h
diff --git a/keyboards/zinc/reva/info.json b/keyboards/25keys/zinc/reva/info.json
index de1d2933ec..de1d2933ec 100644
--- a/keyboards/zinc/reva/info.json
+++ b/keyboards/25keys/zinc/reva/info.json
diff --git a/keyboards/zinc/reva/post_config.h b/keyboards/25keys/zinc/reva/post_config.h
index b0254f6bab..b0254f6bab 100644
--- a/keyboards/zinc/reva/post_config.h
+++ b/keyboards/25keys/zinc/reva/post_config.h
diff --git a/keyboards/zinc/reva/reva.c b/keyboards/25keys/zinc/reva/reva.c
index 139919d5a6..139919d5a6 100644
--- a/keyboards/zinc/reva/reva.c
+++ b/keyboards/25keys/zinc/reva/reva.c
diff --git a/keyboards/zinc/reva/reva.h b/keyboards/25keys/zinc/reva/reva.h
index 1bf2c565ae..1bf2c565ae 100644
--- a/keyboards/zinc/reva/reva.h
+++ b/keyboards/25keys/zinc/reva/reva.h
diff --git a/keyboards/zinc/reva/rules.mk b/keyboards/25keys/zinc/reva/rules.mk
index 83895bdcb8..83895bdcb8 100644
--- a/keyboards/zinc/reva/rules.mk
+++ b/keyboards/25keys/zinc/reva/rules.mk
diff --git a/keyboards/25keys/zinc/rules.mk b/keyboards/25keys/zinc/rules.mk
new file mode 100644
index 0000000000..2fd608c56c
--- /dev/null
+++ b/keyboards/25keys/zinc/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGB_MATRIX_ENABLE = no
+RGB_MATRIX_DRIVER = WS2812
+
+DEFAULT_FOLDER = 25keys/zinc/rev1
+
+#SRC += i2c.c
+SRC += serial.c
diff --git a/keyboards/zinc/zinc.c b/keyboards/25keys/zinc/zinc.c
index 139919d5a6..139919d5a6 100644
--- a/keyboards/zinc/zinc.c
+++ b/keyboards/25keys/zinc/zinc.c
diff --git a/keyboards/25keys/zinc/zinc.h b/keyboards/25keys/zinc/zinc.h
new file mode 100644
index 0000000000..8a80538e4c
--- /dev/null
+++ b/keyboards/25keys/zinc/zinc.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#ifdef KEYBOARD_25keys_zinc_reva
+ #include "reva.h"
+#endif
+#ifdef KEYBOARD_25keys_zinc_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk b/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk
index 231a883719..5b5f23fbce 100644
--- a/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk
+++ b/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk
@@ -1,3 +1,4 @@
POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = custom
SRC += pimoroni_trackball.c
MOUSEKEY_ENABLE = no
diff --git a/keyboards/40percentclub/25/config.h b/keyboards/40percentclub/25/config.h
index 8ff5264671..d478131e95 100644
--- a/keyboards/40percentclub/25/config.h
+++ b/keyboards/40percentclub/25/config.h
@@ -19,9 +19,9 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x4025
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x0F25
+#define VENDOR_ID 0x4025 // 40%
+#define PRODUCT_ID 0x0F25
+#define DEVICE_VER 0x0100
#define MANUFACTURER di0ib
#define PRODUCT The 5x5 Keyboard
diff --git a/keyboards/40percentclub/5x5/config.h b/keyboards/40percentclub/5x5/config.h
index c9a83de737..c3bb5d6380 100644
--- a/keyboards/40percentclub/5x5/config.h
+++ b/keyboards/40percentclub/5x5/config.h
@@ -5,9 +5,9 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x4025
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x05B5
+#define VENDOR_ID 0x4025 // 40%
+#define PRODUCT_ID 0x05B5
+#define DEVICE_VER 0x0100
#define MANUFACTURER di0ib
#define PRODUCT The 5x5 Keyboard
diff --git a/keyboards/40percentclub/6lit/config.h b/keyboards/40percentclub/6lit/config.h
index f5c0ea3040..ae4ee1bad8 100644
--- a/keyboards/40percentclub/6lit/config.h
+++ b/keyboards/40percentclub/6lit/config.h
@@ -19,9 +19,9 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x4025
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x0F61
+#define VENDOR_ID 0x4025 // 40%
+#define PRODUCT_ID 0x0F61
+#define DEVICE_VER 0x0100
#define MANUFACTURER di0ib
#define PRODUCT The 6lit Macropad
diff --git a/keyboards/40percentclub/foobar/config.h b/keyboards/40percentclub/foobar/config.h
index a65b6e51bf..1e91d3bd10 100644
--- a/keyboards/40percentclub/foobar/config.h
+++ b/keyboards/40percentclub/foobar/config.h
@@ -19,9 +19,9 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x4025
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x0F00
+#define VENDOR_ID 0x4025 // 40%
+#define PRODUCT_ID 0x0F00
+#define DEVICE_VER 0x0100
#define MANUFACTURER di0ib
#define PRODUCT The foobar Keyboard
diff --git a/keyboards/40percentclub/half_n_half/config.h b/keyboards/40percentclub/half_n_half/config.h
index f79f83839c..0c819031da 100644
--- a/keyboards/40percentclub/half_n_half/config.h
+++ b/keyboards/40percentclub/half_n_half/config.h
@@ -20,9 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x4025
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x4A1F
+#define VENDOR_ID 0x4025 // 40%
+#define PRODUCT_ID 0x4A1F
+#define DEVICE_VER 0x0100
#define MANUFACTURER di0ib
#define PRODUCT half_n_half
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk b/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
index 160b3684b3..975c581883 100644
--- a/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
+++ b/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
@@ -5,5 +5,5 @@ F_CPU = 8000000
# change yes to no to disable
#
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
BACKLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c
index 0fa7838dfd..4eb2c190c1 100644
--- a/keyboards/40percentclub/ut47/keymaps/default/keymap.c
+++ b/keyboards/40percentclub/ut47/keymaps/default/keymap.c
@@ -15,7 +15,7 @@
*/
#include QMK_KEYBOARD_H
#ifdef LED_ENABLE
- #include "protocol/serial.h"
+ #include "uart.h"
#endif
#define LT3_TAB LT(3, KC_TAB)
@@ -108,11 +108,11 @@ LAYOUT( /* Tab */
//LED keymap functions
#ifdef LED_ENABLE
void led_chmode(void) {
- serial_send(101);
+ uart_write(0x65);
}
void led_toggle(void) {
- serial_send(100);
+ uart_write(0x64);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
index 0c1c2e7599..8a0ba7b391 100644
--- a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
+++ b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
@@ -15,7 +15,7 @@
*/
#include QMK_KEYBOARD_H
#ifdef LED_ENABLE
- #include "protocol/serial.h"
+ #include "uart.h"
#endif
#define LT3_TAB LT(3, KC_TAB)
@@ -108,11 +108,11 @@ LAYOUT( /* Tab */
//LED keymap functions
#ifdef LED_ENABLE
void led_chmode(void) {
- serial_send(101);
+ uart_write(0x65);
}
void led_toggle(void) {
- serial_send(100);
+ uart_write(0x64);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
index 52372e2857..5e79cdb9a4 100644
--- a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
+++ b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
@@ -15,7 +15,7 @@
*/
#include QMK_KEYBOARD_H
#ifdef LED_ENABLE
- #include "protocol/serial.h"
+ #include "uart.h"
#endif
@@ -151,11 +151,11 @@ LAYOUT( /* GAMING, toggled on and off - L5 */
//LED keymap functions
#ifdef LED_ENABLE
void led_chmode(void) {
- serial_send(101);
+ uart_write(0x65);
}
void led_toggle(void) {
- serial_send(100);
+ uart_write(0x64);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
index ae8ad3e378..75dba3a2d4 100644
--- a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
+++ b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
@@ -15,7 +15,7 @@
*/
#include QMK_KEYBOARD_H
#ifdef LED_ENABLE
- #include "protocol/serial.h"
+ #include "uart.h"
#endif
#define LT3_TAB LT(3, KC_TAB)
@@ -60,11 +60,11 @@ LAYOUT( /* Tab */
//LED keymap functions
#ifdef LED_ENABLE
void led_chmode(void) {
- serial_send(101);
+ uart_write(0x65);
}
void led_toggle(void) {
- serial_send(100);
+ uart_write(0x64);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c
index e47c7f8e13..89537592c5 100644
--- a/keyboards/40percentclub/ut47/matrix.c
+++ b/keyboards/40percentclub/ut47/matrix.c
@@ -26,10 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "util.h"
#include "matrix.h"
-#ifdef LED_ENABLE
- #include "protocol/serial.h"
-#endif
-
#ifndef DEBOUNCE
# define DEBOUNCE 5
@@ -69,10 +65,6 @@ void matrix_init(void)
matrix[i] = 0;
matrix_debouncing[i] = 0;
}
-
-#ifdef LED_ENABLE
- serial_init();
-#endif
}
uint8_t matrix_scan(void)
@@ -104,12 +96,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk
index 29cee474ff..6c9805e0fc 100644
--- a/keyboards/40percentclub/ut47/rules.mk
+++ b/keyboards/40percentclub/ut47/rules.mk
@@ -18,4 +18,5 @@ AUDIO_ENABLE = no # Audio output
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC += matrix.c protocol/serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/40percentclub/ut47/ut47.c b/keyboards/40percentclub/ut47/ut47.c
index 9054335e5a..864edaeb57 100644
--- a/keyboards/40percentclub/ut47/ut47.c
+++ b/keyboards/40percentclub/ut47/ut47.c
@@ -15,7 +15,11 @@
*/
#include "ut47.h"
#ifdef LED_ENABLE
- #include "protocol/serial.h"
+ #include "uart.h"
+
+void matrix_init_kb() {
+ uart_init(9600);
+}
#endif
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
@@ -23,7 +27,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// runs for every action, just before processing by the firmware
if (record->event.pressed) {
#ifdef LED_ENABLE
- serial_send((record->event.key.row*16)+record->event.key.col);
+ uart_write((record->event.key.row*16)+record->event.key.col);
#endif
}
return process_record_user(keycode, record);
diff --git a/keyboards/6ball/readme.md b/keyboards/6ball/readme.md
deleted file mode 100644
index c9548453a9..0000000000
--- a/keyboards/6ball/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-6-Ball
-======
-
-A circular 6-key macropad made by ThatCanadian.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Pro Micro ATmega32U4
-Hardware Availability: ThatCanadian
-
-Make example for this keyboard (after setting up your build environment):
-
- make 6ball:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/7skb/7skb.h b/keyboards/7skb/7skb.h
deleted file mode 100644
index 9e23d0ad3c..0000000000
--- a/keyboards/7skb/7skb.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_7skb_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/7skb/readme.md b/keyboards/7skb/readme.md
deleted file mode 100644
index 18e4eef3ea..0000000000
--- a/keyboards/7skb/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# 7skb
-
-![7skb](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20191124/20191124025208.png)
-
-This is 63 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: 7skb PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1673395)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 7skb:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/7skb-mx-build-guide)
diff --git a/keyboards/7skb/rules.mk b/keyboards/7skb/rules.mk
deleted file mode 100644
index ea7399dc75..0000000000
--- a/keyboards/7skb/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = 7skb/rev1
diff --git a/keyboards/7splus/readme.md b/keyboards/7splus/readme.md
deleted file mode 100644
index a733595249..0000000000
--- a/keyboards/7splus/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# 7sPlus
-
-![7splus](https://s2.booth.pm/1d33594d-0c5f-4f93-baf5-2e89e0d99afc/i/2425503/044ca31d-6715-475c-b8c4-1dfdeb57b682_base_resized.jpg)
-
-This is 85 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: 7sPlus PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2425503)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 7splus:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/7splus-build-guide)
diff --git a/keyboards/acr60/readme.md b/keyboards/acr60/readme.md
deleted file mode 100644
index 70b617dfda..0000000000
--- a/keyboards/acr60/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# ACR60
-
-![acr60](https://cdn.shopify.com/s/files/1/1697/5323/products/20170522001035_1024x1024.jpg?v=1504725199)
-
-A customizable 60% keyboard made and sold by mechkeys.ca [More info on MECHKEYS](https://mechkeys.ca)
-
-* Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
-* Hardware Supported: ACR60
-* Hardware Availability: [~~MECHKEYS~~](https://mechkeys.ca/products/acr60) (no longer available)
-
-Make example for this keyboard (after setting up your build environment):
-
- make acr60:default
-
-Flashing example for this keyboard:
-
- make acr60:default:flash
-
-To reset the board into bootloader mode, do one of the following:
-
-* Tap the Reset switch mounted on the bottom side of the PCB
-* Hold Space+B while connecting the USB cable
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).`
diff --git a/keyboards/adalyn/readme.md b/keyboards/adalyn/readme.md
deleted file mode 100644
index ee24bead61..0000000000
--- a/keyboards/adalyn/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Adalyn
-
-![Adalyn](https://i.imgur.com/3mGQlh2.jpg)
-
-*A cool QAZ-Alice hybrid designed by [Marv](https://github.com/MarvFPV/Adalyn) with a PCB by [tominabox1](https://github.com/tominabox1)*
-* Keyboard Maintainer: [tominabox1](https://github.com/tominabox1)
-* Hardware Supported: Adalyn PCB, atmega32u4
-* Hardware Availability: Open source on @tominabox1 GitHub
-
-Make example for this keyboard (after setting up your build environment):
- make adalyn:default
-Flashing example for this keyboard:
- make adalyn: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 (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/adalyn/rules.mk b/keyboards/adalyn/rules.mk
deleted file mode 100644
index 078a9bca06..0000000000
--- a/keyboards/adalyn/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# 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
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-COMBO_ENABLE = no
diff --git a/keyboards/ai03/orbit/config.h b/keyboards/ai03/orbit/config.h
index 9ad384c8ff..0e4f4c3baf 100644
--- a/keyboards/ai03/orbit/config.h
+++ b/keyboards/ai03/orbit/config.h
@@ -44,13 +44,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { C7, B4, D7, D6, D4, F1, F0 }
#define MATRIX_ROW_PINS_RIGHT { B6, B5, B4, D7, E6 }
#define MATRIX_COL_PINS_RIGHT { D4, D6, F1, F0, F4, F5, C6 }
-
-#define SPLIT_HAND_PIN D5
-
-//#define USE_I2C
-
-#define SELECT_SOFT_SERIAL_SPEED 1
-
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
@@ -60,6 +53,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+#define SELECT_SOFT_SERIAL_SPEED 1
+
+#define SPLIT_LED_STATE_ENABLE
+#define SPLIT_LAYER_STATE_ENABLE
+
+#define SPLIT_HAND_PIN D5
#define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
diff --git a/keyboards/ai03/orbit/keymaps/default/keymap.c b/keyboards/ai03/orbit/keymaps/default/keymap.c
index fa383d7c00..c9696ccde6 100644
--- a/keyboards/ai03/orbit/keymaps/default/keymap.c
+++ b/keyboards/ai03/orbit/keymaps/default/keymap.c
@@ -48,25 +48,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case MANUAL:
- if (record->event.pressed)
- {
- // Keypress
+ if (record->event.pressed) {
SEND_STRING("https://kb.ai03.me/redir/orbit");
- }
- else
- {
- // Key release
}
break;
case DBLZERO:
- if (record->event.pressed)
- {
- // Keypress
+ if (record->event.pressed) {
SEND_STRING("00");
- }
- else
- {
- // Key release
}
break;
}
diff --git a/keyboards/ai03/orbit/matrix.c b/keyboards/ai03/orbit/matrix.c
deleted file mode 100644
index b8e3296686..0000000000
--- a/keyboards/ai03/orbit/matrix.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "config.h"
-#include "split_flags.h"
-#include "quantum.h"
-#include "debounce.h"
-#include "transport.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-#define ERROR_DISCONNECT_COUNT 5
-
-//#define ROWS_PER_HAND (MATRIX_ROWS / 2)
-
-#ifdef DIRECT_PINS
-static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
-#else
-static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t raw_matrix[ROWS_PER_HAND];
-
-// row offsets for each hand
-uint8_t thisHand, thatHand;
-
-// user-defined overridable functions
-
-__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__((weak)) void matrix_init_user(void) {}
-
-__attribute__((weak)) void matrix_scan_user(void) {}
-
-__attribute__((weak)) void matrix_slave_scan_user(void) {}
-
-// helper functions
-
-inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
-
-inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
-
-bool matrix_is_modified(void) {
- if (debounce_active()) return false;
- return true;
-}
-
-inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
-
-inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
-
-void matrix_print(void) {
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row);
- print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
-
-// matrix code
-
-#ifdef DIRECT_PINS
-
-static void init_pins(void) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- for (int col = 0; col < MATRIX_COLS; col++) {
- pin_t pin = direct_pins[row][col];
- if (pin != NO_PIN) {
- setPinInputHigh(pin);
- }
- }
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
- matrix_row_t last_row_value = current_matrix[current_row];
- current_matrix[current_row] = 0;
-
- for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
- pin_t pin = direct_pins[current_row][col_index];
- if (pin != NO_PIN) {
- current_matrix[current_row] |= readPin(pin) ? 0 : (ROW_SHIFTER << col_index);
- }
- }
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-#elif (DIODE_DIRECTION == COL2ROW)
-
-static void select_row(uint8_t row) {
- setPinOutput(row_pins[row]);
- writePinLow(row_pins[row]);
-}
-
-static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
-
-static void unselect_rows(void) {
- for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static void init_pins(void) {
- unselect_rows();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void select_col(uint8_t col) {
- setPinOutput(col_pins[col]);
- writePinLow(col_pins[col]);
-}
-
-static void unselect_col(uint8_t col) { setPinInputHigh(col_pins[col]); }
-
-static void unselect_cols(void) {
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static void init_pins(void) {
- unselect_cols();
- for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) {
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if (readPin(row_pins[row_index])) {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- } else {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-#endif
-
-void matrix_init(void) {
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
-
- // Set pinout for right half if pinout for that half is defined
- if (!isLeftHand) {
-#ifdef MATRIX_ROW_PINS_RIGHT
- const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- row_pins[i] = row_pins_right[i];
- }
-#endif
-#ifdef MATRIX_COL_PINS_RIGHT
- const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_COLS; i++) {
- col_pins[i] = col_pins_right[i];
- }
-#endif
- }
-
- thisHand = isLeftHand ? 0 : (ROWS_PER_HAND);
- thatHand = ROWS_PER_HAND - thisHand;
-
- // initialize key pins
- init_pins();
-
- // initialize matrix state: all keys off
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- }
-
- debounce_init(ROWS_PER_HAND);
-
- matrix_init_quantum();
-}
-
-uint8_t _matrix_scan(void) {
- bool changed = false;
-
-#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
- changed |= read_cols_on_row(raw_matrix, current_row);
- }
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- changed |= read_rows_on_col(raw_matrix, current_col);
- }
-#endif
-
- debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
-
- return 1;
-}
-
-uint8_t matrix_scan(void) {
- uint8_t ret = _matrix_scan();
-
- if (is_keyboard_master()) {
- static uint8_t error_count;
-
- if (!transport_master(matrix + thatHand)) {
- error_count++;
-
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[thatHand + i] = 0;
- }
- }
- } else {
- error_count = 0;
- }
-
- matrix_scan_quantum();
- } else {
- transport_slave(matrix + thisHand);
- matrix_slave_scan_user();
- }
-
- return ret;
-}
diff --git a/keyboards/ai03/orbit/orbit.c b/keyboards/ai03/orbit/orbit.c
index 97553e318a..5097f9cd90 100644
--- a/keyboards/ai03/orbit/orbit.c
+++ b/keyboards/ai03/orbit/orbit.c
@@ -15,196 +15,124 @@
*/
#include "orbit.h"
#include "split_util.h"
-#include "transport.h"
+void led_init_ports(void) {
+ // Initialize indicator LEDs to output
+ if (isLeftHand) {
+ setPinOutput(C6);
+ setPinOutput(B6);
+ setPinOutput(B5);
+ } else {
+ setPinOutput(F6);
+ setPinOutput(F7);
+ setPinOutput(C7);
+ }
+
+ set_layer_indicators(0);
+}
// Call led_toggle to set LEDs easily
// LED IDs:
-//
+//
// (LEFT) 0 1 2 | 3 4 5 (RIGHT)
-
-void led_toggle(int id, bool on) {
-
- if (isLeftHand) {
- switch(id) {
- case 0:
- // Left hand C6
- if (on)
- //PORTC |= (1<<6);
- writePinHigh(C6);
- else
- //PORTC &= ~(1<<6);
- writePinLow(C6);
- break;
- case 1:
- // Left hand B6
- if (on)
- //PORTB |= (1<<6);
- writePinHigh(B6);
- else
- //PORTB &= ~(1<<6);
- writePinLow(B6);
- break;
- case 2:
- // Left hand B5
- if (on)
- //PORTB |= (1<<5);
- writePinHigh(B5);
- else
- //PORTB &= ~(1<<5);
- writePinLow(B5);
- break;
- default:
- break;
- }
- } else {
- switch(id) {
- case 3:
- // Right hand F6
- if (on)
- //PORTF |= (1<<6);
- writePinHigh(F6);
- else
- //PORTF &= ~(1<<6);
- writePinLow(F6);
- break;
- case 4:
- // Right hand F7
- if (on)
- //PORTF |= (1<<7);
- writePinHigh(F7);
- else
- //PORTF &= ~(1<<7);
- writePinLow(F7);
- break;
- case 5:
- // Right hand C7
- if (on)
- //PORTC |= (1<<7);
- writePinHigh(C7);
- else
- //PORTC &= ~(1<<7);
- writePinLow(C7);
- break;
- default:
- break;
- }
- }
+void led_toggle(uint8_t id, bool on) {
+ if (isLeftHand) {
+ switch (id) {
+ case 0:
+ // Left hand C6
+ writePin(C6, on);
+ break;
+ case 1:
+ // Left hand B6
+ writePin(B6, on);
+ break;
+ case 2:
+ // Left hand B5
+ writePin(B5, on);
+ break;
+ default:
+ break;
+ }
+ } else {
+ switch (id) {
+ case 3:
+ // Right hand F6
+ writePin(F6, on);
+ break;
+ case 4:
+ // Right hand F7
+ writePin(F7, on);
+ break;
+ case 5:
+ // Right hand C7
+ writePin(C7, on);
+ break;
+ default:
+ break;
+ }
+ }
}
// Set all LEDs at once using an array of 6 booleans
// LED IDs:
-//
+//
// (LEFT) 0 1 2 | 3 4 5 (RIGHT)
-//
+//
// Ex. set_all_leds({ false, false, false, true, true, true }) would turn off left hand, turn on right hand
void set_all_leds(bool leds[6]) {
- for (int i = 0; i < 6; i++) {
- led_toggle(i, leds[i]);
- }
+ for (int i = 0; i < 6; i++) {
+ led_toggle(i, leds[i]);
+ }
}
void set_layer_indicators(uint8_t layer) {
-
- switch (layer)
- {
- case 0:
- led_toggle(0, true);
- led_toggle(1, false);
- led_toggle(2, false);
- break;
- case 1:
- led_toggle(0, true);
- led_toggle(1, true);
- led_toggle(2, false);
- break;
- case 2:
- led_toggle(0, true);
- led_toggle(1, true);
- led_toggle(2, true);
- break;
- case 3:
- led_toggle(0, false);
- led_toggle(1, true);
- led_toggle(2, true);
- break;
- case 4:
- led_toggle(0, false);
- led_toggle(1, false);
- led_toggle(2, true);
- break;
- default:
- led_toggle(0, true);
- led_toggle(1, false);
- led_toggle(2, true);
- break;
- }
-
+ switch (layer) {
+ case 0:
+ led_toggle(0, true);
+ led_toggle(1, false);
+ led_toggle(2, false);
+ break;
+ case 1:
+ led_toggle(0, true);
+ led_toggle(1, true);
+ led_toggle(2, false);
+ break;
+ case 2:
+ led_toggle(0, true);
+ led_toggle(1, true);
+ led_toggle(2, true);
+ break;
+ case 3:
+ led_toggle(0, false);
+ led_toggle(1, true);
+ led_toggle(2, true);
+ break;
+ case 4:
+ led_toggle(0, false);
+ led_toggle(1, false);
+ led_toggle(2, true);
+ break;
+ default:
+ led_toggle(0, true);
+ led_toggle(1, false);
+ led_toggle(2, true);
+ break;
+ }
}
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- // Initialize indicator LEDs to output
- if (isLeftHand)
- {
- setPinOutput(C6);
- setPinOutput(B6);
- setPinOutput(B5);
- //DDRC |= (1<<6);
- //DDRB |= (1<<6);
- //DDRB |= (1<<5);
- }
- else
- {
- setPinOutput(F6);
- setPinOutput(F7);
- setPinOutput(C7);
- //DDRF |= (1<<6);
- //DDRF |= (1<<7);
- //DDRC |= (1<<7);
- }
-
- set_layer_indicators(0);
-
- matrix_init_user();
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ led_toggle(3, led_state.num_lock);
+ led_toggle(4, led_state.caps_lock);
+ led_toggle(5, led_state.scroll_lock);
+ }
+ return res;
}
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- if (is_keyboard_master()) {
-
- serial_m2s_buffer.nlock_led = IS_LED_ON(usb_led, USB_LED_NUM_LOCK);
- serial_m2s_buffer.clock_led = IS_LED_ON(usb_led, USB_LED_CAPS_LOCK);
- serial_m2s_buffer.slock_led = IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK);
-
- led_toggle(3, IS_LED_ON(usb_led, USB_LED_NUM_LOCK));
- led_toggle(4, IS_LED_ON(usb_led, USB_LED_CAPS_LOCK));
- led_toggle(5, IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK));
-
- }
-
- led_set_user(usb_led);
-}
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ set_layer_indicators(get_highest_layer(state));
-uint32_t layer_state_set_kb(uint32_t state) {
-
- if (is_keyboard_master())
- {
- serial_m2s_buffer.current_layer = biton32(state);
-
- // If left half, do the LED toggle thing
- if (isLeftHand)
- {
- set_layer_indicators(biton32(state));
- }
-
- }
- // NOTE: Do not set slave LEDs here.
- // This is not called on slave
-
- return layer_state_set_user(state);
+ return layer_state_set_user(state);
}
diff --git a/keyboards/ai03/orbit/orbit.h b/keyboards/ai03/orbit/orbit.h
index 39f1ebb0e3..7f3b1aca32 100644
--- a/keyboards/ai03/orbit/orbit.h
+++ b/keyboards/ai03/orbit/orbit.h
@@ -18,6 +18,8 @@
#include "quantum.h"
+#define XXX KC_NO
+
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
@@ -26,17 +28,6 @@
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
-
-#ifdef USE_I2C
-#include <stddef.h>
-#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
-#endif
-#endif
-
-#define XXX KC_NO
-
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
@@ -56,6 +47,6 @@
{ R40, R41, R42, R43, R44, R45, XXX } \
}
-extern void led_toggle(int id, bool on);
+void led_toggle(uint8_t id, bool on);
void set_all_leds(bool leds[6]);
-extern void set_layer_indicators(uint8_t layer);
+void set_layer_indicators(uint8_t layer);
diff --git a/keyboards/ai03/orbit/readme.md b/keyboards/ai03/orbit/readme.md
index 58ba2079d5..0c320929b6 100644
--- a/keyboards/ai03/orbit/readme.md
+++ b/keyboards/ai03/orbit/readme.md
@@ -4,9 +4,9 @@
A split ergonomic keyboard project.
-Keyboard Maintainer: [ai03](https://github.com/ai03-2725)
-Hardware Supported: The [Orbit PCB](https://github.com/ai03-2725/Orbit)
-Hardware Availability: [This repository](https://github.com/ai03-2725/Orbit) has PCB files. Case group buy orders are currently closed.
+* Keyboard Maintainer: [ai03](https://github.com/ai03-2725)
+* Hardware Supported: The [Orbit PCB](https://github.com/ai03-2725/Orbit)
+* Hardware Availability: [This repository](https://github.com/ai03-2725/Orbit) has PCB files. Case group buy orders are currently closed.
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/ai03/orbit/rules.mk b/keyboards/ai03/orbit/rules.mk
index f98e2382f1..a0f1ab94a9 100644
--- a/keyboards/ai03/orbit/rules.mk
+++ b/keyboards/ai03/orbit/rules.mk
@@ -16,12 +16,4 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
-USE_I2C = no # I2C for split communication
-CUSTOM_MATRIX = yes # For providing custom matrix.c (in this case, override regular matrix.c with split matrix.c)
-# SPLIT_KEYBOARD = yes # Split keyboard flag disabled as manual edits had to be done to the split common files
-
-SRC += split_util.c \
- split_flags.c \
- serial.c \
- transport.c \
- matrix.c
+SPLIT_KEYBOARD = yes # Split keyboard flag disabled as manual edits had to be done to the split common files
diff --git a/keyboards/ai03/orbit/serial.c b/keyboards/ai03/orbit/serial.c
deleted file mode 100644
index 636dfa0906..0000000000
--- a/keyboards/ai03/orbit/serial.c
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- *
- * 2018-10-28 checked
- * avr-gcc 4.9.2
- * avr-gcc 5.4.0
- * avr-gcc 7.3.0
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifdef SOFT_SERIAL_PIN
-
-#ifdef __AVR_ATmega32U4__
- // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
- #ifdef USE_AVR_I2C
- #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
- #error Using ATmega32U4 I2C, so can not use PD0, PD1
- #endif
- #endif
-
- #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
- #define SERIAL_PIN_DDR DDRD
- #define SERIAL_PIN_PORT PORTD
- #define SERIAL_PIN_INPUT PIND
- #if SOFT_SERIAL_PIN == D0
- #define SERIAL_PIN_MASK _BV(PD0)
- #define EIMSK_BIT _BV(INT0)
- #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
- #define SERIAL_PIN_INTERRUPT INT0_vect
- #elif SOFT_SERIAL_PIN == D1
- #define SERIAL_PIN_MASK _BV(PD1)
- #define EIMSK_BIT _BV(INT1)
- #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
- #define SERIAL_PIN_INTERRUPT INT1_vect
- #elif SOFT_SERIAL_PIN == D2
- #define SERIAL_PIN_MASK _BV(PD2)
- #define EIMSK_BIT _BV(INT2)
- #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
- #define SERIAL_PIN_INTERRUPT INT2_vect
- #elif SOFT_SERIAL_PIN == D3
- #define SERIAL_PIN_MASK _BV(PD3)
- #define EIMSK_BIT _BV(INT3)
- #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
- #define SERIAL_PIN_INTERRUPT INT3_vect
- #endif
- #elif SOFT_SERIAL_PIN == E6
- #define SERIAL_PIN_DDR DDRE
- #define SERIAL_PIN_PORT PORTE
- #define SERIAL_PIN_INPUT PINE
- #define SERIAL_PIN_MASK _BV(PE6)
- #define EIMSK_BIT _BV(INT6)
- #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
- #define SERIAL_PIN_INTERRUPT INT6_vect
- #else
- #error invalid SOFT_SERIAL_PIN value
- #endif
-
-#else
- #error serial.c now support ATmega32U4 only
-#endif
-
-#define ALWAYS_INLINE __attribute__((always_inline))
-#define NO_INLINE __attribute__((noinline))
-#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
-
-// parity check
-#define ODD_PARITY 1
-#define EVEN_PARITY 0
-#define PARITY EVEN_PARITY
-
-#ifdef SERIAL_DELAY
- // custom setup in config.h
- // #define TID_SEND_ADJUST 2
- // #define SERIAL_DELAY 6 // micro sec
- // #define READ_WRITE_START_ADJUST 30 // cycles
- // #define READ_WRITE_WIDTH_ADJUST 8 // cycles
-#else
-// ============ Standard setups ============
-
-#ifndef SELECT_SOFT_SERIAL_SPEED
-#define SELECT_SOFT_SERIAL_SPEED 1
-// 0: about 189kbps (Experimental only)
-// 1: about 137kbps (default)
-// 2: about 75kbps
-// 3: about 39kbps
-// 4: about 26kbps
-// 5: about 20kbps
-#endif
-
-#if __GNUC__ < 6
- #define TID_SEND_ADJUST 14
-#else
- #define TID_SEND_ADJUST 2
-#endif
-
-#if SELECT_SOFT_SERIAL_SPEED == 0
- // Very High speed
- #define SERIAL_DELAY 4 // micro sec
- #if __GNUC__ < 6
- #define READ_WRITE_START_ADJUST 33 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_START_ADJUST 34 // cycles
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#elif SELECT_SOFT_SERIAL_SPEED == 1
- // High speed
- #define SERIAL_DELAY 6 // micro sec
- #if __GNUC__ < 6
- #define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_START_ADJUST 33 // cycles
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#elif SELECT_SOFT_SERIAL_SPEED == 2
- // Middle speed
- #define SERIAL_DELAY 12 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #if __GNUC__ < 6
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#elif SELECT_SOFT_SERIAL_SPEED == 3
- // Low speed
- #define SERIAL_DELAY 24 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #if __GNUC__ < 6
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#elif SELECT_SOFT_SERIAL_SPEED == 4
- // Very Low speed
- #define SERIAL_DELAY 36 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #if __GNUC__ < 6
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#elif SELECT_SOFT_SERIAL_SPEED == 5
- // Ultra Low speed
- #define SERIAL_DELAY 48 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #if __GNUC__ < 6
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#else
-#error invalid SELECT_SOFT_SERIAL_SPEED value
-#endif /* SELECT_SOFT_SERIAL_SPEED */
-#endif /* SERIAL_DELAY */
-
-#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
-#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
-
-#define SLAVE_INT_WIDTH_US 1
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
-#else
- #define SLAVE_INT_ACK_WIDTH_UNIT 2
- #define SLAVE_INT_ACK_WIDTH 4
-#endif
-
-static SSTD_t *Transaction_table = NULL;
-static uint8_t Transaction_table_size = 0;
-
-inline static void serial_delay(void) ALWAYS_INLINE;
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-inline static void serial_delay_half1(void) ALWAYS_INLINE;
-inline static
-void serial_delay_half1(void) {
- _delay_us(SERIAL_DELAY_HALF1);
-}
-
-inline static void serial_delay_half2(void) ALWAYS_INLINE;
-inline static
-void serial_delay_half2(void) {
- _delay_us(SERIAL_DELAY_HALF2);
-}
-
-inline static void serial_output(void) ALWAYS_INLINE;
-inline static
-void serial_output(void) {
- SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
-}
-
-// make the serial pin an input with pull-up resistor
-inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
-inline static
-void serial_input_with_pullup(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static void serial_low(void) ALWAYS_INLINE;
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static void serial_high(void) ALWAYS_INLINE;
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
-{
- Transaction_table = sstd_table;
- Transaction_table_size = (uint8_t)sstd_table_size;
- serial_output();
- serial_high();
-}
-
-void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
-{
- Transaction_table = sstd_table;
- Transaction_table_size = (uint8_t)sstd_table_size;
- serial_input_with_pullup();
-
- // Enable INT0-INT3,INT6
- EIMSK |= EIMSK_BIT;
-#if SERIAL_PIN_MASK == _BV(PE6)
- // Trigger on falling edge of INT6
- EICRB &= EICRx_BIT;
-#else
- // Trigger on falling edge of INT0-INT3
- EICRA &= EICRx_BIT;
-#endif
-}
-
-// Used by the sender to synchronize timing with the reciver.
-static void sync_recv(void) NO_INLINE;
-static
-void sync_recv(void) {
- for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
- }
- // This shouldn't hang if the target disconnects because the
- // serial line will float to high if the target does disconnect.
- while (!serial_read_pin());
-}
-
-// Used by the reciver to send a synchronization signal to the sender.
-static void sync_send(void) NO_INLINE;
-static
-void sync_send(void) {
- serial_low();
- serial_delay();
- serial_high();
-}
-
-// Reads a byte from the serial line
-static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
-static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
- uint8_t byte, i, p, pb;
-
- _delay_sub_us(READ_WRITE_START_ADJUST);
- for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
- serial_delay_half1(); // read the middle of pulses
- if( serial_read_pin() ) {
- byte = (byte << 1) | 1; p ^= 1;
- } else {
- byte = (byte << 1) | 0; p ^= 0;
- }
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
- }
- /* recive parity bit */
- serial_delay_half1(); // read the middle of pulses
- pb = serial_read_pin();
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
-
- *pterrcount += (p != pb)? 1 : 0;
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
-void serial_write_chunk(uint8_t data, uint8_t bit) {
- uint8_t b, p;
- for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
- if(data & b) {
- serial_high(); p ^= 1;
- } else {
- serial_low(); p ^= 0;
- }
- serial_delay();
- }
- /* send parity bit */
- if(p & 1) { serial_high(); }
- else { serial_low(); }
- serial_delay();
-
- serial_low(); // sync_send() / senc_recv() need raise edge
-}
-
-static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
-static
-void serial_send_packet(uint8_t *buffer, uint8_t size) {
- for (uint8_t i = 0; i < size; ++i) {
- uint8_t data;
- data = buffer[i];
- sync_send();
- serial_write_chunk(data,8);
- }
-}
-
-static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
-static
-uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
- uint8_t pecount = 0;
- for (uint8_t i = 0; i < size; ++i) {
- uint8_t data;
- sync_recv();
- data = serial_read_chunk(&pecount, 8);
- buffer[i] = data;
- }
- return pecount == 0;
-}
-
-inline static
-void change_sender2reciver(void) {
- sync_send(); //0
- serial_delay_half1(); //1
- serial_low(); //2
- serial_input_with_pullup(); //2
- serial_delay_half1(); //3
-}
-
-inline static
-void change_reciver2sender(void) {
- sync_recv(); //0
- serial_delay(); //1
- serial_low(); //3
- serial_output(); //3
- serial_delay_half1(); //4
-}
-
-static inline uint8_t nibble_bits_count(uint8_t bits)
-{
- bits = (bits & 0x5) + (bits >> 1 & 0x5);
- bits = (bits & 0x3) + (bits >> 2 & 0x3);
- return bits;
-}
-
-// interrupt handle to be used by the target device
-ISR(SERIAL_PIN_INTERRUPT) {
-
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- serial_low();
- serial_output();
- SSTD_t *trans = Transaction_table;
-#else
- // recive transaction table index
- uint8_t tid, bits;
- uint8_t pecount = 0;
- sync_recv();
- bits = serial_read_chunk(&pecount,7);
- tid = bits>>3;
- bits = (bits&7) != nibble_bits_count(tid);
- if( bits || pecount> 0 || tid > Transaction_table_size ) {
- return;
- }
- serial_delay_half1();
-
- serial_high(); // response step1 low->high
- serial_output();
- _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
- SSTD_t *trans = &Transaction_table[tid];
- serial_low(); // response step2 ack high->low
-#endif
-
- // target send phase
- if( trans->target2initiator_buffer_size > 0 )
- serial_send_packet((uint8_t *)trans->target2initiator_buffer,
- trans->target2initiator_buffer_size);
- // target switch to input
- change_sender2reciver();
-
- // target recive phase
- if( trans->initiator2target_buffer_size > 0 ) {
- if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
- trans->initiator2target_buffer_size) ) {
- *trans->status = TRANSACTION_ACCEPTED;
- } else {
- *trans->status = TRANSACTION_DATA_ERROR;
- }
- } else {
- *trans->status = TRANSACTION_ACCEPTED;
- }
-
- sync_recv(); //weit initiator output to high
-}
-
-/////////
-// start transaction by initiator
-//
-// int soft_serial_transaction(int sstd_index)
-//
-// Returns:
-// TRANSACTION_END
-// TRANSACTION_NO_RESPONSE
-// TRANSACTION_DATA_ERROR
-// this code is very time dependent, so we need to disable interrupts
-#ifndef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_transaction(void) {
- SSTD_t *trans = Transaction_table;
-#else
-int soft_serial_transaction(int sstd_index) {
- if( sstd_index > Transaction_table_size )
- return TRANSACTION_TYPE_ERROR;
- SSTD_t *trans = &Transaction_table[sstd_index];
-#endif
- cli();
-
- // signal to the target that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(SLAVE_INT_WIDTH_US);
-
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- // wait for the target response
- serial_input_with_pullup();
- _delay_us(SLAVE_INT_RESPONSE_TIME);
-
- // check if the target is present
- if (serial_read_pin()) {
- // target failed to pull the line low, assume not present
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_NO_RESPONSE;
- sei();
- return TRANSACTION_NO_RESPONSE;
- }
-
-#else
- // send transaction table index
- int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
- sync_send();
- _delay_sub_us(TID_SEND_ADJUST);
- serial_write_chunk(tid, 7);
- serial_delay_half1();
-
- // wait for the target response (step1 low->high)
- serial_input_with_pullup();
- while( !serial_read_pin() ) {
- _delay_sub_us(2);
- }
-
- // check if the target is present (step2 high->low)
- for( int i = 0; serial_read_pin(); i++ ) {
- if (i > SLAVE_INT_ACK_WIDTH + 1) {
- // slave failed to pull the line low, assume not present
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_NO_RESPONSE;
- sei();
- return TRANSACTION_NO_RESPONSE;
- }
- _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
- }
-#endif
-
- // initiator recive phase
- // if the target is present syncronize with it
- if( trans->target2initiator_buffer_size > 0 ) {
- if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
- trans->target2initiator_buffer_size) ) {
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_DATA_ERROR;
- sei();
- return TRANSACTION_DATA_ERROR;
- }
- }
-
- // initiator switch to output
- change_reciver2sender();
-
- // initiator send phase
- if( trans->initiator2target_buffer_size > 0 ) {
- serial_send_packet((uint8_t *)trans->initiator2target_buffer,
- trans->initiator2target_buffer_size);
- }
-
- // always, release the line when not in use
- sync_send();
-
- *trans->status = TRANSACTION_END;
- sei();
- return TRANSACTION_END;
-}
-
-#ifdef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_get_and_clean_status(int sstd_index) {
- SSTD_t *trans = &Transaction_table[sstd_index];
- cli();
- int retval = *trans->status;
- *trans->status = 0;;
- sei();
- return retval;
-}
-#endif
-
-#endif
-
-// Helix serial.c history
-// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
-// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
-// (adjusted with avr-gcc 4.9.2)
-// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
-// (adjusted with avr-gcc 4.9.2)
-// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
-// (adjusted with avr-gcc 4.9.2)
-// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
-// (adjusted with avr-gcc 7.3.0)
-// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
-// (adjusted with avr-gcc 5.4.0, 7.3.0)
-// 2018-12-17 copy to TOP/quantum/split_common/ and remove backward compatibility code (#4669)
diff --git a/keyboards/ai03/orbit/serial.h b/keyboards/ai03/orbit/serial.h
deleted file mode 100644
index 1c1e640069..0000000000
--- a/keyboards/ai03/orbit/serial.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-
-// /////////////////////////////////////////////////////////////////
-// Need Soft Serial defines in config.h
-// /////////////////////////////////////////////////////////////////
-// ex.
-// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
-// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
-// // 1: about 137kbps (default)
-// // 2: about 75kbps
-// // 3: about 39kbps
-// // 4: about 26kbps
-// // 5: about 20kbps
-//
-// //// USE simple API (using signle-type transaction function)
-// /* nothing */
-// //// USE flexible API (using multi-type transaction function)
-// #define SERIAL_USE_MULTI_TRANSACTION
-//
-// /////////////////////////////////////////////////////////////////
-
-// Soft Serial Transaction Descriptor
-typedef struct _SSTD_t {
- uint8_t *status;
- uint8_t initiator2target_buffer_size;
- uint8_t *initiator2target_buffer;
- uint8_t target2initiator_buffer_size;
- uint8_t *target2initiator_buffer;
-} SSTD_t;
-#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
-
-// initiator is transaction start side
-void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
-// target is interrupt accept side
-void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
-
-// initiator resullt
-#define TRANSACTION_END 0
-#define TRANSACTION_NO_RESPONSE 0x1
-#define TRANSACTION_DATA_ERROR 0x2
-#define TRANSACTION_TYPE_ERROR 0x4
-#ifndef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_transaction(void);
-#else
-int soft_serial_transaction(int sstd_index);
-#endif
-
-// target status
-// *SSTD_t.status has
-// initiator:
-// TRANSACTION_END
-// or TRANSACTION_NO_RESPONSE
-// or TRANSACTION_DATA_ERROR
-// target:
-// TRANSACTION_DATA_ERROR
-// or TRANSACTION_ACCEPTED
-#define TRANSACTION_ACCEPTED 0x8
-#ifdef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_get_and_clean_status(int sstd_index);
-#endif
diff --git a/keyboards/ai03/orbit/split_flags.c b/keyboards/ai03/orbit/split_flags.c
deleted file mode 100644
index 1f5825d650..0000000000
--- a/keyboards/ai03/orbit/split_flags.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "split_flags.h"
-
-volatile bool RGB_DIRTY = false;
-
-volatile bool BACKLIT_DIRTY = false; \ No newline at end of file
diff --git a/keyboards/ai03/orbit/split_flags.h b/keyboards/ai03/orbit/split_flags.h
deleted file mode 100644
index aaac474a7d..0000000000
--- a/keyboards/ai03/orbit/split_flags.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-
-/**
-* Global Flags
-**/
-
-//RGB Stuff
-extern volatile bool RGB_DIRTY;
-
-
-//Backlight Stuff
-extern volatile bool BACKLIT_DIRTY;
diff --git a/keyboards/ai03/orbit/split_util.c b/keyboards/ai03/orbit/split_util.c
deleted file mode 100644
index 2352e5a111..0000000000
--- a/keyboards/ai03/orbit/split_util.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-#include "split_flags.h"
-#include "transport.h"
-#include "quantum.h"
-
-#ifdef EE_HANDS
-# include "eeprom.h"
-# include "eeconfig.h"
-#endif
-
-volatile bool isLeftHand = true;
-
-__attribute__((weak))
-bool is_keyboard_left(void) {
- #ifdef SPLIT_HAND_PIN
- // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
- setPinInput(SPLIT_HAND_PIN);
- return readPin(SPLIT_HAND_PIN);
- #else
- #ifdef EE_HANDS
- return eeprom_read_byte(EECONFIG_HANDEDNESS);
- #else
- #ifdef MASTER_RIGHT
- return !is_keyboard_master();
- #else
- return is_keyboard_master();
- #endif
- #endif
- #endif
-}
-
-bool is_keyboard_master(void)
-{
-#ifdef __AVR__
- static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
-
- // only check once, as this is called often
- if (usbstate == UNKNOWN)
- {
- USBCON |= (1 << OTGPADE); // enables VBUS pad
- wait_us(5);
-
- usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
- }
-
- return (usbstate == MASTER);
-#else
- return true;
-#endif
-}
-
-static void keyboard_master_setup(void) {
-#if defined(USE_I2C)
- #ifdef SSD1306OLED
- matrix_master_OLED_init ();
- #endif
-#endif
- transport_master_init();
-
- // For master the Backlight info needs to be sent on startup
- // Otherwise the salve won't start with the proper info until an update
- BACKLIT_DIRTY = true;
-}
-
-static void keyboard_slave_setup(void)
-{
- transport_slave_init();
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void)
-{
- isLeftHand = is_keyboard_left();
-
- if (is_keyboard_master())
- {
- keyboard_master_setup();
- }
- else
- {
- keyboard_slave_setup();
- }
-}
diff --git a/keyboards/ai03/orbit/split_util.h b/keyboards/ai03/orbit/split_util.h
deleted file mode 100644
index 20f7535bf4..0000000000
--- a/keyboards/ai03/orbit/split_util.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-extern volatile bool isLeftHand;
-
-void matrix_master_OLED_init (void);
diff --git a/keyboards/ai03/orbit/transport.c b/keyboards/ai03/orbit/transport.c
deleted file mode 100644
index 447fafed14..0000000000
--- a/keyboards/ai03/orbit/transport.c
+++ /dev/null
@@ -1,238 +0,0 @@
-
-#include "transport.h"
-
-#include "config.h"
-#include "matrix.h"
-#include "quantum.h"
-
-#include "orbit.h"
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-#ifdef RGBLIGHT_ENABLE
-# include "rgblight.h"
-#endif
-
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
- extern backlight_config_t backlight_config;
-#endif
-
-#if defined(USE_I2C)
-
-#include "i2c.h"
-
-#ifndef SLAVE_I2C_ADDRESS
-# define SLAVE_I2C_ADDRESS 0x32
-#endif
-
-#if (MATRIX_COLS > 8)
-# error "Currently only supports 8 COLS"
-#endif
-
-// Get rows from other half over i2c
-bool transport_master(matrix_row_t matrix[]) {
- int err = 0;
-
- // write backlight info
-#ifdef BACKLIGHT_ENABLE
- if (BACKLIT_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) { goto i2c_error; }
-
- // Backlight location
- err = i2c_master_write(I2C_BACKLIT_START);
- if (err) { goto i2c_error; }
-
- // Write backlight
- i2c_master_write(get_backlight_level());
-
- BACKLIT_DIRTY = false;
- }
-#endif
-
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) { goto i2c_error; }
-
- // start of matrix stored at I2C_KEYMAP_START
- err = i2c_master_write(I2C_KEYMAP_START);
- if (err) { goto i2c_error; }
-
- // Start read
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
- if (err) { goto i2c_error; }
-
- if (!err) {
- int i;
- for (i = 0; i < ROWS_PER_HAND-1; ++i) {
- matrix[i] = i2c_master_read(I2C_ACK);
- }
- matrix[i] = i2c_master_read(I2C_NACK);
- i2c_master_stop();
- } else {
-i2c_error: // the cable is disconnceted, or something else went wrong
- i2c_reset_state();
- return false;
- }
-
-#ifdef RGBLIGHT_ENABLE
- if (RGB_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) { goto i2c_error; }
-
- // RGB Location
- err = i2c_master_write(I2C_RGB_START);
- if (err) { goto i2c_error; }
-
- uint32_t dword = eeconfig_read_rgblight();
-
- // Write RGB
- err = i2c_master_write_data(&dword, 4);
- if (err) { goto i2c_error; }
-
- RGB_DIRTY = false;
- i2c_master_stop();
- }
-#endif
-
- return true;
-}
-
-void transport_slave(matrix_row_t matrix[]) {
-
- for (int i = 0; i < ROWS_PER_HAND; ++i)
- {
- i2c_slave_buffer[I2C_KEYMAP_START + i] = matrix[i];
- }
- // Read Backlight Info
- #ifdef BACKLIGHT_ENABLE
- if (BACKLIT_DIRTY)
- {
- backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
- BACKLIT_DIRTY = false;
- }
- #endif
- #ifdef RGBLIGHT_ENABLE
- if (RGB_DIRTY)
- {
- // Disable interupts (RGB data is big)
- cli();
- // Create new DWORD for RGB data
- uint32_t dword;
-
- // Fill the new DWORD with the data that was sent over
- uint8_t * dword_dat = (uint8_t *)(&dword);
- for (int i = 0; i < 4; i++)
- {
- dword_dat[i] = i2c_slave_buffer[I2C_RGB_START + i];
- }
-
- // Update the RGB now with the new data and set RGB_DIRTY to false
- rgblight_update_dword(dword);
- RGB_DIRTY = false;
- // Re-enable interupts now that RGB is set
- sei();
- }
- #endif
-}
-
-void transport_master_init(void) {
- i2c_master_init();
-}
-
-void transport_slave_init(void) {
- i2c_slave_init(SLAVE_I2C_ADDRESS);
-}
-
-#else // USE_SERIAL
-
-#include "serial.h"
-
-
-
-volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
-volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
-uint8_t volatile status0 = 0;
-
-SSTD_t transactions[] = {
- { (uint8_t *)&status0,
- sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
- sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
- }
-};
-
-uint8_t slave_layer_cache;
-uint8_t slave_nlock_cache;
-uint8_t slave_clock_cache;
-uint8_t slave_slock_cache;
-
-void transport_master_init(void)
-{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
-
-void transport_slave_init(void)
-{
- soft_serial_target_init(transactions, TID_LIMIT(transactions));
- slave_layer_cache = 255;
- slave_nlock_cache = 255;
- slave_clock_cache = 255;
- slave_slock_cache = 255;
-}
-
-bool transport_master(matrix_row_t matrix[]) {
-
- if (soft_serial_transaction()) {
- return false;
- }
-
- // TODO: if MATRIX_COLS > 8 change to unpack()
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[i] = serial_s2m_buffer.smatrix[i];
- }
-
- #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
- // Code to send RGB over serial goes here (not implemented yet)
- #endif
-
- #ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
- #endif
-
- return true;
-}
-
-void transport_slave(matrix_row_t matrix[]) {
-
- // TODO: if MATRIX_COLS > 8 change to pack()
- for (int i = 0; i < ROWS_PER_HAND; ++i)
- {
- serial_s2m_buffer.smatrix[i] = matrix[i];
- }
- #ifdef BACKLIGHT_ENABLE
- backlight_set(serial_m2s_buffer.backlight_level);
- #endif
- #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
- // Add serial implementation for RGB here
- #endif
-
- if (slave_layer_cache != serial_m2s_buffer.current_layer) {
- slave_layer_cache = serial_m2s_buffer.current_layer;
- set_layer_indicators(slave_layer_cache);
- }
-
- if (slave_nlock_cache != serial_m2s_buffer.nlock_led) {
- slave_nlock_cache = serial_m2s_buffer.nlock_led;
- led_toggle(3, slave_nlock_cache);
- }
- if (slave_clock_cache != serial_m2s_buffer.clock_led) {
- slave_clock_cache = serial_m2s_buffer.clock_led;
- led_toggle(4, slave_clock_cache);
- }
- if (slave_slock_cache != serial_m2s_buffer.slock_led) {
- slave_slock_cache = serial_m2s_buffer.slock_led;
- led_toggle(5, slave_slock_cache);
- }
-
-}
-
-#endif
diff --git a/keyboards/ai03/orbit/transport.h b/keyboards/ai03/orbit/transport.h
deleted file mode 100644
index 757eae6f5c..0000000000
--- a/keyboards/ai03/orbit/transport.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#pragma once
-
-#include "matrix.h"
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-typedef struct _Serial_s2m_buffer_t {
- // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
- matrix_row_t smatrix[ROWS_PER_HAND];
-} Serial_s2m_buffer_t;
-
-typedef struct _Serial_m2s_buffer_t {
-#ifdef BACKLIGHT_ENABLE
- uint8_t backlight_level;
-#endif
-#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
- rgblight_config_t rgblight_config; //not yet use
- //
- // When MCUs on both sides drive their respective RGB LED chains,
- // it is necessary to synchronize, so it is necessary to communicate RGB information.
- // In that case, define the RGBLIGHT_SPLIT macro.
- //
- // Otherwise, if the master side MCU drives both sides RGB LED chains,
- // there is no need to communicate.
-#endif
-
- uint8_t current_layer;
- uint8_t nlock_led;
- uint8_t clock_led;
- uint8_t slock_led;
-
-} Serial_m2s_buffer_t;
-
-extern volatile Serial_s2m_buffer_t serial_s2m_buffer;
-extern volatile Serial_m2s_buffer_t serial_m2s_buffer;
-
-void transport_master_init(void);
-void transport_slave_init(void);
-
-// returns false if valid data not received from slave
-bool transport_master(matrix_row_t matrix[]);
-void transport_slave(matrix_row_t matrix[]);
diff --git a/keyboards/ajisai74/readme.md b/keyboards/ajisai74/readme.md
deleted file mode 100644
index af66ce0fc5..0000000000
--- a/keyboards/ajisai74/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# AJisai74
-
-![ajisai74](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20200812/20200812214740.png)
-
-This is 74 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: AJisai74 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2291877)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ajisai74:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/ajisai74-build-guide)
diff --git a/keyboards/aleth42/rev1/readme.md b/keyboards/aleth42/rev1/readme.md
deleted file mode 100644
index 3da1231d60..0000000000
--- a/keyboards/aleth42/rev1/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# ALETH42
-
-![ALETH42](https://i.imgur.com/6hJVBQl.png)
-
-40% keyboard with rotary encoder (optional)
-
-* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk/) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
-* Hardware Supported: ALETH42 PCB
-* Hardware Availability: [twitter](https://twitter.com/monksoffunkJP), [Booth](https://25keys.booth.pm/items/2420095)
-
-Make example for this keyboard (after setting up your build environment):
-
- make aleth42:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/aleth42/rules.mk b/keyboards/aleth42/rules.mk
deleted file mode 100644
index 8d130979b8..0000000000
--- a/keyboards/aleth42/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = aleth42/rev1
diff --git a/keyboards/alicia_cook/readme.md b/keyboards/alicia_cook/readme.md
deleted file mode 100644
index 4e37a366e7..0000000000
--- a/keyboards/alicia_cook/readme.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Alicia Cook
-
-![Alicia Cook](https://raw.githubusercontent.com/ibnuda/alicia-cook/master-of-puppets/alicia-cook.jpg)
-
-40% Alice-style keyboard that can be split and uses IDC connector.
-
-* Keyboard Maintainer: [Ibnu D. Aji](https://github.com/ibnuda)
-* Hardware Supported: [Alicia Cook](https://github.com/ibnuda/alicia-cook)
-* Hardware Availability: [Alicia Cook](https://github.com/ibnuda/alicia-cook)
-
-Make example for this keyboard (after setting up your build environment):
-
- make alicia_cook:default
-
-Flashing example for this keyboard:
-
- make alicia_cook: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
-
-To enter the bootloader, there's only one way to do it:
-
-* **Keycode in layout**: Hold left spacebar and then tap `B` key in the default keymap.
-
diff --git a/keyboards/allison/readme.md b/keyboards/allison/readme.md
deleted file mode 100644
index 60670cbad8..0000000000
--- a/keyboards/allison/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Allison
-
-![Allison](https://i.imgur.com/tvLtu4K.jpg)
-
-A custom luxurious 60 with F-row and Macro
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: ATmega32U4
-* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
-
-Make example for this keyboard (after setting up your build environment):
-
- make allison:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/allison_numpad/readme.md b/keyboards/allison_numpad/readme.md
deleted file mode 100644
index 82992339e1..0000000000
--- a/keyboards/allison_numpad/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Allison Numpad
-
-![Allison Numpad](https://i.imgur.com/tvLtu4K.jpg)
-
-A custom luxurious numpad to match Allison
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: ATmega32U4
-* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
-
-Make example for this keyboard (after setting up your build environment):
-
- make allison_numpad:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/alu84/readme.md b/keyboards/alu84/readme.md
deleted file mode 100644
index 12da1d8a8f..0000000000
--- a/keyboards/alu84/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# ALU84
-
-![alu84](https://i.imgur.com/wBfazDch.jpg)
-
-A 75% keyboard made and sold by MECHKEYS.
-
-* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
-* Hardware Supported: ALU84
-* Hardware Availability: [~~MECHKEYS~~](https://mechkeys.ca) (No longer available)
-
-Make example for this keyboard (after setting up your build environment):
-
- make alu84:default
-
-Flashing example for this keyboard:
-
- make alu84:default:flash
-
-To reset the board into bootloader mode, hold Space+B while plugging the cable in.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/amj96/matrix.c b/keyboards/amj96/matrix.c
index 8e7bbaa791..ffd66d120f 100644
--- a/keyboards/amj96/matrix.c
+++ b/keyboards/amj96/matrix.c
@@ -108,12 +108,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
index 11f8482352..3f83fc8236 100644
--- a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
+++ b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
@@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------|
* | |Lef|Dow|Rig| | | | | | |Hom|PgU| |
* |-----------------------------------------------------------|
- * | | |App|Fn1|Fn2|Fn3|VoD|VoU|Mut|End|PgD| | |
+ * | | |App| | | |VoD|VoU|Mut|End|PgD| | |
* |-----------------------------------------------------------|
* | | | | | | | | |
* `-----------------------------------------------------------'
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_INS, KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,
BL_BRTG,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_PGUP,KC_TRNS,KC_TRNS,KC_TRNS,
- BL_STEP,KC_NO, KC_TRNS,KC_APP, KC_FN1, KC_FN2, KC_FN3, KC_VOLD,KC_VOLU,KC_MUTE,KC_END, KC_PGDN,KC_TRNS,KC_TRNS,KC_TRNS,
+ BL_STEP,KC_NO, KC_TRNS,KC_APP, KC_TRNS,KC_TRNS,KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_END, KC_PGDN,KC_TRNS,KC_TRNS,KC_TRNS,
KC_SLEP,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS)
};
diff --git a/keyboards/angel17/readme.md b/keyboards/angel17/readme.md
deleted file mode 100644
index 8c9b806685..0000000000
--- a/keyboards/angel17/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# angel17
-
-![angel17](https://i.gyazo.com/30787446262c5818bc60e0ffb34c96ed.jpg)
-
-Keyboard for tablets.
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: angel17_alpha, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make angel17:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel17/rules.mk b/keyboards/angel17/rules.mk
deleted file mode 100644
index 6c73399ec1..0000000000
--- a/keyboards/angel17/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-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
-
-LAYOUTS = numpad_5x4
-
-DEFAULT_FOLDER = angel17/rev1
diff --git a/keyboards/angel64/alpha/matrix.c b/keyboards/angel64/alpha/matrix.c
deleted file mode 100644
index 474fbec030..0000000000
--- a/keyboards/angel64/alpha/matrix.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
-Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "debounce.h"
-#include "quantum.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-#ifdef MATRIX_MASKED
- extern const matrix_row_t matrix_mask[];
-#endif
-
-static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
-static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
- // switch blocker installed and the switch is always pressed.
-#ifdef MATRIX_MASKED
- return matrix[row] & matrix_mask[row];
-#else
- return matrix[row];
-#endif
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
-
-static void select_row(uint8_t row)
-{
- setPinOutput(row_pins[row]);
- writePinLow(row_pins[row]);
-}
-
-static void unselect_row(uint8_t row)
-{
- setPinInputHigh(row_pins[row]);
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static void select_col(uint8_t col)
-{
- setPinOutput(col_pins[col]);
- writePinLow(col_pins[col]);
-}
-
-static void unselect_col(uint8_t col)
-{
- setPinInputHigh(col_pins[col]);
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static void init_pins(void) {
- unselect_rows();
- unselect_cols();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin_state = readPin(col_pins[col_index]);
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
- {
- uint8_t tmp = row_index + MATRIX_ROWS/2;
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[tmp];
-
- // Check row pin state
- if (readPin(row_pins[row_index]) == 0)
- {
- // Pin LO, set col bit
- current_matrix[tmp] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-void matrix_init(void) {
-
- // initialize key pins
- init_pins();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- bool changed = false;
-
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
- changed |= read_cols_on_row(raw_matrix, current_row);
- }
- //else
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- changed |= read_rows_on_col(raw_matrix, current_col);
- }
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return (uint8_t)changed;
-}
diff --git a/keyboards/angel64/alpha/readme.md b/keyboards/angel64/alpha/readme.md
deleted file mode 100644
index d646edeb7e..0000000000
--- a/keyboards/angel64/alpha/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# angel64
-
-![angel64](https://i.gyazo.com/6e2ea6c58d3253c496dc0518f2641ff9.jpg)
-
-Keyboard for tablets.
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: angel64_alpha, promicro
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make angel64/alpha:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/readme.md b/keyboards/angel64/readme.md
deleted file mode 100644
index 791620144e..0000000000
--- a/keyboards/angel64/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# angel64
-
-![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
-
-Keyboard for tablets.
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: angel64_alpha, angel64_rev1, promicro
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make angel64:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/rev1/matrix.c b/keyboards/angel64/rev1/matrix.c
deleted file mode 100644
index 474fbec030..0000000000
--- a/keyboards/angel64/rev1/matrix.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
-Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "debounce.h"
-#include "quantum.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-#ifdef MATRIX_MASKED
- extern const matrix_row_t matrix_mask[];
-#endif
-
-static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
-static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
- // switch blocker installed and the switch is always pressed.
-#ifdef MATRIX_MASKED
- return matrix[row] & matrix_mask[row];
-#else
- return matrix[row];
-#endif
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
-
-static void select_row(uint8_t row)
-{
- setPinOutput(row_pins[row]);
- writePinLow(row_pins[row]);
-}
-
-static void unselect_row(uint8_t row)
-{
- setPinInputHigh(row_pins[row]);
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static void select_col(uint8_t col)
-{
- setPinOutput(col_pins[col]);
- writePinLow(col_pins[col]);
-}
-
-static void unselect_col(uint8_t col)
-{
- setPinInputHigh(col_pins[col]);
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static void init_pins(void) {
- unselect_rows();
- unselect_cols();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin_state = readPin(col_pins[col_index]);
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
- {
- uint8_t tmp = row_index + MATRIX_ROWS/2;
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[tmp];
-
- // Check row pin state
- if (readPin(row_pins[row_index]) == 0)
- {
- // Pin LO, set col bit
- current_matrix[tmp] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-void matrix_init(void) {
-
- // initialize key pins
- init_pins();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- bool changed = false;
-
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
- changed |= read_cols_on_row(raw_matrix, current_row);
- }
- //else
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- changed |= read_rows_on_col(raw_matrix, current_col);
- }
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return (uint8_t)changed;
-}
diff --git a/keyboards/angel64/rev1/readme.md b/keyboards/angel64/rev1/readme.md
deleted file mode 100644
index 4ce77807c9..0000000000
--- a/keyboards/angel64/rev1/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# angel64
-
-![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
-
-Keyboard for tablets.
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: angel64_rev1, promicro
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make angel64/rev1:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/rules.mk b/keyboards/angel64/rules.mk
deleted file mode 100644
index 9bf41a18cc..0000000000
--- a/keyboards/angel64/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-OLED_ENABLE = yes
-OLED_DRIVER = SSD1306
-CUSTOM_MATRIX = yes
-
-SRC += matrix.c
-
-DEFAULT_FOLDER = angel64/rev1
diff --git a/keyboards/arch_36/readme.md b/keyboards/arch_36/readme.md
deleted file mode 100644
index d0e16434ee..0000000000
--- a/keyboards/arch_36/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Arch-36
-
-An ergonomic 30% split keyboard
-
-* Keyboard Maintainer: [obosob](https://github.com/obosob)
-* Hardware Supported: Pro Micro 5V/16MHz and compatible.
-
-Make example for this keyboard (after setting up your build environment):
-
- make arch_36:default
-
-Example of flashing this keyboard:
-
- make arch_36:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/atreus/feather/rules.mk b/keyboards/atreus/feather/rules.mk
index ad0b4a5046..6280275c1e 100644
--- a/keyboards/atreus/feather/rules.mk
+++ b/keyboards/atreus/feather/rules.mk
@@ -11,5 +11,5 @@ BOOTLOADER = caterina
# change yes to no to disable
#
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
CONSOLE_ENABLE = no
diff --git a/keyboards/bakeneko60/readme.md b/keyboards/bakeneko60/readme.md
deleted file mode 100644
index 18b9d3c4d2..0000000000
--- a/keyboards/bakeneko60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Bakeneko 60
-
-A simple 60% keyboard
-
-* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
-* Hardware Supported: Bakeneko 60
-* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-60)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bakeneko60:default
-
-Flashing example for this keyboard:
-
- make bakeneko60:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko65/rev2/readme.md b/keyboards/bakeneko65/rev2/readme.md
deleted file mode 100644
index 8d2fa6bc58..0000000000
--- a/keyboards/bakeneko65/rev2/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Bakeneko 65 V2
-
-A simple 65% keyboard
-
-* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
-* Hardware Supported: Bakeneko 65 V2
-* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-65)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bakeneko65/rev2:default
-
-Flashing example for this keyboard:
-
- make bakeneko65/rev2:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko65/rev3/readme.md b/keyboards/bakeneko65/rev3/readme.md
deleted file mode 100644
index e147b11e6f..0000000000
--- a/keyboards/bakeneko65/rev3/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Bakeneko 65 V3
-
-A simple 65% keyboard
-
-* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
-* Hardware Supported: Bakeneko 65 V3
-* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-65)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bakeneko65/rev3:default
-
-Flashing example for this keyboard:
-
- make bakeneko65/rev3:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko65/rev3/rules.mk b/keyboards/bakeneko65/rev3/rules.mk
deleted file mode 100644
index 1275531ef6..0000000000
--- a/keyboards/bakeneko65/rev3/rules.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# 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
diff --git a/keyboards/bakeneko80/readme.md b/keyboards/bakeneko80/readme.md
deleted file mode 100644
index 30f1b3e608..0000000000
--- a/keyboards/bakeneko80/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Bakeneko 80
-
-Open source tenkeyless keyboard for DIYers
-
-* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
-* Hardware Supported: Bakeneko 80 PCB
-* Hardware Availability: [PCB](https://github.com/kkatano/bakeneko-80-pcb), [Case and Plate](https://github.com/kkatano/bakeneko-80-case)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bakeneko80:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/barleycorn/readme.md b/keyboards/barleycorn/readme.md
deleted file mode 100644
index dd96c69e9a..0000000000
--- a/keyboards/barleycorn/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Barleycorn
-
-![Barleycorn](https://i.imgur.com/vi3L1HYl.png)
-
-An f-row less compact 1800 kit with only through hole components.
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/barleycorn_pcb)
-* Hardware Availability: https://mykeyboard.eu/, https://novelkeys.xyz
-
-Make example for this keyboard (after setting up your build environment):
-
- make barleycorn:default
-
-Flashing example for this keyboard:
-
- make barleycorn:default:flash
-
-Bootloader:
-use usbasploader from HSGW's repository.
-https://github.com/hsgw/USBaspLoader/tree/plaid
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bat43/bat43.h b/keyboards/bat43/bat43.h
deleted file mode 100644
index 42d44107b4..0000000000
--- a/keyboards/bat43/bat43.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_bat43_rev1
- #include "rev1.h"
-#endif
-#ifdef KEYBOARD_bat43_rev2
- #include "rev2.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/bat43/readme.md b/keyboards/bat43/readme.md
deleted file mode 100644
index 7097aa7af5..0000000000
--- a/keyboards/bat43/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# bat43
-
-![bat43](https://user-images.githubusercontent.com/30647434/78112239-e9ef8300-7438-11ea-810b-994a75ffa24e.jpg)
-
-A 43-key keyboard.
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: bat43 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make bat43:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bat43/rules.mk b/keyboards/bat43/rules.mk
deleted file mode 100644
index 7bd7394e4f..0000000000
--- a/keyboards/bat43/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-DEFAULT_FOLDER = bat43/rev2
diff --git a/keyboards/angel64/.noci b/keyboards/biacco42/ergo42/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel64/.noci
+++ b/keyboards/biacco42/ergo42/.noci
diff --git a/keyboards/ergo42/config.h b/keyboards/biacco42/ergo42/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/ergo42/config.h
+++ b/keyboards/biacco42/ergo42/config.h
diff --git a/keyboards/ergo42/ergo42.c b/keyboards/biacco42/ergo42/ergo42.c
index bd7a7ffe19..bd7a7ffe19 100644
--- a/keyboards/ergo42/ergo42.c
+++ b/keyboards/biacco42/ergo42/ergo42.c
diff --git a/keyboards/biacco42/ergo42/ergo42.h b/keyboards/biacco42/ergo42/ergo42.h
new file mode 100644
index 0000000000..265e605e6c
--- /dev/null
+++ b/keyboards/biacco42/ergo42/ergo42.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_biacco42_ergo42_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/ergo42/info.json b/keyboards/biacco42/ergo42/info.json
index a4c4f7fd18..a4c4f7fd18 100644
--- a/keyboards/ergo42/info.json
+++ b/keyboards/biacco42/ergo42/info.json
diff --git a/keyboards/ergo42/keymaps/biacco-biacco/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/biacco-biacco/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h
diff --git a/keyboards/ergo42/keymaps/biacco-biacco/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c
index 7cf40fa9a0..7cf40fa9a0 100644
--- a/keyboards/ergo42/keymaps/biacco-biacco/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco-macOS/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/biacco-macOS/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h
diff --git a/keyboards/ergo42/keymaps/biacco-macOS/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c
index bc6a8557e8..bc6a8557e8 100644
--- a/keyboards/ergo42/keymaps/biacco-macOS/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco-underglow/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h
index efadfa8143..efadfa8143 100644
--- a/keyboards/ergo42/keymaps/biacco-underglow/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h
diff --git a/keyboards/ergo42/keymaps/biacco-underglow/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c
index 5b7fb7e66c..5b7fb7e66c 100644
--- a/keyboards/ergo42/keymaps/biacco-underglow/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco-underglow/rules.mk b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/ergo42/keymaps/biacco-underglow/rules.mk
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk
diff --git a/keyboards/ergo42/keymaps/biacco-winjp/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/biacco-winjp/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h
diff --git a/keyboards/ergo42/keymaps/biacco-winjp/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c
index 9d8284dbd2..9d8284dbd2 100644
--- a/keyboards/ergo42/keymaps/biacco-winjp/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco/config.h b/keyboards/biacco42/ergo42/keymaps/biacco/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/biacco/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/biacco/config.h
diff --git a/keyboards/ergo42/keymaps/biacco/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco/keymap.c
index 12e55b75f1..12e55b75f1 100644
--- a/keyboards/ergo42/keymaps/biacco/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/biacco/keymap.c
diff --git a/keyboards/ergo42/keymaps/default-illustrator/config.h b/keyboards/biacco42/ergo42/keymaps/default-illustrator/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/default-illustrator/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/default-illustrator/config.h
diff --git a/keyboards/ergo42/keymaps/default-illustrator/keymap.c b/keyboards/biacco42/ergo42/keymaps/default-illustrator/keymap.c
index 3c57f7fc93..3c57f7fc93 100644
--- a/keyboards/ergo42/keymaps/default-illustrator/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/default-illustrator/keymap.c
diff --git a/keyboards/ergo42/keymaps/default-underglow/config.h b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h
index efadfa8143..efadfa8143 100644
--- a/keyboards/ergo42/keymaps/default-underglow/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h
diff --git a/keyboards/ergo42/keymaps/default-underglow/keymap.c b/keyboards/biacco42/ergo42/keymaps/default-underglow/keymap.c
index d4e8f11087..d4e8f11087 100644
--- a/keyboards/ergo42/keymaps/default-underglow/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/default-underglow/keymap.c
diff --git a/keyboards/ergo42/keymaps/default-underglow/rules.mk b/keyboards/biacco42/ergo42/keymaps/default-underglow/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/ergo42/keymaps/default-underglow/rules.mk
+++ b/keyboards/biacco42/ergo42/keymaps/default-underglow/rules.mk
diff --git a/keyboards/ergo42/keymaps/default/config.h b/keyboards/biacco42/ergo42/keymaps/default/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/default/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/default/config.h
diff --git a/keyboards/ergo42/keymaps/default/keymap.c b/keyboards/biacco42/ergo42/keymaps/default/keymap.c
index 0e03a12267..0e03a12267 100644
--- a/keyboards/ergo42/keymaps/default/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/default/keymap.c
diff --git a/keyboards/ergo42/keymaps/hdbx/config.h b/keyboards/biacco42/ergo42/keymaps/hdbx/config.h
index 4f0704ae1a..4f0704ae1a 100644
--- a/keyboards/ergo42/keymaps/hdbx/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/hdbx/config.h
diff --git a/keyboards/ergo42/keymaps/hdbx/keymap.c b/keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c
index 0931ce86b4..0931ce86b4 100644
--- a/keyboards/ergo42/keymaps/hdbx/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c
diff --git a/keyboards/ergo42/keymaps/hdbx/readme.md b/keyboards/biacco42/ergo42/keymaps/hdbx/readme.md
index aa05362e99..aa05362e99 100644
--- a/keyboards/ergo42/keymaps/hdbx/readme.md
+++ b/keyboards/biacco42/ergo42/keymaps/hdbx/readme.md
diff --git a/keyboards/ergo42/keymaps/ichi-t/config.h b/keyboards/biacco42/ergo42/keymaps/ichi-t/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/ichi-t/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/ichi-t/config.h
diff --git a/keyboards/ergo42/keymaps/ichi-t/keymap.c b/keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c
index 94d57936ed..94d57936ed 100644
--- a/keyboards/ergo42/keymaps/ichi-t/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c
diff --git a/keyboards/ergo42/keymaps/koba/config.h b/keyboards/biacco42/ergo42/keymaps/koba/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/koba/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/koba/config.h
diff --git a/keyboards/ergo42/keymaps/koba/keymap.c b/keyboards/biacco42/ergo42/keymaps/koba/keymap.c
index 091d7fb9af..091d7fb9af 100644
--- a/keyboards/ergo42/keymaps/koba/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/koba/keymap.c
diff --git a/keyboards/ergo42/keymaps/koba/readme.md b/keyboards/biacco42/ergo42/keymaps/koba/readme.md
index bbf9c1c4a6..bbf9c1c4a6 100644
--- a/keyboards/ergo42/keymaps/koba/readme.md
+++ b/keyboards/biacco42/ergo42/keymaps/koba/readme.md
diff --git a/keyboards/ergo42/keymaps/koba/readme_ja.md b/keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md
index 188fb48310..188fb48310 100644
--- a/keyboards/ergo42/keymaps/koba/readme_ja.md
+++ b/keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md
diff --git a/keyboards/ergo42/keymaps/shinze/config.h b/keyboards/biacco42/ergo42/keymaps/shinze/config.h
index 360d6a5621..360d6a5621 100644
--- a/keyboards/ergo42/keymaps/shinze/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/shinze/config.h
diff --git a/keyboards/ergo42/keymaps/shinze/keymap.c b/keyboards/biacco42/ergo42/keymaps/shinze/keymap.c
index f5cc3c520e..f5cc3c520e 100644
--- a/keyboards/ergo42/keymaps/shinze/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/shinze/keymap.c
diff --git a/keyboards/ergo42/keymaps/yshrsmz/config.h b/keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h
index 1892ef6529..1892ef6529 100644
--- a/keyboards/ergo42/keymaps/yshrsmz/config.h
+++ b/keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h
diff --git a/keyboards/ergo42/keymaps/yshrsmz/keymap.c b/keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c
index 6239876bb1..6239876bb1 100644
--- a/keyboards/ergo42/keymaps/yshrsmz/keymap.c
+++ b/keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c
diff --git a/keyboards/ergo42/keymaps/yshrsmz/rules.mk b/keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk
index a779882fad..a779882fad 100644
--- a/keyboards/ergo42/keymaps/yshrsmz/rules.mk
+++ b/keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk
diff --git a/keyboards/biacco42/ergo42/readme.md b/keyboards/biacco42/ergo42/readme.md
new file mode 100644
index 0000000000..778c64a99f
--- /dev/null
+++ b/keyboards/biacco42/ergo42/readme.md
@@ -0,0 +1,16 @@
+# Ergo42
+
+![Ergo42](https://raw.githubusercontent.com/Biacco42/Ergo42/readme/readme_image/ergo42_image.jpg)
+
+__The Answer to the Ultimate Question of Life, the Universe, and at least Keyboards.__
+A split 7x4 ortholinear keyboard. [Hardware project repo](https://github.com/Biacco42/Ergo42)
+
+* Keyboard Maintainer: [Biacco42](https://github.com/Biacco42) [@Biacco42](https://twitter.com/Biacco42)
+* Hardware Supported: Ergo42 PCB, Pro Micro ATmega32u4
+* Hardware Availability: [Ergo42 PCB and case](https://github.com/Biacco42/Ergo42)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make biacco42/ergo42/rev1:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ergo42/rev1/config.h b/keyboards/biacco42/ergo42/rev1/config.h
index a6bf914515..a6bf914515 100644
--- a/keyboards/ergo42/rev1/config.h
+++ b/keyboards/biacco42/ergo42/rev1/config.h
diff --git a/keyboards/ergo42/rev1/rev1.c b/keyboards/biacco42/ergo42/rev1/rev1.c
index 626a0893bb..626a0893bb 100644
--- a/keyboards/ergo42/rev1/rev1.c
+++ b/keyboards/biacco42/ergo42/rev1/rev1.c
diff --git a/keyboards/ergo42/rev1/rev1.h b/keyboards/biacco42/ergo42/rev1/rev1.h
index 9a5aec4d26..9a5aec4d26 100644
--- a/keyboards/ergo42/rev1/rev1.h
+++ b/keyboards/biacco42/ergo42/rev1/rev1.h
diff --git a/keyboards/ergo42/rev1/rules.mk b/keyboards/biacco42/ergo42/rev1/rules.mk
index 7b30c0beff..7b30c0beff 100644
--- a/keyboards/ergo42/rev1/rules.mk
+++ b/keyboards/biacco42/ergo42/rev1/rules.mk
diff --git a/keyboards/biacco42/ergo42/rules.mk b/keyboards/biacco42/ergo42/rules.mk
new file mode 100644
index 0000000000..9420c9b4eb
--- /dev/null
+++ b/keyboards/biacco42/ergo42/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = biacco42/ergo42/rev1
diff --git a/keyboards/meishi/config.h b/keyboards/biacco42/meishi/config.h
index 6664e371a1..6664e371a1 100644
--- a/keyboards/meishi/config.h
+++ b/keyboards/biacco42/meishi/config.h
diff --git a/keyboards/meishi/info.json b/keyboards/biacco42/meishi/info.json
index 8241541c72..8241541c72 100644
--- a/keyboards/meishi/info.json
+++ b/keyboards/biacco42/meishi/info.json
diff --git a/keyboards/meishi/keymaps/default/keymap.c b/keyboards/biacco42/meishi/keymaps/default/keymap.c
index ba4565f03a..ba4565f03a 100644
--- a/keyboards/meishi/keymaps/default/keymap.c
+++ b/keyboards/biacco42/meishi/keymaps/default/keymap.c
diff --git a/keyboards/meishi/keymaps/default/readme.md b/keyboards/biacco42/meishi/keymaps/default/readme.md
index a9eb4e9cd8..a9eb4e9cd8 100644
--- a/keyboards/meishi/keymaps/default/readme.md
+++ b/keyboards/biacco42/meishi/keymaps/default/readme.md
diff --git a/keyboards/meishi/meishi.c b/keyboards/biacco42/meishi/meishi.c
index 85ede859d3..85ede859d3 100644
--- a/keyboards/meishi/meishi.c
+++ b/keyboards/biacco42/meishi/meishi.c
diff --git a/keyboards/meishi/meishi.h b/keyboards/biacco42/meishi/meishi.h
index 61b9f628db..61b9f628db 100644
--- a/keyboards/meishi/meishi.h
+++ b/keyboards/biacco42/meishi/meishi.h
diff --git a/keyboards/biacco42/meishi/readme.md b/keyboards/biacco42/meishi/readme.md
new file mode 100644
index 0000000000..4648c14b4d
--- /dev/null
+++ b/keyboards/biacco42/meishi/readme.md
@@ -0,0 +1,19 @@
+# Meishi - The micro macro keyboard
+
+_Meishi_ means name cards.
+
+![meishi](https://raw.githubusercontent.com/Biacco42/meishi/readme/readme_image/P1210037.JPG)
+
+Only four keys keyboard for self made keyboard beginners.
+
+Keyboard Maintainer: [Biacco42](https://github.com/biacco42)
+Hardware Supported: [Meishi keyboard PCB](https://github.com/Biacco42/meishi), Pro Micro supported
+Hardware Availability: [Tanoshi life - Booth](https://biacco42.booth.pm/)
+
+Make example for this keyboard (after setting up your build environment):
+
+```
+$ make biacco42/meishi:default:avrdude
+```
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/meishi/rules.mk b/keyboards/biacco42/meishi/rules.mk
index 63aadefc79..63aadefc79 100644
--- a/keyboards/meishi/rules.mk
+++ b/keyboards/biacco42/meishi/rules.mk
diff --git a/keyboards/meishi2/config.h b/keyboards/biacco42/meishi2/config.h
index df3203991c..df3203991c 100644
--- a/keyboards/meishi2/config.h
+++ b/keyboards/biacco42/meishi2/config.h
diff --git a/keyboards/meishi2/info.json b/keyboards/biacco42/meishi2/info.json
index 8e277716ea..8e277716ea 100644
--- a/keyboards/meishi2/info.json
+++ b/keyboards/biacco42/meishi2/info.json
diff --git a/keyboards/meishi2/keymaps/default/keymap.c b/keyboards/biacco42/meishi2/keymaps/default/keymap.c
index 303059863b..303059863b 100644
--- a/keyboards/meishi2/keymaps/default/keymap.c
+++ b/keyboards/biacco42/meishi2/keymaps/default/keymap.c
diff --git a/keyboards/meishi2/keymaps/default/readme.md b/keyboards/biacco42/meishi2/keymaps/default/readme.md
index e03642d222..e03642d222 100644
--- a/keyboards/meishi2/keymaps/default/readme.md
+++ b/keyboards/biacco42/meishi2/keymaps/default/readme.md
diff --git a/keyboards/meishi2/keymaps/led_status/keymap.c b/keyboards/biacco42/meishi2/keymaps/led_status/keymap.c
index fb8a33930f..fb8a33930f 100644
--- a/keyboards/meishi2/keymaps/led_status/keymap.c
+++ b/keyboards/biacco42/meishi2/keymaps/led_status/keymap.c
diff --git a/keyboards/meishi2/keymaps/led_status/readme.md b/keyboards/biacco42/meishi2/keymaps/led_status/readme.md
index 802ada91db..802ada91db 100644
--- a/keyboards/meishi2/keymaps/led_status/readme.md
+++ b/keyboards/biacco42/meishi2/keymaps/led_status/readme.md
diff --git a/keyboards/meishi2/keymaps/moc/config.h b/keyboards/biacco42/meishi2/keymaps/moc/config.h
index 9b5675af6b..9b5675af6b 100644
--- a/keyboards/meishi2/keymaps/moc/config.h
+++ b/keyboards/biacco42/meishi2/keymaps/moc/config.h
diff --git a/keyboards/meishi2/keymaps/moc/keymap.c b/keyboards/biacco42/meishi2/keymaps/moc/keymap.c
index 5e6c2e9c20..5e6c2e9c20 100644
--- a/keyboards/meishi2/keymaps/moc/keymap.c
+++ b/keyboards/biacco42/meishi2/keymaps/moc/keymap.c
diff --git a/keyboards/meishi2/keymaps/moc/readme.md b/keyboards/biacco42/meishi2/keymaps/moc/readme.md
index aac1b25c9e..aac1b25c9e 100644
--- a/keyboards/meishi2/keymaps/moc/readme.md
+++ b/keyboards/biacco42/meishi2/keymaps/moc/readme.md
diff --git a/keyboards/meishi2/keymaps/via/keymap.c b/keyboards/biacco42/meishi2/keymaps/via/keymap.c
index be706ea09a..be706ea09a 100644
--- a/keyboards/meishi2/keymaps/via/keymap.c
+++ b/keyboards/biacco42/meishi2/keymaps/via/keymap.c
diff --git a/keyboards/meishi2/keymaps/via/rules.mk b/keyboards/biacco42/meishi2/keymaps/via/rules.mk
index c859353a46..c859353a46 100644
--- a/keyboards/meishi2/keymaps/via/rules.mk
+++ b/keyboards/biacco42/meishi2/keymaps/via/rules.mk
diff --git a/keyboards/meishi2/meishi2.c b/keyboards/biacco42/meishi2/meishi2.c
index 14525ae175..14525ae175 100644
--- a/keyboards/meishi2/meishi2.c
+++ b/keyboards/biacco42/meishi2/meishi2.c
diff --git a/keyboards/meishi2/meishi2.h b/keyboards/biacco42/meishi2/meishi2.h
index 776e0b0e1d..776e0b0e1d 100644
--- a/keyboards/meishi2/meishi2.h
+++ b/keyboards/biacco42/meishi2/meishi2.h
diff --git a/keyboards/biacco42/meishi2/readme.md b/keyboards/biacco42/meishi2/readme.md
new file mode 100644
index 0000000000..97c5465f86
--- /dev/null
+++ b/keyboards/biacco42/meishi2/readme.md
@@ -0,0 +1,15 @@
+# meishi2
+
+![meishi2](https://i.imgur.com/lG5iI3m.jpg)
+
+meishi2 - The better micro macro keyboard
+
+Keyboard Maintainer: [Biacco42](https://github.com/Biacco42)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: [links to where you can find this hardware](https://github.com/Biacco42/meishi2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make biacco42/meishi2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/meishi2/rules.mk b/keyboards/biacco42/meishi2/rules.mk
index eae129b29b..eae129b29b 100644
--- a/keyboards/meishi2/rules.mk
+++ b/keyboards/biacco42/meishi2/rules.mk
diff --git a/keyboards/bigseries/1key/readme.md b/keyboards/bigseries/1key/readme.md
deleted file mode 100644
index ad3ee28b14..0000000000
--- a/keyboards/bigseries/1key/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Big Series Keyboard
-
-![Big Series 1-Key](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
-
-A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: Big Series PCBs
-Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bigseries/1key:default
-
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/2key/readme.md b/keyboards/bigseries/2key/readme.md
deleted file mode 100644
index e882433017..0000000000
--- a/keyboards/bigseries/2key/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Big Series Keyboard
-
-![Big Series 2-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_2u_Case_2018-Apr-03_08-45-05PM-000_CustomizedView8990071229.png)
-
-A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: Big Series PCBs
-Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bigseries/2key:default
-
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/3key/readme.md b/keyboards/bigseries/3key/readme.md
deleted file mode 100644
index d32ec486a0..0000000000
--- a/keyboards/bigseries/3key/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Big Series Keyboard
-
-![Big Series 3-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_3u_Case_2018-Apr-03_07-03-31PM-000_CustomizedView20086357020.png)
-
-A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: Big Series PCBs
-Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bigseries/3key:default
-
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/4key/readme.md b/keyboards/bigseries/4key/readme.md
deleted file mode 100644
index ec40e83f2c..0000000000
--- a/keyboards/bigseries/4key/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Big Series Keyboard
-
-![Big Series 4-Key](https://woodkeys.click/wp-content/uploads/2017/09/BigSeries_4u_with_keys_2018-Apr-01_04-54-09AM-000_CustomizedView38438685666_png.png)
-
-A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: Big Series PCBs
-Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bigseries/4key:default
-
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/readme.md b/keyboards/bigseries/readme.md
deleted file mode 100644
index 0b40667353..0000000000
--- a/keyboards/bigseries/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Big Series Keyboards
-
-![Big Series Keyboards](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
-
-The is the parent folder for all PCBs made by [Woodkeys](https://woodkeys.click) for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: Big Series PCBs
-Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-
-Make example for these keyboards (after setting up your build environment):
-
- make bigseries/1key:default
- make bigseries/3key:ctrl-alt-del
-
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bioi/main.c b/keyboards/bioi/main.c
index 7c8922c0a0..54caf6937b 100644
--- a/keyboards/bioi/main.c
+++ b/keyboards/bioi/main.c
@@ -45,8 +45,8 @@ extern keymap_config_t keymap_config;
#endif
#ifdef BLUETOOTH_ENABLE
-#ifdef MODULE_ADAFRUIT_BLE
-#include "adafruit_ble.h"
+#ifdef BLUETOOTH_BLUEFRUIT_LE
+#include "bluefruit_le.h"
#else
#include "bluetooth.h"
#endif
@@ -319,7 +319,7 @@ int main(void)
setup_usb();
sei();
-#if defined(MODULE_ADAFRUIT_EZKEY) || defined(MODULE_RN42)
+#if defined(BLUETOOTH_RN42)
serial_init();
#endif
diff --git a/keyboards/bkf/readme.md b/keyboards/bkf/readme.md
deleted file mode 100644
index d55f9637ee..0000000000
--- a/keyboards/bkf/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# BKF - Base Kit Forty
-
-![BKF](https://i.imgur.com/3vR0yeW.png)
-
-BKF, Base Kit Forty, is a 40% style keyboard that is fully compatbile with a standard base kit of keycaps with 3 different spacebar configurations. It supports both standard R3 1.75u as well as stepped R3 1.75u on the left side. The key in the top right corner also sports rotary encoder support.
-
-* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
-* Hardware Supported: BKF (https://github.com/drhigsby/bkf)
-* Hardware Availability: open-source stacked acrylic case design available at maintainer's github / make your own
-
-Make example for this keyboard (after setting up your build environment):
-
- make bkf:default
-
-To place this keyboard into bootloader mode, press the reset button on the PCB or short the RST and GND pins on the pro micro.
-
-Flashing example for this keyboard:
-
- make bkf:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/boston_meetup/2019/config.h b/keyboards/boston_meetup/2019/config.h
index 80896242e0..138dedab57 100644
--- a/keyboards/boston_meetup/2019/config.h
+++ b/keyboards/boston_meetup/2019/config.h
@@ -1,7 +1,7 @@
#pragma once
/* USB Device descriptor parameter */
-#define DEVICE_VER 0x07E3
+#define DEVICE_VER 0x2019
#undef MATRIX_ROWS
#undef MATRIX_COLS
diff --git a/keyboards/four_banger/config.h b/keyboards/bpiphany/four_banger/config.h
index 7ad7a5c369..7ad7a5c369 100644
--- a/keyboards/four_banger/config.h
+++ b/keyboards/bpiphany/four_banger/config.h
diff --git a/keyboards/four_banger/four_banger.c b/keyboards/bpiphany/four_banger/four_banger.c
index 20aefb61d9..20aefb61d9 100644
--- a/keyboards/four_banger/four_banger.c
+++ b/keyboards/bpiphany/four_banger/four_banger.c
diff --git a/keyboards/four_banger/four_banger.h b/keyboards/bpiphany/four_banger/four_banger.h
index 1d735a1f0f..1d735a1f0f 100644
--- a/keyboards/four_banger/four_banger.h
+++ b/keyboards/bpiphany/four_banger/four_banger.h
diff --git a/keyboards/four_banger/info.json b/keyboards/bpiphany/four_banger/info.json
index 48fc16cebe..48fc16cebe 100644
--- a/keyboards/four_banger/info.json
+++ b/keyboards/bpiphany/four_banger/info.json
diff --git a/keyboards/four_banger/keymaps/default/keymap.c b/keyboards/bpiphany/four_banger/keymaps/default/keymap.c
index fc04e0fb1b..fc04e0fb1b 100644
--- a/keyboards/four_banger/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/four_banger/keymaps/default/keymap.c
diff --git a/keyboards/bpiphany/four_banger/readme.md b/keyboards/bpiphany/four_banger/readme.md
new file mode 100644
index 0000000000..d508447b56
--- /dev/null
+++ b/keyboards/bpiphany/four_banger/readme.md
@@ -0,0 +1,14 @@
+Four Banger
+===
+
+A 2x2 macro pad sold by 1up Keyboards - designed by Bishop Keyboards
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Four Banger Keyboard PCB
+Hardware Availability: [1up Keyboards](https://1upkeyboards.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/four_banger:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/four_banger/rules.mk b/keyboards/bpiphany/four_banger/rules.mk
index 8f9b670fd9..8f9b670fd9 100644
--- a/keyboards/four_banger/rules.mk
+++ b/keyboards/bpiphany/four_banger/rules.mk
diff --git a/keyboards/hid_liber/config.h b/keyboards/bpiphany/hid_liber/config.h
index 1664b9e314..1664b9e314 100755
--- a/keyboards/hid_liber/config.h
+++ b/keyboards/bpiphany/hid_liber/config.h
diff --git a/keyboards/hid_liber/hid_liber.c b/keyboards/bpiphany/hid_liber/hid_liber.c
index 2e4ddb3293..2e4ddb3293 100755
--- a/keyboards/hid_liber/hid_liber.c
+++ b/keyboards/bpiphany/hid_liber/hid_liber.c
diff --git a/keyboards/hid_liber/hid_liber.h b/keyboards/bpiphany/hid_liber/hid_liber.h
index 1e2ffe3c16..1e2ffe3c16 100755
--- a/keyboards/hid_liber/hid_liber.h
+++ b/keyboards/bpiphany/hid_liber/hid_liber.h
diff --git a/keyboards/hid_liber/info.json b/keyboards/bpiphany/hid_liber/info.json
index 9399b276c5..9399b276c5 100644
--- a/keyboards/hid_liber/info.json
+++ b/keyboards/bpiphany/hid_liber/info.json
diff --git a/keyboards/hid_liber/keymaps/bakageta/config.h b/keyboards/bpiphany/hid_liber/keymaps/bakageta/config.h
index b158e2d5a2..b158e2d5a2 100755
--- a/keyboards/hid_liber/keymaps/bakageta/config.h
+++ b/keyboards/bpiphany/hid_liber/keymaps/bakageta/config.h
diff --git a/keyboards/hid_liber/keymaps/bakageta/keymap.c b/keyboards/bpiphany/hid_liber/keymaps/bakageta/keymap.c
index 5fa3cf6c0a..5fa3cf6c0a 100755
--- a/keyboards/hid_liber/keymaps/bakageta/keymap.c
+++ b/keyboards/bpiphany/hid_liber/keymaps/bakageta/keymap.c
diff --git a/keyboards/hid_liber/keymaps/bakageta/readme.md b/keyboards/bpiphany/hid_liber/keymaps/bakageta/readme.md
index 2b13586c0f..2b13586c0f 100755
--- a/keyboards/hid_liber/keymaps/bakageta/readme.md
+++ b/keyboards/bpiphany/hid_liber/keymaps/bakageta/readme.md
diff --git a/keyboards/hid_liber/keymaps/bakageta/rules.mk b/keyboards/bpiphany/hid_liber/keymaps/bakageta/rules.mk
index b1530f614f..b1530f614f 100755
--- a/keyboards/hid_liber/keymaps/bakageta/rules.mk
+++ b/keyboards/bpiphany/hid_liber/keymaps/bakageta/rules.mk
diff --git a/keyboards/hid_liber/keymaps/default/keymap.c b/keyboards/bpiphany/hid_liber/keymaps/default/keymap.c
index 60ff8d11b0..60ff8d11b0 100755
--- a/keyboards/hid_liber/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/hid_liber/keymaps/default/keymap.c
diff --git a/keyboards/hid_liber/keymaps/default/readme.md b/keyboards/bpiphany/hid_liber/keymaps/default/readme.md
index 2bae07e548..2bae07e548 100755
--- a/keyboards/hid_liber/keymaps/default/readme.md
+++ b/keyboards/bpiphany/hid_liber/keymaps/default/readme.md
diff --git a/keyboards/bpiphany/hid_liber/matrix.c b/keyboards/bpiphany/hid_liber/matrix.c
new file mode 100755
index 0000000000..da73c616d7
--- /dev/null
+++ b/keyboards/bpiphany/hid_liber/matrix.c
@@ -0,0 +1,259 @@
+/* Copyright 2012 Jun Wako <wakojun@gmail.com>: TMK Matrix
+ * Copyright 2018 bakageta <amo@bakageta.com>
+ *
+ * This is heavily based on hid_liber/board.{c|h}.
+ * https://github.com/BathroomEpiphanies/AVR-Keyboard
+ *
+ * Copyright (c) 2012 Fredrik Atmer, Bathroom Epiphanies Inc
+ * http://bathroomepiphanies.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include <util/delay.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+// bit array of key state(1:on, 0:off)
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+
+#define _DDRA (uint8_t *const)&DDRA
+#define _DDRB (uint8_t *const)&DDRB
+#define _DDRC (uint8_t *const)&DDRC
+#define _DDRD (uint8_t *const)&DDRD
+#define _DDRE (uint8_t *const)&DDRE
+#define _DDRF (uint8_t *const)&DDRF
+
+#define _PINA (uint8_t *const)&PINA
+#define _PINB (uint8_t *const)&PINB
+#define _PINC (uint8_t *const)&PINC
+#define _PIND (uint8_t *const)&PIND
+#define _PINE (uint8_t *const)&PINE
+#define _PINF (uint8_t *const)&PINF
+
+#define _PORTA (uint8_t *const)&PORTA
+#define _PORTB (uint8_t *const)&PORTB
+#define _PORTC (uint8_t *const)&PORTC
+#define _PORTD (uint8_t *const)&PORTD
+#define _PORTE (uint8_t *const)&PORTE
+#define _PORTF (uint8_t *const)&PORTF
+
+#define _BIT0 0x01
+#define _BIT1 0x02
+#define _BIT2 0x04
+#define _BIT3 0x08
+#define _BIT4 0x10
+#define _BIT5 0x20
+#define _BIT6 0x40
+#define _BIT7 0x80
+
+/* Specifies the ports and pin numbers for the rows */
+static
+uint8_t *const row_ddr[MATRIX_ROWS] = {
+ _DDRB, _DDRB,
+ _DDRC, _DDRC,
+ _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD,
+ _DDRF, _DDRF, _DDRF, _DDRF, _DDRF, _DDRF};
+
+static
+uint8_t *const row_port[MATRIX_ROWS] = {
+ _PORTB, _PORTB,
+ _PORTC, _PORTC,
+ _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD,
+ _PORTF, _PORTF, _PORTF, _PORTF, _PORTF, _PORTF};
+
+static
+uint8_t *const row_pin[MATRIX_ROWS] = {
+ _PINB, _PINB,
+ _PINC, _PINC,
+ _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND,
+ _PINF, _PINF, _PINF, _PINF, _PINF, _PINF};
+
+static
+const uint8_t row_bit[MATRIX_ROWS] = {
+ _BIT4, _BIT7,
+ _BIT6, _BIT7,
+ _BIT0, _BIT1, _BIT2, _BIT3, _BIT4, _BIT5, _BIT6, _BIT7,
+ _BIT0, _BIT1, _BIT4, _BIT5, _BIT6, _BIT7};
+
+static
+const uint8_t mask = 0x0E;
+
+/* Specifies the ports and pin numbers for the columns */
+static
+const uint8_t col_bit[MATRIX_COLS] = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E};
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+static
+inline void pull_column(int col) {
+ PORTB = col_bit[col] | (PORTB & ~mask);
+}
+
+static
+inline void release_column(int col) {
+}
+
+/* PORTB is set as input with pull-up resistors
+ PORTC,D,E,F are set to high output */
+static
+void setup_io_pins(void) {
+ uint8_t row;
+ DDRB |= 0x0E;
+ PORTB &= ~0x0E;
+ for(row = 0; row < MATRIX_ROWS; row++) {
+ *row_ddr[row] &= ~row_bit[row];
+ *row_port[row] &= ~row_bit[row];
+ }
+}
+
+static
+void setup_leds(void) {
+ DDRB |= 0x60;
+ PORTB |= 0x60;
+}
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ // initialize row and col
+ setup_io_pins();
+ setup_leds();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) { // 0-7
+ pull_column(col); // output hi on theline
+ _delay_us(5); // without this wait it won't read stable value.
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) { // 0-17
+ bool prev_bit = matrix_debouncing[row] & (1<<col);
+ bool curr_bit = *row_pin[row] & row_bit[row];
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ if (debouncing) {
+ dprintf("bounce!: %02X\n", debouncing);
+ }
+ debouncing = DEBOUNCE;
+ }
+ }
+ release_column(col);
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_bin_reverse8(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ for (uint8_t j = 0; j < MATRIX_COLS; j++) {
+ if (matrix_is_on(i, j))
+ count++;
+ }
+ }
+ return count;
+}
diff --git a/keyboards/bpiphany/hid_liber/readme.md b/keyboards/bpiphany/hid_liber/readme.md
new file mode 100755
index 0000000000..3f653cc040
--- /dev/null
+++ b/keyboards/bpiphany/hid_liber/readme.md
@@ -0,0 +1,17 @@
+# HID Liberation Device
+
+DIY daughterboard for Filco Majestouch TKL developed by Geekhack and Deskthority communities. The PCB was engineered by bpiphany.
+
+## Wiki on Deskthority.net
+- [Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_Instructions)
+- [Assembly Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions)
+
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: HID Liberation Device (ATmega32U4)
+* Hardware Availability: Discontinued
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/hid_liber:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/hid_liber/rules.mk b/keyboards/bpiphany/hid_liber/rules.mk
index ecdc53dad1..ecdc53dad1 100755
--- a/keyboards/hid_liber/rules.mk
+++ b/keyboards/bpiphany/hid_liber/rules.mk
diff --git a/keyboards/bpiphany/kitten_paw/matrix.c b/keyboards/bpiphany/kitten_paw/matrix.c
index b59089cdf4..56114858f1 100644
--- a/keyboards/bpiphany/kitten_paw/matrix.c
+++ b/keyboards/bpiphany/kitten_paw/matrix.c
@@ -117,13 +117,6 @@ uint8_t matrix_scan(void) {
return 1;
}
-bool matrix_is_modified(void) {
- if (debouncing)
- return false;
- else
- return true;
-}
-
inline bool matrix_is_on(uint8_t row, uint8_t col) {
return (matrix[row] & ((matrix_row_t)1<<col));
}
diff --git a/keyboards/bpiphany/pegasushoof/2013/matrix.c b/keyboards/bpiphany/pegasushoof/2013/matrix.c
index 037f323c00..09244982d9 100644
--- a/keyboards/bpiphany/pegasushoof/2013/matrix.c
+++ b/keyboards/bpiphany/pegasushoof/2013/matrix.c
@@ -110,13 +110,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing)
- return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/business_card/business_card.h b/keyboards/business_card/business_card.h
deleted file mode 100644
index f330a01822..0000000000
--- a/keyboards/business_card/business_card.h
+++ /dev/null
@@ -1,25 +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
-
-#ifdef KEYBOARD_business_card_alpha
- #include "alpha.h"
-#endif
-#ifdef KEYBOARD_business_card_beta
- #include "beta.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/business_card/readme.md b/keyboards/business_card/readme.md
deleted file mode 100644
index c1bb32c9c3..0000000000
--- a/keyboards/business_card/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# business_card
-
-![business_card](imgur.com image replace me!)
-
-A short description of the keyboard/project
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: The PCBs, controllers supported
-Hardware Availability: links to where you can find this hardware
-
-Make example for this keyboard (after setting up your build environment):
-
- make business_card:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/business_card/rules.mk b/keyboards/business_card/rules.mk
deleted file mode 100644
index cda401220e..0000000000
--- a/keyboards/business_card/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-DEFAULT_FOLDER = business_card/beta
diff --git a/keyboards/butterstick/readme.md b/keyboards/butterstick/readme.md
deleted file mode 100644
index 8bae8ba5a0..0000000000
--- a/keyboards/butterstick/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Butter Stick
-
-![Butter Stick](https://i.redd.it/mvteaomko7s21.jpg)
-
-A chorded 20% keyboard packing full sized useage into your pocket. More info on [gboards.ca](http://docs.gboards.ca/Meet-Butter-Stick)!
-
-Keyboard Maintainer: [Germ](https://github.com/germ)
-Hardware Availability: [g Heavy Industries](https://www.gboards.ca/product/butter-stick-limited-edition)
-
-Make example for this keyboard (after setting up your build environment):
-
- make butterstick:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/c39/readme.md b/keyboards/c39/readme.md
deleted file mode 100755
index 0454f1c12b..0000000000
--- a/keyboards/c39/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# C39
-=======
-
-![C39](https://i.imgur.com/KuWIIuW.png)
-
-A compact 39 key keyboard.
-
-Keyboard Maintainer: [Maple Computing]()
-Hardware Supported: C39 PCB
-Hardware Availability: [SpaceCat.design](https://spacecat.design)
-
-Make example for this keyboard (after setting up your build environment):
-
- make c39:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cu24/config.h b/keyboards/capsunlocked/cu24/config.h
index a2a4e727ff..a2a4e727ff 100644
--- a/keyboards/cu24/config.h
+++ b/keyboards/capsunlocked/cu24/config.h
diff --git a/keyboards/cu24/cu24.c b/keyboards/capsunlocked/cu24/cu24.c
index 0c976f076f..0c976f076f 100644
--- a/keyboards/cu24/cu24.c
+++ b/keyboards/capsunlocked/cu24/cu24.c
diff --git a/keyboards/cu24/cu24.h b/keyboards/capsunlocked/cu24/cu24.h
index 8e3daa4758..8e3daa4758 100644
--- a/keyboards/cu24/cu24.h
+++ b/keyboards/capsunlocked/cu24/cu24.h
diff --git a/keyboards/cu24/info.json b/keyboards/capsunlocked/cu24/info.json
index 532bc13bee..532bc13bee 100644
--- a/keyboards/cu24/info.json
+++ b/keyboards/capsunlocked/cu24/info.json
diff --git a/keyboards/cu24/keymaps/default/keymap.c b/keyboards/capsunlocked/cu24/keymaps/default/keymap.c
index aa2d834dfa..aa2d834dfa 100644
--- a/keyboards/cu24/keymaps/default/keymap.c
+++ b/keyboards/capsunlocked/cu24/keymaps/default/keymap.c
diff --git a/keyboards/cu24/keymaps/default/readme.md b/keyboards/capsunlocked/cu24/keymaps/default/readme.md
index 5528d6c0d8..5528d6c0d8 100644
--- a/keyboards/cu24/keymaps/default/readme.md
+++ b/keyboards/capsunlocked/cu24/keymaps/default/readme.md
diff --git a/keyboards/capsunlocked/cu24/readme.md b/keyboards/capsunlocked/cu24/readme.md
new file mode 100644
index 0000000000..250ff8847f
--- /dev/null
+++ b/keyboards/capsunlocked/cu24/readme.md
@@ -0,0 +1,15 @@
+# CU24
+
+![CU24](https://i.imgur.com/AU1QisF.jpg)
+
+A luxurious 24 key keypad with various layouts. Includes RGB underglow, backlight and an aluminium, brass and nylon case.
+
+Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
+Hardware Supported: PCB v1.0 (uses a 32u4)
+Hardware Availability: [caps-unlocked.com](http://caps-unlocked.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make capsunlocked/cu24:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/cu24/rules.mk b/keyboards/capsunlocked/cu24/rules.mk
index 87e6fffce0..87e6fffce0 100644
--- a/keyboards/cu24/rules.mk
+++ b/keyboards/capsunlocked/cu24/rules.mk
diff --git a/keyboards/cu75/config.h b/keyboards/capsunlocked/cu75/config.h
index cfcb08cce1..cfcb08cce1 100644
--- a/keyboards/cu75/config.h
+++ b/keyboards/capsunlocked/cu75/config.h
diff --git a/keyboards/capsunlocked/cu75/cu75.c b/keyboards/capsunlocked/cu75/cu75.c
new file mode 100644
index 0000000000..e52edd90fa
--- /dev/null
+++ b/keyboards/capsunlocked/cu75/cu75.c
@@ -0,0 +1,116 @@
+#include <avr/sfr_defs.h>
+#include <avr/timer_avr.h>
+#include <avr/wdt.h>
+#include "cu75.h"
+#include "keymap.h"
+#include "debug.h"
+#include "../lfkeyboards/issi.h"
+#include "../lfkeyboards/TWIlib.h"
+#include "../lfkeyboards/lighting.h"
+
+#ifdef AUDIO_ENABLE
+float test_sound[][2] = SONG(STARTUP_SOUND);
+#include "audio.h"
+#endif
+
+uint16_t click_hz = CLICK_HZ;
+uint16_t click_time = CLICK_MS;
+uint8_t click_toggle = CLICK_ENABLED;
+
+
+void matrix_init_kb(void)
+{
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+
+#ifdef AUDIO_ENABLE
+ audio_init();
+ PLAY_SONG(test_sound);
+ // Fix port B5
+ setPinInput(B5);
+ writePinHigh(B5);
+#else
+ // If we're not using the audio pin, drive it low
+ setPinOutput(C6);
+ writePinLow(C6);
+#endif
+#ifdef ISSI_ENABLE
+ issi_init();
+#endif
+}
+
+void matrix_scan_kb(void)
+{
+#ifdef WATCHDOG_ENABLE
+ wdt_reset();
+#endif
+#ifdef ISSI_ENABLE
+ // switch/underglow lighting update
+ static uint32_t issi_device = 0;
+ static uint32_t twi_last_ready = 0;
+ if(twi_last_ready > 1000){
+ // Its been way too long since the last ISSI update, reset the I2C bus and start again
+ dprintf("TWI failed to recover, TWI re-init\n");
+ twi_last_ready = 0;
+ TWIInit();
+ force_issi_refresh();
+ }
+ if(isTWIReady()){
+ twi_last_ready = 0;
+ // If the i2c bus is available, kick off the issi update, alternate between devices
+ update_issi(issi_device, issi_device);
+ if(issi_device){
+ issi_device = 0;
+ }else{
+ issi_device = 3;
+ }
+ }else{
+ twi_last_ready++;
+ }
+#endif
+ matrix_scan_user();
+}
+
+void click(uint16_t freq, uint16_t duration){
+#ifdef AUDIO_ENABLE
+ if(freq >= 100 && freq <= 20000 && duration < 100){
+ play_note(freq, 10);
+ for (uint16_t i = 0; i < duration; i++){
+ _delay_ms(1);
+ }
+ stop_all_notes();
+ }
+#endif
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t* record)
+{
+ // Test code that turns on the switch led for the key that is pressed
+ // set_backlight_by_keymap(record->event.key.col, record->event.key.row);
+ if (click_toggle && record->event.pressed){
+ click(click_hz, click_time);
+ }
+ if (keycode == RESET) {
+ reset_keyboard_kb();
+ } else {
+ }
+ return process_record_user(keycode, record);
+}
+
+void reset_keyboard_kb(){
+#ifdef WATCHDOG_ENABLE
+ MCUSR = 0;
+ wdt_disable();
+ wdt_reset();
+#endif
+ reset_keyboard();
+}
+
+// LFK lighting info
+const uint8_t switch_matrices[] = {0, 1};
+const uint8_t rgb_matrices[] = {6, 7};
+const uint8_t rgb_sequence[] = {
+ 24, 23, 22, 21, 20, 19, 18, 17, 1, 2, 3, 4, 5,
+ 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 9
+};
diff --git a/keyboards/capsunlocked/cu75/cu75.h b/keyboards/capsunlocked/cu75/cu75.h
new file mode 100644
index 0000000000..11a01b8b7e
--- /dev/null
+++ b/keyboards/capsunlocked/cu75/cu75.h
@@ -0,0 +1,96 @@
+#pragma once
+
+#include "quantum.h"
+#include "matrix.h"
+#include <avr/sfr_defs.h>
+
+typedef struct RGB_Color {
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+} RGB_Color;
+
+typedef struct Layer_Info {
+ uint32_t layer;
+ uint32_t mask;
+ RGB_Color color;
+} Layer_Info;
+
+extern const uint32_t layer_count;
+extern const Layer_Info layer_info[];
+
+#define CLICK_HZ 500
+#define CLICK_MS 2
+#define CLICK_ENABLED 0
+
+void reset_keyboard_kb(void);
+void click(uint16_t freq, uint16_t duration);
+
+#define XXX KC_NO
+
+/* Vanilla Keymap */
+// This a shortcut to help you visually see your layout.
+/*
+* ,-------------------------------------------------------------------------------.
+* | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
+* |-------------------------------------------------------------------------------|
+* | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1F |
+* |-------------------------------------------------------------------------------|
+* | 20 | 21 |22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E |
+* |-------------------------------------------------------------------------------|
+* | 30 | 31 |32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3E |
+* |-------------------------------------------------------------------------------|
+* | 40 | 42 |43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |
+* |-------------------------------------------------------------------------------|
+* | 50 | 51 | 52 | 53 | 56 | 58 | 59 | 5A | 5B | 5C | 5D | 5E |
+* `-------------------------------------------------------------------------------'
+*/
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
+ k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
+ k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX, k1F }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, XXX, k3E, XXX }, \
+ { k40, XXX, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
+ { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
+}
+
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
+ k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, XXX }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
+ { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
+}
+
+#define LAYOUT_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
+ k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX, k1F }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, XXX, k3E, XXX }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
+ { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
+}
diff --git a/keyboards/cu75/info.json b/keyboards/capsunlocked/cu75/info.json
index 07812ddb58..07812ddb58 100644
--- a/keyboards/cu75/info.json
+++ b/keyboards/capsunlocked/cu75/info.json
diff --git a/keyboards/cu75/keymaps/default/keymap.c b/keyboards/capsunlocked/cu75/keymaps/default/keymap.c
index b1e3e9f97a..b1e3e9f97a 100644
--- a/keyboards/cu75/keymaps/default/keymap.c
+++ b/keyboards/capsunlocked/cu75/keymaps/default/keymap.c
diff --git a/keyboards/cu75/keymaps/default/rules.mk b/keyboards/capsunlocked/cu75/keymaps/default/rules.mk
index bbd4c8c9fd..bbd4c8c9fd 100644
--- a/keyboards/cu75/keymaps/default/rules.mk
+++ b/keyboards/capsunlocked/cu75/keymaps/default/rules.mk
diff --git a/keyboards/cu75/keymaps/iso/keymap.c b/keyboards/capsunlocked/cu75/keymaps/iso/keymap.c
index ce7d51eed0..ce7d51eed0 100644
--- a/keyboards/cu75/keymaps/iso/keymap.c
+++ b/keyboards/capsunlocked/cu75/keymaps/iso/keymap.c
diff --git a/keyboards/cu75/keymaps/iso/rules.mk b/keyboards/capsunlocked/cu75/keymaps/iso/rules.mk
index be27fed69c..be27fed69c 100644
--- a/keyboards/cu75/keymaps/iso/rules.mk
+++ b/keyboards/capsunlocked/cu75/keymaps/iso/rules.mk
diff --git a/keyboards/capsunlocked/cu75/readme.md b/keyboards/capsunlocked/cu75/readme.md
new file mode 100644
index 0000000000..78882b2573
--- /dev/null
+++ b/keyboards/capsunlocked/cu75/readme.md
@@ -0,0 +1,17 @@
+# CU75
+
+![CU75](https://i.imgur.com/42ltqi6.jpg)
+
+A luxurious 75% keyboard with various layouts. Includes RGB underglow, backlight and an aluminium, brass and nylon case.
+
+Keyboard Maintainer: [Yiancar](https://github.com/yiancar) and [LFKeyboards](https://github.com/lfkeyboards)
+Hardware Supported: PCB v1.0 (uses a 32u4)
+Hardware Availability: [caps-unlocked.com](http://caps-unlocked.com/)
+
+This PCB uses lighting libraries from LFKeyboards
+
+Make example for this keyboard (after setting up your build environment):
+
+ make capsunlocked/cu75:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/capsunlocked/cu75/rules.mk b/keyboards/capsunlocked/cu75/rules.mk
new file mode 100644
index 0000000000..d3979a9149
--- /dev/null
+++ b/keyboards/capsunlocked/cu75/rules.mk
@@ -0,0 +1,14 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BACKLIGHT_DRIVER = custom
+
+# TODO: These boards need to be converted to RGB Matrix
+VPATH += keyboards/lfkeyboards
+SRC = TWIlib.c issi.c lighting.c
diff --git a/keyboards/cu80/config.h b/keyboards/capsunlocked/cu80/v1/config.h
index d5123cdbad..d5123cdbad 100644
--- a/keyboards/cu80/config.h
+++ b/keyboards/capsunlocked/cu80/v1/config.h
diff --git a/keyboards/cu80/info.json b/keyboards/capsunlocked/cu80/v1/info.json
index 937dfd8b5a..937dfd8b5a 100644
--- a/keyboards/cu80/info.json
+++ b/keyboards/capsunlocked/cu80/v1/info.json
diff --git a/keyboards/cu80/keymaps/default/keymap.c b/keyboards/capsunlocked/cu80/v1/keymaps/default/keymap.c
index befdb527db..befdb527db 100644
--- a/keyboards/cu80/keymaps/default/keymap.c
+++ b/keyboards/capsunlocked/cu80/v1/keymaps/default/keymap.c
diff --git a/keyboards/cu80/keymaps/default/readme.md b/keyboards/capsunlocked/cu80/v1/keymaps/default/readme.md
index e1fd6d7384..e1fd6d7384 100644
--- a/keyboards/cu80/keymaps/default/readme.md
+++ b/keyboards/capsunlocked/cu80/v1/keymaps/default/readme.md
diff --git a/keyboards/capsunlocked/cu80/v1/readme.md b/keyboards/capsunlocked/cu80/v1/readme.md
new file mode 100644
index 0000000000..9d6141a4a0
--- /dev/null
+++ b/keyboards/capsunlocked/cu80/v1/readme.md
@@ -0,0 +1,15 @@
+# CU80
+
+![cu80](https://i.imgur.com/p8D4POn.png)
+
+A customizable 80% keyboard.
+
+* Keyboard Maintainer: [aHolland909](https://github.com/aholland909)
+* Hardware Supported: CU80
+* Hardware Availability: [CapsUnlocked](https://caps-unlocked.com/group-buy-cu80/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make capsunlocked/cu80/v1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cu80/rules.mk b/keyboards/capsunlocked/cu80/v1/rules.mk
index 6bfd2008a8..6bfd2008a8 100644
--- a/keyboards/cu80/rules.mk
+++ b/keyboards/capsunlocked/cu80/v1/rules.mk
diff --git a/keyboards/capsunlocked/cu80/v1/v1.c b/keyboards/capsunlocked/cu80/v1/v1.c
new file mode 100644
index 0000000000..96161175b2
--- /dev/null
+++ b/keyboards/capsunlocked/cu80/v1/v1.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Andy Holland
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "v1.h"
diff --git a/keyboards/cu80/cu80.h b/keyboards/capsunlocked/cu80/v1/v1.h
index 607b7e3afb..607b7e3afb 100644
--- a/keyboards/cu80/cu80.h
+++ b/keyboards/capsunlocked/cu80/v1/v1.h
diff --git a/keyboards/capsunlocked/cu80/v2_ansi/info.json b/keyboards/capsunlocked/cu80/v2_ansi/info.json
index f0317de36d..7615d9f029 100644
--- a/keyboards/capsunlocked/cu80/v2_ansi/info.json
+++ b/keyboards/capsunlocked/cu80/v2_ansi/info.json
@@ -37,7 +37,7 @@
},
"url": "https://caps-unlocked.com/cu80-round-2/",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x0081",
"vid": "0x4355"
},
diff --git a/keyboards/capsunlocked/cu80/v2_iso/info.json b/keyboards/capsunlocked/cu80/v2_iso/info.json
index c332156069..43f074f170 100644
--- a/keyboards/capsunlocked/cu80/v2_iso/info.json
+++ b/keyboards/capsunlocked/cu80/v2_iso/info.json
@@ -37,7 +37,7 @@
},
"url": "https://caps-unlocked.com/cu80-round-2/",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x0080",
"vid": "0x4355"
},
diff --git a/keyboards/cassette42/config.h b/keyboards/cassette42/config.h
deleted file mode 100644
index 1729c31fbd..0000000000
--- a/keyboards/cassette42/config.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Copyright 2019 monksoffunk
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xCA42
-#define DEVICE_VER 0x0001
-#define MANUFACTURER monksoffunk
-#define PRODUCT cassette42
-
-/* key matrix size */
-#define MATRIX_ROWS 1
-#define MATRIX_COLS 6
-
-#define DIRECT_PINS {{ B4, F6, F5, F4, B5, F7 }}
-#define UNUSED_PINS
-
-#define ENCODERS_PAD_A { B6, B3 }
-#define ENCODERS_PAD_B { B2, B1 }
-#define ENCODER_RESOLUTION 4
-
-#define RGB_DI_PIN D3
-#ifdef RGB_DI_PIN
-# define RGBLED_NUM 5
-# define RGBLIGHT_HUE_STEP 8
-# define RGBLIGHT_SAT_STEP 8
-# define RGBLIGHT_VAL_STEP 8
-# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-# define RGBLIGHT_ANIMATIONS
-#endif
-
-#define OLED_FONT_H "keyboards/cassette42/common/glcdfont.c"
diff --git a/keyboards/cassette42/readme.md b/keyboards/cassette42/readme.md
deleted file mode 100644
index 2ba9a661bb..0000000000
--- a/keyboards/cassette42/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Cassette42
-
-![cassette42](https://pbs.twimg.com/media/D63q5S0UcAE9Rfj?format=jpg&name=large)
-
-An audio control pad with 4 switches and 2 rotary encoders.
-
-* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
-* Hardware Supported: Cassette 42 PCB
-* Hardware Availability: [Yushakobo Shop](https://yushakobo.jp/shop/cassette42/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make cassette42:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/centromere/config.h b/keyboards/centromere/config.h
index e502e2534b..b4cae20332 100644
--- a/keyboards/centromere/config.h
+++ b/keyboards/centromere/config.h
@@ -56,12 +56,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 500000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/centromere/matrix.c b/keyboards/centromere/matrix.c
index 7256cd5cb5..bbd771f41b 100644
--- a/keyboards/centromere/matrix.c
+++ b/keyboards/centromere/matrix.c
@@ -15,80 +15,21 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-void matrix_init(void) {
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
- matrix_init_quantum();
- serial_init();
+void matrix_init_custom(void) {
+ uart_init(500000);
}
-uint8_t matrix_scan(void)
-{
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
uint32_t timeout = 0;
+ bool changed = false;
//the s character requests the RF remote slave to send the matrix information
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates, erase the last set of data
uint8_t uart_data[11] = {0};
@@ -96,58 +37,27 @@ uint8_t matrix_scan(void)
//there are 10 bytes corresponding to 1w columns, and an end byte
for (uint8_t i = 0; i < 11; i++) {
//wait for the serial data, timeout if it's been too long
- while(!SERIAL_UART_RXD_PRESENT){
+ while (!uart_available()) {
timeout++;
- if (timeout > 10000){
+ if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
+ if (uart_data[10] == 0xE0) {
//shifting and transferring the keystates to the QMK matrix variable
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 5;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
}
}
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
+ return changed;
}
diff --git a/keyboards/centromere/rules.mk b/keyboards/centromere/rules.mk
index ed777e1b9e..113e1e6aff 100644
--- a/keyboards/centromere/rules.mk
+++ b/keyboards/centromere/rules.mk
@@ -11,16 +11,19 @@ BOOTLOADER = caterina
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-UNICODE_ENABLE = yes # Unicode
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+UNICODE_ENABLE = yes
+CUSTOM_MATRIX = lite
-# # project specific files
-SRC += matrix.c serial_uart.c
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
LAYOUTS = split_3x5_3 split_3x6_3
diff --git a/keyboards/plexus75/config.h b/keyboards/checkerboards/plexus75/config.h
index 5c123c43f1..5c123c43f1 100644
--- a/keyboards/plexus75/config.h
+++ b/keyboards/checkerboards/plexus75/config.h
diff --git a/keyboards/plexus75/info.json b/keyboards/checkerboards/plexus75/info.json
index cb0cb6e295..cb0cb6e295 100644
--- a/keyboards/plexus75/info.json
+++ b/keyboards/checkerboards/plexus75/info.json
diff --git a/keyboards/plexus75/keymaps/default/config.h b/keyboards/checkerboards/plexus75/keymaps/default/config.h
index 9028fcf9fb..9028fcf9fb 100644
--- a/keyboards/plexus75/keymaps/default/config.h
+++ b/keyboards/checkerboards/plexus75/keymaps/default/config.h
diff --git a/keyboards/plexus75/keymaps/default/keymap.c b/keyboards/checkerboards/plexus75/keymaps/default/keymap.c
index def8d0d38c..def8d0d38c 100644
--- a/keyboards/plexus75/keymaps/default/keymap.c
+++ b/keyboards/checkerboards/plexus75/keymaps/default/keymap.c
diff --git a/keyboards/plexus75/keymaps/default/readme.md b/keyboards/checkerboards/plexus75/keymaps/default/readme.md
index 39dccf08e5..39dccf08e5 100644
--- a/keyboards/plexus75/keymaps/default/readme.md
+++ b/keyboards/checkerboards/plexus75/keymaps/default/readme.md
diff --git a/keyboards/plexus75/keymaps/default_3u/keymap.c b/keyboards/checkerboards/plexus75/keymaps/default_3u/keymap.c
index d467c63a18..d467c63a18 100644
--- a/keyboards/plexus75/keymaps/default_3u/keymap.c
+++ b/keyboards/checkerboards/plexus75/keymaps/default_3u/keymap.c
diff --git a/keyboards/plexus75/keymaps/default_3u/readme.md b/keyboards/checkerboards/plexus75/keymaps/default_3u/readme.md
index e7b84c5ba9..e7b84c5ba9 100644
--- a/keyboards/plexus75/keymaps/default_3u/readme.md
+++ b/keyboards/checkerboards/plexus75/keymaps/default_3u/readme.md
diff --git a/keyboards/plexus75/keymaps/default_7u/keymap.c b/keyboards/checkerboards/plexus75/keymaps/default_7u/keymap.c
index 0c2fa678d7..0c2fa678d7 100644
--- a/keyboards/plexus75/keymaps/default_7u/keymap.c
+++ b/keyboards/checkerboards/plexus75/keymaps/default_7u/keymap.c
diff --git a/keyboards/plexus75/keymaps/default_7u/readme.md b/keyboards/checkerboards/plexus75/keymaps/default_7u/readme.md
index a80769aa1f..a80769aa1f 100644
--- a/keyboards/plexus75/keymaps/default_7u/readme.md
+++ b/keyboards/checkerboards/plexus75/keymaps/default_7u/readme.md
diff --git a/keyboards/plexus75/keymaps/via/keymap.c b/keyboards/checkerboards/plexus75/keymaps/via/keymap.c
index 91bdb75d2a..91bdb75d2a 100644
--- a/keyboards/plexus75/keymaps/via/keymap.c
+++ b/keyboards/checkerboards/plexus75/keymaps/via/keymap.c
diff --git a/keyboards/allison/keymaps/via/rules.mk b/keyboards/checkerboards/plexus75/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/allison/keymaps/via/rules.mk
+++ b/keyboards/checkerboards/plexus75/keymaps/via/rules.mk
diff --git a/keyboards/plexus75/plexus75.h b/keyboards/checkerboards/plexus75/plexus75.h
index 0f4cee6887..0f4cee6887 100644
--- a/keyboards/plexus75/plexus75.h
+++ b/keyboards/checkerboards/plexus75/plexus75.h
diff --git a/keyboards/checkerboards/plexus75/readme.md b/keyboards/checkerboards/plexus75/readme.md
new file mode 100644
index 0000000000..5d63086bab
--- /dev/null
+++ b/keyboards/checkerboards/plexus75/readme.md
@@ -0,0 +1,15 @@
+# Plexus75
+
+![Plexus75](https://i.imgur.com/c06EAxJl.jpg)
+
+The Plexus75 is a 60% ortholinear keyboard based on the XD75 but instead of an all 1u bottom row the Plexus75 has a more traditional bottom row similar to reg. 60% boards.
+
+* Keyboard Maintainer: [Nasp](https://github.com/npspears)
+* Hardware Supported: Plexus75 PCB
+* Hardware Availability: https://forms.gle/uSqeNRgJEEQNk4C97
+
+Make example for this keyboard (after setting up your build environment):
+
+ make checkerboards/plexus75:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/plexus75/rules.mk b/keyboards/checkerboards/plexus75/rules.mk
index 77e054b15c..77e054b15c 100644
--- a/keyboards/plexus75/rules.mk
+++ b/keyboards/checkerboards/plexus75/rules.mk
diff --git a/keyboards/pursuit40/config.h b/keyboards/checkerboards/pursuit40/config.h
index b73872306a..b73872306a 100644
--- a/keyboards/pursuit40/config.h
+++ b/keyboards/checkerboards/pursuit40/config.h
diff --git a/keyboards/pursuit40/info.json b/keyboards/checkerboards/pursuit40/info.json
index 42b2377526..42b2377526 100644
--- a/keyboards/pursuit40/info.json
+++ b/keyboards/checkerboards/pursuit40/info.json
diff --git a/keyboards/pursuit40/keymaps/default/config.h b/keyboards/checkerboards/pursuit40/keymaps/default/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/pursuit40/keymaps/default/config.h
+++ b/keyboards/checkerboards/pursuit40/keymaps/default/config.h
diff --git a/keyboards/pursuit40/keymaps/default/keymap.c b/keyboards/checkerboards/pursuit40/keymaps/default/keymap.c
index 1ec29ebf34..1ec29ebf34 100644
--- a/keyboards/pursuit40/keymaps/default/keymap.c
+++ b/keyboards/checkerboards/pursuit40/keymaps/default/keymap.c
diff --git a/keyboards/pursuit40/keymaps/default/readme.md b/keyboards/checkerboards/pursuit40/keymaps/default/readme.md
index 45bc6a33a2..45bc6a33a2 100644
--- a/keyboards/pursuit40/keymaps/default/readme.md
+++ b/keyboards/checkerboards/pursuit40/keymaps/default/readme.md
diff --git a/keyboards/pursuit40/keymaps/via/keymap.c b/keyboards/checkerboards/pursuit40/keymaps/via/keymap.c
index 74120b5151..74120b5151 100644
--- a/keyboards/pursuit40/keymaps/via/keymap.c
+++ b/keyboards/checkerboards/pursuit40/keymaps/via/keymap.c
diff --git a/keyboards/allison_numpad/keymaps/via/rules.mk b/keyboards/checkerboards/pursuit40/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/allison_numpad/keymaps/via/rules.mk
+++ b/keyboards/checkerboards/pursuit40/keymaps/via/rules.mk
diff --git a/keyboards/pursuit40/pursuit40.c b/keyboards/checkerboards/pursuit40/pursuit40.c
index 4fed33c34a..4fed33c34a 100644
--- a/keyboards/pursuit40/pursuit40.c
+++ b/keyboards/checkerboards/pursuit40/pursuit40.c
diff --git a/keyboards/pursuit40/pursuit40.h b/keyboards/checkerboards/pursuit40/pursuit40.h
index 61a906269c..61a906269c 100644
--- a/keyboards/pursuit40/pursuit40.h
+++ b/keyboards/checkerboards/pursuit40/pursuit40.h
diff --git a/keyboards/checkerboards/pursuit40/readme.md b/keyboards/checkerboards/pursuit40/readme.md
new file mode 100644
index 0000000000..b2193fec91
--- /dev/null
+++ b/keyboards/checkerboards/pursuit40/readme.md
@@ -0,0 +1,15 @@
+# Pursuit40
+
+![Pursuit40](https://i.imgur.com/Ay3k75tl.jpg)
+
+The Pursuit40 PCB is a modified layout Panc40 by Alex Panc. It's similar to traditional ortho but the bottom row keys are larger than 1u.
+
+* Keyboard Maintainer: [Nasp](https://github.com/npspears)
+* Hardware Supported: Panc40
+* Hardware Availability: https://panc.co/store/ols/products/panc40-keyboard-pnc-kyb1
+
+Make example for this keyboard (after setting up your build environment):
+
+ make checkerboards/pursuit40:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pursuit40/rules.mk b/keyboards/checkerboards/pursuit40/rules.mk
index 85eec9079f..85eec9079f 100644
--- a/keyboards/pursuit40/rules.mk
+++ b/keyboards/checkerboards/pursuit40/rules.mk
diff --git a/keyboards/quark/config.h b/keyboards/checkerboards/quark/config.h
index 353569d8ec..353569d8ec 100644
--- a/keyboards/quark/config.h
+++ b/keyboards/checkerboards/quark/config.h
diff --git a/keyboards/quark/info.json b/keyboards/checkerboards/quark/info.json
index 3a64c01280..3a64c01280 100644
--- a/keyboards/quark/info.json
+++ b/keyboards/checkerboards/quark/info.json
diff --git a/keyboards/quark/keymaps/ajp10304/keymap.c b/keyboards/checkerboards/quark/keymaps/ajp10304/keymap.c
index 273fbc536f..273fbc536f 100644
--- a/keyboards/quark/keymaps/ajp10304/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/ajp10304/keymap.c
diff --git a/keyboards/quark/keymaps/ajp10304/readme.md b/keyboards/checkerboards/quark/keymaps/ajp10304/readme.md
index 5c9169fa47..5c9169fa47 100644
--- a/keyboards/quark/keymaps/ajp10304/readme.md
+++ b/keyboards/checkerboards/quark/keymaps/ajp10304/readme.md
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/rules.mk b/keyboards/checkerboards/quark/keymaps/ajp10304/rules.mk
index 6c605daecf..6c605daecf 100644
--- a/keyboards/naked48/keymaps/default_with_nafuda/rules.mk
+++ b/keyboards/checkerboards/quark/keymaps/ajp10304/rules.mk
diff --git a/keyboards/quark/keymaps/default/config.h b/keyboards/checkerboards/quark/keymaps/default/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default/config.h
diff --git a/keyboards/quark/keymaps/default/keymap.c b/keyboards/checkerboards/quark/keymaps/default/keymap.c
index 3953b6a68d..3953b6a68d 100644
--- a/keyboards/quark/keymaps/default/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default/keymap.c
diff --git a/keyboards/quark/keymaps/default/readme.md b/keyboards/checkerboards/quark/keymaps/default/readme.md
index 9a85e831e9..9a85e831e9 100644
--- a/keyboards/quark/keymaps/default/readme.md
+++ b/keyboards/checkerboards/quark/keymaps/default/readme.md
diff --git a/keyboards/quark/keymaps/default_4x12/config.h b/keyboards/checkerboards/quark/keymaps/default_4x12/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default_4x12/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12/config.h
diff --git a/keyboards/quark/keymaps/default_4x12/keymap.c b/keyboards/checkerboards/quark/keymaps/default_4x12/keymap.c
index aefb2f2a37..aefb2f2a37 100644
--- a/keyboards/quark/keymaps/default_4x12/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12/keymap.c
diff --git a/keyboards/quark/keymaps/default_4x12_2x225u/config.h b/keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default_4x12_2x225u/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/config.h
diff --git a/keyboards/quark/keymaps/default_4x12_2x225u/keymap.c b/keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/keymap.c
index f2f187bf40..f2f187bf40 100644
--- a/keyboards/quark/keymaps/default_4x12_2x225u/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12_2x225u/keymap.c
diff --git a/keyboards/quark/keymaps/default_4x12_2x3u/config.h b/keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default_4x12_2x3u/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/config.h
diff --git a/keyboards/quark/keymaps/default_4x12_2x3u/keymap.c b/keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/keymap.c
index 128c3e1a04..128c3e1a04 100644
--- a/keyboards/quark/keymaps/default_4x12_2x3u/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default_4x12_2x3u/keymap.c
diff --git a/keyboards/quark/keymaps/default_5x12_2x3u/config.h b/keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default_5x12_2x3u/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/config.h
diff --git a/keyboards/quark/keymaps/default_5x12_2x3u/keymap.c b/keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/keymap.c
index 43e4d7e132..43e4d7e132 100644
--- a/keyboards/quark/keymaps/default_5x12_2x3u/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default_5x12_2x3u/keymap.c
diff --git a/keyboards/quark/keymaps/default_mit/config.h b/keyboards/checkerboards/quark/keymaps/default_mit/config.h
index c6f30237d1..c6f30237d1 100644
--- a/keyboards/quark/keymaps/default_mit/config.h
+++ b/keyboards/checkerboards/quark/keymaps/default_mit/config.h
diff --git a/keyboards/quark/keymaps/default_mit/keymap.c b/keyboards/checkerboards/quark/keymaps/default_mit/keymap.c
index c18b3b557e..c18b3b557e 100644
--- a/keyboards/quark/keymaps/default_mit/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/default_mit/keymap.c
diff --git a/keyboards/quark/keymaps/pezhore/config.h b/keyboards/checkerboards/quark/keymaps/pezhore/config.h
index 824bad44af..824bad44af 100644
--- a/keyboards/quark/keymaps/pezhore/config.h
+++ b/keyboards/checkerboards/quark/keymaps/pezhore/config.h
diff --git a/keyboards/quark/keymaps/pezhore/keymap.c b/keyboards/checkerboards/quark/keymaps/pezhore/keymap.c
index 194fb7cfc4..194fb7cfc4 100644
--- a/keyboards/quark/keymaps/pezhore/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/pezhore/keymap.c
diff --git a/keyboards/quark/keymaps/via/keymap.c b/keyboards/checkerboards/quark/keymaps/via/keymap.c
index 3953b6a68d..3953b6a68d 100644
--- a/keyboards/quark/keymaps/via/keymap.c
+++ b/keyboards/checkerboards/quark/keymaps/via/keymap.c
diff --git a/keyboards/bakeneko65/rev2/keymaps/via/rules.mk b/keyboards/checkerboards/quark/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/bakeneko65/rev2/keymaps/via/rules.mk
+++ b/keyboards/checkerboards/quark/keymaps/via/rules.mk
diff --git a/keyboards/quark/quark.c b/keyboards/checkerboards/quark/quark.c
index 02610c4203..02610c4203 100644
--- a/keyboards/quark/quark.c
+++ b/keyboards/checkerboards/quark/quark.c
diff --git a/keyboards/quark/quark.h b/keyboards/checkerboards/quark/quark.h
index e1af96eb76..e1af96eb76 100644
--- a/keyboards/quark/quark.h
+++ b/keyboards/checkerboards/quark/quark.h
diff --git a/keyboards/checkerboards/quark/readme.md b/keyboards/checkerboards/quark/readme.md
new file mode 100644
index 0000000000..743252758a
--- /dev/null
+++ b/keyboards/checkerboards/quark/readme.md
@@ -0,0 +1,15 @@
+# Quark
+
+![Quark](https://i.imgur.com/WcvKyf4l.jpg)
+
+The Quark PCB is a modified layout for the Planck by OLKB. It's similar to a Planck, but the bottom row was designed to be more useable-larger than 1u keys.
+
+* Keyboard Maintainer: [Nasp](https://github.com/npspears)
+* Hardware Supported: Planck
+* Hardware Availability: https://forms.gle/ZpGtQjBNtsbuSV767
+
+Make example for this keyboard (after setting up your build environment):
+
+ make checkerboards/quark:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/quark/rules.mk b/keyboards/checkerboards/quark/rules.mk
index f56c1ed29e..f56c1ed29e 100644
--- a/keyboards/quark/rules.mk
+++ b/keyboards/checkerboards/quark/rules.mk
diff --git a/keyboards/chidori/readme.md b/keyboards/chidori/readme.md
deleted file mode 100644
index d02b50a758..0000000000
--- a/keyboards/chidori/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# chidori
-
-![Chidori](https://i.imgur.com/QvpLiOvl.jpg)
-
-Yet another split keyboard made with only through-hole components.
-
-* Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
-* Hardware Supported: Chidori PCB, ATMEGA328P
-* Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chidori:default:usbasp
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chili/readme.md b/keyboards/chili/readme.md
deleted file mode 100644
index a383f98fb0..0000000000
--- a/keyboards/chili/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# YDKB Chili
-
-[Chili PCB](https://i.imgur.com/fKi896a.jpg)
-
-The YDKB Chili is a Cherry G80-3000 replacement PCB utilizing the ATmega32U4 microcontroller.
-
-* Keyboard Maintainer: QMK community
-* Hardware Supported: YDKB Chili
-* Hardware Availability: [TaoBao](https://item.taobao.com/item.htm?id=565823984744)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chili:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chimera_ergo/config.h b/keyboards/chimera_ergo/config.h
deleted file mode 100644
index 0767a218b5..0000000000
--- a/keyboards/chimera_ergo/config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER unknown
-#define PRODUCT Chimera Ergo
-
-/* key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 12
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/chimera_ergo/matrix.c b/keyboards/chimera_ergo/matrix.c
deleted file mode 100644
index 577176c466..0000000000
--- a/keyboards/chimera_ergo/matrix.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
-
- matrix_init_quantum();
- serial_init();
-}
-
-uint8_t matrix_scan(void)
-{
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[14] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 14; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
- //shifting and transferring the keystates to the QMK matrix variable
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 6;
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/chimera_ergo/readme.md b/keyboards/chimera_ergo/readme.md
deleted file mode 100644
index 2b5d2d65c0..0000000000
--- a/keyboards/chimera_ergo/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Chimera Ergo
-
-![Chimera Ergo](https://imgur.com/AA6ycMQ.jpg)
-
-A split wireless 40% ergonomic keyboard
-
-Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
-Hardware Supported: Chimera Ergo PCB, WaveShare core nRF51822
-Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ergo/gerbers)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chimera_ergo:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
diff --git a/keyboards/chimera_ergo/rules.mk b/keyboards/chimera_ergo/rules.mk
deleted file mode 100644
index a8bd3a027a..0000000000
--- a/keyboards/chimera_ergo/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-
-# # project specific files
-SRC += matrix.c serial_uart.c
diff --git a/keyboards/chimera_ls/config.h b/keyboards/chimera_ls/config.h
deleted file mode 100644
index 2eb028471d..0000000000
--- a/keyboards/chimera_ls/config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER unknown
-#define PRODUCT Chimera Lets Split
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 12
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/chimera_ls/matrix.c b/keyboards/chimera_ls/matrix.c
deleted file mode 100644
index 9edd91818f..0000000000
--- a/keyboards/chimera_ls/matrix.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#elif (MATRIX_COLS <= 64)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse64(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop64(matrix[i])
-# define ROW_SHIFTER ((uint64_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
- matrix_init_quantum();
- serial_init();
-}
-
-uint8_t matrix_scan(void)
-{
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[11] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 11; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
- //shifting and transferring the keystates to the QMK matrix variable
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/chimera_ls/readme.md b/keyboards/chimera_ls/readme.md
deleted file mode 100644
index 0170dd8a8f..0000000000
--- a/keyboards/chimera_ls/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Chimera LS
-
-![Chimera LS](https://imgur.com/FOGlO4M.jpg)
-
-A wireless version of the Let's Split: a split 40% ortholinear keyboard.
-
-Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
-Hardware Supported: Chimera LS PCB, WaveShare core nRF51822
-Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ls/gerbers)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chimera_ls:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chimera_ls/rules.mk b/keyboards/chimera_ls/rules.mk
deleted file mode 100644
index 377c379911..0000000000
--- a/keyboards/chimera_ls/rules.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-
-# project specific files
-SRC += matrix.c serial_uart.c
-
-LAYOUTS = ortho_4x12
-
-# Disable unsupported hardware
-RGBLIGHT_SUPPORTED = no
-AUDIO_SUPPORTED = no
-BACKLIGHT_SUPPORTED = no
diff --git a/keyboards/chimera_ortho/config.h b/keyboards/chimera_ortho/config.h
deleted file mode 100644
index 974502525c..0000000000
--- a/keyboards/chimera_ortho/config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER unknown
-#define PRODUCT Chimera Ortho
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 10
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/chimera_ortho/matrix.c b/keyboards/chimera_ortho/matrix.c
deleted file mode 100644
index 34930af7e2..0000000000
--- a/keyboards/chimera_ortho/matrix.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
-
- matrix_init_quantum();
- serial_init();
-}
-
-uint8_t matrix_scan(void)
-{
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[11] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 11; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
- //shifting and transferring the keystates to the QMK matrix variable
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/chimera_ortho/readme.md b/keyboards/chimera_ortho/readme.md
deleted file mode 100644
index 644300f986..0000000000
--- a/keyboards/chimera_ortho/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Chimera Ortho
-
-![Chimera Ortho](https://imgur.com/pbdNsoP.jpg)
-
-A split wireless 40% ortholinear keyboard
-
-Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
-
-
-Hardware Supported: Chimera Ortho PCB, WaveShare core nRF51822
-
-Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ortho/gerbers)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chimera_ortho:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
diff --git a/keyboards/chimera_ortho/rules.mk b/keyboards/chimera_ortho/rules.mk
deleted file mode 100644
index fbe6872001..0000000000
--- a/keyboards/chimera_ortho/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-
-# project specific files
-SRC += matrix.c serial_uart.c
diff --git a/keyboards/chimera_ortho_plus/config.h b/keyboards/chimera_ortho_plus/config.h
deleted file mode 100644
index 4b12796e95..0000000000
--- a/keyboards/chimera_ortho_plus/config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xDE1D
-#define DEVICE_VER 0x0001
-#define MANUFACTURER unknown
-#define PRODUCT Chimera Ortho Plus
-
-/* key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 12
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/chimera_ortho_plus/matrix.c b/keyboards/chimera_ortho_plus/matrix.c
deleted file mode 100644
index 818e05ac98..0000000000
--- a/keyboards/chimera_ortho_plus/matrix.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
-
- matrix_init_quantum();
- serial_init();
-}
-
-uint8_t matrix_scan(void)
-{
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[14] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 14; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
- //shifting and transferring the keystates to the QMK matrix variable
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 6;
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/chimera_ortho_plus/readme.md b/keyboards/chimera_ortho_plus/readme.md
deleted file mode 100644
index ad4cb9d392..0000000000
--- a/keyboards/chimera_ortho_plus/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Chimera Ortho+
-
-![Chimera Ortho+](https://i.imgur.com/tuDaGdTl.jpg)
-
-A split wireless 50% ortholinear keyboard.
-
-* Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
-* Hardware Supported: Chimera Ortho+ PCB, WaveShare core nRF51822
-* Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ortho_plus/gerbers)
-
-Make example for this keyboard (after setting up your build environment):
-
- make chimera_ortho_plus:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chimera_ortho_plus/rules.mk b/keyboards/chimera_ortho_plus/rules.mk
deleted file mode 100644
index e99e79c327..0000000000
--- a/keyboards/chimera_ortho_plus/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-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
-UNICODE_ENABLE = yes
-CUSTOM_MATRIX = yes
-
-# project specific files
-SRC += matrix.c serial_uart.c
diff --git a/keyboards/choc_taro/readme.md b/keyboards/choc_taro/readme.md
deleted file mode 100644
index f0900c2fe4..0000000000
--- a/keyboards/choc_taro/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# choc_taro
-
-![choc_taro](https://i.gyazo.com/717ddeed13cd2f956ed01b71c6e96f87.jpg)
-
-gh60 compatible choc keyboard
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: choc taro pcb
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make choc_taro:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/choco60/readme.md b/keyboards/choco60/readme.md
deleted file mode 100644
index 0290f95d28..0000000000
--- a/keyboards/choco60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Choco60
-
-A 60% split keyboard for programmers.
-
-1. [Rev.1](rev2/): Pro Micro supported.
-2. [Rev.2](rev2/): Atmega32u2, USB-C supported.
-
-* Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
-* Hardware Supported: Choco60 PCB Rev1, Rev.2
-* Hardware Availability: https://keys.recompile.net/projects/choco60/
-
-Make example for this keyboard (after setting up your build environment):
-
- make choco60/rev1:default
- make choco60/rev2:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/choco60/rules.mk b/keyboards/choco60/rules.mk
deleted file mode 100644
index 8f712e359b..0000000000
--- a/keyboards/choco60/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = choco60/rev1
diff --git a/keyboards/christmas_tree/readme.md b/keyboards/christmas_tree/readme.md
deleted file mode 100644
index b3337dd5ba..0000000000
--- a/keyboards/christmas_tree/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Christmas Tree
-===
-
-![Christmas Tree](https://i.imgur.com/I9FNdSv.png)
-
-A tiny 6 key macro pad, in the shape of a christmas tree, made by That-Canadian, SpaceCat, and ChillCaps.
-
-Keyboard Maintainer: [That-Canadian](https://github.com/That-Canadian)
-
-Make example for this keyboard (after setting up your build environment):
-
- make christmas_tree/V2017:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/christmas_tree/rules.mk b/keyboards/christmas_tree/rules.mk
deleted file mode 100644
index dada70c309..0000000000
--- a/keyboards/christmas_tree/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-DEFAULT_FOLDER = christmas_tree/V2017
diff --git a/keyboards/claw44/claw44.h b/keyboards/claw44/claw44.h
deleted file mode 100644
index 4ca25fcb2b..0000000000
--- a/keyboards/claw44/claw44.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_claw44_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/claw44/readme.md b/keyboards/claw44/readme.md
deleted file mode 100644
index 7e72e08971..0000000000
--- a/keyboards/claw44/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Claw44
-
-![Claw44](https://i.imgur.com/5a8iogl.jpg)
-
-A split keyboard with 3x6 vertically staggered keys and 4 thumb keys.
-
-Keyboard Maintainer: [@yfuku_](https://twitter.com/yfuku_)
-Hardware Supported: Claw44 PCB, ProMicro
-Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make claw44:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/claw44/rules.mk b/keyboards/claw44/rules.mk
deleted file mode 100644
index 6ba5e853fb..0000000000
--- a/keyboards/claw44/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-DEFAULT_FOLDER = claw44/rev1
diff --git a/keyboards/clueboard/17/info.json b/keyboards/clueboard/17/info.json
index fb12f7dcce..5ea4937e50 100644
--- a/keyboards/clueboard/17/info.json
+++ b/keyboards/clueboard/17/info.json
@@ -32,7 +32,7 @@
},
"url": "",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2312",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/2x1800/2019/info.json b/keyboards/clueboard/2x1800/2019/info.json
index a877cae8b0..886f3878bf 100644
--- a/keyboards/clueboard/2x1800/2019/info.json
+++ b/keyboards/clueboard/2x1800/2019/info.json
@@ -24,7 +24,7 @@
"rows": ["C0", "C1", "C2", "C3", "C7", "F7", "B1", "F2", "F3", "F4", "F5", "F6", "C6"]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x23A0",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/60/info.json b/keyboards/clueboard/60/info.json
index 1698d221d3..16f94644c9 100644
--- a/keyboards/clueboard/60/info.json
+++ b/keyboards/clueboard/60/info.json
@@ -5,6 +5,7 @@
"debounce": 6,
"processor": "STM32F303",
"board": "QMK_PROTON_C",
+ "bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
@@ -24,7 +25,7 @@
"rows": ["B0", "B1", "B2", "A15", "A10"]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2350",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66/rev1/info.json b/keyboards/clueboard/66/rev1/info.json
index 6ff733b3dd..bc3e1e23b6 100644
--- a/keyboards/clueboard/66/rev1/info.json
+++ b/keyboards/clueboard/66/rev1/info.json
@@ -37,7 +37,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2301",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66/rev2/info.json b/keyboards/clueboard/66/rev2/info.json
index 27d293552d..0cfb690388 100644
--- a/keyboards/clueboard/66/rev2/info.json
+++ b/keyboards/clueboard/66/rev2/info.json
@@ -37,7 +37,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2320",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66/rev3/info.json b/keyboards/clueboard/66/rev3/info.json
index 0f2eada753..208bc22dd1 100644
--- a/keyboards/clueboard/66/rev3/info.json
+++ b/keyboards/clueboard/66/rev3/info.json
@@ -37,7 +37,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2370",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66/rev4/info.json b/keyboards/clueboard/66/rev4/info.json
index f1f1ae4dec..8733216f05 100644
--- a/keyboards/clueboard/66/rev4/info.json
+++ b/keyboards/clueboard/66/rev4/info.json
@@ -5,6 +5,7 @@
"debounce": 5,
"processor": "STM32F303",
"board": "QMK_PROTON_C",
+ "bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
@@ -35,7 +36,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2390",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66_hotswap/gen1/info.json b/keyboards/clueboard/66_hotswap/gen1/info.json
index 5e0e5b8aca..2b42bf22e8 100644
--- a/keyboards/clueboard/66_hotswap/gen1/info.json
+++ b/keyboards/clueboard/66_hotswap/gen1/info.json
@@ -5,6 +5,7 @@
"debounce": 5,
"processor": "STM32F303",
"board": "QMK_PROTON_C",
+ "bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": true,
@@ -24,7 +25,7 @@
"rows": ["B11", "A6", "A3", "A2", "A1", "B5", "B6", "C15", "C14", "C13"]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2391",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/66_hotswap/gen1/rules.mk b/keyboards/clueboard/66_hotswap/gen1/rules.mk
index c73b4c4731..e69de29bb2 100644
--- a/keyboards/clueboard/66_hotswap/gen1/rules.mk
+++ b/keyboards/clueboard/66_hotswap/gen1/rules.mk
@@ -1,2 +0,0 @@
-# project specific files
-SRC = led.c
diff --git a/keyboards/clueboard/66_hotswap/prototype/info.json b/keyboards/clueboard/66_hotswap/prototype/info.json
index d3f81851f4..4940af8439 100644
--- a/keyboards/clueboard/66_hotswap/prototype/info.json
+++ b/keyboards/clueboard/66_hotswap/prototype/info.json
@@ -37,7 +37,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2390",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/california/info.json b/keyboards/clueboard/california/info.json
index e40b2338cd..24a9399923 100644
--- a/keyboards/clueboard/california/info.json
+++ b/keyboards/clueboard/california/info.json
@@ -4,6 +4,7 @@
"maintainer": "skullydazed",
"processor": "STM32F303",
"board": "QMK_PROTON_C",
+ "bootloader": "stm32-dfu",
"matrix_pins": {
"direct": [
["A10", "A9"],
diff --git a/keyboards/clueboard/card/info.json b/keyboards/clueboard/card/info.json
index 24088b2c41..62ccd9ced0 100644
--- a/keyboards/clueboard/card/info.json
+++ b/keyboards/clueboard/card/info.json
@@ -32,7 +32,7 @@
"saturation_steps": 17
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2330",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/info.json b/keyboards/clueboard/info.json
index 47514f280b..4421643e10 100644
--- a/keyboards/clueboard/info.json
+++ b/keyboards/clueboard/info.json
@@ -2,7 +2,7 @@
"manufacturer": "Clueboard",
"maintainer": "skullydazed",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"vid": "0xC1ED"
}
}
diff --git a/keyboards/coarse/ixora/config.h b/keyboards/coarse/ixora/config.h
index ec7dfa705b..13246e9226 100644
--- a/keyboards/coarse/ixora/config.h
+++ b/keyboards/coarse/ixora/config.h
@@ -5,7 +5,7 @@
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0C61
-#define DEVICE_VER 0x00C6
+#define DEVICE_VER 0x0100
#define MANUFACTURER PeiorisBoards
#define PRODUCT Ixora Rev1
diff --git a/keyboards/coarse/vinta/config.h b/keyboards/coarse/vinta/config.h
index d08994ae67..4e35b3461a 100644
--- a/keyboards/coarse/vinta/config.h
+++ b/keyboards/coarse/vinta/config.h
@@ -5,7 +5,7 @@
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0C61
-#define DEVICE_VER 0x00C6
+#define DEVICE_VER 0x0100
#define MANUFACTURER PeiorisBoards
#define PRODUCT Vinta R1
diff --git a/keyboards/cocoa40/readme.md b/keyboards/cocoa40/readme.md
deleted file mode 100644
index e05caaba9c..0000000000
--- a/keyboards/cocoa40/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# cocoa40
-
-![cocoa40](https://keys.recompile.net/images/cocoa40-main@600w.jpg)
-
-A 40% split keyboard for programmers.
-
-Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
-Hardware Supported: The Cocoa40 PCBs, Pro Micro supported
-Hardware Availability: https://keys.recompile.net/projects/cocoa40/
-
-Make example for this keyboard (after setting up your build environment):
-
- make cocoa40:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/comet46/config.h b/keyboards/comet46/config.h
deleted file mode 100644
index 067dabb103..0000000000
--- a/keyboards/comet46/config.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER SatT
-#define PRODUCT Comet46
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 10
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-// Define masks for modifiers
-#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
-#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
-#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/comet46/matrix.c b/keyboards/comet46/matrix.c
deleted file mode 100644
index 34930af7e2..0000000000
--- a/keyboards/comet46/matrix.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
-
- matrix_init_quantum();
- serial_init();
-}
-
-uint8_t matrix_scan(void)
-{
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[11] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 11; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
- //shifting and transferring the keystates to the QMK matrix variable
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/comet46/readme.md b/keyboards/comet46/readme.md
deleted file mode 100644
index 3db64d291b..0000000000
--- a/keyboards/comet46/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Comet46
-
-![Comet46](https://user-images.githubusercontent.com/39004890/50396817-a1660600-07af-11e9-8611-3156c635db43.jpg)
-
-A split wireless 40% column-staggered keyboard
-
-Keyboard Maintainer: [SatT](https://github.com/satt99)
-Hardware Supported: Comet46 PCB, atmega32u4, nRF51822
-Hardware Availability: [Comet46 PCB, case, and receiver](https://github.com/satt99/comet46-hardware)
-Firmware for nordic MCUs: [SRC and precompiled](https://github.com/satt99/comet46-firmware)
-
-Make example for this keyboard (after setting up your build environment):
-
- make comet46:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
diff --git a/keyboards/comet46/rules.mk b/keyboards/comet46/rules.mk
deleted file mode 100644
index 814622226a..0000000000
--- a/keyboards/comet46/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-
-# project specific files
-SRC += matrix.c \
- i2c.c \
- ssd1306.c \
- serial_uart.c
diff --git a/keyboards/contender/rules.mk b/keyboards/contender/rules.mk
index 72c7f6b2ff..155e14ca68 100644
--- a/keyboards/contender/rules.mk
+++ b/keyboards/contender/rules.mk
@@ -12,8 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/contra/keymaps/maxr1998/rules.mk b/keyboards/contra/keymaps/maxr1998/rules.mk
index e1ba074290..8607ce19ef 100644
--- a/keyboards/contra/keymaps/maxr1998/rules.mk
+++ b/keyboards/contra/keymaps/maxr1998/rules.mk
@@ -1,7 +1,7 @@
RGBLIGHT_ENABLE = yes
KEY_LOCK_ENABLE = yes
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
UNICODE_ENABLE = no
MOUSEKEY_ENABLE = no
diff --git a/keyboards/converter/m0110_usb/readme.md b/keyboards/converter/m0110_usb/readme.md
index a148091cd9..d066aa5a7c 100644
--- a/keyboards/converter/m0110_usb/readme.md
+++ b/keyboards/converter/m0110_usb/readme.md
@@ -5,7 +5,7 @@ This is a port of the original M0110 converter from TMK to QMK. The original con
## Enabling Bluetooth for the Adafruit Feather 32U4 BLE
-Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` value from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
+Simply add `BLUETOOTH = BluefruitLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` value from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
## Pins
diff --git a/keyboards/converter/palm_usb/config.h b/keyboards/converter/palm_usb/config.h
index 4afc654e85..35032835cd 100644
--- a/keyboards/converter/palm_usb/config.h
+++ b/keyboards/converter/palm_usb/config.h
@@ -60,58 +60,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
get_mods() == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-
-
-/* Serial(USART) configuration
- * asynchronous, negative logic, 9600baud, no flow control
- * 1-start bit, 8-data bit, non parity, 1-stop bit
- */
-#define SERIAL_SOFT_BAUD 9600
-#define SERIAL_SOFT_PARITY_NONE
-#define SERIAL_SOFT_BIT_ORDER_LSB
-#if (HANDSPRING == 0)
- #define SERIAL_SOFT_LOGIC_NEGATIVE //RS232 logic
-#endif
-/* RXD Port */
-#define SERIAL_SOFT_RXD_ENABLE
-
-// we are using Pro micro pin 3 / D0 as serial
-#define SERIAL_SOFT_RXD_DDR DDRD
-#define SERIAL_SOFT_RXD_PORT PORTD
-#define SERIAL_SOFT_RXD_PIN PIND
-#define SERIAL_SOFT_RXD_BIT 0
-#define SERIAL_SOFT_RXD_VECT INT0_vect
-
-/* RXD Interupt */
-#define SERIAL_SOFT_RXD_INIT() do { \
- /* pin configuration: input with pull-up */ \
- SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
- SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
- /* enable interrupt: INT0(rising edge) */ \
- EICRA |= ((1<<ISC01)|(1<<ISC00)); \
- EIMSK |= (1<<INT0); \
- sei(); \
-} while (0)
-#define SERIAL_SOFT_RXD_INT_ENTER()
-#define SERIAL_SOFT_RXD_INT_EXIT() do { \
- /* clear interrupt flag */ \
- EIFR = (1<<INTF0); \
-} while (0)
-#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
-
-/* TXD Port */
-#define SERIAL_SOFT_TXD_ENABLE
-#define SERIAL_SOFT_TXD_DDR DDRD
-#define SERIAL_SOFT_TXD_PORT PORTD
-#define SERIAL_SOFT_TXD_PIN PIND
-#define SERIAL_SOFT_TXD_BIT 3
-#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_INIT() do { \
- /* pin configuration: output */ \
- SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
- /* idle */ \
- SERIAL_SOFT_TXD_ON(); \
-} while (0)
-
-
diff --git a/keyboards/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c
index 289284b616..010fd56c79 100644
--- a/keyboards/converter/palm_usb/matrix.c
+++ b/keyboards/converter/palm_usb/matrix.c
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-#include "protocol/serial.h"
+#include "uart.h"
#include "timer.h"
@@ -58,8 +58,6 @@ static uint16_t disconnect_counter = 0;
#define COL(code) ((code & COL_MASK) )
#define KEYUP(code) ((code & KEY_MASK) >>7 )
-static bool is_modified = false;
-
__attribute__ ((weak))
void matrix_init_kb(void) {
matrix_init_user();
@@ -166,7 +164,7 @@ uint8_t rts_reset(void) {
uint8_t get_serial_byte(void) {
static uint8_t code;
while(1) {
- code = serial_recv();
+ code = uart_read();
if (code) {
debug_hex(code); debug(" ");
return code;
@@ -242,7 +240,7 @@ void matrix_init(void)
debug_enable = true;
//debug_matrix =true;
- serial_init(); // arguments all #defined
+ uart_init(9600); // arguments all #defined
#if (HANDSPRING == 0)
pins_init(); // set all inputs and outputs.
@@ -292,7 +290,7 @@ void matrix_init(void)
uint8_t matrix_scan(void)
{
uint8_t code;
- code = serial_recv();
+ code = uart_read();
if (!code) {
/*
disconnect_counter ++;
@@ -354,11 +352,6 @@ uint8_t matrix_scan(void)
return code;
}
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
inline
bool matrix_has_ghost(void)
{
diff --git a/keyboards/converter/palm_usb/post_rules.mk b/keyboards/converter/palm_usb/post_rules.mk
deleted file mode 100644
index 9c11076701..0000000000
--- a/keyboards/converter/palm_usb/post_rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-ifdef HARDWARE_SERIAL
- # Untested with palm_usb
- SRC += protocol/serial_uart.c
- OPT_DEFS += -DHARDWARE_SERIAL
-else
- SRC += protocol/serial_soft.c
-endif
diff --git a/keyboards/converter/palm_usb/rules.mk b/keyboards/converter/palm_usb/rules.mk
index c5e680b883..a1d2e39b23 100644
--- a/keyboards/converter/palm_usb/rules.mk
+++ b/keyboards/converter/palm_usb/rules.mk
@@ -20,5 +20,6 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
CUSTOM_MATRIX = yes
SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
DEFAULT_FOLDER = converter/palm_usb/stowaway
diff --git a/keyboards/converter/sun_usb/command_extra.c b/keyboards/converter/sun_usb/command_extra.c
index 756a9160bb..332776ab90 100644
--- a/keyboards/converter/sun_usb/command_extra.c
+++ b/keyboards/converter/sun_usb/command_extra.c
@@ -1,5 +1,5 @@
#include QMK_KEYBOARD_H
-#include "protocol/serial.h"
+#include "uart.h"
bool sun_bell = false;
bool sun_click = false;
@@ -20,41 +20,41 @@ bool command_extra(uint8_t code)
return false;
case KC_DEL:
print("Reset\n");
- serial_send(0x01);
+ uart_write(0x01);
break;
case KC_HOME:
sun_bell = !sun_bell;
if (sun_bell) {
print("Bell On\n");
- serial_send(0x02);
+ uart_write(0x02);
} else {
print("Bell Off\n");
- serial_send(0x03);
+ uart_write(0x03);
}
break;
case KC_END:
sun_click = !sun_click;
if (sun_click) {
print("Click On\n");
- serial_send(0x0A);
+ uart_write(0x0A);
} else {
print("Click Off\n");
- serial_send(0x0B);
+ uart_write(0x0B);
}
break;
case KC_PGUP:
print("LED all on\n");
- serial_send(0x0E);
- serial_send(0xFF);
+ uart_write(0x0E);
+ uart_write(0xFF);
break;
case KC_PGDOWN:
print("LED all off\n");
- serial_send(0x0E);
- serial_send(0x00);
+ uart_write(0x0E);
+ uart_write(0x00);
break;
case KC_INSERT:
print("layout\n");
- serial_send(0x0F);
+ uart_write(0x0F);
break;
default:
xprintf("Unknown extra command: %02X\n", code);
diff --git a/keyboards/converter/sun_usb/config.h b/keyboards/converter/sun_usb/config.h
index c67ae5ebae..0a4aa019f7 100644
--- a/keyboards/converter/sun_usb/config.h
+++ b/keyboards/converter/sun_usb/config.h
@@ -33,50 +33,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
get_mods() == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-
-
-/* Serial(USART) configuration
- * asynchronous, negative logic, 1200baud, no flow control
- * 1-start bit, 8-data bit, non parity, 1-stop bit
- */
-#define SERIAL_SOFT_BAUD 1200
-#define SERIAL_SOFT_PARITY_NONE
-#define SERIAL_SOFT_BIT_ORDER_LSB
-#define SERIAL_SOFT_LOGIC_NEGATIVE
-/* RXD Port */
-#define SERIAL_SOFT_RXD_ENABLE
-#define SERIAL_SOFT_RXD_DDR DDRD
-#define SERIAL_SOFT_RXD_PORT PORTD
-#define SERIAL_SOFT_RXD_PIN PIND
-#define SERIAL_SOFT_RXD_BIT 2
-#define SERIAL_SOFT_RXD_VECT INT2_vect
-/* RXD Interupt */
-#define SERIAL_SOFT_RXD_INIT() do { \
- /* pin configuration: input with pull-up */ \
- SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
- SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
- /* enable interrupt: INT2(rising edge) */ \
- EICRA |= ((1<<ISC21)|(1<<ISC20)); \
- EIMSK |= (1<<INT2); \
- sei(); \
-} while (0)
-#define SERIAL_SOFT_RXD_INT_ENTER()
-#define SERIAL_SOFT_RXD_INT_EXIT() do { \
- /* clear interrupt flag */ \
- EIFR = (1<<INTF2); \
-} while (0)
-#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
-/* TXD Port */
-#define SERIAL_SOFT_TXD_ENABLE
-#define SERIAL_SOFT_TXD_DDR DDRD
-#define SERIAL_SOFT_TXD_PORT PORTD
-#define SERIAL_SOFT_TXD_PIN PIND
-#define SERIAL_SOFT_TXD_BIT 3
-#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_INIT() do { \
- /* pin configuration: output */ \
- SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
- /* idle */ \
- SERIAL_SOFT_TXD_ON(); \
-} while (0)
diff --git a/keyboards/converter/sun_usb/led.c b/keyboards/converter/sun_usb/led.c
index a409699e92..f8d183fd48 100644
--- a/keyboards/converter/sun_usb/led.c
+++ b/keyboards/converter/sun_usb/led.c
@@ -16,7 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-#include "protocol/serial.h"
+#include "uart.h"
void led_set(uint8_t usb_led)
{
@@ -27,6 +27,6 @@ void led_set(uint8_t usb_led)
if (usb_led & (1<<USB_LED_CAPS_LOCK)) sun_led |= (1<<3);
xprintf("LED: %02X\n", usb_led);
- serial_send(0x0E);
- serial_send(sun_led);
+ uart_write(0x0E);
+ uart_write(sun_led);
}
diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c
index 21f45111ec..e28d165d52 100644
--- a/keyboards/converter/sun_usb/matrix.c
+++ b/keyboards/converter/sun_usb/matrix.c
@@ -16,7 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-#include "protocol/serial.h"
+#include "uart.h"
/*
* Matrix Array usage:
@@ -38,8 +38,6 @@ static uint8_t matrix[MATRIX_ROWS];
#define ROW(code) ((code>>3)&0xF)
#define COL(code) (code&0x07)
-static bool is_modified = false;
-
__attribute__ ((weak))
void matrix_init_kb(void) {
matrix_init_user();
@@ -76,7 +74,7 @@ void matrix_init(void)
/* PORTD |= (1<<6); */
debug_enable = true;
- serial_init();
+ uart_init(1200);
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
@@ -86,12 +84,12 @@ void matrix_init(void)
/* print("Reseting "); */
/* while (1) { */
/* print("."); */
- /* while (serial_recv()); */
- /* serial_send(0x01); */
+ /* while (uart_read()); */
+ /* uart_write(0x01); */
/* _delay_ms(500); */
- /* if (serial_recv() == 0xFF) { */
+ /* if (uart_read() == 0xFF) { */
/* _delay_ms(500); */
- /* if (serial_recv() == 0x04) */
+ /* if (uart_read() == 0x04) */
/* break; */
/* } */
/* } */
@@ -106,7 +104,7 @@ void matrix_init(void)
uint8_t matrix_scan(void)
{
uint8_t code;
- code = serial_recv();
+ code = uart_read();
if (!code) return 0;
debug_hex(code); debug(" ");
@@ -115,7 +113,7 @@ uint8_t matrix_scan(void)
case 0xFF: // reset success: FF 04
print("reset: ");
_delay_ms(500);
- code = serial_recv();
+ code = uart_read();
xprintf("%02X\n", code);
if (code == 0x04) {
// LED status
@@ -125,12 +123,12 @@ uint8_t matrix_scan(void)
case 0xFE: // layout: FE <layout>
print("layout: ");
_delay_ms(500);
- xprintf("%02X\n", serial_recv());
+ xprintf("%02X\n", uart_read());
return 0;
case 0x7E: // reset fail: 7E 01
print("reset fail: ");
_delay_ms(500);
- xprintf("%02X\n", serial_recv());
+ xprintf("%02X\n", uart_read());
return 0;
case 0x7F:
// all keys up
@@ -154,11 +152,6 @@ uint8_t matrix_scan(void)
return code;
}
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
inline
bool matrix_has_ghost(void)
{
diff --git a/keyboards/converter/sun_usb/post_rules.mk b/keyboards/converter/sun_usb/post_rules.mk
deleted file mode 100644
index 2ea1f0a5bf..0000000000
--- a/keyboards/converter/sun_usb/post_rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-ifdef HARDWARE_SERIAL
- SRC += protocol/serial_uart.c
- OPT_DEFS += -DHARDWARE_SERIAL
-else
- SRC += protocol/serial_soft.c
-endif
diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk
index 2f2ddde1d0..d25bcc7ffa 100644
--- a/keyboards/converter/sun_usb/rules.mk
+++ b/keyboards/converter/sun_usb/rules.mk
@@ -20,5 +20,6 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
CUSTOM_MATRIX = yes
SRC += matrix.c led.c
+QUANTUM_LIB_SRC += uart.c
DEFAULT_FOLDER = converter/sun_usb/type5
diff --git a/keyboards/converter/usb_usb/ble/config.h b/keyboards/converter/usb_usb/ble/config.h
index 80e4968c41..92df24d003 100644
--- a/keyboards/converter/usb_usb/ble/config.h
+++ b/keyboards/converter/usb_usb/ble/config.h
@@ -4,8 +4,8 @@
#define PRODUCT QMK BLE Adapter
// Turn off the mode leds on the BLE module
-#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0
-#define ADAFRUIT_BLE_ENABLE_POWER_LED 0
+#define BLUEFRUIT_LE_ENABLE_MODE_LEDS 0
+#define BLUEFRUIT_LE_ENABLE_POWER_LED 0
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk
index 596f719630..df5bc36635 100644
--- a/keyboards/converter/usb_usb/ble/rules.mk
+++ b/keyboards/converter/usb_usb/ble/rules.mk
@@ -12,6 +12,6 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
LTO_ENABLE = yes
diff --git a/keyboards/converter/usb_usb/custom_matrix.cpp b/keyboards/converter/usb_usb/custom_matrix.cpp
index 296f7fcd02..265fb2c68d 100644
--- a/keyboards/converter/usb_usb/custom_matrix.cpp
+++ b/keyboards/converter/usb_usb/custom_matrix.cpp
@@ -185,17 +185,13 @@ extern "C"
// restore LED state when keyboard comes up
if (usb_state == USB_STATE_RUNNING) {
dprintf("speed: %s\n", usb_host.getVbusState()==FSHOST ? "full" : "low");
- keyboard_set_leds(host_keyboard_leds());
+ led_set(host_keyboard_leds());
}
}
matrix_scan_quantum();
return 1;
}
- bool matrix_is_modified(void) {
- return matrix_is_mod;
- }
-
bool matrix_is_on(uint8_t row, uint8_t col) {
uint8_t code = CODE(row, col);
diff --git a/keyboards/crkbd/keymaps/snowe/rules.mk b/keyboards/crkbd/keymaps/snowe/rules.mk
index ce3b5928fa..96ae4bbf95 100644
--- a/keyboards/crkbd/keymaps/snowe/rules.mk
+++ b/keyboards/crkbd/keymaps/snowe/rules.mk
@@ -21,6 +21,6 @@ OCEAN_DREAM_ENABLE = yes
LUNA_ENABLE = no # disabled so travis build succeeds
# if firmware size over limit, try this option
-CFLAGS += -flto
+LTO_ENABLE = yes
WPM_ENABLE = yes
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk b/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
index bd53c19211..92ded45e93 100644
--- a/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
@@ -1,5 +1,6 @@
# Build Options
POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+POINTING_DEVICE_DRIVER = custom
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/cu24/readme.md b/keyboards/cu24/readme.md
deleted file mode 100644
index ca3f3f5a04..0000000000
--- a/keyboards/cu24/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# CU24
-
-![CU24](https://geekhack.org/index.php?action=dlattach;topic=93289.0;attach=185492;image)
-
-A luxurious 24 key keypad with various layouts. Includes RGB underglow, backlight and an aluminium, brass and nylon case.
-
-Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
-Hardware Supported: PCB v1.0 (uses a 32u4)
-Hardware Availability: [caps-unlocked.com](http://caps-unlocked.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make CU24:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/cu75/cu75.c b/keyboards/cu75/cu75.c
deleted file mode 100644
index 273dd09271..0000000000
--- a/keyboards/cu75/cu75.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include <avr/sfr_defs.h>
-#include <avr/timer_avr.h>
-#include <avr/wdt.h>
-#include "cu75.h"
-#include "keymap.h"
-#include "debug.h"
-#include "../lfkeyboards/issi.h"
-#include "../lfkeyboards/TWIlib.h"
-#include "../lfkeyboards/lighting.h"
-
-#ifdef AUDIO_ENABLE
-float test_sound[][2] = SONG(STARTUP_SOUND);
-#include "audio.h"
-#endif
-
-uint16_t click_hz = CLICK_HZ;
-uint16_t click_time = CLICK_MS;
-uint8_t click_toggle = CLICK_ENABLED;
-
-
-void matrix_init_kb(void)
-{
- // put your keyboard start-up code here
- // runs once when the firmware starts up
- matrix_init_user();
-
-#ifdef AUDIO_ENABLE
- audio_init();
- PLAY_SONG(test_sound);
- // Fix port B5
- setPinInput(B5);
- writePinHigh(B5);
-#else
- // If we're not using the audio pin, drive it low
- setPinOutput(C6);
- writePinLow(C6);
-#endif
-#ifdef ISSI_ENABLE
- issi_init();
-#endif
-}
-
-void matrix_scan_kb(void)
-{
-#ifdef WATCHDOG_ENABLE
- wdt_reset();
-#endif
-#ifdef ISSI_ENABLE
- // switch/underglow lighting update
- static uint32_t issi_device = 0;
- static uint32_t twi_last_ready = 0;
- if(twi_last_ready > 1000){
- // Its been way too long since the last ISSI update, reset the I2C bus and start again
- dprintf("TWI failed to recover, TWI re-init\n");
- twi_last_ready = 0;
- TWIInit();
- force_issi_refresh();
- }
- if(isTWIReady()){
- twi_last_ready = 0;
- // If the i2c bus is available, kick off the issi update, alternate between devices
- update_issi(issi_device, issi_device);
- if(issi_device){
- issi_device = 0;
- }else{
- issi_device = 3;
- }
- }else{
- twi_last_ready++;
- }
-#endif
- matrix_scan_user();
-}
-
-void click(uint16_t freq, uint16_t duration){
-#ifdef AUDIO_ENABLE
- if(freq >= 100 && freq <= 20000 && duration < 100){
- play_note(freq, 10);
- for (uint16_t i = 0; i < duration; i++){
- _delay_ms(1);
- }
- stop_all_notes();
- }
-#endif
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t* record)
-{
- // Test code that turns on the switch led for the key that is pressed
- // set_backlight_by_keymap(record->event.key.col, record->event.key.row);
- if (click_toggle && record->event.pressed){
- click(click_hz, click_time);
- }
- if (keycode == RESET) {
- reset_keyboard_kb();
- } else {
- }
- return process_record_user(keycode, record);
-}
-
-void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
-{
-#ifdef AUDIO_ENABLE
- int8_t sign = 1;
-#endif
- if(id == LFK_ESC_TILDE){
- // Send ~ on shift-esc
- void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- method(shifted ? KC_GRAVE : KC_ESCAPE);
- send_keyboard_report();
- }else if(event->event.pressed){
- switch(id){
- case LFK_SET_DEFAULT_LAYER:
- // set/save the current base layer to eeprom, falls through to LFK_CLEAR
- eeconfig_update_default_layer(1UL << opt);
- default_layer_set(1UL << opt);
- case LFK_CLEAR:
- // Go back to default layer
- layer_clear();
- break;
-#ifdef AUDIO_ENABLE
- case LFK_CLICK_FREQ_LOWER:
- sign = -1; // continue to next statement
- case LFK_CLICK_FREQ_HIGHER:
- click_hz += sign * 100;
- click(click_hz, click_time);
- break;
- case LFK_CLICK_TOGGLE:
- if(click_toggle){
- click_toggle = 0;
- click(4000, 100);
- click(1000, 100);
- }else{
- click_toggle = 1;
- click(1000, 100);
- click(4000, 100);
- }
- break;
- case LFK_CLICK_TIME_SHORTER:
- sign = -1; // continue to next statement
- case LFK_CLICK_TIME_LONGER:
- click_time += sign;
- click(click_hz, click_time);
- break;
-#endif
- case LFK_DEBUG_SETTINGS:
- dprintf("Click:\n");
- dprintf(" toggle: %d\n", click_toggle);
- dprintf(" freq(hz): %d\n", click_hz);
- dprintf(" duration(ms): %d\n", click_time);
- break;
- }
- }
-}
-
-void reset_keyboard_kb(){
-#ifdef WATCHDOG_ENABLE
- MCUSR = 0;
- wdt_disable();
- wdt_reset();
-#endif
- reset_keyboard();
-}
-
-// LFK lighting info
-const uint8_t switch_matrices[] = {0, 1};
-const uint8_t rgb_matrices[] = {6, 7};
-const uint8_t rgb_sequence[] = {
- 24, 23, 22, 21, 20, 19, 18, 17, 1, 2, 3, 4, 5,
- 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 9
-};
diff --git a/keyboards/cu75/cu75.h b/keyboards/cu75/cu75.h
deleted file mode 100644
index 444c8daaec..0000000000
--- a/keyboards/cu75/cu75.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-#include "matrix.h"
-#include <avr/sfr_defs.h>
-
-typedef struct RGB_Color {
- uint16_t red;
- uint16_t green;
- uint16_t blue;
-} RGB_Color;
-
-typedef struct Layer_Info {
- uint32_t layer;
- uint32_t mask;
- RGB_Color color;
-} Layer_Info;
-
-extern const uint32_t layer_count;
-extern const Layer_Info layer_info[];
-
-enum action_functions {
- LFK_CLEAR = 0, // Resets all layers
- LFK_ESC_TILDE, // esc+lshift = ~
- LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
- LFK_CLICK_TOGGLE, // Adjusts click duration
- LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
- LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
- LFK_CLICK_TIME_LONGER, // Adjusts click duration
- LFK_CLICK_TIME_SHORTER, // Adjusts click duration
- LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
- LFK_LED_TEST // cycles through switch and RGB LEDs
-};
-
-#define CLICK_HZ 500
-#define CLICK_MS 2
-#define CLICK_ENABLED 0
-
-void reset_keyboard_kb(void);
-void click(uint16_t freq, uint16_t duration);
-
-#define XXX KC_NO
-
-/* Vanilla Keymap */
-// This a shortcut to help you visually see your layout.
-/*
-* ,-------------------------------------------------------------------------------.
-* | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
-* |-------------------------------------------------------------------------------|
-* | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1F |
-* |-------------------------------------------------------------------------------|
-* | 20 | 21 |22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E |
-* |-------------------------------------------------------------------------------|
-* | 30 | 31 |32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3E |
-* |-------------------------------------------------------------------------------|
-* | 40 | 42 |43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |
-* |-------------------------------------------------------------------------------|
-* | 50 | 51 | 52 | 53 | 56 | 58 | 59 | 5A | 5B | 5C | 5D | 5E |
-* `-------------------------------------------------------------------------------'
-*/
-// The first section contains all of the arguements
-// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
- k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
- k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
-) { \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX, k1F }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, XXX, k3E, XXX }, \
- { k40, XXX, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
- { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
-}
-
-#define LAYOUT_all( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
- k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
-) { \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, XXX }, \
- { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
- { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
-}
-
-#define LAYOUT_iso( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3E, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \
- k50, k51, k52, k53, k56, k58, k59, k5A, k5B, k5C, k5D, k5E \
-) { \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX, k1F }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, XXX, k3E, XXX }, \
- { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, XXX }, \
- { k50, k51, k52, k53, XXX, XXX, k56, XXX, k58, k59, k5A, k5B, k5C, k5D, k5E, XXX } \
-}
diff --git a/keyboards/cu75/readme.md b/keyboards/cu75/readme.md
deleted file mode 100644
index 43603440fd..0000000000
--- a/keyboards/cu75/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# CU75
-
-![CU75](https://geekhack.org/index.php?action=dlattach;topic=91767.0;attach=179167;image)
-
-A luxurious 75% keyboard with various layouts. Includes RGB underglow, backlight and an aluminium, brass and nylon case.
-
-Keyboard Maintainer: [Yiancar](https://github.com/yiancar) and [LFKeyboards](https://github.com/lfkeyboards)
-Hardware Supported: PCB v1.0 (uses a 32u4)
-Hardware Availability: [caps-unlocked.com](http://caps-unlocked.com/)
-
-This PCB uses lighting libraries from LFKeyboards
-
-Make example for this keyboard (after setting up your build environment):
-
- make CU75:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/cu75/rules.mk b/keyboards/cu75/rules.mk
deleted file mode 100644
index 6274267ab1..0000000000
--- a/keyboards/cu75/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BACKLIGHT_DRIVER = custom
-
-SRC = ../lfkeyboards/TWIlib.c ../lfkeyboards/issi.c ../lfkeyboards/lighting.c
diff --git a/keyboards/cu80/cu80.c b/keyboards/cu80/cu80.c
deleted file mode 100644
index f794161717..0000000000
--- a/keyboards/cu80/cu80.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "cu80.h" \ No newline at end of file
diff --git a/keyboards/cu80/readme.md b/keyboards/cu80/readme.md
deleted file mode 100644
index cb48c875b9..0000000000
--- a/keyboards/cu80/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# CU80
-
-![cu80](https://cdn11.bigcommerce.com/s-vdedjo0w46/images/stencil/900x900/products/287/2336/DSCF3583__16019.1567722956.png?c=2)
-
-A customizable 80% keyboard.
-
-* Keyboard Maintainer: [aHolland909](https://github.com/aholland909)
-* Hardware Supported: CU80
-* Hardware Availability: [CapsUnlocked](https://caps-unlocked.com/group-buy-cu80/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make cu80:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cybergear/macro25/info.json b/keyboards/cybergear/macro25/info.json
index a029ae1ce3..75078962bf 100644
--- a/keyboards/cybergear/macro25/info.json
+++ b/keyboards/cybergear/macro25/info.json
@@ -5,7 +5,7 @@
"usb": {
"vid": "0x1209",
"pid": "0x69A1",
- "device_ver": "0x0001"
+ "device_version": "0.0.1",
},
"diode_direction": "COL2ROW",
"layouts": {
diff --git a/keyboards/angel64/alpha/.noci b/keyboards/dailycraft/bat43/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel64/alpha/.noci
+++ b/keyboards/dailycraft/bat43/.noci
diff --git a/keyboards/bat43/bat43.c b/keyboards/dailycraft/bat43/bat43.c
index 5d52c672b6..5d52c672b6 100644
--- a/keyboards/bat43/bat43.c
+++ b/keyboards/dailycraft/bat43/bat43.c
diff --git a/keyboards/dailycraft/bat43/bat43.h b/keyboards/dailycraft/bat43/bat43.h
new file mode 100644
index 0000000000..046788a0a1
--- /dev/null
+++ b/keyboards/dailycraft/bat43/bat43.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#ifdef KEYBOARD_dailycraft_bat43_rev1
+ #include "rev1.h"
+#endif
+#ifdef KEYBOARD_dailycraft_bat43_rev2
+ #include "rev2.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/bat43/config.h b/keyboards/dailycraft/bat43/config.h
index 19b485fd16..19b485fd16 100644
--- a/keyboards/bat43/config.h
+++ b/keyboards/dailycraft/bat43/config.h
diff --git a/keyboards/bat43/keymaps/default/keymap.c b/keyboards/dailycraft/bat43/keymaps/default/keymap.c
index 5e4faccf98..5e4faccf98 100644
--- a/keyboards/bat43/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/bat43/keymaps/default/keymap.c
diff --git a/keyboards/bat43/keymaps/default/readme.md b/keyboards/dailycraft/bat43/keymaps/default/readme.md
index f72376d89e..f72376d89e 100644
--- a/keyboards/bat43/keymaps/default/readme.md
+++ b/keyboards/dailycraft/bat43/keymaps/default/readme.md
diff --git a/keyboards/bat43/keymaps/via/keymap.c b/keyboards/dailycraft/bat43/keymaps/via/keymap.c
index 0bd07b6017..0bd07b6017 100644
--- a/keyboards/bat43/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/bat43/keymaps/via/keymap.c
diff --git a/keyboards/bat43/keymaps/via/readme.md b/keyboards/dailycraft/bat43/keymaps/via/readme.md
index f72376d89e..f72376d89e 100644
--- a/keyboards/bat43/keymaps/via/readme.md
+++ b/keyboards/dailycraft/bat43/keymaps/via/readme.md
diff --git a/keyboards/bakeneko65/rev3/keymaps/via/rules.mk b/keyboards/dailycraft/bat43/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/bakeneko65/rev3/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/bat43/keymaps/via/rules.mk
diff --git a/keyboards/dailycraft/bat43/readme.md b/keyboards/dailycraft/bat43/readme.md
new file mode 100644
index 0000000000..6b58aa5ca3
--- /dev/null
+++ b/keyboards/dailycraft/bat43/readme.md
@@ -0,0 +1,26 @@
+# bat43
+
+![bat43](https://user-images.githubusercontent.com/30647434/78112239-e9ef8300-7438-11ea-810b-994a75ffa24e.jpg)
+
+A 43-key keyboard.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: bat43 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/bat43:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/bat43: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/bat43/.noci b/keyboards/dailycraft/bat43/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bat43/.noci
+++ b/keyboards/dailycraft/bat43/rev1/.noci
diff --git a/keyboards/bat43/rev1/info.json b/keyboards/dailycraft/bat43/rev1/info.json
index 0384bb5feb..0384bb5feb 100644
--- a/keyboards/bat43/rev1/info.json
+++ b/keyboards/dailycraft/bat43/rev1/info.json
diff --git a/keyboards/bat43/rev1/rev1.c b/keyboards/dailycraft/bat43/rev1/rev1.c
index cff7598740..cff7598740 100644
--- a/keyboards/bat43/rev1/rev1.c
+++ b/keyboards/dailycraft/bat43/rev1/rev1.c
diff --git a/keyboards/bat43/rev1/rev1.h b/keyboards/dailycraft/bat43/rev1/rev1.h
index cf21486a9e..cf21486a9e 100644
--- a/keyboards/bat43/rev1/rev1.h
+++ b/keyboards/dailycraft/bat43/rev1/rev1.h
diff --git a/keyboards/bat43/rev1/rules.mk b/keyboards/dailycraft/bat43/rev1/rules.mk
index 8b13789179..8b13789179 100644
--- a/keyboards/bat43/rev1/rules.mk
+++ b/keyboards/dailycraft/bat43/rev1/rules.mk
diff --git a/keyboards/bat43/rev1/.noci b/keyboards/dailycraft/bat43/rev2/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bat43/rev1/.noci
+++ b/keyboards/dailycraft/bat43/rev2/.noci
diff --git a/keyboards/bat43/rev2/info.json b/keyboards/dailycraft/bat43/rev2/info.json
index 352d9a6beb..352d9a6beb 100644
--- a/keyboards/bat43/rev2/info.json
+++ b/keyboards/dailycraft/bat43/rev2/info.json
diff --git a/keyboards/bat43/rev2/rev2.c b/keyboards/dailycraft/bat43/rev2/rev2.c
index cffc0acd32..cffc0acd32 100644
--- a/keyboards/bat43/rev2/rev2.c
+++ b/keyboards/dailycraft/bat43/rev2/rev2.c
diff --git a/keyboards/bat43/rev2/rev2.h b/keyboards/dailycraft/bat43/rev2/rev2.h
index f84cdbaa4d..f84cdbaa4d 100644
--- a/keyboards/bat43/rev2/rev2.h
+++ b/keyboards/dailycraft/bat43/rev2/rev2.h
diff --git a/keyboards/bat43/rev2/rules.mk b/keyboards/dailycraft/bat43/rev2/rules.mk
index 8b13789179..8b13789179 100644
--- a/keyboards/bat43/rev2/rules.mk
+++ b/keyboards/dailycraft/bat43/rev2/rules.mk
diff --git a/keyboards/dailycraft/bat43/rules.mk b/keyboards/dailycraft/bat43/rules.mk
new file mode 100644
index 0000000000..c2e1c5755f
--- /dev/null
+++ b/keyboards/dailycraft/bat43/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+DEFAULT_FOLDER = dailycraft/bat43/rev2
diff --git a/keyboards/bat43/rev2/.noci b/keyboards/dailycraft/claw44/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bat43/rev2/.noci
+++ b/keyboards/dailycraft/claw44/.noci
diff --git a/keyboards/claw44/claw44.c b/keyboards/dailycraft/claw44/claw44.c
index d87103065c..d87103065c 100644
--- a/keyboards/claw44/claw44.c
+++ b/keyboards/dailycraft/claw44/claw44.c
diff --git a/keyboards/dailycraft/claw44/claw44.h b/keyboards/dailycraft/claw44/claw44.h
new file mode 100644
index 0000000000..76ecda6e90
--- /dev/null
+++ b/keyboards/dailycraft/claw44/claw44.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifdef KEYBOARD_dailycraft_claw44_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/claw44/config.h b/keyboards/dailycraft/claw44/config.h
index 0bd74ff833..0bd74ff833 100644
--- a/keyboards/claw44/config.h
+++ b/keyboards/dailycraft/claw44/config.h
diff --git a/keyboards/claw44/keymaps/default/config.h b/keyboards/dailycraft/claw44/keymaps/default/config.h
index 98469e4ccf..98469e4ccf 100644
--- a/keyboards/claw44/keymaps/default/config.h
+++ b/keyboards/dailycraft/claw44/keymaps/default/config.h
diff --git a/keyboards/claw44/keymaps/default/keymap.c b/keyboards/dailycraft/claw44/keymaps/default/keymap.c
index 204c0c94e6..204c0c94e6 100644
--- a/keyboards/claw44/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/claw44/keymaps/default/keymap.c
diff --git a/keyboards/claw44/keymaps/oled/config.h b/keyboards/dailycraft/claw44/keymaps/oled/config.h
index 5379ce677d..5379ce677d 100644
--- a/keyboards/claw44/keymaps/oled/config.h
+++ b/keyboards/dailycraft/claw44/keymaps/oled/config.h
diff --git a/keyboards/claw44/keymaps/oled/keymap.c b/keyboards/dailycraft/claw44/keymaps/oled/keymap.c
index 1778ac6167..1778ac6167 100644
--- a/keyboards/claw44/keymaps/oled/keymap.c
+++ b/keyboards/dailycraft/claw44/keymaps/oled/keymap.c
diff --git a/keyboards/claw44/keymaps/oled/rules.mk b/keyboards/dailycraft/claw44/keymaps/oled/rules.mk
index d34d066ded..d34d066ded 100644
--- a/keyboards/claw44/keymaps/oled/rules.mk
+++ b/keyboards/dailycraft/claw44/keymaps/oled/rules.mk
diff --git a/keyboards/claw44/keymaps/via/config.h b/keyboards/dailycraft/claw44/keymaps/via/config.h
index 98469e4ccf..98469e4ccf 100644
--- a/keyboards/claw44/keymaps/via/config.h
+++ b/keyboards/dailycraft/claw44/keymaps/via/config.h
diff --git a/keyboards/claw44/keymaps/via/keymap.c b/keyboards/dailycraft/claw44/keymaps/via/keymap.c
index 5373b76876..5373b76876 100644
--- a/keyboards/claw44/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/claw44/keymaps/via/keymap.c
diff --git a/keyboards/barleycorn/keymaps/via/rules.mk b/keyboards/dailycraft/claw44/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/barleycorn/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/claw44/keymaps/via/rules.mk
diff --git a/keyboards/claw44/lib/glcdfont.c b/keyboards/dailycraft/claw44/lib/glcdfont.c
index 9fa1c806aa..9fa1c806aa 100644
--- a/keyboards/claw44/lib/glcdfont.c
+++ b/keyboards/dailycraft/claw44/lib/glcdfont.c
diff --git a/keyboards/dailycraft/claw44/readme.md b/keyboards/dailycraft/claw44/readme.md
new file mode 100644
index 0000000000..e533bd7c82
--- /dev/null
+++ b/keyboards/dailycraft/claw44/readme.md
@@ -0,0 +1,26 @@
+# Claw44
+
+![Claw44](https://i.imgur.com/5a8iogl.jpg)
+
+A split keyboard with 3x6 vertically staggered keys and 4 thumb keys.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: Claw44 PCB, ProMicro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/claw44:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/claw44: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/bigseries/1key/.noci b/keyboards/dailycraft/claw44/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bigseries/1key/.noci
+++ b/keyboards/dailycraft/claw44/rev1/.noci
diff --git a/keyboards/claw44/rev1/config.h b/keyboards/dailycraft/claw44/rev1/config.h
index 8116b605cd..8116b605cd 100644
--- a/keyboards/claw44/rev1/config.h
+++ b/keyboards/dailycraft/claw44/rev1/config.h
diff --git a/keyboards/claw44/rev1/info.json b/keyboards/dailycraft/claw44/rev1/info.json
index 3301e7d2ec..3301e7d2ec 100644
--- a/keyboards/claw44/rev1/info.json
+++ b/keyboards/dailycraft/claw44/rev1/info.json
diff --git a/keyboards/claw44/rev1/readme.md b/keyboards/dailycraft/claw44/rev1/readme.md
index 5ad967af80..5ad967af80 100644
--- a/keyboards/claw44/rev1/readme.md
+++ b/keyboards/dailycraft/claw44/rev1/readme.md
diff --git a/keyboards/7skb/rev1/rev1.c b/keyboards/dailycraft/claw44/rev1/rev1.c
index 520a869e57..520a869e57 100644
--- a/keyboards/7skb/rev1/rev1.c
+++ b/keyboards/dailycraft/claw44/rev1/rev1.c
diff --git a/keyboards/claw44/rev1/rev1.h b/keyboards/dailycraft/claw44/rev1/rev1.h
index 9a05977153..9a05977153 100644
--- a/keyboards/claw44/rev1/rev1.h
+++ b/keyboards/dailycraft/claw44/rev1/rev1.h
diff --git a/keyboards/claw44/rev1/rules.mk b/keyboards/dailycraft/claw44/rev1/rules.mk
index a66eb7d352..a66eb7d352 100644
--- a/keyboards/claw44/rev1/rules.mk
+++ b/keyboards/dailycraft/claw44/rev1/rules.mk
diff --git a/keyboards/dailycraft/claw44/rules.mk b/keyboards/dailycraft/claw44/rules.mk
new file mode 100644
index 0000000000..69c59f28e6
--- /dev/null
+++ b/keyboards/dailycraft/claw44/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+DEFAULT_FOLDER = dailycraft/claw44/rev1
diff --git a/keyboards/owl8/config.h b/keyboards/dailycraft/owl8/config.h
index d28fd9c927..d28fd9c927 100644
--- a/keyboards/owl8/config.h
+++ b/keyboards/dailycraft/owl8/config.h
diff --git a/keyboards/owl8/info.json b/keyboards/dailycraft/owl8/info.json
index e50484ba90..e50484ba90 100644
--- a/keyboards/owl8/info.json
+++ b/keyboards/dailycraft/owl8/info.json
diff --git a/keyboards/owl8/keymaps/default/keymap.c b/keyboards/dailycraft/owl8/keymaps/default/keymap.c
index e840263639..e840263639 100644
--- a/keyboards/owl8/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/owl8/keymaps/default/keymap.c
diff --git a/keyboards/owl8/keymaps/default/readme.md b/keyboards/dailycraft/owl8/keymaps/default/readme.md
index e0129daa2d..e0129daa2d 100644
--- a/keyboards/owl8/keymaps/default/readme.md
+++ b/keyboards/dailycraft/owl8/keymaps/default/readme.md
diff --git a/keyboards/owl8/keymaps/via/keymap.c b/keyboards/dailycraft/owl8/keymaps/via/keymap.c
index 6e3f6ea90b..6e3f6ea90b 100644
--- a/keyboards/owl8/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/owl8/keymaps/via/keymap.c
diff --git a/keyboards/owl8/keymaps/via/readme.md b/keyboards/dailycraft/owl8/keymaps/via/readme.md
index c4fa65987c..c4fa65987c 100644
--- a/keyboards/owl8/keymaps/via/readme.md
+++ b/keyboards/dailycraft/owl8/keymaps/via/readme.md
diff --git a/keyboards/bat43/keymaps/via/rules.mk b/keyboards/dailycraft/owl8/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/bat43/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/owl8/keymaps/via/rules.mk
diff --git a/keyboards/owl8/owl8.c b/keyboards/dailycraft/owl8/owl8.c
index a31289891a..a31289891a 100644
--- a/keyboards/owl8/owl8.c
+++ b/keyboards/dailycraft/owl8/owl8.c
diff --git a/keyboards/owl8/owl8.h b/keyboards/dailycraft/owl8/owl8.h
index 5e561f580c..5e561f580c 100644
--- a/keyboards/owl8/owl8.h
+++ b/keyboards/dailycraft/owl8/owl8.h
diff --git a/keyboards/dailycraft/owl8/readme.md b/keyboards/dailycraft/owl8/readme.md
new file mode 100644
index 0000000000..c7fab17476
--- /dev/null
+++ b/keyboards/dailycraft/owl8/readme.md
@@ -0,0 +1,26 @@
+# owl8
+
+![owl8](https://raw.githubusercontent.com/yfuku/owl8/master/images/owl8.jpg)
+
+macropad
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: owl8 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/owl8:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/owl8: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/owl8/rules.mk b/keyboards/dailycraft/owl8/rules.mk
index 284ea23e78..284ea23e78 100644
--- a/keyboards/owl8/rules.mk
+++ b/keyboards/dailycraft/owl8/rules.mk
diff --git a/keyboards/ergodash/config.h b/keyboards/dailycraft/wings42/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/ergodash/config.h
+++ b/keyboards/dailycraft/wings42/config.h
diff --git a/keyboards/dailycraft/wings42/readme.md b/keyboards/dailycraft/wings42/readme.md
new file mode 100644
index 0000000000..c919653397
--- /dev/null
+++ b/keyboards/dailycraft/wings42/readme.md
@@ -0,0 +1,26 @@
+# wings42
+
+![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
+
+A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: wings42 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/wings42:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/wings42: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/wings42/rev1/config.h b/keyboards/dailycraft/wings42/rev1/config.h
index cfb4274921..cfb4274921 100644
--- a/keyboards/wings42/rev1/config.h
+++ b/keyboards/dailycraft/wings42/rev1/config.h
diff --git a/keyboards/wings42/rev1/info.json b/keyboards/dailycraft/wings42/rev1/info.json
index 863bb3d34e..863bb3d34e 100644
--- a/keyboards/wings42/rev1/info.json
+++ b/keyboards/dailycraft/wings42/rev1/info.json
diff --git a/keyboards/wings42/rev1/keymaps/default/keymap.c b/keyboards/dailycraft/wings42/rev1/keymaps/default/keymap.c
index 442ba5ed9f..442ba5ed9f 100644
--- a/keyboards/wings42/rev1/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/wings42/rev1/keymaps/default/keymap.c
diff --git a/keyboards/wings42/rev1/keymaps/default/readme.md b/keyboards/dailycraft/wings42/rev1/keymaps/default/readme.md
index d99098ad0c..d99098ad0c 100644
--- a/keyboards/wings42/rev1/keymaps/default/readme.md
+++ b/keyboards/dailycraft/wings42/rev1/keymaps/default/readme.md
diff --git a/keyboards/wings42/rev1/keymaps/via/keymap.c b/keyboards/dailycraft/wings42/rev1/keymaps/via/keymap.c
index 442ba5ed9f..442ba5ed9f 100644
--- a/keyboards/wings42/rev1/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/wings42/rev1/keymaps/via/keymap.c
diff --git a/keyboards/chili/keymaps/via/rules.mk b/keyboards/dailycraft/wings42/rev1/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/chili/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/wings42/rev1/keymaps/via/rules.mk
diff --git a/keyboards/dailycraft/wings42/rev1/readme.md b/keyboards/dailycraft/wings42/rev1/readme.md
new file mode 100644
index 0000000000..959052c41d
--- /dev/null
+++ b/keyboards/dailycraft/wings42/rev1/readme.md
@@ -0,0 +1,26 @@
+# wings42
+
+![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
+
+A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: wings42 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/wings42/rev1:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/wings42/rev1:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/wings42/rev1/rev1.c b/keyboards/dailycraft/wings42/rev1/rev1.c
index dccf24c746..dccf24c746 100644
--- a/keyboards/wings42/rev1/rev1.c
+++ b/keyboards/dailycraft/wings42/rev1/rev1.c
diff --git a/keyboards/wings42/rev1/rev1.h b/keyboards/dailycraft/wings42/rev1/rev1.h
index cd6e35a711..cd6e35a711 100644
--- a/keyboards/wings42/rev1/rev1.h
+++ b/keyboards/dailycraft/wings42/rev1/rev1.h
diff --git a/keyboards/7skb/rev1/rules.mk b/keyboards/dailycraft/wings42/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/7skb/rev1/rules.mk
+++ b/keyboards/dailycraft/wings42/rev1/rules.mk
diff --git a/keyboards/wings42/rev1_extkeys/config.h b/keyboards/dailycraft/wings42/rev1_extkeys/config.h
index f0f04eca59..f0f04eca59 100644
--- a/keyboards/wings42/rev1_extkeys/config.h
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/config.h
diff --git a/keyboards/wings42/rev1_extkeys/info.json b/keyboards/dailycraft/wings42/rev1_extkeys/info.json
index b9a793f112..b9a793f112 100644
--- a/keyboards/wings42/rev1_extkeys/info.json
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/info.json
diff --git a/keyboards/wings42/rev1_extkeys/keymaps/default/keymap.c b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/keymap.c
index 64a2b00c31..64a2b00c31 100644
--- a/keyboards/wings42/rev1_extkeys/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/keymap.c
diff --git a/keyboards/wings42/rev1_extkeys/keymaps/default/readme.md b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/readme.md
index d99098ad0c..d99098ad0c 100644
--- a/keyboards/wings42/rev1_extkeys/keymaps/default/readme.md
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/default/readme.md
diff --git a/keyboards/wings42/rev1_extkeys/keymaps/via/keymap.c b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/keymap.c
index 97c77e182b..97c77e182b 100644
--- a/keyboards/wings42/rev1_extkeys/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/keymap.c
diff --git a/keyboards/choc_taro/keymaps/via/rules.mk b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/choc_taro/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/keymaps/via/rules.mk
diff --git a/keyboards/dailycraft/wings42/rev1_extkeys/readme.md b/keyboards/dailycraft/wings42/rev1_extkeys/readme.md
new file mode 100644
index 0000000000..4a34063ad4
--- /dev/null
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/readme.md
@@ -0,0 +1,26 @@
+# wings42
+
+![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
+
+A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: wings42 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/wings42/rev1_extkeys:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/wings42/rev1_extkeys: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/wings42/rev1_extkeys/rev1_extkeys.c b/keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.c
index 3d0d203704..3d0d203704 100644
--- a/keyboards/wings42/rev1_extkeys/rev1_extkeys.c
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.c
diff --git a/keyboards/wings42/rev1_extkeys/rev1_extkeys.h b/keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.h
index 2ad58047f1..2ad58047f1 100644
--- a/keyboards/wings42/rev1_extkeys/rev1_extkeys.h
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/rev1_extkeys.h
diff --git a/keyboards/angel64/alpha/rules.mk b/keyboards/dailycraft/wings42/rev1_extkeys/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel64/alpha/rules.mk
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/rules.mk
diff --git a/keyboards/wings42/rev2/config.h b/keyboards/dailycraft/wings42/rev2/config.h
index 836833718c..836833718c 100644
--- a/keyboards/wings42/rev2/config.h
+++ b/keyboards/dailycraft/wings42/rev2/config.h
diff --git a/keyboards/wings42/rev2/info.json b/keyboards/dailycraft/wings42/rev2/info.json
index 4e78697627..4e78697627 100644
--- a/keyboards/wings42/rev2/info.json
+++ b/keyboards/dailycraft/wings42/rev2/info.json
diff --git a/keyboards/wings42/rev2/keymaps/default/keymap.c b/keyboards/dailycraft/wings42/rev2/keymaps/default/keymap.c
index df572a6f5a..df572a6f5a 100644
--- a/keyboards/wings42/rev2/keymaps/default/keymap.c
+++ b/keyboards/dailycraft/wings42/rev2/keymaps/default/keymap.c
diff --git a/keyboards/wings42/rev2/keymaps/default/readme.md b/keyboards/dailycraft/wings42/rev2/keymaps/default/readme.md
index d99098ad0c..d99098ad0c 100644
--- a/keyboards/wings42/rev2/keymaps/default/readme.md
+++ b/keyboards/dailycraft/wings42/rev2/keymaps/default/readme.md
diff --git a/keyboards/wings42/rev2/keymaps/via/config.h b/keyboards/dailycraft/wings42/rev2/keymaps/via/config.h
index 3e0c8d146a..3e0c8d146a 100644
--- a/keyboards/wings42/rev2/keymaps/via/config.h
+++ b/keyboards/dailycraft/wings42/rev2/keymaps/via/config.h
diff --git a/keyboards/wings42/rev2/keymaps/via/keymap.c b/keyboards/dailycraft/wings42/rev2/keymaps/via/keymap.c
index e6b4ef840a..e6b4ef840a 100644
--- a/keyboards/wings42/rev2/keymaps/via/keymap.c
+++ b/keyboards/dailycraft/wings42/rev2/keymaps/via/keymap.c
diff --git a/keyboards/wings42/rev2/keymaps/via/rules.mk b/keyboards/dailycraft/wings42/rev2/keymaps/via/rules.mk
index eea5e1e2a2..eea5e1e2a2 100644
--- a/keyboards/wings42/rev2/keymaps/via/rules.mk
+++ b/keyboards/dailycraft/wings42/rev2/keymaps/via/rules.mk
diff --git a/keyboards/dailycraft/wings42/rev2/readme.md b/keyboards/dailycraft/wings42/rev2/readme.md
new file mode 100644
index 0000000000..c919653397
--- /dev/null
+++ b/keyboards/dailycraft/wings42/rev2/readme.md
@@ -0,0 +1,26 @@
+# wings42
+
+![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
+
+A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
+
+* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
+* Hardware Supported: wings42 PCB, Pro Micro
+* Hardware Availability: https://shop.dailycraft.jp/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dailycraft/wings42:default
+
+Flashing example for this keyboard:
+
+ make dailycraft/wings42: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/wings42/rev2/rev2.c b/keyboards/dailycraft/wings42/rev2/rev2.c
index 96aa6cd314..96aa6cd314 100644
--- a/keyboards/wings42/rev2/rev2.c
+++ b/keyboards/dailycraft/wings42/rev2/rev2.c
diff --git a/keyboards/wings42/rev2/rev2.h b/keyboards/dailycraft/wings42/rev2/rev2.h
index 4720592264..4720592264 100644
--- a/keyboards/wings42/rev2/rev2.h
+++ b/keyboards/dailycraft/wings42/rev2/rev2.h
diff --git a/keyboards/angel64/rev1/rules.mk b/keyboards/dailycraft/wings42/rev2/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/angel64/rev1/rules.mk
+++ b/keyboards/dailycraft/wings42/rev2/rules.mk
diff --git a/keyboards/dailycraft/wings42/rules.mk b/keyboards/dailycraft/wings42/rules.mk
new file mode 100644
index 0000000000..94459dbcc5
--- /dev/null
+++ b/keyboards/dailycraft/wings42/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = dailycraft/wings42/rev2
diff --git a/keyboards/wings42/wings42.c b/keyboards/dailycraft/wings42/wings42.c
index 824b6cfbb6..824b6cfbb6 100644
--- a/keyboards/wings42/wings42.c
+++ b/keyboards/dailycraft/wings42/wings42.c
diff --git a/keyboards/dailycraft/wings42/wings42.h b/keyboards/dailycraft/wings42/wings42.h
new file mode 100644
index 0000000000..d839f04884
--- /dev/null
+++ b/keyboards/dailycraft/wings42/wings42.h
@@ -0,0 +1,30 @@
+/* Copyright 2021 yfuku
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_dailycraft_wings42_rev1
+# include "rev1.h"
+#endif
+#ifdef KEYBOARD_dailycraft_wings42_rev1_extkeys
+# include "rev1_extkeys.h"
+#endif
+#ifdef KEYBOARD_dailycraft_wings42_rev2
+# include "rev2.h"
+#endif
+
diff --git a/keyboards/dc01/arrow/matrix.c b/keyboards/dc01/arrow/matrix.c
index 0102ad0fa4..b69e147914 100644
--- a/keyboards/dc01/arrow/matrix.c
+++ b/keyboards/dc01/arrow/matrix.c
@@ -205,14 +205,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c
index bf5aba8497..084978a1fd 100644
--- a/keyboards/dc01/left/matrix.c
+++ b/keyboards/dc01/left/matrix.c
@@ -230,14 +230,6 @@ if (i2c_transaction(SLAVE_I2C_ADDRESS_NUMPAD, 0x1FFFF, 11)) {
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/dc01/numpad/matrix.c b/keyboards/dc01/numpad/matrix.c
index 38130114eb..e8e2a1b14a 100644
--- a/keyboards/dc01/numpad/matrix.c
+++ b/keyboards/dc01/numpad/matrix.c
@@ -205,14 +205,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/dc01/right/matrix.c b/keyboards/dc01/right/matrix.c
index 544c8dc538..2509bd7d4c 100644
--- a/keyboards/dc01/right/matrix.c
+++ b/keyboards/dc01/right/matrix.c
@@ -206,14 +206,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/delilah/readme.md b/keyboards/delilah/readme.md
deleted file mode 100644
index 8ba9d83188..0000000000
--- a/keyboards/delilah/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Delilah
-
-![Delilah](https://i.imgur.com/TqBZycx.png)
-
-A 12.25u, traditional stagger, 40% keyboard. Designed to keep another punctuation key on base layer while still being compact.
-
-* Keyboard Maintainer: Rain
-* Hardware Supported: Delilah PCB v1.0, v1.1
-* Hardware Availability: [rainkeebs](https://www.rainkeebs.mx/)
-
-
-Make example for this keyboard (after setting up your build environment):
-
- qmk compile -kb delilah -kb default
-
-To reset the keyboard, hold the top left key while plugging in, or hit the reset button near the USB port
-
-Install example for this keyboard:
-
- qmk flash -kb delilah -km default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/deltapad/rules.mk b/keyboards/deltapad/rules.mk
index 9906266f48..1275531ef6 100644
--- a/keyboards/deltapad/rules.mk
+++ b/keyboards/deltapad/rules.mk
@@ -12,10 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+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
diff --git a/keyboards/deltasplit75/keymaps/default/keymap.c b/keyboards/deltasplit75/keymaps/default/keymap.c
index c13b0627c0..7d698eb329 100644
--- a/keyboards/deltasplit75/keymaps/default/keymap.c
+++ b/keyboards/deltasplit75/keymaps/default/keymap.c
@@ -20,8 +20,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
KC_BSLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_VOLU, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- M(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, KC_VOLD, M(0), KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_VOLD, _______, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/dichotomy/config.h b/keyboards/dichotomy/config.h
index 03e19b1388..40e7f18e6f 100644
--- a/keyboards/dichotomy/config.h
+++ b/keyboards/dichotomy/config.h
@@ -56,12 +56,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/dichotomy/dichotomy.c b/keyboards/dichotomy/dichotomy.c
index 967d7e603c..afd52cc8b3 100755
--- a/keyboards/dichotomy/dichotomy.c
+++ b/keyboards/dichotomy/dichotomy.c
@@ -1,11 +1,13 @@
#include "dichotomy.h"
+//#include "uart.h"
+
void pointing_device_task(void){
/*report_mouse_t currentReport = {};
uint32_t timeout = 0;
//the m character requests the RF slave to send the mouse report
- SERIAL_UART_DATA = 'm';
+ uart_write('m');
//trust the external inputs completely, erase old data
uint8_t uart_data[5] = {0};
@@ -15,7 +17,7 @@ void pointing_device_task(void){
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while(!uart_available()){
timeout++;
if (timeout > 10000){
xprintf("\r\nTIMED OUT");
@@ -23,7 +25,7 @@ void pointing_device_task(void){
}
}
xprintf("\r\nGOT DATA for %d",i);
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, bytes 1-4 are movement and scroll
diff --git a/keyboards/dichotomy/matrix.c b/keyboards/dichotomy/matrix.c
index ed83bd452c..806b66d498 100755
--- a/keyboards/dichotomy/matrix.c
+++ b/keyboards/dichotomy/matrix.c
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "dichotomy.h"
#include "pointing_device.h"
#include "report.h"
-#include "protocol/serial.h"
+#include "uart.h"
#if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n")
@@ -94,7 +94,7 @@ uint8_t matrix_cols(void) {
void matrix_init(void) {
matrix_init_quantum();
- serial_init();
+ uart_init(1000000);
}
uint8_t matrix_scan(void)
@@ -104,7 +104,7 @@ uint8_t matrix_scan(void)
uint32_t timeout = 0;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[11] = {0};
@@ -114,14 +114,14 @@ uint8_t matrix_scan(void)
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while(!uart_available()){
timeout++;
if (timeout > 10000){
xprintf("\r\nTime out in keyboard.");
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
diff --git a/keyboards/dichotomy/rules.mk b/keyboards/dichotomy/rules.mk
index 2b5eb0360c..420e409e43 100755
--- a/keyboards/dichotomy/rules.mk
+++ b/keyboards/dichotomy/rules.mk
@@ -10,6 +10,7 @@ BOOTLOADER = caterina
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
#MOUSEKEY_ENABLE = yes # Mouse keys
POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+POINTING_DEVICE_DRIVER = custom
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
@@ -18,4 +19,5 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# # project specific files
-SRC += matrix.c serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/diverge3/readme.md b/keyboards/diverge3/readme.md
deleted file mode 100644
index 45ddaa64cf..0000000000
--- a/keyboards/diverge3/readme.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# diverge3
-
-A split 5x7 keyboard with 3 thumb keys. Made by [Unikeyboard](https://unikeyboard.io).
-
-Keyboard Maintainer: [IslandMan93](https://github.com/islandman93)
-Hardware Supported: Pro Micro
-Hardware Availability: [Diverge 3](https://unikeyboard.io/product/diverge/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make diverge3:default
-
-Or for the [Workman](https://github.com/ojbucao/workman) layout:
-
- make diverge3:workman
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-# Reflashing Animus
-Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file
diff --git a/keyboards/divergetm2/readme.md b/keyboards/divergetm2/readme.md
deleted file mode 100644
index 893b82cb5c..0000000000
--- a/keyboards/divergetm2/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# diverge tm2
-
-A 4x6x2 split ortholinear keyboard with 2u spacebars like the Levinson (similar to Let's Split). Made by [Unikeyboard](https://unikeyboard.io).
-
-Keyboard Maintainer: [IslandMan93](https://github.com/islandman93) and [xton](https://github.com/xton)
-Hardware Supported: Pro Micro
-Hardware Availability: [Diverge TM2](https://unikeyboard.io/product/diverge-tm/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make divergetm2:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-# Flashing the first time
-
-Disassemble the case so you have access to each Pro Micro. Flash each half with QMK Toolbox by connecting the USB cable and shorting RST and GND. After that, just use the soft reset key on your respective layout to reflash both halves.
-
-# Reflashing Animus
-
-Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites.
diff --git a/keyboards/dm9records/ergoinu/config.h b/keyboards/dm9records/ergoinu/config.h
index 113eaf9f76..89ea9e7903 100644
--- a/keyboards/dm9records/ergoinu/config.h
+++ b/keyboards/dm9records/ergoinu/config.h
@@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include "config_common.h"
-#include "serial_config.h"
/* USB Device descriptor parameter
VID & PID are lisenced from microchip sublisence program, Don't use other project! */
@@ -30,11 +29,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MANUFACTURER Dm9Records
#define PRODUCT ergoinu
-#define TAPPING_FORCE_HOLD
-#define TAPPING_TERM 100
-
#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D2
+
/* Select hand configuration */
#define MASTER_LEFT
// #define MASTER_RIGHT
@@ -49,6 +48,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 7
#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, F5, F4 }
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
diff --git a/keyboards/dm9records/ergoinu/ergoinu.c b/keyboards/dm9records/ergoinu/ergoinu.c
index c6d099a148..a01ac0a25c 100644
--- a/keyboards/dm9records/ergoinu/ergoinu.c
+++ b/keyboards/dm9records/ergoinu/ergoinu.c
@@ -1 +1,18 @@
+/*
+Copyright 2018 Takuya Urakawa<twitter:@hsgw>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
#include "ergoinu.h"
diff --git a/keyboards/dm9records/ergoinu/ergoinu.h b/keyboards/dm9records/ergoinu/ergoinu.h
index 43249a8440..c275d3fa27 100644
--- a/keyboards/dm9records/ergoinu/ergoinu.h
+++ b/keyboards/dm9records/ergoinu/ergoinu.h
@@ -19,10 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-#include "ws2812.h"
-#endif
-
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L07, L08, L09, L10, L11, L12, L13, R07, R08, R09, R10, R11, R12, R13, \
@@ -41,4 +37,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ R27, R26, R25, R24, R23, R22, R21 }, \
{ KC_NO, KC_NO, R32, R31, R30, R29, R28 } \
}
-
diff --git a/keyboards/dm9records/ergoinu/keymaps/default/config.h b/keyboards/dm9records/ergoinu/keymaps/default/config.h
deleted file mode 100644
index bb266f25e7..0000000000
--- a/keyboards/dm9records/ergoinu/keymaps/default/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-Copyright 2018 Takuya Urakawa <Twitter:@hsgw>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/dm9records/ergoinu/keymaps/default/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default/keymap.c
index 00c5da820d..862b538829 100644
--- a/keyboards/dm9records/ergoinu/keymaps/default/keymap.c
+++ b/keyboards/dm9records/ergoinu/keymaps/default/keymap.c
@@ -5,14 +5,6 @@
extern rgblight_config_t rgblight_config;
#endif
-#define JA_CLON KC_QUOT // : and +
-#define JA_AT KC_LBRC // @ and `
-#define JA_HAT KC_EQL // ^ and ~
-#define JA_ENUN KC_RO // \ and _ (EN mark and UNder score)
-#define JA_ENVL KC_JYEN // \ and | (EN mark and Vertical Line)
-#define JA_LBRC KC_RBRC // [ and {
-#define JA_RBRC KC_BSLS // ] and }
-
enum LAYER_NO {
BASE = 0,
META,
@@ -24,33 +16,30 @@ enum CUSTOM_KEYCODES {
RGB_TYPE,
};
-// Fillers to make layering more clear
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,
- KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,
+ KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
MO(META),KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, KC_RALT, MO(META)
),
[META] = LAYOUT(
MO(CONF),KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS,
- ______, KC_CAPS, ______, ______, ______, ______, ______, ______, ______, ______, KC_SLCK, KC_PSCR, KC_HOME, KC_END,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RGHT,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
+ _______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PSCR, KC_HOME, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [CONF] = LAYOUT(
- ______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX
+
+ [CONF] = LAYOUT(
+ _______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
diff --git a/keyboards/dm9records/ergoinu/keymaps/default/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default/rules.mk
deleted file mode 100644
index 8567c2ae2e..0000000000
--- a/keyboards/dm9records/ergoinu/keymaps/default/rules.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# ergoinu configs
-DISABLE_PROMICRO_LEDs = yes
-
-# Uncomment these for debugging
-# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
-# $(info -- OPT_DEFS=$(OPT_DEFS))
-# $(info )
diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h b/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h
deleted file mode 100644
index bb266f25e7..0000000000
--- a/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-Copyright 2018 Takuya Urakawa <Twitter:@hsgw>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c
index a9a9f71f4d..32289c44db 100644
--- a/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c
+++ b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c
@@ -24,10 +24,6 @@ enum CUSTOM_KEYCODES {
RGB_TYPE,
};
-// Fillers to make layering more clear
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT(
@@ -38,20 +34,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MO(META),KC_LALT, KC_ZKHK, KC_BSPC, KC_SPC, KC_ENT, KC_BSPC, KC_MHEN, KC_KANA, MO(META)
),
-
[META] = LAYOUT(
MO(CONF),KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS,
- ______, KC_CAPS, ______, KC_UP, ______, ______, ______, ______, ______, ______, KC_SLCK, KC_PSCR, KC_HOME, KC_END,
- ______, KC_LEFT, KC_DOWN, KC_RGHT, ______, ______, ______, ______, ______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RGHT,
- ______, ______, KC_RGUI, KC_DEL, KC_ENT, ______, KC_DEL, KC_HENK, KC_LGUI, ______
+ _______, KC_CAPS, _______, KC_UP, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PSCR, KC_HOME, KC_END,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT,
+ _______, _______, KC_RGUI, KC_DEL, KC_ENT, _______, KC_DEL, KC_HENK, KC_LGUI, _______
),
- [CONF] = LAYOUT(
- ______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX,
- XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX
+
+ [CONF] = LAYOUT(
+ _______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk
deleted file mode 100644
index 97154be636..0000000000
--- a/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# ergoinu configs
-DISABLE_PROMICRO_LEDs = yes
-
-# Uncomment these for debugging
-# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
-# $(info -- OPT_DEFS=$(OPT_DEFS))
-# $(info )
diff --git a/keyboards/dm9records/ergoinu/matrix.c b/keyboards/dm9records/ergoinu/matrix.c
deleted file mode 100644
index b1c58f88fe..0000000000
--- a/keyboards/dm9records/ergoinu/matrix.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "quantum.h"
-
-#include "serial.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-#define ERROR_DISCONNECT_COUNT 5
-
-static uint8_t debouncing = DEBOUNCE;
-static const int ROWS_PER_HAND = MATRIX_ROWS/2;
-static uint8_t error_count = 0;
-uint8_t is_master = 0 ;
-
-static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-static uint8_t matrix_master_scan(void);
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
- unselect_rows();
- init_cols();
-
- setPinOutput(B0);
- setPinOutput(D5);
-
- #ifdef DISABLE_PROMICRO_LEDs
- writePinHigh(B0);
- writePinHigh(D5);
- #endif
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- is_master = has_usb();
-
- matrix_init_quantum();
-}
-
-uint8_t _matrix_scan(void) {
- // Right hand is stored after the left in the matirx so, we need to offset it
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- select_row(i);
- _delay_us(30); // without this wait read unstable value.
- matrix_row_t cols = read_cols();
- if (matrix_debouncing[i+offset] != cols) {
- matrix_debouncing[i+offset] = cols;
- debouncing = DEBOUNCE;
- }
- unselect_rows();
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- }
- }
-
- return 1;
-}
-
-int serial_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- int ret=serial_update_buffers();
- if (ret ) {
-#ifndef DISABLE_PROMICRO_LEDs
- if(ret==2) writePinLow(B0);
-#endif
- return 1;
- }
-#ifndef DISABLE_PROMICRO_LEDs
- writePinHigh(B0);
-#endif
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
- return 0;
-}
-
-uint8_t matrix_scan(void) {
- if (is_master) {
- matrix_master_scan();
- }else{
- matrix_slave_scan();
-
- int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[offset+i] = serial_master_buffer[i];
- }
-
- matrix_scan_quantum();
- }
- return 1;
-}
-
-
-uint8_t matrix_master_scan(void) {
-
- int ret = _matrix_scan();
-
- int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_master_buffer[i] = matrix[offset+i];
- }
-
- if( serial_transaction() ) {
-#ifndef DISABLE_PROMICRO_LEDs
- // turn on the indicator led when halves are disconnected
- writePinLow(D5);
-#endif
-
- error_count++;
-
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = 0;
- }
- }
- } else {
-#ifndef DISABLE_PROMICRO_LEDs
- // turn off the indicator led on no error
- writePinHigh(D5);
-#endif
- error_count = 0;
- }
- matrix_scan_quantum();
- return ret;
-}
-
-void matrix_slave_scan(void) {
- _matrix_scan();
-
- int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-static void init_cols(void)
-{
- for(int x = 0; x < MATRIX_COLS; x++) {
- _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
- _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
- }
-}
-
-static matrix_row_t read_cols(void)
-{
- matrix_row_t result = 0;
- for(int x = 0; x < MATRIX_COLS; x++) {
- result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
- }
- return result;
-}
-
-static void unselect_rows(void)
-{
- for(int x = 0; x < ROWS_PER_HAND; x++) {
- _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
- _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
- }
-}
-
-static void select_row(uint8_t row)
-{
- _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
- _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
-}
diff --git a/keyboards/dm9records/ergoinu/post_rules.mk b/keyboards/dm9records/ergoinu/post_rules.mk
deleted file mode 100644
index 02aa48104c..0000000000
--- a/keyboards/dm9records/ergoinu/post_rules.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-ifneq ($(strip $(ERGOINU)),)
- ifeq ($(findstring promicroled, $(ERGOINU)), promicroled)
- DISABLE_PROMICRO_LEDs = no
- endif
-endif
-
-ifeq ($(strip $(DISABLE_PROMICRO_LEDs)), yes)
- OPT_DEFS += -DDISABLE_PROMICRO_LEDs
-endif
diff --git a/keyboards/dm9records/ergoinu/readme.md b/keyboards/dm9records/ergoinu/readme.md
index de0a1c6c97..45f91dbac2 100644
--- a/keyboards/dm9records/ergoinu/readme.md
+++ b/keyboards/dm9records/ergoinu/readme.md
@@ -1,13 +1,12 @@
-ErgoInu
-===
+# ErgoInu
![ergoinu](https://i.imgur.com/4CCM8Vl.jpg)
An (Not Portable But Small) Ergonomic Split Keyboard.
-Keyboard Maintainer: [hsgw](https://github.com/hsgw/) [twitter](https://twitter.com/hsgw)
-Hardware Supported: Pro Micro
-Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)
+* Keyboard Maintainer: [hsgw](https://github.com/hsgw/) [twitter](https://twitter.com/hsgw)
+* Hardware Supported: Pro Micro
+* Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/dm9records/ergoinu/rules.mk b/keyboards/dm9records/ergoinu/rules.mk
index 0a634ee794..aba3644c9e 100644
--- a/keyboards/dm9records/ergoinu/rules.mk
+++ b/keyboards/dm9records/ergoinu/rules.mk
@@ -7,20 +7,14 @@ BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
+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
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-SUBPROJECT_rev1 = no
-USE_I2C = no # i2c is not supported
-CUSTOM_MATRIX = yes
-SRC += matrix.c serial.c split_util.c
-
-# ergoinu configs
-DISABLE_PROMICRO_LEDs = yes
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/dm9records/ergoinu/serial.c b/keyboards/dm9records/ergoinu/serial.c
deleted file mode 100644
index 5919415877..0000000000
--- a/keyboards/dm9records/ergoinu/serial.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifdef USE_SERIAL
-
-#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
-
-// Serial pulse period in microseconds.
-#define SELECT_SERIAL_SPEED 1
-#if SELECT_SERIAL_SPEED == 0
- // Very High speed
- #define SERIAL_DELAY 4 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 1
- // High speed
- #define SERIAL_DELAY 6 // micro sec
- #define READ_WRITE_START_ADJUST 23 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 2
- // Middle speed
- #define SERIAL_DELAY 12 // micro sec
- #define READ_WRITE_START_ADJUST 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 3
- // Low speed
- #define SERIAL_DELAY 24 // micro sec
- #define READ_WRITE_START_ADJUST 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 4
- // Very Low speed
- #define SERIAL_DELAY 50 // micro sec
- #define READ_WRITE_START_ADJUST 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#else
-#error Illegal Serial Speed
-#endif
-
-
-#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
-#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
-
-#define SLAVE_INT_WIDTH 1
-#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-inline static
-void serial_delay_half1(void) {
- _delay_us(SERIAL_DELAY_HALF1);
-}
-
-inline static
-void serial_delay_half2(void) {
- _delay_us(SERIAL_DELAY_HALF2);
-}
-
-inline static
-void serial_output(void) {
- SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
-}
-
-// make the serial pin an input with pull-up resistor
-inline static
-void serial_input_with_pullup(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input_with_pullup();
-
-#if SERIAL_PIN_MASK == _BV(PD0)
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-#elif SERIAL_PIN_MASK == _BV(PD2)
- // Enable INT2
- EIMSK |= _BV(INT2);
- // Trigger on falling edge of INT2
- EICRA &= ~(_BV(ISC20) | _BV(ISC21));
-#else
- #error unknown SERIAL_PIN_MASK value
-#endif
-}
-
-// Used by the sender to synchronize timing with the reciver.
-static
-void sync_recv(void) {
- for (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
- }
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
-}
-
-// Used by the reciver to send a synchronization signal to the sender.
-static
-void sync_send(void) {
- serial_low();
- serial_delay();
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- _delay_sub_us(READ_WRITE_START_ADJUST);
- for ( uint8_t i = 0; i < 8; ++i) {
- serial_delay_half1(); // read the middle of pulses
- byte = (byte << 1) | serial_read_pin();
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
- }
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 1<<7;
- while( b ) {
- if(data & b) {
- serial_high();
- } else {
- serial_low();
- }
- b >>= 1;
- serial_delay();
- }
- serial_low(); // sync_send() / senc_recv() need raise edge
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- serial_output();
-
- // slave send phase
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- sync_send();
- serial_write_byte(serial_slave_buffer[i]);
- checksum += serial_slave_buffer[i];
- }
- sync_send();
- serial_write_byte(checksum);
-
- // slave switch to input
- sync_send(); //0
- serial_delay_half1(); //1
- serial_low(); //2
- serial_input_with_pullup(); //2
- serial_delay_half1(); //3
-
- // slave recive phase
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- sync_recv();
- serial_master_buffer[i] = serial_read_byte();
- checksum_computed += serial_master_buffer[i];
- }
- sync_recv();
- uint8_t checksum_received = serial_read_byte();
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-
- sync_recv(); //weit master output to high
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-// 2 => checksum error
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(SLAVE_INT_WIDTH);
-
- // wait for the slaves response
- serial_input_with_pullup();
- _delay_us(SLAVE_INT_RESPONSE_TIME);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- serial_output();
- serial_high();
- sei();
- return 1;
- }
-
- // master recive phase
- // if the slave is present syncronize with it
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- sync_recv();
- serial_slave_buffer[i] = serial_read_byte();
- checksum_computed += serial_slave_buffer[i];
- }
- sync_recv();
- uint8_t checksum_received = serial_read_byte();
-
- if (checksum_computed != checksum_received) {
- serial_output();
- serial_high();
- sei();
- return 2;
- }
-
- // master switch to output
- sync_recv(); //0
- serial_delay(); //1
- serial_low(); //3
- serial_output(); // 3
- serial_delay_half1(); //4
-
- // master send phase
- uint8_t checksum = 0;
-
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- sync_send();
- serial_write_byte(serial_master_buffer[i]);
- checksum += serial_master_buffer[i];
- }
- sync_send();
- serial_write_byte(checksum);
-
- // always, release the line when not in use
- sync_send();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/dm9records/ergoinu/serial.h b/keyboards/dm9records/ergoinu/serial.h
deleted file mode 100644
index 67cf06ac6b..0000000000
--- a/keyboards/dm9records/ergoinu/serial.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-
-// ////////////////////////////////////////////
-// Need Soft Serial defines in serial_config.h
-// ////////////////////////////////////////////
-// ex.
-// #define SERIAL_PIN_DDR DDRD
-// #define SERIAL_PIN_PORT PORTD
-// #define SERIAL_PIN_INPUT PIND
-// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
-// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
-// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-// #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
diff --git a/keyboards/dm9records/ergoinu/serial_config.h b/keyboards/dm9records/ergoinu/serial_config.h
deleted file mode 100644
index a16db684ca..0000000000
--- a/keyboards/dm9records/ergoinu/serial_config.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-/* Soft Serial defines */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
diff --git a/keyboards/dm9records/ergoinu/split_util.c b/keyboards/dm9records/ergoinu/split_util.c
deleted file mode 100644
index 0cbc2c69c4..0000000000
--- a/keyboards/dm9records/ergoinu/split_util.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-
-#include "serial.h"
-
-volatile bool isLeftHand = true;
-
-static void setup_handedness(void) {
- #ifdef EE_HANDS
- isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
- #else
- // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
- #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
- isLeftHand = !has_usb();
- #else
- isLeftHand = has_usb();
- #endif
- #endif
-}
-
-static void keyboard_master_setup(void) {
- serial_master_init();
-}
-
-static void keyboard_slave_setup(void) {
- serial_slave_init();
-}
-
-bool has_usb(void) {
- USBCON |= (1 << OTGPADE); //enables VBUS pad
- _delay_us(5);
- return (USBSTA & (1<<VBUS)); //checks state of VBUS
-}
-
-void split_keyboard_setup(void) {
- setup_handedness();
-
- if (has_usb()) {
- keyboard_master_setup();
- } else {
- keyboard_slave_setup();
- }
- sei();
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-}
diff --git a/keyboards/dm9records/ergoinu/split_util.h b/keyboards/dm9records/ergoinu/split_util.h
deleted file mode 100644
index 11cfd5455a..0000000000
--- a/keyboards/dm9records/ergoinu/split_util.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
diff --git a/keyboards/dozen0/readme.md b/keyboards/dozen0/readme.md
deleted file mode 100644
index 7ef1192461..0000000000
--- a/keyboards/dozen0/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Dozen0
-
-![Dozen0](https://raw.githubusercontent.com/yynmt/Dozen0/master/images/main_image_mx.jpg)
-
-Dozen0 is 12 keys macropad.
-
-Keyboard Maintainer: [yynmt](https://github.com/yynmt)
-Hardware Supported: Dozen0 PCBs, ProMicro supported
-Hardware Availability: links to where you can find this hardware
-
-Make example for this keyboard (after setting up your build environment):
-
- make dozen0:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bkf/bkf.c b/keyboards/drhigsby/bkf/bkf.c
index 6df3ed56f6..6df3ed56f6 100644
--- a/keyboards/bkf/bkf.c
+++ b/keyboards/drhigsby/bkf/bkf.c
diff --git a/keyboards/bkf/bkf.h b/keyboards/drhigsby/bkf/bkf.h
index 3ea53e2de5..3ea53e2de5 100644
--- a/keyboards/bkf/bkf.h
+++ b/keyboards/drhigsby/bkf/bkf.h
diff --git a/keyboards/bkf/config.h b/keyboards/drhigsby/bkf/config.h
index af1b2be747..af1b2be747 100644
--- a/keyboards/bkf/config.h
+++ b/keyboards/drhigsby/bkf/config.h
diff --git a/keyboards/bkf/info.json b/keyboards/drhigsby/bkf/info.json
index c7b109d651..c7b109d651 100644
--- a/keyboards/bkf/info.json
+++ b/keyboards/drhigsby/bkf/info.json
diff --git a/keyboards/bkf/keymaps/default/keymap.c b/keyboards/drhigsby/bkf/keymaps/default/keymap.c
index cb047a6816..cb047a6816 100644
--- a/keyboards/bkf/keymaps/default/keymap.c
+++ b/keyboards/drhigsby/bkf/keymaps/default/keymap.c
diff --git a/keyboards/bkf/keymaps/default/readme.md b/keyboards/drhigsby/bkf/keymaps/default/readme.md
index ea52e61583..ea52e61583 100644
--- a/keyboards/bkf/keymaps/default/readme.md
+++ b/keyboards/drhigsby/bkf/keymaps/default/readme.md
diff --git a/keyboards/drhigsby/bkf/readme.md b/keyboards/drhigsby/bkf/readme.md
new file mode 100644
index 0000000000..18742920a4
--- /dev/null
+++ b/keyboards/drhigsby/bkf/readme.md
@@ -0,0 +1,21 @@
+# BKF - Base Kit Forty
+
+![BKF](https://i.imgur.com/3vR0yeW.png)
+
+BKF, Base Kit Forty, is a 40% style keyboard that is fully compatbile with a standard base kit of keycaps with 3 different spacebar configurations. It supports both standard R3 1.75u as well as stepped R3 1.75u on the left side. The key in the top right corner also sports rotary encoder support.
+
+* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
+* Hardware Supported: BKF (https://github.com/drhigsby/bkf)
+* Hardware Availability: open-source stacked acrylic case design available at maintainer's github / make your own
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drhigsby/bkf:default
+
+To place this keyboard into bootloader mode, press the reset button on the PCB or short the RST and GND pins on the pro micro.
+
+Flashing example for this keyboard:
+
+ make drhigsby/bkf:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bkf/rules.mk b/keyboards/drhigsby/bkf/rules.mk
index 9861cf0ad6..9861cf0ad6 100644
--- a/keyboards/bkf/rules.mk
+++ b/keyboards/drhigsby/bkf/rules.mk
diff --git a/keyboards/dubba175/config.h b/keyboards/drhigsby/dubba175/config.h
index 2eab0e2693..2eab0e2693 100644
--- a/keyboards/dubba175/config.h
+++ b/keyboards/drhigsby/dubba175/config.h
diff --git a/keyboards/dubba175/dubba175.c b/keyboards/drhigsby/dubba175/dubba175.c
index 066e772fa2..066e772fa2 100644
--- a/keyboards/dubba175/dubba175.c
+++ b/keyboards/drhigsby/dubba175/dubba175.c
diff --git a/keyboards/dubba175/dubba175.h b/keyboards/drhigsby/dubba175/dubba175.h
index 0413b158d2..0413b158d2 100644
--- a/keyboards/dubba175/dubba175.h
+++ b/keyboards/drhigsby/dubba175/dubba175.h
diff --git a/keyboards/dubba175/info.json b/keyboards/drhigsby/dubba175/info.json
index e2830ff4c2..e2830ff4c2 100644
--- a/keyboards/dubba175/info.json
+++ b/keyboards/drhigsby/dubba175/info.json
diff --git a/keyboards/dubba175/keymaps/default/config.h b/keyboards/drhigsby/dubba175/keymaps/default/config.h
index 7a4761b1ae..7a4761b1ae 100644
--- a/keyboards/dubba175/keymaps/default/config.h
+++ b/keyboards/drhigsby/dubba175/keymaps/default/config.h
diff --git a/keyboards/dubba175/keymaps/default/keymap.c b/keyboards/drhigsby/dubba175/keymaps/default/keymap.c
index 37bae5b435..37bae5b435 100644
--- a/keyboards/dubba175/keymaps/default/keymap.c
+++ b/keyboards/drhigsby/dubba175/keymaps/default/keymap.c
diff --git a/keyboards/dubba175/keymaps/default/readme.md b/keyboards/drhigsby/dubba175/keymaps/default/readme.md
index 8e5c2c528b..8e5c2c528b 100644
--- a/keyboards/dubba175/keymaps/default/readme.md
+++ b/keyboards/drhigsby/dubba175/keymaps/default/readme.md
diff --git a/keyboards/adalyn/keymaps/default/rules.mk b/keyboards/drhigsby/dubba175/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/adalyn/keymaps/default/rules.mk
+++ b/keyboards/drhigsby/dubba175/keymaps/default/rules.mk
diff --git a/keyboards/drhigsby/dubba175/readme.md b/keyboards/drhigsby/dubba175/readme.md
new file mode 100644
index 0000000000..a07da251ab
--- /dev/null
+++ b/keyboards/drhigsby/dubba175/readme.md
@@ -0,0 +1,15 @@
+# Dubba175
+
+![Dubba175](https://i.imgur.com/nzDZuS3h.jpg)
+
+Dubba175 is a 10u wide ortholinear keyboard featuring 2x 1.75u spacebars as the bottom row layout option.
+
+* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
+* Hardware Supported: Dubba175 (https://github.com/drhigsby/dubba175)
+* Hardware Availability: P3DStore.com offers a stacked acrlyic case / make your own
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drhigsby/dubba175:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/dubba175/rules.mk b/keyboards/drhigsby/dubba175/rules.mk
index a51132838a..a51132838a 100644
--- a/keyboards/dubba175/rules.mk
+++ b/keyboards/drhigsby/dubba175/rules.mk
diff --git a/keyboards/ogurec/config.h b/keyboards/drhigsby/ogurec/config.h
index c5605ca645..c5605ca645 100644
--- a/keyboards/ogurec/config.h
+++ b/keyboards/drhigsby/ogurec/config.h
diff --git a/keyboards/ogurec/info.json b/keyboards/drhigsby/ogurec/info.json
index 1cb6823f95..1cb6823f95 100644
--- a/keyboards/ogurec/info.json
+++ b/keyboards/drhigsby/ogurec/info.json
diff --git a/keyboards/ogurec/keymaps/dack/config.h b/keyboards/drhigsby/ogurec/keymaps/dack/config.h
index af5d55bf6e..af5d55bf6e 100644
--- a/keyboards/ogurec/keymaps/dack/config.h
+++ b/keyboards/drhigsby/ogurec/keymaps/dack/config.h
diff --git a/keyboards/ogurec/keymaps/dack/keymap.c b/keyboards/drhigsby/ogurec/keymaps/dack/keymap.c
index 420ff3d88d..420ff3d88d 100644
--- a/keyboards/ogurec/keymaps/dack/keymap.c
+++ b/keyboards/drhigsby/ogurec/keymaps/dack/keymap.c
diff --git a/keyboards/ogurec/keymaps/dack/readme.md b/keyboards/drhigsby/ogurec/keymaps/dack/readme.md
index adffe1797f..adffe1797f 100644
--- a/keyboards/ogurec/keymaps/dack/readme.md
+++ b/keyboards/drhigsby/ogurec/keymaps/dack/readme.md
diff --git a/keyboards/ogurec/keymaps/default/config.h b/keyboards/drhigsby/ogurec/keymaps/default/config.h
index 9ff2d89acc..9ff2d89acc 100644
--- a/keyboards/ogurec/keymaps/default/config.h
+++ b/keyboards/drhigsby/ogurec/keymaps/default/config.h
diff --git a/keyboards/ogurec/keymaps/default/keymap.c b/keyboards/drhigsby/ogurec/keymaps/default/keymap.c
index 691f5c95a1..691f5c95a1 100644
--- a/keyboards/ogurec/keymaps/default/keymap.c
+++ b/keyboards/drhigsby/ogurec/keymaps/default/keymap.c
diff --git a/keyboards/ogurec/keymaps/default/readme.md b/keyboards/drhigsby/ogurec/keymaps/default/readme.md
index 3be288eeeb..3be288eeeb 100644
--- a/keyboards/ogurec/keymaps/default/readme.md
+++ b/keyboards/drhigsby/ogurec/keymaps/default/readme.md
diff --git a/keyboards/dubba175/keymaps/default/rules.mk b/keyboards/drhigsby/ogurec/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/dubba175/keymaps/default/rules.mk
+++ b/keyboards/drhigsby/ogurec/keymaps/default/rules.mk
diff --git a/keyboards/ogurec/left_pm/left_pm.h b/keyboards/drhigsby/ogurec/left_pm/left_pm.h
index ecf87a2a49..ecf87a2a49 100644
--- a/keyboards/ogurec/left_pm/left_pm.h
+++ b/keyboards/drhigsby/ogurec/left_pm/left_pm.h
diff --git a/keyboards/ogurec/left_pm/readme.md b/keyboards/drhigsby/ogurec/left_pm/readme.md
index c9d0cddb3b..c9d0cddb3b 100644
--- a/keyboards/ogurec/left_pm/readme.md
+++ b/keyboards/drhigsby/ogurec/left_pm/readme.md
diff --git a/keyboards/infinity60/rev1/rules.mk b/keyboards/drhigsby/ogurec/left_pm/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/infinity60/rev1/rules.mk
+++ b/keyboards/drhigsby/ogurec/left_pm/rules.mk
diff --git a/keyboards/ogurec/ogurec.c b/keyboards/drhigsby/ogurec/ogurec.c
index 6b2efa56b6..6b2efa56b6 100644
--- a/keyboards/ogurec/ogurec.c
+++ b/keyboards/drhigsby/ogurec/ogurec.c
diff --git a/keyboards/drhigsby/ogurec/ogurec.h b/keyboards/drhigsby/ogurec/ogurec.h
new file mode 100644
index 0000000000..154d5d6cfe
--- /dev/null
+++ b/keyboards/drhigsby/ogurec/ogurec.h
@@ -0,0 +1,24 @@
+/* Copyright 2021 drhigsby
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#if defined(KEYBOARD_drhigsby_ogurec_left_pm)
+# include "left_pm.h"
+#elif defined(KEYBOARD_drhigsby_ogurec_right_pm)
+# include "right_pm.h"
+#endif
diff --git a/keyboards/drhigsby/ogurec/readme.md b/keyboards/drhigsby/ogurec/readme.md
new file mode 100644
index 0000000000..909db6787e
--- /dev/null
+++ b/keyboards/drhigsby/ogurec/readme.md
@@ -0,0 +1,27 @@
+# ogurec
+
+![ogurec](https://i.imgur.com/OJ5UnXT.png)
+
+ogurec is a reversible 12u x 3u ortholinear keyboard that offers left-sided and right-sided PM placement.
+
+The default ogurec keymap is for left-sided PM placement.
+
+When flashing ogurec with the PM soldered onto the right side, follow the second example below and use: make ogure/right_pm:default
+
+* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
+* Hardware Supported: ogurec (https://github.com/drhigsby/ogurec)
+* Hardware Availability: open source 3DP case available here https://github.com/drhigsby (case creator: https://github.com/dpalka15)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drhigsby/ogurec:default
+ make drhigsby/ogurec/right_pm:default
+
+To place the keyboard into bootloader mode, solder a reset switch onto the PCB and press it OR short the GND and RST pins on the pro micro.
+
+Flashing example for this keyboard:
+
+ make drhigsby/ogurec:default:flash
+ make drhigsby/ogurec/right_pm:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ogurec/right_pm/readme.md b/keyboards/drhigsby/ogurec/right_pm/readme.md
index 54efcecfe1..54efcecfe1 100644
--- a/keyboards/ogurec/right_pm/readme.md
+++ b/keyboards/drhigsby/ogurec/right_pm/readme.md
diff --git a/keyboards/ogurec/right_pm/right_pm.h b/keyboards/drhigsby/ogurec/right_pm/right_pm.h
index e413a835bc..e413a835bc 100644
--- a/keyboards/ogurec/right_pm/right_pm.h
+++ b/keyboards/drhigsby/ogurec/right_pm/right_pm.h
diff --git a/keyboards/ivy/rev1/rules.mk b/keyboards/drhigsby/ogurec/right_pm/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ivy/rev1/rules.mk
+++ b/keyboards/drhigsby/ogurec/right_pm/rules.mk
diff --git a/keyboards/drhigsby/ogurec/rules.mk b/keyboards/drhigsby/ogurec/rules.mk
new file mode 100644
index 0000000000..11587edf86
--- /dev/null
+++ b/keyboards/drhigsby/ogurec/rules.mk
@@ -0,0 +1,19 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+DEFAULT_FOLDER = drhigsby/ogurec/left_pm
diff --git a/keyboards/packrat/config.h b/keyboards/drhigsby/packrat/config.h
index c69ecdafcb..c69ecdafcb 100644
--- a/keyboards/packrat/config.h
+++ b/keyboards/drhigsby/packrat/config.h
diff --git a/keyboards/packrat/info.json b/keyboards/drhigsby/packrat/info.json
index e4e3d869f1..e4e3d869f1 100644
--- a/keyboards/packrat/info.json
+++ b/keyboards/drhigsby/packrat/info.json
diff --git a/keyboards/packrat/keymaps/3uc/config.h b/keyboards/drhigsby/packrat/keymaps/3uc/config.h
index 9ff2d89acc..9ff2d89acc 100644
--- a/keyboards/packrat/keymaps/3uc/config.h
+++ b/keyboards/drhigsby/packrat/keymaps/3uc/config.h
diff --git a/keyboards/packrat/keymaps/3uc/keymap.c b/keyboards/drhigsby/packrat/keymaps/3uc/keymap.c
index f037a47acb..f037a47acb 100644
--- a/keyboards/packrat/keymaps/3uc/keymap.c
+++ b/keyboards/drhigsby/packrat/keymaps/3uc/keymap.c
diff --git a/keyboards/packrat/keymaps/3uc/readme.md b/keyboards/drhigsby/packrat/keymaps/3uc/readme.md
index 603f82a812..603f82a812 100644
--- a/keyboards/packrat/keymaps/3uc/readme.md
+++ b/keyboards/drhigsby/packrat/keymaps/3uc/readme.md
diff --git a/keyboards/eggman/keymaps/default/rules.mk b/keyboards/drhigsby/packrat/keymaps/3uc/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/eggman/keymaps/default/rules.mk
+++ b/keyboards/drhigsby/packrat/keymaps/3uc/rules.mk
diff --git a/keyboards/packrat/keymaps/default/config.h b/keyboards/drhigsby/packrat/keymaps/default/config.h
index 9ff2d89acc..9ff2d89acc 100644
--- a/keyboards/packrat/keymaps/default/config.h
+++ b/keyboards/drhigsby/packrat/keymaps/default/config.h
diff --git a/keyboards/packrat/keymaps/default/keymap.c b/keyboards/drhigsby/packrat/keymaps/default/keymap.c
index 74df6a73e6..74df6a73e6 100644
--- a/keyboards/packrat/keymaps/default/keymap.c
+++ b/keyboards/drhigsby/packrat/keymaps/default/keymap.c
diff --git a/keyboards/packrat/keymaps/default/readme.md b/keyboards/drhigsby/packrat/keymaps/default/readme.md
index 3e6ed27b57..3e6ed27b57 100644
--- a/keyboards/packrat/keymaps/default/readme.md
+++ b/keyboards/drhigsby/packrat/keymaps/default/readme.md
diff --git a/keyboards/id80/ansi/keymaps/msf/rules.mk b/keyboards/drhigsby/packrat/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/id80/ansi/keymaps/msf/rules.mk
+++ b/keyboards/drhigsby/packrat/keymaps/default/rules.mk
diff --git a/keyboards/packrat/packrat.c b/keyboards/drhigsby/packrat/packrat.c
index 0f4a479956..0f4a479956 100644
--- a/keyboards/packrat/packrat.c
+++ b/keyboards/drhigsby/packrat/packrat.c
diff --git a/keyboards/packrat/packrat.h b/keyboards/drhigsby/packrat/packrat.h
index 91d0af7b7a..91d0af7b7a 100644
--- a/keyboards/packrat/packrat.h
+++ b/keyboards/drhigsby/packrat/packrat.h
diff --git a/keyboards/drhigsby/packrat/readme.md b/keyboards/drhigsby/packrat/readme.md
new file mode 100644
index 0000000000..98b12543dc
--- /dev/null
+++ b/keyboards/drhigsby/packrat/readme.md
@@ -0,0 +1,25 @@
+# Packrat
+
+![Packrat](https://i.imgur.com/t6vWYIbh.jpeg)
+
+Full Gallery: https://imgur.com/gallery/fZklCG6
+
+Packrat is an 11u wide ortholinear keyboard featuring multiple bottom row options and top-centered rotary encoder support.
+
+* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
+* Hardware Supported: Packrat (https://github.com/drhigsby/packrat)
+* Hardware Availability: cases available at TBD / make your own
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drhigsby/packrat: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).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/packrat/rules.mk b/keyboards/drhigsby/packrat/rules.mk
index fc0608c07f..fc0608c07f 100644
--- a/keyboards/packrat/rules.mk
+++ b/keyboards/drhigsby/packrat/rules.mk
diff --git a/keyboards/dtisaac/cg108/rules.mk b/keyboards/dtisaac/cg108/rules.mk
index 5786064c56..e0403a960b 100644
--- a/keyboards/dtisaac/cg108/rules.mk
+++ b/keyboards/dtisaac/cg108/rules.mk
@@ -15,5 +15,4 @@ 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
-BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/dtisaac/dosa40rgb/readme.md b/keyboards/dtisaac/dosa40rgb/readme.md
index 5f288c6b76..a2995a5c0f 100644
--- a/keyboards/dtisaac/dosa40rgb/readme.md
+++ b/keyboards/dtisaac/dosa40rgb/readme.md
@@ -5,7 +5,7 @@
A 40 percent keyboard dosa40rgb Bluetooth Low Energy
* Keyboard Maintainer: [DTIsaac](https://github.com/daotakisaac)
-* Hardware Supported: ATmega32U4 + AdafruitBLE SPI
+* Hardware Supported: ATmega32U4 + Bluefruit LE SPI
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/dtisaac/dosa40rgb/rules.mk b/keyboards/dtisaac/dosa40rgb/rules.mk
index 58f478a96c..caecba365e 100644
--- a/keyboards/dtisaac/dosa40rgb/rules.mk
+++ b/keyboards/dtisaac/dosa40rgb/rules.mk
@@ -15,10 +15,9 @@ 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
-BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes # Enable Bluetooth
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
diff --git a/keyboards/dubba175/readme.md b/keyboards/dubba175/readme.md
deleted file mode 100644
index f8f1459236..0000000000
--- a/keyboards/dubba175/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Dubba175
-
-![Dubba175](https://i.imgur.com/nzDZuS3h.jpg)
-
-Dubba175 is a 10u wide ortholinear keyboard featuring 2x 1.75u spacebars as the bottom row layout option.
-
-* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
-* Hardware Supported: Dubba175 (https://github.com/drhigsby/dubba175)
-* Hardware Availability: P3DStore.com offers a stacked acrlyic case / make your own
-
-Make example for this keyboard (after setting up your build environment):
-
- make dubba175:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/duck/jetfire/matrix.c b/keyboards/duck/jetfire/matrix.c
index 2dd94a72ac..729fa6dd14 100644
--- a/keyboards/duck/jetfire/matrix.c
+++ b/keyboards/duck/jetfire/matrix.c
@@ -116,12 +116,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/ducky/one2mini/1861st/1861st.c b/keyboards/ducky/one2mini/1861st/1861st.c
new file mode 100644
index 0000000000..1c164ea70d
--- /dev/null
+++ b/keyboards/ducky/one2mini/1861st/1861st.c
@@ -0,0 +1,8 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "1861st.h"
+
+void bootloader_jump(void) {
+ // TODO: Work out how to jump to LDROM, for now just reset the board.
+ NVIC_SystemReset();
+}
diff --git a/keyboards/ducky/one2mini/1861st/rules.mk b/keyboards/ducky/one2mini/1861st/rules.mk
index 277108c8ac..a5b4708b26 100644
--- a/keyboards/ducky/one2mini/1861st/rules.mk
+++ b/keyboards/ducky/one2mini/1861st/rules.mk
@@ -1,6 +1,9 @@
MCU_FAMILY = NUMICRO
MCU_SERIES = NUC123
+# Bootloader selection
+BOOTLOADER = custom
+
# linker script to use
MCU_LDSCRIPT = NUC123xD4xx0
diff --git a/keyboards/durgod/boards/DURGOD_STM32_F070/bootloader_defs.h b/keyboards/durgod/boards/DURGOD_STM32_F070/bootloader_defs.h
deleted file mode 100644
index 02c48c4e6d..0000000000
--- a/keyboards/durgod/boards/DURGOD_STM32_F070/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here (page 175):
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/durgod/boards/DURGOD_STM32_F070/chconf.h b/keyboards/durgod/boards/DURGOD_STM32_F070/chconf.h
index a7d95c51a9..d70f188178 100644
--- a/keyboards/durgod/boards/DURGOD_STM32_F070/chconf.h
+++ b/keyboards/durgod/boards/DURGOD_STM32_F070/chconf.h
@@ -21,7 +21,7 @@
#pragma once
-#define CH_CFG_ST_FREQUENCY 10000
+#define CH_CFG_ST_FREQUENCY 1000
#define CH_CFG_ST_TIMEDELTA 0
diff --git a/keyboards/durgod/boards/DURGOD_STM32_F070/mcuconf.h b/keyboards/durgod/boards/DURGOD_STM32_F070/mcuconf.h
index 6d67aa96aa..a24c1cee12 100644
--- a/keyboards/durgod/boards/DURGOD_STM32_F070/mcuconf.h
+++ b/keyboards/durgod/boards/DURGOD_STM32_F070/mcuconf.h
@@ -85,7 +85,7 @@
*/
#define STM32_GPT_USE_TIM1 FALSE
#define STM32_GPT_USE_TIM2 FALSE
-#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM3 TRUE
#define STM32_GPT_USE_TIM14 FALSE
#define STM32_GPT_TIM1_IRQ_PRIORITY 2
#define STM32_GPT_TIM2_IRQ_PRIORITY 2
diff --git a/keyboards/durgod/dgk6x/config.h b/keyboards/durgod/dgk6x/config.h
index 92673e5c24..a15ed86650 100644
--- a/keyboards/durgod/dgk6x/config.h
+++ b/keyboards/durgod/dgk6x/config.h
@@ -22,6 +22,9 @@
#define VENDOR_ID 0xD60D
#define MANUFACTURER Hoksi Technology
+#define USB_POLLING_INTERVAL_MS 1
+#define WAIT_US_TIMER GPTD3
+
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
diff --git a/keyboards/durgod/dgk6x/halconf.h b/keyboards/durgod/dgk6x/halconf.h
index 1772f8e410..9c1c6e5280 100644
--- a/keyboards/durgod/dgk6x/halconf.h
+++ b/keyboards/durgod/dgk6x/halconf.h
@@ -19,4 +19,7 @@
#ifdef RGB_MATRIX_ENABLE
#define HAL_USE_I2C TRUE
#endif
+
+#define HAL_USE_GPT TRUE
+
#include_next <halconf.h>
diff --git a/keyboards/durgod/dgk6x/rules.mk b/keyboards/durgod/dgk6x/rules.mk
index 56c5b1ac24..660719104d 100644
--- a/keyboards/durgod/dgk6x/rules.mk
+++ b/keyboards/durgod/dgk6x/rules.mk
@@ -1,9 +1,11 @@
# MCU name
# Actually F070, but close enough
MCU = STM32F072
-
BOARD = DURGOD_STM32_F070
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Do not put the microcontroller into power saving mode
NO_SUSPEND_POWER_DOWN = yes
diff --git a/keyboards/durgod/k3x0/config.h b/keyboards/durgod/k3x0/config.h
index ef73a71016..af543bb970 100644
--- a/keyboards/durgod/k3x0/config.h
+++ b/keyboards/durgod/k3x0/config.h
@@ -23,6 +23,9 @@
#define VENDOR_ID 0xD60D
#define MANUFACTURER Hoksi Technology
+#define USB_POLLING_INTERVAL_MS 1
+#define WAIT_US_TIMER GPTD3
+
/* key matrix size (rows in specific keyboard variant) */
#define MATRIX_COLS 16
diff --git a/keyboards/durgod/k3x0/halconf.h b/keyboards/durgod/k3x0/halconf.h
index fa20fe30a9..d2a9d8c7c0 100644
--- a/keyboards/durgod/k3x0/halconf.h
+++ b/keyboards/durgod/k3x0/halconf.h
@@ -19,4 +19,6 @@
#define HAL_USE_PAL TRUE
#define PAL_USE_CALLBACKS TRUE
+#define HAL_USE_GPT TRUE
+
#include_next <halconf.h>
diff --git a/keyboards/dyz/dyz60/info.json b/keyboards/dyz/dyz60/info.json
index 24ff257554..d946f9b97b 100644
--- a/keyboards/dyz/dyz60/info.json
+++ b/keyboards/dyz/dyz60/info.json
@@ -20,7 +20,7 @@
"usb": {
"vid": "0xD772",
"pid": "0x000A",
- "device_ver": "0x0001"
+ "device_version": "0.0.1"
},
"layouts": {
"LAYOUT_all": {
diff --git a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/rules.mk b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/rules.mk
index 15b8ec1baf..e2618e5290 100644
--- a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/rules.mk
+++ b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/rules.mk
@@ -2,6 +2,6 @@ NKRO_ENABLE = yes # USB Nkey Rollover
AUTO_SHIFT_ENABLE = yes # Auto Shift
# VELOCIKEY_ENABLE = yes
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
# SRC += dz60rgb.c
diff --git a/keyboards/dztech/dz60rgb_wkl/v2_1/config.h b/keyboards/dztech/dz60rgb_wkl/v2_1/config.h
index bfa9d8d955..960285b976 100644
--- a/keyboards/dztech/dz60rgb_wkl/v2_1/config.h
+++ b/keyboards/dztech/dz60rgb_wkl/v2_1/config.h
@@ -86,7 +86,7 @@
# define ENABLE_RGB_MATRIX_HUE_PENDULUM
# define ENABLE_RGB_MATRIX_HUE_WAVE
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
-# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
diff --git a/keyboards/dztech/dz65rgb/keymaps/drootz/rules.mk b/keyboards/dztech/dz65rgb/keymaps/drootz/rules.mk
index 24a765ab9a..2f8ab8ecc3 100644
--- a/keyboards/dztech/dz65rgb/keymaps/drootz/rules.mk
+++ b/keyboards/dztech/dz65rgb/keymaps/drootz/rules.mk
@@ -2,7 +2,7 @@ DYNAMIC_MACRO_ENABLE = yes
LEADER_ENABLE = yes
# Firmware size Optimizations
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
MOUSEKEY_ENABLE = no
NKRO_ENABLE = no
SPACE_CADET_ENABLE = no
diff --git a/keyboards/edi/hardlight/mk2/rules.mk b/keyboards/edi/hardlight/mk2/rules.mk
index 5ffab4a55e..3ee5e5a9c4 100644
--- a/keyboards/edi/hardlight/mk2/rules.mk
+++ b/keyboards/edi/hardlight/mk2/rules.mk
@@ -2,7 +2,7 @@
MCU = STM32F072
# Bootloader selection
-Bootloader = stm32-dfu
+BOOTLOADER = stm32-dfu
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
@@ -15,10 +15,7 @@ MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
+NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/standaside/config.h b/keyboards/edi/standaside/config.h
index 797a463a15..797a463a15 100644
--- a/keyboards/standaside/config.h
+++ b/keyboards/edi/standaside/config.h
diff --git a/keyboards/standaside/info.json b/keyboards/edi/standaside/info.json
index 797a3419b7..797a3419b7 100644
--- a/keyboards/standaside/info.json
+++ b/keyboards/edi/standaside/info.json
diff --git a/keyboards/standaside/keymaps/default/keymap.c b/keyboards/edi/standaside/keymaps/default/keymap.c
index 0f13cb7632..0f13cb7632 100644
--- a/keyboards/standaside/keymaps/default/keymap.c
+++ b/keyboards/edi/standaside/keymaps/default/keymap.c
diff --git a/keyboards/edi/standaside/readme.md b/keyboards/edi/standaside/readme.md
new file mode 100644
index 0000000000..51911c877d
--- /dev/null
+++ b/keyboards/edi/standaside/readme.md
@@ -0,0 +1,15 @@
+# Stand Aside
+
+![Stand Aside](https://i.imgur.com/X6Katar.png)
+
+A compact 60% keyboard designed by Fate Everywhere. Born out of the desire for a Planck with a numpad for technical work. Available for sale (kit and completed) once the store comes up.
+
+Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)
+Hardware Supported: Mark 3 Stand Aside.
+Hardware Availability: Seven Store (https://store.7storm.org).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make edi/standaside:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/standaside/rules.mk b/keyboards/edi/standaside/rules.mk
index 8e4bcc5f9b..8e4bcc5f9b 100644
--- a/keyboards/standaside/rules.mk
+++ b/keyboards/edi/standaside/rules.mk
diff --git a/keyboards/standaside/standaside.c b/keyboards/edi/standaside/standaside.c
index 9f445ec044..9f445ec044 100644
--- a/keyboards/standaside/standaside.c
+++ b/keyboards/edi/standaside/standaside.c
diff --git a/keyboards/standaside/standaside.h b/keyboards/edi/standaside/standaside.h
index 9601f1257c..9601f1257c 100644
--- a/keyboards/standaside/standaside.h
+++ b/keyboards/edi/standaside/standaside.h
diff --git a/keyboards/eggman/readme.md b/keyboards/eggman/readme.md
deleted file mode 100644
index 156b4086fa..0000000000
--- a/keyboards/eggman/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# eggman
-
-![eggman](https://i.imgur.com/x4kaGmll.jpg)
-
-i am he and you are me
-
-* Keyboard Maintainer: https://github.com/qpockets
-* Hardware Availability:
-
-Make example for this keyboard (after setting up your build environment):
-
- make eggman:default
-
-Flashing example for this keyboard:
-
- make eggman:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ergo42/ergo42.h b/keyboards/ergo42/ergo42.h
deleted file mode 100644
index 656b211308..0000000000
--- a/keyboards/ergo42/ergo42.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_ergo42_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/ergo42/readme.md b/keyboards/ergo42/readme.md
deleted file mode 100644
index c43b47382b..0000000000
--- a/keyboards/ergo42/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Ergo42
-
-![Ergo42](https://raw.githubusercontent.com/Biacco42/Ergo42/readme/readme_image/ergo42_image.jpg)
-
-__The Answer to the Ultimate Question of Life, the Universe, and at least Keyboards.__
-A split 7x4 ortholinear keyboard. [Hardware project repo](https://github.com/Biacco42/Ergo42)
-
-* Keyboard Maintainer: [Biacco42](https://github.com/Biacco42) [@Biacco42](https://twitter.com/Biacco42)
-* Hardware Supported: Ergo42 PCB, Pro Micro ATmega32u4
-* Hardware Availability: [Ergo42 PCB and case](https://github.com/Biacco42/Ergo42)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ergo42/rev1:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ergo42/rules.mk b/keyboards/ergo42/rules.mk
deleted file mode 100644
index 2225bdcb59..0000000000
--- a/keyboards/ergo42/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = ergo42/rev1
diff --git a/keyboards/ergoarrows/readme.md b/keyboards/ergoarrows/readme.md
deleted file mode 100644
index 00932548d1..0000000000
--- a/keyboards/ergoarrows/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# ergoarrows
-
-![ergoarrows](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20210117/20210117011553.png)
-
-This is 76 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: nknl7 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2681816)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ergoarrows:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/ergo-arrows-build-guide)
diff --git a/keyboards/ergodash/ergodash.h b/keyboards/ergodash/ergodash.h
deleted file mode 100644
index 5fba70e75d..0000000000
--- a/keyboards/ergodash/ergodash.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_ergodash_rev1
- #include "rev1.h"
-#endif // #ifdef KEYBOARD_ergodash_rev1
-
-#ifdef KEYBOARD_ergodash_mini
- #include "mini.h"
-#endif
diff --git a/keyboards/ergodash/mini/readme.md b/keyboards/ergodash/mini/readme.md
deleted file mode 100644
index f830f3f1d9..0000000000
--- a/keyboards/ergodash/mini/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# ErgoDash mini
-
-![ErgoDash mini](https://github.com/omkbd/picture/blob/master/Ergodashmini.jpg)
-
-Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
-Hardware Supported: ErgoDash mini PCB, Pro Micro ATmega32u4
-Hardware Availability: Order your own [yourself](https://github.com/omkbd/ErgoDash)
-
-
-Make example for this keyboard (after setting up your build environment):
-
- make ergodash/mini:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-# Layout
-![layout](https://github.com/omkbd/picture/blob/master/ergodashmini-layout.png)
-![PCB](https://github.com/omkbd/picture/blob/master/Ergodashmini_PCB.jpg)
diff --git a/keyboards/ergodash/readme.md b/keyboards/ergodash/readme.md
deleted file mode 100644
index 27672c3ecf..0000000000
--- a/keyboards/ergodash/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# ErgoDash
-
-![ErgoDash](https://github.com/omkbd/picture/blob/master/Ergodash.jpg)
-
-Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
-Hardware Supported: ErgoDash PCB, Pro Micro ATmega32u4
-Hardware Availability: Order your own [yourself](https://github.com/omkbd/ErgoDash)
-
-
-Make example for this keyboard (after setting up your build environment):
-
- make ergodash/rev1:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-Install Example: (for pro micro)
- `make ergodash/rev1:default:avrdude`
-
-Note:
- "rev1" is for PCB ver 1.0,1.1,1.2
- **The original Rev 1 was owned only by the designer. Therefore, Rev1 has been removed. Since the current PCB is Rev1, we changed Rev2 to Rev1 to match the firmware version.**
-
-
-# Layout
-![layout](https://github.com/omkbd/picture/blob/master/ergodash-layout.png)
-
-Layout Note:
-- In thumb cluster, it is not possible to use all 5 positions as small keys. (as pictured)
-- The top 2 1u keys in the thumb cluster share the same connection.
-- 2u key (center) position shares with the lower 1u key position
-
-![PCB](https://github.com/omkbd/picture/blob/master/Ergodash_PCB.jpg)
diff --git a/keyboards/ergodash/rules.mk b/keyboards/ergodash/rules.mk
deleted file mode 100644
index de097dfbb3..0000000000
--- a/keyboards/ergodash/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-SPLIT_KEYBOARD = yes # Enables split keyboard support
-
-DEFAULT_FOLDER = ergodash/rev1
diff --git a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
index 360c3c51b8..20bac4ab9d 100644
--- a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
@@ -1,4 +1,4 @@
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes # enable later
-SRC += ../default/keymap.c
+SRC += keymaps/default/keymap.c
diff --git a/keyboards/ergodox_infinity/readme.md b/keyboards/ergodox_infinity/readme.md
deleted file mode 100644
index c51bdd7c82..0000000000
--- a/keyboards/ergodox_infinity/readme.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# ErgoDox Infinity
-
-The Infinity is two completely independent keyboards, and needs to be flashed
-for the left and right halves seperately. To flash them:
-
- - Make sure you are in the top-level qmk_firmware directory
-
- - Build the firmware with `make ergodox_infinity:keymapname`
-
- - Plug in the left hand keyboard only.
-
- - Press the program button (back of keyboard, above thumb pad).
-
- - Install the firmware with `sudo make ergodox_infinity:keymapname:dfu-util`
-
- - Plug in the right hand keyboard only.
-
- - Press the program button (back of keyboard, above thumb pad).
-
- - Install the firmware with `sudo make ergodox_infinity:keymapname:dfu-util`
-
-More information on the Infinity firmware is available in the [TMK/chibios for
-Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md)
-
-## Infinity Two Halves
-
-The Infinity is two completely independent keyboards, that can connect together.
-You have a few options in how you flash the firmware:
-
-- Add `#define EE_HANDS` to your config.h, initialize the EEPROM values (see below),
- and then flash the same firmware to both halves.
-
-- Flash with the instructions above, which assume the left hand is connected to USB.
-
-- For minor changes such as changing only the keymap without having updated
- any part of the firmware code itself, you can program only the half connected to USB,
- but it is safest to program both halves.
-
-### EE_HANDS initialization
-
-To initialize the EEPROM values for `EE_HANDS` to work properly, these steps should work.
-They only need to be done once, unless you reset the EEPROM later.
-
- - Plug in the left keyboard half to the computer, and press its program button.
-
- - Flash the left half with `make ergodox_infinity:default:dfu-util-split-left`
- (If you need to use a different method to flash your keyboard, still run this command,
- and abort it with Ctrl+C when the flashing attempts starts to print errors,
- then flash the built firmware).
-
- - On the left half, press the top vertical 1.5U key (second from the top in the rightmost column) once,
- then the 1U key at the bottom in the opposite corner (bottom left corner).
-
- - Plug in the right keyboard half to the computer, and press its program button.
-
- - Flash the right half with `make ergodox_infinity:default:dfu-util-split-right`
-
- - On the right half, press the top vertical 1.5U key (second from the top in the leftmost column) once,
- then the 1U key at the bottom in the opposite corner (bottom right corner).
-
- - Add `#define EE_HANDS` to the config.h file of your keymap, and build your firmware using
- `make ergodox_infinity:keymapname`.
-
- - After this, you can flash both halves with the same firmware, _without_ risking a mirrored keyboard when connected the wrong way.
- If you reset your EEPROM later, you'll have to follow these steps again, though.
-
diff --git a/keyboards/ergodox_stm32/ergodox_stm32.c b/keyboards/ergodox_stm32/ergodox_stm32.c
index 846c29d7a4..8419b40f41 100644
--- a/keyboards/ergodox_stm32/ergodox_stm32.c
+++ b/keyboards/ergodox_stm32/ergodox_stm32.c
@@ -16,6 +16,11 @@ void board_init(void) {
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
}
+void bootloader_jump(void) {
+ // This board doesn't use the "standard" stm32duino bootloader, and is resident in memory at the base location. All we can do here is reset.
+ NVIC_SystemReset();
+}
+
void matrix_init_kb(void)
{
// Init LED Ports
diff --git a/keyboards/ergodox_stm32/matrix.c b/keyboards/ergodox_stm32/matrix.c
index 383bf9790a..094d4a9e0f 100644
--- a/keyboards/ergodox_stm32/matrix.c
+++ b/keyboards/ergodox_stm32/matrix.c
@@ -119,10 +119,6 @@ uint8_t matrix_scan(void) {
return 0;
}
-bool matrix_is_modified(void) {
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col) {
return (matrix[row] & (1 << col));
diff --git a/keyboards/ergodox_stm32/rules.mk b/keyboards/ergodox_stm32/rules.mk
index 3a035cee01..e730df82aa 100644
--- a/keyboards/ergodox_stm32/rules.mk
+++ b/keyboards/ergodox_stm32/rules.mk
@@ -1,11 +1,10 @@
# MCU name
MCU = STM32F103
-
MCU_LDSCRIPT = stm32f103_bootloader
BOARD = ST_NUCLEO64_F103RB
-CFLAGS += "-Wno-error=deprecated"
-EXTRAFLAGS = -O0 -g
+# Bootloader selection
+BOOTLOADER = custom
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
diff --git a/keyboards/ergotaco/keymaps/default/readme.md b/keyboards/ergotaco/keymaps/default/readme.md
deleted file mode 100644
index 653f3774ea..0000000000
--- a/keyboards/ergotaco/keymaps/default/readme.md
+++ /dev/null
@@ -1,6 +0,0 @@
-This is the default keymap for the ErgoTaco, Make it your own!
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/ergotaco/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/ergotaco/matrix.c b/keyboards/ergotaco/matrix.c
deleted file mode 100644
index e5af1c27fd..0000000000
--- a/keyboards/ergotaco/matrix.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
-
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "matrix.h"
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "action_layer.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include QMK_KEYBOARD_H
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-// ATmega pin defs
-#define ROW1 (1<<5)
-#define COL6 (1<<0)
-#define COL7 (1<<1)
-#define COL8 (1<<2)
-#define COL9 (1<<3)
-#define COL10 (1<<2)
-#define COL11 (1<<3)
-
-
-// bit masks
-#define BMASK (COL7 | COL8 | COL9 | COL6)
-#define DMASK (COL10 | COL11)
-#define FMASK (ROW1)
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-/*
- * matrix state(1:on, 0:off)
- * contains the raw values without debounce filtering of the last read cycle.
- */
-static matrix_row_t raw_matrix[MATRIX_ROWS];
-
-// Debouncing: store for each key the number of scans until it's eligible to
-// change. When scanning the matrix, ignore any changes in keys that have
-// already changed in the last DEBOUNCE scans.
-static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
-
-static matrix_row_t read_cols(uint8_t row);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
-static uint8_t mcp23018_reset_loop;
-// static uint16_t mcp23018_reset_loop;
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-
-void matrix_init(void)
-{
- // initialize row and col
- mcp23018_status = init_mcp23018();
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- raw_matrix[i] = 0;
- for (uint8_t j=0; j < MATRIX_COLS; ++j) {
- debounce_matrix[i * MATRIX_COLS + j] = 0;
- }
- }
-
- matrix_init_quantum();
-}
-
-void matrix_power_up(void) {
- mcp23018_status = init_mcp23018();
-
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- }
-}
-
-// Returns a matrix_row_t whose bits are set if the corresponding key should be
-// eligible to change in this scan.
-matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
- matrix_row_t result = 0;
- matrix_row_t change = rawcols ^ raw_matrix[row];
- raw_matrix[row] = rawcols;
- for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
- if (debounce_matrix[row * MATRIX_COLS + i]) {
- --debounce_matrix[row * MATRIX_COLS + i];
- } else {
- result |= (1 << i);
- }
- if (change & (1 << i)) {
- debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
- }
- }
- return result;
-}
-
-matrix_row_t debounce_read_cols(uint8_t row) {
- // Read the row without debouncing filtering and store it for later usage.
- matrix_row_t cols = read_cols(row);
- // Get the Debounce mask.
- matrix_row_t mask = debounce_mask(cols, row);
- // debounce the row and return the result.
- return (cols & mask) | (matrix[row] & ~mask);;
-}
-
-uint8_t matrix_scan(void)
-{
- // Then the keyboard
- if (mcp23018_status) { // if there was an error
- if (++mcp23018_reset_loop == 0) {
- // if (++mcp23018_reset_loop >= 1300) {
- // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
- // this will be approx bit more frequent than once per second
- print("trying to reset mcp23018\n");
- mcp23018_status = init_mcp23018();
- if (mcp23018_status) {
- print("left side not responding\n");
- } else {
- print("left side attached\n");
- }
- }
- }
-
- for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
- select_row(i);
- // and select on left hand
- select_row(i + MATRIX_ROWS_PER_SIDE);
- // we don't need a 30us delay anymore, because selecting a
- // left-hand row requires more than 30us for i2c.
-
- // grab cols from left hand
- matrix[i] = debounce_read_cols(i);
- // grab cols from right hand
- matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
-
- unselect_rows();
- }
-
- matrix_scan_quantum();
-
-#ifdef DEBUG_MATRIX
- for (uint8_t c = 0; c < MATRIX_COLS; c++)
- for (uint8_t r = 0; r < MATRIX_ROWS; r++)
- if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
-#endif
-
- return 1;
-}
-
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-// Remember this means ROWS
-static void init_cols(void)
-{
- // init on mcp23018
- // not needed, already done as part of init_mcp23018()
-
- // Input with pull-up(DDR:0, PORT:1)
- DDRF &= ~FMASK;
- PORTF |= FMASK;
-}
-
-static matrix_row_t read_cols(uint8_t row)
-{
- if (row < 6) {
- if (mcp23018_status) { // if there was an error
- return 0;
- } else {
- uint8_t data = 0;
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
- data = (~((uint8_t)mcp23018_status) >> 2) & 0x01 ;
- mcp23018_status = I2C_STATUS_SUCCESS;
- out:
- i2c_stop();
-
-#ifdef DEBUG_MATRIX
- if (data != 0x00) xprintf("I2C: %d\n", data);
-#endif
- return data;
- }
- } else {
- // Read using bitmask
- return ~((((PINF & ROW1) >> 5)) & 0x1);
- }
-}
-
-// Row pin configuration
-static void unselect_rows(void)
-{
- // no need to unselect on mcp23018, because the select step sets all
- // the other row bits high, and it's not changing to a different
- // direction
- // Hi-Z(DDR:0, PORT:0) to unselect
- DDRB &= ~BMASK;
- PORTB &= ~BMASK;
- DDRD &= ~DMASK;
- PORTD &= ~DMASK;
-}
-
-static void select_row(uint8_t row)
-{
- if (row < 6) {
- // select on mcp23018
- if (mcp23018_status) { // do nothing on error
- // Read using bitmask
- } else { // set active row low : 0 // set other rows hi-Z : 1
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- out:
- i2c_stop();
- }
- } else {
- // Output low(DDR:1, PORT:0) to select
- switch (row) {
- case 6:
- DDRB |= COL6;
- PORTB &= ~COL6;
- break;
- case 7:
- DDRB |= COL7;
- PORTB &= ~COL7;
- break;
- case 8:
- DDRB |= COL8;
- PORTB &= ~COL8;
- break;
- case 9:
- DDRB |= COL9;
- PORTB &= ~COL9;
- break;
- case 10:
- DDRD |= COL10;
- PORTD &= ~COL10;
- break;
- case 11:
- DDRD |= COL11;
- PORTD &= ~COL11;
- break;
- }
- }
-}
diff --git a/keyboards/ergotaco/readme.md b/keyboards/ergotaco/readme.md
deleted file mode 100644
index 40077e2a8d..0000000000
--- a/keyboards/ergotaco/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Gergo
-
-![ErgoTaco](https://i.redd.it/dbcu5i21m3i21.jpg)
-
-It's a Taco with a side of HASL. A 12 key fiesta of a board.
-
-Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
-Hardware Supported: ErgoTaco
-Hardware Availability: [gboards.ca](http://gboards.ca)
-
-## Firmware building
-Clone the QMK Repo and install dfu-programmer, flash with:
-
- make ergotaco:default:dfu
-
-And reset your keyboard!
-
-To just test if your build system is sane, try compiling the default keymap using:
-
- make ergotaco: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).
-
-## Have an idea? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/espectro/readme.md b/keyboards/espectro/readme.md
deleted file mode 100644
index c4c0edc7f7..0000000000
--- a/keyboards/espectro/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Espectro
-
-![Espectro](https://cdn.shopify.com/s/files/1/1697/5323/products/IMG_0162_53a5ca83-3ce5-4741-92e8-10f769cf5ee1_1024x1024.jpg?v=1540701787)
-
-A 96% keyboard made and sold by MECHKEYS [More info on MECHKEYS](https://mechkeys.ca).
-
-Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
-Hardware Supported: Espectro
-Hardware Availability: [MECHKEYS](https://mechkeys.ca)
-
-Make example for this keyboard (after setting up your build environment):
-
- make espectro:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/eternal_keypad/rules.mk b/keyboards/eternal_keypad/rules.mk
index ef9b9d80de..e0403a960b 100644
--- a/keyboards/eternal_keypad/rules.mk
+++ b/keyboards/eternal_keypad/rules.mk
@@ -12,7 +12,7 @@ MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover
+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/evyd13/wasdat/config.h b/keyboards/evyd13/wasdat/config.h
index 36bbd30821..38f9fe4bda 100644
--- a/keyboards/evyd13/wasdat/config.h
+++ b/keyboards/evyd13/wasdat/config.h
@@ -41,22 +41,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#define MATRIX_ROW_PINS { D6, D4, F6, F7, F4, F5, F0, F1 }
-#define MATRIX_COL_PINS { }
+#define MATRIX_COL_PINS { C7, B6, C6, B4, B5, D7, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, D3, B7, B3 } // Columns 6-12 controlled by demux
#define UNUSED_PINS
-/* COL2ROW, ROW2COL*/
-#define DIODE_DIRECTION ROW2COL
+#define SN74X138_ADDRESS_PINS { D2, D1, D0 }
// For QMK DFU
#define QMK_ESC_OUTPUT D6
#define QMK_ESC_INPUT D7
#define QMK_LED B0
-/*
- * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
- */
-//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
-
#define LED_NUM_LOCK_PIN B2
#define LED_CAPS_LOCK_PIN B0
#define LED_SCROLL_LOCK_PIN B1
diff --git a/keyboards/evyd13/wasdat/matrix.c b/keyboards/evyd13/wasdat/matrix.c
index 6dd79b5330..c97dd84694 100644
--- a/keyboards/evyd13/wasdat/matrix.c
+++ b/keyboards/evyd13/wasdat/matrix.c
@@ -14,268 +14,66 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include <stdint.h>
#include <stdbool.h>
-#include "wait.h"
-#include "util.h"
#include "matrix.h"
-#include "debounce.h"
#include "quantum.h"
+#include "sn74x138.h"
-#ifdef DIRECT_PINS
-static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
-#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-//static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-#endif
-
-// matrix code
-
-#ifdef DIRECT_PINS
-
-static void init_pins(void) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- for (int col = 0; col < MATRIX_COLS; col++) {
- pin_t pin = direct_pins[row][col];
- if (pin != NO_PIN) {
- setPinInputHigh(pin);
- }
- }
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
- matrix_row_t last_row_value = current_matrix[current_row];
- current_matrix[current_row] = 0;
-
- for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
- pin_t pin = direct_pins[current_row][col_index];
- if (pin != NO_PIN) {
- current_matrix[current_row] |= readPin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
- }
- }
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-#elif (DIODE_DIRECTION == COL2ROW)
-
-static void select_row(uint8_t row) {
- setPinOutput(row_pins[row]);
- writePinLow(row_pins[row]);
-}
-
-static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
-
-static void unselect_rows(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static void init_pins(void) {
- unselect_rows();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin_state = readPin(col_pins[col_index]);
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-/* Cols 0 - 15
- * col 0: C7
- * col 1: B6
+/* col 0: C7
+ * col 1: B6
* col 2: C6
- * col 3: B4
- * col 4: B5
- * col 5: D7
- * These columns use a 74HC237D 3 to 8 bit demultiplexer.
- * A0 A1 A2
- * col / pin: PD2 PD1 PD0
- * 6: 1 1 1
- * 7: 0 1 1
- * 8: 1 0 1
- * 9: 0 0 1
- * 10: 1 1 0
- * 11: 0 1 0
- * 12: 1 0 0
- * col 13: D3
- * col 14: B7
- * col 15: B3
+ * col 3: B4
+ * col 4: B5
+ * col 5: D7
+ *
+ * These columns use a 74HC138 3 to 8 bit demultiplexer.
+ * A2 A1 A0
+ * col / pin: PD0 PD1 PD2
+ * 6: 1 1 1
+ * 7: 1 1 0
+ * 8: 1 0 1
+ * 9: 1 0 0
+ * 10: 0 1 1
+ * 11: 0 1 0
+ * 12: 0 0 1
+ *
+ * col 13: D3
+ * col 14: B7
+ * col 15: B3
*/
static void select_col(uint8_t col) {
- switch (col) {
- case 0:
- writePinLow(C7);
- break;
- case 1:
- writePinLow(B6);
- break;
- case 2:
- writePinLow(C6);
- break;
- case 3:
- writePinLow(B4);
- break;
- case 4:
- writePinLow(B5);
- break;
- case 5:
- writePinLow(D7);
- break;
- case 6:
- writePinHigh(D0);
- writePinHigh(D1);
- writePinHigh(D2);
- break;
- case 7:
- writePinHigh(D0);
- writePinHigh(D1);
- break;
- case 8:
- writePinHigh(D0);
- writePinHigh(D2);
- break;
- case 9:
- writePinHigh(D0);
- break;
- case 10:
- writePinHigh(D1);
- writePinHigh(D2);
- break;
- case 11:
- writePinHigh(D1);
- break;
- case 12:
- writePinHigh(D2);
- break;
- case 13:
- writePinLow(D3);
- break;
- case 14:
- writePinLow(B7);
- break;
- case 15:
- writePinLow(B3);
- break;
+ if (col_pins[col] != NO_PIN) {
+ writePinLow(col_pins[col]);
+ } else {
+ sn74x138_set_addr(13 - col);
}
}
static void unselect_col(uint8_t col) {
- switch (col) {
- case 0:
- writePinHigh(C7);
- break;
- case 1:
- writePinHigh(B6);
- break;
- case 2:
- writePinHigh(C6);
- break;
- case 3:
- writePinHigh(B4);
- break;
- case 4:
- writePinHigh(B5);
- break;
- case 5:
- writePinHigh(D7);
- break;
- case 6:
- writePinLow(D0);
- writePinLow(D1);
- writePinLow(D2);
- break;
- case 7:
- writePinLow(D0);
- writePinLow(D1);
- break;
- case 8:
- writePinLow(D0);
- writePinLow(D2);
- break;
- case 9:
- writePinLow(D0);
- break;
- case 10:
- writePinLow(D1);
- writePinLow(D2);
- break;
- case 11:
- writePinLow(D1);
- break;
- case 12:
- writePinLow(D2);
- break;
- case 13:
- writePinHigh(D3);
- break;
- case 14:
- writePinHigh(B7);
- break;
- case 15:
- writePinHigh(B3);
- break;
+ if (col_pins[col] != NO_PIN) {
+ setPinOutput(col_pins[col]);
+ writePinHigh(col_pins[col]);
+ } else {
+ sn74x138_set_addr(0);
}
}
static void unselect_cols(void) {
- //Native
- setPinOutput(D3);
- setPinOutput(D7);
- writePinHigh(D3);
- writePinHigh(D7);
-
- setPinOutput(C6);
- setPinOutput(C7);
- writePinHigh(C6);
- writePinHigh(C7);
-
- setPinOutput(B3);
- setPinOutput(B4);
- setPinOutput(B5);
- setPinOutput(B6);
- setPinOutput(B7);
- writePinHigh(B3);
- writePinHigh(B4);
- writePinHigh(B5);
- writePinHigh(B6);
- writePinHigh(B7);
+ // Native
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ if (col_pins[x] != NO_PIN) {
+ setPinOutput(col_pins[x]);
+ writePinHigh(col_pins[x]);
+ }
+ }
- //Demultiplexer
- setPinOutput(D0);
- setPinOutput(D1);
- setPinOutput(D2);
- writePinLow(D0);
- writePinLow(D1);
- writePinLow(D2);
+ // Demultiplexer
+ sn74x138_set_addr(0);
}
static void init_pins(void) {
@@ -288,9 +86,9 @@ static void init_pins(void) {
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
bool matrix_changed = false;
- // Select col and wait for col selecton to stabilize
+ // Select col and wait for col selection to stabilize
select_col(current_col);
- wait_us(30);
+ matrix_io_delay();
// For each row...
for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
@@ -318,27 +116,20 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
return matrix_changed;
}
-#endif
-
void matrix_init_custom(void) {
// initialize key pins
init_pins();
+ // initialize demultiplexer
+ sn74x138_init();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool changed = false;
-#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
- changed |= read_cols_on_row(current_matrix, current_row);
- }
-#elif (DIODE_DIRECTION == ROW2COL)
// Set col, read rows
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
changed |= read_rows_on_col(current_matrix, current_col);
}
-#endif
return changed;
}
diff --git a/keyboards/evyd13/wasdat/rules.mk b/keyboards/evyd13/wasdat/rules.mk
index d9f65747fb..bb4261a4fe 100644
--- a/keyboards/evyd13/wasdat/rules.mk
+++ b/keyboards/evyd13/wasdat/rules.mk
@@ -18,6 +18,7 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
-SRC += matrix.c
+VPATH += drivers/gpio
+SRC += matrix.c sn74x138.c
LAYOUTS = fullsize_ansi fullsize_iso tkl_ansi tkl_iso
diff --git a/keyboards/ez_maker/directpins/promicro/info.json b/keyboards/ez_maker/directpins/promicro/info.json
index 419450385c..264ee350c8 100644
--- a/keyboards/ez_maker/directpins/promicro/info.json
+++ b/keyboards/ez_maker/directpins/promicro/info.json
@@ -26,7 +26,7 @@
},
"processor": "atmega32u4",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2320",
"vid": "0xFEED"
},
diff --git a/keyboards/ez_maker/directpins/proton_c/info.json b/keyboards/ez_maker/directpins/proton_c/info.json
index a284e5c41f..d35fe9a90a 100644
--- a/keyboards/ez_maker/directpins/proton_c/info.json
+++ b/keyboards/ez_maker/directpins/proton_c/info.json
@@ -5,6 +5,7 @@
"debounce": 5,
"processor": "STM32F303",
"board": "QMK_PROTON_C",
+ "bootloader": "stm32-dfu",
"features": {
"bootmagic": true,
"extrakey": true,
@@ -31,7 +32,7 @@
]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2321",
"vid": "0xFEED"
},
diff --git a/keyboards/ez_maker/directpins/teensy_2/info.json b/keyboards/ez_maker/directpins/teensy_2/info.json
index 0c8fa672a9..731d089322 100644
--- a/keyboards/ez_maker/directpins/teensy_2/info.json
+++ b/keyboards/ez_maker/directpins/teensy_2/info.json
@@ -28,7 +28,7 @@
]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2322",
"vid": "0xFEED"
},
diff --git a/keyboards/ez_maker/directpins/teensy_2pp/info.json b/keyboards/ez_maker/directpins/teensy_2pp/info.json
index 578fe1c0db..d1aa41edd5 100644
--- a/keyboards/ez_maker/directpins/teensy_2pp/info.json
+++ b/keyboards/ez_maker/directpins/teensy_2pp/info.json
@@ -35,7 +35,7 @@
]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2323",
"vid": "0xFEED"
},
diff --git a/keyboards/ez_maker/directpins/teensy_32/info.json b/keyboards/ez_maker/directpins/teensy_32/info.json
index 207bc4fd0b..0a6ac5c374 100644
--- a/keyboards/ez_maker/directpins/teensy_32/info.json
+++ b/keyboards/ez_maker/directpins/teensy_32/info.json
@@ -4,6 +4,7 @@
"maintainer": "skullydazed",
"debounce": 5,
"processor": "MK20DX256",
+ "bootloader": "halfkay",
"features": {
"bootmagic": true,
"extrakey": true,
@@ -27,7 +28,7 @@
]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2324",
"vid": "0xFEED"
},
diff --git a/keyboards/ez_maker/directpins/teensy_lc/info.json b/keyboards/ez_maker/directpins/teensy_lc/info.json
index 8477fd0d83..1e88239d41 100644
--- a/keyboards/ez_maker/directpins/teensy_lc/info.json
+++ b/keyboards/ez_maker/directpins/teensy_lc/info.json
@@ -4,6 +4,7 @@
"maintainer": "skullydazed",
"debounce": 5,
"processor": "MKL26Z64",
+ "bootloader": "halfkay",
"features": {
"bootmagic": true,
"extrakey": true,
@@ -27,7 +28,7 @@
]
},
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2325",
"vid": "0xFEED"
},
diff --git a/keyboards/felix/readme.md b/keyboards/felix/readme.md
deleted file mode 100644
index 0a3fe10a6e..0000000000
--- a/keyboards/felix/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Felix
-
-A customizable number/macropad made by Unikeyboard.
-
-Keyboard Maintainer: [QMK Community](https://github.com/qmk)
-Hardware Supported: Felix PCB, Pro Micro
-Hardware Availability: [Unikeyboard](https://unikeyboard.io/product/felix/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make felix:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/forever65/info.json b/keyboards/forever65/info.json
index 6cb2442a08..b50a2cf406 100644
--- a/keyboards/forever65/info.json
+++ b/keyboards/forever65/info.json
@@ -3,6 +3,7 @@
"manufacturer": "Nightingale Studios",
"maintainer": "zvecr",
"processor": "STM32F072",
+ "bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A3", "F1", "F0", "C15", "C14", "C13", "B11", "B10", "B2", "B1", "B0", "A7", "A5", "A6", "A4", "B5"],
@@ -11,7 +12,7 @@
"usb": {
"vid": "0x4E53",
"pid": "0x0F65",
- "device_ver": "0x0001"
+ "device_version": "0.0.1"
},
"features": {
"bootmagic": true,
diff --git a/keyboards/four_banger/readme.md b/keyboards/four_banger/readme.md
deleted file mode 100644
index 913ca6ee85..0000000000
--- a/keyboards/four_banger/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Four Banger
-===
-
-A 2x2 macro pad sold by 1up Keyboards - designed by Bishop Keyboards
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Four Banger Keyboard PCB
-Hardware Availability: [1up Keyboards](https://1upkeyboards.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make four_banger:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/freyr/readme.md b/keyboards/freyr/readme.md
deleted file mode 100644
index 20fa484e8c..0000000000
--- a/keyboards/freyr/readme.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# freyr
-
-![Freyr](https://i.imgur.com/MeOrzoIl.jpg)
-
-Freyr is a tenkeyless keyboard, support ansi and iso layout.
-
-[Full layout here](http://www.keyboard-layout-editor.com/#/gists/438ef0c58c46ec28c80d9894ffcff177)
-
-* Keyboard Maintainer: [HnahKB](https://github.com/vuhopkep)
-* Hardware Supported: Freyr.revB PCB
-
-Make example for this keyboard (after setting up your build environment):
-
- make freyr:default
-
-Flashing example for this keyboard:
-
- make freyr:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/frooastboard/info.json b/keyboards/frooastboard/info.json
index bb63e10920..b1f7df7502 100644
--- a/keyboards/frooastboard/info.json
+++ b/keyboards/frooastboard/info.json
@@ -37,6 +37,6 @@
"usb": {
"vid": "0x4642",
"pid": "0x6F21",
- "device_ver": "0x0001"
+ "device_version": "0.0.1"
}
}
diff --git a/keyboards/butterstick/butterstick.c b/keyboards/gboards/butterstick/butterstick.c
index 3bcbcbe8b4..3bcbcbe8b4 100644
--- a/keyboards/butterstick/butterstick.c
+++ b/keyboards/gboards/butterstick/butterstick.c
diff --git a/keyboards/butterstick/butterstick.h b/keyboards/gboards/butterstick/butterstick.h
index f97488c3f5..f97488c3f5 100644
--- a/keyboards/butterstick/butterstick.h
+++ b/keyboards/gboards/butterstick/butterstick.h
diff --git a/keyboards/butterstick/config.h b/keyboards/gboards/butterstick/config.h
index 69632cd4f7..69632cd4f7 100644
--- a/keyboards/butterstick/config.h
+++ b/keyboards/gboards/butterstick/config.h
diff --git a/keyboards/butterstick/info.json b/keyboards/gboards/butterstick/info.json
index 6bfd58e594..6bfd58e594 100644
--- a/keyboards/butterstick/info.json
+++ b/keyboards/gboards/butterstick/info.json
diff --git a/keyboards/butterstick/keymaps/default/keymap.c b/keyboards/gboards/butterstick/keymaps/default/keymap.c
index 749e9ba071..749e9ba071 100644
--- a/keyboards/butterstick/keymaps/default/keymap.c
+++ b/keyboards/gboards/butterstick/keymaps/default/keymap.c
diff --git a/keyboards/butterstick/keymaps/dennytom/README.md b/keyboards/gboards/butterstick/keymaps/dennytom/README.md
index a75bcc7506..a75bcc7506 100644
--- a/keyboards/butterstick/keymaps/dennytom/README.md
+++ b/keyboards/gboards/butterstick/keymaps/dennytom/README.md
diff --git a/keyboards/butterstick/keymaps/dennytom/keymap.c b/keyboards/gboards/butterstick/keymaps/dennytom/keymap.c
index bfe0aa2153..bfe0aa2153 100644
--- a/keyboards/butterstick/keymaps/dennytom/keymap.c
+++ b/keyboards/gboards/butterstick/keymaps/dennytom/keymap.c
diff --git a/keyboards/butterstick/keymaps/dennytom/keymap_def.json b/keyboards/gboards/butterstick/keymaps/dennytom/keymap_def.json
index 16f02ca529..16f02ca529 100644
--- a/keyboards/butterstick/keymaps/dennytom/keymap_def.json
+++ b/keyboards/gboards/butterstick/keymaps/dennytom/keymap_def.json
diff --git a/keyboards/butterstick/keymaps/dennytom/rules.mk b/keyboards/gboards/butterstick/keymaps/dennytom/rules.mk
index 1155f72c04..1155f72c04 100644
--- a/keyboards/butterstick/keymaps/dennytom/rules.mk
+++ b/keyboards/gboards/butterstick/keymaps/dennytom/rules.mk
diff --git a/keyboards/gboards/butterstick/readme.md b/keyboards/gboards/butterstick/readme.md
new file mode 100644
index 0000000000..37e9375d88
--- /dev/null
+++ b/keyboards/gboards/butterstick/readme.md
@@ -0,0 +1,14 @@
+# Butter Stick
+
+![Butter Stick](https://i.redd.it/mvteaomko7s21.jpg)
+
+A chorded 20% keyboard packing full sized useage into your pocket. More info on [gboards.ca](http://docs.gboards.ca/Meet-Butter-Stick)!
+
+Keyboard Maintainer: [Germ](https://github.com/germ)
+Hardware Availability: [g Heavy Industries](https://www.gboards.ca/product/butter-stick-limited-edition)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make gboards/butterstick:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/butterstick/rules.mk b/keyboards/gboards/butterstick/rules.mk
index 4229aa7eec..4229aa7eec 100644
--- a/keyboards/butterstick/rules.mk
+++ b/keyboards/gboards/butterstick/rules.mk
diff --git a/keyboards/butterstick/sten.c b/keyboards/gboards/butterstick/sten.c
index 197abaf92f..197abaf92f 100644
--- a/keyboards/butterstick/sten.c
+++ b/keyboards/gboards/butterstick/sten.c
diff --git a/keyboards/butterstick/sten.h b/keyboards/gboards/butterstick/sten.h
index 0d5c58df21..0d5c58df21 100644
--- a/keyboards/butterstick/sten.h
+++ b/keyboards/gboards/butterstick/sten.h
diff --git a/keyboards/ergotaco/config.h b/keyboards/gboards/ergotaco/config.h
index d415e77dc6..d415e77dc6 100644
--- a/keyboards/ergotaco/config.h
+++ b/keyboards/gboards/ergotaco/config.h
diff --git a/keyboards/ergotaco/ergotaco.c b/keyboards/gboards/ergotaco/ergotaco.c
index ecab74b3a2..ecab74b3a2 100644
--- a/keyboards/ergotaco/ergotaco.c
+++ b/keyboards/gboards/ergotaco/ergotaco.c
diff --git a/keyboards/ergotaco/ergotaco.h b/keyboards/gboards/ergotaco/ergotaco.h
index 5a0cd5e8fb..5a0cd5e8fb 100644
--- a/keyboards/ergotaco/ergotaco.h
+++ b/keyboards/gboards/ergotaco/ergotaco.h
diff --git a/keyboards/ergotaco/info.json b/keyboards/gboards/ergotaco/info.json
index e7794e6ee3..e7794e6ee3 100644
--- a/keyboards/ergotaco/info.json
+++ b/keyboards/gboards/ergotaco/info.json
diff --git a/keyboards/ergotaco/keymaps/default/keymap.c b/keyboards/gboards/ergotaco/keymaps/default/keymap.c
index 8de5ea6371..8de5ea6371 100644
--- a/keyboards/ergotaco/keymaps/default/keymap.c
+++ b/keyboards/gboards/ergotaco/keymaps/default/keymap.c
diff --git a/keyboards/gboards/ergotaco/keymaps/default/readme.md b/keyboards/gboards/ergotaco/keymaps/default/readme.md
new file mode 100644
index 0000000000..d9c7c1601f
--- /dev/null
+++ b/keyboards/gboards/ergotaco/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+This is the default keymap for the ErgoTaco, Make it your own!
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/ergotaco/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/ergotaco/keymaps/default/rules.mk b/keyboards/gboards/ergotaco/keymaps/default/rules.mk
index 870d047dc9..870d047dc9 100644
--- a/keyboards/ergotaco/keymaps/default/rules.mk
+++ b/keyboards/gboards/ergotaco/keymaps/default/rules.mk
diff --git a/keyboards/gboards/ergotaco/matrix.c b/keyboards/gboards/ergotaco/matrix.c
new file mode 100644
index 0000000000..16300a7e4f
--- /dev/null
+++ b/keyboards/gboards/ergotaco/matrix.c
@@ -0,0 +1,326 @@
+/*
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "matrix.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include QMK_KEYBOARD_H
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+// ATmega pin defs
+#define ROW1 (1<<5)
+#define COL6 (1<<0)
+#define COL7 (1<<1)
+#define COL8 (1<<2)
+#define COL9 (1<<3)
+#define COL10 (1<<2)
+#define COL11 (1<<3)
+
+
+// bit masks
+#define BMASK (COL7 | COL8 | COL9 | COL6)
+#define DMASK (COL10 | COL11)
+#define FMASK (ROW1)
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change. When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+static uint8_t mcp23018_reset_loop;
+// static uint16_t mcp23018_reset_loop;
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+
+void matrix_init(void)
+{
+ // initialize row and col
+ mcp23018_status = init_mcp23018();
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ raw_matrix[i] = 0;
+ for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+ debounce_matrix[i * MATRIX_COLS + j] = 0;
+ }
+ }
+
+ matrix_init_quantum();
+}
+
+void matrix_power_up(void) {
+ mcp23018_status = init_mcp23018();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+}
+
+// Returns a matrix_row_t whose bits are set if the corresponding key should be
+// eligible to change in this scan.
+matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
+ matrix_row_t result = 0;
+ matrix_row_t change = rawcols ^ raw_matrix[row];
+ raw_matrix[row] = rawcols;
+ for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+ if (debounce_matrix[row * MATRIX_COLS + i]) {
+ --debounce_matrix[row * MATRIX_COLS + i];
+ } else {
+ result |= (1 << i);
+ }
+ if (change & (1 << i)) {
+ debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
+ }
+ }
+ return result;
+}
+
+matrix_row_t debounce_read_cols(uint8_t row) {
+ // Read the row without debouncing filtering and store it for later usage.
+ matrix_row_t cols = read_cols(row);
+ // Get the Debounce mask.
+ matrix_row_t mask = debounce_mask(cols, row);
+ // debounce the row and return the result.
+ return (cols & mask) | (matrix[row] & ~mask);;
+}
+
+uint8_t matrix_scan(void)
+{
+ // Then the keyboard
+ if (mcp23018_status) { // if there was an error
+ if (++mcp23018_reset_loop == 0) {
+ // if (++mcp23018_reset_loop >= 1300) {
+ // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+ // this will be approx bit more frequent than once per second
+ print("trying to reset mcp23018\n");
+ mcp23018_status = init_mcp23018();
+ if (mcp23018_status) {
+ print("left side not responding\n");
+ } else {
+ print("left side attached\n");
+ }
+ }
+ }
+
+ for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+ select_row(i);
+ // and select on left hand
+ select_row(i + MATRIX_ROWS_PER_SIDE);
+ // we don't need a 30us delay anymore, because selecting a
+ // left-hand row requires more than 30us for i2c.
+
+ // grab cols from left hand
+ matrix[i] = debounce_read_cols(i);
+ // grab cols from right hand
+ matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
+
+ unselect_rows();
+ }
+
+ matrix_scan_quantum();
+
+#ifdef DEBUG_MATRIX
+ for (uint8_t c = 0; c < MATRIX_COLS; c++)
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++)
+ if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
+#endif
+
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_bin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+// Remember this means ROWS
+static void init_cols(void)
+{
+ // init on mcp23018
+ // not needed, already done as part of init_mcp23018()
+
+ // Input with pull-up(DDR:0, PORT:1)
+ DDRF &= ~FMASK;
+ PORTF |= FMASK;
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+ if (row < 6) {
+ if (mcp23018_status) { // if there was an error
+ return 0;
+ } else {
+ uint8_t data = 0;
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
+ data = (~((uint8_t)mcp23018_status) >> 2) & 0x01 ;
+ mcp23018_status = I2C_STATUS_SUCCESS;
+ out:
+ i2c_stop();
+
+#ifdef DEBUG_MATRIX
+ if (data != 0x00) xprintf("I2C: %d\n", data);
+#endif
+ return data;
+ }
+ } else {
+ // Read using bitmask
+ return ~((((PINF & ROW1) >> 5)) & 0x1);
+ }
+}
+
+// Row pin configuration
+static void unselect_rows(void)
+{
+ // no need to unselect on mcp23018, because the select step sets all
+ // the other row bits high, and it's not changing to a different
+ // direction
+ // Hi-Z(DDR:0, PORT:0) to unselect
+ DDRB &= ~BMASK;
+ PORTB &= ~BMASK;
+ DDRD &= ~DMASK;
+ PORTD &= ~DMASK;
+}
+
+static void select_row(uint8_t row)
+{
+ if (row < 6) {
+ // select on mcp23018
+ if (mcp23018_status) { // do nothing on error
+ // Read using bitmask
+ } else { // set active row low : 0 // set other rows hi-Z : 1
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ out:
+ i2c_stop();
+ }
+ } else {
+ // Output low(DDR:1, PORT:0) to select
+ switch (row) {
+ case 6:
+ DDRB |= COL6;
+ PORTB &= ~COL6;
+ break;
+ case 7:
+ DDRB |= COL7;
+ PORTB &= ~COL7;
+ break;
+ case 8:
+ DDRB |= COL8;
+ PORTB &= ~COL8;
+ break;
+ case 9:
+ DDRB |= COL9;
+ PORTB &= ~COL9;
+ break;
+ case 10:
+ DDRD |= COL10;
+ PORTD &= ~COL10;
+ break;
+ case 11:
+ DDRD |= COL11;
+ PORTD &= ~COL11;
+ break;
+ }
+ }
+}
diff --git a/keyboards/ergotaco/post_rules.mk b/keyboards/gboards/ergotaco/post_rules.mk
index 0db3171b33..0db3171b33 100644
--- a/keyboards/ergotaco/post_rules.mk
+++ b/keyboards/gboards/ergotaco/post_rules.mk
diff --git a/keyboards/gboards/ergotaco/readme.md b/keyboards/gboards/ergotaco/readme.md
new file mode 100644
index 0000000000..dc9db3bb64
--- /dev/null
+++ b/keyboards/gboards/ergotaco/readme.md
@@ -0,0 +1,24 @@
+# Gergo
+
+![ErgoTaco](https://i.redd.it/dbcu5i21m3i21.jpg)
+
+It's a Taco with a side of HASL. A 12 key fiesta of a board.
+
+Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
+Hardware Supported: ErgoTaco
+Hardware Availability: [gboards.ca](http://gboards.ca)
+
+## Firmware building
+Clone the QMK Repo and install dfu-programmer, flash with:
+
+ make gboards/ergotaco:default:dfu
+
+And reset your keyboard!
+
+To just test if your build system is sane, try compiling the default keymap using:
+
+ make gboards/ergotaco: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).
+
+## Have an idea? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/ergotaco/rules.mk b/keyboards/gboards/ergotaco/rules.mk
index db236477b0..db236477b0 100644
--- a/keyboards/ergotaco/rules.mk
+++ b/keyboards/gboards/ergotaco/rules.mk
diff --git a/keyboards/georgi/config.h b/keyboards/gboards/georgi/config.h
index 5cd2f1620e..5cd2f1620e 100644
--- a/keyboards/georgi/config.h
+++ b/keyboards/gboards/georgi/config.h
diff --git a/keyboards/georgi/georgi.c b/keyboards/gboards/georgi/georgi.c
index 8866886ce7..8866886ce7 100644
--- a/keyboards/georgi/georgi.c
+++ b/keyboards/gboards/georgi/georgi.c
diff --git a/keyboards/georgi/georgi.h b/keyboards/gboards/georgi/georgi.h
index e5a52c585d..e5a52c585d 100644
--- a/keyboards/georgi/georgi.h
+++ b/keyboards/gboards/georgi/georgi.h
diff --git a/keyboards/georgi/info.json b/keyboards/gboards/georgi/info.json
index 89d2cd883f..89d2cd883f 100644
--- a/keyboards/georgi/info.json
+++ b/keyboards/gboards/georgi/info.json
diff --git a/keyboards/georgi/keymaps/colemak-dh/keymap.c b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
index 29b35f6abd..29b35f6abd 100644
--- a/keyboards/georgi/keymaps/colemak-dh/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
diff --git a/keyboards/georgi/keymaps/colemak-dh/readme.md b/keyboards/gboards/georgi/keymaps/colemak-dh/readme.md
index f9da34b024..f9da34b024 100644
--- a/keyboards/georgi/keymaps/colemak-dh/readme.md
+++ b/keyboards/gboards/georgi/keymaps/colemak-dh/readme.md
diff --git a/keyboards/georgi/keymaps/colemak-dh/rules.mk b/keyboards/gboards/georgi/keymaps/colemak-dh/rules.mk
index 07394aef48..07394aef48 100644
--- a/keyboards/georgi/keymaps/colemak-dh/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/colemak-dh/rules.mk
diff --git a/keyboards/georgi/keymaps/default-flipped/keymap.c b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
index 09243f2a24..09243f2a24 100644
--- a/keyboards/georgi/keymaps/default-flipped/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
diff --git a/keyboards/georgi/keymaps/default-flipped/readme.md b/keyboards/gboards/georgi/keymaps/default-flipped/readme.md
index f9da34b024..f9da34b024 100644
--- a/keyboards/georgi/keymaps/default-flipped/readme.md
+++ b/keyboards/gboards/georgi/keymaps/default-flipped/readme.md
diff --git a/keyboards/georgi/keymaps/default-flipped/rules.mk b/keyboards/gboards/georgi/keymaps/default-flipped/rules.mk
index 90d8057c32..90d8057c32 100644
--- a/keyboards/georgi/keymaps/default-flipped/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/default-flipped/rules.mk
diff --git a/keyboards/georgi/keymaps/default/keymap.c b/keyboards/gboards/georgi/keymaps/default/keymap.c
index 93c551af27..93c551af27 100644
--- a/keyboards/georgi/keymaps/default/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/default/keymap.c
diff --git a/keyboards/georgi/keymaps/default/readme.md b/keyboards/gboards/georgi/keymaps/default/readme.md
index f9da34b024..f9da34b024 100644
--- a/keyboards/georgi/keymaps/default/readme.md
+++ b/keyboards/gboards/georgi/keymaps/default/readme.md
diff --git a/keyboards/georgi/keymaps/default/rules.mk b/keyboards/gboards/georgi/keymaps/default/rules.mk
index 7bd3d7aa20..7bd3d7aa20 100644
--- a/keyboards/georgi/keymaps/default/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/default/rules.mk
diff --git a/keyboards/georgi/keymaps/dennytom/README.md b/keyboards/gboards/georgi/keymaps/dennytom/README.md
index 14bc1d2045..14bc1d2045 100644
--- a/keyboards/georgi/keymaps/dennytom/README.md
+++ b/keyboards/gboards/georgi/keymaps/dennytom/README.md
diff --git a/keyboards/georgi/keymaps/dennytom/keymap.c b/keyboards/gboards/georgi/keymaps/dennytom/keymap.c
index 2e01917745..2e01917745 100644
--- a/keyboards/georgi/keymaps/dennytom/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/dennytom/keymap.c
diff --git a/keyboards/georgi/keymaps/dennytom/keymap_def.json b/keyboards/gboards/georgi/keymaps/dennytom/keymap_def.json
index 232ccafadf..232ccafadf 100644
--- a/keyboards/georgi/keymaps/dennytom/keymap_def.json
+++ b/keyboards/gboards/georgi/keymaps/dennytom/keymap_def.json
diff --git a/keyboards/georgi/keymaps/dennytom/rules.mk b/keyboards/gboards/georgi/keymaps/dennytom/rules.mk
index 1155f72c04..1155f72c04 100644
--- a/keyboards/georgi/keymaps/dennytom/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/dennytom/rules.mk
diff --git a/keyboards/georgi/keymaps/minimal/keymap.c b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
index e9294c5cc8..e9294c5cc8 100644
--- a/keyboards/georgi/keymaps/minimal/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
diff --git a/keyboards/georgi/keymaps/minimal/readme.md b/keyboards/gboards/georgi/keymaps/minimal/readme.md
index f9da34b024..f9da34b024 100644
--- a/keyboards/georgi/keymaps/minimal/readme.md
+++ b/keyboards/gboards/georgi/keymaps/minimal/readme.md
diff --git a/keyboards/georgi/keymaps/minimal/rules.mk b/keyboards/gboards/georgi/keymaps/minimal/rules.mk
index cdbbbc280e..cdbbbc280e 100644
--- a/keyboards/georgi/keymaps/minimal/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/minimal/rules.mk
diff --git a/keyboards/georgi/keymaps/norman/keymap.c b/keyboards/gboards/georgi/keymaps/norman/keymap.c
index 4591aab22f..4591aab22f 100644
--- a/keyboards/georgi/keymaps/norman/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/norman/keymap.c
diff --git a/keyboards/georgi/keymaps/norman/readme.md b/keyboards/gboards/georgi/keymaps/norman/readme.md
index f9da34b024..f9da34b024 100644
--- a/keyboards/georgi/keymaps/norman/readme.md
+++ b/keyboards/gboards/georgi/keymaps/norman/readme.md
diff --git a/keyboards/georgi/keymaps/norman/rules.mk b/keyboards/gboards/georgi/keymaps/norman/rules.mk
index bb97bef281..bb97bef281 100644
--- a/keyboards/georgi/keymaps/norman/rules.mk
+++ b/keyboards/gboards/georgi/keymaps/norman/rules.mk
diff --git a/keyboards/gboards/georgi/matrix.c b/keyboards/gboards/georgi/matrix.c
new file mode 100644
index 0000000000..7d635ad8d7
--- /dev/null
+++ b/keyboards/gboards/georgi/matrix.c
@@ -0,0 +1,361 @@
+/*
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "matrix.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "keymap_steno.h"
+#include QMK_KEYBOARD_H
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+// MCP Pin Defs
+#define RROW1 (1<<3)
+#define RROW2 (1<<2)
+#define RROW3 (1<<1)
+#define RROW4 (1<<0)
+#define COL0 (1<<0)
+#define COL1 (1<<1)
+#define COL2 (1<<2)
+#define COL3 (1<<3)
+#define COL4 (1<<4)
+#define COL5 (1<<5)
+#define COL6 (1<<6)
+
+// ATmega pin defs
+#define ROW1 (1<<6)
+#define ROW2 (1<<5)
+#define ROW3 (1<<4)
+#define ROW4 (1<<1)
+#define COL7 (1<<0)
+#define COL8 (1<<1)
+#define COL9 (1<<2)
+#define COL10 (1<<3)
+#define COL11 (1<<2)
+#define COL12 (1<<3)
+#define COL13 (1<<6)
+
+
+// bit masks
+#define BMASK (COL7 | COL8 | COL9 | COL10)
+#define CMASK (COL13)
+#define DMASK (COL11 | COL12)
+#define FMASK (ROW1 | ROW2 | ROW3 | ROW4)
+#define RROWMASK (RROW1 | RROW2 | RROW3 | RROW4)
+#define MCPMASK (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change. When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+static uint8_t mcp23018_reset_loop;
+// static uint16_t mcp23018_reset_loop;
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+
+void matrix_init(void)
+{
+ // initialize row and col
+ mcp23018_status = init_mcp23018();
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ raw_matrix[i] = 0;
+ for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+ debounce_matrix[i * MATRIX_COLS + j] = 0;
+ }
+ }
+
+ matrix_init_quantum();
+}
+
+void matrix_power_up(void) {
+ mcp23018_status = init_mcp23018();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+}
+
+// Returns a matrix_row_t whose bits are set if the corresponding key should be
+// eligible to change in this scan.
+matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
+ matrix_row_t result = 0;
+ matrix_row_t change = rawcols ^ raw_matrix[row];
+ raw_matrix[row] = rawcols;
+ for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+ if (debounce_matrix[row * MATRIX_COLS + i]) {
+ --debounce_matrix[row * MATRIX_COLS + i];
+ } else {
+ result |= (1 << i);
+ }
+ if (change & (1 << i)) {
+ debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
+ }
+ }
+ return result;
+}
+
+matrix_row_t debounce_read_cols(uint8_t row) {
+ // Read the row without debouncing filtering and store it for later usage.
+ matrix_row_t cols = read_cols(row);
+ // Get the Debounce mask.
+ matrix_row_t mask = debounce_mask(cols, row);
+ // debounce the row and return the result.
+ return (cols & mask) | (matrix[row] & ~mask);;
+}
+
+uint8_t matrix_scan(void)
+{
+ // Then the keyboard
+ if (mcp23018_status) { // if there was an error
+ if (++mcp23018_reset_loop == 0) {
+ // if (++mcp23018_reset_loop >= 1300) {
+ // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+ // this will be approx bit more frequent than once per second
+ print("trying to reset mcp23018\n");
+ mcp23018_status = init_mcp23018();
+ if (mcp23018_status) {
+ print("left side not responding\n");
+ } else {
+ print("left side attached\n");
+ }
+ }
+ }
+
+ for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+ select_row(i);
+ // and select on left hand
+ select_row(i + MATRIX_ROWS_PER_SIDE);
+ // we don't need a 30us delay anymore, because selecting a
+ // left-hand row requires more than 30us for i2c.
+
+ // grab cols from left hand
+ matrix[i] = debounce_read_cols(i);
+ // grab cols from right hand
+ matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
+
+ unselect_rows();
+ }
+
+ matrix_scan_quantum();
+
+#ifdef DEBUG_MATRIX
+ for (uint8_t c = 0; c < MATRIX_COLS; c++)
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++)
+ if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
+#endif
+
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_bin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+// Remember this means ROWS
+static void init_cols(void)
+{
+ // init on mcp23018
+ // not needed, already done as part of init_mcp23018()
+
+ // Input with pull-up(DDR:0, PORT:1)
+ DDRF &= ~FMASK;
+ PORTF |= FMASK;
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+ if (row < 7) {
+ if (mcp23018_status) { // if there was an error
+ return 0;
+ } else {
+ uint8_t data = 0;
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
+ data = ~((uint8_t)mcp23018_status);
+ mcp23018_status = I2C_STATUS_SUCCESS;
+ out:
+ i2c_stop();
+
+#ifdef DEBUG_MATRIX
+ if (data != 0x00) xprintf("I2C: %d\n", data);
+#endif
+ return data;
+ }
+ } else {
+ /* read from teensy
+ * bitmask is 0b0111001, but we want the lower four
+ * we'll return 1s for the top two, but that's harmless.
+ */
+ // So I need to confuckulate all this
+ //return ~(((PIND & DMASK) >> 1 | ((PINC & CMASK) >> 6) | (PIN)));
+ //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
+ return ~(
+ (((PINF & ROW4) >> 1)
+ | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
+ & 0xF);
+ }
+}
+
+// Row pin configuration
+static void unselect_rows(void)
+{
+ // no need to unselect on mcp23018, because the select step sets all
+ // the other row bits high, and it's not changing to a different
+ // direction
+ // Hi-Z(DDR:0, PORT:0) to unselect
+ DDRB &= ~(BMASK);
+ PORTB &= ~(BMASK);
+ DDRC &= ~CMASK;
+ PORTC &= ~CMASK;
+ DDRD &= ~DMASK;
+ PORTD &= ~DMASK;
+}
+
+static void select_row(uint8_t row)
+{
+ if (row < 7) {
+ // select on mcp23018
+ if (mcp23018_status) { // do nothing on error
+ } else { // set active row low : 0 // set other rows hi-Z : 1
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ out:
+ i2c_stop();
+ }
+ } else {
+ // Output low(DDR:1, PORT:0) to select
+ switch (row) {
+ case 7:
+ DDRB |= COL7;
+ PORTB &= ~COL7;
+ break;
+ case 8:
+ DDRB |= COL8;
+ PORTB &= ~COL8;
+ break;
+ case 9:
+ DDRB |= COL9;
+ PORTB &= ~COL9;
+ break;
+ case 10:
+ DDRB |= COL10;
+ PORTB &= ~COL10;
+ break;
+ case 11:
+ DDRD |= COL11;
+ PORTD &= ~COL11;
+ break;
+ case 12:
+ DDRD |= COL12;
+ PORTD &= ~COL12;
+ break;
+ case 13:
+ DDRC |= COL13;
+ PORTC &= ~COL13;
+ break;
+ }
+ }
+}
diff --git a/keyboards/gboards/georgi/readme.md b/keyboards/gboards/georgi/readme.md
new file mode 100644
index 0000000000..2ba259ab7e
--- /dev/null
+++ b/keyboards/gboards/georgi/readme.md
@@ -0,0 +1,32 @@
+# Georgi
+
+![Georgi](https://i.imgur.com/3kUpRrj.jpg)
+
+A compact 20% (12x2) Split Keyboard for steno and QWERTY.
+
+[More info on qmk.fm](http://qmk.fm/georgi/)
+
+Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
+Hardware Supported: Georgi
+Hardware Availability: [gboards.ca](http://gboards.ca)
+
+## Firmware building
+After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
+
+ make gboards/georgi:default:dfu
+
+To just test your build with the default keymap
+
+ make gboards/georgi:default
+
+Build options can be enabled/disabled in keyboards/gboards/georgi/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
+
+## Documentation
+Is hosted over on [docs.gboards.ca](http://docs.gboards.ca/). Please take a look at the docs for customizing your firmware!
+
+# Space
+The stock firmware leaves 7K free for custom entries. For extra space disable mousekeys in your keymaps rules.mk (3K of space) and remove the Gaming layers (1k).
+
+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).
+
+## Have an idea? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/georgi/rules.mk b/keyboards/gboards/georgi/rules.mk
index a884d8b3b9..a884d8b3b9 100644
--- a/keyboards/georgi/rules.mk
+++ b/keyboards/gboards/georgi/rules.mk
diff --git a/keyboards/georgi/sten.c b/keyboards/gboards/georgi/sten.c
index c7469b6394..c7469b6394 100644
--- a/keyboards/georgi/sten.c
+++ b/keyboards/gboards/georgi/sten.c
diff --git a/keyboards/georgi/sten.h b/keyboards/gboards/georgi/sten.h
index 320c49514c..320c49514c 100644
--- a/keyboards/georgi/sten.h
+++ b/keyboards/gboards/georgi/sten.h
diff --git a/keyboards/gergo/config.h b/keyboards/gboards/gergo/config.h
index 9d56c0e24f..9d56c0e24f 100644
--- a/keyboards/gergo/config.h
+++ b/keyboards/gboards/gergo/config.h
diff --git a/keyboards/gergo/gergo.c b/keyboards/gboards/gergo/gergo.c
index ba359f8145..ba359f8145 100644
--- a/keyboards/gergo/gergo.c
+++ b/keyboards/gboards/gergo/gergo.c
diff --git a/keyboards/gergo/gergo.h b/keyboards/gboards/gergo/gergo.h
index 5174542661..5174542661 100644
--- a/keyboards/gergo/gergo.h
+++ b/keyboards/gboards/gergo/gergo.h
diff --git a/keyboards/gergo/info.json b/keyboards/gboards/gergo/info.json
index be52e49046..be52e49046 100644
--- a/keyboards/gergo/info.json
+++ b/keyboards/gboards/gergo/info.json
diff --git a/keyboards/gergo/keymaps/abstractkb/config.h b/keyboards/gboards/gergo/keymaps/abstractkb/config.h
index bc7b9f7845..bc7b9f7845 100644
--- a/keyboards/gergo/keymaps/abstractkb/config.h
+++ b/keyboards/gboards/gergo/keymaps/abstractkb/config.h
diff --git a/keyboards/gergo/keymaps/abstractkb/keymap.c b/keyboards/gboards/gergo/keymaps/abstractkb/keymap.c
index 6ee37f8175..6ee37f8175 100644
--- a/keyboards/gergo/keymaps/abstractkb/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/abstractkb/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/abstractkb/readme.md b/keyboards/gboards/gergo/keymaps/abstractkb/readme.md
new file mode 100644
index 0000000000..863b21e8e2
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/abstractkb/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is my personal modification to the stock gergo keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gboards/gergo/keymaps/abstractkb/rules.mk b/keyboards/gboards/gergo/keymaps/abstractkb/rules.mk
new file mode 100644
index 0000000000..4b4e56c4a0
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/abstractkb/rules.mk
@@ -0,0 +1,38 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = no # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = yes
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gergo/keymaps/colemak/keymap.c b/keyboards/gboards/gergo/keymaps/colemak/keymap.c
index b2e79114f2..b2e79114f2 100644
--- a/keyboards/gergo/keymaps/colemak/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/colemak/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/colemak/readme.md b/keyboards/gboards/gergo/keymaps/colemak/readme.md
new file mode 100644
index 0000000000..5cfe3b8306
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/colemak/readme.md
@@ -0,0 +1,16 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is a [Colemak](https://colemak.com/) mapping for the Gergo,
+
+Unlike the default mapping, most symbols are at their original place on the number row to ease in the
+learning curve.
+
+You can view this layout over at
+[keyboad-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/f04d6a3b0cd3db91407c51f7ba36aeb3).
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/colemak/rules.mk b/keyboards/gboards/gergo/keymaps/colemak/rules.mk
index 3b81fdfa1b..3b81fdfa1b 100644
--- a/keyboards/gergo/keymaps/colemak/rules.mk
+++ b/keyboards/gboards/gergo/keymaps/colemak/rules.mk
diff --git a/keyboards/gergo/keymaps/default/config.h b/keyboards/gboards/gergo/keymaps/default/config.h
index 6393d46f14..6393d46f14 100644
--- a/keyboards/gergo/keymaps/default/config.h
+++ b/keyboards/gboards/gergo/keymaps/default/config.h
diff --git a/keyboards/gergo/keymaps/default/keymap.c b/keyboards/gboards/gergo/keymaps/default/keymap.c
index 8e26223f17..8e26223f17 100644
--- a/keyboards/gergo/keymaps/default/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/default/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/default/readme.md b/keyboards/gboards/gergo/keymaps/default/readme.md
new file mode 100644
index 0000000000..8e49b2f5b0
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/default/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gboards/gergo/keymaps/default/rules.mk b/keyboards/gboards/gergo/keymaps/default/rules.mk
new file mode 100644
index 0000000000..bc2b3cf43b
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/default/rules.mk
@@ -0,0 +1,38 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = no # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = yes
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gergo/keymaps/drashna/keymap.c b/keyboards/gboards/gergo/keymaps/drashna/keymap.c
index 01d52ed162..01d52ed162 100644
--- a/keyboards/gergo/keymaps/drashna/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/drashna/keymap.c
diff --git a/keyboards/gergo/keymaps/drashna/rules.mk b/keyboards/gboards/gergo/keymaps/drashna/rules.mk
index ec81d11e9c..ec81d11e9c 100644
--- a/keyboards/gergo/keymaps/drashna/rules.mk
+++ b/keyboards/gboards/gergo/keymaps/drashna/rules.mk
diff --git a/keyboards/gergo/keymaps/germ/config.h b/keyboards/gboards/gergo/keymaps/germ/config.h
index 6393d46f14..6393d46f14 100644
--- a/keyboards/gergo/keymaps/germ/config.h
+++ b/keyboards/gboards/gergo/keymaps/germ/config.h
diff --git a/keyboards/gergo/keymaps/germ/keymap.c b/keyboards/gboards/gergo/keymaps/germ/keymap.c
index 8e26223f17..8e26223f17 100644
--- a/keyboards/gergo/keymaps/germ/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/germ/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/germ/readme.md b/keyboards/gboards/gergo/keymaps/germ/readme.md
new file mode 100644
index 0000000000..8e49b2f5b0
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/germ/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gboards/gergo/keymaps/germ/rules.mk b/keyboards/gboards/gergo/keymaps/germ/rules.mk
new file mode 100644
index 0000000000..0fd941bb53
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/germ/rules.mk
@@ -0,0 +1,38 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = yes # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700), needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = no
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ OPT_DEFS += -DBALLER
+ POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gergo/keymaps/gotham/config.h b/keyboards/gboards/gergo/keymaps/gotham/config.h
index 6393d46f14..6393d46f14 100644
--- a/keyboards/gergo/keymaps/gotham/config.h
+++ b/keyboards/gboards/gergo/keymaps/gotham/config.h
diff --git a/keyboards/gergo/keymaps/gotham/keymap.c b/keyboards/gboards/gergo/keymaps/gotham/keymap.c
index ff6df266f2..ff6df266f2 100644
--- a/keyboards/gergo/keymaps/gotham/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/gotham/keymap.c
diff --git a/keyboards/gergo/keymaps/gotham/readme.md b/keyboards/gboards/gergo/keymaps/gotham/readme.md
index 2b1c5ab1da..2b1c5ab1da 100644
--- a/keyboards/gergo/keymaps/gotham/readme.md
+++ b/keyboards/gboards/gergo/keymaps/gotham/readme.md
diff --git a/keyboards/gboards/gergo/keymaps/gotham/rules.mk b/keyboards/gboards/gergo/keymaps/gotham/rules.mk
new file mode 100644
index 0000000000..bc2b3cf43b
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/gotham/rules.mk
@@ -0,0 +1,38 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = no # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = yes
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gergo/keymaps/manna-harbour_miryoku/config.h b/keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/config.h
index 2bfb5befb3..2bfb5befb3 100644
--- a/keyboards/gergo/keymaps/manna-harbour_miryoku/config.h
+++ b/keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/config.h
diff --git a/keyboards/gergo/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/keymap.c
index 7c5717a0fe..7c5717a0fe 100644
--- a/keyboards/gergo/keymaps/manna-harbour_miryoku/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/manna-harbour_miryoku/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/oled/config.h b/keyboards/gboards/gergo/keymaps/oled/config.h
new file mode 100644
index 0000000000..af960a1eed
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/oled/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define OLED_FONT_H "keyboards/gboards/gergo/keymaps/oled/glcdfont.c"
diff --git a/keyboards/gergo/keymaps/oled/glcdfont.c b/keyboards/gboards/gergo/keymaps/oled/glcdfont.c
index 687f1a6a92..687f1a6a92 100644
--- a/keyboards/gergo/keymaps/oled/glcdfont.c
+++ b/keyboards/gboards/gergo/keymaps/oled/glcdfont.c
diff --git a/keyboards/gergo/keymaps/oled/keymap.c b/keyboards/gboards/gergo/keymaps/oled/keymap.c
index ab374b9332..ab374b9332 100644
--- a/keyboards/gergo/keymaps/oled/keymap.c
+++ b/keyboards/gboards/gergo/keymaps/oled/keymap.c
diff --git a/keyboards/gboards/gergo/keymaps/oled/readme.md b/keyboards/gboards/gergo/keymaps/oled/readme.md
new file mode 100644
index 0000000000..8e49b2f5b0
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/oled/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gboards/gergo/keymaps/oled/rules.mk b/keyboards/gboards/gergo/keymaps/oled/rules.mk
new file mode 100644
index 0000000000..7880416719
--- /dev/null
+++ b/keyboards/gboards/gergo/keymaps/oled/rules.mk
@@ -0,0 +1,40 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = no # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+LOCAL_GLCDFONT = yes
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = yes
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gboards/gergo/matrix.c b/keyboards/gboards/gergo/matrix.c
new file mode 100644
index 0000000000..443e97132b
--- /dev/null
+++ b/keyboards/gboards/gergo/matrix.c
@@ -0,0 +1,440 @@
+/*
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "matrix.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "debounce.h"
+#include QMK_KEYBOARD_H
+
+#ifdef BALLER
+#include <avr/interrupt.h>
+#include "pointing_device.h"
+#endif
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+// MCP Pin Defs
+#define RROW1 (1u<<3)
+#define RROW2 (1u<<2)
+#define RROW3 (1u<<1)
+#define RROW4 (1u<<0)
+#define COL0 (1u<<0)
+#define COL1 (1u<<1)
+#define COL2 (1u<<2)
+#define COL3 (1u<<3)
+#define COL4 (1u<<4)
+#define COL5 (1u<<5)
+#define COL6 (1u<<6)
+
+// ATmega pin defs
+#define ROW1 (1u<<6)
+#define ROW2 (1u<<5)
+#define ROW3 (1u<<4)
+#define ROW4 (1u<<1)
+#define COL7 (1u<<0)
+#define COL8 (1u<<1)
+#define COL9 (1u<<2)
+#define COL10 (1u<<3)
+#define COL11 (1u<<2)
+#define COL12 (1u<<3)
+#define COL13 (1u<<6)
+
+//Trackball pin defs
+#define TRKUP (1u<<4)
+#define TRKDN (1u<<5)
+#define TRKLT (1u<<6)
+#define TRKRT (1u<<7)
+#define TRKBTN (1u<<6)
+
+
+// Multiple for mouse moves
+#ifndef TRKSTEP
+#define TRKSTEP 20
+#endif
+
+// multiple for mouse scroll
+#ifndef SCROLLSTEP
+#define SCROLLSTEP 5
+#endif
+
+// bit masks
+#define BMASK (COL7 | COL8 | COL9 | COL10)
+#define CMASK (COL13)
+#define DMASK (COL11 | COL12)
+#define FMASK (ROW1 | ROW2 | ROW3 | ROW4)
+#define RROWMASK (RROW1 | RROW2 | RROW3 | RROW4)
+#define MCPMASK (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
+#define TRKMASK (TRKUP | TRKDN | TRKRT | TRKLT)
+
+// Trackball interrupts accumulate over here. Processed on scan
+// Stores prev state of mouse, high bits store direction
+uint8_t trkState = 0;
+uint8_t trkBtnState = 0;
+
+volatile uint8_t tbUpCnt = 0;
+volatile uint8_t tbDnCnt = 0;
+volatile uint8_t tbLtCnt = 0;
+volatile uint8_t tbRtCnt = 0;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change. When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static void enableInterrupts(void);
+
+static uint8_t mcp23018_reset_loop;
+// static uint16_t mcp23018_reset_loop;
+
+__attribute__ ((weak)) void matrix_init_user(void) {}
+
+__attribute__ ((weak)) void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
+
+inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
+
+
+void matrix_init(void) {
+ // initialize row and col
+ mcp23018_status = init_mcp23018();
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ raw_matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+ matrix_init_quantum();
+}
+
+void matrix_power_up(void) {
+ mcp23018_status = init_mcp23018();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+}
+
+// Reads and stores a row, returning
+// whether a change occurred.
+static inline bool store_raw_matrix_row(uint8_t index) {
+ matrix_row_t temp = read_cols(index);
+ if (raw_matrix[index] != temp) {
+ raw_matrix[index] = temp;
+ return true;
+ }
+ return false;
+}
+
+
+
+uint8_t matrix_scan(void) {
+ // TODO: Find what is trashing interrupts
+ enableInterrupts();
+
+ // First we handle the mouse inputs
+#ifdef BALLER
+ uint8_t pBtn = PINE & TRKBTN;
+
+ #ifdef DEBUG_BALLER
+ // Compare to previous, mod report
+ if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
+ xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
+ #endif
+
+ // Modify the report
+ report_mouse_t pRprt = pointing_device_get_report();
+
+ // Scroll by default, move on layer
+ if (layer_state == 0) {
+ pRprt.h += tbLtCnt * SCROLLSTEP; tbLtCnt = 0;
+ pRprt.h -= tbRtCnt * SCROLLSTEP; tbRtCnt = 0;
+ pRprt.v -= tbUpCnt * SCROLLSTEP; tbUpCnt = 0;
+ pRprt.v += tbDnCnt * SCROLLSTEP; tbDnCnt = 0;
+ } else {
+ pRprt.x -= tbLtCnt * TRKSTEP * (layer_state - 1); tbLtCnt = 0;
+ pRprt.x += tbRtCnt * TRKSTEP * (layer_state - 1); tbRtCnt = 0;
+ pRprt.y -= tbUpCnt * TRKSTEP * (layer_state - 1); tbUpCnt = 0;
+ pRprt.y += tbDnCnt * TRKSTEP * (layer_state - 1); tbDnCnt = 0;
+ }
+
+#ifdef DEBUG_BALLER
+ if (pRprt.x != 0 || pRprt.y != 0)
+ xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
+#endif
+
+ if ((pBtn != trkBtnState) && ((pBtn >> 6) == 0)) pRprt.buttons |= MOUSE_BTN1;
+ if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
+
+ // Save state, push update
+ if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
+ pointing_device_set_report(pRprt);
+
+ trkBtnState = pBtn;
+#endif
+
+ // Then the keyboard
+ if (mcp23018_status) { // if there was an error
+ if (++mcp23018_reset_loop == 0) {
+ // if (++mcp23018_reset_loop >= 1300) {
+ // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+ // this will be approx bit more frequent than once per second
+ print("trying to reset mcp23018\n");
+ mcp23018_status = init_mcp23018();
+ if (mcp23018_status) {
+ print("left side not responding\n");
+ } else {
+ print("left side attached\n");
+ }
+ }
+ }
+
+ bool changed = false;
+ for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+ // select rows from left and right hands
+ uint8_t left_index = i;
+ uint8_t right_index = i + MATRIX_ROWS_PER_SIDE;
+ select_row(left_index);
+ select_row(right_index);
+
+ // we don't need a 30us delay anymore, because selecting a
+ // left-hand row requires more than 30us for i2c.
+
+ changed |= store_raw_matrix_row(left_index);
+ changed |= store_raw_matrix_row(right_index);
+
+ unselect_rows();
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+ matrix_scan_quantum();
+
+ enableInterrupts();
+
+#ifdef DEBUG_MATRIX
+ for (uint8_t c = 0; c < MATRIX_COLS; c++)
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++)
+ if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
+#endif
+
+ return 1;
+}
+
+inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
+
+inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
+
+void matrix_print(void) {
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_bin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+// Remember this means ROWS
+static void init_cols(void) {
+ // init on mcp23018
+ // not needed, already done as part of init_mcp23018()
+
+ // Input with pull-up(DDR:0, PORT:1)
+ DDRF &= ~FMASK;
+ PORTF |= FMASK;
+}
+
+static matrix_row_t read_cols(uint8_t row) {
+ if (row < 7) {
+ if (mcp23018_status) { // if there was an error
+ return 0;
+ } else {
+ uint8_t data = 0;
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOB, I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_start(I2C_ADDR_READ, I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_read_nack(I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
+ data = ~((uint8_t)mcp23018_status);
+ mcp23018_status = I2C_STATUS_SUCCESS;
+ out:
+ i2c_stop();
+
+#ifdef DEBUG_MATRIX
+ if (data != 0x00) xprintf("I2C: %d\n", data);
+#endif
+ return data;
+ }
+ } else {
+ /* read from teensy
+ * bitmask is 0b0111001, but we want the lower four
+ * we'll return 1s for the top two, but that's harmless.
+ */
+ // So I need to confuckulate all this
+ //return ~(((PIND & DMASK) >> 1 | ((PINC & CMASK) >> 6) | (PIN)));
+ //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
+ return ~(
+ (((PINF & ROW4) >> 1)
+ | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
+ & 0xF);
+ }
+}
+
+// Row pin configuration
+static void unselect_rows(void)
+{
+ // no need to unselect on mcp23018, because the select step sets all
+ // the other row bits high, and it's not changing to a different
+ // direction
+ // Hi-Z(DDR:0, PORT:0) to unselect
+ DDRB &= ~(BMASK | TRKMASK);
+ PORTB &= ~(BMASK);
+ DDRC &= ~CMASK;
+ PORTC &= ~CMASK;
+ DDRD &= ~DMASK;
+ PORTD &= ~DMASK;
+
+ // Fix trashing of DDRB for TB
+ PORTB |= TRKMASK;
+}
+
+static void select_row(uint8_t row)
+{
+ if (row < 7) {
+ // select on mcp23018
+ if (mcp23018_status) { // do nothing on error
+ } else { // set active row low : 0 // set other rows hi-Z : 1
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOA, I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0xFF & ~(1<<row), I2C_TIMEOUT); if (mcp23018_status) goto out;
+ out:
+ i2c_stop();
+ }
+ } else {
+ // Output low(DDR:1, PORT:0) to select
+ switch (row) {
+ case 7:
+ DDRB |= COL7;
+ PORTB &= ~COL7;
+ break;
+ case 8:
+ DDRB |= COL8;
+ PORTB &= ~COL8;
+ break;
+ case 9:
+ DDRB |= COL9;
+ PORTB &= ~COL9;
+ break;
+ case 10:
+ DDRB |= COL10;
+ PORTB &= ~COL10;
+ break;
+ case 11:
+ DDRD |= COL11;
+ PORTD &= ~COL11;
+ break;
+ case 12:
+ DDRD |= COL12;
+ PORTD &= ~COL12;
+ break;
+ case 13:
+ DDRC |= COL13;
+ PORTC &= ~COL13;
+ break;
+ }
+ }
+}
+
+
+// Trackball Interrupts
+static void enableInterrupts(void) {
+ #ifdef BALLER
+ // Set interrupt mask
+ // Set port defs
+ DDRB &= ~TRKMASK;
+ PORTB |= TRKMASK;
+ DDRE &= ~TRKBTN;
+ PORTE |= TRKBTN;
+
+ // Interrupt shenanigans
+ //EIMSK |= (1 << PCIE0);
+ PCMSK0 |= TRKMASK;
+ PCICR |= (1 << PCIE0);
+ sei();
+ #endif
+
+ return;
+}
+#ifdef BALLER
+ISR (PCINT0_vect) {
+ // Don't get fancy, we're in a interrupt here
+ // PCINT reports a interrupt for a change on the bus
+ // We hand the button at scantime for debounce
+ volatile uint8_t pState = PINB & TRKMASK;
+ if ((pState & TRKUP) != (trkState & TRKUP)) tbUpCnt++;
+ if ((pState & TRKDN) != (trkState & TRKDN)) tbDnCnt++;
+ if ((pState & TRKLT) != (trkState & TRKLT)) tbLtCnt++;
+ if ((pState & TRKRT) != (trkState & TRKRT)) tbRtCnt++;
+ trkState = pState;
+
+}
+#endif
diff --git a/keyboards/gboards/gergo/readme.md b/keyboards/gboards/gergo/readme.md
new file mode 100644
index 0000000000..b2558e6715
--- /dev/null
+++ b/keyboards/gboards/gergo/readme.md
@@ -0,0 +1,26 @@
+# Gergo
+
+![Gergo](https://cdn.pbrd.co/images/HVglSWD.jpg)
+
+A compact 50% (14x4) Split Keyboard compatible with i2c modules and a trackball.
+
+[More info on qmk.fm](http://qmk.fm/gergo/)
+
+Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
+Hardware Supported: Gergo (Kit, Partial, Ready)
+Hardware Availability: [gboards.ca](http://gboards.ca)
+
+## Firmware building
+After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
+
+ make gboards/gergo:germ:dfu
+
+To just test your build with the default keymap
+
+ make gboards/gergo:germ
+
+Gadgets and options can be enabled/disabled in keyboards/gboards/gergo/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
+
+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).
+
+## Have an idea for a gadget? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/gergo/rules.mk b/keyboards/gboards/gergo/rules.mk
index 0f877e2d4b..0f877e2d4b 100644
--- a/keyboards/gergo/rules.mk
+++ b/keyboards/gboards/gergo/rules.mk
diff --git a/keyboards/gboards/gergoplex/matrix.c b/keyboards/gboards/gergoplex/matrix.c
index 716390241a..a075b85725 100644
--- a/keyboards/gboards/gergoplex/matrix.c
+++ b/keyboards/gboards/gergoplex/matrix.c
@@ -152,11 +152,6 @@ uint8_t matrix_scan(void) {
return 1;
}
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
- return true;
-}
-
inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
diff --git a/keyboards/gboards/readme.md b/keyboards/gboards/readme.md
index 743bacbcc1..384b568d89 100644
--- a/keyboards/gboards/readme.md
+++ b/keyboards/gboards/readme.md
@@ -22,11 +22,11 @@ multi-chords! You can browse the available combo lists in combos/
## Engine
This is the onboard chording engine for all sorts of fun shenanigans. Be aware that this currently is a bit of a QMK
-replacement focused on pure chording. Take a look at the configuration in keyboards/ginny for ideas, all these dicts
+replacement focused on pure chording. Take a look at the configuration in keyboards/gboards/ginny for ideas, all these dicts
are stored over in dicts/
## Installation
-You will need to add the following bits to your rules.mk, refer to keyboards/ginny for a working example
+You will need to add the following bits to your rules.mk, refer to keyboards/gboards/ginny for a working example
`VPATH += keyboards/gboards/`
And if you're using the chording engine, this as well.
@@ -35,5 +35,5 @@ And if you're using the chording engine, this as well.
For combos, add `#include "g/keymap_combos.h"` to keymap.c to compile your combos.def into your keymap
For the chording engine, add `#include "g/keymap_engine.h"` to keymap.c compile your dicts.def into your keymap. If you
-don't have a config_engine.h file for your keyboard, you will need to create it. (Once again, look at keyboards/ginny/
+don't have a config_engine.h file for your keyboard, you will need to create it. (Once again, look at keyboards/gboards/ginny/
for a example of how to do this.
diff --git a/keyboards/geminate60/readme.md b/keyboards/geminate60/readme.md
deleted file mode 100644
index 7fab7d7df6..0000000000
--- a/keyboards/geminate60/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Geminate60
-
-![Geminate60](https://www.hualigs.cn/image/600d9391f16d7.jpg)
-
-A 60% keyboard based on STM32F303.
-
-* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) ([weirdo-f.github.io](https://))
-* Hardware Supported: Geminate60
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make geminate60:default
-
-The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/georgi/matrix.c b/keyboards/georgi/matrix.c
deleted file mode 100644
index 438412102b..0000000000
--- a/keyboards/georgi/matrix.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
-
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "matrix.h"
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "action_layer.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "keymap_steno.h"
-#include QMK_KEYBOARD_H
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-// MCP Pin Defs
-#define RROW1 (1<<3)
-#define RROW2 (1<<2)
-#define RROW3 (1<<1)
-#define RROW4 (1<<0)
-#define COL0 (1<<0)
-#define COL1 (1<<1)
-#define COL2 (1<<2)
-#define COL3 (1<<3)
-#define COL4 (1<<4)
-#define COL5 (1<<5)
-#define COL6 (1<<6)
-
-// ATmega pin defs
-#define ROW1 (1<<6)
-#define ROW2 (1<<5)
-#define ROW3 (1<<4)
-#define ROW4 (1<<1)
-#define COL7 (1<<0)
-#define COL8 (1<<1)
-#define COL9 (1<<2)
-#define COL10 (1<<3)
-#define COL11 (1<<2)
-#define COL12 (1<<3)
-#define COL13 (1<<6)
-
-
-// bit masks
-#define BMASK (COL7 | COL8 | COL9 | COL10)
-#define CMASK (COL13)
-#define DMASK (COL11 | COL12)
-#define FMASK (ROW1 | ROW2 | ROW3 | ROW4)
-#define RROWMASK (RROW1 | RROW2 | RROW3 | RROW4)
-#define MCPMASK (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-/*
- * matrix state(1:on, 0:off)
- * contains the raw values without debounce filtering of the last read cycle.
- */
-static matrix_row_t raw_matrix[MATRIX_ROWS];
-
-// Debouncing: store for each key the number of scans until it's eligible to
-// change. When scanning the matrix, ignore any changes in keys that have
-// already changed in the last DEBOUNCE scans.
-static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
-
-static matrix_row_t read_cols(uint8_t row);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
-static uint8_t mcp23018_reset_loop;
-// static uint16_t mcp23018_reset_loop;
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-
-void matrix_init(void)
-{
- // initialize row and col
- mcp23018_status = init_mcp23018();
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- raw_matrix[i] = 0;
- for (uint8_t j=0; j < MATRIX_COLS; ++j) {
- debounce_matrix[i * MATRIX_COLS + j] = 0;
- }
- }
-
- matrix_init_quantum();
-}
-
-void matrix_power_up(void) {
- mcp23018_status = init_mcp23018();
-
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- }
-}
-
-// Returns a matrix_row_t whose bits are set if the corresponding key should be
-// eligible to change in this scan.
-matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
- matrix_row_t result = 0;
- matrix_row_t change = rawcols ^ raw_matrix[row];
- raw_matrix[row] = rawcols;
- for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
- if (debounce_matrix[row * MATRIX_COLS + i]) {
- --debounce_matrix[row * MATRIX_COLS + i];
- } else {
- result |= (1 << i);
- }
- if (change & (1 << i)) {
- debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
- }
- }
- return result;
-}
-
-matrix_row_t debounce_read_cols(uint8_t row) {
- // Read the row without debouncing filtering and store it for later usage.
- matrix_row_t cols = read_cols(row);
- // Get the Debounce mask.
- matrix_row_t mask = debounce_mask(cols, row);
- // debounce the row and return the result.
- return (cols & mask) | (matrix[row] & ~mask);;
-}
-
-uint8_t matrix_scan(void)
-{
- // Then the keyboard
- if (mcp23018_status) { // if there was an error
- if (++mcp23018_reset_loop == 0) {
- // if (++mcp23018_reset_loop >= 1300) {
- // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
- // this will be approx bit more frequent than once per second
- print("trying to reset mcp23018\n");
- mcp23018_status = init_mcp23018();
- if (mcp23018_status) {
- print("left side not responding\n");
- } else {
- print("left side attached\n");
- }
- }
- }
-
- for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
- select_row(i);
- // and select on left hand
- select_row(i + MATRIX_ROWS_PER_SIDE);
- // we don't need a 30us delay anymore, because selecting a
- // left-hand row requires more than 30us for i2c.
-
- // grab cols from left hand
- matrix[i] = debounce_read_cols(i);
- // grab cols from right hand
- matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
-
- unselect_rows();
- }
-
- matrix_scan_quantum();
-
-#ifdef DEBUG_MATRIX
- for (uint8_t c = 0; c < MATRIX_COLS; c++)
- for (uint8_t r = 0; r < MATRIX_ROWS; r++)
- if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
-#endif
-
- return 1;
-}
-
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-// Remember this means ROWS
-static void init_cols(void)
-{
- // init on mcp23018
- // not needed, already done as part of init_mcp23018()
-
- // Input with pull-up(DDR:0, PORT:1)
- DDRF &= ~FMASK;
- PORTF |= FMASK;
-}
-
-static matrix_row_t read_cols(uint8_t row)
-{
- if (row < 7) {
- if (mcp23018_status) { // if there was an error
- return 0;
- } else {
- uint8_t data = 0;
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
- data = ~((uint8_t)mcp23018_status);
- mcp23018_status = I2C_STATUS_SUCCESS;
- out:
- i2c_stop();
-
-#ifdef DEBUG_MATRIX
- if (data != 0x00) xprintf("I2C: %d\n", data);
-#endif
- return data;
- }
- } else {
- /* read from teensy
- * bitmask is 0b0111001, but we want the lower four
- * we'll return 1s for the top two, but that's harmless.
- */
- // So I need to confuckulate all this
- //return ~(((PIND & DMASK) >> 1 | ((PINC & CMASK) >> 6) | (PIN)));
- //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
- return ~(
- (((PINF & ROW4) >> 1)
- | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
- & 0xF);
- }
-}
-
-// Row pin configuration
-static void unselect_rows(void)
-{
- // no need to unselect on mcp23018, because the select step sets all
- // the other row bits high, and it's not changing to a different
- // direction
- // Hi-Z(DDR:0, PORT:0) to unselect
- DDRB &= ~(BMASK);
- PORTB &= ~(BMASK);
- DDRC &= ~CMASK;
- PORTC &= ~CMASK;
- DDRD &= ~DMASK;
- PORTD &= ~DMASK;
-}
-
-static void select_row(uint8_t row)
-{
- if (row < 7) {
- // select on mcp23018
- if (mcp23018_status) { // do nothing on error
- } else { // set active row low : 0 // set other rows hi-Z : 1
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- out:
- i2c_stop();
- }
- } else {
- // Output low(DDR:1, PORT:0) to select
- switch (row) {
- case 7:
- DDRB |= COL7;
- PORTB &= ~COL7;
- break;
- case 8:
- DDRB |= COL8;
- PORTB &= ~COL8;
- break;
- case 9:
- DDRB |= COL9;
- PORTB &= ~COL9;
- break;
- case 10:
- DDRB |= COL10;
- PORTB &= ~COL10;
- break;
- case 11:
- DDRD |= COL11;
- PORTD &= ~COL11;
- break;
- case 12:
- DDRD |= COL12;
- PORTD &= ~COL12;
- break;
- case 13:
- DDRC |= COL13;
- PORTC &= ~COL13;
- break;
- }
- }
-}
diff --git a/keyboards/georgi/readme.md b/keyboards/georgi/readme.md
deleted file mode 100644
index 247219b934..0000000000
--- a/keyboards/georgi/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Georgi
-
-![Georgi](https://i.imgur.com/3kUpRrj.jpg)
-
-A compact 20% (12x2) Split Keyboard for steno and QWERTY.
-
-[More info on qmk.fm](http://qmk.fm/georgi/)
-
-Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
-Hardware Supported: Georgi
-Hardware Availability: [gboards.ca](http://gboards.ca)
-
-## Firmware building
-After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
-
- make georgi:default:dfu
-
-To just test your build with the default keymap
-
- make georgi:default
-
-Build options can be enabled/disabled in keyboards/georgi/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
-
-## Documentation
-Is hosted over on [docs.gboards.ca](http://docs.gboards.ca/). Please take a look at the docs for customizing your firmware!
-
-# Space
-The stock firmware leaves 7K free for custom entries. For extra space disable mousekeys in your keymaps rules.mk (3K of space) and remove the Gaming layers (1k).
-
-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).
-
-## Have an idea? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/gergo/keymaps/abstractkb/readme.md b/keyboards/gergo/keymaps/abstractkb/readme.md
deleted file mode 100644
index 0b07136e89..0000000000
--- a/keyboards/gergo/keymaps/abstractkb/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# [Gergo! By g Heavy Industries](http://gboards.ca)
-
-![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
-
-This is my personal modification to the stock gergo keymap.
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/abstractkb/rules.mk b/keyboards/gergo/keymaps/abstractkb/rules.mk
deleted file mode 100644
index b87e599734..0000000000
--- a/keyboards/gergo/keymaps/abstractkb/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-#----------------------------------------------------------------------------
-# make gergo:germ:dfu
-# Make sure you have dfu-programmer installed!
-#----------------------------------------------------------------------------
-# Firmware options
-BALLER = no # Enable to ball out
-BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
-SCROLLSTEP = 1 # Lines to scroll with ball
-MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
-
-#Debug options
-VERBOSE = yes
-DEBUG_MATRIX_SCAN_RATE = no
-DEBUG_BALLER = no
-DEBUG_MATRIX = yes
-
-# A bunch of stuff that you shouldn't touch unless you
-# know what you're doing.
-#
-# No touchy, capiche?
-
-ifneq ($(strip $(BALLSTEP)),)
- OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
-endif
-ifneq ($(strip $(SCROLLSTEP)),)
- OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
-endif
-ifeq ($(strip $(BALLER)), yes)
- POINTING_DEVICE_ENABLE = yes
- OPT_DEFS += -DBALLER
-endif
-ifeq ($(strip $(DEBUG_BALLER)), yes)
- OPT_DEFS += -DDEBUG_BALLER
-endif
-ifeq ($(strip $(DEBUG_MATRIX)), yes)
- OPT_DEFS += -DDEBUG_MATRIX
-endif
diff --git a/keyboards/gergo/keymaps/colemak/readme.md b/keyboards/gergo/keymaps/colemak/readme.md
deleted file mode 100644
index 1c1cc7bdea..0000000000
--- a/keyboards/gergo/keymaps/colemak/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# [Gergo! By g Heavy Industries](http://gboards.ca)
-
-![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
-
-This is a [Colemak](https://colemak.com/) mapping for the Gergo,
-
-Unlike the default mapping, most symbols are at their original place on the number row to ease in the
-learning curve.
-
-You can view this layout over at
-[keyboad-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/f04d6a3b0cd3db91407c51f7ba36aeb3).
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/default/readme.md b/keyboards/gergo/keymaps/default/readme.md
deleted file mode 100644
index 471a20fbdf..0000000000
--- a/keyboards/gergo/keymaps/default/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# [Gergo! By g Heavy Industries](http://gboards.ca)
-
-![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
-
-This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/default/rules.mk b/keyboards/gergo/keymaps/default/rules.mk
deleted file mode 100644
index 351c525583..0000000000
--- a/keyboards/gergo/keymaps/default/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-#----------------------------------------------------------------------------
-# make gergo:germ:dfu
-# Make sure you have dfu-programmer installed!
-#----------------------------------------------------------------------------
-# Firmware options
-BALLER = no # Enable to ball out
-BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
-SCROLLSTEP = 1 # Lines to scroll with ball
-MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
-
-#Debug options
-VERBOSE = yes
-DEBUG_MATRIX_SCAN_RATE = no
-DEBUG_BALLER = no
-DEBUG_MATRIX = yes
-
-# A bunch of stuff that you shouldn't touch unless you
-# know what you're doing.
-#
-# No touchy, capiche?
-SRC += matrix.c i2c_master.c
-ifneq ($(strip $(BALLSTEP)),)
- OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
-endif
-ifneq ($(strip $(SCROLLSTEP)),)
- OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
-endif
-ifeq ($(strip $(BALLER)), yes)
- POINTING_DEVICE_ENABLE = yes
- OPT_DEFS += -DBALLER
-endif
-ifeq ($(strip $(DEBUG_BALLER)), yes)
- OPT_DEFS += -DDEBUG_BALLER
-endif
-ifeq ($(strip $(DEBUG_MATRIX)), yes)
- OPT_DEFS += -DDEBUG_MATRIX
-endif
diff --git a/keyboards/gergo/keymaps/germ/readme.md b/keyboards/gergo/keymaps/germ/readme.md
deleted file mode 100644
index 471a20fbdf..0000000000
--- a/keyboards/gergo/keymaps/germ/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# [Gergo! By g Heavy Industries](http://gboards.ca)
-
-![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
-
-This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/germ/rules.mk b/keyboards/gergo/keymaps/germ/rules.mk
deleted file mode 100644
index badfe7bb99..0000000000
--- a/keyboards/gergo/keymaps/germ/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-#----------------------------------------------------------------------------
-# make gergo:germ:dfu
-# Make sure you have dfu-programmer installed!
-#----------------------------------------------------------------------------
-# Firmware options
-BALLER = yes # Enable to ball out
-BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
-SCROLLSTEP = 1 # Lines to scroll with ball
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700), needed for baller
-
-#Debug options
-VERBOSE = yes
-DEBUG_MATRIX_SCAN_RATE = no
-DEBUG_BALLER = no
-DEBUG_MATRIX = no
-
-# A bunch of stuff that you shouldn't touch unless you
-# know what you're doing.
-#
-# No touchy, capiche?
-SRC += matrix.c i2c_master.c
-ifneq ($(strip $(BALLSTEP)),)
- OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
-endif
-ifneq ($(strip $(SCROLLSTEP)),)
- OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
-endif
-ifeq ($(strip $(BALLER)), yes)
- OPT_DEFS += -DBALLER
- POINTING_DEVICE_ENABLE = yes
-endif
-ifeq ($(strip $(DEBUG_BALLER)), yes)
- OPT_DEFS += -DDEBUG_BALLER
-endif
-ifeq ($(strip $(DEBUG_MATRIX)), yes)
- OPT_DEFS += -DDEBUG_MATRIX
-endif
diff --git a/keyboards/gergo/keymaps/gotham/rules.mk b/keyboards/gergo/keymaps/gotham/rules.mk
deleted file mode 100644
index 351c525583..0000000000
--- a/keyboards/gergo/keymaps/gotham/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-#----------------------------------------------------------------------------
-# make gergo:germ:dfu
-# Make sure you have dfu-programmer installed!
-#----------------------------------------------------------------------------
-# Firmware options
-BALLER = no # Enable to ball out
-BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
-SCROLLSTEP = 1 # Lines to scroll with ball
-MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
-
-#Debug options
-VERBOSE = yes
-DEBUG_MATRIX_SCAN_RATE = no
-DEBUG_BALLER = no
-DEBUG_MATRIX = yes
-
-# A bunch of stuff that you shouldn't touch unless you
-# know what you're doing.
-#
-# No touchy, capiche?
-SRC += matrix.c i2c_master.c
-ifneq ($(strip $(BALLSTEP)),)
- OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
-endif
-ifneq ($(strip $(SCROLLSTEP)),)
- OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
-endif
-ifeq ($(strip $(BALLER)), yes)
- POINTING_DEVICE_ENABLE = yes
- OPT_DEFS += -DBALLER
-endif
-ifeq ($(strip $(DEBUG_BALLER)), yes)
- OPT_DEFS += -DDEBUG_BALLER
-endif
-ifeq ($(strip $(DEBUG_MATRIX)), yes)
- OPT_DEFS += -DDEBUG_MATRIX
-endif
diff --git a/keyboards/gergo/keymaps/oled/config.h b/keyboards/gergo/keymaps/oled/config.h
deleted file mode 100644
index b186080681..0000000000
--- a/keyboards/gergo/keymaps/oled/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-#define IGNORE_MOD_TAP_INTERRUPT
-#define OLED_FONT_H "keyboards/gergo/keymaps/oled/glcdfont.c"
diff --git a/keyboards/gergo/keymaps/oled/readme.md b/keyboards/gergo/keymaps/oled/readme.md
deleted file mode 100644
index 471a20fbdf..0000000000
--- a/keyboards/gergo/keymaps/oled/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# [Gergo! By g Heavy Industries](http://gboards.ca)
-
-![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
-
-This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
-
-## Settings
-To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
-
-Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/oled/rules.mk b/keyboards/gergo/keymaps/oled/rules.mk
deleted file mode 100644
index 6318088988..0000000000
--- a/keyboards/gergo/keymaps/oled/rules.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-#----------------------------------------------------------------------------
-# make gergo:germ:dfu
-# Make sure you have dfu-programmer installed!
-#----------------------------------------------------------------------------
-# Firmware options
-BALLER = no # Enable to ball out
-BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
-SCROLLSTEP = 1 # Lines to scroll with ball
-MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
-OLED_ENABLE = yes
-OLED_DRIVER = SSD1306
-LOCAL_GLCDFONT = yes
-
-#Debug options
-VERBOSE = yes
-DEBUG_MATRIX_SCAN_RATE = no
-DEBUG_BALLER = no
-DEBUG_MATRIX = yes
-
-# A bunch of stuff that you shouldn't touch unless you
-# know what you're doing.
-#
-# No touchy, capiche?
-ifneq ($(strip $(BALLSTEP)),)
- OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
-endif
-ifneq ($(strip $(SCROLLSTEP)),)
- OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
-endif
-ifeq ($(strip $(BALLER)), yes)
- POINTING_DEVICE_ENABLE = yes
- OPT_DEFS += -DBALLER
-endif
-ifeq ($(strip $(DEBUG_BALLER)), yes)
- OPT_DEFS += -DDEBUG_BALLER
-endif
-ifeq ($(strip $(DEBUG_MATRIX)), yes)
- OPT_DEFS += -DDEBUG_MATRIX
-endif
diff --git a/keyboards/gergo/matrix.c b/keyboards/gergo/matrix.c
deleted file mode 100644
index 655e729356..0000000000
--- a/keyboards/gergo/matrix.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
-
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "matrix.h"
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "action_layer.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "debounce.h"
-#include QMK_KEYBOARD_H
-
-#ifdef BALLER
-#include <avr/interrupt.h>
-#include "pointing_device.h"
-#endif
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-// MCP Pin Defs
-#define RROW1 (1u<<3)
-#define RROW2 (1u<<2)
-#define RROW3 (1u<<1)
-#define RROW4 (1u<<0)
-#define COL0 (1u<<0)
-#define COL1 (1u<<1)
-#define COL2 (1u<<2)
-#define COL3 (1u<<3)
-#define COL4 (1u<<4)
-#define COL5 (1u<<5)
-#define COL6 (1u<<6)
-
-// ATmega pin defs
-#define ROW1 (1u<<6)
-#define ROW2 (1u<<5)
-#define ROW3 (1u<<4)
-#define ROW4 (1u<<1)
-#define COL7 (1u<<0)
-#define COL8 (1u<<1)
-#define COL9 (1u<<2)
-#define COL10 (1u<<3)
-#define COL11 (1u<<2)
-#define COL12 (1u<<3)
-#define COL13 (1u<<6)
-
-//Trackball pin defs
-#define TRKUP (1u<<4)
-#define TRKDN (1u<<5)
-#define TRKLT (1u<<6)
-#define TRKRT (1u<<7)
-#define TRKBTN (1u<<6)
-
-
-// Multiple for mouse moves
-#ifndef TRKSTEP
-#define TRKSTEP 20
-#endif
-
-// multiple for mouse scroll
-#ifndef SCROLLSTEP
-#define SCROLLSTEP 5
-#endif
-
-// bit masks
-#define BMASK (COL7 | COL8 | COL9 | COL10)
-#define CMASK (COL13)
-#define DMASK (COL11 | COL12)
-#define FMASK (ROW1 | ROW2 | ROW3 | ROW4)
-#define RROWMASK (RROW1 | RROW2 | RROW3 | RROW4)
-#define MCPMASK (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
-#define TRKMASK (TRKUP | TRKDN | TRKRT | TRKLT)
-
-// Trackball interrupts accumulate over here. Processed on scan
-// Stores prev state of mouse, high bits store direction
-uint8_t trkState = 0;
-uint8_t trkBtnState = 0;
-
-volatile uint8_t tbUpCnt = 0;
-volatile uint8_t tbDnCnt = 0;
-volatile uint8_t tbLtCnt = 0;
-volatile uint8_t tbRtCnt = 0;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-/*
- * matrix state(1:on, 0:off)
- * contains the raw values without debounce filtering of the last read cycle.
- */
-static matrix_row_t raw_matrix[MATRIX_ROWS];
-
-// Debouncing: store for each key the number of scans until it's eligible to
-// change. When scanning the matrix, ignore any changes in keys that have
-// already changed in the last DEBOUNCE scans.
-
-static matrix_row_t read_cols(uint8_t row);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-static void enableInterrupts(void);
-
-static uint8_t mcp23018_reset_loop;
-// static uint16_t mcp23018_reset_loop;
-
-__attribute__ ((weak)) void matrix_init_user(void) {}
-
-__attribute__ ((weak)) void matrix_scan_user(void) {}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
-
-inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
-
-
-void matrix_init(void) {
- // initialize row and col
- mcp23018_status = init_mcp23018();
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- raw_matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
- matrix_init_quantum();
-}
-
-void matrix_power_up(void) {
- mcp23018_status = init_mcp23018();
-
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- }
-}
-
-// Reads and stores a row, returning
-// whether a change occurred.
-static inline bool store_raw_matrix_row(uint8_t index) {
- matrix_row_t temp = read_cols(index);
- if (raw_matrix[index] != temp) {
- raw_matrix[index] = temp;
- return true;
- }
- return false;
-}
-
-
-
-uint8_t matrix_scan(void) {
- // TODO: Find what is trashing interrupts
- enableInterrupts();
-
- // First we handle the mouse inputs
-#ifdef BALLER
- uint8_t pBtn = PINE & TRKBTN;
-
- #ifdef DEBUG_BALLER
- // Compare to previous, mod report
- if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
- xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
- #endif
-
- // Modify the report
- report_mouse_t pRprt = pointing_device_get_report();
-
- // Scroll by default, move on layer
- if (layer_state == 0) {
- pRprt.h += tbLtCnt * SCROLLSTEP; tbLtCnt = 0;
- pRprt.h -= tbRtCnt * SCROLLSTEP; tbRtCnt = 0;
- pRprt.v -= tbUpCnt * SCROLLSTEP; tbUpCnt = 0;
- pRprt.v += tbDnCnt * SCROLLSTEP; tbDnCnt = 0;
- } else {
- pRprt.x -= tbLtCnt * TRKSTEP * (layer_state - 1); tbLtCnt = 0;
- pRprt.x += tbRtCnt * TRKSTEP * (layer_state - 1); tbRtCnt = 0;
- pRprt.y -= tbUpCnt * TRKSTEP * (layer_state - 1); tbUpCnt = 0;
- pRprt.y += tbDnCnt * TRKSTEP * (layer_state - 1); tbDnCnt = 0;
- }
-
-#ifdef DEBUG_BALLER
- if (pRprt.x != 0 || pRprt.y != 0)
- xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
-#endif
-
- if ((pBtn != trkBtnState) && ((pBtn >> 6) == 0)) pRprt.buttons |= MOUSE_BTN1;
- if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
-
- // Save state, push update
- if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
- pointing_device_set_report(pRprt);
-
- trkBtnState = pBtn;
-#endif
-
- // Then the keyboard
- if (mcp23018_status) { // if there was an error
- if (++mcp23018_reset_loop == 0) {
- // if (++mcp23018_reset_loop >= 1300) {
- // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
- // this will be approx bit more frequent than once per second
- print("trying to reset mcp23018\n");
- mcp23018_status = init_mcp23018();
- if (mcp23018_status) {
- print("left side not responding\n");
- } else {
- print("left side attached\n");
- }
- }
- }
-
- bool changed = false;
- for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
- // select rows from left and right hands
- uint8_t left_index = i;
- uint8_t right_index = i + MATRIX_ROWS_PER_SIDE;
- select_row(left_index);
- select_row(right_index);
-
- // we don't need a 30us delay anymore, because selecting a
- // left-hand row requires more than 30us for i2c.
-
- changed |= store_raw_matrix_row(left_index);
- changed |= store_raw_matrix_row(right_index);
-
- unselect_rows();
- }
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
- matrix_scan_quantum();
-
- enableInterrupts();
-
-#ifdef DEBUG_MATRIX
- for (uint8_t c = 0; c < MATRIX_COLS; c++)
- for (uint8_t r = 0; r < MATRIX_ROWS; r++)
- if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
-#endif
-
- return 1;
-}
-
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
- return true;
-}
-
-inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
-
-inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
-
-void matrix_print(void) {
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-// Remember this means ROWS
-static void init_cols(void) {
- // init on mcp23018
- // not needed, already done as part of init_mcp23018()
-
- // Input with pull-up(DDR:0, PORT:1)
- DDRF &= ~FMASK;
- PORTF |= FMASK;
-}
-
-static matrix_row_t read_cols(uint8_t row) {
- if (row < 7) {
- if (mcp23018_status) { // if there was an error
- return 0;
- } else {
- uint8_t data = 0;
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOB, I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_start(I2C_ADDR_READ, I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_read_nack(I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
- data = ~((uint8_t)mcp23018_status);
- mcp23018_status = I2C_STATUS_SUCCESS;
- out:
- i2c_stop();
-
-#ifdef DEBUG_MATRIX
- if (data != 0x00) xprintf("I2C: %d\n", data);
-#endif
- return data;
- }
- } else {
- /* read from teensy
- * bitmask is 0b0111001, but we want the lower four
- * we'll return 1s for the top two, but that's harmless.
- */
- // So I need to confuckulate all this
- //return ~(((PIND & DMASK) >> 1 | ((PINC & CMASK) >> 6) | (PIN)));
- //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
- return ~(
- (((PINF & ROW4) >> 1)
- | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
- & 0xF);
- }
-}
-
-// Row pin configuration
-static void unselect_rows(void)
-{
- // no need to unselect on mcp23018, because the select step sets all
- // the other row bits high, and it's not changing to a different
- // direction
- // Hi-Z(DDR:0, PORT:0) to unselect
- DDRB &= ~(BMASK | TRKMASK);
- PORTB &= ~(BMASK);
- DDRC &= ~CMASK;
- PORTC &= ~CMASK;
- DDRD &= ~DMASK;
- PORTD &= ~DMASK;
-
- // Fix trashing of DDRB for TB
- PORTB |= TRKMASK;
-}
-
-static void select_row(uint8_t row)
-{
- if (row < 7) {
- // select on mcp23018
- if (mcp23018_status) { // do nothing on error
- } else { // set active row low : 0 // set other rows hi-Z : 1
- mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(GPIOA, I2C_TIMEOUT); if (mcp23018_status) goto out;
- mcp23018_status = i2c_write(0xFF & ~(1<<row), I2C_TIMEOUT); if (mcp23018_status) goto out;
- out:
- i2c_stop();
- }
- } else {
- // Output low(DDR:1, PORT:0) to select
- switch (row) {
- case 7:
- DDRB |= COL7;
- PORTB &= ~COL7;
- break;
- case 8:
- DDRB |= COL8;
- PORTB &= ~COL8;
- break;
- case 9:
- DDRB |= COL9;
- PORTB &= ~COL9;
- break;
- case 10:
- DDRB |= COL10;
- PORTB &= ~COL10;
- break;
- case 11:
- DDRD |= COL11;
- PORTD &= ~COL11;
- break;
- case 12:
- DDRD |= COL12;
- PORTD &= ~COL12;
- break;
- case 13:
- DDRC |= COL13;
- PORTC &= ~COL13;
- break;
- }
- }
-}
-
-
-// Trackball Interrupts
-static void enableInterrupts(void) {
- #ifdef BALLER
- // Set interrupt mask
- // Set port defs
- DDRB &= ~TRKMASK;
- PORTB |= TRKMASK;
- DDRE &= ~TRKBTN;
- PORTE |= TRKBTN;
-
- // Interrupt shenanigans
- //EIMSK |= (1 << PCIE0);
- PCMSK0 |= TRKMASK;
- PCICR |= (1 << PCIE0);
- sei();
- #endif
-
- return;
-}
-#ifdef BALLER
-ISR (PCINT0_vect) {
- // Don't get fancy, we're in a interrupt here
- // PCINT reports a interrupt for a change on the bus
- // We hand the button at scantime for debounce
- volatile uint8_t pState = PINB & TRKMASK;
- if ((pState & TRKUP) != (trkState & TRKUP)) tbUpCnt++;
- if ((pState & TRKDN) != (trkState & TRKDN)) tbDnCnt++;
- if ((pState & TRKLT) != (trkState & TRKLT)) tbLtCnt++;
- if ((pState & TRKRT) != (trkState & TRKRT)) tbRtCnt++;
- trkState = pState;
-
-}
-#endif
diff --git a/keyboards/gergo/readme.md b/keyboards/gergo/readme.md
deleted file mode 100644
index 3436090b27..0000000000
--- a/keyboards/gergo/readme.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Gergo
-
-![Gergo](https://cdn.pbrd.co/images/HVglSWD.jpg)
-
-A compact 50% (14x4) Split Keyboard compatible with i2c modules and a trackball.
-
-[More info on qmk.fm](http://qmk.fm/gergo/)
-
-Keyboard Maintainer: [Jane Bernhardt](https://github.com/germ)
-Hardware Supported: Gergo (Kit, Partial, Ready)
-Hardware Availability: [gboards.ca](http://gboards.ca)
-
-## Firmware building
-After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
-
- make gergo:germ:dfu
-
-To just test your build with the default keymap
-
- make gergo:germ
-
-Gadgets and options can be enabled/disabled in keyboards/gergo/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
-
-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).
-
-## Have an idea for a gadget? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/getta25/getta25.h b/keyboards/getta25/getta25.h
deleted file mode 100644
index ff44820173..0000000000
--- a/keyboards/getta25/getta25.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_getta25_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/getta25/readme.md b/keyboards/getta25/readme.md
deleted file mode 100644
index 886e52a2ea..0000000000
--- a/keyboards/getta25/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# getta25
-
-![getta25](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20191127/20191127005608.png)
-
-This is 25 keys tenkeypad.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: Getta25 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1700006)
-
-Make example for this keyboard (after setting up your build environment):
-
- make getta25:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/getta25-rev2-build-guide)
diff --git a/keyboards/getta25/rules.mk b/keyboards/getta25/rules.mk
deleted file mode 100644
index 54265d2285..0000000000
--- a/keyboards/getta25/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-
-DEFAULT_FOLDER = getta25/rev1
diff --git a/keyboards/gingham/readme.md b/keyboards/gingham/readme.md
deleted file mode 100644
index 089af1cf5e..0000000000
--- a/keyboards/gingham/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Gingham
-
-![gingham](https://yiancar-designs.com/wp-content/uploads/2019/06/IMG_20190625_233619.jpg)
-
-A 60% keyboard with only through hole components.
-
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/gingham_pcb)
-Hardware Availability: https://yiancar-designs.com/, https://novelkeys.xyz, https://mechboards.co.uk/
-
-Make example for this keyboard (after setting up your build environment):
-
- make gingham:default
-
-Flashing example for this keyboard:
-
- make gingham:default:flash
-
-Bootloader:
-use usbasploader HSGW's my repository.
-https://github.com/hsgw/USBaspLoader/tree/plaid
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chimera_ergo/chimera_ergo.c b/keyboards/glenpickle/chimera_ergo/chimera_ergo.c
index 47653c2e4b..47653c2e4b 100644
--- a/keyboards/chimera_ergo/chimera_ergo.c
+++ b/keyboards/glenpickle/chimera_ergo/chimera_ergo.c
diff --git a/keyboards/chimera_ergo/chimera_ergo.h b/keyboards/glenpickle/chimera_ergo/chimera_ergo.h
index b8897ac14e..b8897ac14e 100644
--- a/keyboards/chimera_ergo/chimera_ergo.h
+++ b/keyboards/glenpickle/chimera_ergo/chimera_ergo.h
diff --git a/keyboards/glenpickle/chimera_ergo/config.h b/keyboards/glenpickle/chimera_ergo/config.h
new file mode 100644
index 0000000000..3c0cc5c162
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ergo/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Chimera Ergo
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/chimera_ergo/info.json b/keyboards/glenpickle/chimera_ergo/info.json
index 28a9689bae..28a9689bae 100644
--- a/keyboards/chimera_ergo/info.json
+++ b/keyboards/glenpickle/chimera_ergo/info.json
diff --git a/keyboards/chimera_ergo/keymaps/default/keymap.c b/keyboards/glenpickle/chimera_ergo/keymaps/default/keymap.c
index 51ab0e92cd..51ab0e92cd 100644
--- a/keyboards/chimera_ergo/keymaps/default/keymap.c
+++ b/keyboards/glenpickle/chimera_ergo/keymaps/default/keymap.c
diff --git a/keyboards/glenpickle/chimera_ergo/matrix.c b/keyboards/glenpickle/chimera_ergo/matrix.c
new file mode 100644
index 0000000000..603ad0f386
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ergo/matrix.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
+
+void matrix_init_custom(void) {
+ uart_init(1000000);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ uint32_t timeout = 0;
+ bool changed = false;
+
+ //the s character requests the RF slave to send the matrix
+ uart_write('s');
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[14] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 14; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while (!uart_available()) {
+ timeout++;
+ if (timeout > 10000) {
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0) {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 6;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
+ }
+ }
+
+ return changed;
+}
diff --git a/keyboards/glenpickle/chimera_ergo/readme.md b/keyboards/glenpickle/chimera_ergo/readme.md
new file mode 100644
index 0000000000..4ccd039ee0
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ergo/readme.md
@@ -0,0 +1,16 @@
+# Chimera Ergo
+
+![Chimera Ergo](https://imgur.com/AA6ycMQ.jpg)
+
+A split wireless 40% ergonomic keyboard
+
+Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
+Hardware Supported: Chimera Ergo PCB, WaveShare core nRF51822
+Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ergo/gerbers)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make glenpickle/chimera_ergo:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
diff --git a/keyboards/glenpickle/chimera_ergo/rules.mk b/keyboards/glenpickle/chimera_ergo/rules.mk
new file mode 100644
index 0000000000..8cb1736147
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ergo/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+CUSTOM_MATRIX = lite
+
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/chimera_ls/chimera_ls.c b/keyboards/glenpickle/chimera_ls/chimera_ls.c
index f88e9a4f12..f88e9a4f12 100644
--- a/keyboards/chimera_ls/chimera_ls.c
+++ b/keyboards/glenpickle/chimera_ls/chimera_ls.c
diff --git a/keyboards/chimera_ls/chimera_ls.h b/keyboards/glenpickle/chimera_ls/chimera_ls.h
index 7d67d573db..7d67d573db 100644
--- a/keyboards/chimera_ls/chimera_ls.h
+++ b/keyboards/glenpickle/chimera_ls/chimera_ls.h
diff --git a/keyboards/glenpickle/chimera_ls/config.h b/keyboards/glenpickle/chimera_ls/config.h
new file mode 100644
index 0000000000..ca92e1e2e4
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ls/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Chimera Lets Split
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/chimera_ls/info.json b/keyboards/glenpickle/chimera_ls/info.json
index b6585a5c28..b6585a5c28 100644
--- a/keyboards/chimera_ls/info.json
+++ b/keyboards/glenpickle/chimera_ls/info.json
diff --git a/keyboards/chimera_ls/keymaps/default/keymap.c b/keyboards/glenpickle/chimera_ls/keymaps/default/keymap.c
index 0affeef389..0affeef389 100644
--- a/keyboards/chimera_ls/keymaps/default/keymap.c
+++ b/keyboards/glenpickle/chimera_ls/keymaps/default/keymap.c
diff --git a/keyboards/glenpickle/chimera_ls/matrix.c b/keyboards/glenpickle/chimera_ls/matrix.c
new file mode 100644
index 0000000000..a92c3e8431
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ls/matrix.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
+
+void matrix_init_custom(void) {
+ uart_init(1000000);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ uint32_t timeout = 0;
+ bool changed = false;
+
+ //the s character requests the RF slave to send the matrix
+ uart_write('s');
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[11] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 11; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while (!uart_available()) {
+ timeout++;
+ if (timeout > 10000) {
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0) {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 5;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
+ }
+ }
+
+ return changed;
+}
diff --git a/keyboards/glenpickle/chimera_ls/readme.md b/keyboards/glenpickle/chimera_ls/readme.md
new file mode 100644
index 0000000000..bb882b66a8
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ls/readme.md
@@ -0,0 +1,15 @@
+# Chimera LS
+
+![Chimera LS](https://imgur.com/FOGlO4M.jpg)
+
+A wireless version of the Let's Split: a split 40% ortholinear keyboard.
+
+Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
+Hardware Supported: Chimera LS PCB, WaveShare core nRF51822
+Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ls/gerbers)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make glenpickle/chimera_ls:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/glenpickle/chimera_ls/rules.mk b/keyboards/glenpickle/chimera_ls/rules.mk
new file mode 100644
index 0000000000..b7f6db5aa5
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ls/rules.mk
@@ -0,0 +1,30 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+CUSTOM_MATRIX = lite
+
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
+
+LAYOUTS = ortho_4x12
+
+# Disable unsupported hardware
+RGBLIGHT_SUPPORTED = no
+AUDIO_SUPPORTED = no
+BACKLIGHT_SUPPORTED = no
diff --git a/keyboards/chimera_ortho/chimera_ortho.c b/keyboards/glenpickle/chimera_ortho/chimera_ortho.c
index 2cdc3d9331..2cdc3d9331 100644
--- a/keyboards/chimera_ortho/chimera_ortho.c
+++ b/keyboards/glenpickle/chimera_ortho/chimera_ortho.c
diff --git a/keyboards/chimera_ortho/chimera_ortho.h b/keyboards/glenpickle/chimera_ortho/chimera_ortho.h
index 03384c9b28..03384c9b28 100644
--- a/keyboards/chimera_ortho/chimera_ortho.h
+++ b/keyboards/glenpickle/chimera_ortho/chimera_ortho.h
diff --git a/keyboards/glenpickle/chimera_ortho/config.h b/keyboards/glenpickle/chimera_ortho/config.h
new file mode 100644
index 0000000000..3d86343a67
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Chimera Ortho
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 10
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/chimera_ortho/info.json b/keyboards/glenpickle/chimera_ortho/info.json
index 73e15c64f3..73e15c64f3 100644
--- a/keyboards/chimera_ortho/info.json
+++ b/keyboards/glenpickle/chimera_ortho/info.json
diff --git a/keyboards/chimera_ortho/keymaps/default/config.h b/keyboards/glenpickle/chimera_ortho/keymaps/default/config.h
index bdfd4db80f..bdfd4db80f 100644
--- a/keyboards/chimera_ortho/keymaps/default/config.h
+++ b/keyboards/glenpickle/chimera_ortho/keymaps/default/config.h
diff --git a/keyboards/chimera_ortho/keymaps/default/keymap.c b/keyboards/glenpickle/chimera_ortho/keymaps/default/keymap.c
index 6a676493dd..6a676493dd 100644
--- a/keyboards/chimera_ortho/keymaps/default/keymap.c
+++ b/keyboards/glenpickle/chimera_ortho/keymaps/default/keymap.c
diff --git a/keyboards/glenpickle/chimera_ortho/matrix.c b/keyboards/glenpickle/chimera_ortho/matrix.c
new file mode 100644
index 0000000000..a92c3e8431
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho/matrix.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
+
+void matrix_init_custom(void) {
+ uart_init(1000000);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ uint32_t timeout = 0;
+ bool changed = false;
+
+ //the s character requests the RF slave to send the matrix
+ uart_write('s');
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[11] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 11; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while (!uart_available()) {
+ timeout++;
+ if (timeout > 10000) {
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0) {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 5;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
+ }
+ }
+
+ return changed;
+}
diff --git a/keyboards/glenpickle/chimera_ortho/readme.md b/keyboards/glenpickle/chimera_ortho/readme.md
new file mode 100644
index 0000000000..bff001d3c9
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho/readme.md
@@ -0,0 +1,19 @@
+# Chimera Ortho
+
+![Chimera Ortho](https://imgur.com/pbdNsoP.jpg)
+
+A split wireless 40% ortholinear keyboard
+
+Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
+
+
+Hardware Supported: Chimera Ortho PCB, WaveShare core nRF51822
+
+Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ortho/gerbers)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make glenpickle/chimera_ortho:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
diff --git a/keyboards/glenpickle/chimera_ortho/rules.mk b/keyboards/glenpickle/chimera_ortho/rules.mk
new file mode 100644
index 0000000000..8cb1736147
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+CUSTOM_MATRIX = lite
+
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/chimera_ortho_plus/chimera_ortho_plus.c b/keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.c
index 6d87ed7053..6d87ed7053 100644
--- a/keyboards/chimera_ortho_plus/chimera_ortho_plus.c
+++ b/keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.c
diff --git a/keyboards/chimera_ortho_plus/chimera_ortho_plus.h b/keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.h
index f75dc61057..f75dc61057 100644
--- a/keyboards/chimera_ortho_plus/chimera_ortho_plus.h
+++ b/keyboards/glenpickle/chimera_ortho_plus/chimera_ortho_plus.h
diff --git a/keyboards/glenpickle/chimera_ortho_plus/config.h b/keyboards/glenpickle/chimera_ortho_plus/config.h
new file mode 100644
index 0000000000..ebffb85657
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho_plus/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xDE1D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Chimera Ortho Plus
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/chimera_ortho_plus/info.json b/keyboards/glenpickle/chimera_ortho_plus/info.json
index 29a2c2a634..29a2c2a634 100644
--- a/keyboards/chimera_ortho_plus/info.json
+++ b/keyboards/glenpickle/chimera_ortho_plus/info.json
diff --git a/keyboards/chimera_ortho_plus/keymaps/default/config.h b/keyboards/glenpickle/chimera_ortho_plus/keymaps/default/config.h
index bdfd4db80f..bdfd4db80f 100644
--- a/keyboards/chimera_ortho_plus/keymaps/default/config.h
+++ b/keyboards/glenpickle/chimera_ortho_plus/keymaps/default/config.h
diff --git a/keyboards/chimera_ortho_plus/keymaps/default/keymap.c b/keyboards/glenpickle/chimera_ortho_plus/keymaps/default/keymap.c
index 9b45037701..9b45037701 100644
--- a/keyboards/chimera_ortho_plus/keymaps/default/keymap.c
+++ b/keyboards/glenpickle/chimera_ortho_plus/keymaps/default/keymap.c
diff --git a/keyboards/glenpickle/chimera_ortho_plus/matrix.c b/keyboards/glenpickle/chimera_ortho_plus/matrix.c
new file mode 100644
index 0000000000..603ad0f386
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho_plus/matrix.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
+
+void matrix_init_custom(void) {
+ uart_init(1000000);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ uint32_t timeout = 0;
+ bool changed = false;
+
+ //the s character requests the RF slave to send the matrix
+ uart_write('s');
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[14] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 14; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while (!uart_available()) {
+ timeout++;
+ if (timeout > 10000) {
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0) {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 6;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
+ }
+ }
+
+ return changed;
+}
diff --git a/keyboards/glenpickle/chimera_ortho_plus/readme.md b/keyboards/glenpickle/chimera_ortho_plus/readme.md
new file mode 100644
index 0000000000..259e982832
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho_plus/readme.md
@@ -0,0 +1,15 @@
+# Chimera Ortho+
+
+![Chimera Ortho+](https://i.imgur.com/tuDaGdTl.jpg)
+
+A split wireless 50% ortholinear keyboard.
+
+* Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
+* Hardware Supported: Chimera Ortho+ PCB, WaveShare core nRF51822
+* Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ortho_plus/gerbers)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make glenpickle/chimera_ortho_plus:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/glenpickle/chimera_ortho_plus/rules.mk b/keyboards/glenpickle/chimera_ortho_plus/rules.mk
new file mode 100644
index 0000000000..0a8a31e7dd
--- /dev/null
+++ b/keyboards/glenpickle/chimera_ortho_plus/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+UNICODE_ENABLE = yes
+CUSTOM_MATRIX = lite
+
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c
new file mode 100644
index 0000000000..2361ab5660
--- /dev/null
+++ b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/keymap.c
@@ -0,0 +1,154 @@
+/* Copyright 2021 Cedrik Lussier @cedrikl
+.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "rgb_matrix_map.h"
+#include "cedrikl.h"
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
+// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
+// Tab Q W E R T Y U I O P [ ] \ PgUp
+// Caps A S D F G H J K L ; " Enter PgDn
+// Sh_L Z X C V B N M , . ? Sh_R Up End
+// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
+
+
+ // The FN key by default maps to a momentary toggle to layer 1 to provide access to the RESET key (to put the board into bootloader mode). Without
+ // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB
+ // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI
+ // if that's your preference.
+ //
+ // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and
+ // it'll be back to normal when you plug it back in.
+ //
+ // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
+ // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
+ // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ EEP_RST, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_MUTE,
+ KC_NLCK, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, KC_BSPC, KC_PSCR,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PSLS, KC_PAST, KC_BSLS, KC_PGUP,
+ KC_CAPS, RGB_VAD, RGB_TOG, RGB_VAI, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_PENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_PDOT, KC_SLSH, KC_RSFT, KC_UP, KC_INS,
+ KC_LCTL, KC_RGUI, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+// clang-format on
+
+#ifdef ENCODER_ENABLE
+ bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ return true;
+ }
+#endif // ENCODER_ENABLE
+
+
+#ifdef RGB_MATRIX_ENABLE
+//void set_layer_rgb(uint8_t led_min, uint8_t led_max, int layer) {
+// const ledmap *l = &(ledmaps[layer]);
+//
+//
+//
+// for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+// HSV hsv = {
+// .h = (*l)[i][0],
+// .s = (*l)[i][1],
+// .v = val,
+// };
+//
+// if (hsv.h || hsv.s) {
+// RGB rgb = hsv_to_rgb(hsv);
+// RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b);
+// }
+// }
+//}
+
+ // These shorthands are used below to set led colors on each matrix cycle
+ void loop_colorset(const uint8_t *indices, int array_size, const HSV target_color) {
+ HSV work_color = target_color;
+ work_color.v = rgb_matrix_get_val();
+
+ RGB final_color = hsv_to_rgb(work_color);
+
+ for (int i = 0; i < array_size; i++) {
+ rgb_matrix_set_color(indices[i], final_color.r, final_color.g, final_color.b); // Set color A here
+ }
+ }
+
+ // Capslock, Scroll lock and Numlock indicator on Left side lights.
+ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ loop_colorset(LED_REGION_A, (sizeof(LED_REGION_A) / sizeof(LED_REGION_A[0])), hsv_cl_blue);
+ loop_colorset(LED_REGION_B, (sizeof(LED_REGION_B) / sizeof(LED_REGION_B[0])), hsv_cl_purple);
+ loop_colorset(LED_REGION_L_SIDE, (sizeof(LED_REGION_L_SIDE) / sizeof(LED_REGION_L_SIDE[0])), hsv_cl_purple);
+ loop_colorset(LED_REGION_R_SIDE, (sizeof(LED_REGION_R_SIDE) / sizeof(LED_REGION_R_SIDE[0])), hsv_cl_purple);
+
+ switch(get_highest_layer(layer_state)){ // special handling per layer
+ case 1: //layer 1
+ //rgb_matrix_set_color_all(RGB_AZURE);
+ loop_colorset(LED_REGION_NUMPAD, (sizeof(LED_REGION_NUMPAD) / sizeof(LED_REGION_NUMPAD[0])), hsv_cl_numpad);
+ loop_colorset(LED_REGION_OTHER, (sizeof(LED_REGION_OTHER) / sizeof(LED_REGION_OTHER[0])), hsv_cl_mods);
+ break;
+ default: //layer 0
+ //
+ break;
+ break;
+ }
+
+ HSV bad_hsv = hsv_cl_bad;
+ bad_hsv.v = rgb_matrix_get_val();
+ RGB bad_rgb = hsv_to_rgb(bad_hsv);
+ led_t led_state = host_keyboard_led_state();
+
+ if (!led_state.num_lock) { // on if NUM lock is OFF
+ rgb_matrix_set_color(LED_R1, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R2, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R3, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R4, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R5, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R6, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R7, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_R8, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ }
+ if (led_state.caps_lock) {
+ rgb_matrix_set_color(LED_L1, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L2, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L3, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L4, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L5, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L6, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L7, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ rgb_matrix_set_color(LED_L8, bad_rgb.r, bad_rgb.g, bad_rgb.b);
+ loop_colorset(LED_REGION_CAPS, (sizeof(LED_REGION_CAPS) / sizeof(LED_REGION_CAPS[0])), hsv_cl_bad);
+ }
+ }
+#endif
diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h
new file mode 100644
index 0000000000..484f64b74c
--- /dev/null
+++ b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rgb_matrix_map.h
@@ -0,0 +1,185 @@
+/* Copyright 2021 Cedrik Lussier @cedrikl
+.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef RGB_MATRIX_ENABLE
+
+ // Custom RGB Colours
+ const HSV hsv_cl_blue = {150, 255, 255};
+ const HSV hsv_cl_purple = {188, 255, 255};
+ const HSV hsv_cl_numpad = {85, 255, 255};
+ const HSV hsv_cl_mods = {42, 255, 255};
+ const HSV hsv_cl_bad = {0, 255, 255};
+
+ // RGB LED locations
+ enum led_location_map {
+ LED_ESC, // 0, ESC, k13
+ LED_GRV, // 1, ~, k16
+ LED_TAB, // 2, Tab, k11
+ LED_CAPS, // 3, Caps, k21
+ LED_LSFT, // 4, Sh_L, k00
+ LED_LCTL, // 5, Ct_L, k06
+ LED_F1, // 6, F1, k26
+ LED_1, // 7, 1, k17
+ LED_Q, // 8, Q, k10
+ LED_A, // 9, A, k12
+ LED_Z, // 10, Z, k14
+ LED_LWIN, // 11, Win_L, k90
+ LED_F2, // 12, F2, k36
+ LED_2, // 13, 2, k27
+ LED_W, // 14, W, k20
+ LED_S, // 15, S, k22
+ LED_X, // 16, X, k24
+ LED_LALT, // 17, Alt_L, k93
+ LED_F3, // 18, F3, k31
+ LED_3, // 19, 3, k37
+ LED_E, // 20, E, k30
+ LED_D, // 21, D, k32
+ LED_C, // 22, C, k34
+ LED_F4, // 23, F4, k33
+ LED_4, // 24, 4, k47
+ LED_R, // 25, R, k40
+ LED_F, // 26, F, k42
+ LED_V, // 27, V, k44
+ LED_F5, // 28, F5, k07
+ LED_5, // 29, 5, k46
+ LED_T, // 30, T, k41
+ LED_G, // 31, G, k43
+ LED_B, // 32, B, k45
+ LED_SPC, // 33, SPACE, k94
+ LED_F6, // 34, F6, k63
+ LED_6, // 35, 6, k56
+ LED_Y, // 36, Y, k51
+ LED_H, // 37, H, k53
+ LED_N, // 38, N, k55
+ LED_F7, // 39, F7, k71
+ LED_7, // 40, 7, k57
+ LED_U, // 41, U, k50
+ LED_J, // 42, J, k52
+ LED_M, // 43, M, k54
+ LED_F8, // 44, F8, k76
+ LED_8, // 45, 8, k67
+ LED_I, // 46, I, k60
+ LED_K, // 47, K, k62
+ LED_COMM, // 48, ,, k64
+ LED_RALT, // 49, Alt_R, k95
+ LED_F9, // 50, F9, ka6
+ LED_9, // 51, 9, k77
+ LED_O, // 52, O, k70
+ LED_L, // 53, L, k72
+ LED_DOT, // 54, ., k74
+ LED_FN, // 55, FN, k92
+ LED_F10, // 56, F10, ka7
+ LED_0, // 57, 0, k87
+ LED_P, // 58, P, k80
+ LED_SCLN, // 59, ;, k82
+ LED_SLSH, // 60, ?, k85
+ LED_F11, // 61, F11, ka3
+ LED_MINS, // 62, -, k86
+ LED_LBRC, // 63, [, k81
+ LED_QUOT, // 64, ", k83
+ LED_RCTL, // 65, Ct_R, k04
+ LED_F12, // 66, F12, ka5
+ LED_L1, // 67, LED, l01
+ LED_R1, // 68, LED, l11
+ LED_DEL, // 69, Prt, k97 -- remapped to DEL
+ LED_L2, // 70, LED, l02
+ LED_R2, // 71, LED, l12
+ LED_HOME, // 72, Del, k65
+ LED_L3, // 73, LED, l03
+ LED_R3, // 74, LED, l13
+ LED_PGUP, // 75, PgUp, k15
+ LED_L4, // 76, LED, l04
+ LED_R4, // 77, LED, l14
+ LED_EQL, // 78, =, k66
+ LED_RGHT, // 79, Right, k05
+ LED_L5, // 80, LED, l05
+ LED_R5, // 81, LED, l15
+ LED_END, // 82, End, k75
+ LED_L6, // 83, LED, l06
+ LED_R6, // 84, LED, l16
+ LED_BSPC, // 85, BSpc, ka1
+ LED_PGDN, // 86, PgDn, k25
+ LED_L7, // 87, LED, l07
+ LED_R7, // 88, LED, l17
+ LED_RBRC, // 89, ], k61
+ LED_RSFT, // 90, Sh_R, k91
+ LED_L8, // 91, LED, l08
+ LED_R8, // 92, LED, l18
+ LED_BSLS, // 93, \, ka2
+ LED_UP, // 94, Up, k35
+ LED_LEFT, // 95, Left, k03
+ LED_ENT, // 96, Enter, ka4
+ LED_DOWN // 97, Down, k73
+ };
+
+const uint8_t LED_REGION_L_SIDE[] = {LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7,LED_L8};
+const uint8_t LED_REGION_R_SIDE[] = {LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7,LED_R8};
+
+ //const uint8_t LED_MATRIX[] = {
+ // LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL,
+ // LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME,
+ // LED_TAB, LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP,
+ // LED_CAPS, LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN,
+ // LED_LSFT, LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT, LED_SLSH, LED_RSFT, LED_UP, LED_END,
+ // LED_LCTL, LED_LWIN, LED_LALT, LED_SPC, LED_RALT, LED_FN, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT
+ //};
+
+ const uint8_t LED_REGION_A[] = {
+ LED_ESC, LED_F9, LED_F10, LED_F11, LED_F12, LED_DEL,
+ LED_GRV, LED_1, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_HOME,
+ LED_TAB, LED_Q, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP,
+ LED_CAPS, LED_A, LED_SCLN, LED_QUOT, LED_ENT, LED_PGDN,
+ LED_LSFT, LED_Z, LED_SLSH, LED_RSFT, LED_UP, LED_END,
+ LED_LCTL, LED_LWIN, LED_LALT, LED_RCTL, LED_LEFT, LED_DOWN, LED_RGHT
+ };
+ const uint8_t LED_REGION_B[] = {
+ LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8,
+ LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9,
+ LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O,
+ LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L,
+ LED_X, LED_C, LED_V, LED_B, LED_N, LED_M, LED_COMM, LED_DOT,
+ LED_SPC, LED_RALT, LED_FN
+ };
+
+ const uint8_t LED_REGION_NUMPAD[] = {
+
+ LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL,
+ LED_LBRC, LED_RBRC,
+ LED_ENT,
+ LED_DOT
+
+ };
+
+ const uint8_t LED_REGION_OTHER[] = {
+ LED_ESC, LED_DEL,
+ LED_HOME,
+
+ LED_A, LED_S, LED_D,
+ LED_END,
+ LED_LWIN
+ };
+
+ const uint8_t LED_REGION_CAPS[] = {
+
+ LED_GRV, LED_1,
+ LED_TAB, LED_Q,
+ LED_CAPS, LED_A,
+ LED_LSFT,
+ LED_LCTL
+ };
+
+#endif
diff --git a/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk
new file mode 100644
index 0000000000..4b7ed8bf0b
--- /dev/null
+++ b/keyboards/gmmk/pro/ansi/keymaps/cedrikl/rules.mk
@@ -0,0 +1,2 @@
+IDLE_TIMEOUT_ENABLE = yes
+STARTUP_NUMLOCK_ON = yes
diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/config.h b/keyboards/gmmk/pro/iso/keymaps/vitoni/config.h
new file mode 100644
index 0000000000..fd8f1d6859
--- /dev/null
+++ b/keyboards/gmmk/pro/iso/keymaps/vitoni/config.h
@@ -0,0 +1,20 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#if defined(RGB_MATRIX_ENABLE)
+ #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+ // number of milliseconds to wait until turning off RGB automatically
+ #define RGB_DISABLE_TIMEOUT 300000 // 300 seconds / 5 min
+ // start fading out before getting disabled
+ // fading out is timed (depending on the rgb_matrix_config.speed) to have finished before reaching RGB_DISABLE_TIMEOUT
+ #define RGB_DISABLE_WITH_FADE_OUT
+ #define RGB_DISABLE_WHEN_USB_SUSPENDED
+ // number of milliseconds to wait until activating RGB idle effects
+ #define RGB_IDLE_TIMEOUT 4500 // 4.5 seconds
+ // activate breathe effect when idle
+ #define RGB_IDLE_BREATHE
+ // fade in when we have been suspended
+ #define RGB_FADE_IN
+#endif
diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c b/keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c
new file mode 100644
index 0000000000..d5b64c153a
--- /dev/null
+++ b/keyboards/gmmk/pro/iso/keymaps/vitoni/keymap.c
@@ -0,0 +1,148 @@
+// Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>,
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#include "vitoni.h"
+
+enum layer_names {
+ _BASE,
+ _MOV,
+ _RGB
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute)
+// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del
+// Tab Q W E R T Y U I O P [ ] PgUp
+// Caps A S D F G H J K L ; " # Enter PgDn
+// Sh_L / Z X C V B N M , . ? Sh_R Up End
+// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right
+
+
+ //
+ // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO).
+ // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience.
+ // Press CAPS+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
+ MO(_MOV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TG(_RGB),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_MOV] = LAYOUT(
+ RESET, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [_RGB] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPI,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_SPD,
+ _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI
+ ),
+
+};
+// clang-format on
+
+#if defined(ENCODER_ENABLE)
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ switch (get_highest_layer(layer_state)) {
+ case _MOV:
+ if (clockwise) {
+ tap_code16(C(KC_TAB));
+ } else {
+ tap_code16(S(C(KC_TAB)));
+ }
+ break;
+#if defined(RGB_MATRIX_ENABLE)
+ case _RGB:
+ if (clockwise) {
+ rgb_matrix_increase_val_noeeprom();
+ } else {
+ rgb_matrix_decrease_val_noeeprom();
+ }
+ break;
+#endif // RGB_MATRIX_ENABLE
+ default:
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ break;
+ }
+ return true;
+}
+#endif // ENCODER_ENABLE
+
+#if defined(RGB_MATRIX_ENABLE)
+/*
+* Set up default RGB color.
+*/
+void rgb_matrix_set_default_color(void) {
+ rgb_matrix_sethsv_noeeprom_user(HSV_CHARTREUSE);
+}
+
+/*
+* Set up RGB defaults.
+*/
+void rgb_matrix_configure_default_settings(void) {
+ rgb_matrix_set_default_color();
+}
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_configure_default_settings();
+}
+
+/*
+* Use RGB underglow to indicate specific layers.
+*/
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _MOV:
+ rgb_matrix_sethsv_noeeprom_user(HSV_SPRINGGREEN);
+ break;
+ case _RGB:
+ rgb_matrix_sethsv_noeeprom_user(HSV_GREEN);
+ break;
+ default: // for any other layer
+ rgb_matrix_set_default_color();
+ break;
+ }
+ return state;
+}
+
+void matrix_scan_user(void) {
+ matrix_scan_user_rgb();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user_rgb(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case RESET: // when activating RESET mode for flashing
+ if (record->event.pressed) {
+ rgb_matrix_set_color_all(63, 0, 0);
+ rgb_matrix_driver.flush();
+ }
+ return true;
+ }
+ return true; // Process all other keycodes normally
+}
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc b/keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc
new file mode 100644
index 0000000000..38a74a568b
--- /dev/null
+++ b/keyboards/gmmk/pro/iso/keymaps/vitoni/readme.adoc
@@ -0,0 +1,104 @@
+= ViToni's keymap for GMMK Pro ISO
+
+== Layout
+Based on the stock layout but making use of CAPS as FN similar to laptop keyboards.
+This frees up the left row for other uses (although not remapped yet).
+Since both Delete and Insert are used for coding they are part of the CAPS layer as well.
+
+The differences are as follows:
+
+=== Layer 0 (`_BASE`)
+Mostly stock + CAPS goes to layer `_MOV`.
+FN toggles the layer `_RGB`.
+
+=== Layer 1 (`_MOV`), accessed by pressing `CAPS` on layer `_BASE`
+[%header]
+|===
+| Key / Action | Mapped to
+| ESC | _RESET_
+| F1 | KC_MYCM
+| F2 | KC_WHOM
+| F3 | KC_CALC
+| F4 | KC_MSEL
+| F5 | KC_MPRV
+| F6 | KC_MPLY
+| F7 | KC_MSTP
+| F8 | KC_MNXT
+| F9 | KC_MUTE
+| F10 | KC_VOLD
+| F11 | KC_VOLU
+| N | NK_TOGG
+| Delete | Insert
+| Left | Home
+| Right | End
+| Up | PgUp
+| Down | PgDn
+|===
+
+=== Layer 2 (`_RGB`), accessed by pressing `FN` on layer `_BASE`
+Revamped the stock FN layer to focus on RGB only.
+
+[%header]
+|===
+| Key / Action | Mapped to
+| Knob clockwise | Value/Brightness up
+| Knob anti-clockwise | Value/Brightness down
+| Backspace | _RESET_
+| Enter | RGB_TOG
+| Del | RGB_MOD
+| PgUp | RGB_RMOD
+| PgDn | RGB_SPI
+| End | RGB_SPD
+| Left | RGB_HUD
+| Right | RGB_HUI
+| Up | RGB_SAI
+| Down | RGB_SAD
+|===
+
+No other changes have been made.
+
+== RGB light
+
+The code customizing RGB light usage is decribed here:
+
+* link:../../../../../../users/vitoni/readme.adoc[/users/vitoni/readme.adoc]
+
+When using `RGB_DISABLE_TIMEOUT` addtional options are available:
+
+* `RGB_FADE_IN` makes the RGB lights fade in instead of setting the value/brightness to 100% (implicitly due to HSV including the brightness) when resuming after RGB lights have been turned off.
+Fade in occurs when the keyboard is initialized and when the RGB brightness has been changed (e.g. suspending, fade out, etc.).
+* `RGB_DISABLE_WITH_FADE_OUT` activates fade out before the keyboard is disabled by `RGB_DISABLE_TIMEOUT`.
+
+Parameters used to define the behavior are:
+[%header]
+|===
+|Key | Default | Description
+
+| RGB_MATRIX_MAXIMUM_BRIGHTNESS
+| 200 (&lt;= UNIT8_MAX)
+| Maximum assumed value for brightness.
+Used to calculate lead time for fade out before suspend timeout.
+
+|===
+
+`RGB_IDLE_TIMEOUT` enables fading out after being idle for the defined time and allows
+* `RGB_IDLE_BREATHE` also activates a brethe effect while idling.
+
+[%header]
+|===
+|Key | Default | Description
+
+|RGB_IDLE_TIMEOUT
+|4500
+|Time in milliseconds without activity before considered to be idle.
+
+|RGB_IDLE_MINIMUM_BRIGHTNESS
+|`RGB_MATRIX_MAXIMUM_BRIGHTNESS` / 5
+|Brightness value RGB is dimmed to when starting to idle. +
+When breathing used as the lower bound of the brightness value.
+
+|RGB_IDLE_MAXIMUM_BRIGHTNESS
+|`RGB_MATRIX_MAXIMUM_BRIGHTNESS` * 2/5
+|Upper bound of brightness value of the RGB light while breathing.
+
+|===
diff --git a/keyboards/gurindam/readme.md b/keyboards/gurindam/readme.md
deleted file mode 100644
index 0f6ae158b0..0000000000
--- a/keyboards/gurindam/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# gurindam
-
-![Gurindam](https://raw.githubusercontent.com/ibnuda/Gurindam/master-of-puppets/imgs/gurindam-finished.jpg)
-
-A keyboard inspired by Arisu which in turn by Lyn's EM7 and TGR Alice.
-
-* Keyboard Maintainer: [Ibnu D. Aji](https://github.com/ibnuda)
-* Hardware Supported: Promicro
-* Hardware Availability: [PCB & Stacked Acrylic Case](https://github.com/ibnuda/gurindam) & private group-buy.
-
-Make example for this keyboard (after setting up your build environment):
-
- make gurindam: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).
-
-## Bootloader
-
-Enter the bootloader in 2 ways:
-
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead.
-* **Keycode in layout**: Hold the mod key (lowest key on the right island) and then tap `R`.
-
diff --git a/keyboards/halberd/readme.md b/keyboards/halberd/readme.md
deleted file mode 100644
index 7fa0388fda..0000000000
--- a/keyboards/halberd/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Halberd
-
-![Halberd](https://i.imgur.com/QabQNPQ.jpg)
-
-40% keyboard.
-
-Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
-Hardware Supported: Halberd PCB, ATMEGA32U4
-Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
-
-Make example for this keyboard (after setting up your build environment):
-
- make halberd:default:dfu
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/42/rules.mk b/keyboards/handwired/42/rules.mk
index 5742e84bf5..655ce00bef 100644
--- a/keyboards/handwired/42/rules.mk
+++ b/keyboards/handwired/42/rules.mk
@@ -21,4 +21,4 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/handwired/bdn9_ble/rules.mk b/keyboards/handwired/bdn9_ble/rules.mk
index e5abbcfb88..a3082cf364 100644
--- a/keyboards/handwired/bdn9_ble/rules.mk
+++ b/keyboards/handwired/bdn9_ble/rules.mk
@@ -21,4 +21,4 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = no
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/handwired/carpolly/rules.mk b/keyboards/handwired/carpolly/rules.mk
index a7f3367d86..0cc90c1160 100644
--- a/keyboards/handwired/carpolly/rules.mk
+++ b/keyboards/handwired/carpolly/rules.mk
@@ -15,7 +15,6 @@ COMMAND_ENABLE = yes # 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
-BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
# generated by KBFirmware JSON to QMK Parser
diff --git a/keyboards/handwired/croxsplit44/rules.mk b/keyboards/handwired/croxsplit44/rules.mk
index 0b2170c456..87f77b103a 100644
--- a/keyboards/handwired/croxsplit44/rules.mk
+++ b/keyboards/handwired/croxsplit44/rules.mk
@@ -12,10 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output \ No newline at end of file
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c
index a21cd08e14..a70e8c5aca 100644
--- a/keyboards/handwired/dactyl/matrix.c
+++ b/keyboards/handwired/dactyl/matrix.c
@@ -281,14 +281,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk
index 6d2e27cb41..5ad63b02b7 100644
--- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk
@@ -1,3 +1,3 @@
KEY_LOCK_ENABLE = yes
CONSOLE_ENABLE = no
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
diff --git a/keyboards/handwired/dygma/raise/rules.mk b/keyboards/handwired/dygma/raise/rules.mk
index 0fd9955715..a0120c8159 100644
--- a/keyboards/handwired/dygma/raise/rules.mk
+++ b/keyboards/handwired/dygma/raise/rules.mk
@@ -12,7 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = no # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # USB Nkey Rollover
+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
diff --git a/keyboards/handwired/frenchdev/matrix.c b/keyboards/handwired/frenchdev/matrix.c
index 5ab254a6f9..a043f78538 100644
--- a/keyboards/handwired/frenchdev/matrix.c
+++ b/keyboards/handwired/frenchdev/matrix.c
@@ -174,12 +174,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/handwired/fruity60/rules.mk b/keyboards/handwired/fruity60/rules.mk
index 74628e3e6f..c84f68f0bf 100644
--- a/keyboards/handwired/fruity60/rules.mk
+++ b/keyboards/handwired/fruity60/rules.mk
@@ -20,6 +20,6 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
LAYOUTS = 60_tsangan_hhkb
diff --git a/keyboards/handwired/hillside/0_1/info.json b/keyboards/handwired/hillside/0_1/info.json
index 4505bf3e35..8c00f70366 100644
--- a/keyboards/handwired/hillside/0_1/info.json
+++ b/keyboards/handwired/hillside/0_1/info.json
@@ -1,4 +1,14 @@
{
+ "manufacturer": "mmccoyd",
+ "maintainer": "mmccoyd",
+
+ "keyboard_name": "Hillside",
+ "url": "http://github.com/mmccoyd/hillside/",
+
+ "tags": ["split", "column stagger", "choc v1", "choc spaced" ],
+
+ "processor": "atmega32u4",
+
"matrix_pins": {
"rows": ["D7", "E6", "B4", "B5"],
"cols": ["F6", "F7", "B1", "B3", "B2", "B6"]
@@ -9,5 +19,91 @@
"vid": "0xFEED",
"pid": "0x67C0",
"device_ver": "0x0001"
+ },
+
+ "features": {
+ "encoder": true,
+ "extrakey": true,
+ "rgblight": true
+ },
+ "split": {
+ "soft_serial_pin": "D2",
+ "main": "left"
+ },
+
+ "rgblight": {
+ "led_count": 5,
+ "pin": "D3",
+ "split": true,
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+
+ {"label": "Tab", "x": 0, "y": 0.93},
+ {"label": "Q", "x": 1, "y": 0.93},
+ {"label": "W", "x": 2, "y": 0.31},
+ {"label": "E", "x": 3, "y": 0},
+ {"label": "R", "x": 4, "y": 0.28},
+ {"label": "T", "x": 5, "y": 0.42},
+
+ {"label": "Y", "x": 9.5, "y": 0.42},
+ {"label": "U", "x": 10.5, "y": 0.28},
+ {"label": "I", "x": 11.5, "y": 0},
+ {"label": "O", "x": 12.5, "y": 0.31},
+ {"label": "P", "x": 13.5, "y": 0.93},
+ {"label": "Backspace", "x": 14.5, "y": 0.93},
+
+
+ {"label": "Ctrl", "x": 0, "y": 1.93},
+ {"label": "A", "x": 1, "y": 1.93},
+ {"label": "S", "x": 2, "y": 1.31},
+ {"label": "D", "x": 3, "y": 1},
+ {"label": "F", "x": 4, "y": 1.28},
+ {"label": "G", "x": 5, "y": 1.42},
+
+ {"label": "H", "x": 9.5, "y": 1.42},
+ {"label": "J", "x": 10.5, "y": 1.28},
+ {"label": "K", "x": 11.5, "y": 1},
+ {"label": "L", "x": 12.5, "y": 1.31},
+ {"label": ";", "x": 13.5, "y": 1.93},
+ {"label": "'", "x": 14.5, "y": 1.93},
+
+
+ {"label": "Shift", "x": 0, "y": 2.93},
+ {"label": "Z", "x": 1, "y": 2.93},
+ {"label": "X", "x": 2, "y": 2.31},
+ {"label": "C", "x": 3, "y": 2},
+ {"label": "V", "x": 4, "y": 2.28},
+ {"label": "B", "x": 5, "y": 2.42},
+ {"label": "`", "x": 6, "y": 2.78},
+
+ {"label": "Esc", "x": 8.5, "y": 2.78},
+ {"label": "N", "x": 9.5, "y": 2.42},
+ {"label": "M", "x": 10.5, "y": 2.28},
+ {"label": ",", "x": 11.5, "y": 2},
+ {"label": ".", "x": 12.5, "y": 2.31},
+ {"label": "/", "x": 13.5, "y": 2.93},
+ {"label": "Shift", "x": 14.5, "y": 2.93},
+
+
+ {"label": "Enter", "x": 2, "y": 3.31},
+ {"label": "Gui", "x": 3.5, "y": 3.28},
+ {"label": "Alt", "x": 4.5, "y": 3.42},
+ {"label": "Num", "x": 5.5, "y": 3.78},
+ {"label": "Nav", "x": 6.5, "y": 4.14},
+
+
+ {"label": "Sym", "x": 8, "y": 4.14},
+ {"label": "Space", "x": 9, "y": 3.78},
+ {"label": "Alt", "x": 10, "y": 3.42},
+ {"label": "Gui", "x": 11, "y": 3.28},
+ {"label": "App", "x": 12.5, "y": 3.31}
+ ]
+ }
}
}
diff --git a/keyboards/handwired/hillside/0_1/keymaps/default/keymap.json b/keyboards/handwired/hillside/0_1/keymaps/default/keymap.json
new file mode 100644
index 0000000000..c5837a16fb
--- /dev/null
+++ b/keyboards/handwired/hillside/0_1/keymaps/default/keymap.json
@@ -0,0 +1,101 @@
+{ "version": 1,
+ "notes": "",
+ "documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
+ "keyboard": "handwired/hillside/0_1",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T",
+ "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC",
+
+ "KC_CAPS", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G",
+ "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_ENT",
+
+ "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV",
+ "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
+
+ "KC_LCTL", "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
+ "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_QUOT"
+
+ ],
+ ["KC_TAB" , "KC_QUOT" , "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y",
+ "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC",
+
+ "KC_CAPS", "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I",
+ "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "KC_ENT",
+
+ "KC_LSFT", "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_GRV",
+ "KC_ESC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT",
+
+ "KC_LCTL", "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
+ "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_SLSH"
+
+ ],
+ ["KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B",
+ "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC",
+
+ "KC_CAPS", "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G",
+ "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "KC_ENT",
+
+ "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_GRV",
+ "KC_ESC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
+
+ "KC_LCTL", "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
+ "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_QUOT"
+
+ ],
+ ["KC_NO" , "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU",
+ "KC_PGUP", "KC_HOME" , "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL",
+
+ "KC_NO" , "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_VOLD",
+ "KC_PGDN", "KC_LEFT" , "KC_UP" , "KC_RGHT" , "KC_NO" , "KC_TRNS",
+
+ "KC_LSFT", "LCTL(KC_Z)" , "LCTL(KC_X)" , "LCTL(KC_C)", "LCTL(KC_V)" , "LCTL(KC_Y)", "KC_MUTE",
+ "KC_ESC" , "OSM(MOD_RALT)", "LCTL(KC_LEFT)", "KC_DOWN" , "LCTL(KC_RGHT)", "KC_APP" , "KC_TRNS",
+
+ "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "MO(6)" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_RCTL"
+
+ ],
+ ["KC_F11" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC",
+ "KC_CIRC", "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_TRNS",
+
+ "KC_F12" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5",
+ "KC_PIPE", "KC_LSFT" , "KC_LCTL" , "KC_LALT" , "KC_LGUI" , "KC_TRNS",
+
+ "KC_LSFT", "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_PSCR",
+ "KC_ESC" , "KC_BSLS" , "KC_LBRC" , "KC_RBRC" , "KC_LCBR" , "KC_RCBR" , "KC_TRNS",
+
+ "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "MO(6)",
+ "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_RCTL"
+
+ ],
+ ["KC_TAB" , "KC_MINS" , "KC_PLUS" , "KC_EQL" , "KC_SLSH" , "KC_ASTR",
+ "KC_COMM", "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS",
+
+ "KC_NO" , "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_NO",
+ "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS" , "KC_TRNS",
+
+ "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
+ "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS",
+
+ "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO",
+ "KC_NO" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_RCTL"
+
+ ],
+ ["KC_NO" , "DF(0)" , "DF(1)" , "DF(2)" , "AG_SWAP" , "AG_NORM",
+ "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
+
+ "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "CL_SWAP" , "CL_NORM",
+ "RGB_MOD", "RGB_VAI" , "RGB_HUI" , "RGB_SAI" , "KC_NO" , "KC_NO",
+
+ "RESET" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
+ "RGB_TOG", "RGB_RMOD" , "RGB_VAD" , "RGB_HUD" , "RGB_SAD" , "KC_NO" , "KC_NO",
+
+ "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_TRNS",
+ "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
+
+ ]
+ ],
+ "author": "@mmccoyd"
+}
diff --git a/keyboards/handwired/hillside/0_1/keymaps/default/readme.md b/keyboards/handwired/hillside/0_1/keymaps/default/readme.md
new file mode 100644
index 0000000000..ae4a5c5648
--- /dev/null
+++ b/keyboards/handwired/hillside/0_1/keymaps/default/readme.md
@@ -0,0 +1,212 @@
+# Default Keymap
+
+This default keymap follows many of the norms seen in non-programmable keyboards
+ to ease initial use of the Hillside keyboard.
+It is a starting point for you to tweak over time to better suit _your_ preferences.
+You can easily customize it with the
+ [QMK configurator](https://config.qmk.fm/#/hillside/0_1/LAYOUT)
+ or with the [via firmware](https://caniusevia.com).
+
+Some of its key features are:
+- A mostly standard base layer with letters, some symbols, shift, modifier and delete keys
+ in the expected places for non-programmable keyboards.
+- QWERTY, Colemak-DH and Dvorak options for the letter and symbol layout.
+- Comfortable modifier and function or symbol combinations on the non-base layers
+ using modifiers on the home row of the navigation/edit, symbol/function and number-pad layers.
+- Word navigation and cut/copy/paste keys on the navigation layer.
+- A slightly optimized number pad with the more frequently used numbers on the home row.
+
+We've deliberately omitted some features:
+- Combos: because the online configuration tools do not handle them
+ and because they would add to the initial learning curve,
+ as helpful to a keymap as a light sprinkling of combos can be.
+- Multi-function mod-tap keys, auto shift capitalization and auto-exit modes such as CAPWORD or NUMWORD:
+ as they may be too large a step for someone new to programmable keyboards.
+
+## Base Layer
+
+```
+| TAB | Q | W | E | R | T |---------------------------| Y | U | I | O | P | BKSPC |
+| CAPS | A | S | D | F | G |---------------------------| H | J | K | L | ; | ENTER |
+| SHIFT | Z | X | C | V | B | ~ |---------------| ESC | N | M | , | . | / | SHIFT |
+--------------|CTRL |-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| ' |--------------
+```
+
+The base layer provides a very standard key layout:
+
+- Return, Tab, backspace and shift keys in the outer columns.
+- Alt/option and win/command keys on both thumbs, with the location swappable for windows or mac.
+- A space key on the right thumb.
+
+The differences from a standard layout are:
+
+- There are three additional "shift" keys
+ to access the navigation/editing, symbol/function, and number layers.
+- Esc and `~ are above the thumbs.
+- The Menu and AltGr keys are on a layer.
+
+The default layout is QWERTY with alternatives of Dvorak and Colemak-DH
+and the alt/option and win/command key locations are swappable for windows or mac.
+
+<details>
+<summary>Details of Dvorak and Colemak-DH</summary>
+The Dvorak and Colemak-DH base layers
+ have identical non-alpha and non-symbol keys as the QWERTY base layer.
+In the Dvorak layout, the symbol key in the bottom row is the "/?" symbols
+ so that the same 12 symbols are taken care of on the base layer.
+
+```
+Dvorak
+| TAB | ' | , | . | P | Y |---------------------------| F | G | C | R | L | BKSPC |
+| CAPS | A | O | E | U | I |---------------------------| D | H | T | N | S | ENTER |
+| SHIFT | ; | Q | J | K | X | ~ |---------------| ESC | B | M | W | V | Z | SHIFT |
+--------------|CTRL |-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| / |--------------
+
+Colemak-DH
+| TAB | Q | W | F | P | B |---------------------------| J | L | U | Y | ; | BKSPC |
+| CAPS | A | R | S | T | G |---------------------------| M | N | E | I | O | ENTER |
+| SHIFT | Z | X | C | D | V | ~ |---------------| ESC | K | H | , | . | / | SHIFT |
+--------------|CTRL |-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| ' |--------------
+```
+</details>
+
+## Navigation, Editing and Media Layer
+
+```
+| | INS | | | |VOL+ |---------------------------|PG_UP|HOME | | END| | DEL |
+| | GUI | ALT |CTRL |SHIFT|VOL- |---------------------------|PG_DN|LEFT | UP |RIGHT| | ENTER |
+| SHIFT |UNDO | CUT |COPY |PASTE|REDO |MUTE |---------------| ESC |RALT |WORDL|DOWN |WORDR|MENU | SHIFT |
+--------------|CTRL |-----| GUI | ALT | Num | *** |---| Adj |BSPC | ALT | GUI |-----|CTRL |--------------
+```
+Holding down the Nav key accesses a navigation and editing layer:
+
+- Navigation arrows are on and below the right home row in a cross pattern.
+ This feels more natural for a column stagger keyboard than an inverted T.
+ The keys below that move left or right by a word.
+ Home, end, and page up/down are beside them.
+- Modifiers in the left home row make it easier to use the arrows
+ to select text with the shift key or move between desktops or tabs.
+- Editing keys appear on the lower left.
+ The edit keys, modifiers and arrows make it easy to move text around without leaving the layer.
+- Delete is in the upper right, and a backspace key is on the thumb.
+- The base layer modifiers and escape are in the same spots as on the base layer,
+ and a right-hand control key is added.
+- Media volume and play keys are on the left, accessible with one hand.
+- Menu and AltGr keys fill out the layer.
+- A few keys do nothing and are available for more user-specific needs.
+
+## Symbol and Function Layer
+
+```
+| F11 | ! | @ | # | $ | % |---------------------------| ^ | & | * | ( | ) | BSPC |
+| F12 | F1 | F2 | F3 | F4 | F5 |---------------------------| | |SHIFT|CTRL | ALT | GUI | ENTER |
+| SHIFT | F6 | F7 | F8 | F9 | F10 |PRTSC|---------------| ESC | \ | [ | ] | { | } | SHIFT |
+--------------|CTRL |-----| GUI | ALT | Num | Adj |---| *** |SPACE| ALT | GUI |-----|CTRL |--------------
+```
+Holding down the Sym key accesses a layer of symbol and function keys:
+
+- The symbols usually found on the number keys are in the top row.
+ If desired, you can use these positions for other things,
+ as the symbols are also accessible from the number pad layer with the shift key.
+- Several more symbols appear on the right.
+- The function keys are on the left, beginning with two rows of five.
+- A row of modifiers in the home row allows the comfortable creation of any modifier and function key combination.
+- The base layer modifier and escape keys are still available, as is a right-hand control key.
+
+## Number Pad and Algebraic Layer
+```
+| TAB | - | + | = | / | * |---------------------------| . | 7 | 8 | 9 | | BSPC |
+| | GUI | ALT |CTRL |SHIFT| |---------------------------| 0 | 1 | 2 | 3 | _ | ENTER |
+| SHIFT | | | | | | |---------------| ESC | , | 4 | 5 | 6 | | SHIFT |
+--------------|CTRL |-----| GUI | ALT | *** | |---| |BSPC | ALT | GUI |-----|CTRL |--------------
+```
+Holding down the Num key accesses a number pad and arithmetic symbols:
+
+- The number pad has the lowest numbers swapped into the home row as these are the most commonly used.
+- A row of modifiers in the home row allows the comfortable creation of any modifier and number combination.
+- Symbols commonly used with numbers fill out the layer
+ and can be combined with the home row mods or the existing base layer modifiers on the right hand.
+- Several keys remain unused and await more user-specific needs.
+
+
+## Adjust Layer
+```
+| |QWERT|DVORK|COLMK|AG_SWAP|AG_NORM|-----------------------| | | | | | |
+| | | | |CTR_S|CTR_N|---------------------------|MOD+ |BRI+ |HUE+ |SAT+ | | |
+| RESET | | | | | | |--------------|RGBTOG|MOD- |BRI- |HUE- |SAT- | | |
+--------------| |-----| | | | *** |---| *** | | | |-----| |--------------
+```
+Simultaneously holding down the Nav and Sym keys enables keys to adjust various keyboard settings:
+
+- The base layer can be set to QWERTY, Colemak-DH or Dvorak,
+ but the keyboard reverts to QWERTY each time it is plugged in.
+- Alt/option and GUI/command can be swapped for mac users or restored to the windows norm.
+ This setting persists over power loss.
+- The backlight LEDs can be enabled, disabled, and controlled.
+ These settings also persist over power loss.
+
+
+## Make it Yours
+
+If you are coming from a traditional keyboard,
+ with a row-staggered layout and a large set of physical keys,
+ learning to use a column staggered (ergo) and layer-based keyboard,
+ which uses layers instead of finger reaches to access numbers, symbols and functions,
+ will be an adjustment for your muscle memory and your mental keyboard map.
+This default layout tries to simplify that adjustment by keeping things in the expected spots when possible.
+
+Yet this layout is only a decent compromise and is not optimal for each user.
+
+The online configurator makes it easy to tweak this layout to your needs.
+You can add additional layers or completely switch around what these do.
+
+Some changes you might consider making:
+- Put some of your most-used key combinations on the unused keys on the navigation layer.
+- If you are on a mac, switch the editing and word navigation keys from ctrl-x to cmd-x.
+- Change the shift keys to one-shot shift keys,
+ where pressing and releasing them shifts the next key pressed.
+ That is much easier on your hands than holding them down.
+ Yet, they can still be held as usual if desired.
+- Instead of holding down the thumb key to keep the symbol layer active,
+ you could use a one-shot layer key.
+ One-shot modifiers are likely less stress on your hands and may even be faster.
+ You would still be able to hold it down instead.
+- Instead of holding down the key for the number pad layer,
+ you could make it a layer toggle, like caps lock is a capitalization toggle key.
+
+Here are some other keymaps for inspiration and ideas:
+- The [Ferris default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default) uses more advanced features as it has far fewer keys to work with.
+- The [Miryoku](https://github.com/manna-harbour/miryoku/tree/master/docs/reference) keymap ensures that all modifiers are comfortably available with each character key.
+- The [Kyria default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/default) has different keymap choices and a couple more keys.
+
+A good metaphor is to think of your keymap as a bonsai tree that you tweak slightly over time
+ in response to ideas of how it might serve you better.
+
+
+## Why no keymap.c
+
+Via and the online configurator provide straightforward visual ways to work with a simple layout,
+ and both use a .json keymap format.
+So this default ```keymap.json``` was created with the online configurator
+ and formatted for easier reading and editing.
+
+If you wish, you can edit the ```keymap.json``` directly in a text editor, optionally use the below ```json2hill.py``` to restore the spacing, and then compile and flash it.
+
+Or, you can use the graphical configurator to edit the keymap. To do that:
+
+- Open the [QMK configurator](https://config.qmk.fm/#/handwired/hillside/LAYOUT)
+- Using the green up arrow button, load the keymap from ```qmk_firmware/keyboards/handwired/hillside/keymaps/default/keymap.json```
+- Make the changes you wish to the layout
+- Save the keymap using the green down arrow button.
+- Copy those changes back into your QMK repository and reformat for easy reading using the format script:
+```
+./keyboards/handwired/hillside/0_1/keymaps/json2hill.py --input <Your download directory>/default.json > ./keyboards/handwired/hillside/0_1/keymaps/default/keymap.json
+```
+ You may need to make that script executable with ```chmod +x```. After your keymap is safely copied and formated, you may want to remove the keymap from your download directory so later downloads will automatically receive the same file name.
+
+After either method of editing, compile and flash the keymap as usual.
+
+You can combine a .json based keymap with more advanced features specified in .c files
+ with a bit more complexity.
+For example, see
+[pierrec83's Kyria map](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/pierrec83).
diff --git a/keyboards/handwired/hillside/keymaps/json2hill.py b/keyboards/handwired/hillside/0_1/keymaps/json2hill.py
index a9971c0d78..a9971c0d78 100755
--- a/keyboards/handwired/hillside/keymaps/json2hill.py
+++ b/keyboards/handwired/hillside/0_1/keymaps/json2hill.py
diff --git a/keyboards/handwired/hillside/0_1/keymaps/via/keymap.json b/keyboards/handwired/hillside/0_1/keymaps/via/keymap.json
new file mode 100644
index 0000000000..a015f0241c
--- /dev/null
+++ b/keyboards/handwired/hillside/0_1/keymaps/via/keymap.json
@@ -0,0 +1,61 @@
+{ "version": 1,
+ "notes": "",
+ "keyboard": "handwired/hillside/0_1",
+ "keymap": "via",
+ "layout": "LAYOUT",
+ "layers": [
+ ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T",
+ "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC",
+
+ "KC_CAPS" , "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G",
+ "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN", "KC_ENT",
+
+ "KC_LSFT" , "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV",
+ "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM", "KC_DOT" , "KC_SLSH", "KC_RSFT",
+
+ "KC_LCTL" , "KC_LGUI", "KC_LALT", "MO(3)" , "MO(1)",
+ "MO(2)" , "KC_SPC" , "KC_LALT", "KC_RGUI", "KC_QUOT"
+
+ ],
+ ["KC_NO" , "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU",
+ "KC_PGUP" , "KC_HOME", "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL",
+
+ "KC_NO" , "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_LSFT", "KC_VOLD",
+ "KC_PGDN" , "KC_LEFT", "KC_UP" , "KC_RGHT", "KC_NO" , "KC_TRNS",
+
+ "KC_LSFT" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_MUTE",
+ "KC_ESC" , "KC_CAPS", "KC_NO" , "KC_DOWN", "KC_NO" , "KC_APP" , "KC_TRNS",
+
+ "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS" , "KC_BSPC", "KC_TRNS", "KC_TRNS", "KC_RCTL"
+
+ ],
+ ["KC_F11" , "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC",
+ "KC_CIRC" , "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "KC_TRNS",
+
+ "KC_F12" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5",
+ "KC_PIPE" , "KC_LSFT", "KC_LCTL", "KC_LALT", "KC_LGUI", "KC_TRNS",
+
+ "KC_LSFT" , "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_PSCR",
+ "KC_ESC" , "KC_BSLS", "KC_LBRC", "KC_RBRC", "KC_LCBR", "KC_RCBR", "KC_TRNS",
+
+ "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RCTL"
+
+ ],
+ ["KC_TAB" , "KC_MINS", "KC_PLUS", "KC_EQL" , "KC_SLSH", "KC_ASTR",
+ "KC_COMM" , "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS",
+
+ "ANY(RGB_TOG)", "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_LSFT", "KC_NO",
+ "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS", "KC_TRNS",
+
+ "KC_TRNS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
+ "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS",
+
+ "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO",
+ "KC_NO" , "KC_BSPC", "KC_TRNS", "KC_TRNS", "KC_RCTL"
+
+ ]
+ ],
+ "author": "@mmccoyd"
+}
diff --git a/keyboards/handwired/hillside/0_1/readme.md b/keyboards/handwired/hillside/0_1/readme.md
new file mode 100644
index 0000000000..f1ff0f8506
--- /dev/null
+++ b/keyboards/handwired/hillside/0_1/readme.md
@@ -0,0 +1,29 @@
+# Hillside
+
+![hillside](https://imgur.com/XW0rX13.png)
+
+[Hillside](https://github.com/mmccoyd/hillside)
+ is a split ergonomic keyboard
+ with 3x6+4+2 choc-spaced keys with aggressive column stagger,
+ a longer thumb arc and a breakoff outer-pinky column.
+
+* Keyboard Maintainer: [Michael McCoyd](https://github.com/mmccoyd)
+* Hardware Supported: ProMicro/Elite-C and compatible
+* Hardware Availability: https://github.com/mmccoyd/hillside
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/hillside/0_1:default
+
+Flashing example for this keyboard:
+
+ make handwired/hillside/0_1:default:flash
+
+## Bootloader
+
+Enter the bootloader by either:
+
+* **Physical reset button**: Briefly press the button on the front of the PCB.
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/hillside/info.json b/keyboards/handwired/hillside/info.json
index 7a29df1c64..781b43c0ff 100644
--- a/keyboards/handwired/hillside/info.json
+++ b/keyboards/handwired/hillside/info.json
@@ -2,96 +2,5 @@
"manufacturer": "mmccoyd",
"maintainer": "mmccoyd",
- "keyboard_name": "Hillside",
- "url": "http://github.com/mmccoyd/hillside/",
-
- "tags": ["split", "column stagger", "choc v1", "choc spaced" ],
-
- "processor": "atmega32u4",
-
- "features": {
- "encoder": true,
- "extrakey": true,
- "rgblight": true
- },
- "split": {
- "soft_serial_pin": "D2",
- "main": "left"
- },
-
- "rgblight": {
- "led_count": 5,
- "pin": "D3",
- "split": true,
- "hue_steps": 8,
- "saturation_steps": 8,
- "brightness_steps": 8
- },
-
- "layouts": {
- "LAYOUT": {
- "layout": [
-
- {"label": "Tab", "x": 0, "y": 0.93},
- {"label": "Q", "x": 1, "y": 0.93},
- {"label": "W", "x": 2, "y": 0.31},
- {"label": "E", "x": 3, "y": 0},
- {"label": "R", "x": 4, "y": 0.28},
- {"label": "T", "x": 5, "y": 0.42},
-
- {"label": "Y", "x": 9.5, "y": 0.42},
- {"label": "U", "x": 10.5, "y": 0.28},
- {"label": "I", "x": 11.5, "y": 0},
- {"label": "O", "x": 12.5, "y": 0.31},
- {"label": "P", "x": 13.5, "y": 0.93},
- {"label": "Backspace", "x": 14.5, "y": 0.93},
-
-
- {"label": "Ctrl", "x": 0, "y": 1.93},
- {"label": "A", "x": 1, "y": 1.93},
- {"label": "S", "x": 2, "y": 1.31},
- {"label": "D", "x": 3, "y": 1},
- {"label": "F", "x": 4, "y": 1.28},
- {"label": "G", "x": 5, "y": 1.42},
-
- {"label": "H", "x": 9.5, "y": 1.42},
- {"label": "J", "x": 10.5, "y": 1.28},
- {"label": "K", "x": 11.5, "y": 1},
- {"label": "L", "x": 12.5, "y": 1.31},
- {"label": ";", "x": 13.5, "y": 1.93},
- {"label": "'", "x": 14.5, "y": 1.93},
-
-
- {"label": "Shift", "x": 0, "y": 2.93},
- {"label": "Z", "x": 1, "y": 2.93},
- {"label": "X", "x": 2, "y": 2.31},
- {"label": "C", "x": 3, "y": 2},
- {"label": "V", "x": 4, "y": 2.28},
- {"label": "B", "x": 5, "y": 2.42},
- {"label": "`", "x": 6, "y": 2.78},
-
- {"label": "Esc", "x": 8.5, "y": 2.78},
- {"label": "N", "x": 9.5, "y": 2.42},
- {"label": "M", "x": 10.5, "y": 2.28},
- {"label": ",", "x": 11.5, "y": 2},
- {"label": ".", "x": 12.5, "y": 2.31},
- {"label": "/", "x": 13.5, "y": 2.93},
- {"label": "Shift", "x": 14.5, "y": 2.93},
-
-
- {"label": "Enter", "x": 2, "y": 3.31},
- {"label": "Gui", "x": 3.5, "y": 3.28},
- {"label": "Alt", "x": 4.5, "y": 3.42},
- {"label": "Num", "x": 5.5, "y": 3.78},
- {"label": "Nav", "x": 6.5, "y": 4.14},
-
-
- {"label": "Sym", "x": 8, "y": 4.14},
- {"label": "Space", "x": 9, "y": 3.78},
- {"label": "Alt", "x": 10, "y": 3.42},
- {"label": "Gui", "x": 11, "y": 3.28},
- {"label": "App", "x": 12.5, "y": 3.31}
- ]
- }
- }
+ "url": "http://github.com/mmccoyd/hillside/"
}
diff --git a/keyboards/handwired/hillside/keymaps/default/keymap.json b/keyboards/handwired/hillside/keymaps/default/keymap.json
deleted file mode 100644
index f5871b073f..0000000000
--- a/keyboards/handwired/hillside/keymaps/default/keymap.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "version": 1,
- "notes": "",
- "documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
- "keyboard": "handwired/hillside/0_1",
- "author": "@mmccoyd",
- "keymap": "default",
- "layout": "LAYOUT",
- "layers": [
- ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T",
- "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G",
- "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_QUOT",
-
- "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV",
- "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_TAB" , "KC_QUOT" , "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y",
- "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I",
- "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "KC_SLSH",
-
- "KC_LSFT", "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_GRV",
- "KC_ESC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B",
- "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G",
- "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "KC_QUOT",
-
- "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_GRV",
- "KC_ESC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_CAPS", "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU",
- "KC_PGUP", "KC_HOME" , "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL",
-
- "KC_LCTL", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_VOLD",
- "KC_PGDN", "KC_LEFT" , "KC_UP" , "KC_RGHT" , "KC_NO" , "KC_RCTL",
-
- "KC_LSFT", "LCTL(KC_Z)", "LCTL(KC_X)" , "LCTL(KC_C)", "LCTL(KC_V)" , "LCTL(KC_Y)", "KC_MUTE",
- "KC_ESC" , "KC_NO" , "LCTL(KC_LEFT)", "KC_DOWN" , "LCTL(KC_RGHT)", "KC_RALT" , "KC_RSFT",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
- "MO(6)" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_F12" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC",
- "KC_CIRC", "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_BSPC",
-
- "KC_LCTL", "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5",
- "KC_PIPE", "KC_LSFT" , "KC_LCTL" , "KC_LALT" , "KC_LGUI" , "KC_RCTL",
-
- "KC_LSFT", "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11",
- "KC_ESC" , "KC_BSLS" , "KC_LBRC" , "KC_RBRC" , "KC_LCBR" , "KC_RCBR" , "KC_RSFT",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "MO(6)",
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_NO" , "KC_MINS" , "KC_PLUS" , "KC_EQL" , "KC_SLSH" , "KC_ASTR",
- "KC_COMM", "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS",
-
- "KC_TRNS", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_NO",
- "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS" , "KC_RCTL",
-
- "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO",
- "KC_NO" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_NO" , "DF(0)" , "DF(1)" , "DF(2)" , "AG_SWAP" , "AG_NORM",
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
-
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "RGB_MOD", "RGB_VAI" , "RGB_HUI" , "RGB_SAI" , "KC_NO" , "KC_NO",
-
- "RESET" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "RGB_TOG", "RGB_RMOD" , "RGB_VAD" , "RGB_HUD" , "RGB_SAD" , "KC_NO" , "KC_NO",
-
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_TRNS",
- "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
-
- ]
- ]
-}
diff --git a/keyboards/handwired/hillside/keymaps/default/readme.md b/keyboards/handwired/hillside/keymaps/default/readme.md
deleted file mode 100644
index a982c0c380..0000000000
--- a/keyboards/handwired/hillside/keymaps/default/readme.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# Default Keymap
-
-This default keymap follows many of the norms seen in non-programmable keyboards
- to ease initial use of the Hillside keyboard.
-It is a starting point for you to tweak over time to better suit _your_ preferences.
-You can easily customize it with the
- [QMK configurator](https://config.qmk.fm/#/hillside/0_1/LAYOUT)
- or with the [via firmware](https://caniusevia.com).
-
-Some of its key features are:
-- A mostly standard base layer with letters, some symbols, shift, modifier and delete keys
- in the expected places for non-programmable keyboards.
-- QWERTY, Colemak-DH and Dvorak options for the letter and symbol layout.
-- Comfortable modifier and function or symbol combinations on the non-base layers
- using modifiers on the home row of the navigation/edit, symbol/function and number-pad layers.
-- Word navigation and cut/copy/paste keys on the navigation layer.
-- A slightly optimized number pad with the more frequently used numbers on the home row.
-
-We've deliberately omitted some features:
-- Combos: because the online configuration tools do not handle them
- and because they would add to the initial learning curve,
- as helpful to a keymap as a light sprinkling of combos can be.
-- Multi-function mod-tap keys, auto shift capitalization and auto-exit modes such as CAPWORD or NUMWORD:
- as they may be too large a step for someone new to programmable keyboards.
-
-## Base Layer
-
-```
-| TAB | Q | W | E | R | T |---------------------------| Y | U | I | O | P | BKSPC |
-| CTRL | A | S | D | F | G |---------------------------| H | J | K | L | ; | ' |
-| SHIFT | Z | X | C | V | B | ~ |---------------| ESC | N | M | , | . | / | SHIFT |
---------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |--------------
-```
-
-The base layer can be either of QWERTY, Colemak-DH or Dvorak,
- with identical non-alpha and non-symbol keys.
-QWERTY is the default.
-
-A standard keyboard layout is used for:
-
-- Tab, backspace and shift keys in the outer columns.
-- Alt/option and GUI/command keys on both thumbs, with the location swappable for windows or mac.
-- A space key on the right thumb.
-
-The differences from a standard layout are:
-
-- There are three additional "shift" keys
- to access the navigation/editing, symbol/function, and number layers.
-- Enter is on the left thumb or ring finger.
- This location allowed preserving the more common right-hand keys.
- Feel free to swap it with the quote key or have it share the right shift key
- as a mod-tap key.
-- Control is in the caps lock spot.
-- Esc and `~ are above the thumbs.
-- The rarer AltGr key is in a layer.
-
-<details>
-<summary>Details of Dvorak and Colemak-DH</summary>
-In the Dvorak layout, the outer home row key is the "/?" symbols
- so that the same 12 symbols are taken care of on the base layer.
-
-```
-Dvorak
-| TAB | ' | , | . | P | Y |---------------------------| F | G | C | R | L | BKSPC |
-| CTRL | A | O | E | U | I |---------------------------| D | H | T | N | S | / |
-| SHIFT | ; | Q | J | K | X | ~ |---------------| ESC | B | M | W | V | Z | SHIFT |
---------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |--------------
-
-Colemak-DH
-| TAB | Q | W | F | P | B |---------------------------| J | L | U | Y | ; | BKSPC |
-| CTRL | A | R | S | T | G |---------------------------| M | N | E | I | O | ' |
-| SHIFT | Z | X | C | D | V | ~ |---------------| ESC | K | H | , | . | / | SHIFT |
---------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |--------------
-```
-</details>
-
-## Navigation, Editing and Media Layer
-
-```
-| CAPS | INS | | | |VOL+ |---------------------------|PG_UP|HOME | | END| | DEL |
-| CTRL | GUI | ALT |CTRL |SHIFT|VOL- |---------------------------|PG_DN|LEFT | UP |RIGHT| | CTRL |
-| SHIFT |UNDO | CUT |COPY |PASTE|REDO |MUTE |---------------| ESC | |WORDL|DOWN |WORDR|RALT | SHIFT |
---------------|ENTER|-----| GUI | ALT | Num | *** |---| Adj |BSPC | ALT | GUI |-----| APP |--------------
-```
-Holding down the Nav key accesses a navigation and editing layer:
-
-- Navigation arrows are on and below the right home row in a cross pattern.
- This feels more natural for a column stagger keyboard than an inverted T.
- The keys below that move left or right by a word.
- Home, end, and page up/down are beside them.
-- Modifiers in the left home row make it easier to use the arrows
- to select text with the shift key or move between desktops or tabs.
-- Editing keys appear on the lower left.
- The edit keys, modifiers and arrows make it easy to move text around without leaving the layer.
-- Delete is in the upper right, and a backspace key is on the thumb.
-- The base layer modifiers and escape are in the same spots as on the base layer,
- and a right-hand control key is added.
-- Media volume and play keys are on the left, accessible with one hand.
-- AltGr and caps lock fill out the layer.
-- A few keys do nothing and are available for more user-specific needs.
-
-## Symbol and Function Layer
-
-```
-| F12 | ! | @ | # | $ | % |---------------------------| ^ | & | * | ( | ) | BSPC |
-| CTRL | F1 | F2 | F3 | F4 | F5 |---------------------------| | |SHIFT|CTRL | ALT | GUI | CTRL |
-| SHIFT | F6 | F7 | F8 | F9 | F10 | F11 |---------------| ESC | \ | [ | ] | { | } | SHIFT |
---------------|ENTER|-----| GUI | ALT | Num | Adj |---| *** |SPACE| ALT | GUI |-----| APP |--------------
-```
-Holding down the Sym key accesses a layer of symbol and function keys:
-
-- The symbols usually found on the number keys are in the top row.
- If desired, you can use these positions for other things,
- as the symbols are also accessible from the number pad layer with the shift key.
-- The remaining symbols appear on the right.
-- The function keys are on the left, beginning with two rows of five.
-- A row of modifiers in the home row allows the comfortable creation of any modifier and function key combination.
-- The base layer modifier and escape keys are still available, as is a right-hand control key.
-
-## Number Pad and Algebraic Layer
-```
-| | - | + | = | / | * |---------------------------| . | 7 | 8 | 9 | | BSPC |
-| CTRL | GUI | ALT |CTRL |SHIFT| |---------------------------| 0 | 1 | 2 | 3 | _ | CTRL |
-| SHIFT | | | | | | |---------------| ESC | , | 4 | 5 | 6 | | SHIFT |
---------------|ENTER|-----| GUI | ALT | *** | |---| |BSPC | ALT | GUI |-----| APP |--------------
-```
-Holding down the Num key accesses a number pad and arithmetic symbols:
-
-- The number pad has the lowest numbers swapped into the home row as these are the most commonly used.
-- A row of modifiers in the home row allows the comfortable creation of any modifier and number combination.
-- Symbols commonly used with numbers fill out the layer
- and can be combined with the home row mods or the existing base layer modifiers on the right hand.
-- Several keys remain unused and await more user-specific needs.
-
-
-## Adjust Layer
-```
-| |QWERT|DVORK|COLMK|AG_SWAP|AG_NORM|-----------------------| | | | | | |
-| | | | | | |---------------------------|MOD+ |BRI+ |HUE+ |SAT+ | | |
-| RESET | | | | | | |--------------|RGBTOG|MOD- |BRI- |HUE- |SAT- | | |
---------------| |-----| | | | *** |---| *** | | | |-----| |--------------
-```
-Simultaneously holding down the Nav and Sym keys enables keys to adjust various keyboard settings:
-
-- The base layer can be set to QWERTY, Colemak-DH or Dvorak,
- but the keyboard reverts to QWERTY each time it is plugged in.
-- Alt/option and GUI/command can be swapped for mac users or restored to the windows norm.
- This setting persists over power loss.
-- The backlight LEDs can be enabled, disabled, and controlled.
- These settings also persist over power loss.
-
-
-## Make it Yours
-
-If you are coming from a traditional keyboard,
- with a row-staggered layout and a large set of physical keys,
- learning to use a column staggered (ergo) and layer-based keyboard,
- which uses layers instead of finger reaches to access numbers, symbols and functions,
- will be an adjustment for your muscle memory and your mental keyboard map.
-This default layout tries to simplify that adjustment by keeping things in the expected spots when possible.
-
-Yet this layout is only a decent compromise and is not optimal for each user.
-
-The online configurator makes it easy to tweak this layout to your needs.
-You can add additional layers or completely switch around what these do.
-
-Some changes you might consider making:
-- Put some of your most-used key combinations on the unused keys on the navigation layer.
-- If you are on a mac, switch the editing and word navigation keys from ctrl-x to cmd-x.
-- Change the shift keys to one-shot shift keys,
- where pressing and releasing them shifts the next key pressed.
- That is much easier on your hands than holding them down.
- Yet, they can still be held as usual if desired.
-- Instead of holding down the thumb key to keep the symbol layer active,
- you could use a one-shot layer key.
- One-shot modifiers are likely less stress on your hands and may even be faster.
- You would still be able to hold it down instead.
-- Instead of holding down the key for the number pad layer,
- you could make it a layer toggle, like caps lock is a capitalization toggle key.
-
-Here are some other keymaps for inspiration and ideas:
-- The [Ferris default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default) uses more advanced features as it has far fewer keys to work with.
-- The [Miryoku](https://github.com/manna-harbour/miryoku/tree/master/docs/reference) keymap ensures that all modifiers are comfortably available with each character key.
-- The [Kyria default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/default) has different keymap choices and a couple more keys.
-
-A good metaphor is to think of your keymap as a bonsai tree that you tweak slightly over time
- in response to ideas of how it might serve you better.
-
-
-## Why no keymap.c
-
-Via and the online configurator provide straightforward visual ways to work with a simple layout,
- and both use a .json keymap format.
-So this default ```keymap.json``` was created with the online configurator
- and formatted for easier reading and editing.
-
-If you wish, you can edit the ```keymap.json``` directly in a text editor, optionally use the below ```json2hill.py``` to restore the spacing, and then compile and flash it.
-
-Or, you can use the graphical configurator to edit the keymap. To do that:
-
-- Open the [QMK configurator](https://config.qmk.fm/#/handwired/hillside/LAYOUT)
-- Using the green up arrow button, load the keymap from ```qmk_firmware/keyboards/handwired/hillside/keymaps/default/keymap.json```
-- Make the changes you wish to the layout
-- Save the keymap using the green down arrow button.
-- Copy those changes back into your QMK repository and reformat for easy reading using the format script:
-```
-./keyboards/handwired/hillside/keymaps/json2hill.py --input <Your download directory>/default.json > ./keyboards/handwired/hillside/keymaps/default/keymap.json
-```
- You may need to make that script executable with ```chmod +x```. After your keymap is safely copied and formated, you may want to remove the keymap from your download directory so later downloads will automatically receive the same file name.
-
-After either method of editing, compile and flash the keymap as usual.
-
-You can combine a .json based keymap with more advanced features specified in .c files
- with a bit more complexity.
-For example, see
-[pierrec83's Kyria map](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/pierrec83).
diff --git a/keyboards/handwired/hillside/keymaps/via/keymap.json b/keyboards/handwired/hillside/keymaps/via/keymap.json
deleted file mode 100644
index 8b4810c309..0000000000
--- a/keyboards/handwired/hillside/keymaps/via/keymap.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "version": 1,
- "notes": "",
- "keyboard": "handwired/hillside/0_1",
- "author": "@mmccoyd",
- "keymap": "via",
- "layout": "LAYOUT",
- "layers": [
- ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T",
- "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G",
- "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_QUOT",
-
- "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV",
- "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_TAB" , "KC_QUOT" , "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y",
- "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I",
- "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "KC_SLSH",
-
- "KC_LSFT", "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_GRV",
- "KC_ESC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B",
- "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC",
-
- "KC_LCTL", "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G",
- "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "KC_QUOT",
-
- "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_GRV",
- "KC_ESC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT",
-
- "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)",
- "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP"
-
- ],
- ["KC_CAPS", "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU",
- "KC_PGUP", "KC_HOME" , "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL",
-
- "KC_LCTL", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_VOLD",
- "KC_PGDN", "KC_LEFT" , "KC_UP" , "KC_RGHT" , "KC_NO" , "KC_RCTL",
-
- "KC_LSFT", "LCTL(KC_Z)", "LCTL(KC_X)" , "LCTL(KC_C)", "LCTL(KC_V)" , "LCTL(KC_Y)", "KC_MUTE",
- "KC_ESC" , "KC_NO" , "LCTL(KC_LEFT)", "KC_DOWN" , "LCTL(KC_RGHT)", "KC_RALT" , "KC_RSFT",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
- "MO(6)" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_F12" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC",
- "KC_CIRC", "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_BSPC",
-
- "KC_LCTL", "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5",
- "KC_PIPE", "KC_LSFT" , "KC_LCTL" , "KC_LALT" , "KC_LGUI" , "KC_RCTL",
-
- "KC_LSFT", "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11",
- "KC_ESC" , "KC_BSLS" , "KC_LBRC" , "KC_RBRC" , "KC_LCBR" , "KC_RCBR" , "KC_RSFT",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "MO(6)",
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_NO" , "KC_MINS" , "KC_PLUS" , "KC_EQL" , "KC_SLSH" , "KC_ASTR",
- "KC_COMM", "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS",
-
- "KC_TRNS", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_NO",
- "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS" , "KC_RCTL",
-
- "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS",
-
- "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO",
- "KC_NO" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS"
-
- ],
- ["KC_NO" , "DF(0)" , "DF(1)" , "DF(2)" , "AG_SWAP" , "AG_NORM",
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
-
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "RGB_MOD", "RGB_VAI" , "RGB_HUI" , "RGB_SAI" , "KC_NO" , "KC_NO",
-
- "RESET" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
- "RGB_TOG", "RGB_RMOD" , "RGB_VAD" , "RGB_HUD" , "RGB_SAD" , "KC_NO" , "KC_NO",
-
- "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_TRNS",
- "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
-
- ]
- ]
-}
diff --git a/keyboards/handwired/hillside/readme.md b/keyboards/handwired/hillside/readme.md
index f1ff0f8506..cffb3875aa 100644
--- a/keyboards/handwired/hillside/readme.md
+++ b/keyboards/handwired/hillside/readme.md
@@ -2,28 +2,10 @@
![hillside](https://imgur.com/XW0rX13.png)
-[Hillside](https://github.com/mmccoyd/hillside)
- is a split ergonomic keyboard
- with 3x6+4+2 choc-spaced keys with aggressive column stagger,
- a longer thumb arc and a breakoff outer-pinky column.
+Hillside is a small family of split ergonomic keyboards, currently of one.
+Inside this directory is support for each model.
* Keyboard Maintainer: [Michael McCoyd](https://github.com/mmccoyd)
-* Hardware Supported: ProMicro/Elite-C and compatible
+* Hardware Supported:
+ * [Hillside 0_1](https://github.com/qmk/qmk_firmware/blob/master/keyboards/handwired/hillside/0_1): ProMicro/Elite-C and compatible
* Hardware Availability: https://github.com/mmccoyd/hillside
-
-Make example for this keyboard (after setting up your build environment):
-
- make handwired/hillside/0_1:default
-
-Flashing example for this keyboard:
-
- make handwired/hillside/0_1:default:flash
-
-## Bootloader
-
-Enter the bootloader by either:
-
-* **Physical reset button**: Briefly press the button on the front of the PCB.
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/ms_sculpt_mobile/babblePaste.c b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.c
index e035648706..e035648706 100644
--- a/keyboards/handwired/ms_sculpt_mobile/babblePaste.c
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.c
diff --git a/keyboards/handwired/ms_sculpt_mobile/babblePaste.h b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.h
index 1e8206212a..1e8206212a 100644
--- a/keyboards/handwired/ms_sculpt_mobile/babblePaste.h
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.h
diff --git a/keyboards/handwired/ms_sculpt_mobile/babblePaste.txt b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.txt
index cf75e153e8..cf75e153e8 100644
--- a/keyboards/handwired/ms_sculpt_mobile/babblePaste.txt
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/babblePaste.txt
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk
index 6d1eae2bf9..5b45f586b5 100644
--- a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk
@@ -15,3 +15,6 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# Keymap specific files
+SRC = babblePaste.c
diff --git a/keyboards/handwired/ms_sculpt_mobile/rules.mk b/keyboards/handwired/ms_sculpt_mobile/rules.mk
index 72015d93d8..6498fa6c76 100644
--- a/keyboards/handwired/ms_sculpt_mobile/rules.mk
+++ b/keyboards/handwired/ms_sculpt_mobile/rules.mk
@@ -24,6 +24,3 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
-
-# Project specific files
-SRC = babblePaste.c
diff --git a/keyboards/handwired/not_so_minidox/config.h b/keyboards/handwired/not_so_minidox/config.h
index de9286eda5..177552e2a6 100644
--- a/keyboards/handwired/not_so_minidox/config.h
+++ b/keyboards/handwired/not_so_minidox/config.h
@@ -40,6 +40,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define USE_SERIAL
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
//#define EE_HANDS
#define MASTER_LEFT
diff --git a/keyboards/handwired/not_so_minidox/i2c.c b/keyboards/handwired/not_so_minidox/i2c.c
deleted file mode 100644
index 084c890c40..0000000000
--- a/keyboards/handwired/not_so_minidox/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/handwired/not_so_minidox/i2c.h b/keyboards/handwired/not_so_minidox/i2c.h
deleted file mode 100644
index 8910e70f10..0000000000
--- a/keyboards/handwired/not_so_minidox/i2c.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
diff --git a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
index 296a7a281d..435eed2f1f 100644
--- a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
+++ b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
@@ -8,17 +8,10 @@
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
-#define _ADJUST 16
+#define _ADJUST 3
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST,
-};
-
-#define KC_LOWR LOWER
-#define KC_RASE RAISE
+#define KC_LOWR MO(_LOWER)
+#define KC_RASE MO(_RAISE)
#define KC_RST RESET
#define KC_CAD LCTL(LALT(KC_DEL))
@@ -72,45 +65,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_ADJUST);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- }
- return true;
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
diff --git a/keyboards/handwired/not_so_minidox/matrix.c b/keyboards/handwired/not_so_minidox/matrix.c
deleted file mode 100644
index b7cec9370c..0000000000
--- a/keyboards/handwired/not_so_minidox/matrix.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "config.h"
-#include "quantum.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-#define ERROR_DISCONNECT_COUNT 5
-
-static uint8_t debouncing = DEBOUNCE;
-static const int ROWS_PER_HAND = MATRIX_ROWS/2;
-static uint8_t error_count = 0;
-
-static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
- unselect_rows();
- init_cols();
-
- setPinOutput(B0);
- setPinOutput(D5);
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t _matrix_scan(void)
-{
- // Right hand is stored after the left in the matirx so, we need to offset it
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- select_row(i);
- _delay_us(30); // without this wait read unstable value.
- matrix_row_t cols = read_cols();
- if (matrix_debouncing[i+offset] != cols) {
- matrix_debouncing[i+offset] = cols;
- debouncing = DEBOUNCE;
- }
- unselect_rows();
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- }
- }
-
- return 1;
-}
-
-#ifdef USE_I2C
-
-// Get rows from other half over i2c
-int i2c_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // start of matrix stored at 0x00
- err = i2c_master_write(0x00);
- if (err) goto i2c_error;
-
- // Start read
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
- if (err) goto i2c_error;
-
- if (!err) {
- int i;
- for (i = 0; i < ROWS_PER_HAND-1; ++i) {
- matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
- }
- matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
- i2c_master_stop();
- } else {
-i2c_error: // the cable is disconnceted, or something else went wrong
- i2c_reset_state();
- return err;
- }
-
- return 0;
-}
-
-#else // USE_SERIAL
-
-int serial_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- int ret = _matrix_scan();
-
-
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#endif
- // turn on the indicator led when halves are disconnected
- writePinLow(D5);
-
- error_count++;
-
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = 0;
- }
- }
- } else {
- // turn off the indicator led on no error
- writePinHigh(D5);
- error_count = 0;
- }
- matrix_scan_quantum();
- return ret;
-}
-
-void matrix_slave_scan(void) {
- _matrix_scan();
-
- int offset = (isLeftHand) ? 0 : (MATRIX_ROWS / 2);
-
-#ifdef USE_I2C
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- /* i2c_slave_buffer[i] = matrix[offset+i]; */
- i2c_slave_buffer[i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-#endif
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-static void init_cols(void)
-{
- for(int x = 0; x < MATRIX_COLS; x++) {
- _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
- _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
- }
-}
-
-static matrix_row_t read_cols(void)
-{
- matrix_row_t result = 0;
- for(int x = 0; x < MATRIX_COLS; x++) {
- result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
- }
- return result;
-}
-
-static void unselect_rows(void)
-{
- for(int x = 0; x < ROWS_PER_HAND; x++) {
- _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
- _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
- }
-}
-
-static void select_row(uint8_t row)
-{
- _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
- _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
-}
diff --git a/keyboards/handwired/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk
index 3eab0fba7e..8f9772df22 100644
--- a/keyboards/handwired/not_so_minidox/rules.mk
+++ b/keyboards/handwired/not_so_minidox/rules.mk
@@ -7,19 +7,14 @@ BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
+EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-USE_I2C = no
-CUSTOM_MATRIX = yes
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/not_so_minidox/serial.c b/keyboards/handwired/not_so_minidox/serial.c
deleted file mode 100644
index 74bcbb6bf6..0000000000
--- a/keyboards/handwired/not_so_minidox/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-inline static
-void serial_output(void) {
- SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
-}
-
-// make the serial pin an input with pull-up resistor
-inline static
-void serial_input(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/handwired/not_so_minidox/serial.h b/keyboards/handwired/not_so_minidox/serial.h
deleted file mode 100644
index 28fcc56ce7..0000000000
--- a/keyboards/handwired/not_so_minidox/serial.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
diff --git a/keyboards/handwired/not_so_minidox/split_util.c b/keyboards/handwired/not_so_minidox/split_util.c
deleted file mode 100644
index 39639c3b4b..0000000000
--- a/keyboards/handwired/not_so_minidox/split_util.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.h"
-#endif
-
-volatile bool isLeftHand = true;
-
-static void setup_handedness(void) {
- #ifdef EE_HANDS
- isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
- #else
- // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
- #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
- isLeftHand = !has_usb();
- #else
- isLeftHand = has_usb();
- #endif
- #endif
-}
-
-static void keyboard_master_setup(void) {
-#ifdef USE_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init ();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
-#ifdef USE_I2C
- i2c_slave_init(SLAVE_I2C_ADDRESS);
-#else
- serial_slave_init();
-#endif
-}
-
-bool has_usb(void) {
- USBCON |= (1 << OTGPADE); //enables VBUS pad
- _delay_us(5);
- return (USBSTA & (1<<VBUS)); //checks state of VBUS
-}
-
-void split_keyboard_setup(void) {
- setup_handedness();
-
- if (has_usb()) {
- keyboard_master_setup();
- } else {
- keyboard_slave_setup();
- }
- sei();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/handwired/not_so_minidox/split_util.h b/keyboards/handwired/not_so_minidox/split_util.h
deleted file mode 100644
index 807412cd38..0000000000
--- a/keyboards/handwired/not_so_minidox/split_util.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
diff --git a/keyboards/handwired/onekey/nucleo_l432kc/config.h b/keyboards/handwired/onekey/nucleo_l432kc/config.h
new file mode 100644
index 0000000000..7aa74f6682
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_l432kc/config.h
@@ -0,0 +1,21 @@
+// Copyright 2021 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "config_common.h"
+
+#define PRODUCT Onekey L432KC
+
+#define MATRIX_COL_PINS { A2 }
+#define MATRIX_ROW_PINS { A1 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B8
+#define BACKLIGHT_PWM_DRIVER PWMD4
+#define BACKLIGHT_PWM_CHANNEL 3
+#define BACKLIGHT_PAL_MODE 2
+
+#define RGB_DI_PIN A0
+#define RGB_CI_PIN B13
+
+#define ADC_PIN A0
diff --git a/keyboards/handwired/onekey/nucleo_l432kc/readme.md b/keyboards/handwired/onekey/nucleo_l432kc/readme.md
new file mode 100644
index 0000000000..c7d13cb973
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_l432kc/readme.md
@@ -0,0 +1,5 @@
+# STM32 Nucleo-L432 onekey
+
+To trigger keypress, short together pins *A1* and *A2*.
+
+You'll also need to connect `VIN`, `GND`, USB `D+` to `PA12`/`D2`, and USB `D-` to `PA11`/`D10`.
diff --git a/keyboards/handwired/onekey/nucleo_l432kc/rules.mk b/keyboards/handwired/onekey/nucleo_l432kc/rules.mk
new file mode 100644
index 0000000000..64dae7746e
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_l432kc/rules.mk
@@ -0,0 +1,5 @@
+# MCU name
+MCU = STM32L432
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
diff --git a/keyboards/handwired/onekey/teensy_32/rules.mk b/keyboards/handwired/onekey/teensy_32/rules.mk
index c1b90d0d2b..937c9d5103 100644
--- a/keyboards/handwired/onekey/teensy_32/rules.mk
+++ b/keyboards/handwired/onekey/teensy_32/rules.mk
@@ -1,5 +1,8 @@
# MCU name
MCU = MK20DX256
+# Bootloader selection
+BOOTLOADER = halfkay
+
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/handwired/onekey/teensy_lc/rules.mk b/keyboards/handwired/onekey/teensy_lc/rules.mk
index b3daabe317..0e3c7edf7a 100644
--- a/keyboards/handwired/onekey/teensy_lc/rules.mk
+++ b/keyboards/handwired/onekey/teensy_lc/rules.mk
@@ -2,5 +2,8 @@
MCU = MKL26Z64
USE_CHIBIOS_CONTRIB = yes
+# Bootloader selection
+BOOTLOADER = halfkay
+
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/handwired/ortho_brass/rules.mk b/keyboards/handwired/ortho_brass/rules.mk
index 19154c58f9..4e3b0d925a 100644
--- a/keyboards/handwired/ortho_brass/rules.mk
+++ b/keyboards/handwired/ortho_brass/rules.mk
@@ -1,7 +1,7 @@
# MCU name
MCU = atmega32u4
-# Bootloader
+# Bootloader selection
BOOTLOADER = qmk-dfu
# Build Options
@@ -10,13 +10,10 @@ MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # N-key Rollover
+NKRO_ENABLE = yes # Enable N-key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable RGB underlight.
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
LAYOUTS = ortho_4x12
RGBLIGHT_SUPPORTED = no
diff --git a/keyboards/handwired/prkl30/feather/rules.mk b/keyboards/handwired/prkl30/feather/rules.mk
index f83173fa0b..7578dcef74 100644
--- a/keyboards/handwired/prkl30/feather/rules.mk
+++ b/keyboards/handwired/prkl30/feather/rules.mk
@@ -22,4 +22,4 @@ AUDIO_ENABLE = no # This can be enabled if a speaker is connected to t
RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port.
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index 14a293bb39..e12142c50b 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -137,7 +137,7 @@ enum planck_keycodes {
#ifndef FAUXCLICKY_ENABLE
FC_TOG,
#endif
-#ifndef MODULE_ADAFRUIT_BLE
+#ifndef BLUETOOTH_BLUEFRUIT_LE
OUT_BT,
#endif
RGBDEMO,
@@ -1261,7 +1261,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
void set_output_user(uint8_t output) {
-#ifdef MODULE_ADAFRUIT_BLE
+#ifdef BLUETOOTH_BLUEFRUIT_LE
switch(output) {
case OUTPUT_USB:
led_set_output_usb();
@@ -1285,7 +1285,7 @@ void matrix_init_user() {
#endif
// auto detect output on init
-#ifdef MODULE_ADAFRUIT_BLE
+#ifdef BLUETOOTH_BLUEFRUIT_LE
uint8_t output = auto_detect_output();
if (output == OUTPUT_USB) {
set_output(OUTPUT_USB);
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index 094eb15762..94b505aa2c 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -140,7 +140,7 @@ enum planck_keycodes {
#ifndef FAUXCLICKY_ENABLE
FC_TOG,
#endif
-#ifndef MODULE_ADAFRUIT_BLE
+#ifndef BLUETOOTH_BLUEFRUIT_LE
OUT_BT,
#endif
RGBDEMO,
@@ -1264,7 +1264,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
void set_output_user(uint8_t output) {
-#ifdef MODULE_ADAFRUIT_BLE
+#ifdef BLUETOOTH_BLUEFRUIT_LE
switch(output) {
case OUTPUT_USB:
led_set_output_usb();
@@ -1288,7 +1288,7 @@ void matrix_init_user() {
#endif
// auto detect output on init
-#ifdef MODULE_ADAFRUIT_BLE
+#ifdef BLUETOOTH_BLUEFRUIT_LE
uint8_t output = auto_detect_output();
if (output == OUTPUT_USB) {
set_output(OUTPUT_USB);
diff --git a/keyboards/handwired/promethium/matrix.c b/keyboards/handwired/promethium/matrix.c
index e3a41af288..90dbce14a9 100644
--- a/keyboards/handwired/promethium/matrix.c
+++ b/keyboards/handwired/promethium/matrix.c
@@ -148,14 +148,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
index 8eb1680d84..0df6c28e9b 100644
--- a/keyboards/handwired/promethium/promethium.c
+++ b/keyboards/handwired/promethium/promethium.c
@@ -3,7 +3,7 @@
#include "timer.h"
#include "matrix.h"
#include "musical_notes.h"
-#include "adafruit_ble.h"
+#include "bluefruit_le.h"
float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A4, 0.0625);
float fauxclicky_released_note[2] = MUSICAL_NOTE(_A4, 0.0625);
@@ -12,7 +12,7 @@ float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C6, 0.25);
// cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100}
uint8_t battery_level(void) {
- float voltage = adafruit_ble_read_battery_voltage() * 2 * 3.3 / 1024;
+ float voltage = bluefruit_le_read_battery_voltage() * 2 * 3.3 / 1024;
if (voltage < MIN_VOLTAGE) return 0;
if (voltage > MAX_VOLTAGE) return 255;
return (voltage - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE) * 255;
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index f41e88b0c4..383800ee01 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -23,7 +23,7 @@ PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
CUSTOM_MATRIX = yes
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
SRC += ws2812.c
SRC += rgbsps.c
diff --git a/keyboards/handwired/pterodactyl/matrix.c b/keyboards/handwired/pterodactyl/matrix.c
index 21e6a128df..d0f74802a0 100644
--- a/keyboards/handwired/pterodactyl/matrix.c
+++ b/keyboards/handwired/pterodactyl/matrix.c
@@ -282,14 +282,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void) // deprecated and evidently not called.
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/handwired/pterodactyl/rules.mk b/keyboards/handwired/pterodactyl/rules.mk
index 629b30e385..fd63e2ad48 100644
--- a/keyboards/handwired/pterodactyl/rules.mk
+++ b/keyboards/handwired/pterodactyl/rules.mk
@@ -22,7 +22,7 @@ AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = yes
CUSTOM_MATRIX = yes
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
SRC += matrix.c
QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/handwired/qc60/config.h b/keyboards/handwired/qc60/config.h
index 0c27755910..db3d88dcf4 100644
--- a/keyboards/handwired/qc60/config.h
+++ b/keyboards/handwired/qc60/config.h
@@ -5,7 +5,7 @@
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0C60
-#define DEVICE_VER 0x00C6
+#define DEVICE_VER 0x0100
#define MANUFACTURER PeiorisBoards
#define PRODUCT QC60
diff --git a/keyboards/handwired/slash/rules.mk b/keyboards/handwired/slash/rules.mk
index 275a2eb7eb..53d114978f 100644
--- a/keyboards/handwired/slash/rules.mk
+++ b/keyboards/handwired/slash/rules.mk
@@ -20,4 +20,4 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk b/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
index e83e9a7bba..c497bb2ee8 100644
--- a/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
@@ -21,9 +21,7 @@ RGB_MATRIX_DRIVER = WS2812
POINTING_DEVICE_ENABLE = yes
-MOUSE_SHARED_EP = no
+POINTING_DEVICE_DRIVER = pmw3360
+MOUSE_SHARED_EP = yes
SPLIT_KEYBOARD = yes
-
-SRC += drivers/sensors/pmw3360.c
-QUANTUM_LIB_SRC += spi_master.c tm_sync.c
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/config.h
index 59cd098fdb..b4f09e5e87 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/config.h
@@ -50,5 +50,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-#define POINTING_DEVICE_TASK_THROTTLE
#define POINTING_DEVICE_RIGHT
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
index 6ae51ca6f0..87c3239057 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
@@ -79,7 +79,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C1_SDA_PIN B9
#define I2C1_SCL_PAL_MODE 4
#define I2C1_SDA_PAL_MODE 4
-// #define I2C1_CLOCK_SPEED 400000
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
/* encoder config */
#define ENCODERS_PAD_A \
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
index fa1e8897ee..570760cf66 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
@@ -61,8 +61,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MOUSE] = LAYOUT_5x6_right(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, DPI_CONFIG,
+ _______, _______, _______, _______, _______, _______, KC_WH_U, DPI_MOD, DPI_RMOD,S_D_MOD, S_D_RMOD,DRGSCRL,
+ _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
_______, _______, _______, _______,
_______, _______, KC_BTN3,
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk
index 37bbbb4dae..a689be3dd5 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk
@@ -18,6 +18,4 @@ MOUSE_SHARED_EP = yes
SPLIT_KEYBOARD = yes
-QUANTUM_LIB_SRC += tm_sync.c
-
DEFAULT_FOLDER = handwired/tractyl_manuform/5x6_right/teensy2pp
diff --git a/keyboards/handwired/tractyl_manuform/config.h b/keyboards/handwired/tractyl_manuform/config.h
index cc8a7546f4..f9160ea148 100644
--- a/keyboards/handwired/tractyl_manuform/config.h
+++ b/keyboards/handwired/tractyl_manuform/config.h
@@ -24,8 +24,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x44DD
#define MANUFACTURER Drashna
-#define USB_POLLING_INTERVAL_MS 1
-
/* disable debug print */
// #define NO_DEBUG
@@ -39,4 +37,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_CONFIG_SYNC, RPC_ID_POINTER_STATE_SYNC
+#define SPLIT_POINTING_ENABLE
+#define POINTING_DEVICE_TASK_THROTTLE_MS 1
+
+#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_CONFIG_SYNC
diff --git a/keyboards/handwired/tractyl_manuform/tm_sync.c b/keyboards/handwired/tractyl_manuform/tm_sync.c
deleted file mode 100644
index 549a17a22f..0000000000
--- a/keyboards/handwired/tractyl_manuform/tm_sync.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
- * Copyright 2021 Dasky (@daskygit)
-
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include QMK_KEYBOARD_H
-#include "pointing_device.h"
-#include "transactions.h"
-#include <string.h>
-#ifdef MOUSEKEY_ENABLE
-# include "mousekey.h"
-#endif
-
-// typedef struct {
-// uint16_t device_cpi;
-// } kb_config_data_t;
-
-kb_config_data_t kb_config;
-static report_mouse_t shared_mouse_report;
-extern const pointing_device_driver_t pointing_device_driver;
-
-void kb_pointer_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- shared_mouse_report = pointing_device_driver.get_report(shared_mouse_report);
- memcpy(target2initiator_buffer, &shared_mouse_report, sizeof(report_mouse_t));
- shared_mouse_report.x = 0;
- shared_mouse_report.y = 0;
- shared_mouse_report.h = 0;
- shared_mouse_report.v = 0;
-}
-
-void kb_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == sizeof(kb_config)) {
- memcpy(&kb_config, initiator2target_buffer, sizeof(kb_config));
- }
-
- static uint16_t cpi = 0;
- // Check if the state values are different
- if (cpi != kb_config.device_cpi) {
- cpi = kb_config.device_cpi;
- if (!is_keyboard_left()) {
- pointing_device_set_cpi(cpi);
- }
- }
-}
-
-void keyboard_pre_init_sync(void) {
- memset(&kb_config, 0, sizeof(kb_config));
- memset(&shared_mouse_report, 0, sizeof(shared_mouse_report));
-}
-
-void keyboard_post_init_sync(void) {
- // Register keyboard state sync split transaction
- transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, kb_config_sync_handler);
- transaction_register_rpc(RPC_ID_POINTER_STATE_SYNC, kb_pointer_sync_handler);
-}
-
-void housekeeping_task_sync(void) {
- if (is_keyboard_master()) {
- // Keep track of the last state, so that we can tell if we need to propagate to slave
- static kb_config_data_t last_kb_config;
- static uint32_t last_sync = 0;
- bool needs_sync = false;
-
- // Check if the state values are different
- if (memcmp(&kb_config, &last_kb_config, sizeof(kb_config))) {
- needs_sync = true;
- memcpy(&last_kb_config, &kb_config, sizeof(kb_config));
- }
- // Send to slave every 500ms regardless of state change
- if (timer_elapsed32(last_sync) > 500) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(kb_config), &kb_config)) {
- last_sync = timer_read32();
- }
- }
- }
-}
-
-void trackball_set_cpi(uint16_t cpi) {
- kb_config.device_cpi = cpi;
- if (!is_keyboard_left()) {
- pointing_device_set_cpi(cpi);
- }
-}
-
-void pointing_device_task(void) {
- if (!is_keyboard_master()) {
- return;
- }
-
-#if defined(POINTING_DEVICE_TASK_THROTTLE)
- static uint32_t last_exec = 0;
- if (timer_elapsed32(last_exec) < 1) {
- return;
- }
- last_exec = timer_read32();
-#endif
-
- report_mouse_t local_report = pointing_device_get_report();
-
- // Gather report info
-#ifdef POINTING_DEVICE_MOTION_PIN
- if (!readPin(POINTING_DEVICE_MOTION_PIN))
-#endif
-#if defined(POINTING_DEVICE_COMBINED)
- local_report = pointing_device_driver.get_report(local_report);
- transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &shared_mouse_report);
- local_report.x = local_report.x | shared_mouse_report.x;
- local_report.y = local_report.y | shared_mouse_report.y;
- local_report.h = local_report.h | shared_mouse_report.h;
- local_report.v = local_report.v | shared_mouse_report.v;
-#elif defined(POINTING_DEVICE_LEFT)
- if (is_keyboard_left()) {
- local_report = pointing_device_driver.get_report(local_report);
- } else {
- transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &local_report);
- }
-#elif defined(POINTING_DEVICE_RIGHT)
- if (!is_keyboard_left()) {
- local_report = pointing_device_driver.get_report(local_report);
- } else {
- transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &local_report);
- }
-#else
-# error "You need to define the side(s) the pointing device is on. POINTING_DEVICE_COMBINED / POINTING_DEVICE_LEFT / POINTING_DEVICE_RIGHT"
-#endif
-
- // Support rotation of the sensor data
-#if defined(POINTING_DEVICE_ROTATION_90) || defined(POINTING_DEVICE_ROTATION_180) || defined(POINTING_DEVICE_ROTATION_270)
- int8_t x = local_report.x, y = local_report.y;
-# if defined(POINTING_DEVICE_ROTATION_90)
- local_report.x = y;
- local_report.y = -x;
-# elif defined(POINTING_DEVICE_ROTATION_180)
- local_report.x = -x;
- local_report.y = -y;
-# elif defined(POINTING_DEVICE_ROTATION_270)
- local_report.x = -y;
- local_report.y = x;
-# else
-# error "How the heck did you get here?!"
-# endif
-#endif
- // Support Inverting the X and Y Axises
-#if defined(POINTING_DEVICE_INVERT_X)
- local_report.x = -local_report.x;
-#endif
-#if defined(POINTING_DEVICE_INVERT_Y)
- local_report.y = -local_report.y;
-#endif
-
- // allow kb to intercept and modify report
- local_report = pointing_device_task_kb(local_report);
- // combine with mouse report to ensure that the combined is sent correctly
-#ifdef MOUSEKEY_ENABLE
- report_mouse_t mousekey_report = mousekey_get_report();
- local_report.buttons = local_report.buttons | mousekey_report.buttons;
-#endif
-#if defined(POINTING_DEVICE_COMBINED)
- local_report.buttons = local_report.buttons | shared_mouse_report.buttons;
-#endif
- pointing_device_set_report(local_report);
- pointing_device_send();
-}
diff --git a/keyboards/handwired/tractyl_manuform/tractyl_manuform.c b/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
index 6095bfb7e2..033146134d 100644
--- a/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
+++ b/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
@@ -17,114 +17,369 @@
#include "tractyl_manuform.h"
#include "transactions.h"
#include <string.h>
-#include "drivers/sensors/pmw3360.h"
-#ifndef TRACKBALL_DPI_OPTIONS
-# define TRACKBALL_DPI_OPTIONS \
- { 1200, 1600, 2400 }
-# ifndef TRACKBALL_DPI_DEFAULT
-# define TRACKBALL_DPI_DEFAULT 1
-# endif
-#endif
-#ifndef TRACKBALL_DPI_DEFAULT
-# define TRACKBALL_DPI_DEFAULT 0
-#endif
+#ifdef CONSOLE_ENABLE
+# include "print.h"
+#endif // CONSOLE_ENABLE
-keyboard_config_t keyboard_config;
-uint16_t dpi_array[] = TRACKBALL_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#ifdef POINTING_DEVICE_ENABLE
+# ifndef CHARYBDIS_MINIMUM_DEFAULT_DPI
+# define CHARYBDIS_MINIMUM_DEFAULT_DPI 400
+# endif // CHARYBDIS_MINIMUM_DEFAULT_DPI
+# ifndef CHARYBDIS_DEFAULT_DPI_CONFIG_STEP
+# define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 200
+# endif // CHARYBDIS_DEFAULT_DPI_CONFIG_STEP
+# ifndef CHARYBDIS_MINIMUM_SNIPING_DPI
+# define CHARYBDIS_MINIMUM_SNIPING_DPI 200
+# endif // CHARYBDIS_MINIMUM_SNIPER_MODE_DPI
-bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
- if (!process_record_user(keycode, record)) {
- return false;
+# ifndef CHARYBDIS_SNIPING_DPI_CONFIG_STEP
+# define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100
+# endif // CHARYBDIS_SNIPING_DPI_CONFIG_STEP
+
+// Fixed DPI for drag-scroll.
+# ifndef CHARYBDIS_DRAGSCROLL_DPI
+# define CHARYBDIS_DRAGSCROLL_DPI 100
+# endif // CHARYBDIS_DRAGSCROLL_DPI
+
+# ifndef CHARYBDIS_DRAGSCROLL_BUFFER_SIZE
+# define CHARYBDIS_DRAGSCROLL_BUFFER_SIZE 6
+# endif // !CHARYBDIS_DRAGSCROLL_BUFFER_SIZE
+
+# ifndef CHARYBDIS_POINTER_ACCELERATION_FACTOR
+# define CHARYBDIS_POINTER_ACCELERATION_FACTOR 24
+# endif // !CHARYBDIS_POINTER_ACCELERATION_FACTOR
+
+typedef union {
+ uint8_t raw;
+ struct {
+ uint8_t pointer_default_dpi : 4; // 16 steps available.
+ uint8_t pointer_sniping_dpi : 2; // 4 steps available.
+ bool is_dragscroll_enabled : 1;
+ bool is_sniping_enabled : 1;
+ } __attribute__((packed));
+} charybdis_config_t;
+
+static charybdis_config_t g_charybdis_config = {0};
+
+/**
+ * \brief Set the value of `config` from EEPROM.
+ *
+ * Note that `is_dragscroll_enabled` and `is_sniping_enabled` are purposefully
+ * ignored since we do not want to persist this state to memory. In practice,
+ * this state is always written to maximize write-performances. Therefore, we
+ * explicitly set them to `false` in this function.
+ */
+static void read_charybdis_config_from_eeprom(charybdis_config_t* config) {
+ config->raw = eeconfig_read_kb() & 0xff;
+ config->is_dragscroll_enabled = false;
+ config->is_sniping_enabled = false;
+}
+
+/**
+ * \brief Save the value of `config` to eeprom.
+ *
+ * Note that all values are written verbatim, including whether drag-scroll
+ * and/or sniper mode are enabled. `read_charybdis_config_from_eeprom(…)`
+ * resets these 2 values to `false` since it does not make sense to persist
+ * these across reboots of the board.
+ */
+static void write_charybdis_config_to_eeprom(charybdis_config_t* config) { eeconfig_update_kb(config->raw); }
+
+/** \brief Return the current value of the pointer's default DPI. */
+static uint16_t get_pointer_default_dpi(charybdis_config_t* config) { return (uint16_t)config->pointer_default_dpi * CHARYBDIS_DEFAULT_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_DEFAULT_DPI; }
+
+/** \brief Return the current value of the pointer's sniper-mode DPI. */
+static uint16_t get_pointer_sniping_dpi(charybdis_config_t* config) { return (uint16_t)config->pointer_sniping_dpi * CHARYBDIS_SNIPING_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_SNIPING_DPI; }
+
+/** \brief Set the appropriate DPI for the input config. */
+static void maybe_update_pointing_device_cpi(charybdis_config_t* config) {
+ if (config->is_dragscroll_enabled) {
+ pointing_device_set_cpi(CHARYBDIS_DRAGSCROLL_DPI);
+ } else if (config->is_sniping_enabled) {
+ pointing_device_set_cpi(get_pointer_sniping_dpi(config));
+ } else {
+ pointing_device_set_cpi(get_pointer_default_dpi(config));
}
+}
-#ifdef POINTING_DEVICE_ENABLE
- if (keycode == DPI_CONFIG && record->event.pressed) {
- if ((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) {
- keyboard_config.dpi_config = (keyboard_config.dpi_config - 1) % DPI_OPTION_SIZE;
- } else {
- keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE;
+/**
+ * \brief Update the pointer's default DPI to the next or previous step.
+ *
+ * Increases the DPI value if `forward` is `true`, decreases it otherwise.
+ * The increment/decrement steps are equal to CHARYBDIS_DEFAULT_DPI_CONFIG_STEP.
+ */
+static void step_pointer_default_dpi(charybdis_config_t* config, bool forward) {
+ config->pointer_default_dpi += forward ? 1 : -1;
+ maybe_update_pointing_device_cpi(config);
+}
+
+/**
+ * \brief Update the pointer's sniper-mode DPI to the next or previous step.
+ *
+ * Increases the DPI value if `forward` is `true`, decreases it otherwise.
+ * The increment/decrement steps are equal to CHARYBDIS_SNIPING_DPI_CONFIG_STEP.
+ */
+static void step_pointer_sniping_dpi(charybdis_config_t* config, bool forward) {
+ config->pointer_sniping_dpi += forward ? 1 : -1;
+ maybe_update_pointing_device_cpi(config);
+}
+
+uint16_t charybdis_get_pointer_default_dpi(void) { return get_pointer_default_dpi(&g_charybdis_config); }
+
+uint16_t charybdis_get_pointer_sniping_dpi(void) { return get_pointer_sniping_dpi(&g_charybdis_config); }
+
+void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward) { step_pointer_default_dpi(&g_charybdis_config, forward); }
+
+void charybdis_cycle_pointer_default_dpi(bool forward) {
+ step_pointer_default_dpi(&g_charybdis_config, forward);
+ write_charybdis_config_to_eeprom(&g_charybdis_config);
+}
+
+void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward) { step_pointer_sniping_dpi(&g_charybdis_config, forward); }
+
+void charybdis_cycle_pointer_sniping_dpi(bool forward) {
+ step_pointer_sniping_dpi(&g_charybdis_config, forward);
+ write_charybdis_config_to_eeprom(&g_charybdis_config);
+}
+
+bool charybdis_get_pointer_sniping_enabled(void) { return g_charybdis_config.is_sniping_enabled; }
+
+void charybdis_set_pointer_sniping_enabled(bool enable) {
+ g_charybdis_config.is_sniping_enabled = enable;
+ maybe_update_pointing_device_cpi(&g_charybdis_config);
+}
+
+bool charybdis_get_pointer_dragscroll_enabled(void) { return g_charybdis_config.is_dragscroll_enabled; }
+
+void charybdis_set_pointer_dragscroll_enabled(bool enable) {
+ g_charybdis_config.is_dragscroll_enabled = enable;
+ maybe_update_pointing_device_cpi(&g_charybdis_config);
+}
+
+void pointing_device_init_kb(void) { maybe_update_pointing_device_cpi(&g_charybdis_config); }
+
+# ifndef CONSTRAIN_HID
+# define CONSTRAIN_HID(value) ((value) < -127 ? -127 : ((value) > 127 ? 127 : (value)))
+# endif // !CONSTRAIN_HID
+
+/**
+ * \brief Add optional acceleration effect.
+ *
+ * If `CHARYBDIS_ENABLE_POINTER_ACCELERATION` is defined, add a simple and naive
+ * acceleration effect to the provided value. Return the value unchanged
+ * otherwise.
+ */
+# ifndef DISPLACEMENT_WITH_ACCELERATION
+# ifdef CHARYBDIS_POINTER_ACCELERATION_ENABLE
+# define DISPLACEMENT_WITH_ACCELERATION(d) (CONSTRAIN_HID(d > 0 ? d * d / CHARYBDIS_POINTER_ACCELERATION_FACTOR + d : -d * d / CHARYBDIS_POINTER_ACCELERATION_FACTOR + d))
+# else // !CHARYBDIS_POINTER_ACCELERATION_ENABLE
+# define DISPLACEMENT_WITH_ACCELERATION(d) (d)
+# endif // CHARYBDIS_POINTER_ACCELERATION_ENABLE
+# endif // !DISPLACEMENT_WITH_ACCELERATION
+
+/**
+ * \brief Augment the pointing device behavior.
+ *
+ * Implement the Charybdis-specific features for pointing devices:
+ * - Drag-scroll
+ * - Sniping
+ * - Acceleration
+ */
+static void pointing_device_task_charybdis(report_mouse_t* mouse_report) {
+ static int16_t scroll_buffer_x = 0;
+ static int16_t scroll_buffer_y = 0;
+ if (g_charybdis_config.is_dragscroll_enabled) {
+# ifdef CHARYBDIS_DRAGSCROLL_REVERSE_X
+ scroll_buffer_x -= mouse_report->x;
+# else
+ scroll_buffer_x += mouse_report->x;
+# endif // CHARYBDIS_DRAGSCROLL_REVERSE_X
+# ifdef CHARYBDIS_DRAGSCROLL_REVERSE_Y
+ scroll_buffer_y -= mouse_report->y;
+# else
+ scroll_buffer_y += mouse_report->y;
+# endif // CHARYBDIS_DRAGSCROLL_REVERSE_Y
+ mouse_report->x = 0;
+ mouse_report->y = 0;
+ if (abs(scroll_buffer_x) > CHARYBDIS_DRAGSCROLL_BUFFER_SIZE) {
+ mouse_report->h = scroll_buffer_x > 0 ? 1 : -1;
+ scroll_buffer_x = 0;
+ }
+ if (abs(scroll_buffer_y) > CHARYBDIS_DRAGSCROLL_BUFFER_SIZE) {
+ mouse_report->v = scroll_buffer_y > 0 ? 1 : -1;
+ scroll_buffer_y = 0;
}
- eeconfig_update_kb(keyboard_config.raw);
- trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);
+ } else if (!g_charybdis_config.is_sniping_enabled) {
+ mouse_report->x = DISPLACEMENT_WITH_ACCELERATION(mouse_report->x);
+ mouse_report->y = DISPLACEMENT_WITH_ACCELERATION(mouse_report->y);
}
-#endif
+}
-/* If Mousekeys is disabled, then use handle the mouse button
- * keycodes. This makes things simpler, and allows usage of
- * the keycodes in a consistent manner. But only do this if
- * Mousekeys is not enable, so it's not handled twice.
+report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) {
+ pointing_device_task_charybdis(&mouse_report);
+ mouse_report = pointing_device_task_user(mouse_report);
+
+ return mouse_report;
+}
+
+# if defined(POINTING_DEVICE_ENABLE) && !defined(NO_CHARYBDIS_KEYCODES)
+/** \brief Whether SHIFT mod is enabled. */
+static bool has_shift_mod(void) {
+# ifdef NO_ACTION_ONESHOT
+ return mod_config(get_mods()) & MOD_MASK_SHIFT;
+# else
+ return mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
+# endif // NO_ACTION_ONESHOT
+}
+# endif // POINTING_DEVICE_ENABLE && !NO_CHARYBDIS_KEYCODES
+
+/**
+ * \brief Outputs the Charybdis configuration to console.
+ *
+ * Prints the in-memory configuration structure to console, for debugging.
+ * Includes:
+ * - raw value
+ * - drag-scroll: on/off
+ * - sniping: on/off
+ * - default DPI: internal table index/actual DPI
+ * - sniping DPI: internal table index/actual DPI
*/
-#ifndef MOUSEKEY_ENABLE
+static void debug_charybdis_config_to_console(charybdis_config_t* config) {
+# ifdef CONSOLE_ENABLE
+ dprintf("(charybdis) process_record_kb: config = {\n"
+ "\traw = 0x%04X,\n"
+ "\t{\n"
+ "\t\tis_dragscroll_enabled=%b\n"
+ "\t\tis_sniping_enabled=%b\n"
+ "\t\tdefault_dpi=0x%02X (%ld)\n"
+ "\t\tsniping_dpi=0x%01X (%ld)\n"
+ "\t}\n"
+ "}\n",
+ config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config));
+# endif // CONSOLE_ENABLE
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
+ if (!process_record_user(keycode, record)) {
+ debug_charybdis_config_to_console(&g_charybdis_config);
+ return false;
+ }
+# ifndef NO_CHARYBDIS_KEYCODES
+ switch (keycode) {
+ case POINTER_DEFAULT_DPI_FORWARD:
+ if (record->event.pressed) {
+ // Step backward if shifted, forward otherwise.
+ charybdis_cycle_pointer_default_dpi(/* forward= */ !has_shift_mod());
+ }
+ break;
+ case POINTER_DEFAULT_DPI_REVERSE:
+ if (record->event.pressed) {
+ // Step forward if shifted, backward otherwise.
+ charybdis_cycle_pointer_default_dpi(/* forward= */ has_shift_mod());
+ }
+ break;
+ case POINTER_SNIPING_DPI_FORWARD:
+ if (record->event.pressed) {
+ // Step backward if shifted, forward otherwise.
+ charybdis_cycle_pointer_sniping_dpi(/* forward= */ !has_shift_mod());
+ }
+ break;
+ case POINTER_SNIPING_DPI_REVERSE:
+ if (record->event.pressed) {
+ // Step forward if shifted, backward otherwise.
+ charybdis_cycle_pointer_sniping_dpi(/* forward= */ has_shift_mod());
+ }
+ break;
+ case SNIPING_MODE:
+ charybdis_set_pointer_sniping_enabled(record->event.pressed);
+ break;
+ case SNIPING_MODE_TOGGLE:
+ if (record->event.pressed) {
+ charybdis_set_pointer_sniping_enabled(!charybdis_get_pointer_sniping_enabled());
+ }
+ break;
+ case DRAGSCROLL_MODE:
+ charybdis_set_pointer_dragscroll_enabled(record->event.pressed);
+ break;
+ case DRAGSCROLL_MODE_TOGGLE:
+ if (record->event.pressed) {
+ charybdis_set_pointer_dragscroll_enabled(!charybdis_get_pointer_dragscroll_enabled());
+ }
+ break;
+ }
+# endif // !NO_CHARYBDIS_KEYCODES
+# ifndef MOUSEKEY_ENABLE
+ // Simulate mouse keys if full support is not enabled (reduces firmware size
+ // while maintaining support for mouse keys).
if (IS_MOUSEKEY_BUTTON(keycode)) {
- report_mouse_t currentReport = pointing_device_get_report();
- currentReport.buttons = pointing_device_handle_buttons(currentReport.buttons, record->event.pressed, keycode - KC_MS_BTN1);
- pointing_device_set_report(currentReport);
+ report_mouse_t mouse_report = pointing_device_get_report();
+ mouse_report.buttons = pointing_device_handle_buttons(mouse_report.buttons, record->event.pressed, keycode - KC_MS_BTN1);
+ pointing_device_set_report(mouse_report);
pointing_device_send();
}
-#endif
-
+# endif // !MOUSEKEY_ENABLE
+ debug_charybdis_config_to_console(&g_charybdis_config);
return true;
}
-__attribute__((weak)) void keyboard_pre_init_sync(void) {}
-__attribute__((weak)) void keyboard_pre_init_sub(void) {}
-void keyboard_pre_init_kb(void) {
- // debug_enable = true;
- // debug_matrix = true;
- // debug_mouse = true;
- // debug_encoder = true;
- // This is the debug LED.
-#if defined(DEBUG_LED_PIN)
- setPinOutput(DEBUG_LED_PIN);
- writePin(DEBUG_LED_PIN, !debug_enable);
-#endif
-
- keyboard_pre_init_sub();
- keyboard_pre_init_sync();
- keyboard_pre_init_user();
+void eeconfig_init_kb(void) {
+ g_charybdis_config.raw = 0;
+ write_charybdis_config_to_eeprom(&g_charybdis_config);
+ maybe_update_pointing_device_cpi(&g_charybdis_config);
+ eeconfig_init_user();
}
-__attribute__((weak)) void keyboard_post_init_sync(void) {}
-void keyboard_post_init_kb(void) {
- keyboard_post_init_sync();
- keyboard_post_init_user();
+void matrix_power_up(void) { pointing_device_task(); }
+
+void charybdis_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
+ if (initiator2target_buffer_size == sizeof(g_charybdis_config)) {
+ memcpy(&g_charybdis_config, initiator2target_buffer, sizeof(g_charybdis_config));
+ }
}
-#ifdef POINTING_DEVICE_ENABLE
-void pointing_device_init_kb(void) {
- trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);
- pointing_device_init_user();
+void keyboard_post_init_kb(void) {
+ transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, charybdis_config_sync_handler);
+
+ keyboard_post_init_user();
}
-report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) {
+void housekeeping_task_kb(void) {
if (is_keyboard_master()) {
- mouse_report = pointing_device_task_user(mouse_report);
+ // Keep track of the last state, so that we can tell if we need to propagate to slave
+ static charybdis_config_t last_charybdis_config = {0};
+ static uint32_t last_sync = 0;
+ bool needs_sync = false;
+
+ // Check if the state values are different
+ if (memcmp(&g_charybdis_config, &last_charybdis_config, sizeof(g_charybdis_config))) {
+ needs_sync = true;
+ memcpy(&last_charybdis_config, &g_charybdis_config, sizeof(g_charybdis_config));
+ }
+ // Send to slave every 500ms regardless of state change
+ if (timer_elapsed32(last_sync) > 500) {
+ needs_sync = true;
+ }
+
+ // Perform the sync if requested
+ if (needs_sync) {
+ if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(g_charybdis_config), &g_charybdis_config)) {
+ last_sync = timer_read32();
+ }
+ }
}
- return mouse_report;
+ // no need for user function, is called already
}
-#endif
-void eeconfig_init_kb(void) {
- keyboard_config.dpi_config = TRACKBALL_DPI_DEFAULT;
-#ifdef POINTING_DEVICE_ENABLE
- trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);
-#endif
- eeconfig_update_kb(keyboard_config.raw);
- eeconfig_init_user();
-}
+#endif // POINTING_DEVICE_ENABLE
__attribute__((weak)) void matrix_init_sub_kb(void) {}
void matrix_init_kb(void) {
- // is safe to just read DPI setting since matrix init
- // comes before pointing device init.
- keyboard_config.raw = eeconfig_read_kb();
- if (keyboard_config.dpi_config > DPI_OPTION_SIZE) {
- eeconfig_init_kb();
- }
+#ifdef POINTING_DEVICE_ENABLE
+ read_charybdis_config_from_eeprom(&g_charybdis_config);
+#endif // POINTING_DEVICE_ENABLE
matrix_init_sub_kb();
matrix_init_user();
}
@@ -134,13 +389,3 @@ void matrix_scan_kb(void) {
matrix_scan_sub_kb();
matrix_scan_user();
}
-
-__attribute__((weak)) void housekeeping_task_sync(void) {}
-void housekeeping_task_kb(void) {
- housekeeping_task_sync();
- // no need for user function, is called already
-}
-
-#ifdef POINTING_DEVICE_ENABLE
-void matrix_power_up(void) { pointing_device_task(); }
-#endif
diff --git a/keyboards/handwired/tractyl_manuform/tractyl_manuform.h b/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
index c3acade6f1..197aee985e 100644
--- a/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
+++ b/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
@@ -17,7 +17,6 @@
#pragma once
#include "quantum.h"
-#include "pointing_device.h"
#if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right)
# include "5x6_right.h"
@@ -25,30 +24,100 @@
# include "4x6_right.h"
#endif
-typedef union {
- uint32_t raw;
- struct {
- uint8_t dpi_config;
- };
-} keyboard_config_t;
-
-extern keyboard_config_t keyboard_config;
-
-enum ploopy_keycodes {
- DPI_CONFIG = SAFE_RANGE,
+#ifdef POINTING_DEVICE_ENABLE
+# ifndef NO_CHARYBDIS_KEYCODES
+enum charybdis_keycodes {
+# ifdef VIA_ENABLE
+ POINTER_DEFAULT_DPI_FORWARD = USER00,
+# else
+ POINTER_DEFAULT_DPI_FORWARD = SAFE_RANGE,
+# endif // VIA_ENABLE
+ POINTER_DEFAULT_DPI_REVERSE,
+ POINTER_SNIPING_DPI_FORWARD,
+ POINTER_SNIPING_DPI_REVERSE,
+ SNIPING_MODE,
+ SNIPING_MODE_TOGGLE,
+ DRAGSCROLL_MODE,
+ DRAGSCROLL_MODE_TOGGLE,
KEYMAP_SAFE_RANGE,
};
+# define CHARYBDIS_SAFE_RANGE KEYMAP_SAFE_RANGE
+# define DPI_MOD POINTER_DEFAULT_DPI_FORWARD
+# define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE
+# define S_D_MOD POINTER_SNIPING_DPI_FORWARD
+# define S_D_RMOD POINTER_SNIPING_DPI_REVERSE
+# define SNIPING SNIPING_MODE
+# define SNP_TOG SNIPING_MODE_TOGGLE
+# define DRGSCRL DRAGSCROLL_MODE
+# define DRG_TOG DRAGSCROLL_MODE_TOGGLE
+# endif // !NO_CHARYBDIS_KEYCODES
-typedef struct {
- uint16_t device_cpi;
-} kb_config_data_t;
+/** \brief Return the current DPI value for the pointer's default mode. */
+uint16_t charybdis_get_pointer_default_dpi(void);
-extern kb_config_data_t kb_config;
+/**
+ * \brief Update the pointer's default DPI to the next or previous step.
+ *
+ * Increases the DPI value if `forward` is `true`, decreases it otherwise.
+ * The increment/decrement steps are equal to CHARYBDIS_DEFAULT_DPI_CONFIG_STEP.
+ *
+ * The new value is persisted in EEPROM.
+ */
+void charybdis_cycle_pointer_default_dpi(bool forward);
+
+/**
+ * \brief Same as `charybdis_cycle_pointer_default_dpi`, but do not write to
+ * EEPROM.
+ *
+ * This means that reseting the board will revert the value to the last
+ * persisted one.
+ */
+void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward);
+
+/** \brief Return the current DPI value for the pointer's sniper-mode. */
+uint16_t charybdis_get_pointer_sniping_dpi(void);
+
+/**
+ * \brief Update the pointer's sniper-mode DPI to the next or previous step.
+ *
+ * Increases the DPI value if `forward` is `true`, decreases it otherwise.
+ * The increment/decrement steps are equal to CHARYBDIS_SNIPING_DPI_CONFIG_STEP.
+ *
+ * The new value is persisted in EEPROM.
+ */
+void charybdis_cycle_pointer_sniping_dpi(bool forward);
+
+/**
+ * \brief Same as `charybdis_cycle_pointer_sniping_dpi`, but do not write to
+ * EEPROM.
+ *
+ * This means that reseting the board will revert the value to the last
+ * persisted one.
+ */
+void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward);
+
+/** \brief Whether sniper-mode is enabled. */
+bool charybdis_get_pointer_sniping_enabled(void);
+
+/**
+ * \brief Enable/disable sniper mode.
+ *
+ * When sniper mode is enabled the dpi is reduced to slow down the pointer for
+ * more accurate movements.
+ */
+void charybdis_set_pointer_sniping_enabled(bool enable);
+
+/** \brief Whether drag-scroll is enabled. */
+bool charybdis_get_pointer_dragscroll_enabled(void);
+
+/**
+ * \brief Enable/disable drag-scroll mode.
+ *
+ * When drag-scroll mode is enabled, horizontal and vertical pointer movements
+ * are translated into horizontal and vertical scroll movements.
+ */
+void charybdis_set_pointer_dragscroll_enabled(bool enable);
+#endif // POINTING_DEVICE_ENABLE
-void trackball_set_cpi(uint16_t cpi);
void matrix_init_sub_kb(void);
void matrix_scan_sub_kb(void);
-
-void keyboard_pre_init_sync(void);
-void keyboard_post_init_sync(void);
-void housekeeping_task_sync(void);
diff --git a/keyboards/handwired/twadlee/tp69/rules.mk b/keyboards/handwired/twadlee/tp69/rules.mk
index 216e797c4b..a1c290cf15 100644
--- a/keyboards/handwired/twadlee/tp69/rules.mk
+++ b/keyboards/handwired/twadlee/tp69/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = MKL26Z64
+# Bootloader selection
+BOOTLOADER = halfkay
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/handwired/wakizashi40/config.h b/keyboards/handwired/wakizashi40/config.h
new file mode 100644
index 0000000000..78f85f2197
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2021 xiao (@xia0)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+#define DYNAMIC_KEYMAP_LAYER_COUNT 12
diff --git a/keyboards/handwired/wakizashi40/info.json b/keyboards/handwired/wakizashi40/info.json
new file mode 100644
index 0000000000..b64ab55116
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/info.json
@@ -0,0 +1,88 @@
+{
+ "manufacturer": "fumbucker",
+ "keyboard_name": "Wakizashi 40",
+ "maintainer": "fumbucker",
+ "debounce": 5,
+ "processor": "at90usb1286",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "audio": false,
+ "backlight": false,
+ "bluetooth": false,
+ "bootmagic": true,
+ "command": false,
+ "console": true,
+ "extrakey": true,
+ "midi": false,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": false,
+ "unicode": false
+ },
+ "matrix_pins": {
+ "cols": ["C5", "C4", "D2", "D3", "D4", "D5", "C6", "D7", "B0", "B1", "B2", "B3", "B4"],
+ "rows": ["C0", "C1", "C2", "C3"]
+ },
+ "usb": {
+ "device_ver": "0x0001",
+ "pid": "0x7740",
+ "vid": "0x6662"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "TAB", "matrix": [0, 0], "w": 1.5, "x": 0, "y": 0 },
+ { "label": "Q", "matrix": [0, 2], "w": 1, "x": 1.5, "y": 0 },
+ { "label": "W", "matrix": [0, 3], "w": 1, "x": 2.5, "y": 0 },
+ { "label": "E", "matrix": [0, 4], "w": 1, "x": 3.5, "y": 0 },
+ { "label": "R", "matrix": [0, 5], "w": 1, "x": 4.5, "y": 0 },
+ { "label": "T", "matrix": [0, 6], "w": 1, "x": 5.5, "y": 0 },
+ { "label": "Y", "matrix": [0, 7], "w": 1, "x": 6.5, "y": 0 },
+ { "label": "U", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 },
+ { "label": "I", "matrix": [0, 9], "w": 1, "x": 8.5, "y": 0 },
+ { "label": "O", "matrix": [0, 10], "w": 1, "x": 9.5, "y": 0 },
+ { "label": "P", "matrix": [0, 11], "w": 1, "x": 10.5, "y": 0 },
+ { "label": "BACKSPACE", "matrix": [0, 12], "w": 1.5, "x": 11.5, "y": 0 },
+
+ { "label": "CAPSLOCK", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 },
+ { "label": "A", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 },
+ { "label": "S", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 },
+ { "label": "D", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 },
+ { "label": "F", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 },
+ { "label": "G", "matrix": [1, 5], "w": 1, "x": 5.75, "y": 1 },
+ { "label": "H", "matrix": [1, 7], "w": 1, "x": 6.75, "y": 1 },
+ { "label": "J", "matrix": [1, 8], "w": 1, "x": 7.75, "y": 1 },
+ { "label": "K", "matrix": [1, 9], "w": 1, "x": 8.75, "y": 1 },
+ { "label": "L", "matrix": [1, 10], "w": 1, "x": 9.75, "y": 1 },
+ { "label": "SEMICOLON", "matrix": [1, 11], "w": 1, "x": 10.75, "y": 1 },
+ { "label": "ENTER", "matrix": [1, 12], "w": 1.25, "x": 11.75, "y": 1 },
+
+ { "label": "LSHIFT", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 },
+ { "label": "Z", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 },
+ { "label": "X", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 },
+ { "label": "C", "matrix": [2, 3], "w": 1, "x": 3, "y": 2 },
+ { "label": "V", "matrix": [2, 4], "w": 1, "x": 4, "y": 2 },
+ { "label": "B", "matrix": [2, 5], "w": 1, "x": 5, "y": 2 },
+ { "label": "ESCAPE", "matrix": [2, 6], "w": 1, "x": 6, "y": 2 },
+ { "label": "N", "matrix": [2, 7], "w": 1, "x": 7, "y": 2 },
+ { "label": "M", "matrix": [2, 8], "w": 1, "x": 8, "y": 2 },
+ { "label": "COMMA", "matrix": [2, 9], "w": 1, "x": 9, "y": 2 },
+ { "label": "PERIOD", "matrix": [2, 10], "w": 1, "x": 10, "y": 2 },
+ { "label": "SLASH", "matrix": [2, 11], "w": 1, "x": 11, "y": 2 },
+ { "label": "RSHIFT", "matrix": [2, 12], "w": 1, "x": 12, "y": 2 },
+
+ { "label": "LCTRL", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "label": "LWIN", "matrix": [3, 1], "w": 1.25, "x": 1.25, "y": 3 },
+ { "label": "LALT", "matrix": [3, 3], "w": 1.25, "x": 2.5, "y": 3 },
+ { "label": "SPACE1", "matrix": [3, 5], "w": 2.75, "x": 3.75, "y": 3 },
+ { "label": "SPACE2", "matrix": [3, 7], "w": 2.75, "x": 6.5, "y": 3 },
+ { "label": "RALT", "matrix": [3, 9], "w": 1.25, "x": 9.25, "y": 3 },
+ { "label": "MENU", "matrix": [3, 11], "w": 1.25, "x": 10.5, "y": 3 },
+ { "label": "RCTRL", "matrix": [3, 12], "w": 1.25, "x": 11.75, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/wakizashi40/keymaps/default/keymap.c b/keyboards/handwired/wakizashi40/keymaps/default/keymap.c
new file mode 100644
index 0000000000..910e5bde12
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/keymaps/default/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2021 xiao (@xia0)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(2, KC_SPC), KC_LALT, KC_MENU, KC_LCTL),
+
+ [1] = LAYOUT_all(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ MO(3), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_TRNS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+ MO(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/handwired/wakizashi40/keymaps/via/keymap.c b/keyboards/handwired/wakizashi40/keymaps/via/keymap.c
new file mode 100644
index 0000000000..d456b8b40a
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/keymaps/via/keymap.c
@@ -0,0 +1,92 @@
+/* Copyright 2021 xiao (@xia0)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(2, KC_SPC), KC_LALT, KC_MENU, KC_LCTL),
+
+ [1] = LAYOUT_all(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ MO(11), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_TRNS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+ MO(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [4] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [5] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [6] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [7] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [8] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [9] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [10] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [11] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/handwired/wakizashi40/keymaps/via/rules.mk b/keyboards/handwired/wakizashi40/keymaps/via/rules.mk
new file mode 100644
index 0000000000..7a49719505
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+# rules.mk overrides to enable VIA
+
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/handwired/wakizashi40/readme.md b/keyboards/handwired/wakizashi40/readme.md
new file mode 100644
index 0000000000..d94a75651c
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/readme.md
@@ -0,0 +1,19 @@
+# Wakizashi 40
+
+![Wakizashi40](https://cdn.thingiverse.com/renders/51/50/81/13/a9/7078248666f70b422127c6662cf79563_preview_featured.jpg)
+
+Reverse stagger 40% keyboard based on the Katana 60.
+
+* Keyboard Maintainer: [fumbucker](https://github.com/xia0)
+* Hardware Supported: Teensy2++
+* Hardware Availability: [thingiverse](https://www.thingiverse.com/thing:3467930)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/wakizashi40:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+## Bootloader
+
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available (Capslock + R).
diff --git a/keyboards/handwired/wakizashi40/rules.mk b/keyboards/handwired/wakizashi40/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/handwired/wakizashi40/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/hecomi/readme.md b/keyboards/hecomi/readme.md
deleted file mode 100644
index 79a80f35e5..0000000000
--- a/keyboards/hecomi/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# hecomi
-
-![hecomi](https://imgur.com/a/5AwQw0r)
-
-This keyboard based on HHKB pro 2 and physical layout designed by @hecomi and @takashiski.
-
-This keyboard use 2 pro micro's, but you can use USB type-c. There are hand wiring .
-
-Keyboard Maintainer: [takashiski](https://github.com/takashiski)
-Hardware Supported: hecomi_alpha, promicro
-Hardware Availability: booth(@skyhigh_works)
-
-Make example for this keyboard (after setting up your build environment):
-
- make hecomi/alpha:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/hecomi/rules.mk b/keyboards/hecomi/rules.mk
deleted file mode 100644
index b570db0d06..0000000000
--- a/keyboards/hecomi/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# 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 = yes # Console for debug
-COMMAND_ENABLE = yes # 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
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = hecomi/alpha
diff --git a/keyboards/helix/pico/matrix.c b/keyboards/helix/pico/matrix.c
index b18213d846..039cca6dcf 100644
--- a/keyboards/helix/pico/matrix.c
+++ b/keyboards/helix/pico/matrix.c
@@ -273,12 +273,6 @@ void matrix_slave_scan(void) {
#endif
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/helix/rev1/matrix.c b/keyboards/helix/rev1/matrix.c
index aa2cc76905..f59391b596 100644
--- a/keyboards/helix/rev1/matrix.c
+++ b/keyboards/helix/rev1/matrix.c
@@ -239,12 +239,6 @@ void matrix_slave_scan(void) {
#endif
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c
index 8eed7e58b7..699c15358b 100644
--- a/keyboards/helix/rev2/matrix.c
+++ b/keyboards/helix/rev2/matrix.c
@@ -287,12 +287,6 @@ void matrix_slave_scan(void) {
#endif
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/hhkb/ansi/matrix.c b/keyboards/hhkb/ansi/matrix.c
index 529ba8b8fc..5dde74cce9 100644
--- a/keyboards/hhkb/ansi/matrix.c
+++ b/keyboards/hhkb/ansi/matrix.c
@@ -163,15 +163,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix[i] != matrix_prev[i])
- return true;
- }
- return false;
-}
-
inline
bool matrix_has_ghost(void)
{
diff --git a/keyboards/hhkb/ansi/post_rules.mk b/keyboards/hhkb/ansi/post_rules.mk
index bc6ad5cd4c..eb9a8f0adb 100644
--- a/keyboards/hhkb/ansi/post_rules.mk
+++ b/keyboards/hhkb/ansi/post_rules.mk
@@ -4,14 +4,14 @@ OPT_DEFS += -DHHKB_RN42_ENABLE
# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
# HHKB Alt controller.
-RN42_DIR = ../rn42
+RN42_DIR = keyboards/hhkb/rn42
SRC += serial_uart.c \
- ../rn42/suart.S \
- ../rn42/rn42.c \
- ../rn42/rn42_task.c \
- ../rn42/battery.c \
- ../rn42/main.c
+ suart.S \
+ rn42.c \
+ rn42_task.c \
+ battery.c \
+ main.c
VPATH += $(RN42_DIR)
diff --git a/keyboards/hhkb/jp/matrix.c b/keyboards/hhkb/jp/matrix.c
index c0dca6a990..81db77fca7 100644
--- a/keyboards/hhkb/jp/matrix.c
+++ b/keyboards/hhkb/jp/matrix.c
@@ -164,15 +164,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix[i] != matrix_prev[i])
- return true;
- }
- return false;
-}
-
inline
bool matrix_has_ghost(void)
{
diff --git a/keyboards/hhkb/jp/post_rules.mk b/keyboards/hhkb/jp/post_rules.mk
index bc6ad5cd4c..eb9a8f0adb 100644
--- a/keyboards/hhkb/jp/post_rules.mk
+++ b/keyboards/hhkb/jp/post_rules.mk
@@ -4,14 +4,14 @@ OPT_DEFS += -DHHKB_RN42_ENABLE
# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
# HHKB Alt controller.
-RN42_DIR = ../rn42
+RN42_DIR = keyboards/hhkb/rn42
SRC += serial_uart.c \
- ../rn42/suart.S \
- ../rn42/rn42.c \
- ../rn42/rn42_task.c \
- ../rn42/battery.c \
- ../rn42/main.c
+ suart.S \
+ rn42.c \
+ rn42_task.c \
+ battery.c \
+ main.c
VPATH += $(RN42_DIR)
diff --git a/keyboards/hid_liber/matrix.c b/keyboards/hid_liber/matrix.c
deleted file mode 100755
index ff59a17153..0000000000
--- a/keyboards/hid_liber/matrix.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Copyright 2012 Jun Wako <wakojun@gmail.com>: TMK Matrix
- * Copyright 2018 bakageta <amo@bakageta.com>
- *
- * This is heavily based on hid_liber/board.{c|h}.
- * https://github.com/BathroomEpiphanies/AVR-Keyboard
- *
- * Copyright (c) 2012 Fredrik Atmer, Bathroom Epiphanies Inc
- * http://bathroomepiphanies.com
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include <util/delay.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-static uint8_t debouncing = DEBOUNCE;
-
-// bit array of key state(1:on, 0:off)
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-
-#define _DDRA (uint8_t *const)&DDRA
-#define _DDRB (uint8_t *const)&DDRB
-#define _DDRC (uint8_t *const)&DDRC
-#define _DDRD (uint8_t *const)&DDRD
-#define _DDRE (uint8_t *const)&DDRE
-#define _DDRF (uint8_t *const)&DDRF
-
-#define _PINA (uint8_t *const)&PINA
-#define _PINB (uint8_t *const)&PINB
-#define _PINC (uint8_t *const)&PINC
-#define _PIND (uint8_t *const)&PIND
-#define _PINE (uint8_t *const)&PINE
-#define _PINF (uint8_t *const)&PINF
-
-#define _PORTA (uint8_t *const)&PORTA
-#define _PORTB (uint8_t *const)&PORTB
-#define _PORTC (uint8_t *const)&PORTC
-#define _PORTD (uint8_t *const)&PORTD
-#define _PORTE (uint8_t *const)&PORTE
-#define _PORTF (uint8_t *const)&PORTF
-
-#define _BIT0 0x01
-#define _BIT1 0x02
-#define _BIT2 0x04
-#define _BIT3 0x08
-#define _BIT4 0x10
-#define _BIT5 0x20
-#define _BIT6 0x40
-#define _BIT7 0x80
-
-/* Specifies the ports and pin numbers for the rows */
-static
-uint8_t *const row_ddr[MATRIX_ROWS] = {
- _DDRB, _DDRB,
- _DDRC, _DDRC,
- _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD,
- _DDRF, _DDRF, _DDRF, _DDRF, _DDRF, _DDRF};
-
-static
-uint8_t *const row_port[MATRIX_ROWS] = {
- _PORTB, _PORTB,
- _PORTC, _PORTC,
- _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD,
- _PORTF, _PORTF, _PORTF, _PORTF, _PORTF, _PORTF};
-
-static
-uint8_t *const row_pin[MATRIX_ROWS] = {
- _PINB, _PINB,
- _PINC, _PINC,
- _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND,
- _PINF, _PINF, _PINF, _PINF, _PINF, _PINF};
-
-static
-const uint8_t row_bit[MATRIX_ROWS] = {
- _BIT4, _BIT7,
- _BIT6, _BIT7,
- _BIT0, _BIT1, _BIT2, _BIT3, _BIT4, _BIT5, _BIT6, _BIT7,
- _BIT0, _BIT1, _BIT4, _BIT5, _BIT6, _BIT7};
-
-static
-const uint8_t mask = 0x0E;
-
-/* Specifies the ports and pin numbers for the columns */
-static
-const uint8_t col_bit[MATRIX_COLS] = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E};
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-static
-inline void pull_column(int col) {
- PORTB = col_bit[col] | (PORTB & ~mask);
-}
-
-static
-inline void release_column(int col) {
-}
-
-/* PORTB is set as input with pull-up resistors
- PORTC,D,E,F are set to high output */
-static
-void setup_io_pins(void) {
- uint8_t row;
- DDRB |= 0x0E;
- PORTB &= ~0x0E;
- for(row = 0; row < MATRIX_ROWS; row++) {
- *row_ddr[row] &= ~row_bit[row];
- *row_port[row] &= ~row_bit[row];
- }
-}
-
-static
-void setup_leds(void) {
- DDRB |= 0x60;
- PORTB |= 0x60;
-}
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- // initialize row and col
- setup_io_pins();
- setup_leds();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- for (uint8_t col = 0; col < MATRIX_COLS; col++) { // 0-7
- pull_column(col); // output hi on theline
- _delay_us(5); // without this wait it won't read stable value.
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) { // 0-17
- bool prev_bit = matrix_debouncing[row] & (1<<col);
- bool curr_bit = *row_pin[row] & row_bit[row];
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
- if (debouncing) {
- dprintf("bounce!: %02X\n", debouncing);
- }
- debouncing = DEBOUNCE;
- }
- }
- release_column(col);
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- // NOTE: no longer used
- return true;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse8(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- for (uint8_t j = 0; j < MATRIX_COLS; j++) {
- if (matrix_is_on(i, j))
- count++;
- }
- }
- return count;
-}
diff --git a/keyboards/hid_liber/readme.md b/keyboards/hid_liber/readme.md
deleted file mode 100755
index d70ace123d..0000000000
--- a/keyboards/hid_liber/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# HID Liberation Device
-
-DIY daughterboard for Filco Majestouch TKL developed by Geekhack and Deskthority communities. The PCB was engineered by bpiphany.
-
-## Wiki on Deskthority.net
-- [Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_Instructions)
-- [Assembly Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions)
-
-* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
-* Hardware Supported: HID Liberation Device (ATmega32U4)
-* Hardware Availability: Discontinued
-
-Make example for this keyboard (after setting up your build environment):
-
- make hid_liber:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/freyr/config.h b/keyboards/hnahkb/freyr/config.h
index d912b3cc1a..d912b3cc1a 100644
--- a/keyboards/freyr/config.h
+++ b/keyboards/hnahkb/freyr/config.h
diff --git a/keyboards/freyr/freyr.c b/keyboards/hnahkb/freyr/freyr.c
index a856521e7f..a856521e7f 100644
--- a/keyboards/freyr/freyr.c
+++ b/keyboards/hnahkb/freyr/freyr.c
diff --git a/keyboards/freyr/freyr.h b/keyboards/hnahkb/freyr/freyr.h
index ce41dfd255..ce41dfd255 100644
--- a/keyboards/freyr/freyr.h
+++ b/keyboards/hnahkb/freyr/freyr.h
diff --git a/keyboards/freyr/info.json b/keyboards/hnahkb/freyr/info.json
index e2b1c6c2c0..e2b1c6c2c0 100644
--- a/keyboards/freyr/info.json
+++ b/keyboards/hnahkb/freyr/info.json
diff --git a/keyboards/freyr/keymaps/default/keymap.c b/keyboards/hnahkb/freyr/keymaps/default/keymap.c
index f7ade501fb..f7ade501fb 100644
--- a/keyboards/freyr/keymaps/default/keymap.c
+++ b/keyboards/hnahkb/freyr/keymaps/default/keymap.c
diff --git a/keyboards/freyr/keymaps/default/readme.md b/keyboards/hnahkb/freyr/keymaps/default/readme.md
index dfb2794c66..dfb2794c66 100644
--- a/keyboards/freyr/keymaps/default/readme.md
+++ b/keyboards/hnahkb/freyr/keymaps/default/readme.md
diff --git a/keyboards/hnahkb/freyr/readme.md b/keyboards/hnahkb/freyr/readme.md
new file mode 100644
index 0000000000..93df05b475
--- /dev/null
+++ b/keyboards/hnahkb/freyr/readme.md
@@ -0,0 +1,20 @@
+# freyr
+
+![Freyr](https://i.imgur.com/MeOrzoIl.jpg)
+
+Freyr is a tenkeyless keyboard, support ansi and iso layout.
+
+[Full layout here](http://www.keyboard-layout-editor.com/#/gists/438ef0c58c46ec28c80d9894ffcff177)
+
+* Keyboard Maintainer: [HnahKB](https://github.com/vuhopkep)
+* Hardware Supported: Freyr.revB PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hnahkb/freyr:default
+
+Flashing example for this keyboard:
+
+ make hnahkb/freyr:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/freyr/rules.mk b/keyboards/hnahkb/freyr/rules.mk
index 063d967a7f..063d967a7f 100644
--- a/keyboards/freyr/rules.mk
+++ b/keyboards/hnahkb/freyr/rules.mk
diff --git a/keyboards/stella/config.h b/keyboards/hnahkb/stella/config.h
index 512b7571d5..512b7571d5 100644
--- a/keyboards/stella/config.h
+++ b/keyboards/hnahkb/stella/config.h
diff --git a/keyboards/stella/info.json b/keyboards/hnahkb/stella/info.json
index da36b6b264..da36b6b264 100644
--- a/keyboards/stella/info.json
+++ b/keyboards/hnahkb/stella/info.json
diff --git a/keyboards/stella/keymaps/default/keymap.c b/keyboards/hnahkb/stella/keymaps/default/keymap.c
index d8a8f47ba6..d8a8f47ba6 100644
--- a/keyboards/stella/keymaps/default/keymap.c
+++ b/keyboards/hnahkb/stella/keymaps/default/keymap.c
diff --git a/keyboards/stella/keymaps/default/readme.md b/keyboards/hnahkb/stella/keymaps/default/readme.md
index fa9cd4a555..fa9cd4a555 100644
--- a/keyboards/stella/keymaps/default/readme.md
+++ b/keyboards/hnahkb/stella/keymaps/default/readme.md
diff --git a/keyboards/hnahkb/stella/readme.md b/keyboards/hnahkb/stella/readme.md
new file mode 100644
index 0000000000..32481d9d09
--- /dev/null
+++ b/keyboards/hnahkb/stella/readme.md
@@ -0,0 +1,19 @@
+# stella
+
+![stella](https://i.imgur.com/jaiG578l.jpg)
+
+A custom keyboard design for VGS community
+
+* Keyboard Maintainer: [HnahKB](https://github.com/vuhopkep)
+* Hardware Supported: Stella Keyboard
+* Hardware Availability: [VGS](https://www.facebook.com/groups/vietnamgamingsetup/permalink/2403066473102277)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hnahkb/stella:default
+
+Flashing example for this keyboard:
+
+ make hnahkb/stella:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/stella/rules.mk b/keyboards/hnahkb/stella/rules.mk
index 1632d897c7..1632d897c7 100644
--- a/keyboards/stella/rules.mk
+++ b/keyboards/hnahkb/stella/rules.mk
diff --git a/keyboards/stella/stella.c b/keyboards/hnahkb/stella/stella.c
index 5eb55b3668..5eb55b3668 100644
--- a/keyboards/stella/stella.c
+++ b/keyboards/hnahkb/stella/stella.c
diff --git a/keyboards/stella/stella.h b/keyboards/hnahkb/stella/stella.h
index ce41dfd255..ce41dfd255 100644
--- a/keyboards/stella/stella.h
+++ b/keyboards/hnahkb/stella/stella.h
diff --git a/keyboards/vn66/config.h b/keyboards/hnahkb/vn66/config.h
index d809541841..d809541841 100644
--- a/keyboards/vn66/config.h
+++ b/keyboards/hnahkb/vn66/config.h
diff --git a/keyboards/vn66/info.json b/keyboards/hnahkb/vn66/info.json
index a1063ce993..a1063ce993 100644
--- a/keyboards/vn66/info.json
+++ b/keyboards/hnahkb/vn66/info.json
diff --git a/keyboards/vn66/keymaps/default/keymap.c b/keyboards/hnahkb/vn66/keymaps/default/keymap.c
index 6b5bb083d3..6b5bb083d3 100644
--- a/keyboards/vn66/keymaps/default/keymap.c
+++ b/keyboards/hnahkb/vn66/keymaps/default/keymap.c
diff --git a/keyboards/vn66/keymaps/default/readme.md b/keyboards/hnahkb/vn66/keymaps/default/readme.md
index f6119fbc87..f6119fbc87 100644
--- a/keyboards/vn66/keymaps/default/readme.md
+++ b/keyboards/hnahkb/vn66/keymaps/default/readme.md
diff --git a/keyboards/hnahkb/vn66/readme.md b/keyboards/hnahkb/vn66/readme.md
new file mode 100644
index 0000000000..f917da5ea5
--- /dev/null
+++ b/keyboards/hnahkb/vn66/readme.md
@@ -0,0 +1,19 @@
+# VN66
+
+![vn66](https://i.imgur.com/Eo28suIl.jpg)
+
+A compact 60% keyboard for VNMK
+
+* Keyboard Maintainer: VNMK Community
+* Hardware Supported: VN66 PCB rev.2
+* Hardware Availability: https://geekhack.org/index.php?topic=101754.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hnahkb/vn66:default
+
+Flashing example for this keyboard:
+
+ make hnahkb/vn66:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/vn66/rules.mk b/keyboards/hnahkb/vn66/rules.mk
index f1c1ec985e..f1c1ec985e 100644
--- a/keyboards/vn66/rules.mk
+++ b/keyboards/hnahkb/vn66/rules.mk
diff --git a/keyboards/vn66/vn66.c b/keyboards/hnahkb/vn66/vn66.c
index 5631359040..5631359040 100644
--- a/keyboards/vn66/vn66.c
+++ b/keyboards/hnahkb/vn66/vn66.c
diff --git a/keyboards/vn66/vn66.h b/keyboards/hnahkb/vn66/vn66.h
index c8a356fdba..c8a356fdba 100644
--- a/keyboards/vn66/vn66.h
+++ b/keyboards/hnahkb/vn66/vn66.h
diff --git a/keyboards/honeycomb/config.h b/keyboards/honeycomb/config.h
index 725f9490cb..c959543618 100755
--- a/keyboards/honeycomb/config.h
+++ b/keyboards/honeycomb/config.h
@@ -45,12 +45,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/honeycomb/honeycomb.c b/keyboards/honeycomb/honeycomb.c
index 1254196d39..603400c7a3 100755
--- a/keyboards/honeycomb/honeycomb.c
+++ b/keyboards/honeycomb/honeycomb.c
@@ -7,7 +7,7 @@ void pointing_device_task(void){
uint32_t timeout = 0;
//the m character requests the RF slave to send the mouse report
- SERIAL_UART_DATA = 'm';
+ uart_write('m');
//trust the external inputs completely, erase old data
uint8_t uart_data[5] = {0};
@@ -17,7 +17,7 @@ void pointing_device_task(void){
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while(!uart_available()){
timeout++;
if (timeout > 10000){
xprintf("\r\nTIMED OUT");
@@ -25,7 +25,7 @@ void pointing_device_task(void){
}
}
xprintf("\r\nGOT DATA for %d",i);
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, bytes 1-4 are movement and scroll
diff --git a/keyboards/honeycomb/matrix.c b/keyboards/honeycomb/matrix.c
index 7fef6f0fd8..fe1e4ce8ff 100755
--- a/keyboards/honeycomb/matrix.c
+++ b/keyboards/honeycomb/matrix.c
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "honeycomb.h"
#include "pointing_device.h"
#include "report.h"
-#include "protocol/serial.h"
+#include "uart.h"
#if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n")
@@ -95,7 +95,7 @@ uint8_t matrix_cols(void) {
void matrix_init(void) {
matrix_init_quantum();
- serial_init();
+ uart_init(1000000);
}
uint8_t matrix_scan(void)
@@ -103,7 +103,7 @@ uint8_t matrix_scan(void)
uint32_t timeout = 0;
// The 's' character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
// Trust the external keystates entirely, erase the last data
uint8_t uart_data[4] = {0};
@@ -113,14 +113,14 @@ uint8_t matrix_scan(void)
// Wait for the serial data, timeout if it's been too long
// This only happened in testing with a loose wire, but does no
// harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while(!uart_available()){
timeout++;
if (timeout > 10000){
xprintf("\r\nTime out in keyboard.");
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
// Check for the end packet, it's our checksum.
diff --git a/keyboards/honeycomb/rules.mk b/keyboards/honeycomb/rules.mk
index 2b5eb0360c..420e409e43 100755
--- a/keyboards/honeycomb/rules.mk
+++ b/keyboards/honeycomb/rules.mk
@@ -10,6 +10,7 @@ BOOTLOADER = caterina
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
#MOUSEKEY_ENABLE = yes # Mouse keys
POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+POINTING_DEVICE_DRIVER = custom
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
@@ -18,4 +19,5 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# # project specific files
-SRC += matrix.c serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/alicia_cook/alicia_cook.c b/keyboards/ibnuda/alicia_cook/alicia_cook.c
index 39f17e4a7d..39f17e4a7d 100644
--- a/keyboards/alicia_cook/alicia_cook.c
+++ b/keyboards/ibnuda/alicia_cook/alicia_cook.c
diff --git a/keyboards/alicia_cook/alicia_cook.h b/keyboards/ibnuda/alicia_cook/alicia_cook.h
index 35c803b3ae..35c803b3ae 100644
--- a/keyboards/alicia_cook/alicia_cook.h
+++ b/keyboards/ibnuda/alicia_cook/alicia_cook.h
diff --git a/keyboards/alicia_cook/config.h b/keyboards/ibnuda/alicia_cook/config.h
index 28db5f3420..28db5f3420 100644
--- a/keyboards/alicia_cook/config.h
+++ b/keyboards/ibnuda/alicia_cook/config.h
diff --git a/keyboards/alicia_cook/info.json b/keyboards/ibnuda/alicia_cook/info.json
index c07be77190..c07be77190 100644
--- a/keyboards/alicia_cook/info.json
+++ b/keyboards/ibnuda/alicia_cook/info.json
diff --git a/keyboards/alicia_cook/keymaps/default/keymap.c b/keyboards/ibnuda/alicia_cook/keymaps/default/keymap.c
index c28967f381..c28967f381 100644
--- a/keyboards/alicia_cook/keymaps/default/keymap.c
+++ b/keyboards/ibnuda/alicia_cook/keymaps/default/keymap.c
diff --git a/keyboards/alicia_cook/keymaps/default/readme.md b/keyboards/ibnuda/alicia_cook/keymaps/default/readme.md
index 18f516f6fb..18f516f6fb 100644
--- a/keyboards/alicia_cook/keymaps/default/readme.md
+++ b/keyboards/ibnuda/alicia_cook/keymaps/default/readme.md
diff --git a/keyboards/alicia_cook/keymaps/rick/config.h b/keyboards/ibnuda/alicia_cook/keymaps/rick/config.h
index fc9cdfe786..fc9cdfe786 100644
--- a/keyboards/alicia_cook/keymaps/rick/config.h
+++ b/keyboards/ibnuda/alicia_cook/keymaps/rick/config.h
diff --git a/keyboards/alicia_cook/keymaps/rick/keymap.c b/keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c
index 35e0e1db97..35e0e1db97 100644
--- a/keyboards/alicia_cook/keymaps/rick/keymap.c
+++ b/keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c
diff --git a/keyboards/alicia_cook/keymaps/rick/readme.md b/keyboards/ibnuda/alicia_cook/keymaps/rick/readme.md
index 2bfb2a96fa..2bfb2a96fa 100644
--- a/keyboards/alicia_cook/keymaps/rick/readme.md
+++ b/keyboards/ibnuda/alicia_cook/keymaps/rick/readme.md
diff --git a/keyboards/alicia_cook/keymaps/rick/rules.mk b/keyboards/ibnuda/alicia_cook/keymaps/rick/rules.mk
index 6ecc620954..6ecc620954 100644
--- a/keyboards/alicia_cook/keymaps/rick/rules.mk
+++ b/keyboards/ibnuda/alicia_cook/keymaps/rick/rules.mk
diff --git a/keyboards/ibnuda/alicia_cook/readme.md b/keyboards/ibnuda/alicia_cook/readme.md
new file mode 100644
index 0000000000..f4475cd22e
--- /dev/null
+++ b/keyboards/ibnuda/alicia_cook/readme.md
@@ -0,0 +1,26 @@
+# Alicia Cook
+
+![Alicia Cook](https://raw.githubusercontent.com/ibnuda/alicia-cook/master-of-puppets/alicia-cook.jpg)
+
+40% Alice-style keyboard that can be split and uses IDC connector.
+
+* Keyboard Maintainer: [Ibnu D. Aji](https://github.com/ibnuda)
+* Hardware Supported: [Alicia Cook](https://github.com/ibnuda/alicia-cook)
+* Hardware Availability: [Alicia Cook](https://github.com/ibnuda/alicia-cook)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ibnuda/alicia_cook:default
+
+Flashing example for this keyboard:
+
+ make ibnuda/alicia_cook: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
+
+To enter the bootloader, there's only one way to do it:
+
+* **Keycode in layout**: Hold left spacebar and then tap `B` key in the default keymap.
+
diff --git a/keyboards/alicia_cook/rules.mk b/keyboards/ibnuda/alicia_cook/rules.mk
index f35bef0a63..f35bef0a63 100644
--- a/keyboards/alicia_cook/rules.mk
+++ b/keyboards/ibnuda/alicia_cook/rules.mk
diff --git a/keyboards/gurindam/config.h b/keyboards/ibnuda/gurindam/config.h
index 9262bdbcda..9262bdbcda 100644
--- a/keyboards/gurindam/config.h
+++ b/keyboards/ibnuda/gurindam/config.h
diff --git a/keyboards/gurindam/gurindam.c b/keyboards/ibnuda/gurindam/gurindam.c
index bdca0269c2..bdca0269c2 100644
--- a/keyboards/gurindam/gurindam.c
+++ b/keyboards/ibnuda/gurindam/gurindam.c
diff --git a/keyboards/gurindam/gurindam.h b/keyboards/ibnuda/gurindam/gurindam.h
index 9967bcf528..9967bcf528 100644
--- a/keyboards/gurindam/gurindam.h
+++ b/keyboards/ibnuda/gurindam/gurindam.h
diff --git a/keyboards/gurindam/info.json b/keyboards/ibnuda/gurindam/info.json
index a196f066e0..a196f066e0 100644
--- a/keyboards/gurindam/info.json
+++ b/keyboards/ibnuda/gurindam/info.json
diff --git a/keyboards/gurindam/keymaps/default/keymap.c b/keyboards/ibnuda/gurindam/keymaps/default/keymap.c
index b451bbf050..b451bbf050 100644
--- a/keyboards/gurindam/keymaps/default/keymap.c
+++ b/keyboards/ibnuda/gurindam/keymaps/default/keymap.c
diff --git a/keyboards/gurindam/keymaps/default/readme.md b/keyboards/ibnuda/gurindam/keymaps/default/readme.md
index 52e0c72c53..52e0c72c53 100644
--- a/keyboards/gurindam/keymaps/default/readme.md
+++ b/keyboards/ibnuda/gurindam/keymaps/default/readme.md
diff --git a/keyboards/gurindam/keymaps/via/keymap.c b/keyboards/ibnuda/gurindam/keymaps/via/keymap.c
index 3549a1bdea..3549a1bdea 100644
--- a/keyboards/gurindam/keymaps/via/keymap.c
+++ b/keyboards/ibnuda/gurindam/keymaps/via/keymap.c
diff --git a/keyboards/7skb/keymaps/via/rules.mk b/keyboards/ibnuda/gurindam/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/7skb/keymaps/via/rules.mk
+++ b/keyboards/ibnuda/gurindam/keymaps/via/rules.mk
diff --git a/keyboards/ibnuda/gurindam/readme.md b/keyboards/ibnuda/gurindam/readme.md
new file mode 100644
index 0000000000..072084f4f0
--- /dev/null
+++ b/keyboards/ibnuda/gurindam/readme.md
@@ -0,0 +1,23 @@
+# gurindam
+
+![Gurindam](https://raw.githubusercontent.com/ibnuda/Gurindam/master-of-puppets/imgs/gurindam-finished.jpg)
+
+A keyboard inspired by Arisu which in turn by Lyn's EM7 and TGR Alice.
+
+* Keyboard Maintainer: [Ibnu D. Aji](https://github.com/ibnuda)
+* Hardware Supported: Promicro
+* Hardware Availability: [PCB & Stacked Acrylic Case](https://github.com/ibnuda/gurindam) & private group-buy.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ibnuda/gurindam: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).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead.
+* **Keycode in layout**: Hold the mod key (lowest key on the right island) and then tap `R`.
+
diff --git a/keyboards/gurindam/rules.mk b/keyboards/ibnuda/gurindam/rules.mk
index afcb13df48..afcb13df48 100644
--- a/keyboards/gurindam/rules.mk
+++ b/keyboards/ibnuda/gurindam/rules.mk
diff --git a/keyboards/squiggle/config.h b/keyboards/ibnuda/squiggle/config.h
index 6aca2c1b18..6aca2c1b18 100644
--- a/keyboards/squiggle/config.h
+++ b/keyboards/ibnuda/squiggle/config.h
diff --git a/keyboards/squiggle/keymaps/default/config.h b/keyboards/ibnuda/squiggle/keymaps/default/config.h
index 88c4203d8b..88c4203d8b 100644
--- a/keyboards/squiggle/keymaps/default/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/default/config.h
diff --git a/keyboards/squiggle/keymaps/default/keymap.c b/keyboards/ibnuda/squiggle/keymaps/default/keymap.c
index 68ef0ed210..68ef0ed210 100644
--- a/keyboards/squiggle/keymaps/default/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/default/keymap.c
diff --git a/keyboards/squiggle/keymaps/default/readme.md b/keyboards/ibnuda/squiggle/keymaps/default/readme.md
index 41e1ef7b1c..41e1ef7b1c 100644
--- a/keyboards/squiggle/keymaps/default/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/default/readme.md
diff --git a/keyboards/le_chiffre/keymaps/default/rules.mk b/keyboards/ibnuda/squiggle/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/le_chiffre/keymaps/default/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/default/rules.mk
diff --git a/keyboards/squiggle/keymaps/default38/config.h b/keyboards/ibnuda/squiggle/keymaps/default38/config.h
index 9b7c369dda..9b7c369dda 100644
--- a/keyboards/squiggle/keymaps/default38/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/default38/config.h
diff --git a/keyboards/squiggle/keymaps/default38/keymap.c b/keyboards/ibnuda/squiggle/keymaps/default38/keymap.c
index c42b9e783d..c42b9e783d 100644
--- a/keyboards/squiggle/keymaps/default38/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/default38/keymap.c
diff --git a/keyboards/squiggle/keymaps/default38/readme.md b/keyboards/ibnuda/squiggle/keymaps/default38/readme.md
index 7487986dbf..7487986dbf 100644
--- a/keyboards/squiggle/keymaps/default38/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/default38/readme.md
diff --git a/keyboards/minidox/keymaps/rsthd_combos/rules.mk b/keyboards/ibnuda/squiggle/keymaps/default38/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/minidox/keymaps/rsthd_combos/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/default38/rules.mk
diff --git a/keyboards/squiggle/keymaps/defaultfull/config.h b/keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h
index 1c8cff4bb6..1c8cff4bb6 100644
--- a/keyboards/squiggle/keymaps/defaultfull/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h
diff --git a/keyboards/squiggle/keymaps/defaultfull/keymap.c b/keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c
index 97785f0614..97785f0614 100644
--- a/keyboards/squiggle/keymaps/defaultfull/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c
diff --git a/keyboards/squiggle/keymaps/defaultfull/readme.md b/keyboards/ibnuda/squiggle/keymaps/defaultfull/readme.md
index 41e1ef7b1c..41e1ef7b1c 100644
--- a/keyboards/squiggle/keymaps/defaultfull/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultfull/readme.md
diff --git a/keyboards/ogurec/keymaps/default/rules.mk b/keyboards/ibnuda/squiggle/keymaps/defaultfull/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/ogurec/keymaps/default/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultfull/rules.mk
diff --git a/keyboards/squiggle/keymaps/defaultminidox/config.h b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h
index 88c4203d8b..88c4203d8b 100644
--- a/keyboards/squiggle/keymaps/defaultminidox/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h
diff --git a/keyboards/squiggle/keymaps/defaultminidox/keymap.c b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c
index 3c19f38818..3c19f38818 100644
--- a/keyboards/squiggle/keymaps/defaultminidox/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c
diff --git a/keyboards/squiggle/keymaps/defaultminidox/readme.md b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/readme.md
index 41e1ef7b1c..41e1ef7b1c 100644
--- a/keyboards/squiggle/keymaps/defaultminidox/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/readme.md
diff --git a/keyboards/packrat/keymaps/3uc/rules.mk b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/packrat/keymaps/3uc/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/defaultminidox/rules.mk
diff --git a/keyboards/squiggle/keymaps/rick-complicated/config.h b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h
index 5b97451890..5b97451890 100644
--- a/keyboards/squiggle/keymaps/rick-complicated/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h
diff --git a/keyboards/squiggle/keymaps/rick-complicated/keymap.c b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c
index eb5853e90e..eb5853e90e 100644
--- a/keyboards/squiggle/keymaps/rick-complicated/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c
diff --git a/keyboards/squiggle/keymaps/rick-complicated/readme.md b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/readme.md
index d14eb193c0..d14eb193c0 100644
--- a/keyboards/squiggle/keymaps/rick-complicated/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/readme.md
diff --git a/keyboards/squiggle/keymaps/rick-complicated/rules.mk b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/rules.mk
index 00c78275d9..00c78275d9 100644
--- a/keyboards/squiggle/keymaps/rick-complicated/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/rick-complicated/rules.mk
diff --git a/keyboards/squiggle/keymaps/rick/config.h b/keyboards/ibnuda/squiggle/keymaps/rick/config.h
index 88c4203d8b..88c4203d8b 100644
--- a/keyboards/squiggle/keymaps/rick/config.h
+++ b/keyboards/ibnuda/squiggle/keymaps/rick/config.h
diff --git a/keyboards/squiggle/keymaps/rick/keymap.c b/keyboards/ibnuda/squiggle/keymaps/rick/keymap.c
index 7dddeb4089..7dddeb4089 100644
--- a/keyboards/squiggle/keymaps/rick/keymap.c
+++ b/keyboards/ibnuda/squiggle/keymaps/rick/keymap.c
diff --git a/keyboards/squiggle/keymaps/rick/readme.md b/keyboards/ibnuda/squiggle/keymaps/rick/readme.md
index aaff442b90..aaff442b90 100644
--- a/keyboards/squiggle/keymaps/rick/readme.md
+++ b/keyboards/ibnuda/squiggle/keymaps/rick/readme.md
diff --git a/keyboards/packrat/keymaps/default/rules.mk b/keyboards/ibnuda/squiggle/keymaps/rick/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/packrat/keymaps/default/rules.mk
+++ b/keyboards/ibnuda/squiggle/keymaps/rick/rules.mk
diff --git a/keyboards/ibnuda/squiggle/readme.md b/keyboards/ibnuda/squiggle/readme.md
new file mode 100644
index 0000000000..95204ade57
--- /dev/null
+++ b/keyboards/ibnuda/squiggle/readme.md
@@ -0,0 +1,24 @@
+# squiggle
+
+![squiggle](https://i.imgur.com/5UhvDsjl.jpg)
+
+It's a keyboard family which has the following requirements:
+
+- 5 columns per hand.
+- No numrow.
+- Split.
+- Symmetric.
+
+* Keyboard Maintainer: [ibnuda](https://github.com/ibnuda)
+* Hardware Supported: Atmega32u4.
+* Hardware Availability: [repo](https://github.com/ibnuda/squiggle).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ibnuda/squiggle:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+To enter to the bootloader you need to:
+
+* Press the key mapped to `RESET`
diff --git a/keyboards/bigseries/2key/.noci b/keyboards/ibnuda/squiggle/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bigseries/2key/.noci
+++ b/keyboards/ibnuda/squiggle/rev1/.noci
diff --git a/keyboards/squiggle/rev1/config.h b/keyboards/ibnuda/squiggle/rev1/config.h
index 9dec7e30f5..9dec7e30f5 100644
--- a/keyboards/squiggle/rev1/config.h
+++ b/keyboards/ibnuda/squiggle/rev1/config.h
diff --git a/keyboards/squiggle/rev1/info.json b/keyboards/ibnuda/squiggle/rev1/info.json
index 754164e5d7..754164e5d7 100644
--- a/keyboards/squiggle/rev1/info.json
+++ b/keyboards/ibnuda/squiggle/rev1/info.json
diff --git a/keyboards/claw44/rev1/rev1.c b/keyboards/ibnuda/squiggle/rev1/rev1.c
index 520a869e57..520a869e57 100644
--- a/keyboards/claw44/rev1/rev1.c
+++ b/keyboards/ibnuda/squiggle/rev1/rev1.c
diff --git a/keyboards/squiggle/rev1/rev1.h b/keyboards/ibnuda/squiggle/rev1/rev1.h
index 73cb7abd2f..73cb7abd2f 100644
--- a/keyboards/squiggle/rev1/rev1.h
+++ b/keyboards/ibnuda/squiggle/rev1/rev1.h
diff --git a/keyboards/squiggle/rev1/rules.mk b/keyboards/ibnuda/squiggle/rev1/rules.mk
index c5eccd2db9..c5eccd2db9 100644
--- a/keyboards/squiggle/rev1/rules.mk
+++ b/keyboards/ibnuda/squiggle/rev1/rules.mk
diff --git a/keyboards/ibnuda/squiggle/rules.mk b/keyboards/ibnuda/squiggle/rules.mk
new file mode 100644
index 0000000000..0214333999
--- /dev/null
+++ b/keyboards/ibnuda/squiggle/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = ibnuda/squiggle/rev1
diff --git a/keyboards/squiggle/squiggle.c b/keyboards/ibnuda/squiggle/squiggle.c
index 7c73aabf51..7c73aabf51 100644
--- a/keyboards/squiggle/squiggle.c
+++ b/keyboards/ibnuda/squiggle/squiggle.c
diff --git a/keyboards/ibnuda/squiggle/squiggle.h b/keyboards/ibnuda/squiggle/squiggle.h
new file mode 100644
index 0000000000..4ed95e707c
--- /dev/null
+++ b/keyboards/ibnuda/squiggle/squiggle.h
@@ -0,0 +1,23 @@
+/* Copyright 2020 Ibnu D. Aji
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#ifdef KEYBOARD_ibnuda_squiggle_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/id67/readme.md b/keyboards/id67/readme.md
deleted file mode 100644
index 7949ee1af2..0000000000
--- a/keyboards/id67/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# IDOBAO ID67
-
-A 65% hotswap keyboard from IDOBAO.
-
-## ANSI support:
-
-* Keyboard Maintainer: Tybera
-* Hardware Supported: IDOBAO ID67
-* Hardware Availability: [IDOBAO](https://www.idobao.net/products/idobao-id67-65-hot-swappable-mechanical-keyboard-kit-1)
-
-## Variants
-
-Currently there are two variants for the id67:
-1. `rgb_default` which uses the `RGB Lightning` feature for the on-board LEDs.
-2. `rgb` which uses the more advanced `RGB Matrix` feature for the per-key and underglow (bottom of PCB) LEDs.
-
-Make examples for this keyboard (after setting up your build environment):
-
- make id67/default_rgb:default
-
- make id67/rgb:default
-
-Flashing examples for this keyboard:
-
- make id67/default_rgb:default:flash
-
- make id67/rgb:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/id80/id80.c b/keyboards/id80/id80.c
deleted file mode 100644
index 4a06660de9..0000000000
--- a/keyboards/id80/id80.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright 2020 Sergey Vlasov <sigprof@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include "id80.h"
diff --git a/keyboards/id80/readme.md b/keyboards/id80/readme.md
deleted file mode 100644
index 016d2a177f..0000000000
--- a/keyboards/id80/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# IDOBAO ID80
-
-![ID80](https://ae01.alicdn.com/kf/H0f617c6129c24cfaa26a8c9e8e54851aj.jpg)
-
-A 75% hotswap keyboard from IDOBAO.
-
-## ANSI support:
-
-* Keyboard Maintainer: [Sergey Vlasov](https://github.com/sigprof)
-* Hardware Supported: IDOBAO ID80
-* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/4000590804514.html), [Drop](https://drop.com/buy/idobao-id80-75-hot-swappable-mechanical-keyboard-kit?mode=guest_open)
-
-Make example for this keyboard (after setting up your build environment):
-
- make id80/ansi:default
-
-## ISO support:
-
-* Keyboard Maintainer: [Carsten Rose](https://github.com/cwr10010)
-* Hardware Supported: IDOBAO ID80v2
-* Hardware Availability: [IDOBAO](https://www.idobao.net/products/idobao-id80v2-75-hot-swappable-mechanical-keyboard-kit)
-
-Make example for this keyboard (after setting up your build environment):
-
- make id80/iso:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/id80/rules.mk b/keyboards/id80/rules.mk
deleted file mode 100644
index eea8b69900..0000000000
--- a/keyboards/id80/rules.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# Defalt to the ansi version
-DEFAULT_FOLDER = id80/ansi
-
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# 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 = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-# partially generated by KBFirmware JSON to QMK Parser
-# https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/id87/id87.c b/keyboards/id87/id87.c
deleted file mode 100644
index 145edc1639..0000000000
--- a/keyboards/id87/id87.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-Copyright 2020 Tybera
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "id87.h"
diff --git a/keyboards/id87/readme.md b/keyboards/id87/readme.md
deleted file mode 100644
index ee3604f849..0000000000
--- a/keyboards/id87/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# IDOBAO ID87
-
-![ID87](https://cdn.shopify.com/s/files/1/0382/1348/4675/products/6601EE887B14D36DE54CA137F0E383AE_1024x1024.jpg)
-
-A TKL hotswap board from IDOBAO.
-
-* Keyboard Maintainer: Tybera
-* Hardware Supported: IDOBAO ID87, atmega32u4
-* Hardware Availability: [Idobao](https://www.idobao.net/products/idobao-id87-80-hot-swappable-mechanical-keyboard-kit)
-
-Make example for this keyboard (after setting up your build environment):
-
- make id87:default
-
-Flashing example for this keyboard:
-
- make id87:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/id67/default_rgb/config.h b/keyboards/idobao/id67/default_rgb/config.h
index fbf99cf673..fbf99cf673 100644
--- a/keyboards/id67/default_rgb/config.h
+++ b/keyboards/idobao/id67/default_rgb/config.h
diff --git a/keyboards/id67/default_rgb/default_rgb.c b/keyboards/idobao/id67/default_rgb/default_rgb.c
index 972b0b8b06..972b0b8b06 100644
--- a/keyboards/id67/default_rgb/default_rgb.c
+++ b/keyboards/idobao/id67/default_rgb/default_rgb.c
diff --git a/keyboards/id67/default_rgb/default_rgb.h b/keyboards/idobao/id67/default_rgb/default_rgb.h
index 7c0a6d5aa8..7c0a6d5aa8 100644
--- a/keyboards/id67/default_rgb/default_rgb.h
+++ b/keyboards/idobao/id67/default_rgb/default_rgb.h
diff --git a/keyboards/id67/default_rgb/info.json b/keyboards/idobao/id67/default_rgb/info.json
index f3114121c1..f3114121c1 100644
--- a/keyboards/id67/default_rgb/info.json
+++ b/keyboards/idobao/id67/default_rgb/info.json
diff --git a/keyboards/id67/default_rgb/readme.md b/keyboards/idobao/id67/default_rgb/readme.md
index 9559384f1e..9559384f1e 100644
--- a/keyboards/id67/default_rgb/readme.md
+++ b/keyboards/idobao/id67/default_rgb/readme.md
diff --git a/keyboards/id67/default_rgb/rules.mk b/keyboards/idobao/id67/default_rgb/rules.mk
index 574f0067fb..574f0067fb 100644
--- a/keyboards/id67/default_rgb/rules.mk
+++ b/keyboards/idobao/id67/default_rgb/rules.mk
diff --git a/keyboards/id67/keymaps/default/keymap.c b/keyboards/idobao/id67/keymaps/default/keymap.c
index 3bb880891f..3bb880891f 100644
--- a/keyboards/id67/keymaps/default/keymap.c
+++ b/keyboards/idobao/id67/keymaps/default/keymap.c
diff --git a/keyboards/id67/keymaps/via/keymap.c b/keyboards/idobao/id67/keymaps/via/keymap.c
index 8155067b9f..8155067b9f 100644
--- a/keyboards/id67/keymaps/via/keymap.c
+++ b/keyboards/idobao/id67/keymaps/via/keymap.c
diff --git a/keyboards/id67/keymaps/via/rules.mk b/keyboards/idobao/id67/keymaps/via/rules.mk
index ca9fed0e6b..ca9fed0e6b 100644
--- a/keyboards/id67/keymaps/via/rules.mk
+++ b/keyboards/idobao/id67/keymaps/via/rules.mk
diff --git a/keyboards/idobao/id67/readme.md b/keyboards/idobao/id67/readme.md
new file mode 100644
index 0000000000..134d45b18e
--- /dev/null
+++ b/keyboards/idobao/id67/readme.md
@@ -0,0 +1,29 @@
+# IDOBAO ID67
+
+A 65% hotswap keyboard from IDOBAO.
+
+## ANSI support:
+
+* Keyboard Maintainer: Tybera
+* Hardware Supported: IDOBAO ID67
+* Hardware Availability: [IDOBAO](https://www.idobao.net/products/idobao-id67-65-hot-swappable-mechanical-keyboard-kit-1)
+
+## Variants
+
+Currently there are two variants for the id67:
+1. `rgb_default` which uses the `RGB Lightning` feature for the on-board LEDs.
+2. `rgb` which uses the more advanced `RGB Matrix` feature for the per-key and underglow (bottom of PCB) LEDs.
+
+Make examples for this keyboard (after setting up your build environment):
+
+ make idobao/id67/default_rgb:default
+
+ make idobao/id67/rgb:default
+
+Flashing examples for this keyboard:
+
+ make idobao/id67/default_rgb:default:flash
+
+ make idobao/id67/rgb:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/id67/rgb/config.h b/keyboards/idobao/id67/rgb/config.h
index be6594b0c1..be6594b0c1 100644
--- a/keyboards/id67/rgb/config.h
+++ b/keyboards/idobao/id67/rgb/config.h
diff --git a/keyboards/id67/rgb/info.json b/keyboards/idobao/id67/rgb/info.json
index 774d913413..774d913413 100644
--- a/keyboards/id67/rgb/info.json
+++ b/keyboards/idobao/id67/rgb/info.json
diff --git a/keyboards/id67/rgb/keymaps/default/keymap.c b/keyboards/idobao/id67/rgb/keymaps/default/keymap.c
index 450550e12a..450550e12a 100644
--- a/keyboards/id67/rgb/keymaps/default/keymap.c
+++ b/keyboards/idobao/id67/rgb/keymaps/default/keymap.c
diff --git a/keyboards/id67/rgb/keymaps/thewerther/config.h b/keyboards/idobao/id67/rgb/keymaps/thewerther/config.h
index 539e3bbb41..539e3bbb41 100644
--- a/keyboards/id67/rgb/keymaps/thewerther/config.h
+++ b/keyboards/idobao/id67/rgb/keymaps/thewerther/config.h
diff --git a/keyboards/id67/rgb/keymaps/thewerther/keymap.c b/keyboards/idobao/id67/rgb/keymaps/thewerther/keymap.c
index 8af720755f..8af720755f 100644
--- a/keyboards/id67/rgb/keymaps/thewerther/keymap.c
+++ b/keyboards/idobao/id67/rgb/keymaps/thewerther/keymap.c
diff --git a/keyboards/id67/rgb/keymaps/thewerther/rules.mk b/keyboards/idobao/id67/rgb/keymaps/thewerther/rules.mk
index acd3adaa9a..acd3adaa9a 100644
--- a/keyboards/id67/rgb/keymaps/thewerther/rules.mk
+++ b/keyboards/idobao/id67/rgb/keymaps/thewerther/rules.mk
diff --git a/keyboards/id67/rgb/readme.md b/keyboards/idobao/id67/rgb/readme.md
index 8376af1468..8376af1468 100644
--- a/keyboards/id67/rgb/readme.md
+++ b/keyboards/idobao/id67/rgb/readme.md
diff --git a/keyboards/id67/rgb/rgb.c b/keyboards/idobao/id67/rgb/rgb.c
index 5fc007d19a..5fc007d19a 100644
--- a/keyboards/id67/rgb/rgb.c
+++ b/keyboards/idobao/id67/rgb/rgb.c
diff --git a/keyboards/id67/rgb/rgb.h b/keyboards/idobao/id67/rgb/rgb.h
index cca757bfc7..cca757bfc7 100644
--- a/keyboards/id67/rgb/rgb.h
+++ b/keyboards/idobao/id67/rgb/rgb.h
diff --git a/keyboards/id67/rgb/rules.mk b/keyboards/idobao/id67/rgb/rules.mk
index 5ebc2b824a..5ebc2b824a 100644
--- a/keyboards/id67/rgb/rules.mk
+++ b/keyboards/idobao/id67/rgb/rules.mk
diff --git a/keyboards/idobo/keymaps/default/keymap.c b/keyboards/idobao/id75/keymaps/default/keymap.c
index 6c0c09804d..6c0c09804d 100644
--- a/keyboards/idobo/keymaps/default/keymap.c
+++ b/keyboards/idobao/id75/keymaps/default/keymap.c
diff --git a/keyboards/idobo/keymaps/default/readme.md b/keyboards/idobao/id75/keymaps/default/readme.md
index 577c62b51f..577c62b51f 100644
--- a/keyboards/idobo/keymaps/default/readme.md
+++ b/keyboards/idobao/id75/keymaps/default/readme.md
diff --git a/keyboards/idobo/keymaps/default75/keymap.c b/keyboards/idobao/id75/keymaps/default75/keymap.c
index 8d8ae4414c..8d8ae4414c 100644
--- a/keyboards/idobo/keymaps/default75/keymap.c
+++ b/keyboards/idobao/id75/keymaps/default75/keymap.c
diff --git a/keyboards/idobo/keymaps/default75/readme.md b/keyboards/idobao/id75/keymaps/default75/readme.md
index a1c0236ed9..a1c0236ed9 100644
--- a/keyboards/idobo/keymaps/default75/readme.md
+++ b/keyboards/idobao/id75/keymaps/default75/readme.md
diff --git a/keyboards/idobo/keymaps/drewdobo/config.h b/keyboards/idobao/id75/keymaps/drewdobo/config.h
index 58787ce12b..58787ce12b 100644
--- a/keyboards/idobo/keymaps/drewdobo/config.h
+++ b/keyboards/idobao/id75/keymaps/drewdobo/config.h
diff --git a/keyboards/idobo/keymaps/drewdobo/keymap.c b/keyboards/idobao/id75/keymaps/drewdobo/keymap.c
index 9dfc335e82..9dfc335e82 100644
--- a/keyboards/idobo/keymaps/drewdobo/keymap.c
+++ b/keyboards/idobao/id75/keymaps/drewdobo/keymap.c
diff --git a/keyboards/idobo/keymaps/drewdobo/readme.md b/keyboards/idobao/id75/keymaps/drewdobo/readme.md
index 209808ca87..209808ca87 100644
--- a/keyboards/idobo/keymaps/drewdobo/readme.md
+++ b/keyboards/idobao/id75/keymaps/drewdobo/readme.md
diff --git a/keyboards/idobo/keymaps/drewdobo/rules.mk b/keyboards/idobao/id75/keymaps/drewdobo/rules.mk
index f9bbfd4948..f9bbfd4948 100644
--- a/keyboards/idobo/keymaps/drewdobo/rules.mk
+++ b/keyboards/idobao/id75/keymaps/drewdobo/rules.mk
diff --git a/keyboards/idobo/keymaps/egstad/config.h b/keyboards/idobao/id75/keymaps/egstad/config.h
index 45dbd3df82..45dbd3df82 100644
--- a/keyboards/idobo/keymaps/egstad/config.h
+++ b/keyboards/idobao/id75/keymaps/egstad/config.h
diff --git a/keyboards/idobo/keymaps/egstad/keymap.c b/keyboards/idobao/id75/keymaps/egstad/keymap.c
index febbad7c6e..febbad7c6e 100644
--- a/keyboards/idobo/keymaps/egstad/keymap.c
+++ b/keyboards/idobao/id75/keymaps/egstad/keymap.c
diff --git a/keyboards/idobo/keymaps/egstad/readme.md b/keyboards/idobao/id75/keymaps/egstad/readme.md
index 2de44ad9cc..2de44ad9cc 100644
--- a/keyboards/idobo/keymaps/egstad/readme.md
+++ b/keyboards/idobao/id75/keymaps/egstad/readme.md
diff --git a/keyboards/idobo/keymaps/egstad/rules.mk b/keyboards/idobao/id75/keymaps/egstad/rules.mk
index ca3becc383..ca3becc383 100644
--- a/keyboards/idobo/keymaps/egstad/rules.mk
+++ b/keyboards/idobao/id75/keymaps/egstad/rules.mk
diff --git a/keyboards/idobo/keymaps/gkbd/config.h b/keyboards/idobao/id75/keymaps/gkbd/config.h
index 35572307c0..35572307c0 100644
--- a/keyboards/idobo/keymaps/gkbd/config.h
+++ b/keyboards/idobao/id75/keymaps/gkbd/config.h
diff --git a/keyboards/idobo/keymaps/gkbd/keymap.c b/keyboards/idobao/id75/keymaps/gkbd/keymap.c
index 16e16cd855..16e16cd855 100644
--- a/keyboards/idobo/keymaps/gkbd/keymap.c
+++ b/keyboards/idobao/id75/keymaps/gkbd/keymap.c
diff --git a/keyboards/idobo/keymaps/gkbd/readme.md b/keyboards/idobao/id75/keymaps/gkbd/readme.md
index 3951f3e564..3951f3e564 100644
--- a/keyboards/idobo/keymaps/gkbd/readme.md
+++ b/keyboards/idobao/id75/keymaps/gkbd/readme.md
diff --git a/keyboards/idobo/keymaps/gkbd/rules.mk b/keyboards/idobao/id75/keymaps/gkbd/rules.mk
index 039f07c8e3..039f07c8e3 100644
--- a/keyboards/idobo/keymaps/gkbd/rules.mk
+++ b/keyboards/idobao/id75/keymaps/gkbd/rules.mk
diff --git a/keyboards/idobo/keymaps/gkbd_75/config.h b/keyboards/idobao/id75/keymaps/gkbd_75/config.h
index 7813d776e5..7813d776e5 100644
--- a/keyboards/idobo/keymaps/gkbd_75/config.h
+++ b/keyboards/idobao/id75/keymaps/gkbd_75/config.h
diff --git a/keyboards/idobo/keymaps/gkbd_75/keymap.c b/keyboards/idobao/id75/keymaps/gkbd_75/keymap.c
index be67aead4e..be67aead4e 100644
--- a/keyboards/idobo/keymaps/gkbd_75/keymap.c
+++ b/keyboards/idobao/id75/keymaps/gkbd_75/keymap.c
diff --git a/keyboards/idobo/keymaps/gkbd_75/readme.md b/keyboards/idobao/id75/keymaps/gkbd_75/readme.md
index aa14049420..aa14049420 100644
--- a/keyboards/idobo/keymaps/gkbd_75/readme.md
+++ b/keyboards/idobao/id75/keymaps/gkbd_75/readme.md
diff --git a/keyboards/idobo/keymaps/gkbd_orthon/config.h b/keyboards/idobao/id75/keymaps/gkbd_orthon/config.h
index e8fc39faad..e8fc39faad 100644
--- a/keyboards/idobo/keymaps/gkbd_orthon/config.h
+++ b/keyboards/idobao/id75/keymaps/gkbd_orthon/config.h
diff --git a/keyboards/idobo/keymaps/gkbd_orthon/keymap.c b/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c
index a603eae657..a603eae657 100644
--- a/keyboards/idobo/keymaps/gkbd_orthon/keymap.c
+++ b/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c
diff --git a/keyboards/idobo/keymaps/gkbd_orthon/readme.md b/keyboards/idobao/id75/keymaps/gkbd_orthon/readme.md
index 36479ff9ba..36479ff9ba 100644
--- a/keyboards/idobo/keymaps/gkbd_orthon/readme.md
+++ b/keyboards/idobao/id75/keymaps/gkbd_orthon/readme.md
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json b/keyboards/idobao/id75/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
index 19c0780463..19c0780463 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
+++ b/keyboards/idobao/id75/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keymap.c b/keyboards/idobao/id75/keymaps/greenshadowmaker/keymap.c
index d23bc7c7df..d23bc7c7df 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/keymap.c
+++ b/keyboards/idobao/id75/keymaps/greenshadowmaker/keymap.c
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/readme.md b/keyboards/idobao/id75/keymaps/greenshadowmaker/readme.md
index 7b6f654c71..7b6f654c71 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/readme.md
+++ b/keyboards/idobao/id75/keymaps/greenshadowmaker/readme.md
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/rules.mk b/keyboards/idobao/id75/keymaps/greenshadowmaker/rules.mk
index f6587a835e..f6587a835e 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/rules.mk
+++ b/keyboards/idobao/id75/keymaps/greenshadowmaker/rules.mk
diff --git a/keyboards/idobo/keymaps/ifohancroft/config.h b/keyboards/idobao/id75/keymaps/ifohancroft/config.h
index 09467b4362..09467b4362 100644
--- a/keyboards/idobo/keymaps/ifohancroft/config.h
+++ b/keyboards/idobao/id75/keymaps/ifohancroft/config.h
diff --git a/keyboards/idobo/keymaps/ifohancroft/keymap.c b/keyboards/idobao/id75/keymaps/ifohancroft/keymap.c
index d71dcee6a9..d71dcee6a9 100644
--- a/keyboards/idobo/keymaps/ifohancroft/keymap.c
+++ b/keyboards/idobao/id75/keymaps/ifohancroft/keymap.c
diff --git a/keyboards/idobo/keymaps/ifohancroft/readme.md b/keyboards/idobao/id75/keymaps/ifohancroft/readme.md
index 6a6c2cd34b..6a6c2cd34b 100644
--- a/keyboards/idobo/keymaps/ifohancroft/readme.md
+++ b/keyboards/idobao/id75/keymaps/ifohancroft/readme.md
diff --git a/keyboards/idobo/keymaps/ifohancroft/rules.mk b/keyboards/idobao/id75/keymaps/ifohancroft/rules.mk
index 6609b4097b..6609b4097b 100644
--- a/keyboards/idobo/keymaps/ifohancroft/rules.mk
+++ b/keyboards/idobao/id75/keymaps/ifohancroft/rules.mk
diff --git a/keyboards/idobo/keymaps/pathnirvana/config.h b/keyboards/idobao/id75/keymaps/pathnirvana/config.h
index dd95794254..dd95794254 100644
--- a/keyboards/idobo/keymaps/pathnirvana/config.h
+++ b/keyboards/idobao/id75/keymaps/pathnirvana/config.h
diff --git a/keyboards/idobo/keymaps/pathnirvana/keymap.c b/keyboards/idobao/id75/keymaps/pathnirvana/keymap.c
index ea6831d6da..ea6831d6da 100644
--- a/keyboards/idobo/keymaps/pathnirvana/keymap.c
+++ b/keyboards/idobao/id75/keymaps/pathnirvana/keymap.c
diff --git a/keyboards/idobo/keymaps/pathnirvana/rules.mk b/keyboards/idobao/id75/keymaps/pathnirvana/rules.mk
index 6bfd2bac6a..6bfd2bac6a 100644
--- a/keyboards/idobo/keymaps/pathnirvana/rules.mk
+++ b/keyboards/idobao/id75/keymaps/pathnirvana/rules.mk
diff --git a/keyboards/idobo/keymaps/revok75/config.h b/keyboards/idobao/id75/keymaps/revok75/config.h
index f5c4659880..f5c4659880 100644
--- a/keyboards/idobo/keymaps/revok75/config.h
+++ b/keyboards/idobao/id75/keymaps/revok75/config.h
diff --git a/keyboards/idobo/keymaps/revok75/keymap.c b/keyboards/idobao/id75/keymaps/revok75/keymap.c
index a380240326..a380240326 100644
--- a/keyboards/idobo/keymaps/revok75/keymap.c
+++ b/keyboards/idobao/id75/keymaps/revok75/keymap.c
diff --git a/keyboards/idobo/keymaps/revok75/readme.md b/keyboards/idobao/id75/keymaps/revok75/readme.md
index 780c5401c4..780c5401c4 100644
--- a/keyboards/idobo/keymaps/revok75/readme.md
+++ b/keyboards/idobao/id75/keymaps/revok75/readme.md
diff --git a/keyboards/idobo/keymaps/revok75/rules.mk b/keyboards/idobao/id75/keymaps/revok75/rules.mk
index 7efceba50a..7efceba50a 100644
--- a/keyboards/idobo/keymaps/revok75/rules.mk
+++ b/keyboards/idobao/id75/keymaps/revok75/rules.mk
diff --git a/keyboards/idobo/keymaps/via/keymap.c b/keyboards/idobao/id75/keymaps/via/keymap.c
index de7581ea03..de7581ea03 100644
--- a/keyboards/idobo/keymaps/via/keymap.c
+++ b/keyboards/idobao/id75/keymaps/via/keymap.c
diff --git a/keyboards/claw44/keymaps/via/rules.mk b/keyboards/idobao/id75/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/claw44/keymaps/via/rules.mk
+++ b/keyboards/idobao/id75/keymaps/via/rules.mk
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/config.h b/keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h
index a3ed4f762a..a3ed4f762a 100644
--- a/keyboards/idobo/keymaps/xaceofspaidsx/config.h
+++ b/keyboards/idobao/id75/keymaps/xaceofspaidsx/config.h
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/keymap.c b/keyboards/idobao/id75/keymaps/xaceofspaidsx/keymap.c
index c157317e2d..c157317e2d 100644
--- a/keyboards/idobo/keymaps/xaceofspaidsx/keymap.c
+++ b/keyboards/idobao/id75/keymaps/xaceofspaidsx/keymap.c
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/readme.md b/keyboards/idobao/id75/keymaps/xaceofspaidsx/readme.md
index ac6e74702c..ac6e74702c 100644
--- a/keyboards/idobo/keymaps/xaceofspaidsx/readme.md
+++ b/keyboards/idobao/id75/keymaps/xaceofspaidsx/readme.md
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/rules.mk b/keyboards/idobao/id75/keymaps/xaceofspaidsx/rules.mk
index b973e9d8b3..b973e9d8b3 100644
--- a/keyboards/idobo/keymaps/xaceofspaidsx/rules.mk
+++ b/keyboards/idobao/id75/keymaps/xaceofspaidsx/rules.mk
diff --git a/keyboards/idobao/id75/v1/config.h b/keyboards/idobao/id75/v1/config.h
new file mode 100644
index 0000000000..caaf7f75dc
--- /dev/null
+++ b/keyboards/idobao/id75/v1/config.h
@@ -0,0 +1,122 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6964 // ID
+#define PRODUCT_ID 0x0075
+#define DEVICE_VER 0x0001
+#define MANUFACTURER IDOBAO
+#define PRODUCT ID75
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B3, C7, B6, C6 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D5, D3, D2, D1, D0, D4, D6, D7, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN F0
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/idobo/info.json b/keyboards/idobao/id75/v1/info.json
index bacdc42235..bacdc42235 100644
--- a/keyboards/idobo/info.json
+++ b/keyboards/idobao/id75/v1/info.json
diff --git a/keyboards/idobao/id75/v1/readme.md b/keyboards/idobao/id75/v1/readme.md
new file mode 100644
index 0000000000..545f3121f7
--- /dev/null
+++ b/keyboards/idobao/id75/v1/readme.md
@@ -0,0 +1,19 @@
+# ID75
+
+![ID75](https://i.imgur.com/VOP1SzD.jpeg)
+
+75Keys Aluminum Mechanical Keyboard.
+
+Firmware here originally appeared on qmkeyboard.cn
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: ID75 PCB
+Hardware Availability:
+* [ID75 on Drop](https://drop.com/buy/id75-hot-swappable-ortholinear-keyboard-kit)
+* [ID75 on IDOBAO](https://idobao.net/products/idobao-id75v1-hot-swappable-mechanical-keyboard-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobao/id75/v1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/idobao/id75/v1/rules.mk b/keyboards/idobao/id75/v1/rules.mk
new file mode 100644
index 0000000000..0ce4fe96d9
--- /dev/null
+++ b/keyboards/idobao/id75/v1/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+LTO_ENABLE = yes # Use link time optimization
+
+LAYOUTS = ortho_5x15
diff --git a/keyboards/idobao/id75/v1/v1.c b/keyboards/idobao/id75/v1/v1.c
new file mode 100644
index 0000000000..992a292616
--- /dev/null
+++ b/keyboards/idobao/id75/v1/v1.c
@@ -0,0 +1,16 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "v1.h"
diff --git a/keyboards/idobo/idobo.h b/keyboards/idobao/id75/v1/v1.h
index 9643a1efd3..9643a1efd3 100644
--- a/keyboards/idobo/idobo.h
+++ b/keyboards/idobao/id75/v1/v1.h
diff --git a/keyboards/id80/ansi/config.h b/keyboards/idobao/id80/v1/ansi/config.h
index 253c0757b8..253c0757b8 100644
--- a/keyboards/id80/ansi/config.h
+++ b/keyboards/idobao/id80/v1/ansi/config.h
diff --git a/keyboards/id80/ansi/keymaps/default/keymap.c b/keyboards/idobao/id80/v1/ansi/keymaps/default/keymap.c
index 696fb303e2..696fb303e2 100644
--- a/keyboards/id80/ansi/keymaps/default/keymap.c
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/default/keymap.c
diff --git a/keyboards/id80/ansi/keymaps/default/readme.md b/keyboards/idobao/id80/v1/ansi/keymaps/default/readme.md
index 8ae9f656cd..8ae9f656cd 100644
--- a/keyboards/id80/ansi/keymaps/default/readme.md
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/default/readme.md
diff --git a/keyboards/id80/ansi/keymaps/msf/config.h b/keyboards/idobao/id80/v1/ansi/keymaps/msf/config.h
index 4f3cc95f30..4f3cc95f30 100644
--- a/keyboards/id80/ansi/keymaps/msf/config.h
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/msf/config.h
diff --git a/keyboards/id80/ansi/keymaps/msf/keymap.c b/keyboards/idobao/id80/v1/ansi/keymaps/msf/keymap.c
index 6bb91f0f19..6bb91f0f19 100644
--- a/keyboards/id80/ansi/keymaps/msf/keymap.c
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/msf/keymap.c
diff --git a/keyboards/id80/ansi/keymaps/msf/readme.md b/keyboards/idobao/id80/v1/ansi/keymaps/msf/readme.md
index 7ab300f672..7ab300f672 100644
--- a/keyboards/id80/ansi/keymaps/msf/readme.md
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/msf/readme.md
diff --git a/keyboards/qaz/keymaps/default/rules.mk b/keyboards/idobao/id80/v1/ansi/keymaps/msf/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/qaz/keymaps/default/rules.mk
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/msf/rules.mk
diff --git a/keyboards/id80/keymaps/rverst/keymap.c b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/keymap.c
index 3656f48dfe..3656f48dfe 100644
--- a/keyboards/id80/keymaps/rverst/keymap.c
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/keymap.c
diff --git a/keyboards/id80/keymaps/rverst/readme.md b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/readme.md
index ba33980edb..ba33980edb 100644
--- a/keyboards/id80/keymaps/rverst/readme.md
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/readme.md
diff --git a/keyboards/id80/keymaps/rverst/rverst.json b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/rverst.json
index 50235498fe..50235498fe 100644
--- a/keyboards/id80/keymaps/rverst/rverst.json
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/rverst/rverst.json
diff --git a/keyboards/id80/ansi/keymaps/via/keymap.c b/keyboards/idobao/id80/v1/ansi/keymaps/via/keymap.c
index 686ce9ce73..686ce9ce73 100644
--- a/keyboards/id80/ansi/keymaps/via/keymap.c
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/via/keymap.c
diff --git a/keyboards/id80/ansi/keymaps/via/rules.mk b/keyboards/idobao/id80/v1/ansi/keymaps/via/rules.mk
index ca9fed0e6b..ca9fed0e6b 100644
--- a/keyboards/id80/ansi/keymaps/via/rules.mk
+++ b/keyboards/idobao/id80/v1/ansi/keymaps/via/rules.mk
diff --git a/keyboards/id80/ansi/readme.md b/keyboards/idobao/id80/v1/ansi/readme.md
index 1bfae43735..1bfae43735 100644
--- a/keyboards/id80/ansi/readme.md
+++ b/keyboards/idobao/id80/v1/ansi/readme.md
diff --git a/keyboards/id80/ansi/rules.mk b/keyboards/idobao/id80/v1/ansi/rules.mk
index 323c12fc6e..323c12fc6e 100644
--- a/keyboards/id80/ansi/rules.mk
+++ b/keyboards/idobao/id80/v1/ansi/rules.mk
diff --git a/keyboards/id80/config.h b/keyboards/idobao/id80/v1/config.h
index c6cf667382..c6cf667382 100644
--- a/keyboards/id80/config.h
+++ b/keyboards/idobao/id80/v1/config.h
diff --git a/keyboards/id80/info.json b/keyboards/idobao/id80/v1/info.json
index 072b4ca4db..072b4ca4db 100644
--- a/keyboards/id80/info.json
+++ b/keyboards/idobao/id80/v1/info.json
diff --git a/keyboards/id80/iso/config.h b/keyboards/idobao/id80/v1/iso/config.h
index cd9c497442..cd9c497442 100644
--- a/keyboards/id80/iso/config.h
+++ b/keyboards/idobao/id80/v1/iso/config.h
diff --git a/keyboards/id80/iso/keymaps/default/keymap.c b/keyboards/idobao/id80/v1/iso/keymaps/default/keymap.c
index 1cc6067356..1cc6067356 100644
--- a/keyboards/id80/iso/keymaps/default/keymap.c
+++ b/keyboards/idobao/id80/v1/iso/keymaps/default/keymap.c
diff --git a/keyboards/id80/iso/keymaps/default/readme.md b/keyboards/idobao/id80/v1/iso/keymaps/default/readme.md
index 8ae9f656cd..8ae9f656cd 100644
--- a/keyboards/id80/iso/keymaps/default/readme.md
+++ b/keyboards/idobao/id80/v1/iso/keymaps/default/readme.md
diff --git a/keyboards/id80/iso/keymaps/via/keymap.c b/keyboards/idobao/id80/v1/iso/keymaps/via/keymap.c
index 710da2edf1..710da2edf1 100644
--- a/keyboards/id80/iso/keymaps/via/keymap.c
+++ b/keyboards/idobao/id80/v1/iso/keymaps/via/keymap.c
diff --git a/keyboards/id80/iso/keymaps/via/rules.mk b/keyboards/idobao/id80/v1/iso/keymaps/via/rules.mk
index ca9fed0e6b..ca9fed0e6b 100644
--- a/keyboards/id80/iso/keymaps/via/rules.mk
+++ b/keyboards/idobao/id80/v1/iso/keymaps/via/rules.mk
diff --git a/keyboards/id80/iso/readme.md b/keyboards/idobao/id80/v1/iso/readme.md
index 3e0d8ce231..3e0d8ce231 100644
--- a/keyboards/id80/iso/readme.md
+++ b/keyboards/idobao/id80/v1/iso/readme.md
diff --git a/keyboards/id80/iso/rules.mk b/keyboards/idobao/id80/v1/iso/rules.mk
index 323c12fc6e..323c12fc6e 100644
--- a/keyboards/id80/iso/rules.mk
+++ b/keyboards/idobao/id80/v1/iso/rules.mk
diff --git a/keyboards/idobao/id80/v1/readme.md b/keyboards/idobao/id80/v1/readme.md
new file mode 100644
index 0000000000..8a26378b3b
--- /dev/null
+++ b/keyboards/idobao/id80/v1/readme.md
@@ -0,0 +1,27 @@
+# IDOBAO ID80
+
+![ID80](https://ae01.alicdn.com/kf/H0f617c6129c24cfaa26a8c9e8e54851aj.jpg)
+
+A 75% hotswap keyboard from IDOBAO.
+
+## ANSI support:
+
+* Keyboard Maintainer: [Sergey Vlasov](https://github.com/sigprof)
+* Hardware Supported: IDOBAO ID80
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/4000590804514.html), [Drop](https://drop.com/buy/idobao-id80-75-hot-swappable-mechanical-keyboard-kit?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobao/id80/v1/ansi:default
+
+## ISO support:
+
+* Keyboard Maintainer: [Carsten Rose](https://github.com/cwr10010)
+* Hardware Supported: IDOBAO ID80v2
+* Hardware Availability: [IDOBAO](https://www.idobao.net/products/idobao-id80v2-75-hot-swappable-mechanical-keyboard-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobao/id80/v1/iso:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/idobao/id80/v1/rules.mk b/keyboards/idobao/id80/v1/rules.mk
new file mode 100644
index 0000000000..0baebd07fc
--- /dev/null
+++ b/keyboards/idobao/id80/v1/rules.mk
@@ -0,0 +1,24 @@
+# Defalt to the ansi version
+DEFAULT_FOLDER = idobao/id80/v1/ansi
+
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# 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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+# partially generated by KBFirmware JSON to QMK Parser
+# https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/idobao/id80/v1/v1.c b/keyboards/idobao/id80/v1/v1.c
new file mode 100644
index 0000000000..7147b6163e
--- /dev/null
+++ b/keyboards/idobao/id80/v1/v1.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 Sergey Vlasov <sigprof@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "v1.h"
diff --git a/keyboards/id80/id80.h b/keyboards/idobao/id80/v1/v1.h
index a016e39083..a016e39083 100644
--- a/keyboards/id80/id80.h
+++ b/keyboards/idobao/id80/v1/v1.h
diff --git a/keyboards/idobao/id80/v3/config.h b/keyboards/idobao/id80/v3/config.h
index 06ca74a0e9..4b2fb8d056 100644
--- a/keyboards/idobao/id80/v3/config.h
+++ b/keyboards/idobao/id80/v3/config.h
@@ -62,14 +62,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
-
+#undef RGB_DI_PIN
#define RGB_DI_PIN B6
-# define DRIVER_LED_TOTAL 96 /* 16 Bottom 80 top*/
-#ifdef RGB_DI_PIN
-# define RGBLED_NUM 96 /* 16 Bottom 80 top*/
-# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
-#endif
#ifdef RGB_MATRIX_ENABLE
+# define DRIVER_LED_TOTAL 96 /* 16 Bottom 80 top*/
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
@@ -108,7 +104,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+// enabled only if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
diff --git a/keyboards/idobao/id80/v3/rules.mk b/keyboards/idobao/id80/v3/rules.mk
index 49781db616..6805b8f0f9 100644
--- a/keyboards/idobao/id80/v3/rules.mk
+++ b/keyboards/idobao/id80/v3/rules.mk
@@ -17,6 +17,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes
+LTO_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
diff --git a/keyboards/id87/config.h b/keyboards/idobao/id87/v1/config.h
index a268091d40..a268091d40 100644
--- a/keyboards/id87/config.h
+++ b/keyboards/idobao/id87/v1/config.h
diff --git a/keyboards/id87/info.json b/keyboards/idobao/id87/v1/info.json
index f154bbd940..f154bbd940 100644
--- a/keyboards/id87/info.json
+++ b/keyboards/idobao/id87/v1/info.json
diff --git a/keyboards/id87/keymaps/default/keymap.c b/keyboards/idobao/id87/v1/keymaps/default/keymap.c
index 2b07bdb0ec..2b07bdb0ec 100644
--- a/keyboards/id87/keymaps/default/keymap.c
+++ b/keyboards/idobao/id87/v1/keymaps/default/keymap.c
diff --git a/keyboards/id87/keymaps/default/readme.md b/keyboards/idobao/id87/v1/keymaps/default/readme.md
index 6054431de4..6054431de4 100644
--- a/keyboards/id87/keymaps/default/readme.md
+++ b/keyboards/idobao/id87/v1/keymaps/default/readme.md
diff --git a/keyboards/id87/keymaps/via/keymap.c b/keyboards/idobao/id87/v1/keymaps/via/keymap.c
index 534784555c..534784555c 100644
--- a/keyboards/id87/keymaps/via/keymap.c
+++ b/keyboards/idobao/id87/v1/keymaps/via/keymap.c
diff --git a/keyboards/id87/keymaps/via/rules.mk b/keyboards/idobao/id87/v1/keymaps/via/rules.mk
index ca9fed0e6b..ca9fed0e6b 100644
--- a/keyboards/id87/keymaps/via/rules.mk
+++ b/keyboards/idobao/id87/v1/keymaps/via/rules.mk
diff --git a/keyboards/idobao/id87/v1/readme.md b/keyboards/idobao/id87/v1/readme.md
new file mode 100644
index 0000000000..59814f81f7
--- /dev/null
+++ b/keyboards/idobao/id87/v1/readme.md
@@ -0,0 +1,19 @@
+# IDOBAO ID87
+
+![ID87](https://cdn.shopify.com/s/files/1/0382/1348/4675/products/6601EE887B14D36DE54CA137F0E383AE_1024x1024.jpg)
+
+A TKL hotswap board from IDOBAO.
+
+* Keyboard Maintainer: Tybera
+* Hardware Supported: IDOBAO ID87, atmega32u4
+* Hardware Availability: [Idobao](https://www.idobao.net/products/idobao-id87-80-hot-swappable-mechanical-keyboard-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobao/id87/v1:default
+
+Flashing example for this keyboard:
+
+ make idobao/id87/v1:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/id87/rules.mk b/keyboards/idobao/id87/v1/rules.mk
index 5009fceaf9..5009fceaf9 100644
--- a/keyboards/id87/rules.mk
+++ b/keyboards/idobao/id87/v1/rules.mk
diff --git a/keyboards/idobao/id87/v1/v1.c b/keyboards/idobao/id87/v1/v1.c
new file mode 100644
index 0000000000..59dc3daab4
--- /dev/null
+++ b/keyboards/idobao/id87/v1/v1.c
@@ -0,0 +1,15 @@
+/*
+Copyright 2020 Tybera
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "v1.h"
diff --git a/keyboards/id87/id87.h b/keyboards/idobao/id87/v1/v1.h
index 1a75d95755..1a75d95755 100644
--- a/keyboards/id87/id87.h
+++ b/keyboards/idobao/id87/v1/v1.h
diff --git a/keyboards/montex/config.h b/keyboards/idobao/montex/v1/config.h
index 2321ce364e..2321ce364e 100644
--- a/keyboards/montex/config.h
+++ b/keyboards/idobao/montex/v1/config.h
diff --git a/keyboards/montex/info.json b/keyboards/idobao/montex/v1/info.json
index c205e0027a..c205e0027a 100644
--- a/keyboards/montex/info.json
+++ b/keyboards/idobao/montex/v1/info.json
diff --git a/keyboards/montex/keymaps/default/keymap.c b/keyboards/idobao/montex/v1/keymaps/default/keymap.c
index a15c576cbb..a15c576cbb 100644
--- a/keyboards/montex/keymaps/default/keymap.c
+++ b/keyboards/idobao/montex/v1/keymaps/default/keymap.c
diff --git a/keyboards/montex/keymaps/via/keymap.c b/keyboards/idobao/montex/v1/keymaps/via/keymap.c
index eb7875dc32..eb7875dc32 100644
--- a/keyboards/montex/keymaps/via/keymap.c
+++ b/keyboards/idobao/montex/v1/keymaps/via/keymap.c
diff --git a/keyboards/montex/keymaps/via/rules.mk b/keyboards/idobao/montex/v1/keymaps/via/rules.mk
index ca9fed0e6b..ca9fed0e6b 100644
--- a/keyboards/montex/keymaps/via/rules.mk
+++ b/keyboards/idobao/montex/v1/keymaps/via/rules.mk
diff --git a/keyboards/idobao/montex/v1/readme.md b/keyboards/idobao/montex/v1/readme.md
new file mode 100644
index 0000000000..e9d84fa674
--- /dev/null
+++ b/keyboards/idobao/montex/v1/readme.md
@@ -0,0 +1,21 @@
+# IDOBAO MONTEX
+
+A hotswap numpad from IDOBAO.
+
+## Support:
+
+* Keyboard Maintainer: [NachoxMacho](https://github.com/NachoxMacho)
+* Hardware Supported: IDOBAO MONTEX
+* Hardware Availability: [IDOBAO](https://www.idobao.net/products/ldobao-montex-pad-hot-swappable-mechanical-keyboard-kit)
+
+
+To jump to the bootloader, the default in the repository and stock on the board is to hold the 4th key on the top row and tap the first key in the top row.
+On some stock keyboard firmware, the top and second from the top row pins have been reversed so you may need to press those keys on the second row.
+If none of that works, there is a reset button on the PCB underside which you can access by removing the back plate.
+Then press the button labeled SW2 located between the 2 upper LEDs.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobao/montex/v1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/montex/rules.mk b/keyboards/idobao/montex/v1/rules.mk
index b27013f863..b27013f863 100644
--- a/keyboards/montex/rules.mk
+++ b/keyboards/idobao/montex/v1/rules.mk
diff --git a/keyboards/idobao/montex/v1/v1.c b/keyboards/idobao/montex/v1/v1.c
new file mode 100644
index 0000000000..e927383097
--- /dev/null
+++ b/keyboards/idobao/montex/v1/v1.c
@@ -0,0 +1,17 @@
+/* Copyright 2021 NachoxMacho
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
+*/
+
+#include "v1.h"
diff --git a/keyboards/montex/montex.h b/keyboards/idobao/montex/v1/v1.h
index d57097fa88..d57097fa88 100644
--- a/keyboards/montex/montex.h
+++ b/keyboards/idobao/montex/v1/v1.h
diff --git a/keyboards/idobo/config.h b/keyboards/idobo/config.h
deleted file mode 100644
index ffe0bb7011..0000000000
--- a/keyboards/idobo/config.h
+++ /dev/null
@@ -1,122 +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
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0x6964 // ID
-#define PRODUCT_ID 0x0075
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Generic
-#define PRODUCT Idobo
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { B0, B3, C7, B6, C6 }
-#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D5, D3, D2, D1, D0, D4, D6, D7, B4, B5 }
-#define UNUSED_PINS
-
-/* COL2ROW, ROW2COL*/
-#define DIODE_DIRECTION COL2ROW
-
-#define BACKLIGHT_PIN B7
-#define BACKLIGHT_BREATHING
-#define BACKLIGHT_LEVELS 3
-
-#define RGB_DI_PIN F0
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 16
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
- * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
- */
-// #define GRAVE_ESC_CTRL_OVERRIDE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-/* Bootmagic Lite key configuration */
-// #define BOOTMAGIC_LITE_ROW 0
-// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/idobo/idobo.c b/keyboards/idobo/idobo.c
deleted file mode 100644
index ccf654f871..0000000000
--- a/keyboards/idobo/idobo.c
+++ /dev/null
@@ -1,16 +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/>.
- */
-#include "idobo.h"
diff --git a/keyboards/idobo/readme.md b/keyboards/idobo/readme.md
deleted file mode 100644
index 254616decb..0000000000
--- a/keyboards/idobo/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# IDOBO
-
-![IDOBO](imgur.com image replace me!)
-
-75Keys Aluminum Mechanical Keyboard.
-
-Firmware here originally appeared on qmkeyboard.cn
-
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: IDOBO PCB
-Hardware Availability: [IDOBO on Drop](https://drop.com/buy/id75-hot-swappable-ortholinear-keyboard-kit)
-
-Make example for this keyboard (after setting up your build environment):
-
- make idobo:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/idobo/rules.mk b/keyboards/idobo/rules.mk
deleted file mode 100644
index 721b7f5606..0000000000
--- a/keyboards/idobo/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-LTO_ENABLE = yes # Use link time optimization
-
-LAYOUTS = ortho_5x15
diff --git a/keyboards/infinity60/readme.md b/keyboards/infinity60/readme.md
deleted file mode 100644
index d99d1df080..0000000000
--- a/keyboards/infinity60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Infinity 60%
-
-A compact community driven keyboard.
-
-* Keyboard Maintainer: QMK Community
-* Hardware Supported: Infinity 60% PCB
-* Hardware Availability: https://input.club/devices/infinity-keyboard/
-
-Make example for this keyboard (after setting up your build environment):
-
- make infinity60:default
-
-Flashing example for this keyboard:
-
- make infinity60:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/infinity60/rules.mk b/keyboards/infinity60/rules.mk
deleted file mode 100644
index a3e05edde1..0000000000
--- a/keyboards/infinity60/rules.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# MCU name
-MCU = MK20DX128
-
-# Bootloader selection
-BOOTLOADER = kiibohd
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# - BOARD =
-# - PJRC_TEENSY_LC for Teensy LC
-# - PJRC_TEENSY_3 for Teensy 3.0
-# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-# - MCHCK_K20 for Infinity KB
-BOARD = MCHCK_K20
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-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
-
-DEFAULT_FOLDER = infinity60/led
-
-LAYOUTS = 60_ansi_split_bs_rshift
-
-# Enter lower-power sleep mode when on the ChibiOS idle thread
-OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/ergodox_infinity/MEMO.txt b/keyboards/input_club/ergodox_infinity/MEMO.txt
index e2886aa002..e2886aa002 100644
--- a/keyboards/ergodox_infinity/MEMO.txt
+++ b/keyboards/input_club/ergodox_infinity/MEMO.txt
diff --git a/keyboards/ergodox_infinity/chconf.h b/keyboards/input_club/ergodox_infinity/chconf.h
index 710d8aa437..710d8aa437 100644
--- a/keyboards/ergodox_infinity/chconf.h
+++ b/keyboards/input_club/ergodox_infinity/chconf.h
diff --git a/keyboards/ergodox_infinity/config.h b/keyboards/input_club/ergodox_infinity/config.h
index e6f1b81f54..e6f1b81f54 100644
--- a/keyboards/ergodox_infinity/config.h
+++ b/keyboards/input_club/ergodox_infinity/config.h
diff --git a/keyboards/ergodox_infinity/ergodox_infinity.c b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
index e6ac2c4559..e6ac2c4559 100644
--- a/keyboards/ergodox_infinity/ergodox_infinity.c
+++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
diff --git a/keyboards/ergodox_infinity/ergodox_infinity.h b/keyboards/input_club/ergodox_infinity/ergodox_infinity.h
index b9636b69be..b9636b69be 100644
--- a/keyboards/ergodox_infinity/ergodox_infinity.h
+++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.h
diff --git a/keyboards/ergodox_infinity/halconf.h b/keyboards/input_club/ergodox_infinity/halconf.h
index 8c050a2d5c..8c050a2d5c 100644
--- a/keyboards/ergodox_infinity/halconf.h
+++ b/keyboards/input_club/ergodox_infinity/halconf.h
diff --git a/keyboards/ergodox_infinity/info.json b/keyboards/input_club/ergodox_infinity/info.json
index 22b20eec39..22b20eec39 100644
--- a/keyboards/ergodox_infinity/info.json
+++ b/keyboards/input_club/ergodox_infinity/info.json
diff --git a/keyboards/ergodox_infinity/keymaps/default/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c
index cd65001803..cd65001803 100644
--- a/keyboards/ergodox_infinity/keymaps/default/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/default/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/dudeofawesome/README.md b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md
index a0e4565b10..a0e4565b10 100644
--- a/keyboards/ergodox_infinity/keymaps/dudeofawesome/README.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/README.md
diff --git a/keyboards/ergodox_infinity/keymaps/dudeofawesome/config.h b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h
index 9dcf8a7f43..9dcf8a7f43 100644
--- a/keyboards/ergodox_infinity/keymaps/dudeofawesome/config.h
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/config.h
diff --git a/keyboards/ergodox_infinity/keymaps/dudeofawesome/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c
index 675b56edec..675b56edec 100644
--- a/keyboards/ergodox_infinity/keymaps/dudeofawesome/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/dudeofawesome/layers.h b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h
index d852fe9803..d852fe9803 100644
--- a/keyboards/ergodox_infinity/keymaps/dudeofawesome/layers.h
+++ b/keyboards/input_club/ergodox_infinity/keymaps/dudeofawesome/layers.h
diff --git a/keyboards/ergodox_infinity/keymaps/gordon/config.h b/keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h
index 772ce0bac9..772ce0bac9 100644
--- a/keyboards/ergodox_infinity/keymaps/gordon/config.h
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/config.h
diff --git a/keyboards/ergodox_infinity/keymaps/gordon/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c
index c321d546fb..c321d546fb 100644
--- a/keyboards/ergodox_infinity/keymaps/gordon/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/gordon/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk
index 9a56408f8e..9a56408f8e 100644
--- a/keyboards/ergodox_infinity/keymaps/gordon/rules.mk
+++ b/keyboards/input_club/ergodox_infinity/keymaps/gordon/rules.mk
diff --git a/keyboards/ergodox_infinity/keymaps/halfkeyboard/config.h b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h
index bca8571e79..bca8571e79 100644
--- a/keyboards/ergodox_infinity/keymaps/halfkeyboard/config.h
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/config.h
diff --git a/keyboards/ergodox_infinity/keymaps/halfkeyboard/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c
index 3870dd8ffd..3870dd8ffd 100644
--- a/keyboards/ergodox_infinity/keymaps/halfkeyboard/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/halfkeyboard/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk
index 04cd01b2b7..04cd01b2b7 100644
--- a/keyboards/ergodox_infinity/keymaps/halfkeyboard/rules.mk
+++ b/keyboards/input_club/ergodox_infinity/keymaps/halfkeyboard/rules.mk
diff --git a/keyboards/ergodox_infinity/keymaps/input_club/README.md b/keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md
index 31ae23ac40..31ae23ac40 100644
--- a/keyboards/ergodox_infinity/keymaps/input_club/README.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/input_club/README.md
diff --git a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c
index 545429fca0..545429fca0 100644
--- a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/input_club/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/narze/config.h b/keyboards/input_club/ergodox_infinity/keymaps/narze/config.h
index d5ed0a8e9e..d5ed0a8e9e 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/config.h
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/config.h
diff --git a/keyboards/ergodox_infinity/keymaps/narze/default.png.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md
index 744e7d172a..744e7d172a 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/default.png.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/default.png.md
diff --git a/keyboards/ergodox_infinity/keymaps/narze/default_highres.png.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md
index 074e0634d2..074e0634d2 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/default_highres.png.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/default_highres.png.md
diff --git a/keyboards/ergodox_infinity/keymaps/narze/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c
index dd721e9a78..dd721e9a78 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/narze/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md
index 3094b021e0..3094b021e0 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/readme.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/readme.md
diff --git a/keyboards/ergodox_infinity/keymaps/narze/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk
index 4a4ed58610..4a4ed58610 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/rules.mk
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/rules.mk
diff --git a/keyboards/ergodox_infinity/keymaps/narze/visualizer.c b/keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c
index 88f658d6b9..88f658d6b9 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/visualizer.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/narze/visualizer.c
diff --git a/keyboards/ergodox_infinity/keymaps/nordic_ergo/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c
index d08b96cc6e..d08b96cc6e 100644
--- a/keyboards/ergodox_infinity/keymaps/nordic_ergo/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/nordic_ergo/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md
index 2ed5268649..2ed5268649 100644
--- a/keyboards/ergodox_infinity/keymaps/nordic_ergo/readme.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/nordic_ergo/readme.md
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c
index 8cf51842a2..8cf51842a2 100644
--- a/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md
index 3fcb4edf0d..3fcb4edf0d 100644
--- a/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/readme.md
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk
index 74505bd69e..74505bd69e 100644
--- a/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
+++ b/keyboards/input_club/ergodox_infinity/keymaps/not-quite-neo/rules.mk
diff --git a/keyboards/ergodox_infinity/keymaps/rask/README.md b/keyboards/input_club/ergodox_infinity/keymaps/rask/README.md
index 8a13994301..8a13994301 100644
--- a/keyboards/ergodox_infinity/keymaps/rask/README.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rask/README.md
diff --git a/keyboards/ergodox_infinity/keymaps/rask/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c
index e31c1c5d6b..e31c1c5d6b 100644
--- a/keyboards/ergodox_infinity/keymaps/rask/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rask/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/rjhilgefort/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c
index 31d218ebfb..31d218ebfb 100644
--- a/keyboards/ergodox_infinity/keymaps/rjhilgefort/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/keymap.c
diff --git a/keyboards/ergodox_infinity/keymaps/rjhilgefort/readme.md b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md
index bb141b99dc..bb141b99dc 100644
--- a/keyboards/ergodox_infinity/keymaps/rjhilgefort/readme.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/rjhilgefort/readme.md
diff --git a/keyboards/ergodox_infinity/keymaps/trulyergonomic/README.md b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md
index 1e248742ee..1e248742ee 100644
--- a/keyboards/ergodox_infinity/keymaps/trulyergonomic/README.md
+++ b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/README.md
diff --git a/keyboards/ergodox_infinity/keymaps/trulyergonomic/keymap.c b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c
index 02f409ad9e..02f409ad9e 100644
--- a/keyboards/ergodox_infinity/keymaps/trulyergonomic/keymap.c
+++ b/keyboards/input_club/ergodox_infinity/keymaps/trulyergonomic/keymap.c
diff --git a/keyboards/ergodox_infinity/mcuconf.h b/keyboards/input_club/ergodox_infinity/mcuconf.h
index f6730b99ca..f6730b99ca 100644
--- a/keyboards/ergodox_infinity/mcuconf.h
+++ b/keyboards/input_club/ergodox_infinity/mcuconf.h
diff --git a/keyboards/input_club/ergodox_infinity/readme.md b/keyboards/input_club/ergodox_infinity/readme.md
new file mode 100644
index 0000000000..1f8b643340
--- /dev/null
+++ b/keyboards/input_club/ergodox_infinity/readme.md
@@ -0,0 +1,66 @@
+# ErgoDox Infinity
+
+The Infinity is two completely independent keyboards, and needs to be flashed
+for the left and right halves seperately. To flash them:
+
+ - Make sure you are in the top-level qmk_firmware directory
+
+ - Build the firmware with `make input_club/ergodox_infinity:keymapname`
+
+ - Plug in the left hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make input_club/ergodox_infinity:keymapname:dfu-util`
+
+ - Plug in the right hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make input_club/ergodox_infinity:keymapname:dfu-util`
+
+More information on the Infinity firmware is available in the [TMK/chibios for
+Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md)
+
+## Infinity Two Halves
+
+The Infinity is two completely independent keyboards, that can connect together.
+You have a few options in how you flash the firmware:
+
+- Add `#define EE_HANDS` to your config.h, initialize the EEPROM values (see below),
+ and then flash the same firmware to both halves.
+
+- Flash with the instructions above, which assume the left hand is connected to USB.
+
+- For minor changes such as changing only the keymap without having updated
+ any part of the firmware code itself, you can program only the half connected to USB,
+ but it is safest to program both halves.
+
+### EE_HANDS initialization
+
+To initialize the EEPROM values for `EE_HANDS` to work properly, these steps should work.
+They only need to be done once, unless you reset the EEPROM later.
+
+ - Plug in the left keyboard half to the computer, and press its program button.
+
+ - Flash the left half with `make input_club/ergodox_infinity:default:dfu-util-split-left`
+ (If you need to use a different method to flash your keyboard, still run this command,
+ and abort it with Ctrl+C when the flashing attempts starts to print errors,
+ then flash the built firmware).
+
+ - On the left half, press the top vertical 1.5U key (second from the top in the rightmost column) once,
+ then the 1U key at the bottom in the opposite corner (bottom left corner).
+
+ - Plug in the right keyboard half to the computer, and press its program button.
+
+ - Flash the right half with `make input_club/ergodox_infinity:default:dfu-util-split-right`
+
+ - On the right half, press the top vertical 1.5U key (second from the top in the leftmost column) once,
+ then the 1U key at the bottom in the opposite corner (bottom right corner).
+
+ - Add `#define EE_HANDS` to the config.h file of your keymap, and build your firmware using
+ `make input_club/ergodox_infinity:keymapname`.
+
+ - After this, you can flash both halves with the same firmware, _without_ risking a mirrored keyboard when connected the wrong way.
+ If you reset your EEPROM later, you'll have to follow these steps again, though.
+
diff --git a/keyboards/ergodox_infinity/rules.mk b/keyboards/input_club/ergodox_infinity/rules.mk
index c35f54de30..c35f54de30 100644
--- a/keyboards/ergodox_infinity/rules.mk
+++ b/keyboards/input_club/ergodox_infinity/rules.mk
diff --git a/keyboards/infinity60/chconf.h b/keyboards/input_club/infinity60/chconf.h
index 3f1f9a8d76..3f1f9a8d76 100644
--- a/keyboards/infinity60/chconf.h
+++ b/keyboards/input_club/infinity60/chconf.h
diff --git a/keyboards/infinity60/config.h b/keyboards/input_club/infinity60/config.h
index e73a663b39..e73a663b39 100644
--- a/keyboards/infinity60/config.h
+++ b/keyboards/input_club/infinity60/config.h
diff --git a/keyboards/infinity60/halconf.h b/keyboards/input_club/infinity60/halconf.h
index f2a330b416..f2a330b416 100644
--- a/keyboards/infinity60/halconf.h
+++ b/keyboards/input_club/infinity60/halconf.h
diff --git a/keyboards/infinity60/infinity60.c b/keyboards/input_club/infinity60/infinity60.c
index 73751140ea..73751140ea 100644
--- a/keyboards/infinity60/infinity60.c
+++ b/keyboards/input_club/infinity60/infinity60.c
diff --git a/keyboards/infinity60/infinity60.h b/keyboards/input_club/infinity60/infinity60.h
index ac1470d5f6..ac1470d5f6 100644
--- a/keyboards/infinity60/infinity60.h
+++ b/keyboards/input_club/infinity60/infinity60.h
diff --git a/keyboards/infinity60/info.json b/keyboards/input_club/infinity60/info.json
index 3fbd8b1b25..3fbd8b1b25 100644
--- a/keyboards/infinity60/info.json
+++ b/keyboards/input_club/infinity60/info.json
diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/input_club/infinity60/keymaps/default/keymap.c
index 334c24e29e..334c24e29e 100644
--- a/keyboards/infinity60/keymaps/default/keymap.c
+++ b/keyboards/input_club/infinity60/keymaps/default/keymap.c
diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/input_club/infinity60/keymaps/depariel/keymap.c
index 22d74b866b..22d74b866b 100755
--- a/keyboards/infinity60/keymaps/depariel/keymap.c
+++ b/keyboards/input_club/infinity60/keymaps/depariel/keymap.c
diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/input_club/infinity60/keymaps/hasu/keymap.c
index be14c1b977..be14c1b977 100644
--- a/keyboards/infinity60/keymaps/hasu/keymap.c
+++ b/keyboards/input_club/infinity60/keymaps/hasu/keymap.c
diff --git a/keyboards/infinity60/keymaps/jpetermans/config.h b/keyboards/input_club/infinity60/keymaps/jpetermans/config.h
index 1949a9ad9d..1949a9ad9d 100644
--- a/keyboards/infinity60/keymaps/jpetermans/config.h
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/config.h
diff --git a/keyboards/infinity60/keymaps/jpetermans/keymap.c b/keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c
index 3c2e0d4da8..3c2e0d4da8 100644
--- a/keyboards/infinity60/keymaps/jpetermans/keymap.c
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/keymap.c
diff --git a/keyboards/infinity60/keymaps/jpetermans/readme.md b/keyboards/input_club/infinity60/keymaps/jpetermans/readme.md
index 00421015bd..00421015bd 100644
--- a/keyboards/infinity60/keymaps/jpetermans/readme.md
+++ b/keyboards/input_club/infinity60/keymaps/jpetermans/readme.md
diff --git a/keyboards/infinity60/led.c b/keyboards/input_club/infinity60/led.c
index 8effcea81a..8effcea81a 100644
--- a/keyboards/infinity60/led.c
+++ b/keyboards/input_club/infinity60/led.c
diff --git a/keyboards/infinity60/led/config.h b/keyboards/input_club/infinity60/led/config.h
index 5bd3b590b9..5bd3b590b9 100644
--- a/keyboards/infinity60/led/config.h
+++ b/keyboards/input_club/infinity60/led/config.h
diff --git a/keyboards/infinity60/led/readme.md b/keyboards/input_club/infinity60/led/readme.md
index d31335031f..d31335031f 100644
--- a/keyboards/infinity60/led/readme.md
+++ b/keyboards/input_club/infinity60/led/readme.md
diff --git a/keyboards/infinity60/led/rules.mk b/keyboards/input_club/infinity60/led/rules.mk
index d48f3b73a5..d48f3b73a5 100644
--- a/keyboards/infinity60/led/rules.mk
+++ b/keyboards/input_club/infinity60/led/rules.mk
diff --git a/keyboards/infinity60/led_controller.c b/keyboards/input_club/infinity60/led_controller.c
index cf3edf20dd..cf3edf20dd 100644
--- a/keyboards/infinity60/led_controller.c
+++ b/keyboards/input_club/infinity60/led_controller.c
diff --git a/keyboards/infinity60/led_controller.h b/keyboards/input_club/infinity60/led_controller.h
index e4b4717646..e4b4717646 100644
--- a/keyboards/infinity60/led_controller.h
+++ b/keyboards/input_club/infinity60/led_controller.h
diff --git a/keyboards/infinity60/mcuconf.h b/keyboards/input_club/infinity60/mcuconf.h
index 6af85d0796..6af85d0796 100644
--- a/keyboards/infinity60/mcuconf.h
+++ b/keyboards/input_club/infinity60/mcuconf.h
diff --git a/keyboards/input_club/infinity60/readme.md b/keyboards/input_club/infinity60/readme.md
new file mode 100644
index 0000000000..e8ee6a9dad
--- /dev/null
+++ b/keyboards/input_club/infinity60/readme.md
@@ -0,0 +1,17 @@
+# Infinity 60%
+
+A compact community driven keyboard.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Infinity 60% PCB
+* Hardware Availability: https://input.club/devices/infinity-keyboard/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/infinity60/rev1:default
+
+Flashing example for this keyboard:
+
+ make input_club/infinity60/rev1:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/infinity60/rev1/config.h b/keyboards/input_club/infinity60/rev1/config.h
index d4ab34bccc..d4ab34bccc 100644
--- a/keyboards/infinity60/rev1/config.h
+++ b/keyboards/input_club/infinity60/rev1/config.h
diff --git a/keyboards/infinity60/rev1/readme.md b/keyboards/input_club/infinity60/rev1/readme.md
index 5df5cf5336..5df5cf5336 100644
--- a/keyboards/infinity60/rev1/readme.md
+++ b/keyboards/input_club/infinity60/rev1/readme.md
diff --git a/keyboards/jisplit89/rev1/rules.mk b/keyboards/input_club/infinity60/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/jisplit89/rev1/rules.mk
+++ b/keyboards/input_club/infinity60/rev1/rules.mk
diff --git a/keyboards/input_club/infinity60/rules.mk b/keyboards/input_club/infinity60/rules.mk
new file mode 100644
index 0000000000..7e21a06a9b
--- /dev/null
+++ b/keyboards/input_club/infinity60/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = MK20DX128
+
+# Bootloader selection
+BOOTLOADER = kiibohd
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# - BOARD =
+# - PJRC_TEENSY_LC for Teensy LC
+# - PJRC_TEENSY_3 for Teensy 3.0
+# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+# - MCHCK_K20 for Infinity KB
+BOARD = MCHCK_K20
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+
+DEFAULT_FOLDER = input_club/infinity60/led
+
+LAYOUTS = 60_ansi_split_bs_rshift
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/k_type/chconf.h b/keyboards/input_club/k_type/chconf.h
index ae0cce51ed..ae0cce51ed 100644
--- a/keyboards/k_type/chconf.h
+++ b/keyboards/input_club/k_type/chconf.h
diff --git a/keyboards/k_type/config.h b/keyboards/input_club/k_type/config.h
index de73e06a98..de73e06a98 100644
--- a/keyboards/k_type/config.h
+++ b/keyboards/input_club/k_type/config.h
diff --git a/keyboards/k_type/halconf.h b/keyboards/input_club/k_type/halconf.h
index c615d9656f..c615d9656f 100644
--- a/keyboards/k_type/halconf.h
+++ b/keyboards/input_club/k_type/halconf.h
diff --git a/keyboards/k_type/i2c_master.c b/keyboards/input_club/k_type/i2c_master.c
index af34d55ef6..af34d55ef6 100644
--- a/keyboards/k_type/i2c_master.c
+++ b/keyboards/input_club/k_type/i2c_master.c
diff --git a/keyboards/k_type/i2c_master.h b/keyboards/input_club/k_type/i2c_master.h
index d4e9d6878f..d4e9d6878f 100644
--- a/keyboards/k_type/i2c_master.h
+++ b/keyboards/input_club/k_type/i2c_master.h
diff --git a/keyboards/k_type/info.json b/keyboards/input_club/k_type/info.json
index cf0c9253bd..cf0c9253bd 100644
--- a/keyboards/k_type/info.json
+++ b/keyboards/input_club/k_type/info.json
diff --git a/keyboards/k_type/is31fl3733-dual.c b/keyboards/input_club/k_type/is31fl3733-dual.c
index e76479b01a..e76479b01a 100644
--- a/keyboards/k_type/is31fl3733-dual.c
+++ b/keyboards/input_club/k_type/is31fl3733-dual.c
diff --git a/keyboards/k_type/is31fl3733-dual.h b/keyboards/input_club/k_type/is31fl3733-dual.h
index d4af1848fb..d4af1848fb 100644
--- a/keyboards/k_type/is31fl3733-dual.h
+++ b/keyboards/input_club/k_type/is31fl3733-dual.h
diff --git a/keyboards/k_type/k_type-rgbdriver.c b/keyboards/input_club/k_type/k_type-rgbdriver.c
index 5ae132d63a..5ae132d63a 100644
--- a/keyboards/k_type/k_type-rgbdriver.c
+++ b/keyboards/input_club/k_type/k_type-rgbdriver.c
diff --git a/keyboards/k_type/k_type.c b/keyboards/input_club/k_type/k_type.c
index 0e10710cb1..0e10710cb1 100644
--- a/keyboards/k_type/k_type.c
+++ b/keyboards/input_club/k_type/k_type.c
diff --git a/keyboards/k_type/k_type.h b/keyboards/input_club/k_type/k_type.h
index 077c013066..077c013066 100644
--- a/keyboards/k_type/k_type.h
+++ b/keyboards/input_club/k_type/k_type.h
diff --git a/keyboards/k_type/keymaps/andrew-fahmy/config.h b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
index c035255de6..c035255de6 100644
--- a/keyboards/k_type/keymaps/andrew-fahmy/config.h
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
diff --git a/keyboards/k_type/keymaps/andrew-fahmy/keymap.c b/keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c
index 1611c25e41..1611c25e41 100644
--- a/keyboards/k_type/keymaps/andrew-fahmy/keymap.c
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/keymap.c
diff --git a/keyboards/k_type/keymaps/andrew-fahmy/rules.mk b/keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk
index aad92997d0..aad92997d0 100644
--- a/keyboards/k_type/keymaps/andrew-fahmy/rules.mk
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/rules.mk
diff --git a/keyboards/k_type/keymaps/belak/keymap.c b/keyboards/input_club/k_type/keymaps/belak/keymap.c
index e920579317..e920579317 100644
--- a/keyboards/k_type/keymaps/belak/keymap.c
+++ b/keyboards/input_club/k_type/keymaps/belak/keymap.c
diff --git a/keyboards/k_type/keymaps/default/keymap.c b/keyboards/input_club/k_type/keymaps/default/keymap.c
index ef069af650..ef069af650 100644
--- a/keyboards/k_type/keymaps/default/keymap.c
+++ b/keyboards/input_club/k_type/keymaps/default/keymap.c
diff --git a/keyboards/k_type/keymaps/default/rules.mk b/keyboards/input_club/k_type/keymaps/default/rules.mk
index aad92997d0..aad92997d0 100644
--- a/keyboards/k_type/keymaps/default/rules.mk
+++ b/keyboards/input_club/k_type/keymaps/default/rules.mk
diff --git a/keyboards/k_type/mcuconf.h b/keyboards/input_club/k_type/mcuconf.h
index b898d25e88..b898d25e88 100644
--- a/keyboards/k_type/mcuconf.h
+++ b/keyboards/input_club/k_type/mcuconf.h
diff --git a/keyboards/input_club/k_type/readme.md b/keyboards/input_club/k_type/readme.md
new file mode 100644
index 0000000000..a69ca38d4d
--- /dev/null
+++ b/keyboards/input_club/k_type/readme.md
@@ -0,0 +1,17 @@
+# Input Club K-Type
+
+Firmware for custom keyboard PCB with TKL Key Layout
+
+* Keyboard Maintainer: [Kaleb Elwert](https://github.com/belak)
+* Hardware Supported: Input Club K-Type
+* Hardware Availability: [Input Club](https://input.club/k-type/), [Massdrop](https://www.massdrop.com/buy/massdrop-x-input-club-k-type-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/k_type:default
+
+Flashing example for this keyboard:
+
+ make input_club/k_type:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/k_type/rules.mk b/keyboards/input_club/k_type/rules.mk
index 93c81d9ada..93c81d9ada 100644
--- a/keyboards/k_type/rules.mk
+++ b/keyboards/input_club/k_type/rules.mk
diff --git a/keyboards/whitefox/board_is31fl3731c.h b/keyboards/input_club/whitefox/board_is31fl3731c.h
index 238d30cb44..238d30cb44 100644
--- a/keyboards/whitefox/board_is31fl3731c.h
+++ b/keyboards/input_club/whitefox/board_is31fl3731c.h
diff --git a/keyboards/whitefox/chconf.h b/keyboards/input_club/whitefox/chconf.h
index d220eec49b..d220eec49b 100644
--- a/keyboards/whitefox/chconf.h
+++ b/keyboards/input_club/whitefox/chconf.h
diff --git a/keyboards/whitefox/config.h b/keyboards/input_club/whitefox/config.h
index d2b6639a30..d2b6639a30 100644
--- a/keyboards/whitefox/config.h
+++ b/keyboards/input_club/whitefox/config.h
diff --git a/keyboards/whitefox/halconf.h b/keyboards/input_club/whitefox/halconf.h
index 04a228dc9e..04a228dc9e 100644
--- a/keyboards/whitefox/halconf.h
+++ b/keyboards/input_club/whitefox/halconf.h
diff --git a/keyboards/whitefox/info.json b/keyboards/input_club/whitefox/info.json
index a920d7c129..a920d7c129 100644
--- a/keyboards/whitefox/info.json
+++ b/keyboards/input_club/whitefox/info.json
diff --git a/keyboards/whitefox/keymaps/billypython/config.h b/keyboards/input_club/whitefox/keymaps/billypython/config.h
index 4b511eb848..4b511eb848 100644
--- a/keyboards/whitefox/keymaps/billypython/config.h
+++ b/keyboards/input_club/whitefox/keymaps/billypython/config.h
diff --git a/keyboards/whitefox/keymaps/billypython/keymap.c b/keyboards/input_club/whitefox/keymaps/billypython/keymap.c
index 79758de807..79758de807 100644
--- a/keyboards/whitefox/keymaps/billypython/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/billypython/keymap.c
diff --git a/keyboards/whitefox/keymaps/billypython/rules.mk b/keyboards/input_club/whitefox/keymaps/billypython/rules.mk
index 4bb1fdfaf7..4bb1fdfaf7 100644
--- a/keyboards/whitefox/keymaps/billypython/rules.mk
+++ b/keyboards/input_club/whitefox/keymaps/billypython/rules.mk
diff --git a/keyboards/whitefox/keymaps/default/keymap.c b/keyboards/input_club/whitefox/keymaps/default/keymap.c
index 353e282f2d..353e282f2d 100644
--- a/keyboards/whitefox/keymaps/default/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/default/keymap.c
diff --git a/keyboards/whitefox/keymaps/dhertz/keymap.c b/keyboards/input_club/whitefox/keymaps/dhertz/keymap.c
index 1d3bd224de..1d3bd224de 100644
--- a/keyboards/whitefox/keymaps/dhertz/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/dhertz/keymap.c
diff --git a/keyboards/whitefox/keymaps/dudeofawesome/keymap.c b/keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c
index 2388201b7e..2388201b7e 100644
--- a/keyboards/whitefox/keymaps/dudeofawesome/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/dudeofawesome/keymap.c
diff --git a/keyboards/whitefox/keymaps/dudeofawesome/readme.md b/keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md
index b5a33e74f6..b5a33e74f6 100644
--- a/keyboards/whitefox/keymaps/dudeofawesome/readme.md
+++ b/keyboards/input_club/whitefox/keymaps/dudeofawesome/readme.md
diff --git a/keyboards/whitefox/keymaps/jetpacktuxedo/keymap.c b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c
index 8a93f03188..8a93f03188 100644
--- a/keyboards/whitefox/keymaps/jetpacktuxedo/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/keymap.c
diff --git a/keyboards/whitefox/keymaps/jetpacktuxedo/readme.md b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md
index 2c714f067a..2c714f067a 100644
--- a/keyboards/whitefox/keymaps/jetpacktuxedo/readme.md
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/readme.md
diff --git a/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk
index c9c8cbea51..c9c8cbea51 100644
--- a/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk
+++ b/keyboards/input_club/whitefox/keymaps/jetpacktuxedo/rules.mk
diff --git a/keyboards/whitefox/keymaps/kim-kim/keymap.c b/keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c
index baaa136873..baaa136873 100644
--- a/keyboards/whitefox/keymaps/kim-kim/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/kim-kim/keymap.c
diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/input_club/whitefox/keymaps/konstantin/config.h
index 3c2583e2d4..3c2583e2d4 100644
--- a/keyboards/whitefox/keymaps/konstantin/config.h
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/config.h
diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/input_club/whitefox/keymaps/konstantin/keymap.c
index 4c587dd272..4c587dd272 100644
--- a/keyboards/whitefox/keymaps/konstantin/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/keymap.c
diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/input_club/whitefox/keymaps/konstantin/rules.mk
index db238f1d04..db238f1d04 100644
--- a/keyboards/whitefox/keymaps/konstantin/rules.mk
+++ b/keyboards/input_club/whitefox/keymaps/konstantin/rules.mk
diff --git a/keyboards/whitefox/keymaps/matt3o/keymap.c b/keyboards/input_club/whitefox/keymaps/matt3o/keymap.c
index bb84196684..bb84196684 100644
--- a/keyboards/whitefox/keymaps/matt3o/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/matt3o/keymap.c
diff --git a/keyboards/whitefox/keymaps/mattrighetti/keymap.c b/keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c
index 67aed537dd..67aed537dd 100644
--- a/keyboards/whitefox/keymaps/mattrighetti/keymap.c
+++ b/keyboards/input_club/whitefox/keymaps/mattrighetti/keymap.c
diff --git a/keyboards/whitefox/keymaps/mattrighetti/rules.mk b/keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk
index 7a421cc9ae..7a421cc9ae 100644
--- a/keyboards/whitefox/keymaps/mattrighetti/rules.mk
+++ b/keyboards/input_club/whitefox/keymaps/mattrighetti/rules.mk
diff --git a/keyboards/whitefox/mcuconf.h b/keyboards/input_club/whitefox/mcuconf.h
index 28f3c6cdae..28f3c6cdae 100644
--- a/keyboards/whitefox/mcuconf.h
+++ b/keyboards/input_club/whitefox/mcuconf.h
diff --git a/keyboards/input_club/whitefox/readme.md b/keyboards/input_club/whitefox/readme.md
new file mode 100644
index 0000000000..d6676f6ce7
--- /dev/null
+++ b/keyboards/input_club/whitefox/readme.md
@@ -0,0 +1,17 @@
+# WhiteFox
+
+A compact 65% keyboard.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Whitefox PCB
+* Hardware Availability: https://input.club/whitefox/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make input_club/whitefox:default
+
+Flashing example for this keyboard:
+
+ make input_club/whitefox:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/whitefox/rules.mk b/keyboards/input_club/whitefox/rules.mk
index dfdb5845ab..dfdb5845ab 100644
--- a/keyboards/whitefox/rules.mk
+++ b/keyboards/input_club/whitefox/rules.mk
diff --git a/keyboards/whitefox/whitefox.c b/keyboards/input_club/whitefox/whitefox.c
index 99c59f7732..99c59f7732 100644
--- a/keyboards/whitefox/whitefox.c
+++ b/keyboards/input_club/whitefox/whitefox.c
diff --git a/keyboards/whitefox/whitefox.h b/keyboards/input_club/whitefox/whitefox.h
index 7e6648e5e7..7e6648e5e7 100644
--- a/keyboards/whitefox/whitefox.h
+++ b/keyboards/input_club/whitefox/whitefox.h
diff --git a/keyboards/ivy/ivy.h b/keyboards/ivy/ivy.h
deleted file mode 100644
index 2cba5f4956..0000000000
--- a/keyboards/ivy/ivy.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_ivy_rev1
- #include "rev1.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/ivy/readme.md b/keyboards/ivy/readme.md
deleted file mode 100644
index f70630b52b..0000000000
--- a/keyboards/ivy/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-IVY
-===
-
-![Ivy](https://i.imgur.com/fnVQet6.jpg)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ivy/rev1:default
-
-Install examples:
-
- make ivy/rev1:default:dfu
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ivy/rules.mk b/keyboards/ivy/rules.mk
deleted file mode 100644
index 66812904cd..0000000000
--- a/keyboards/ivy/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-DEFAULT_FOLDER = ivy/rev1
diff --git a/keyboards/jisplit89/jisplit89.h b/keyboards/jisplit89/jisplit89.h
deleted file mode 100644
index b59b5a66a2..0000000000
--- a/keyboards/jisplit89/jisplit89.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Copyright 2020 Salicylic_Acid
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#ifdef KEYBOARD_jisplit89_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/jisplit89/readme.md b/keyboards/jisplit89/readme.md
deleted file mode 100644
index d222874577..0000000000
--- a/keyboards/jisplit89/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# JISplit89
-
-![jisplit89](https://s2.booth.pm/1d33594d-0c5f-4f93-baf5-2e89e0d99afc/i/1916810/ee9743ff-b03d-4ab8-8130-ddaad3c1b30d_base_resized.jpg)
-
-This is 89 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: jisplit89 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1916810)
-
-Make example for this keyboard (after setting up your build environment):
-
- make jisplit89:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/jisplit89-build-guide)
diff --git a/keyboards/jisplit89/rules.mk b/keyboards/jisplit89/rules.mk
deleted file mode 100644
index 5427cabfa2..0000000000
--- a/keyboards/jisplit89/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = jisplit89/rev1
diff --git a/keyboards/jm60/jm60.c b/keyboards/jm60/jm60.c
index f7b434f30e..823892dce9 100644
--- a/keyboards/jm60/jm60.c
+++ b/keyboards/jm60/jm60.c
@@ -20,3 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
void board_init(void) {
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
}
+
+void bootloader_jump(void) {
+ // This board doesn't use the "standard" stm32duino bootloader. There's no information on how to jump to the custom bootloader, so all we can do here is reset.
+ NVIC_SystemReset();
+}
diff --git a/keyboards/jm60/rules.mk b/keyboards/jm60/rules.mk
index 6cb13d932d..c6de64a130 100644
--- a/keyboards/jm60/rules.mk
+++ b/keyboards/jm60/rules.mk
@@ -4,6 +4,9 @@ MCU = STM32F103
MCU_LDSCRIPT = jm60_bootloader
BOARD = ST_NUCLEO64_F103RB
+# Bootloader selection
+BOOTLOADER = custom
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/jnao/readme.md b/keyboards/jnao/readme.md
deleted file mode 100644
index 08cf10acaa..0000000000
--- a/keyboards/jnao/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-JNAO
-====
-
-An no-frills 5x12 or 4x12 ortholinear keyboard
-
-Keyboard Maintainer: [That-Canadian](https://github.com/that-canadian)
-Hardware Supported: JNAO PCB
-Hardware Availability: [SpaceCat](https://spacecat.design) and [Keebio](https://keeb.io/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make jnao:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/jolofsor/denial75/rules.mk b/keyboards/jolofsor/denial75/rules.mk
index 0d5a61e255..61ec6a921a 100644
--- a/keyboards/jolofsor/denial75/rules.mk
+++ b/keyboards/jolofsor/denial75/rules.mk
@@ -12,8 +12,7 @@ MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
+NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/just60/readme.md b/keyboards/just60/readme.md
deleted file mode 100644
index f78adcd529..0000000000
--- a/keyboards/just60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Just60
-
-Just60 keyboard produced by Yang. The keyboard comes with a custom Mass Storage Device bootloader and a TMK based firmware from ydkb.io.
-
-To use a QMK based firmware, you might want to install a QMK bootloader. The PCB exposes 6 pins for ISP(In-System Programming), and they are located just under the ATMega32U4 chip. From left to right, the pins are `VCC`, `SCLK`, `MOSI`, `MISO`, `RESET`, `GND`. The `GND` is the square one. You could program the flash with any AVR programmer, or a Raspberry Pi with `avrdude`.
-
-Backlight LEDs and Bluetooth are not working yet.
-
-* Keyboard Maintainer: [Jianfei Wang](https://github.com/thinxer)
-* Hardware Supported: Just60 (atmega32u4)
-* Hardware Availability: https://item.taobao.com/item.htm?id=564176654249
-
-Make example for this keyboard (after setting up your build environment):
-
- make just60:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/k_type/readme.md b/keyboards/k_type/readme.md
deleted file mode 100644
index 11123c357c..0000000000
--- a/keyboards/k_type/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Input Club K-Type
-
-Firmware for custom keyboard PCB with TKL Key Layout
-
-* Keyboard Maintainer: [Kaleb Elwert](https://github.com/belak)
-* Hardware Supported: Input Club K-Type
-* Hardware Availability: [Input Club](https://input.club/k-type/), [Massdrop](https://www.massdrop.com/buy/massdrop-x-input-club-k-type-mechanical-keyboard)
-
-Make example for this keyboard (after setting up your build environment):
-
- make k_type:default
-
-Flashing example for this keyboard:
-
- make k_type:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kabedon/kabedon980/config.h b/keyboards/kabedon/kabedon980/config.h
index 5dc70dfebf..db93dfcf85 100644
--- a/keyboards/kabedon/kabedon980/config.h
+++ b/keyboards/kabedon/kabedon980/config.h
@@ -32,21 +32,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 13
/* Keyboard Matrix Assignments */
-#define MATRIX_ROW_PINS {D0,D2,F7,B1,B0,D6,C7,D7,B5,B2}
-#define MATRIX_COL_PINS {F5,F4,F6,C6,B6,B4,D3,D1,D4,F1,B3,D5,F0}
+#define MATRIX_ROW_PINS {D0,D2,F7,B1,B0,D6,C7,D7,B5,B2}
+#define MATRIX_COL_PINS {F5,F4,F6,C6,B6,B4,D3,D1,D4,F1,B3,D5,F0}
#define UNUSED_PINS
-#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
-#define RGB_DI_PIN B7
+#define RGB_DI_PIN B7
#ifdef RGB_DI_PIN
#define RGBLED_NUM 20
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
- #define RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_ANIMATIONS
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/kabedon/kabedon980/keymaps/via/keymap.c b/keyboards/kabedon/kabedon980/keymaps/via/keymap.c
index 44574452bf..76eaa3968a 100644
--- a/keyboards/kabedon/kabedon980/keymaps/via/keymap.c
+++ b/keyboards/kabedon/kabedon980/keymaps/via/keymap.c
@@ -6,32 +6,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
-
+
[1] = LAYOUT(
RGB_MOD, RGB_TOG, RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD, RGB_SPI, RGB_SPD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
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(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
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(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- 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/kagamidget/readme.md b/keyboards/kagamidget/readme.md
deleted file mode 100644
index af38fdd858..0000000000
--- a/keyboards/kagamidget/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# KagaMidget
-
-![KagaMidget](https://raw.githubusercontent.com/yynmt/KagaMidget/master/images/main_image.jpg)
-
-KagaMidget is 40% tiny keyboard.
-
-Keyboard Maintainer: [yynmt](https://github.com/yynmt)
-Hardware Supported: KagaMidget PCBs, ProMicro supported
-
-Make example for this keyboard (after setting up your build environment):
-
- make kagamidget:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bigseries/3key/.noci b/keyboards/kagizaraya/chidori/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/bigseries/3key/.noci
+++ b/keyboards/kagizaraya/chidori/.noci
diff --git a/keyboards/chidori/board.c b/keyboards/kagizaraya/chidori/board.c
index e00156eb90..e00156eb90 100644
--- a/keyboards/chidori/board.c
+++ b/keyboards/kagizaraya/chidori/board.c
diff --git a/keyboards/chidori/board.h b/keyboards/kagizaraya/chidori/board.h
index 892ea6c0f1..892ea6c0f1 100644
--- a/keyboards/chidori/board.h
+++ b/keyboards/kagizaraya/chidori/board.h
diff --git a/keyboards/chidori/chidori.c b/keyboards/kagizaraya/chidori/chidori.c
index 229982724e..229982724e 100644
--- a/keyboards/chidori/chidori.c
+++ b/keyboards/kagizaraya/chidori/chidori.c
diff --git a/keyboards/chidori/chidori.h b/keyboards/kagizaraya/chidori/chidori.h
index d82b9217fb..d82b9217fb 100644
--- a/keyboards/chidori/chidori.h
+++ b/keyboards/kagizaraya/chidori/chidori.h
diff --git a/keyboards/chidori/config.h b/keyboards/kagizaraya/chidori/config.h
index 2db5d57ef7..2db5d57ef7 100644
--- a/keyboards/chidori/config.h
+++ b/keyboards/kagizaraya/chidori/config.h
diff --git a/keyboards/chidori/info.json b/keyboards/kagizaraya/chidori/info.json
index 9c879c7649..9c879c7649 100644
--- a/keyboards/chidori/info.json
+++ b/keyboards/kagizaraya/chidori/info.json
diff --git a/keyboards/chidori/keymaps/default/config.h b/keyboards/kagizaraya/chidori/keymaps/default/config.h
index 1501061e79..1501061e79 100644
--- a/keyboards/chidori/keymaps/default/config.h
+++ b/keyboards/kagizaraya/chidori/keymaps/default/config.h
diff --git a/keyboards/chidori/keymaps/default/keymap.c b/keyboards/kagizaraya/chidori/keymaps/default/keymap.c
index 373b5ec83b..373b5ec83b 100644
--- a/keyboards/chidori/keymaps/default/keymap.c
+++ b/keyboards/kagizaraya/chidori/keymaps/default/keymap.c
diff --git a/keyboards/chidori/keymaps/default/readme.md b/keyboards/kagizaraya/chidori/keymaps/default/readme.md
index 8e66dc4b39..8e66dc4b39 100644
--- a/keyboards/chidori/keymaps/default/readme.md
+++ b/keyboards/kagizaraya/chidori/keymaps/default/readme.md
diff --git a/keyboards/chidori/keymaps/extended/config.h b/keyboards/kagizaraya/chidori/keymaps/extended/config.h
index 0c07b315a8..0c07b315a8 100644
--- a/keyboards/chidori/keymaps/extended/config.h
+++ b/keyboards/kagizaraya/chidori/keymaps/extended/config.h
diff --git a/keyboards/chidori/keymaps/extended/keymap.c b/keyboards/kagizaraya/chidori/keymaps/extended/keymap.c
index 174e9ff2e6..174e9ff2e6 100644
--- a/keyboards/chidori/keymaps/extended/keymap.c
+++ b/keyboards/kagizaraya/chidori/keymaps/extended/keymap.c
diff --git a/keyboards/chidori/keymaps/extended/readme.md b/keyboards/kagizaraya/chidori/keymaps/extended/readme.md
index 5bfdbedcce..5bfdbedcce 100644
--- a/keyboards/chidori/keymaps/extended/readme.md
+++ b/keyboards/kagizaraya/chidori/keymaps/extended/readme.md
diff --git a/keyboards/chidori/keymaps/oled_sample/keymap.c b/keyboards/kagizaraya/chidori/keymaps/oled_sample/keymap.c
index 78107a18ec..78107a18ec 100644
--- a/keyboards/chidori/keymaps/oled_sample/keymap.c
+++ b/keyboards/kagizaraya/chidori/keymaps/oled_sample/keymap.c
diff --git a/keyboards/chidori/keymaps/oled_sample/readme.md b/keyboards/kagizaraya/chidori/keymaps/oled_sample/readme.md
index 38f8a146a5..38f8a146a5 100644
--- a/keyboards/chidori/keymaps/oled_sample/readme.md
+++ b/keyboards/kagizaraya/chidori/keymaps/oled_sample/readme.md
diff --git a/keyboards/chidori/keymaps/oled_sample/rules.mk b/keyboards/kagizaraya/chidori/keymaps/oled_sample/rules.mk
index 7a7b1acc03..7a7b1acc03 100644
--- a/keyboards/chidori/keymaps/oled_sample/rules.mk
+++ b/keyboards/kagizaraya/chidori/keymaps/oled_sample/rules.mk
diff --git a/keyboards/chidori/matrix.c b/keyboards/kagizaraya/chidori/matrix.c
index 6228125d92..6228125d92 100644
--- a/keyboards/chidori/matrix.c
+++ b/keyboards/kagizaraya/chidori/matrix.c
diff --git a/keyboards/kagizaraya/chidori/readme.md b/keyboards/kagizaraya/chidori/readme.md
new file mode 100644
index 0000000000..b776583491
--- /dev/null
+++ b/keyboards/kagizaraya/chidori/readme.md
@@ -0,0 +1,15 @@
+# chidori
+
+![Chidori](https://i.imgur.com/QvpLiOvl.jpg)
+
+Yet another split keyboard made with only through-hole components.
+
+* Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
+* Hardware Supported: Chidori PCB, ATMEGA328P
+* Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kagizaraya/chidori:default:usbasp
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chidori/rules.mk b/keyboards/kagizaraya/chidori/rules.mk
index 371456cc09..371456cc09 100644
--- a/keyboards/chidori/rules.mk
+++ b/keyboards/kagizaraya/chidori/rules.mk
diff --git a/keyboards/halberd/config.h b/keyboards/kagizaraya/halberd/config.h
index 66777a2509..66777a2509 100644
--- a/keyboards/halberd/config.h
+++ b/keyboards/kagizaraya/halberd/config.h
diff --git a/keyboards/halberd/halberd.c b/keyboards/kagizaraya/halberd/halberd.c
index 8ce55ca3e5..8ce55ca3e5 100644
--- a/keyboards/halberd/halberd.c
+++ b/keyboards/kagizaraya/halberd/halberd.c
diff --git a/keyboards/halberd/halberd.h b/keyboards/kagizaraya/halberd/halberd.h
index d2adb4a15c..d2adb4a15c 100644
--- a/keyboards/halberd/halberd.h
+++ b/keyboards/kagizaraya/halberd/halberd.h
diff --git a/keyboards/halberd/info.json b/keyboards/kagizaraya/halberd/info.json
index cd8ae3b27a..cd8ae3b27a 100644
--- a/keyboards/halberd/info.json
+++ b/keyboards/kagizaraya/halberd/info.json
diff --git a/keyboards/halberd/keymaps/default/keymap.c b/keyboards/kagizaraya/halberd/keymaps/default/keymap.c
index d9a872c1b9..d9a872c1b9 100644
--- a/keyboards/halberd/keymaps/default/keymap.c
+++ b/keyboards/kagizaraya/halberd/keymaps/default/keymap.c
diff --git a/keyboards/halberd/keymaps/default/readme.md b/keyboards/kagizaraya/halberd/keymaps/default/readme.md
index 567b45c474..567b45c474 100644
--- a/keyboards/halberd/keymaps/default/readme.md
+++ b/keyboards/kagizaraya/halberd/keymaps/default/readme.md
diff --git a/keyboards/halberd/keymaps/right_modifiers/keymap.c b/keyboards/kagizaraya/halberd/keymaps/right_modifiers/keymap.c
index f74eef4541..f74eef4541 100644
--- a/keyboards/halberd/keymaps/right_modifiers/keymap.c
+++ b/keyboards/kagizaraya/halberd/keymaps/right_modifiers/keymap.c
diff --git a/keyboards/halberd/keymaps/right_modifiers/readme.md b/keyboards/kagizaraya/halberd/keymaps/right_modifiers/readme.md
index 2479922bdc..2479922bdc 100644
--- a/keyboards/halberd/keymaps/right_modifiers/readme.md
+++ b/keyboards/kagizaraya/halberd/keymaps/right_modifiers/readme.md
diff --git a/keyboards/kagizaraya/halberd/readme.md b/keyboards/kagizaraya/halberd/readme.md
new file mode 100644
index 0000000000..51c1736996
--- /dev/null
+++ b/keyboards/kagizaraya/halberd/readme.md
@@ -0,0 +1,15 @@
+# Halberd
+
+![Halberd](https://i.imgur.com/QabQNPQ.jpg)
+
+40% keyboard.
+
+Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
+Hardware Supported: Halberd PCB, ATMEGA32U4
+Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kagizaraya/halberd:default:dfu
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/halberd/rules.mk b/keyboards/kagizaraya/halberd/rules.mk
index a979346fe5..a979346fe5 100644
--- a/keyboards/halberd/rules.mk
+++ b/keyboards/kagizaraya/halberd/rules.mk
diff --git a/keyboards/scythe/config.h b/keyboards/kagizaraya/scythe/config.h
index ad4d1ded4f..ad4d1ded4f 100644
--- a/keyboards/scythe/config.h
+++ b/keyboards/kagizaraya/scythe/config.h
diff --git a/keyboards/scythe/info.json b/keyboards/kagizaraya/scythe/info.json
index 23151ea841..23151ea841 100644
--- a/keyboards/scythe/info.json
+++ b/keyboards/kagizaraya/scythe/info.json
diff --git a/keyboards/scythe/keymaps/default/keymap.c b/keyboards/kagizaraya/scythe/keymaps/default/keymap.c
index 56b6b32c8c..56b6b32c8c 100644
--- a/keyboards/scythe/keymaps/default/keymap.c
+++ b/keyboards/kagizaraya/scythe/keymaps/default/keymap.c
diff --git a/keyboards/scythe/keymaps/default/readme.md b/keyboards/kagizaraya/scythe/keymaps/default/readme.md
index c4d73c4e33..c4d73c4e33 100644
--- a/keyboards/scythe/keymaps/default/readme.md
+++ b/keyboards/kagizaraya/scythe/keymaps/default/readme.md
diff --git a/keyboards/scythe/keymaps/forties/keymap.c b/keyboards/kagizaraya/scythe/keymaps/forties/keymap.c
index 4d2fc88243..4d2fc88243 100644
--- a/keyboards/scythe/keymaps/forties/keymap.c
+++ b/keyboards/kagizaraya/scythe/keymaps/forties/keymap.c
diff --git a/keyboards/scythe/keymaps/forties/readme.md b/keyboards/kagizaraya/scythe/keymaps/forties/readme.md
index 162792dc37..162792dc37 100644
--- a/keyboards/scythe/keymaps/forties/readme.md
+++ b/keyboards/kagizaraya/scythe/keymaps/forties/readme.md
diff --git a/keyboards/kagizaraya/scythe/readme.md b/keyboards/kagizaraya/scythe/readme.md
new file mode 100644
index 0000000000..d87b1f82bf
--- /dev/null
+++ b/keyboards/kagizaraya/scythe/readme.md
@@ -0,0 +1,15 @@
+# Scythe
+
+![Scythe](https://i.imgur.com/jBqQAAt.jpg)
+
+Yet another 60% symmetrical split keyboard.
+
+Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
+Hardware Supported: Scythe PCB, ATMEGA32U4
+Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kagizaraya/scythe:default:dfu
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/scythe/rules.mk b/keyboards/kagizaraya/scythe/rules.mk
index 174790a3e9..174790a3e9 100644
--- a/keyboards/scythe/rules.mk
+++ b/keyboards/kagizaraya/scythe/rules.mk
diff --git a/keyboards/scythe/scythe.c b/keyboards/kagizaraya/scythe/scythe.c
index c1f95e2f70..c1f95e2f70 100644
--- a/keyboards/scythe/scythe.c
+++ b/keyboards/kagizaraya/scythe/scythe.c
diff --git a/keyboards/scythe/scythe.h b/keyboards/kagizaraya/scythe/scythe.h
index c13c63fdd0..c13c63fdd0 100644
--- a/keyboards/scythe/scythe.h
+++ b/keyboards/kagizaraya/scythe/scythe.h
diff --git a/keyboards/business_card/.noci b/keyboards/kakunpc/angel17/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/business_card/.noci
+++ b/keyboards/kakunpc/angel17/.noci
diff --git a/keyboards/business_card/alpha/.noci b/keyboards/kakunpc/angel17/alpha/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/business_card/alpha/.noci
+++ b/keyboards/kakunpc/angel17/alpha/.noci
diff --git a/keyboards/angel17/alpha/alpha.c b/keyboards/kakunpc/angel17/alpha/alpha.c
index 1c2936e157..1c2936e157 100644
--- a/keyboards/angel17/alpha/alpha.c
+++ b/keyboards/kakunpc/angel17/alpha/alpha.c
diff --git a/keyboards/angel17/alpha/alpha.h b/keyboards/kakunpc/angel17/alpha/alpha.h
index 5b8600a206..5b8600a206 100644
--- a/keyboards/angel17/alpha/alpha.h
+++ b/keyboards/kakunpc/angel17/alpha/alpha.h
diff --git a/keyboards/angel17/alpha/config.h b/keyboards/kakunpc/angel17/alpha/config.h
index 35e9c132b8..35e9c132b8 100644
--- a/keyboards/angel17/alpha/config.h
+++ b/keyboards/kakunpc/angel17/alpha/config.h
diff --git a/keyboards/angel17/alpha/rules.mk b/keyboards/kakunpc/angel17/alpha/rules.mk
index 4ee22403e9..4ee22403e9 100644
--- a/keyboards/angel17/alpha/rules.mk
+++ b/keyboards/kakunpc/angel17/alpha/rules.mk
diff --git a/keyboards/angel17/info.json b/keyboards/kakunpc/angel17/info.json
index 24a6c6be08..24a6c6be08 100644
--- a/keyboards/angel17/info.json
+++ b/keyboards/kakunpc/angel17/info.json
diff --git a/keyboards/angel17/keymaps/default/keymap.c b/keyboards/kakunpc/angel17/keymaps/default/keymap.c
index 1b9f52846d..1b9f52846d 100644
--- a/keyboards/angel17/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/angel17/keymaps/default/keymap.c
diff --git a/keyboards/angel17/keymaps/default/readme.md b/keyboards/kakunpc/angel17/keymaps/default/readme.md
index a509fef7a3..a509fef7a3 100644
--- a/keyboards/angel17/keymaps/default/readme.md
+++ b/keyboards/kakunpc/angel17/keymaps/default/readme.md
diff --git a/keyboards/kakunpc/angel17/readme.md b/keyboards/kakunpc/angel17/readme.md
new file mode 100644
index 0000000000..16914887a6
--- /dev/null
+++ b/keyboards/kakunpc/angel17/readme.md
@@ -0,0 +1,15 @@
+# angel17
+
+![angel17](https://i.gyazo.com/30787446262c5818bc60e0ffb34c96ed.jpg)
+
+Keyboard for tablets.
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: angel17_alpha, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/angel17/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel17/rev1/config.h b/keyboards/kakunpc/angel17/rev1/config.h
index a43208d2b9..a43208d2b9 100644
--- a/keyboards/angel17/rev1/config.h
+++ b/keyboards/kakunpc/angel17/rev1/config.h
diff --git a/keyboards/angel17/rev1/rev1.c b/keyboards/kakunpc/angel17/rev1/rev1.c
index 40ff30e620..40ff30e620 100644
--- a/keyboards/angel17/rev1/rev1.c
+++ b/keyboards/kakunpc/angel17/rev1/rev1.c
diff --git a/keyboards/angel17/rev1/rev1.h b/keyboards/kakunpc/angel17/rev1/rev1.h
index 5b8600a206..5b8600a206 100644
--- a/keyboards/angel17/rev1/rev1.h
+++ b/keyboards/kakunpc/angel17/rev1/rev1.h
diff --git a/keyboards/angel17/rev1/rules.mk b/keyboards/kakunpc/angel17/rev1/rules.mk
index d0813eb5c3..d0813eb5c3 100644
--- a/keyboards/angel17/rev1/rules.mk
+++ b/keyboards/kakunpc/angel17/rev1/rules.mk
diff --git a/keyboards/kakunpc/angel17/rules.mk b/keyboards/kakunpc/angel17/rules.mk
new file mode 100644
index 0000000000..35c999d465
--- /dev/null
+++ b/keyboards/kakunpc/angel17/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+
+LAYOUTS = numpad_5x4
+
+DEFAULT_FOLDER = kakunpc/angel17/rev1
diff --git a/keyboards/chidori/.noci b/keyboards/kakunpc/angel64/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/chidori/.noci
+++ b/keyboards/kakunpc/angel64/.noci
diff --git a/keyboards/choco60/rev1/.noci b/keyboards/kakunpc/angel64/alpha/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/choco60/rev1/.noci
+++ b/keyboards/kakunpc/angel64/alpha/.noci
diff --git a/keyboards/angel64/alpha/alpha.c b/keyboards/kakunpc/angel64/alpha/alpha.c
index 1c2936e157..1c2936e157 100644
--- a/keyboards/angel64/alpha/alpha.c
+++ b/keyboards/kakunpc/angel64/alpha/alpha.c
diff --git a/keyboards/angel64/alpha/alpha.h b/keyboards/kakunpc/angel64/alpha/alpha.h
index 6c0898a56a..6c0898a56a 100644
--- a/keyboards/angel64/alpha/alpha.h
+++ b/keyboards/kakunpc/angel64/alpha/alpha.h
diff --git a/keyboards/angel64/alpha/config.h b/keyboards/kakunpc/angel64/alpha/config.h
index b3270fdd8b..b3270fdd8b 100644
--- a/keyboards/angel64/alpha/config.h
+++ b/keyboards/kakunpc/angel64/alpha/config.h
diff --git a/keyboards/angel64/alpha/info.json b/keyboards/kakunpc/angel64/alpha/info.json
index 6fceff4490..6fceff4490 100644
--- a/keyboards/angel64/alpha/info.json
+++ b/keyboards/kakunpc/angel64/alpha/info.json
diff --git a/keyboards/angel64/alpha/keymaps/default/keymap.c b/keyboards/kakunpc/angel64/alpha/keymaps/default/keymap.c
index 0f2a8dada1..0f2a8dada1 100644
--- a/keyboards/angel64/alpha/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/angel64/alpha/keymaps/default/keymap.c
diff --git a/keyboards/angel64/alpha/keymaps/default/readme.md b/keyboards/kakunpc/angel64/alpha/keymaps/default/readme.md
index f4cd48f2ef..f4cd48f2ef 100644
--- a/keyboards/angel64/alpha/keymaps/default/readme.md
+++ b/keyboards/kakunpc/angel64/alpha/keymaps/default/readme.md
diff --git a/keyboards/kakunpc/angel64/alpha/matrix.c b/keyboards/kakunpc/angel64/alpha/matrix.c
new file mode 100644
index 0000000000..2851859cf2
--- /dev/null
+++ b/keyboards/kakunpc/angel64/alpha/matrix.c
@@ -0,0 +1,280 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col)
+{
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col)
+{
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
+ {
+ uint8_t tmp = row_index + MATRIX_ROWS/2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init(void) {
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+ //else
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return (uint8_t)changed;
+}
diff --git a/keyboards/kakunpc/angel64/alpha/readme.md b/keyboards/kakunpc/angel64/alpha/readme.md
new file mode 100644
index 0000000000..4de66e6706
--- /dev/null
+++ b/keyboards/kakunpc/angel64/alpha/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/6e2ea6c58d3253c496dc0518f2641ff9.jpg)
+
+Keyboard for tablets.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_alpha, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/angel64/alpha:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/launchpad/rev1/rules.mk b/keyboards/kakunpc/angel64/alpha/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/launchpad/rev1/rules.mk
+++ b/keyboards/kakunpc/angel64/alpha/rules.mk
diff --git a/keyboards/kakunpc/angel64/readme.md b/keyboards/kakunpc/angel64/readme.md
new file mode 100644
index 0000000000..41f8233afb
--- /dev/null
+++ b/keyboards/kakunpc/angel64/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
+
+Keyboard for tablets.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_alpha, angel64_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/angel64/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/rev1/config.h b/keyboards/kakunpc/angel64/rev1/config.h
index b3270fdd8b..b3270fdd8b 100644
--- a/keyboards/angel64/rev1/config.h
+++ b/keyboards/kakunpc/angel64/rev1/config.h
diff --git a/keyboards/angel64/rev1/info.json b/keyboards/kakunpc/angel64/rev1/info.json
index fe6b4f5e05..fe6b4f5e05 100644
--- a/keyboards/angel64/rev1/info.json
+++ b/keyboards/kakunpc/angel64/rev1/info.json
diff --git a/keyboards/angel64/rev1/keymaps/default/keymap.c b/keyboards/kakunpc/angel64/rev1/keymaps/default/keymap.c
index 7ad3964e24..7ad3964e24 100644
--- a/keyboards/angel64/rev1/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/angel64/rev1/keymaps/default/keymap.c
diff --git a/keyboards/angel64/rev1/keymaps/default/readme.md b/keyboards/kakunpc/angel64/rev1/keymaps/default/readme.md
index f4cd48f2ef..f4cd48f2ef 100644
--- a/keyboards/angel64/rev1/keymaps/default/readme.md
+++ b/keyboards/kakunpc/angel64/rev1/keymaps/default/readme.md
diff --git a/keyboards/angel64/rev1/keymaps/kakunpc/config.h b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h
index bf1149ebc6..bf1149ebc6 100644
--- a/keyboards/angel64/rev1/keymaps/kakunpc/config.h
+++ b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/config.h
diff --git a/keyboards/angel64/rev1/keymaps/kakunpc/keymap.c b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/keymap.c
index 6c5184c1b3..6c5184c1b3 100644
--- a/keyboards/angel64/rev1/keymaps/kakunpc/keymap.c
+++ b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/keymap.c
diff --git a/keyboards/angel64/rev1/keymaps/kakunpc/readme.md b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/readme.md
index ca7d7961fc..ca7d7961fc 100644
--- a/keyboards/angel64/rev1/keymaps/kakunpc/readme.md
+++ b/keyboards/kakunpc/angel64/rev1/keymaps/kakunpc/readme.md
diff --git a/keyboards/kakunpc/angel64/rev1/matrix.c b/keyboards/kakunpc/angel64/rev1/matrix.c
new file mode 100644
index 0000000000..2851859cf2
--- /dev/null
+++ b/keyboards/kakunpc/angel64/rev1/matrix.c
@@ -0,0 +1,280 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col)
+{
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col)
+{
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
+ {
+ uint8_t tmp = row_index + MATRIX_ROWS/2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init(void) {
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+ //else
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return (uint8_t)changed;
+}
diff --git a/keyboards/kakunpc/angel64/rev1/readme.md b/keyboards/kakunpc/angel64/rev1/readme.md
new file mode 100644
index 0000000000..4809710a43
--- /dev/null
+++ b/keyboards/kakunpc/angel64/rev1/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
+
+Keyboard for tablets.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/angel64/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/rev1/rev1.c b/keyboards/kakunpc/angel64/rev1/rev1.c
index 40ff30e620..40ff30e620 100644
--- a/keyboards/angel64/rev1/rev1.c
+++ b/keyboards/kakunpc/angel64/rev1/rev1.c
diff --git a/keyboards/angel64/rev1/rev1.h b/keyboards/kakunpc/angel64/rev1/rev1.h
index f4335601a9..f4335601a9 100644
--- a/keyboards/angel64/rev1/rev1.h
+++ b/keyboards/kakunpc/angel64/rev1/rev1.h
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk b/keyboards/kakunpc/angel64/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk
+++ b/keyboards/kakunpc/angel64/rev1/rules.mk
diff --git a/keyboards/kakunpc/angel64/rules.mk b/keyboards/kakunpc/angel64/rules.mk
new file mode 100644
index 0000000000..ca4e93f35c
--- /dev/null
+++ b/keyboards/kakunpc/angel64/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+CUSTOM_MATRIX = yes
+
+SRC += matrix.c
+
+DEFAULT_FOLDER = kakunpc/angel64/rev1
diff --git a/keyboards/christmas_tree/.noci b/keyboards/kakunpc/business_card/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/christmas_tree/.noci
+++ b/keyboards/kakunpc/business_card/.noci
diff --git a/keyboards/claw44/.noci b/keyboards/kakunpc/business_card/alpha/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/claw44/.noci
+++ b/keyboards/kakunpc/business_card/alpha/.noci
diff --git a/keyboards/business_card/alpha/alpha.c b/keyboards/kakunpc/business_card/alpha/alpha.c
index 1c2936e157..1c2936e157 100644
--- a/keyboards/business_card/alpha/alpha.c
+++ b/keyboards/kakunpc/business_card/alpha/alpha.c
diff --git a/keyboards/business_card/alpha/alpha.h b/keyboards/kakunpc/business_card/alpha/alpha.h
index 9807576899..9807576899 100644
--- a/keyboards/business_card/alpha/alpha.h
+++ b/keyboards/kakunpc/business_card/alpha/alpha.h
diff --git a/keyboards/business_card/alpha/config.h b/keyboards/kakunpc/business_card/alpha/config.h
index 81bb16161f..81bb16161f 100644
--- a/keyboards/business_card/alpha/config.h
+++ b/keyboards/kakunpc/business_card/alpha/config.h
diff --git a/keyboards/business_card/alpha/info.json b/keyboards/kakunpc/business_card/alpha/info.json
index 57f0fbd9a6..57f0fbd9a6 100644
--- a/keyboards/business_card/alpha/info.json
+++ b/keyboards/kakunpc/business_card/alpha/info.json
diff --git a/keyboards/business_card/alpha/keymaps/default/config.h b/keyboards/kakunpc/business_card/alpha/keymaps/default/config.h
index 7c15789bdf..7c15789bdf 100644
--- a/keyboards/business_card/alpha/keymaps/default/config.h
+++ b/keyboards/kakunpc/business_card/alpha/keymaps/default/config.h
diff --git a/keyboards/business_card/alpha/keymaps/default/keymap.c b/keyboards/kakunpc/business_card/alpha/keymaps/default/keymap.c
index 64070d23d2..64070d23d2 100644
--- a/keyboards/business_card/alpha/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/business_card/alpha/keymaps/default/keymap.c
diff --git a/keyboards/business_card/alpha/keymaps/default/readme.md b/keyboards/kakunpc/business_card/alpha/keymaps/default/readme.md
index 22cc77eebf..22cc77eebf 100644
--- a/keyboards/business_card/alpha/keymaps/default/readme.md
+++ b/keyboards/kakunpc/business_card/alpha/keymaps/default/readme.md
diff --git a/keyboards/business_card/alpha/rules.mk b/keyboards/kakunpc/business_card/alpha/rules.mk
index e85829c110..e85829c110 100644
--- a/keyboards/business_card/alpha/rules.mk
+++ b/keyboards/kakunpc/business_card/alpha/rules.mk
diff --git a/keyboards/business_card/beta/beta.c b/keyboards/kakunpc/business_card/beta/beta.c
index 7a9aa1b9bd..7a9aa1b9bd 100644
--- a/keyboards/business_card/beta/beta.c
+++ b/keyboards/kakunpc/business_card/beta/beta.c
diff --git a/keyboards/business_card/beta/beta.h b/keyboards/kakunpc/business_card/beta/beta.h
index 21a334e8a9..21a334e8a9 100644
--- a/keyboards/business_card/beta/beta.h
+++ b/keyboards/kakunpc/business_card/beta/beta.h
diff --git a/keyboards/business_card/beta/config.h b/keyboards/kakunpc/business_card/beta/config.h
index 9e4e8da963..9e4e8da963 100644
--- a/keyboards/business_card/beta/config.h
+++ b/keyboards/kakunpc/business_card/beta/config.h
diff --git a/keyboards/business_card/beta/info.json b/keyboards/kakunpc/business_card/beta/info.json
index 58f2a5b20d..58f2a5b20d 100644
--- a/keyboards/business_card/beta/info.json
+++ b/keyboards/kakunpc/business_card/beta/info.json
diff --git a/keyboards/business_card/beta/keymaps/default/config.h b/keyboards/kakunpc/business_card/beta/keymaps/default/config.h
index e04ba7e4d0..e04ba7e4d0 100644
--- a/keyboards/business_card/beta/keymaps/default/config.h
+++ b/keyboards/kakunpc/business_card/beta/keymaps/default/config.h
diff --git a/keyboards/business_card/beta/keymaps/default/keymap.c b/keyboards/kakunpc/business_card/beta/keymaps/default/keymap.c
index 8d2413477e..8d2413477e 100644
--- a/keyboards/business_card/beta/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/business_card/beta/keymaps/default/keymap.c
diff --git a/keyboards/business_card/beta/keymaps/default/readme.md b/keyboards/kakunpc/business_card/beta/keymaps/default/readme.md
index 22cc77eebf..22cc77eebf 100644
--- a/keyboards/business_card/beta/keymaps/default/readme.md
+++ b/keyboards/kakunpc/business_card/beta/keymaps/default/readme.md
diff --git a/keyboards/business_card/beta/rules.mk b/keyboards/kakunpc/business_card/beta/rules.mk
index e85829c110..e85829c110 100644
--- a/keyboards/business_card/beta/rules.mk
+++ b/keyboards/kakunpc/business_card/beta/rules.mk
diff --git a/keyboards/business_card/business_card.c b/keyboards/kakunpc/business_card/business_card.c
index 01beb28220..01beb28220 100644
--- a/keyboards/business_card/business_card.c
+++ b/keyboards/kakunpc/business_card/business_card.c
diff --git a/keyboards/kakunpc/business_card/business_card.h b/keyboards/kakunpc/business_card/business_card.h
new file mode 100644
index 0000000000..125c3080d6
--- /dev/null
+++ b/keyboards/kakunpc/business_card/business_card.h
@@ -0,0 +1,25 @@
+/* Copyright 2019 kakunpc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#ifdef KEYBOARD_kakunpc_business_card_alpha
+ #include "alpha.h"
+#endif
+#ifdef KEYBOARD_kakunpc_business_card_beta
+ #include "beta.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/business_card/config.h b/keyboards/kakunpc/business_card/config.h
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/business_card/config.h
+++ b/keyboards/kakunpc/business_card/config.h
diff --git a/keyboards/kakunpc/business_card/readme.md b/keyboards/kakunpc/business_card/readme.md
new file mode 100644
index 0000000000..cbd05af410
--- /dev/null
+++ b/keyboards/kakunpc/business_card/readme.md
@@ -0,0 +1,15 @@
+# business_card
+
+![business_card](imgur.com image replace me!)
+
+A short description of the keyboard/project
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/business_card/beta:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kakunpc/business_card/rules.mk b/keyboards/kakunpc/business_card/rules.mk
new file mode 100644
index 0000000000..ad9ea936af
--- /dev/null
+++ b/keyboards/kakunpc/business_card/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+DEFAULT_FOLDER = kakunpc/business_card/beta
diff --git a/keyboards/choc_taro/choc_taro.c b/keyboards/kakunpc/choc_taro/choc_taro.c
index 2a835b2bd8..2a835b2bd8 100644
--- a/keyboards/choc_taro/choc_taro.c
+++ b/keyboards/kakunpc/choc_taro/choc_taro.c
diff --git a/keyboards/choc_taro/choc_taro.h b/keyboards/kakunpc/choc_taro/choc_taro.h
index cf07b80b5c..cf07b80b5c 100644
--- a/keyboards/choc_taro/choc_taro.h
+++ b/keyboards/kakunpc/choc_taro/choc_taro.h
diff --git a/keyboards/choc_taro/config.h b/keyboards/kakunpc/choc_taro/config.h
index 2852206b14..2852206b14 100644
--- a/keyboards/choc_taro/config.h
+++ b/keyboards/kakunpc/choc_taro/config.h
diff --git a/keyboards/choc_taro/info.json b/keyboards/kakunpc/choc_taro/info.json
index 3a193ee05e..3a193ee05e 100644
--- a/keyboards/choc_taro/info.json
+++ b/keyboards/kakunpc/choc_taro/info.json
diff --git a/keyboards/choc_taro/keymaps/default/keymap.c b/keyboards/kakunpc/choc_taro/keymaps/default/keymap.c
index 4de3c2d55a..4de3c2d55a 100644
--- a/keyboards/choc_taro/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/choc_taro/keymaps/default/keymap.c
diff --git a/keyboards/choc_taro/keymaps/default/readme.md b/keyboards/kakunpc/choc_taro/keymaps/default/readme.md
index a2cb119040..a2cb119040 100644
--- a/keyboards/choc_taro/keymaps/default/readme.md
+++ b/keyboards/kakunpc/choc_taro/keymaps/default/readme.md
diff --git a/keyboards/choc_taro/keymaps/via/keymap.c b/keyboards/kakunpc/choc_taro/keymaps/via/keymap.c
index a1d48eb5e9..a1d48eb5e9 100644
--- a/keyboards/choc_taro/keymaps/via/keymap.c
+++ b/keyboards/kakunpc/choc_taro/keymaps/via/keymap.c
diff --git a/keyboards/choc_taro/keymaps/via/readme.md b/keyboards/kakunpc/choc_taro/keymaps/via/readme.md
index cb3af77dfa..cb3af77dfa 100644
--- a/keyboards/choc_taro/keymaps/via/readme.md
+++ b/keyboards/kakunpc/choc_taro/keymaps/via/readme.md
diff --git a/keyboards/delilah/keymaps/via/rules.mk b/keyboards/kakunpc/choc_taro/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/delilah/keymaps/via/rules.mk
+++ b/keyboards/kakunpc/choc_taro/keymaps/via/rules.mk
diff --git a/keyboards/choc_taro/matrix.c b/keyboards/kakunpc/choc_taro/matrix.c
index 02421551da..02421551da 100644
--- a/keyboards/choc_taro/matrix.c
+++ b/keyboards/kakunpc/choc_taro/matrix.c
diff --git a/keyboards/kakunpc/choc_taro/readme.md b/keyboards/kakunpc/choc_taro/readme.md
new file mode 100644
index 0000000000..8e641c72b8
--- /dev/null
+++ b/keyboards/kakunpc/choc_taro/readme.md
@@ -0,0 +1,15 @@
+# choc_taro
+
+![choc_taro](https://i.gyazo.com/717ddeed13cd2f956ed01b71c6e96f87.jpg)
+
+gh60 compatible choc keyboard
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: choc taro pcb
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/choc_taro:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/choc_taro/rules.mk b/keyboards/kakunpc/choc_taro/rules.mk
index b8b8a0bc35..b8b8a0bc35 100644
--- a/keyboards/choc_taro/rules.mk
+++ b/keyboards/kakunpc/choc_taro/rules.mk
diff --git a/keyboards/rabbit_capture_plan/config.h b/keyboards/kakunpc/rabbit_capture_plan/config.h
index b622d33c1a..b622d33c1a 100644
--- a/keyboards/rabbit_capture_plan/config.h
+++ b/keyboards/kakunpc/rabbit_capture_plan/config.h
diff --git a/keyboards/rabbit_capture_plan/info.json b/keyboards/kakunpc/rabbit_capture_plan/info.json
index 4a660cf85e..4a660cf85e 100644
--- a/keyboards/rabbit_capture_plan/info.json
+++ b/keyboards/kakunpc/rabbit_capture_plan/info.json
diff --git a/keyboards/rabbit_capture_plan/keymaps/default/keymap.c b/keyboards/kakunpc/rabbit_capture_plan/keymaps/default/keymap.c
index cbfb6b1410..cbfb6b1410 100644
--- a/keyboards/rabbit_capture_plan/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/rabbit_capture_plan/keymaps/default/keymap.c
diff --git a/keyboards/rabbit_capture_plan/keymaps/default/readme.md b/keyboards/kakunpc/rabbit_capture_plan/keymaps/default/readme.md
index 2ececc3fc2..2ececc3fc2 100644
--- a/keyboards/rabbit_capture_plan/keymaps/default/readme.md
+++ b/keyboards/kakunpc/rabbit_capture_plan/keymaps/default/readme.md
diff --git a/keyboards/rabbit_capture_plan/keymaps/via/keymap.c b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/keymap.c
index f8109f4f08..f8109f4f08 100644
--- a/keyboards/rabbit_capture_plan/keymaps/via/keymap.c
+++ b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/keymap.c
diff --git a/keyboards/rabbit_capture_plan/keymaps/via/readme.md b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/readme.md
index 928cdb8b77..928cdb8b77 100644
--- a/keyboards/rabbit_capture_plan/keymaps/via/readme.md
+++ b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/readme.md
diff --git a/keyboards/dozen0/keymaps/via/rules.mk b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/dozen0/keymaps/via/rules.mk
+++ b/keyboards/kakunpc/rabbit_capture_plan/keymaps/via/rules.mk
diff --git a/keyboards/rabbit_capture_plan/rabbit_capture_plan.c b/keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.c
index 7a45e61f35..7a45e61f35 100644
--- a/keyboards/rabbit_capture_plan/rabbit_capture_plan.c
+++ b/keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.c
diff --git a/keyboards/rabbit_capture_plan/rabbit_capture_plan.h b/keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.h
index 8065fdfeb9..8065fdfeb9 100644
--- a/keyboards/rabbit_capture_plan/rabbit_capture_plan.h
+++ b/keyboards/kakunpc/rabbit_capture_plan/rabbit_capture_plan.h
diff --git a/keyboards/kakunpc/rabbit_capture_plan/readme.md b/keyboards/kakunpc/rabbit_capture_plan/readme.md
new file mode 100644
index 0000000000..fa80367a12
--- /dev/null
+++ b/keyboards/kakunpc/rabbit_capture_plan/readme.md
@@ -0,0 +1,19 @@
+# rabbit_capture_plan
+
+![rabbit_capture_plan](https://i.gyazo.com/eb25048b17906f897253e8be18db001c.jpg)
+
+This is 70 keys split keyboard with trackball.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: rabbit capture plan pcb
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/rabbit_capture_plan:default
+
+Flashing example for this keyboard:
+
+ make kakunpc/rabbit_capture_plan:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/rabbit_capture_plan/rules.mk b/keyboards/kakunpc/rabbit_capture_plan/rules.mk
index d6f3529e10..d6f3529e10 100644
--- a/keyboards/rabbit_capture_plan/rules.mk
+++ b/keyboards/kakunpc/rabbit_capture_plan/rules.mk
diff --git a/keyboards/suihankey/alpha/alpha.c b/keyboards/kakunpc/suihankey/alpha/alpha.c
index 1c2936e157..1c2936e157 100644
--- a/keyboards/suihankey/alpha/alpha.c
+++ b/keyboards/kakunpc/suihankey/alpha/alpha.c
diff --git a/keyboards/suihankey/alpha/alpha.h b/keyboards/kakunpc/suihankey/alpha/alpha.h
index 02bba47104..02bba47104 100644
--- a/keyboards/suihankey/alpha/alpha.h
+++ b/keyboards/kakunpc/suihankey/alpha/alpha.h
diff --git a/keyboards/suihankey/alpha/config.h b/keyboards/kakunpc/suihankey/alpha/config.h
index b11478adfc..b11478adfc 100644
--- a/keyboards/suihankey/alpha/config.h
+++ b/keyboards/kakunpc/suihankey/alpha/config.h
diff --git a/keyboards/suihankey/alpha/info.json b/keyboards/kakunpc/suihankey/alpha/info.json
index 70029e17c9..70029e17c9 100644
--- a/keyboards/suihankey/alpha/info.json
+++ b/keyboards/kakunpc/suihankey/alpha/info.json
diff --git a/keyboards/suihankey/alpha/keymaps/default/keymap.c b/keyboards/kakunpc/suihankey/alpha/keymaps/default/keymap.c
index b682f0f15d..b682f0f15d 100644
--- a/keyboards/suihankey/alpha/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/suihankey/alpha/keymaps/default/keymap.c
diff --git a/keyboards/suihankey/alpha/keymaps/default/readme.md b/keyboards/kakunpc/suihankey/alpha/keymaps/default/readme.md
index 95eac805a0..95eac805a0 100644
--- a/keyboards/suihankey/alpha/keymaps/default/readme.md
+++ b/keyboards/kakunpc/suihankey/alpha/keymaps/default/readme.md
diff --git a/keyboards/suihankey/alpha/readme.md b/keyboards/kakunpc/suihankey/alpha/readme.md
index fcba60ff1d..fcba60ff1d 100644
--- a/keyboards/suihankey/alpha/readme.md
+++ b/keyboards/kakunpc/suihankey/alpha/readme.md
diff --git a/keyboards/launchpad/keymaps/default_rgb/rules.mk b/keyboards/kakunpc/suihankey/alpha/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/launchpad/keymaps/default_rgb/rules.mk
+++ b/keyboards/kakunpc/suihankey/alpha/rules.mk
diff --git a/keyboards/kakunpc/suihankey/readme.md b/keyboards/kakunpc/suihankey/readme.md
new file mode 100644
index 0000000000..e8099dbca4
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/readme.md
@@ -0,0 +1,18 @@
+# suihankey
+
+![suihankey](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
+
+Compact with only 36 keys is a concept keyboard.
+Supports OLED and RGBLED (optional)
+
+
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: suihankeyboard_alpha, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/suihankey/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/rev1/config.h b/keyboards/kakunpc/suihankey/rev1/config.h
index b2801cd862..b2801cd862 100644
--- a/keyboards/suihankey/rev1/config.h
+++ b/keyboards/kakunpc/suihankey/rev1/config.h
diff --git a/keyboards/suihankey/rev1/info.json b/keyboards/kakunpc/suihankey/rev1/info.json
index 70029e17c9..70029e17c9 100644
--- a/keyboards/suihankey/rev1/info.json
+++ b/keyboards/kakunpc/suihankey/rev1/info.json
diff --git a/keyboards/suihankey/rev1/keymaps/default/keymap.c b/keyboards/kakunpc/suihankey/rev1/keymaps/default/keymap.c
index b682f0f15d..b682f0f15d 100644
--- a/keyboards/suihankey/rev1/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/suihankey/rev1/keymaps/default/keymap.c
diff --git a/keyboards/suihankey/rev1/keymaps/default/readme.md b/keyboards/kakunpc/suihankey/rev1/keymaps/default/readme.md
index 95eac805a0..95eac805a0 100644
--- a/keyboards/suihankey/rev1/keymaps/default/readme.md
+++ b/keyboards/kakunpc/suihankey/rev1/keymaps/default/readme.md
diff --git a/keyboards/suihankey/rev1/readme.md b/keyboards/kakunpc/suihankey/rev1/readme.md
index 1c80a8af63..1c80a8af63 100644
--- a/keyboards/suihankey/rev1/readme.md
+++ b/keyboards/kakunpc/suihankey/rev1/readme.md
diff --git a/keyboards/suihankey/rev1/rev1.c b/keyboards/kakunpc/suihankey/rev1/rev1.c
index 40ff30e620..40ff30e620 100644
--- a/keyboards/suihankey/rev1/rev1.c
+++ b/keyboards/kakunpc/suihankey/rev1/rev1.c
diff --git a/keyboards/suihankey/rev1/rev1.h b/keyboards/kakunpc/suihankey/rev1/rev1.h
index cbc877abd5..cbc877abd5 100644
--- a/keyboards/suihankey/rev1/rev1.h
+++ b/keyboards/kakunpc/suihankey/rev1/rev1.h
diff --git a/keyboards/reviung34/keymaps/default_rgb/rules.mk b/keyboards/kakunpc/suihankey/rev1/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/reviung34/keymaps/default_rgb/rules.mk
+++ b/keyboards/kakunpc/suihankey/rev1/rules.mk
diff --git a/keyboards/kakunpc/suihankey/rules.mk b/keyboards/kakunpc/suihankey/rules.mk
new file mode 100644
index 0000000000..332c7d7355
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+SPLIT_KEYBOARD = no
+
+DEFAULT_FOLDER = kakunpc/suihankey/rev1
diff --git a/keyboards/claw44/rev1/.noci b/keyboards/kakunpc/suihankey/split/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/claw44/rev1/.noci
+++ b/keyboards/kakunpc/suihankey/split/.noci
diff --git a/keyboards/cocoa40/.noci b/keyboards/kakunpc/suihankey/split/alpha/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/cocoa40/.noci
+++ b/keyboards/kakunpc/suihankey/split/alpha/.noci
diff --git a/keyboards/suihankey/split/alpha/alpha.c b/keyboards/kakunpc/suihankey/split/alpha/alpha.c
index 1c2936e157..1c2936e157 100644
--- a/keyboards/suihankey/split/alpha/alpha.c
+++ b/keyboards/kakunpc/suihankey/split/alpha/alpha.c
diff --git a/keyboards/suihankey/split/alpha/alpha.h b/keyboards/kakunpc/suihankey/split/alpha/alpha.h
index ba93405ecc..ba93405ecc 100644
--- a/keyboards/suihankey/split/alpha/alpha.h
+++ b/keyboards/kakunpc/suihankey/split/alpha/alpha.h
diff --git a/keyboards/suihankey/split/alpha/config.h b/keyboards/kakunpc/suihankey/split/alpha/config.h
index ae5acdbd4b..ae5acdbd4b 100644
--- a/keyboards/suihankey/split/alpha/config.h
+++ b/keyboards/kakunpc/suihankey/split/alpha/config.h
diff --git a/keyboards/kakunpc/suihankey/split/alpha/readme.md b/keyboards/kakunpc/suihankey/split/alpha/readme.md
new file mode 100644
index 0000000000..4a26a34b97
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/split/alpha/readme.md
@@ -0,0 +1,18 @@
+# suihankey_alpha
+
+![suihankey_alpha](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
+
+Compact with only 36 keys is a concept keyboard.
+Supports OLED and RGBLED (optional)
+
+
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: suihankey_alphaboard_alpha, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/suihankey/alpha:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/reviung34/keymaps/default_rgb2u/rules.mk b/keyboards/kakunpc/suihankey/split/alpha/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/reviung34/keymaps/default_rgb2u/rules.mk
+++ b/keyboards/kakunpc/suihankey/split/alpha/rules.mk
diff --git a/keyboards/suihankey/split/info.json b/keyboards/kakunpc/suihankey/split/info.json
index 2f40949f6b..2f40949f6b 100644
--- a/keyboards/suihankey/split/info.json
+++ b/keyboards/kakunpc/suihankey/split/info.json
diff --git a/keyboards/suihankey/split/keymaps/default/keymap.c b/keyboards/kakunpc/suihankey/split/keymaps/default/keymap.c
index a48072d9f2..a48072d9f2 100644
--- a/keyboards/suihankey/split/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/suihankey/split/keymaps/default/keymap.c
diff --git a/keyboards/suihankey/split/keymaps/default/readme.md b/keyboards/kakunpc/suihankey/split/keymaps/default/readme.md
index 43ede89526..43ede89526 100644
--- a/keyboards/suihankey/split/keymaps/default/readme.md
+++ b/keyboards/kakunpc/suihankey/split/keymaps/default/readme.md
diff --git a/keyboards/kakunpc/suihankey/split/readme.md b/keyboards/kakunpc/suihankey/split/readme.md
new file mode 100644
index 0000000000..ed2058290b
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/split/readme.md
@@ -0,0 +1,18 @@
+# suihankey split
+
+![suihankey](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
+
+Compact with only 36 keys is a concept keyboard.
+Supports OLED and RGBLED (optional)
+
+
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: suihankeyboard_alpha, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/suihankey/split:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/split/rev1/config.h b/keyboards/kakunpc/suihankey/split/rev1/config.h
index 6b7dd2bac9..6b7dd2bac9 100644
--- a/keyboards/suihankey/split/rev1/config.h
+++ b/keyboards/kakunpc/suihankey/split/rev1/config.h
diff --git a/keyboards/kakunpc/suihankey/split/rev1/readme.md b/keyboards/kakunpc/suihankey/split/rev1/readme.md
new file mode 100644
index 0000000000..a4e60fe1b9
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/split/rev1/readme.md
@@ -0,0 +1,18 @@
+# suihankey_rev1
+
+![suihankey_rev1](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
+
+Compact with only 36 keys is a concept keyboard.
+Supports OLED and RGBLED (optional)
+
+
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: suihankey_rev1board_rev1, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/suihankey/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/split/rev1/rev1.c b/keyboards/kakunpc/suihankey/split/rev1/rev1.c
index 40ff30e620..40ff30e620 100644
--- a/keyboards/suihankey/split/rev1/rev1.c
+++ b/keyboards/kakunpc/suihankey/split/rev1/rev1.c
diff --git a/keyboards/suihankey/split/rev1/rev1.h b/keyboards/kakunpc/suihankey/split/rev1/rev1.h
index 98618ba712..98618ba712 100644
--- a/keyboards/suihankey/split/rev1/rev1.h
+++ b/keyboards/kakunpc/suihankey/split/rev1/rev1.h
diff --git a/keyboards/suihankey/split/rev1/rules.mk b/keyboards/kakunpc/suihankey/split/rev1/rules.mk
index d3661099d0..d3661099d0 100644
--- a/keyboards/suihankey/split/rev1/rules.mk
+++ b/keyboards/kakunpc/suihankey/split/rev1/rules.mk
diff --git a/keyboards/kakunpc/suihankey/split/rules.mk b/keyboards/kakunpc/suihankey/split/rules.mk
new file mode 100644
index 0000000000..6da41b20b8
--- /dev/null
+++ b/keyboards/kakunpc/suihankey/split/rules.mk
@@ -0,0 +1,4 @@
+OLED_ENABLE = no
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = kakunpc/suihankey/split/rev1
diff --git a/keyboards/thedogkeyboard/config.h b/keyboards/kakunpc/thedogkeyboard/config.h
index 099c157cff..099c157cff 100644
--- a/keyboards/thedogkeyboard/config.h
+++ b/keyboards/kakunpc/thedogkeyboard/config.h
diff --git a/keyboards/thedogkeyboard/info.json b/keyboards/kakunpc/thedogkeyboard/info.json
index df6cc6ffdc..df6cc6ffdc 100644
--- a/keyboards/thedogkeyboard/info.json
+++ b/keyboards/kakunpc/thedogkeyboard/info.json
diff --git a/keyboards/thedogkeyboard/keymaps/default/keymap.c b/keyboards/kakunpc/thedogkeyboard/keymaps/default/keymap.c
index 7632f81b93..7632f81b93 100644
--- a/keyboards/thedogkeyboard/keymaps/default/keymap.c
+++ b/keyboards/kakunpc/thedogkeyboard/keymaps/default/keymap.c
diff --git a/keyboards/thedogkeyboard/keymaps/default/readme.md b/keyboards/kakunpc/thedogkeyboard/keymaps/default/readme.md
index 045729a7a5..045729a7a5 100644
--- a/keyboards/thedogkeyboard/keymaps/default/readme.md
+++ b/keyboards/kakunpc/thedogkeyboard/keymaps/default/readme.md
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c b/keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/keymap.c
index cc3ba84d87..cc3ba84d87 100644
--- a/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c
+++ b/keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/keymap.c
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md b/keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/readme.md
index 66eab07b94..66eab07b94 100644
--- a/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md
+++ b/keyboards/kakunpc/thedogkeyboard/keymaps/kakunpc/readme.md
diff --git a/keyboards/kakunpc/thedogkeyboard/matrix.c b/keyboards/kakunpc/thedogkeyboard/matrix.c
new file mode 100644
index 0000000000..2851859cf2
--- /dev/null
+++ b/keyboards/kakunpc/thedogkeyboard/matrix.c
@@ -0,0 +1,280 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col)
+{
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col)
+{
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
+ {
+ uint8_t tmp = row_index + MATRIX_ROWS/2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init(void) {
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+ //else
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return (uint8_t)changed;
+}
diff --git a/keyboards/kakunpc/thedogkeyboard/readme.md b/keyboards/kakunpc/thedogkeyboard/readme.md
new file mode 100644
index 0000000000..c3f73c5303
--- /dev/null
+++ b/keyboards/kakunpc/thedogkeyboard/readme.md
@@ -0,0 +1,15 @@
+# thedogkeyboard
+
+![thedogkeyboard](https://i.gyazo.com/70ac677c1e75c04b812e5dce311f7901.jpg)
+
+ProMicro 100% Keyboard.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: thedogkeyboard_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kakunpc/thedogkeyboard:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/thedogkeyboard/rules.mk b/keyboards/kakunpc/thedogkeyboard/rules.mk
index b91a3736ad..b91a3736ad 100644
--- a/keyboards/thedogkeyboard/rules.mk
+++ b/keyboards/kakunpc/thedogkeyboard/rules.mk
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.c b/keyboards/kakunpc/thedogkeyboard/thedogkeyboard.c
index a1808324c8..a1808324c8 100644
--- a/keyboards/thedogkeyboard/thedogkeyboard.c
+++ b/keyboards/kakunpc/thedogkeyboard/thedogkeyboard.c
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.h b/keyboards/kakunpc/thedogkeyboard/thedogkeyboard.h
index 3f4b72c2be..3f4b72c2be 100644
--- a/keyboards/thedogkeyboard/thedogkeyboard.h
+++ b/keyboards/kakunpc/thedogkeyboard/thedogkeyboard.h
diff --git a/keyboards/niu_mini/config.h b/keyboards/kbdfans/niu_mini/config.h
index 96210cf3d0..96210cf3d0 100644
--- a/keyboards/niu_mini/config.h
+++ b/keyboards/kbdfans/niu_mini/config.h
diff --git a/keyboards/niu_mini/info.json b/keyboards/kbdfans/niu_mini/info.json
index 1c4310576e..1c4310576e 100644
--- a/keyboards/niu_mini/info.json
+++ b/keyboards/kbdfans/niu_mini/info.json
diff --git a/keyboards/niu_mini/keymaps/abhixec/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/abhixec/keymap.c
index 6d3ff8a376..6d3ff8a376 100644
--- a/keyboards/niu_mini/keymaps/abhixec/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/abhixec/keymap.c
diff --git a/keyboards/niu_mini/keymaps/abhixec/readme.md b/keyboards/kbdfans/niu_mini/keymaps/abhixec/readme.md
index 1bc312a039..1bc312a039 100644
--- a/keyboards/niu_mini/keymaps/abhixec/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/abhixec/readme.md
diff --git a/keyboards/niu_mini/keymaps/abhixec/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/abhixec/rules.mk
index 3bf3f27314..3bf3f27314 100644
--- a/keyboards/niu_mini/keymaps/abhixec/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/abhixec/rules.mk
diff --git a/keyboards/niu_mini/keymaps/codecoffeecode/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/keymap.c
index 7c794b2037..7c794b2037 100644
--- a/keyboards/niu_mini/keymaps/codecoffeecode/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/keymap.c
diff --git a/keyboards/niu_mini/keymaps/codecoffeecode/readme.md b/keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/readme.md
index 661e24c9fa..661e24c9fa 100644
--- a/keyboards/niu_mini/keymaps/codecoffeecode/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/codecoffeecode/readme.md
diff --git a/keyboards/niu_mini/keymaps/default/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/default/keymap.c
index c0f5d06c7b..c0f5d06c7b 100644
--- a/keyboards/niu_mini/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/default/keymap.c
diff --git a/keyboards/niu_mini/keymaps/default/readme.md b/keyboards/kbdfans/niu_mini/keymaps/default/readme.md
index a2f2aa2f46..a2f2aa2f46 100644
--- a/keyboards/niu_mini/keymaps/default/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/default/readme.md
diff --git a/keyboards/niu_mini/keymaps/dyesub/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/dyesub/keymap.c
index d859062d39..d859062d39 100644
--- a/keyboards/niu_mini/keymaps/dyesub/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/dyesub/keymap.c
diff --git a/keyboards/niu_mini/keymaps/dyesub/readme.md b/keyboards/kbdfans/niu_mini/keymaps/dyesub/readme.md
index e276c4d060..e276c4d060 100644
--- a/keyboards/niu_mini/keymaps/dyesub/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/dyesub/readme.md
diff --git a/keyboards/niu_mini/keymaps/dyesub/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/dyesub/rules.mk
index c5f09480a3..c5f09480a3 100644
--- a/keyboards/niu_mini/keymaps/dyesub/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/dyesub/rules.mk
diff --git a/keyboards/niu_mini/keymaps/edvard/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/edvard/keymap.c
index aca4a86b0e..aca4a86b0e 100644
--- a/keyboards/niu_mini/keymaps/edvard/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/edvard/keymap.c
diff --git a/keyboards/niu_mini/keymaps/edvard/readme.md b/keyboards/kbdfans/niu_mini/keymaps/edvard/readme.md
index 32846b4a55..32846b4a55 100644
--- a/keyboards/niu_mini/keymaps/edvard/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/edvard/readme.md
diff --git a/keyboards/niu_mini/keymaps/framtava/config.h b/keyboards/kbdfans/niu_mini/keymaps/framtava/config.h
index 0c42bb5060..0c42bb5060 100644
--- a/keyboards/niu_mini/keymaps/framtava/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/framtava/config.h
diff --git a/keyboards/niu_mini/keymaps/framtava/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/framtava/keymap.c
index 5ffbd1b49a..5ffbd1b49a 100644
--- a/keyboards/niu_mini/keymaps/framtava/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/framtava/keymap.c
diff --git a/keyboards/niu_mini/keymaps/framtava/readme.md b/keyboards/kbdfans/niu_mini/keymaps/framtava/readme.md
index de9680b498..de9680b498 100644
--- a/keyboards/niu_mini/keymaps/framtava/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/framtava/readme.md
diff --git a/keyboards/niu_mini/keymaps/framtava/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/framtava/rules.mk
index 8cf6f7d5cb..8cf6f7d5cb 100644
--- a/keyboards/niu_mini/keymaps/framtava/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/framtava/rules.mk
diff --git a/keyboards/niu_mini/keymaps/mason/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/mason/keymap.c
index 4f2e2b37b5..4f2e2b37b5 100644
--- a/keyboards/niu_mini/keymaps/mason/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/mason/keymap.c
diff --git a/keyboards/niu_mini/keymaps/nosarthur/README.md b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/README.md
index 9d57ceb5f7..9d57ceb5f7 100644
--- a/keyboards/niu_mini/keymaps/nosarthur/README.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/README.md
diff --git a/keyboards/niu_mini/keymaps/nosarthur/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap.c
index fe719fc821..fe719fc821 100644
--- a/keyboards/niu_mini/keymaps/nosarthur/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap.c
diff --git a/keyboards/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json
index 8dc43350c8..8dc43350c8 100644
--- a/keyboards/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json
+++ b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_colemak_dh.json
diff --git a/keyboards/niu_mini/keymaps/nosarthur/keymap_qwerty.json b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_qwerty.json
index ec9b945f4f..ec9b945f4f 100644
--- a/keyboards/niu_mini/keymaps/nosarthur/keymap_qwerty.json
+++ b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/keymap_qwerty.json
diff --git a/keyboards/niu_mini/keymaps/nosarthur/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/rules.mk
index 37ba40cdfe..37ba40cdfe 100644
--- a/keyboards/niu_mini/keymaps/nosarthur/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/nosarthur/rules.mk
diff --git a/keyboards/niu_mini/keymaps/planck/config.h b/keyboards/kbdfans/niu_mini/keymaps/planck/config.h
index 0c42bb5060..0c42bb5060 100644
--- a/keyboards/niu_mini/keymaps/planck/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/planck/config.h
diff --git a/keyboards/niu_mini/keymaps/planck/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/planck/keymap.c
index f7f933c7b1..f7f933c7b1 100644
--- a/keyboards/niu_mini/keymaps/planck/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/planck/keymap.c
diff --git a/keyboards/niu_mini/keymaps/planck/readme.md b/keyboards/kbdfans/niu_mini/keymaps/planck/readme.md
index de9680b498..de9680b498 100644
--- a/keyboards/niu_mini/keymaps/planck/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/planck/readme.md
diff --git a/keyboards/diverge3/keymaps/workman/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk
index 8b13789179..8b13789179 100644
--- a/keyboards/diverge3/keymaps/workman/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/planck/rules.mk
diff --git a/keyboards/niu_mini/keymaps/tobias/config.h b/keyboards/kbdfans/niu_mini/keymaps/tobias/config.h
index ad72b6b6c5..ad72b6b6c5 100644
--- a/keyboards/niu_mini/keymaps/tobias/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/tobias/config.h
diff --git a/keyboards/niu_mini/keymaps/tobias/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c
index 935dd5c506..935dd5c506 100644
--- a/keyboards/niu_mini/keymaps/tobias/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c
diff --git a/keyboards/niu_mini/keymaps/tobias/readme.md b/keyboards/kbdfans/niu_mini/keymaps/tobias/readme.md
index 0a8077884d..0a8077884d 100644
--- a/keyboards/niu_mini/keymaps/tobias/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/tobias/readme.md
diff --git a/keyboards/niu_mini/keymaps/tobias/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/tobias/rules.mk
index d75595602f..d75595602f 100644
--- a/keyboards/niu_mini/keymaps/tobias/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/tobias/rules.mk
diff --git a/keyboards/niu_mini/keymaps/tucznak/config.h b/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h
index 429955b3a0..429955b3a0 100644
--- a/keyboards/niu_mini/keymaps/tucznak/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h
diff --git a/keyboards/niu_mini/keymaps/tucznak/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/tucznak/keymap.c
index 94743fe2c8..94743fe2c8 100644
--- a/keyboards/niu_mini/keymaps/tucznak/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/tucznak/keymap.c
diff --git a/keyboards/niu_mini/keymaps/tucznak/readme.md b/keyboards/kbdfans/niu_mini/keymaps/tucznak/readme.md
index 95180bc392..95180bc392 100644
--- a/keyboards/niu_mini/keymaps/tucznak/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/tucznak/readme.md
diff --git a/keyboards/niu_mini/keymaps/tucznak/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/tucznak/rules.mk
index 422c96962d..422c96962d 100644
--- a/keyboards/niu_mini/keymaps/tucznak/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/tucznak/rules.mk
diff --git a/keyboards/niu_mini/keymaps/via/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/via/keymap.c
index 702e419944..702e419944 100644
--- a/keyboards/niu_mini/keymaps/via/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/via/keymap.c
diff --git a/keyboards/niu_mini/keymaps/via/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/via/rules.mk
index 43061db1dd..43061db1dd 100644
--- a/keyboards/niu_mini/keymaps/via/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/via/rules.mk
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/config.h b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/config.h
index c79bb54ad2..c79bb54ad2 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/config.h
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/keymap.c
index bfda812738..bfda812738 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/keymap.c
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/readme.md b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/readme.md
index 9ff4ce1f19..9ff4ce1f19 100644
--- a/keyboards/divergetm2/keymaps/xtonhasvim/readme.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/readme.md
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/rules.mk
index 00946ff227..00946ff227 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/xtonhasvim/rules.mk
diff --git a/keyboards/niu_mini/keymaps/yttyx/README.md b/keyboards/kbdfans/niu_mini/keymaps/yttyx/README.md
index ff3937c232..ff3937c232 100644
--- a/keyboards/niu_mini/keymaps/yttyx/README.md
+++ b/keyboards/kbdfans/niu_mini/keymaps/yttyx/README.md
diff --git a/keyboards/niu_mini/keymaps/yttyx/config.h b/keyboards/kbdfans/niu_mini/keymaps/yttyx/config.h
index b9e113ec0b..b9e113ec0b 100644
--- a/keyboards/niu_mini/keymaps/yttyx/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/yttyx/config.h
diff --git a/keyboards/niu_mini/keymaps/yttyx/keymap.c b/keyboards/kbdfans/niu_mini/keymaps/yttyx/keymap.c
index 79fda2be00..79fda2be00 100644
--- a/keyboards/niu_mini/keymaps/yttyx/keymap.c
+++ b/keyboards/kbdfans/niu_mini/keymaps/yttyx/keymap.c
diff --git a/keyboards/niu_mini/keymaps/yttyx/rules.mk b/keyboards/kbdfans/niu_mini/keymaps/yttyx/rules.mk
index a2566a20b0..a2566a20b0 100644
--- a/keyboards/niu_mini/keymaps/yttyx/rules.mk
+++ b/keyboards/kbdfans/niu_mini/keymaps/yttyx/rules.mk
diff --git a/keyboards/niu_mini/niu_mini.c b/keyboards/kbdfans/niu_mini/niu_mini.c
index cd9c0cdfed..cd9c0cdfed 100644
--- a/keyboards/niu_mini/niu_mini.c
+++ b/keyboards/kbdfans/niu_mini/niu_mini.c
diff --git a/keyboards/niu_mini/niu_mini.h b/keyboards/kbdfans/niu_mini/niu_mini.h
index b815219123..b815219123 100644
--- a/keyboards/niu_mini/niu_mini.h
+++ b/keyboards/kbdfans/niu_mini/niu_mini.h
diff --git a/keyboards/kbdfans/niu_mini/readme.md b/keyboards/kbdfans/niu_mini/readme.md
new file mode 100644
index 0000000000..1a91ece94b
--- /dev/null
+++ b/keyboards/kbdfans/niu_mini/readme.md
@@ -0,0 +1,19 @@
+# NIU Mini
+
+![NIU Mini](https://cdn.shopify.com/s/files/1/1473/3902/files/40__01.jpg)
+
+A compact 40% (12x4) ortholinear keyboard kit sold by KBDFans.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: NIU Mini PCB
+Hardware Availability: [KBDFans](https://kbdfans.myshopify.com/products/niu-mini-40-diy-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/niu_mini:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make kbdfans/niu_mini:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/niu_mini/rules.mk b/keyboards/kbdfans/niu_mini/rules.mk
index ae86d2019e..ae86d2019e 100644
--- a/keyboards/niu_mini/rules.mk
+++ b/keyboards/kbdfans/niu_mini/rules.mk
diff --git a/keyboards/keebio/iris/keymaps/333fred/rules.mk b/keyboards/keebio/iris/keymaps/333fred/rules.mk
index 995272e2f2..5ad63b02b7 100644
--- a/keyboards/keebio/iris/keymaps/333fred/rules.mk
+++ b/keyboards/keebio/iris/keymaps/333fred/rules.mk
@@ -1,4 +1,3 @@
KEY_LOCK_ENABLE = yes
CONSOLE_ENABLE = no
-EXTRAFLAGS += -flto
-
+LTO_ENABLE = yes
diff --git a/keyboards/kelowna/rgb64/readme.md b/keyboards/kelowna/rgb64/readme.md
deleted file mode 100644
index 9300b82819..0000000000
--- a/keyboards/kelowna/rgb64/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# kelownaRGB64
-
-![kelownaRGB64](https://i.imgur.com/DzLy87M.png)
-
-A 60% keyboard based on STM32f303
-
-* Keyboard Maintainer: [Weirdo](https://github.com/Weirdo-F)(https://github.com/Weirdo-F)
-* Hardware Supported: kelownaRGB64
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make kelowna/rgb64:default
-
-Use the SWD interface on the board to connect to the STlink (JLink) to directly burn firmware without entering the bootloader.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keychron/q2/rev_0110/rules.mk b/keyboards/keychron/q2/rev_0110/rules.mk
index 957680ab11..30394028b3 100644
--- a/keyboards/keychron/q2/rev_0110/rules.mk
+++ b/keyboards/keychron/q2/rev_0110/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = STM32L433
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/keychron/q2/rev_0111/rules.mk b/keyboards/keychron/q2/rev_0111/rules.mk
index 3b931ef9fe..a295f48e10 100644
--- a/keyboards/keychron/q2/rev_0111/rules.mk
+++ b/keyboards/keychron/q2/rev_0111/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = STM32L433
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/keychron/q2/rev_0112/rules.mk b/keyboards/keychron/q2/rev_0112/rules.mk
index 957680ab11..30394028b3 100644
--- a/keyboards/keychron/q2/rev_0112/rules.mk
+++ b/keyboards/keychron/q2/rev_0112/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = STM32L433
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/keychron/q2/rev_0113/rules.mk b/keyboards/keychron/q2/rev_0113/rules.mk
index 3b931ef9fe..a295f48e10 100644
--- a/keyboards/keychron/q2/rev_0113/rules.mk
+++ b/keyboards/keychron/q2/rev_0113/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = STM32L433
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/kinesis/alvicstep/matrix.c b/keyboards/kinesis/alvicstep/matrix.c
index 71619f8167..9c05374510 100644
--- a/keyboards/kinesis/alvicstep/matrix.c
+++ b/keyboards/kinesis/alvicstep/matrix.c
@@ -136,12 +136,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/bakeneko60/bakeneko60.c b/keyboards/kkatano/bakeneko60/bakeneko60.c
index 809c1ccf18..809c1ccf18 100644
--- a/keyboards/bakeneko60/bakeneko60.c
+++ b/keyboards/kkatano/bakeneko60/bakeneko60.c
diff --git a/keyboards/bakeneko60/bakeneko60.h b/keyboards/kkatano/bakeneko60/bakeneko60.h
index eb2e344f03..eb2e344f03 100644
--- a/keyboards/bakeneko60/bakeneko60.h
+++ b/keyboards/kkatano/bakeneko60/bakeneko60.h
diff --git a/keyboards/bakeneko60/config.h b/keyboards/kkatano/bakeneko60/config.h
index 9b923552bb..9b923552bb 100644
--- a/keyboards/bakeneko60/config.h
+++ b/keyboards/kkatano/bakeneko60/config.h
diff --git a/keyboards/bakeneko60/info.json b/keyboards/kkatano/bakeneko60/info.json
index 6bf6a08575..6bf6a08575 100644
--- a/keyboards/bakeneko60/info.json
+++ b/keyboards/kkatano/bakeneko60/info.json
diff --git a/keyboards/bakeneko60/keymaps/default/keymap.c b/keyboards/kkatano/bakeneko60/keymaps/default/keymap.c
index e1f5cfc2e2..e1f5cfc2e2 100644
--- a/keyboards/bakeneko60/keymaps/default/keymap.c
+++ b/keyboards/kkatano/bakeneko60/keymaps/default/keymap.c
diff --git a/keyboards/bakeneko60/keymaps/default/readme.md b/keyboards/kkatano/bakeneko60/keymaps/default/readme.md
index 5609e2adbb..5609e2adbb 100644
--- a/keyboards/bakeneko60/keymaps/default/readme.md
+++ b/keyboards/kkatano/bakeneko60/keymaps/default/readme.md
diff --git a/keyboards/bakeneko60/keymaps/via/keymap.c b/keyboards/kkatano/bakeneko60/keymaps/via/keymap.c
index 4034ba70d3..4034ba70d3 100644
--- a/keyboards/bakeneko60/keymaps/via/keymap.c
+++ b/keyboards/kkatano/bakeneko60/keymaps/via/keymap.c
diff --git a/keyboards/7splus/keymaps/via/rules.mk b/keyboards/kkatano/bakeneko60/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/7splus/keymaps/via/rules.mk
+++ b/keyboards/kkatano/bakeneko60/keymaps/via/rules.mk
diff --git a/keyboards/kkatano/bakeneko60/readme.md b/keyboards/kkatano/bakeneko60/readme.md
new file mode 100644
index 0000000000..0e1c293f90
--- /dev/null
+++ b/keyboards/kkatano/bakeneko60/readme.md
@@ -0,0 +1,17 @@
+# Bakeneko 60
+
+A simple 60% keyboard
+
+* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
+* Hardware Supported: Bakeneko 60
+* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/bakeneko60:default
+
+Flashing example for this keyboard:
+
+ make kkatano/bakeneko60:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko60/rules.mk b/keyboards/kkatano/bakeneko60/rules.mk
index 157a9de50e..157a9de50e 100644
--- a/keyboards/bakeneko60/rules.mk
+++ b/keyboards/kkatano/bakeneko60/rules.mk
diff --git a/keyboards/bakeneko65/rev2/config.h b/keyboards/kkatano/bakeneko65/rev2/config.h
index 6639e82395..6639e82395 100644
--- a/keyboards/bakeneko65/rev2/config.h
+++ b/keyboards/kkatano/bakeneko65/rev2/config.h
diff --git a/keyboards/bakeneko65/rev2/info.json b/keyboards/kkatano/bakeneko65/rev2/info.json
index cbcb6a2551..cbcb6a2551 100644
--- a/keyboards/bakeneko65/rev2/info.json
+++ b/keyboards/kkatano/bakeneko65/rev2/info.json
diff --git a/keyboards/bakeneko65/rev2/keymaps/default/keymap.c b/keyboards/kkatano/bakeneko65/rev2/keymaps/default/keymap.c
index 4d6d297d94..4d6d297d94 100644
--- a/keyboards/bakeneko65/rev2/keymaps/default/keymap.c
+++ b/keyboards/kkatano/bakeneko65/rev2/keymaps/default/keymap.c
diff --git a/keyboards/bakeneko65/rev2/keymaps/default/readme.md b/keyboards/kkatano/bakeneko65/rev2/keymaps/default/readme.md
index 71ad76773f..71ad76773f 100644
--- a/keyboards/bakeneko65/rev2/keymaps/default/readme.md
+++ b/keyboards/kkatano/bakeneko65/rev2/keymaps/default/readme.md
diff --git a/keyboards/bakeneko65/rev2/keymaps/via/keymap.c b/keyboards/kkatano/bakeneko65/rev2/keymaps/via/keymap.c
index a4cc2d8e8a..a4cc2d8e8a 100644
--- a/keyboards/bakeneko65/rev2/keymaps/via/keymap.c
+++ b/keyboards/kkatano/bakeneko65/rev2/keymaps/via/keymap.c
diff --git a/keyboards/geminate60/keymaps/via/rules.mk b/keyboards/kkatano/bakeneko65/rev2/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/geminate60/keymaps/via/rules.mk
+++ b/keyboards/kkatano/bakeneko65/rev2/keymaps/via/rules.mk
diff --git a/keyboards/kkatano/bakeneko65/rev2/readme.md b/keyboards/kkatano/bakeneko65/rev2/readme.md
new file mode 100644
index 0000000000..a12eded0db
--- /dev/null
+++ b/keyboards/kkatano/bakeneko65/rev2/readme.md
@@ -0,0 +1,17 @@
+# Bakeneko 65 V2
+
+A simple 65% keyboard
+
+* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
+* Hardware Supported: Bakeneko 65 V2
+* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-65)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/bakeneko65/rev2:default
+
+Flashing example for this keyboard:
+
+ make kkatano/bakeneko65/rev2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko65/rev2/rev2.c b/keyboards/kkatano/bakeneko65/rev2/rev2.c
index a486650790..a486650790 100644
--- a/keyboards/bakeneko65/rev2/rev2.c
+++ b/keyboards/kkatano/bakeneko65/rev2/rev2.c
diff --git a/keyboards/bakeneko65/rev2/rev2.h b/keyboards/kkatano/bakeneko65/rev2/rev2.h
index db2d5c14a6..db2d5c14a6 100644
--- a/keyboards/bakeneko65/rev2/rev2.h
+++ b/keyboards/kkatano/bakeneko65/rev2/rev2.h
diff --git a/keyboards/bakeneko65/rev2/rules.mk b/keyboards/kkatano/bakeneko65/rev2/rules.mk
index 26af9d2afc..26af9d2afc 100644
--- a/keyboards/bakeneko65/rev2/rules.mk
+++ b/keyboards/kkatano/bakeneko65/rev2/rules.mk
diff --git a/keyboards/bakeneko65/rev3/config.h b/keyboards/kkatano/bakeneko65/rev3/config.h
index 6001ce3159..6001ce3159 100644
--- a/keyboards/bakeneko65/rev3/config.h
+++ b/keyboards/kkatano/bakeneko65/rev3/config.h
diff --git a/keyboards/bakeneko65/rev3/info.json b/keyboards/kkatano/bakeneko65/rev3/info.json
index b54c21aafa..b54c21aafa 100644
--- a/keyboards/bakeneko65/rev3/info.json
+++ b/keyboards/kkatano/bakeneko65/rev3/info.json
diff --git a/keyboards/bakeneko65/rev3/keymaps/default/keymap.c b/keyboards/kkatano/bakeneko65/rev3/keymaps/default/keymap.c
index eb745e15ce..eb745e15ce 100644
--- a/keyboards/bakeneko65/rev3/keymaps/default/keymap.c
+++ b/keyboards/kkatano/bakeneko65/rev3/keymaps/default/keymap.c
diff --git a/keyboards/bakeneko65/rev3/keymaps/default/readme.md b/keyboards/kkatano/bakeneko65/rev3/keymaps/default/readme.md
index ecac9e3dff..ecac9e3dff 100644
--- a/keyboards/bakeneko65/rev3/keymaps/default/readme.md
+++ b/keyboards/kkatano/bakeneko65/rev3/keymaps/default/readme.md
diff --git a/keyboards/bakeneko65/rev3/keymaps/via/keymap.c b/keyboards/kkatano/bakeneko65/rev3/keymaps/via/keymap.c
index aed067bf10..aed067bf10 100644
--- a/keyboards/bakeneko65/rev3/keymaps/via/keymap.c
+++ b/keyboards/kkatano/bakeneko65/rev3/keymaps/via/keymap.c
diff --git a/keyboards/gingham/keymaps/via/rules.mk b/keyboards/kkatano/bakeneko65/rev3/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/gingham/keymaps/via/rules.mk
+++ b/keyboards/kkatano/bakeneko65/rev3/keymaps/via/rules.mk
diff --git a/keyboards/kkatano/bakeneko65/rev3/readme.md b/keyboards/kkatano/bakeneko65/rev3/readme.md
new file mode 100644
index 0000000000..18cd577328
--- /dev/null
+++ b/keyboards/kkatano/bakeneko65/rev3/readme.md
@@ -0,0 +1,17 @@
+# Bakeneko 65 V3
+
+A simple 65% keyboard
+
+* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
+* Hardware Supported: Bakeneko 65 V3
+* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-65)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/bakeneko65/rev3:default
+
+Flashing example for this keyboard:
+
+ make kkatano/bakeneko65/rev3:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko65/rev3/rev3.c b/keyboards/kkatano/bakeneko65/rev3/rev3.c
index cf1084d495..cf1084d495 100644
--- a/keyboards/bakeneko65/rev3/rev3.c
+++ b/keyboards/kkatano/bakeneko65/rev3/rev3.c
diff --git a/keyboards/bakeneko65/rev3/rev3.h b/keyboards/kkatano/bakeneko65/rev3/rev3.h
index 3e46097e39..3e46097e39 100644
--- a/keyboards/bakeneko65/rev3/rev3.h
+++ b/keyboards/kkatano/bakeneko65/rev3/rev3.h
diff --git a/data/templates/avr/rules.mk b/keyboards/kkatano/bakeneko65/rev3/rules.mk
index 1275531ef6..1275531ef6 100644
--- a/data/templates/avr/rules.mk
+++ b/keyboards/kkatano/bakeneko65/rev3/rules.mk
diff --git a/keyboards/bakeneko80/bakeneko80.c b/keyboards/kkatano/bakeneko80/bakeneko80.c
index 264979f550..264979f550 100644
--- a/keyboards/bakeneko80/bakeneko80.c
+++ b/keyboards/kkatano/bakeneko80/bakeneko80.c
diff --git a/keyboards/bakeneko80/bakeneko80.h b/keyboards/kkatano/bakeneko80/bakeneko80.h
index 9c30a57566..9c30a57566 100644
--- a/keyboards/bakeneko80/bakeneko80.h
+++ b/keyboards/kkatano/bakeneko80/bakeneko80.h
diff --git a/keyboards/bakeneko80/config.h b/keyboards/kkatano/bakeneko80/config.h
index da330c395f..da330c395f 100644
--- a/keyboards/bakeneko80/config.h
+++ b/keyboards/kkatano/bakeneko80/config.h
diff --git a/keyboards/bakeneko80/info.json b/keyboards/kkatano/bakeneko80/info.json
index afd608a06f..afd608a06f 100644
--- a/keyboards/bakeneko80/info.json
+++ b/keyboards/kkatano/bakeneko80/info.json
diff --git a/keyboards/bakeneko80/keymaps/default/keymap.c b/keyboards/kkatano/bakeneko80/keymaps/default/keymap.c
index ff02728043..ff02728043 100644
--- a/keyboards/bakeneko80/keymaps/default/keymap.c
+++ b/keyboards/kkatano/bakeneko80/keymaps/default/keymap.c
diff --git a/keyboards/bakeneko80/keymaps/default/readme.md b/keyboards/kkatano/bakeneko80/keymaps/default/readme.md
index 65fe06599d..65fe06599d 100644
--- a/keyboards/bakeneko80/keymaps/default/readme.md
+++ b/keyboards/kkatano/bakeneko80/keymaps/default/readme.md
diff --git a/keyboards/kkatano/bakeneko80/readme.md b/keyboards/kkatano/bakeneko80/readme.md
new file mode 100644
index 0000000000..cc04ab447b
--- /dev/null
+++ b/keyboards/kkatano/bakeneko80/readme.md
@@ -0,0 +1,13 @@
+# Bakeneko 80
+
+Open source tenkeyless keyboard for DIYers
+
+* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
+* Hardware Supported: Bakeneko 80 PCB
+* Hardware Availability: [PCB](https://github.com/kkatano/bakeneko-80-pcb), [Case and Plate](https://github.com/kkatano/bakeneko-80-case)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/bakeneko80:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bakeneko80/rules.mk b/keyboards/kkatano/bakeneko80/rules.mk
index 2661317d2a..2661317d2a 100644
--- a/keyboards/bakeneko80/rules.mk
+++ b/keyboards/kkatano/bakeneko80/rules.mk
diff --git a/keyboards/wallaby/config.h b/keyboards/kkatano/wallaby/config.h
index 3c0d446418..3c0d446418 100644
--- a/keyboards/wallaby/config.h
+++ b/keyboards/kkatano/wallaby/config.h
diff --git a/keyboards/wallaby/info.json b/keyboards/kkatano/wallaby/info.json
index 6ff20c91f4..6ff20c91f4 100644
--- a/keyboards/wallaby/info.json
+++ b/keyboards/kkatano/wallaby/info.json
diff --git a/keyboards/wallaby/keymaps/default/keymap.c b/keyboards/kkatano/wallaby/keymaps/default/keymap.c
index be9457589b..be9457589b 100644
--- a/keyboards/wallaby/keymaps/default/keymap.c
+++ b/keyboards/kkatano/wallaby/keymaps/default/keymap.c
diff --git a/keyboards/wallaby/keymaps/default/readme.md b/keyboards/kkatano/wallaby/keymaps/default/readme.md
index 517ef1e857..517ef1e857 100644
--- a/keyboards/wallaby/keymaps/default/readme.md
+++ b/keyboards/kkatano/wallaby/keymaps/default/readme.md
diff --git a/keyboards/kkatano/wallaby/readme.md b/keyboards/kkatano/wallaby/readme.md
new file mode 100644
index 0000000000..6be5a059fd
--- /dev/null
+++ b/keyboards/kkatano/wallaby/readme.md
@@ -0,0 +1,13 @@
+# wallaby
+
+A Tenkeyless PCB for YMDK aluminium case compatible with Filco
+
+* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
+* Hardware Supported: Wallaby PCB
+* Hardware Availability: https://github.com/kkatano/wallaby
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/wallaby:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wallaby/rules.mk b/keyboards/kkatano/wallaby/rules.mk
index 2661317d2a..2661317d2a 100644
--- a/keyboards/wallaby/rules.mk
+++ b/keyboards/kkatano/wallaby/rules.mk
diff --git a/keyboards/wallaby/wallaby.c b/keyboards/kkatano/wallaby/wallaby.c
index b27ff4e29c..b27ff4e29c 100644
--- a/keyboards/wallaby/wallaby.c
+++ b/keyboards/kkatano/wallaby/wallaby.c
diff --git a/keyboards/wallaby/wallaby.h b/keyboards/kkatano/wallaby/wallaby.h
index f5ab30b830..f5ab30b830 100644
--- a/keyboards/wallaby/wallaby.h
+++ b/keyboards/kkatano/wallaby/wallaby.h
diff --git a/keyboards/yurei/config.h b/keyboards/kkatano/yurei/config.h
index 57877dc8fa..57877dc8fa 100644
--- a/keyboards/yurei/config.h
+++ b/keyboards/kkatano/yurei/config.h
diff --git a/keyboards/yurei/info.json b/keyboards/kkatano/yurei/info.json
index bbbdb01a25..bbbdb01a25 100644
--- a/keyboards/yurei/info.json
+++ b/keyboards/kkatano/yurei/info.json
diff --git a/keyboards/yurei/keymaps/default/keymap.c b/keyboards/kkatano/yurei/keymaps/default/keymap.c
index 45f955fb0f..45f955fb0f 100644
--- a/keyboards/yurei/keymaps/default/keymap.c
+++ b/keyboards/kkatano/yurei/keymaps/default/keymap.c
diff --git a/keyboards/yurei/keymaps/default/readme.md b/keyboards/kkatano/yurei/keymaps/default/readme.md
index 4134a11e42..4134a11e42 100644
--- a/keyboards/yurei/keymaps/default/readme.md
+++ b/keyboards/kkatano/yurei/keymaps/default/readme.md
diff --git a/keyboards/kkatano/yurei/readme.md b/keyboards/kkatano/yurei/readme.md
new file mode 100644
index 0000000000..69bd3a7cbe
--- /dev/null
+++ b/keyboards/kkatano/yurei/readme.md
@@ -0,0 +1,13 @@
+# Yurei
+
+A Tenkeyless PCB inspired by Phantom, for customizing Filco Majestouch 2.
+
+* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
+* Hardware Supported: Yurei PCB
+* Hardware Availability: https://github.com/kkatano/yurei
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kkatano/yurei:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/yurei/rules.mk b/keyboards/kkatano/yurei/rules.mk
index 9d8bcfa6fb..9d8bcfa6fb 100644
--- a/keyboards/yurei/rules.mk
+++ b/keyboards/kkatano/yurei/rules.mk
diff --git a/keyboards/yurei/yurei.c b/keyboards/kkatano/yurei/yurei.c
index 3ac0d32bef..3ac0d32bef 100644
--- a/keyboards/yurei/yurei.c
+++ b/keyboards/kkatano/yurei/yurei.c
diff --git a/keyboards/yurei/yurei.h b/keyboards/kkatano/yurei/yurei.h
index d117d2a02f..d117d2a02f 100644
--- a/keyboards/yurei/yurei.h
+++ b/keyboards/kkatano/yurei/yurei.h
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.c b/keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.c
deleted file mode 100644
index 3d7f586d76..0000000000
--- a/keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2020 ipetepete, 2021 deadolus, 2022 p4yne
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include "bm65hsrgb_iso.h"
-
-#ifdef RGB_MATRIX_ENABLE
-led_config_t g_led_config = { {
- // Key Matrix to LED Index
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
- { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
- { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43},
- { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58},
- { 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66, 67}
-
-}, {
- // LED Index to Physical Position
- // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
- { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, { 224, 0 },
- // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1
- { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, { 224, 16 },
- // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp
- { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, { 224, 32 },
- // LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, PageDown
- { 3, 48 }, { 18, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 190, 48 }, { 209, 48 }, { 224, 48 },
- // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
- { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 194, 64 }, { 209, 64 },{ 224, 64 },
- // UNDERGLOW
- { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 }
-}, {
- // LED Index to Flag
- // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- // LShift, <, Z, X, C, V, B, N, M, ,, ., /, RShift, Up, PageDown
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
- // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
- 1, 1, 1, 4, 1, 1, 1, 1, 1,
- // UNDERGLOW
- 2, 2, 2, 2, 2, 2
-} };
-
-__attribute__ ((weak))
-void rgb_matrix_indicators_user(void) {
- if (host_keyboard_led_state().caps_lock) {
- rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
- }
-}
-#endif
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/config.h b/keyboards/kprepublic/bm65hsrgb_iso/rev1/config.h
index aafb43bb51..aafb43bb51 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/config.h
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/config.h
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/info.json b/keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json
index 9212c43339..9212c43339 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/info.json
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/info.json
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/config.h b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/config.h
index 1dc1414fa5..1dc1414fa5 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/config.h
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/config.h
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.c b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.c
index 46de987a68..46de987a68 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.c
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.c
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.h b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.h
index 1459e2c5bb..1459e2c5bb 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/keymap.h
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/keymap.h
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/readme.md b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/readme.md
index 095550b01a..095550b01a 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/readme.md
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/readme.md
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/rules.mk b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/rules.mk
index c8354ea256..c8354ea256 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/deadolus/rules.mk
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/deadolus/rules.mk
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/default/keymap.c b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/default/keymap.c
index bed12e0f72..bed12e0f72 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/default/keymap.c
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/default/keymap.c
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/keymap.c b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/keymap.c
index ae36e6b1f5..ae36e6b1f5 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/keymap.c
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/keymap.c
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/readme.md b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/readme.md
index 87c7542756..87c7542756 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/readme.md
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/readme.md
diff --git a/keyboards/ajisai74/keymaps/via/rules.mk b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/ajisai74/keymaps/via/rules.mk
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keymaps/via/rules.mk
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/readme.md b/keyboards/kprepublic/bm65hsrgb_iso/rev1/readme.md
index 752362e29a..752362e29a 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/readme.md
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/readme.md
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c
new file mode 100644
index 0000000000..6e0fd57117
--- /dev/null
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c
@@ -0,0 +1,63 @@
+/* Copyright 2020 ipetepete, 2021 deadolus, 2022 p4yne
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "rev1.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
+ { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
+ { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43},
+ { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58},
+ { 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66, 67}
+
+}, {
+ // LED Index to Physical Position
+ // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, { 224, 0 },
+ // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1
+ { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, { 224, 16 },
+ // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp
+ { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, { 224, 32 },
+ // LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, PageDown
+ { 3, 48 }, { 18, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 190, 48 }, { 209, 48 }, { 224, 48 },
+ // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
+ { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 194, 64 }, { 209, 64 },{ 224, 64 },
+ // UNDERGLOW
+ { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 }
+}, {
+ // LED Index to Flag
+ // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // LShift, <, Z, X, C, V, B, N, M, ,, ., /, RShift, Up, PageDown
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
+ 1, 1, 1, 4, 1, 1, 1, 1, 1,
+ // UNDERGLOW
+ 2, 2, 2, 2, 2, 2
+} };
+
+__attribute__ ((weak))
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
+ }
+}
+#endif
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.h b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.h
index 7f39c6f61b..7f39c6f61b 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/bm65hsrgb_iso.h
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.h
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/rules.mk b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rules.mk
index c3a6bf1d48..c3a6bf1d48 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/rules.mk
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rules.mk
diff --git a/keyboards/kprepublic/bm68hsrgb/bm68hsrgb.c b/keyboards/kprepublic/bm68hsrgb/bm68hsrgb.c
deleted file mode 100644
index 734d2ee677..0000000000
--- a/keyboards/kprepublic/bm68hsrgb/bm68hsrgb.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright 2021 peepeetee
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "bm68hsrgb.h"
-
-#ifdef RGB_MATRIX_ENABLE
-led_config_t g_led_config = { {
- // Key Matrix to LED Index
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
- { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
- { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 },
- { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 },
- { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 }
-}, {
- // LED Index to Physical Position
- { 0, 0}, { 15, 0}, { 30, 0}, { 45, 0}, { 60, 0}, { 75, 0}, { 90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {202, 0}, {225, 0}, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
- { 4, 16}, { 22, 16}, { 37, 16}, { 52, 16}, { 67, 16}, { 82, 16}, { 97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {206, 16}, {225, 16}, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home
- { 6, 32}, { 26, 32}, { 41, 32}, { 56, 32}, { 71, 32}, { 86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {176, 32}, {201, 32}, {225, 32}, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up
- { 9, 48}, { 34, 48}, { 49, 48}, { 64, 48}, { 79, 48}, { 94, 48}, {109, 48}, {124, 48}, {139, 48}, {154, 48}, {169, 48}, {189, 48}, {208, 48}, {225, 48}, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down
- { 2, 64}, { 21, 64}, { 39, 64}, { 94, 64}, {148, 64}, {163, 64}, {178, 64}, {193, 64}, {208, 64}, {225, 64}, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right
- {185, 45}, {160, 45}, {125, 45}, { 95, 45}, { 60, 45}, { 25, 45} // UNDERGLOW
-}, {
- // LED Index to Flag
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down
- 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right
- 2, 2, 2, 2, 2, 2 // UNDERGLOW
-} };
-
-//CAPS backlight
-__attribute__ ((weak))
-void rgb_matrix_indicators_user(void) {
- if (host_keyboard_led_state().caps_lock) {
- rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
- }
-}
-#endif
diff --git a/keyboards/kprepublic/bm68hsrgb/config.h b/keyboards/kprepublic/bm68hsrgb/rev1/config.h
index a779c97b7b..a779c97b7b 100644
--- a/keyboards/kprepublic/bm68hsrgb/config.h
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/config.h
diff --git a/keyboards/kprepublic/bm68hsrgb/info.json b/keyboards/kprepublic/bm68hsrgb/rev1/info.json
index 0a72da6e98..0a72da6e98 100644
--- a/keyboards/kprepublic/bm68hsrgb/info.json
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/info.json
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/default/keymap.c b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/keymap.c
index b4bc5cb59d..b4bc5cb59d 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/default/keymap.c
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/keymap.c
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/default/readme.md b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/readme.md
index 0408ee9e98..0408ee9e98 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/default/readme.md
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/default/readme.md
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/config.h b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
index 0748f83cdc..0748f83cdc 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/config.h
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.c b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.c
index 934463b11f..934463b11f 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.c
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.c
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.h b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.h
index e8d0170d4d..e8d0170d4d 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/keymap.h
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/keymap.h
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/readme.md b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/readme.md
index 47899c27e1..47899c27e1 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/peepeetee/readme.md
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/readme.md
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/via/keymap.c b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/keymap.c
index 46381c561c..46381c561c 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/via/keymap.c
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/keymap.c
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/via/readme.md b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/readme.md
index c013ae25e2..c013ae25e2 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/via/readme.md
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/readme.md
diff --git a/keyboards/idobo/keymaps/via/rules.mk b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/idobo/keymaps/via/rules.mk
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/via/rules.mk
diff --git a/keyboards/kprepublic/bm68hsrgb/readme.md b/keyboards/kprepublic/bm68hsrgb/rev1/readme.md
index 54d71cab2c..54d71cab2c 100644
--- a/keyboards/kprepublic/bm68hsrgb/readme.md
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/readme.md
diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c
new file mode 100644
index 0000000000..4634a662b6
--- /dev/null
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c
@@ -0,0 +1,52 @@
+/* Copyright 2021 peepeetee
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "rev1.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
+ { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
+ { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 },
+ { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 },
+ { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 }
+}, {
+ // LED Index to Physical Position
+ { 0, 0}, { 15, 0}, { 30, 0}, { 45, 0}, { 60, 0}, { 75, 0}, { 90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {202, 0}, {225, 0}, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
+ { 4, 16}, { 22, 16}, { 37, 16}, { 52, 16}, { 67, 16}, { 82, 16}, { 97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {206, 16}, {225, 16}, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home
+ { 6, 32}, { 26, 32}, { 41, 32}, { 56, 32}, { 71, 32}, { 86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {176, 32}, {201, 32}, {225, 32}, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up
+ { 9, 48}, { 34, 48}, { 49, 48}, { 64, 48}, { 79, 48}, { 94, 48}, {109, 48}, {124, 48}, {139, 48}, {154, 48}, {169, 48}, {189, 48}, {208, 48}, {225, 48}, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down
+ { 2, 64}, { 21, 64}, { 39, 64}, { 94, 64}, {148, 64}, {163, 64}, {178, 64}, {193, 64}, {208, 64}, {225, 64}, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right
+ {185, 45}, {160, 45}, {125, 45}, { 95, 45}, { 60, 45}, { 25, 45} // UNDERGLOW
+}, {
+ // LED Index to Flag
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right
+ 2, 2, 2, 2, 2, 2 // UNDERGLOW
+} };
+
+//CAPS backlight
+__attribute__ ((weak))
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
+ }
+}
+#endif
diff --git a/keyboards/kprepublic/bm68hsrgb/bm68hsrgb.h b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.h
index 3e18b914cc..3e18b914cc 100644
--- a/keyboards/kprepublic/bm68hsrgb/bm68hsrgb.h
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.h
diff --git a/keyboards/kprepublic/bm68hsrgb/rules.mk b/keyboards/kprepublic/bm68hsrgb/rev1/rules.mk
index 92c37f393b..92c37f393b 100644
--- a/keyboards/kprepublic/bm68hsrgb/rules.mk
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/rules.mk
diff --git a/keyboards/latin17rgb/readme.md b/keyboards/latin17rgb/readme.md
deleted file mode 100644
index 775055f27a..0000000000
--- a/keyboards/latin17rgb/readme.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Latin17RGB
-
-![Latin17rgb](https://i.imgur.com/UoGWpw9l.jpg)
-
- RGB PAD use IS31FL3731 IC
-
-* Keyboard Maintainer: [18438880](https://github.com/18438880)
-* Hardware Availability:
-
-Make example for this keyboard (after setting up your build environment):
-
- make latin17rgb:default
-
-Flashing example for this keyboard:
-
- make latin17rgb:default:flash
-
-To reset the board into bootloader mode, hold the key at the top left of the keyboard while connecting the USB cable (also erases persistent settings).
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin47ble/readme.md b/keyboards/latin47ble/readme.md
deleted file mode 100644
index cc8e9e6a34..0000000000
--- a/keyboards/latin47ble/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latin47ble
-
-![Latin47ble](https://github.com/latincompass/latin64BLE-kb)
-
-macro 47 ble 4.0 RGB keyboard
-
-* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
-* Hardware Availability: https://github.com/haierwangwei2005/latin47blekeyboard-/blob/main/1%20(2).png
-
-Make example for this keyboard (after setting up your build environment):
-
- make latin47ble:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin47ble/rules.mk b/keyboards/latin47ble/rules.mk
deleted file mode 100644
index 95044a18bd..0000000000
--- a/keyboards/latin47ble/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency
-F_CPU = 8000000
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# 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 = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
-
-LAYOUTS = planck_mit
diff --git a/keyboards/latin60rgb/readme.md b/keyboards/latin60rgb/readme.md
deleted file mode 100644
index 3b5715c2da..0000000000
--- a/keyboards/latin60rgb/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latin60RGB
-
-![Latin60rgb](https://github.com/latincompass/latin62RGB-keyboard/blob/main/PCB-%20(1).png)
-
- 60% RGB keyboard use IS31FL3733 IC like HHKB
-
-* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
-* Hardware Availability: https://github.com/latincompass/latin62RGB-keyboard/blob/main/PCB-%20(1).png
-
-Make example for this keyboard (after setting up your build environment):
-
- make latin60rgb:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin64ble/readme.md b/keyboards/latin64ble/readme.md
deleted file mode 100644
index 98f5e50a69..0000000000
--- a/keyboards/latin64ble/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latin64ble
-
-![Latin64ble](https://i.imgur.com/zRlOU3ml.jpg)
-
-macro 64 ble 4.0 RGB keyboard
-
-* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
-* Hardware Availability: https://github.com/latincompass/latin64BLE-kb
-
-Make example for this keyboard (after setting up your build environment):
-
- make latin64ble:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin64ble/rules.mk b/keyboards/latin64ble/rules.mk
deleted file mode 100644
index 30f105ef49..0000000000
--- a/keyboards/latin64ble/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency
-F_CPU = 8000000
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # 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 = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
diff --git a/keyboards/latin6rgb/readme.md b/keyboards/latin6rgb/readme.md
deleted file mode 100644
index 5338f1625c..0000000000
--- a/keyboards/latin6rgb/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latin6RGB
-
-![Latin6rgb](https://github.com/18438880/Latin6RGB/blob/main/6RGB%20(1).png)
-
- 6 Key RGB PAD use IS31FL3731 IC
-
-* Keyboard Maintainer: [18438880](https://github.com/18438880)
-* Hardware Availability: https://github.com/18438880/Latin6RGB/blob/main/6RGB%20(1).png
-
-Make example for this keyboard (after setting up your build environment):
-
- make latin6rgb:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin17rgb/config.h b/keyboards/latincompass/latin17rgb/config.h
index 6b929f249d..6b929f249d 100644
--- a/keyboards/latin17rgb/config.h
+++ b/keyboards/latincompass/latin17rgb/config.h
diff --git a/keyboards/latin17rgb/info.json b/keyboards/latincompass/latin17rgb/info.json
index 61aae4f8d6..61aae4f8d6 100644
--- a/keyboards/latin17rgb/info.json
+++ b/keyboards/latincompass/latin17rgb/info.json
diff --git a/keyboards/latin17rgb/keymaps/default/keymap.c b/keyboards/latincompass/latin17rgb/keymaps/default/keymap.c
index 58e01b1a2b..58e01b1a2b 100644
--- a/keyboards/latin17rgb/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latin17rgb/keymaps/default/keymap.c
diff --git a/keyboards/latin17rgb/keymaps/via/keymap.c b/keyboards/latincompass/latin17rgb/keymaps/via/keymap.c
index a73da5eb89..a73da5eb89 100644
--- a/keyboards/latin17rgb/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latin17rgb/keymaps/via/keymap.c
diff --git a/keyboards/choco60/keymaps/via/rules.mk b/keyboards/latincompass/latin17rgb/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/choco60/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latin17rgb/keymaps/via/rules.mk
diff --git a/keyboards/latin17rgb/latin17rgb.c b/keyboards/latincompass/latin17rgb/latin17rgb.c
index d4ab3ea675..d4ab3ea675 100644
--- a/keyboards/latin17rgb/latin17rgb.c
+++ b/keyboards/latincompass/latin17rgb/latin17rgb.c
diff --git a/keyboards/latin17rgb/latin17rgb.h b/keyboards/latincompass/latin17rgb/latin17rgb.h
index f4ed4bf0c8..f4ed4bf0c8 100644
--- a/keyboards/latin17rgb/latin17rgb.h
+++ b/keyboards/latincompass/latin17rgb/latin17rgb.h
diff --git a/keyboards/latincompass/latin17rgb/readme.md b/keyboards/latincompass/latin17rgb/readme.md
new file mode 100644
index 0000000000..aa7095b5d6
--- /dev/null
+++ b/keyboards/latincompass/latin17rgb/readme.md
@@ -0,0 +1,20 @@
+# Latin17RGB
+
+![Latin17rgb](https://i.imgur.com/UoGWpw9l.jpg)
+
+ RGB PAD use IS31FL3731 IC
+
+* Keyboard Maintainer: [18438880](https://github.com/18438880)
+* Hardware Availability:
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latin17rgb:default
+
+Flashing example for this keyboard:
+
+ make latincompass/latin17rgb:default:flash
+
+To reset the board into bootloader mode, hold the key at the top left of the keyboard while connecting the USB cable (also erases persistent settings).
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin17rgb/rules.mk b/keyboards/latincompass/latin17rgb/rules.mk
index f42933659f..f42933659f 100644
--- a/keyboards/latin17rgb/rules.mk
+++ b/keyboards/latincompass/latin17rgb/rules.mk
diff --git a/keyboards/latin47ble/config.h b/keyboards/latincompass/latin47ble/config.h
index f9f94d0dbf..f9f94d0dbf 100644
--- a/keyboards/latin47ble/config.h
+++ b/keyboards/latincompass/latin47ble/config.h
diff --git a/keyboards/latin47ble/info.json b/keyboards/latincompass/latin47ble/info.json
index 56b14136d8..56b14136d8 100644
--- a/keyboards/latin47ble/info.json
+++ b/keyboards/latincompass/latin47ble/info.json
diff --git a/keyboards/latin47ble/keymaps/default/keymap.c b/keyboards/latincompass/latin47ble/keymaps/default/keymap.c
index 3827c61fd7..3827c61fd7 100644
--- a/keyboards/latin47ble/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latin47ble/keymaps/default/keymap.c
diff --git a/keyboards/latin47ble/keymaps/via/keymap.c b/keyboards/latincompass/latin47ble/keymaps/via/keymap.c
index 6dd3a7231c..6dd3a7231c 100644
--- a/keyboards/latin47ble/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latin47ble/keymaps/via/keymap.c
diff --git a/keyboards/latin17rgb/keymaps/via/rules.mk b/keyboards/latincompass/latin47ble/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latin17rgb/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latin47ble/keymaps/via/rules.mk
diff --git a/keyboards/latin47ble/latin47ble.c b/keyboards/latincompass/latin47ble/latin47ble.c
index c207b42297..c207b42297 100644
--- a/keyboards/latin47ble/latin47ble.c
+++ b/keyboards/latincompass/latin47ble/latin47ble.c
diff --git a/keyboards/latin47ble/latin47ble.h b/keyboards/latincompass/latin47ble/latin47ble.h
index 87ecaad658..87ecaad658 100644
--- a/keyboards/latin47ble/latin47ble.h
+++ b/keyboards/latincompass/latin47ble/latin47ble.h
diff --git a/keyboards/latincompass/latin47ble/readme.md b/keyboards/latincompass/latin47ble/readme.md
new file mode 100644
index 0000000000..f03a15d826
--- /dev/null
+++ b/keyboards/latincompass/latin47ble/readme.md
@@ -0,0 +1,14 @@
+# Latin47ble
+
+![Latin47ble](https://github.com/latincompass/latin64BLE-kb)
+
+macro 47 ble 4.0 RGB keyboard
+
+* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
+* Hardware Availability: https://github.com/haierwangwei2005/latin47blekeyboard-/blob/main/1%20(2).png
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latin47ble:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latincompass/latin47ble/rules.mk b/keyboards/latincompass/latin47ble/rules.mk
new file mode 100644
index 0000000000..015c454728
--- /dev/null
+++ b/keyboards/latincompass/latin47ble/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+BLUETOOTH_ENABLE = yes
+BLUETOOTH_DRIVER = BluefruitLE
+
+LAYOUTS = planck_mit
diff --git a/keyboards/latin60rgb/config.h b/keyboards/latincompass/latin60rgb/config.h
index cc7b83b9b8..cc7b83b9b8 100644
--- a/keyboards/latin60rgb/config.h
+++ b/keyboards/latincompass/latin60rgb/config.h
diff --git a/keyboards/latin60rgb/info.json b/keyboards/latincompass/latin60rgb/info.json
index a493befaf9..a493befaf9 100644
--- a/keyboards/latin60rgb/info.json
+++ b/keyboards/latincompass/latin60rgb/info.json
diff --git a/keyboards/latin60rgb/keymaps/default/keymap.c b/keyboards/latincompass/latin60rgb/keymaps/default/keymap.c
index a44bbf660e..a44bbf660e 100644
--- a/keyboards/latin60rgb/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latin60rgb/keymaps/default/keymap.c
diff --git a/keyboards/latin60rgb/keymaps/via/keymap.c b/keyboards/latincompass/latin60rgb/keymaps/via/keymap.c
index a44bbf660e..a44bbf660e 100644
--- a/keyboards/latin60rgb/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latin60rgb/keymaps/via/keymap.c
diff --git a/keyboards/latin47ble/keymaps/via/rules.mk b/keyboards/latincompass/latin60rgb/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latin47ble/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latin60rgb/keymaps/via/rules.mk
diff --git a/keyboards/latin60rgb/latin60rgb.c b/keyboards/latincompass/latin60rgb/latin60rgb.c
index b849f7ef9d..b849f7ef9d 100644
--- a/keyboards/latin60rgb/latin60rgb.c
+++ b/keyboards/latincompass/latin60rgb/latin60rgb.c
diff --git a/keyboards/latin60rgb/latin60rgb.h b/keyboards/latincompass/latin60rgb/latin60rgb.h
index fb1ecb66a9..fb1ecb66a9 100644
--- a/keyboards/latin60rgb/latin60rgb.h
+++ b/keyboards/latincompass/latin60rgb/latin60rgb.h
diff --git a/keyboards/latincompass/latin60rgb/readme.md b/keyboards/latincompass/latin60rgb/readme.md
new file mode 100644
index 0000000000..ae855bc8c1
--- /dev/null
+++ b/keyboards/latincompass/latin60rgb/readme.md
@@ -0,0 +1,14 @@
+# Latin60RGB
+
+![Latin60rgb](https://github.com/latincompass/latin62RGB-keyboard/blob/main/PCB-%20(1).png)
+
+ 60% RGB keyboard use IS31FL3733 IC like HHKB
+
+* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
+* Hardware Availability: https://github.com/latincompass/latin62RGB-keyboard/blob/main/PCB-%20(1).png
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latin60rgb:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin60rgb/rules.mk b/keyboards/latincompass/latin60rgb/rules.mk
index fde06cb9fe..fde06cb9fe 100644
--- a/keyboards/latin60rgb/rules.mk
+++ b/keyboards/latincompass/latin60rgb/rules.mk
diff --git a/keyboards/latin64ble/config.h b/keyboards/latincompass/latin64ble/config.h
index 68e8e7b293..68e8e7b293 100644
--- a/keyboards/latin64ble/config.h
+++ b/keyboards/latincompass/latin64ble/config.h
diff --git a/keyboards/latin64ble/info.json b/keyboards/latincompass/latin64ble/info.json
index 99fe62b266..99fe62b266 100644
--- a/keyboards/latin64ble/info.json
+++ b/keyboards/latincompass/latin64ble/info.json
diff --git a/keyboards/latin64ble/keymaps/default/keymap.c b/keyboards/latincompass/latin64ble/keymaps/default/keymap.c
index 4c05beb7d7..4c05beb7d7 100644
--- a/keyboards/latin64ble/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latin64ble/keymaps/default/keymap.c
diff --git a/keyboards/latin64ble/keymaps/via/keymap.c b/keyboards/latincompass/latin64ble/keymaps/via/keymap.c
index 08ce5fbf3f..08ce5fbf3f 100644
--- a/keyboards/latin64ble/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latin64ble/keymaps/via/keymap.c
diff --git a/keyboards/latin60rgb/keymaps/via/rules.mk b/keyboards/latincompass/latin64ble/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latin60rgb/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latin64ble/keymaps/via/rules.mk
diff --git a/keyboards/latin64ble/latin64ble.c b/keyboards/latincompass/latin64ble/latin64ble.c
index 580f4da426..580f4da426 100644
--- a/keyboards/latin64ble/latin64ble.c
+++ b/keyboards/latincompass/latin64ble/latin64ble.c
diff --git a/keyboards/latin64ble/latin64ble.h b/keyboards/latincompass/latin64ble/latin64ble.h
index 76814acdb3..76814acdb3 100644
--- a/keyboards/latin64ble/latin64ble.h
+++ b/keyboards/latincompass/latin64ble/latin64ble.h
diff --git a/keyboards/latincompass/latin64ble/readme.md b/keyboards/latincompass/latin64ble/readme.md
new file mode 100644
index 0000000000..d8ee92d16d
--- /dev/null
+++ b/keyboards/latincompass/latin64ble/readme.md
@@ -0,0 +1,14 @@
+# Latin64ble
+
+![Latin64ble](https://i.imgur.com/zRlOU3ml.jpg)
+
+macro 64 ble 4.0 RGB keyboard
+
+* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
+* Hardware Availability: https://github.com/latincompass/latin64BLE-kb
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latin64ble:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latincompass/latin64ble/rules.mk b/keyboards/latincompass/latin64ble/rules.mk
new file mode 100644
index 0000000000..97717333de
--- /dev/null
+++ b/keyboards/latincompass/latin64ble/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # 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 = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+BLUETOOTH_ENABLE = yes
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/latin6rgb/config.h b/keyboards/latincompass/latin6rgb/config.h
index 718d8aa26f..718d8aa26f 100644
--- a/keyboards/latin6rgb/config.h
+++ b/keyboards/latincompass/latin6rgb/config.h
diff --git a/keyboards/latin6rgb/info.json b/keyboards/latincompass/latin6rgb/info.json
index 26508e9320..26508e9320 100644
--- a/keyboards/latin6rgb/info.json
+++ b/keyboards/latincompass/latin6rgb/info.json
diff --git a/keyboards/latin6rgb/keymaps/default/keymap.c b/keyboards/latincompass/latin6rgb/keymaps/default/keymap.c
index 90b96751ef..90b96751ef 100644
--- a/keyboards/latin6rgb/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latin6rgb/keymaps/default/keymap.c
diff --git a/keyboards/latin6rgb/keymaps/via/keymap.c b/keyboards/latincompass/latin6rgb/keymaps/via/keymap.c
index 90b96751ef..90b96751ef 100644
--- a/keyboards/latin6rgb/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latin6rgb/keymaps/via/keymap.c
diff --git a/keyboards/latin64ble/keymaps/via/rules.mk b/keyboards/latincompass/latin6rgb/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latin64ble/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latin6rgb/keymaps/via/rules.mk
diff --git a/keyboards/latin6rgb/latin6rgb.c b/keyboards/latincompass/latin6rgb/latin6rgb.c
index ddab9a1519..ddab9a1519 100644
--- a/keyboards/latin6rgb/latin6rgb.c
+++ b/keyboards/latincompass/latin6rgb/latin6rgb.c
diff --git a/keyboards/latin6rgb/latin6rgb.h b/keyboards/latincompass/latin6rgb/latin6rgb.h
index 6feae9493a..6feae9493a 100644
--- a/keyboards/latin6rgb/latin6rgb.h
+++ b/keyboards/latincompass/latin6rgb/latin6rgb.h
diff --git a/keyboards/latincompass/latin6rgb/readme.md b/keyboards/latincompass/latin6rgb/readme.md
new file mode 100644
index 0000000000..24d340a510
--- /dev/null
+++ b/keyboards/latincompass/latin6rgb/readme.md
@@ -0,0 +1,14 @@
+# Latin6RGB
+
+![Latin6rgb](https://github.com/18438880/Latin6RGB/blob/main/6RGB%20(1).png)
+
+ 6 Key RGB PAD use IS31FL3731 IC
+
+* Keyboard Maintainer: [18438880](https://github.com/18438880)
+* Hardware Availability: https://github.com/18438880/Latin6RGB/blob/main/6RGB%20(1).png
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latin6rgb:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latin6rgb/rules.mk b/keyboards/latincompass/latin6rgb/rules.mk
index 9837de97e1..9837de97e1 100644
--- a/keyboards/latin6rgb/rules.mk
+++ b/keyboards/latincompass/latin6rgb/rules.mk
diff --git a/keyboards/latinpad/config.h b/keyboards/latincompass/latinpad/config.h
index 5cff076d9d..5cff076d9d 100644
--- a/keyboards/latinpad/config.h
+++ b/keyboards/latincompass/latinpad/config.h
diff --git a/keyboards/latinpad/info.json b/keyboards/latincompass/latinpad/info.json
index 0c86498e7d..0c86498e7d 100644
--- a/keyboards/latinpad/info.json
+++ b/keyboards/latincompass/latinpad/info.json
diff --git a/keyboards/latinpad/keymaps/default/keymap.c b/keyboards/latincompass/latinpad/keymaps/default/keymap.c
index b6606e6be7..b6606e6be7 100644
--- a/keyboards/latinpad/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latinpad/keymaps/default/keymap.c
diff --git a/keyboards/latinpad/keymaps/via/keymap.c b/keyboards/latincompass/latinpad/keymaps/via/keymap.c
index 12d7e910e6..12d7e910e6 100644
--- a/keyboards/latinpad/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latinpad/keymaps/via/keymap.c
diff --git a/keyboards/latin6rgb/keymaps/via/rules.mk b/keyboards/latincompass/latinpad/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latin6rgb/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latinpad/keymaps/via/rules.mk
diff --git a/keyboards/latinpad/latinpad.c b/keyboards/latincompass/latinpad/latinpad.c
index 85f8eba7d5..85f8eba7d5 100644
--- a/keyboards/latinpad/latinpad.c
+++ b/keyboards/latincompass/latinpad/latinpad.c
diff --git a/keyboards/latinpad/latinpad.h b/keyboards/latincompass/latinpad/latinpad.h
index a2c275aec3..a2c275aec3 100644
--- a/keyboards/latinpad/latinpad.h
+++ b/keyboards/latincompass/latinpad/latinpad.h
diff --git a/keyboards/latinpad/lib/glcdfont.c b/keyboards/latincompass/latinpad/lib/glcdfont.c
index 03ddddc5c2..03ddddc5c2 100644
--- a/keyboards/latinpad/lib/glcdfont.c
+++ b/keyboards/latincompass/latinpad/lib/glcdfont.c
diff --git a/keyboards/latincompass/latinpad/readme.md b/keyboards/latincompass/latinpad/readme.md
new file mode 100644
index 0000000000..6fcd0f3a01
--- /dev/null
+++ b/keyboards/latincompass/latinpad/readme.md
@@ -0,0 +1,14 @@
+# Latinpad
+
+![Latinpad](https://github.com/latincompass/2-RotaryEncoder-pad/blob/master/1.jpg)
+
+macro 2 rotary encoder pad
+
+* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
+* Hardware Availability: https://github.com/latincompass/2-RotaryEncoder-pad
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latinpad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latinpad/rules.mk b/keyboards/latincompass/latinpad/rules.mk
index 1570b33db4..1570b33db4 100644
--- a/keyboards/latinpad/rules.mk
+++ b/keyboards/latincompass/latinpad/rules.mk
diff --git a/keyboards/latinpadble/config.h b/keyboards/latincompass/latinpadble/config.h
index da89046176..da89046176 100644
--- a/keyboards/latinpadble/config.h
+++ b/keyboards/latincompass/latinpadble/config.h
diff --git a/keyboards/latinpadble/info.json b/keyboards/latincompass/latinpadble/info.json
index b640d3e46e..b640d3e46e 100644
--- a/keyboards/latinpadble/info.json
+++ b/keyboards/latincompass/latinpadble/info.json
diff --git a/keyboards/latinpadble/keymaps/default/keymap.c b/keyboards/latincompass/latinpadble/keymaps/default/keymap.c
index 3fed6c0cb4..3fed6c0cb4 100644
--- a/keyboards/latinpadble/keymaps/default/keymap.c
+++ b/keyboards/latincompass/latinpadble/keymaps/default/keymap.c
diff --git a/keyboards/latinpadble/keymaps/via/keymap.c b/keyboards/latincompass/latinpadble/keymaps/via/keymap.c
index 2c4cc5f409..2c4cc5f409 100644
--- a/keyboards/latinpadble/keymaps/via/keymap.c
+++ b/keyboards/latincompass/latinpadble/keymaps/via/keymap.c
diff --git a/keyboards/latinpad/keymaps/via/rules.mk b/keyboards/latincompass/latinpadble/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latinpad/keymaps/via/rules.mk
+++ b/keyboards/latincompass/latinpadble/keymaps/via/rules.mk
diff --git a/keyboards/latinpadble/latinpadble.c b/keyboards/latincompass/latinpadble/latinpadble.c
index c40c3ff734..c40c3ff734 100644
--- a/keyboards/latinpadble/latinpadble.c
+++ b/keyboards/latincompass/latinpadble/latinpadble.c
diff --git a/keyboards/latinpadble/latinpadble.h b/keyboards/latincompass/latinpadble/latinpadble.h
index 2e3d1be5f7..2e3d1be5f7 100644
--- a/keyboards/latinpadble/latinpadble.h
+++ b/keyboards/latincompass/latinpadble/latinpadble.h
diff --git a/keyboards/latinpadble/lib/glcdfont.c b/keyboards/latincompass/latinpadble/lib/glcdfont.c
index 32891cbf8a..32891cbf8a 100644
--- a/keyboards/latinpadble/lib/glcdfont.c
+++ b/keyboards/latincompass/latinpadble/lib/glcdfont.c
diff --git a/keyboards/latincompass/latinpadble/readme.md b/keyboards/latincompass/latinpadble/readme.md
new file mode 100644
index 0000000000..2e1e6dbb8c
--- /dev/null
+++ b/keyboards/latincompass/latinpadble/readme.md
@@ -0,0 +1,14 @@
+# Latinpadble
+
+![Latinpadble](https://github.com/haierwangwei2005/latinpadble/blob/main/Latinpadble%20(1).JPG)
+
+Panasonic rotary encoder BLE pad
+
+* Keyboard Maintainer: [haierwangwei2005](https://github.com/haierwangwei2005)
+* Hardware Availability: https://github.com/haierwangwei2005/latinpadble/blob/main/Latinpadble%20(1).JPG
+
+Make example for this keyboard (after setting up your build environment):
+
+ make latincompass/latinpadble:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latincompass/latinpadble/rules.mk b/keyboards/latincompass/latinpadble/rules.mk
new file mode 100644
index 0000000000..06816c2ef8
--- /dev/null
+++ b/keyboards/latincompass/latinpadble/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # 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 = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+BLUETOOTH_ENABLE = yes
+BLUETOOTH_DRIVER = BluefruitLE
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+ENCODER_ENABLE = yes
diff --git a/keyboards/latinpad/readme.md b/keyboards/latinpad/readme.md
deleted file mode 100644
index 620bf64301..0000000000
--- a/keyboards/latinpad/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latinpad
-
-![Latinpad](https://github.com/latincompass/2-RotaryEncoder-pad/blob/master/1.jpg)
-
-macro 2 rotary encoder pad
-
-* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
-* Hardware Availability: https://github.com/latincompass/2-RotaryEncoder-pad
-
-Make example for this keyboard (after setting up your build environment):
-
- make latinpad:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latinpadble/readme.md b/keyboards/latinpadble/readme.md
deleted file mode 100644
index 324a28febf..0000000000
--- a/keyboards/latinpadble/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Latinpadble
-
-![Latinpadble](https://github.com/haierwangwei2005/latinpadble/blob/main/Latinpadble%20(1).JPG)
-
-Panasonic rotary encoder BLE pad
-
-* Keyboard Maintainer: [haierwangwei2005](https://github.com/haierwangwei2005)
-* Hardware Availability: https://github.com/haierwangwei2005/latinpadble/blob/main/Latinpadble%20(1).JPG
-
-Make example for this keyboard (after setting up your build environment):
-
- make latinpadble:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/latinpadble/rules.mk b/keyboards/latinpadble/rules.mk
deleted file mode 100644
index aac9dde15f..0000000000
--- a/keyboards/latinpadble/rules.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency
-F_CPU = 8000000
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # 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 = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
-OLED_ENABLE = yes
-OLED_DRIVER = SSD1306
-ENCODER_ENABLE = yes
diff --git a/keyboards/launchpad/launchpad.h b/keyboards/launchpad/launchpad.h
deleted file mode 100644
index 59cf64afec..0000000000
--- a/keyboards/launchpad/launchpad.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#if defined(KEYBOARD_launchpad_rev1)
-# include "rev1.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/launchpad/readme.md b/keyboards/launchpad/readme.md
deleted file mode 100644
index 8128121946..0000000000
--- a/keyboards/launchpad/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Launch Pad
-===
-
-![Launch Pad](https://i.imgur.com/WVTe0Ku.png)
-
--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-A budget-minded, 4-8 key macro-pad with built in legs, plate & case.
-
-Supports MX & Alps switches. 2x 1u or 1x 2u supported for each row.
-
-Supports 2u PCB-Mount stabilizers.
-
-Runs off of 1x Pro Micro & 8x diodes (1n4148).
-
-Optional "Reset" switch can be used on the PCB.
-
-A fantastic project for beginners to learn to solder, veteran's of the hobby who want to add an easy macro-pad to their collection, and everyone in between.
-
--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-Make example for this keyboard (after setting up your build environment):
-
- make launchpad/rev1:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-Due to PCB tolerance issues outside of our control, the snap-apart legs included on the PCB may need extra padding to prevent a small amount of wobbling once placed properly. We have included small, clear, and semi-permanent "glue dots" in each order (PCB Only -and- Full Kit) to help with this. You may also use plastic wrap, tape, Elmer's glue, hot glue, rubber cement, etc. We advise against using anything more "permanent" in case you wish to make changes to your Launch Pad in the future. It is also best to attach legs after all of your soldering and building is finished, to get the most accurate feel for your Launch Pad.
-
--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \ No newline at end of file
diff --git a/keyboards/launchpad/rules.mk b/keyboards/launchpad/rules.mk
deleted file mode 100644
index 3bfec56432..0000000000
--- a/keyboards/launchpad/rules.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-DEFAULT_FOLDER = launchpad/rev1
diff --git a/keyboards/lck75/readme.md b/keyboards/lck75/readme.md
deleted file mode 100644
index 2ded56ebd2..0000000000
--- a/keyboards/lck75/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# lck75
-
-A 75% keyboard that can be assembled with only through hole components, including usb type-c
-
-* Keyboard Maintainer: [Lyso1](https://github.com/lyso1)
-* Hardware Supported: LCK75, atmega32
-* Hardware Availability: [GitHub](https://github.com/lyso1)
-
-Make example for this keyboard (after setting up your build environment):
-
- make lck75:default
-
-Flashing example for this keyboard:
-
- make lck75:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/le_chiffre/readme.md b/keyboards/le_chiffre/readme.md
deleted file mode 100644
index ead6d88b3e..0000000000
--- a/keyboards/le_chiffre/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Le Chiffre
-
-![Le Chiffre](https://i.imgur.com/X1WsUmdl.png)
-
-Le Chiffre (ironically, "the number" in French is a 30% keyboard designed by tominabox1. The purpose of the board is to provide a platform for MX and Choc ergo in one package for when ones wrists need a break. The board supports an RGB LED strip with DI on port F0. The board is also fitted with support for run-of-the-mill .91" OLED and EC11 rotary encoder.
-
-* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
-* Hardware Supported: Le Chiffre (source not available at this time)
-* Hardware Availability: Bring your own case.
-
-Make example for this keyboard (after setting up your build environment):
-
- make le_chiffre:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lefishe/readme.md b/keyboards/lefishe/readme.md
deleted file mode 100644
index ae6ab1322e..0000000000
--- a/keyboards/lefishe/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# lefishe
-
-firmware for the 65xt keyboard designed around the symmetrical blocker 65% layout.
-This pcb cab also be used as a replacement pcb for the revoKmini/kmacmini with some modification to the design
-
-* Keyboard Maintainer: [Lyso1](https://github.com/lyso1)
-* Hardware Supported: LeFishe, atmega32u4
-* Hardware Availability: [/u/TheLysol_27](https://www.reddit.com/user/TheLysol_27)
-
-Make example for this keyboard (after setting up your build environment):
-
- make lefishe:default
-
-Enter into the bootloader to flash new firmware in 3 ways:
-
- * **Bootmagic reset**: Hold down the key at (0,0) in the matrix(The F1 key in this case) and plug the the keyboard in.
- * **Physical reset button**: Briefly press the button on the back and left side of the PCB(exactly under where the "2" key would be located) while the PCB is plugged in.
- * **Keycode in layout**: Press the key mapped to `RESET` (RALT + E in this case) while the keyboard is plugged in.
-
-Flashing example for this keyboard:
-
- make lefishe:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lets_split_eh/config.h b/keyboards/lets_split_eh/config.h
deleted file mode 100644
index 7527c6b3d2..0000000000
--- a/keyboards/lets_split_eh/config.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xE401
-#define DEVICE_VER 0x0E41
-#define MANUFACTURER That-Canadian
-#define PRODUCT Lets Split Eh?
-
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 6
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
diff --git a/keyboards/lets_split_eh/lets_split_eh.h b/keyboards/lets_split_eh/lets_split_eh.h
deleted file mode 100644
index aa1f213b20..0000000000
--- a/keyboards/lets_split_eh/lets_split_eh.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_lets_split_eh_eh
- #include "eh.h"
-#endif
diff --git a/keyboards/lets_split_eh/readme.md b/keyboards/lets_split_eh/readme.md
deleted file mode 100644
index 180cb33d73..0000000000
--- a/keyboards/lets_split_eh/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Let's Split Eh?
-
-![Let's Split Eh?](https://i.imgur.com/VMQG4qw.jpg?1)
-
-This is a split 40% ortho board. It is the exact same footprint and the Let's Split keyboard by wootpatoot. This board has USB-C / RGB Underglow / and is all on-board. Meant as a drop-in replacement for the V2 Let's Split.
-
-Keyboard Maintainer: [Christopher Poole (That-Canadian)](https://github.com/That-Canadian)
-
-Make example for this keyboard (after setting up your build environment):
-
- make lets_split_eh/eh:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/lets_split_eh/rules.mk b/keyboards/lets_split_eh/rules.mk
deleted file mode 100644
index 9662dfc60e..0000000000
--- a/keyboards/lets_split_eh/rules.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-SPLIT_KEYBOARD = yes
-
-LAYOUTS = ortho_4x12
-
-DEFAULT_FOLDER = lets_split_eh/eh
diff --git a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
index cced607b0c..8d8b4b751b 100644
--- a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
@@ -1,54 +1,50 @@
#include QMK_KEYBOARD_H
-//Define a shorter 'transparent' key code to make the keymaps more compact
-#define KC_TR KC_TRNS
-
enum keymap_layout {
BASE = 0,
FUNC,
};
-// #define uint16_t int
-// #define uint8_t int
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[BASE] = LAYOUT_ansi(
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| Del|
- * |------------------------------------------------------------|----|
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
- * |------------------------------------------------------------|----|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| Del|
+ * |------------------------------------------------------------|----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |------------------------------------------------------------|----|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [BASE] = LAYOUT_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
-[FUNC] = LAYOUT_ansi(
- /*Keymap VANILLA: Function Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| \| Del|
- * |------------------------------------------------------------|----|
- * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '|Return |PgUp|
- * |------------------------------------------------------------|----|
- * |ClickTgl|Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- KC_GRV,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
- MU_MOD, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_TOG,
- AU_TOG, F(1),F(3), KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RESET, RGB_MOD,
- F(5), F(2),F(4), KC_TR, KC_TR, KC_TR, KC_TR, MU_TOG, RGB_VAD, RGB_VAI, KC_TR, KC_TR, RGB_HUI, KC_TR,
- KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
+ /* Keymap VANILLA: Function Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| \| Del|
+ * |------------------------------------------------------------|----|
+ * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |------------------------------------------------------------|----|
+ * |ClickTgl|Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [FUNC] = LAYOUT_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
+ MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG,
+ AU_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, MU_TOG, RGB_VAD, RGB_VAI, _______, _______, RGB_HUI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c
index 9e79a73555..bd35bfbf22 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c
@@ -15,108 +15,104 @@ enum {
bool spam_space = false;
-
- // {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
- // {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
- // {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
- // {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
- // {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
-
+// {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
+// {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
+// {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
+// {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
+// {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
- // Layer Mask Red Green Blue
- {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
- {0x00000002, 0xFFFFFFFE, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
- {0x00000004, 0xFFFFFFFC, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
- {0x00000008, 0xFFFFFFE8, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
- {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
+ {0x00000002, 0xFFFFFFFE, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
+ {0x00000004, 0xFFFFFFFC, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
+ {0x00000008, 0xFFFFFFE8, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
+ {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap BASE: (Base Layer) Default Layer
- * ,---------. ,------------------------------------------------------------. ,---------.
- * |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
- * |---------| |------------------------------------------------------------| |---------|
- * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn|
- * |---------| |------------------------------------------------------------| `---------'
- * | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |---------| |------------------------------------------------------------| ,----.
- * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up |
- * |---------| |-------------------------------------------------------------------------.
- * | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig |
- * `---------' `------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT_split_rshift(
- KC_VOLD, KC_VOLU, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, LALT(KC_F5), KC_PGUP, \
- KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, \
- KC_F5, KC_F6, TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
- 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(CS_GO), KC_UP, \
- KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-
- [CS_GO] = LAYOUT_split_rshift(
- _______, _______, KC_GESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, F(0), _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
- ),
-
- /* Keymap FUNCTION: Function Layer
- * ,---------. ,-------------------------------------------------------------. ,---------.
- * | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
- * |---------| |-------------------------------------------------------------| |---------|
- * | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End |
- * |---------| |-------------------------------------------------------------| `---------'
- * | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |---------| |-------------------------------------------------------------| ,----.
- * | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |---------| |--------------------------------------------------------------------------.
- * | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `---------' `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT_split_rshift(
- _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, TO(CS_GO), KC_HOME, \
- _______, _______, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, \
- _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, _______, _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), XXXXXXX, _______, \
- _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \
- ),
-
- /* Keymap SETTINGS: Settings Layer
- * ,---------. ,-----------------------------------------------------------. ,-------------.
- * | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |---------| |-----------------------------------------------------------| |-------------|
- * | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-|
- * |---------| |-----------------------------------------------------------| `-------------'
- * | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST |
- * |---------| |-----------------------------------------------------------| ,----.
- * | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |---------| |------------------------------------------------------------------------.
- * | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
- * `---------' `------------------------------------------------------' `--------------'
- */
- [SETTINGS] = LAYOUT_split_rshift(
- XXXXXXX, XXXXXXX, F(0), F(3), F(4), F(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, \
- XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, \
- XXXXXXX, XXXXXXX, F(0), F(6), F(8), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \
- XXXXXXX, XXXXXXX, F(10), F(7), F(9), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(0), XXXXXXX, RGB_HUI, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, F(0), RGB_SAD, RGB_HUD, RGB_SAI \
- ),
+ /* Keymap BASE: (Base Layer) Default Layer
+ * ,---------. ,------------------------------------------------------------. ,---------.
+ * |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
+ * |---------| |------------------------------------------------------------| |---------|
+ * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn|
+ * |---------| |------------------------------------------------------------| `---------'
+ * | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |---------| |------------------------------------------------------------| ,----.
+ * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up |
+ * |---------| |-------------------------------------------------------------------------.
+ * | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig |
+ * `---------' `------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT_split_rshift(
+ KC_VOLD, KC_VOLU, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, LALT(KC_F5), KC_PGUP,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_F5, KC_F6, TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ 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(CS_GO), KC_UP,
+ KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [CS_GO] = LAYOUT_split_rshift(
+ _______, _______, KC_GESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, F(0), _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Keymap FUNCTION: Function Layer
+ * ,---------. ,-------------------------------------------------------------. ,---------.
+ * | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
+ * |---------| |-------------------------------------------------------------| |---------|
+ * | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End |
+ * |---------| |-------------------------------------------------------------| `---------'
+ * | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |---------| |-------------------------------------------------------------| ,----.
+ * | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |---------| |--------------------------------------------------------------------------.
+ * | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `---------' `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT_split_rshift(
+ _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, TO(CS_GO), KC_HOME,
+ _______, _______, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END,
+ _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), XXXXXXX, _______,
+ _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Keymap SETTINGS: Settings Layer
+ * ,---------. ,-----------------------------------------------------------. ,-------------.
+ * | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |---------| |-----------------------------------------------------------| |-------------|
+ * | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-|
+ * |---------| |-----------------------------------------------------------| `-------------'
+ * | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST |
+ * |---------| |-----------------------------------------------------------| ,----.
+ * | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |---------| |------------------------------------------------------------------------.
+ * | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
+ * `---------' `------------------------------------------------------' `--------------'
+ */
+ [SETTINGS] = LAYOUT_split_rshift(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
+ XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
-
void tap_space_spam_finished(qk_tap_dance_state_t *state, void *user_data) {
- if(get_mods() & (MOD_BIT(KC_LGUI))){
+ if (get_mods() & (MOD_BIT(KC_LGUI))) {
return;
}
- if(state->pressed){
+ if (state->pressed) {
spam_space = true;
}
- register_code(KC_SPC);
- unregister_code(KC_SPC);
+ tap_code(KC_SPC);
}
void tap_space_spam_reset(qk_tap_dance_state_t *state, void *user_data) {
@@ -125,11 +121,10 @@ void tap_space_spam_reset(qk_tap_dance_state_t *state, void *user_data) {
}
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
- if(state->pressed){
+ if (state->pressed) {
layer_on(FUNC);
- }else{
- register_code(KC_ESC);
- unregister_code(KC_ESC);
+ } else {
+ tap_code(KC_ESC);
}
}
@@ -138,40 +133,21 @@ void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
}
qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
- [TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset),
+ [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
+ [TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset),
};
-
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
- ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN4 - set base layer to 1 and save
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN5 - set base layer to 2 and save
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
- ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
- ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
- };
-
void matrix_scan_user(void) {
- if(spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))){
- register_code(KC_SPC);
- unregister_code(KC_SPC);
+ if (spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))) {
+ tap_code(KC_SPC);
}
}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if((layer_state & (1 << CS_GO)) && (keycode == 44)){
- if(get_mods() & (MOD_BIT(KC_LGUI))){
- return false;
+ if ((layer_state & (1 << CS_GO)) && (keycode == 44)) {
+ if (get_mods() & (MOD_BIT(KC_LGUI))) {
+ return false;
+ }
}
- }
- return true;
+ return true;
}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
index a92a506c12..8faa099453 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
@@ -73,23 +73,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------' `--------------------------------------------------------' `--------------'
*/
[SETTINGS] = LAYOUT(
- XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD,
- XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
)
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
-};
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if (eeconfig_read_default_layer() > 1) {
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
index 3dbc775579..ec054b33e7 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
@@ -73,23 +73,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------' `--------------------------------------------------------' `--------------'
*/
[SETTINGS] = LAYOUT_iso(
- XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD,
- XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
)
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
-};
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if (eeconfig_read_default_layer() > 1) {
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
index da7593d39c..0a9c2aa4f9 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
@@ -73,23 +73,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------' `--------------------------------------------------------' `--------------'
*/
[SETTINGS] = LAYOUT_split_bs(
- XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI,
XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_MOD, RGB_VAD,
- XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
)
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
-};
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if (eeconfig_read_default_layer() > 1) {
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.c b/keyboards/lfkeyboards/lfk78/lfk78.c
index 5b283f979d..2f8f1b34ef 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.c
+++ b/keyboards/lfkeyboards/lfk78/lfk78.c
@@ -134,73 +134,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
return process_record_user(keycode, record);
}
-void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) {
-#ifdef AUDIO_ENABLE
- int8_t sign = 1;
-#endif
-
- if (id == LFK_ESC_TILDE) {
- // Send ~ on shift-esc
- void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
-
- if (layer_state == 0) {
- method(shifted ? KC_GRAVE : KC_ESCAPE);
- } else {
- method(shifted ? KC_ESCAPE : KC_GRAVE);
- }
-
- send_keyboard_report();
- } else if (event->event.pressed) {
- switch (id) {
- case LFK_SET_DEFAULT_LAYER:
- // set/save the current base layer to eeprom, falls through to LFK_CLEAR
- eeconfig_update_default_layer(1UL << opt);
- default_layer_set(1UL << opt);
- case LFK_CLEAR:
- // Go back to default layer
- layer_clear();
- break;
-#ifdef ISSI_ENABLE
- case LFK_LED_TEST:
- led_test();
- break;
-#endif
-#ifdef AUDIO_ENABLE
- case LFK_CLICK_FREQ_LOWER:
- sign = -1; // continue to next statement
- case LFK_CLICK_FREQ_HIGHER:
- click_hz += sign * 100;
- click(click_hz, click_time);
- break;
- case LFK_CLICK_TOGGLE:
- if (click_toggle) {
- click_toggle = 0;
- click(4000, 100);
- click(1000, 100);
- } else {
- click_toggle = 1;
- click(1000, 100);
- click(4000, 100);
- }
- break;
- case LFK_CLICK_TIME_SHORTER:
- sign = -1; // continue to next statement
- case LFK_CLICK_TIME_LONGER:
- click_time += sign;
- click(click_hz, click_time);
- break;
-#endif
- case LFK_DEBUG_SETTINGS:
- dprintf("Click:\n");
- dprintf(" toggle: %d\n", click_toggle);
- dprintf(" freq(hz): %d\n", click_hz);
- dprintf(" duration(ms): %d\n", click_time);
- break;
- }
- }
-}
-
void reset_keyboard_kb() {
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.h b/keyboards/lfkeyboards/lfk78/lfk78.h
index 711baddece..ffa4894bbc 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.h
+++ b/keyboards/lfkeyboards/lfk78/lfk78.h
@@ -25,19 +25,6 @@ typedef struct Layer_Info {
extern const uint32_t layer_count;
extern const Layer_Info layer_info[];
-enum action_functions {
- LFK_CLEAR = 0, // Resets all layers
- LFK_ESC_TILDE, // esc+lshift = ~
- LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
- LFK_CLICK_TOGGLE, // Adjusts click duration
- LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
- LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
- LFK_CLICK_TIME_LONGER, // Adjusts click duration
- LFK_CLICK_TIME_SHORTER, // Adjusts click duration
- LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
- LFK_LED_TEST // cycles through switch and RGB LEDs
-};
-
#define CLICK_HZ 500
#define CLICK_MS 2
#define CLICK_ENABLED 0
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c
index c6799ea532..b62ea93440 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c
@@ -13,156 +13,153 @@ enum {
TD_ESC_FUNC = 0,
};
-
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
- // Layer Mask Red Green Blue
- {0x00000000, 0xFFFFFFF8, {0x00, 0xFF, 0x00}}, // base layers (VANILLA, DEFAULT_WKL, DEFAULT_OSX) - green
- {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
- {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
- {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
- {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFF8, {0x00, 0xFF, 0x00}}, // base layers (VANILLA, DEFAULT_WKL, DEFAULT_OSX) - green
+ {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
+ {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
+ {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
+ {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT_tkl_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-
- /* Keymap DEFAULT_TKL: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [DEFAULT_WKL] = LAYOUT_tkl_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-
- /* Keymap DEFAULT_OSX: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [DEFAULT_OSX] = LAYOUT_tkl_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SLCK, KC_PAUS, LALT(KC_F5), \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-
- [CS_GO] = LAYOUT_tkl_ansi(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, F(0), _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
- ),
-
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | |
- * |-------------------------------------------------------------| `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT_tkl_ansi(
- KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, TO(CS_GO), _______, _______, \
- XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, \
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, \
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______ \
- ),
-
- /* Keymap SETTINGS: Settings Layer
- * ,-----------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |-----------------------------------------------------------| |-------------|
- * |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
- * |-----------------------------------------------------------| `-------------'
- * |AU_TOG |Hz+|MS+| | | | | | | | | | RST |
- * |-----------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |------------------------------------------------------------------------.
- * | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
- * `------------------------------------------------------' `--------------'
- */
- [SETTINGS] = LAYOUT_tkl_ansi(
- F(13), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX, \
- F(0), F(3), F(4), F(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, \
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(2), RGB_MOD, RGB_VAD, XXXXXXX, \
- AU_TOG, F(6), F(8), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \
- F(10), F(7), F(9), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, F(0), RGB_HUI, \
- XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI \
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap DEFAULT_TKL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [DEFAULT_WKL] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap DEFAULT_OSX: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [DEFAULT_OSX] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SLCK, KC_PAUS, LALT(KC_F5),
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [CS_GO] = LAYOUT_tkl_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | |
+ * |-------------------------------------------------------------| `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT_tkl_ansi(
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, TO(CS_GO), _______, _______,
+ XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Keymap SETTINGS: Settings Layer
+ * ,-----------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |-----------------------------------------------------------| |-------------|
+ * |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
+ * |-----------------------------------------------------------| `-------------'
+ * |AU_TOG |Hz+|MS+| | | | | | | | | | RST |
+ * |-----------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |------------------------------------------------------------------------.
+ * | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
+ * `------------------------------------------------------' `--------------'
+ */
+ [SETTINGS] = LAYOUT_tkl_ansi(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX,
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
- if(state->pressed){
+ if (state->pressed) {
layer_on(FUNC);
- }else{
- register_code(KC_ESC);
- unregister_code(KC_ESC);
+ } else {
+ tap_code(KC_ESC);
}
}
@@ -171,32 +168,14 @@ void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
}
qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
+ [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
};
-
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
- ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_WKL), // FN4 - set base layer to 1 and save
- ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_OSX), // FN5 - set base layer to 2 and save
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
- ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
- ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
- ACTION_FUNCTION(LFK_PLAY_ONEUP),
- };
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if((layer_state & (1 << CS_GO)) && (keycode == 44)){
- if(get_mods() & (MOD_BIT(KC_LGUI))){
- return false;
+ if ((layer_state & (1 << CS_GO)) && (keycode == 44)) {
+ if (get_mods() & (MOD_BIT(KC_LGUI))) {
+ return false;
+ }
}
- }
- return true;
+ return true;
}
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
index 3ee5399cd3..789a6f9737 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
@@ -16,93 +16,83 @@ const Layer_Info layer_info[] = {
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT_tkl_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | |
- * |-------------------------------------------------------------| `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT_tkl_ansi(
- KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
- XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
- _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap SETTINGS: Settings Layer
- * ,------------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |------------------------------------------------------------| |--------------|
- * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl | |RGB Tog |Val+|
- * |------------------------------------------------------------| |-------------|
- * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
- * |------------------------------------------------------------| `-------------'
- * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
- * |------------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |------------------------------------------------------------------------------.
- * | | | | | | | | | |Sat-|Hue-|Sat+|
- * `------------------------------------------------------------------------------'
- */
- [SETTINGS] = LAYOUT_tkl_ansi(
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(2), RGB_MOD, RGB_VAD, XXXXXXX,
- AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
- XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI
- ),
-};
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | |
+ * |-------------------------------------------------------------| `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT_tkl_ansi(
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
+ XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
+ ),
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
+ /* Keymap SETTINGS: Settings Layer
+ * ,------------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |------------------------------------------------------------| |--------------|
+ * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl | |RGB Tog |Val+|
+ * |------------------------------------------------------------| |-------------|
+ * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
+ * |------------------------------------------------------------| `-------------'
+ * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
+ * |------------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |------------------------------------------------------------------------------.
+ * | | | | | | | | | |Sat-|Hue-|Sat+|
+ * `------------------------------------------------------------------------------'
+ */
+ [SETTINGS] = LAYOUT_tkl_ansi(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX,
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
- if(eeconfig_read_default_layer() > 1){
+ if (eeconfig_read_default_layer() > 1) {
eeconfig_update_default_layer(1);
default_layer_set(1);
}
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/gbchk/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/gbchk/keymap.c
index 4dfb098538..c946856dbe 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/gbchk/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/gbchk/keymap.c
@@ -16,93 +16,83 @@ const Layer_Info layer_info[] = {
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT_tkl_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_D), KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_D), KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | |
- * |-------------------------------------------------------------| `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT_tkl_ansi(
- KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
- XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
- _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
- ),
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | |
+ * |-------------------------------------------------------------| `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT_tkl_ansi(
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
+ XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
+ ),
- /* Keymap SETTINGS: Settings Layer
- * ,-----------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |-----------------------------------------------------------| |-------------|
- * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
- * |-----------------------------------------------------------| `-------------'
- * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
- * |-----------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |--------------------------------------------------------------------------.
- * | | | | | | | | | |Sat-|Hue-|Sat+|
- * `----------------------------------------------------------------------------'
- */
- [SETTINGS] = LAYOUT_tkl_ansi(
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(2), RGB_MOD, RGB_VAD, XXXXXXX,
- AU_TOG, KC_F1, F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
- XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI
- ),
+ /* Keymap SETTINGS: Settings Layer
+ * ,-----------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |-----------------------------------------------------------| |-------------|
+ * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
+ * |-----------------------------------------------------------| `-------------'
+ * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
+ * |-----------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |--------------------------------------------------------------------------.
+ * | | | | | | | | | |Sat-|Hue-|Sat+|
+ * `----------------------------------------------------------------------------'
+ */
+ [SETTINGS] = LAYOUT_tkl_ansi(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX,
+ AU_TOG, KC_F1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
- };
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
- if(eeconfig_read_default_layer() > 1){
+ if (eeconfig_read_default_layer() > 1) {
eeconfig_update_default_layer(1);
default_layer_set(1);
}
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
index 428277c33f..b36de66c6a 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
@@ -9,100 +9,90 @@ enum keymap_layout {
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
- // Layer Mask Red Green Blue
- {0x00000000, 0xFFFFFFFF, {0x00, 0x00, 0x00}}, // base layer - off
- {0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0x7F}}, // function layer - blue
- {0x00000004, 0xFFFFFFFC, {0x7F, 0x00, 0x00}}, // settings layer - red
- {0xFFFFFFFF, 0xFFFFFFFF, {0x0F, 0x0F, 0x0F}}, // unknown layer - REQUIRED - white
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFFF, {0x00, 0x00, 0x00}}, // base layer - off
+ {0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0x7F}}, // function layer - blue
+ {0x00000004, 0xFFFFFFFC, {0x7F, 0x00, 0x00}}, // settings layer - red
+ {0xFFFFFFFF, 0xFFFFFFFF, {0x0F, 0x0F, 0x0F}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del| End|PgDn|
- * |--------------------------------------------------------. | `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |
- * |-----------------------------------------------------------| ,----.
- * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI | Func|CTRL| |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT_tkl_iso(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_LSCR, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
- KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del| End|PgDn|
+ * |--------------------------------------------------------. | `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |
+ * |-----------------------------------------------------------| ,----.
+ * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI | Func|CTRL| |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT_tkl_iso(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_LSCR, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * | |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | | |
- * |---------------------------------------------------------. | `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift| | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |ALT |GUI | Func|CTRL| |Lft| Dn |Rig |
- * `-------------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT_tkl_iso(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
- XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
- _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, XXXXXXX, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
- ),
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * | |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | | |
+ * |---------------------------------------------------------. | `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift| | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |ALT |GUI | Func|CTRL| |Lft| Dn |Rig |
+ * `-------------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT_tkl_iso(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______,
+ XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______
+ ),
- /* Keymap SETTINGS: Settings Layer
- * ,-----------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * |FN3 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |-----------------------------------------------------------| |-------------|
- * |Debug| | | | | | | | | | | | | RST | |RGB Mode|Val-|
- * |--------------------------------------------------------. | `-------------'
- * |LayrClr|Hz+|MS+| | | | | | | | | | | |
- * |-----------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |------------------------------------------------------------------------.
- * | | | | | | | | |Sat-|Hue-|Sat+|
- * `------------------------------------------------------' `--------------'
- */
- [SETTINGS] = LAYOUT_tkl_iso(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
- F(0), F(3), F(4), F(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX,
- AU_TOG, F(3), F(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
- F(7), XXXXXXX, F(4), F(6), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, F(0), RGB_HUI,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(0), RGB_SAD, RGB_HUD, RGB_SAI
- ),
+ /* Keymap SETTINGS: Settings Layer
+ * ,-----------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * |FN3 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |-----------------------------------------------------------| |-------------|
+ * |Debug| | | | | | | | | | | | | RST | |RGB Mode|Val-|
+ * |--------------------------------------------------------. | `-------------'
+ * |LayrClr|Hz+|MS+| | | | | | | | | | | |
+ * |-----------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |------------------------------------------------------------------------.
+ * | | | | | | | | |Sat-|Hue-|Sat+|
+ * `------------------------------------------------------' `--------------'
+ */
+ [SETTINGS] = LAYOUT_tkl_iso(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX,
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- [3] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN3 - Increase Freq of audio click
- [4] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN4 - Decrease Freq of audio click
- [5] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN5 - Increase length of audio click
- [6] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN6 - Decrease length of audio click
- [7] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN7 - Toggle audio click
- };
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
- if(eeconfig_read_default_layer() > 1){
+ if (eeconfig_read_default_layer() > 1) {
eeconfig_update_default_layer(1);
default_layer_set(1);
}
diff --git a/keyboards/lfkeyboards/lfk87/lfk87.c b/keyboards/lfkeyboards/lfk87/lfk87.c
index 10fc14a8aa..17eeeeffe8 100644
--- a/keyboards/lfkeyboards/lfk87/lfk87.c
+++ b/keyboards/lfkeyboards/lfk87/lfk87.c
@@ -116,61 +116,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
return process_record_user(keycode, record);
}
-void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
-{
-#ifdef AUDIO_ENABLE
- int8_t sign = 1;
-#endif
- if(id == LFK_ESC_TILDE){
- // Send ~ on shift-esc
- void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- method(shifted ? KC_GRAVE : KC_ESCAPE);
- send_keyboard_report();
- }else if(event->event.pressed){
- switch(id){
- case LFK_SET_DEFAULT_LAYER:
- // set/save the current base layer to eeprom, falls through to LFK_CLEAR
- eeconfig_update_default_layer(1UL << opt);
- default_layer_set(1UL << opt);
- case LFK_CLEAR:
- // Go back to default layer
- layer_clear();
- break;
-#ifdef ISSI_ENABLE
- case LFK_LED_TEST:
- led_test();
- break;
-#endif
-#ifdef AUDIO_ENABLE
- case LFK_CLICK_FREQ_LOWER:
- sign = -1; // continue to next statement
- case LFK_CLICK_FREQ_HIGHER:
- click_hz += sign * 100;
- click(click_hz, click_time);
- break;
- case LFK_CLICK_TOGGLE:
- if(click_toggle){
- click_toggle = 0;
- click(4000, 100);
- click(1000, 100);
- }else{
- click_toggle = 1;
- click(1000, 100);
- click(4000, 100);
- }
- break;
- case LFK_CLICK_TIME_SHORTER:
- sign = -1; // continue to next statement
- case LFK_CLICK_TIME_LONGER:
- click_time += sign;
- click(click_hz, click_time);
- break;
-#endif
- }
- }
-}
-
void reset_keyboard_kb(){
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
diff --git a/keyboards/lfkeyboards/lfk87/lfk87.h b/keyboards/lfkeyboards/lfk87/lfk87.h
index 1b1368659b..5bd353a89e 100644
--- a/keyboards/lfkeyboards/lfk87/lfk87.h
+++ b/keyboards/lfkeyboards/lfk87/lfk87.h
@@ -19,20 +19,6 @@ typedef struct Layer_Info {
extern const uint32_t layer_count;
extern const Layer_Info layer_info[];
-enum action_functions {
- LFK_CLEAR = 0, // Resets all layers
- LFK_ESC_TILDE, // esc+lshift = ~
- LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
- LFK_CLICK_TOGGLE, // Adjusts click duration
- LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
- LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
- LFK_CLICK_TIME_LONGER, // Adjusts click duration
- LFK_CLICK_TIME_SHORTER, // Adjusts click duration
- LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
- LFK_LED_TEST, // cycles through switch and RGB LEDs
- LFK_PLAY_ONEUP
-};
-
#define CLICK_HZ 500
#define CLICK_MS 2
#define CLICK_ENABLED 0
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c
index 2a16bf4ccf..f5faf7215a 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c
+++ b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c
@@ -22,84 +22,82 @@ const Layer_Info layer_info[] = {
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, \
- TD(TD_ESC_FUNC), KC_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, LALT(KC_F5), \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ TD(TD_ESC_FUNC), KC_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, LALT(KC_F5),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | |
- * |-------------------------------------------------------------| `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______, \
- XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, \
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, \
- _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______, \
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______ \
- ),
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | |
+ * |-------------------------------------------------------------| `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______,
+ XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
+ _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
- /* Keymap SETTINGS: Settings Layer
- * ,-----------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |-----------------------------------------------------------| |-------------|
- * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
- * |-----------------------------------------------------------| `-------------'
- * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
- * |-----------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |--------------------------------------------------------------------------.
- * | | | | | | | | | |Sat-|Hue-|Sat+|
- * `----------------------------------------------------------------------------'
- */
- [SETTINGS] = LAYOUT(
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX, \
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(2), RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX, \
- AU_TOG, KC_F1, F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX \
- ),
+ /* Keymap SETTINGS: Settings Layer
+ * ,-----------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |-----------------------------------------------------------| |-------------|
+ * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
+ * |-----------------------------------------------------------| `-------------'
+ * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
+ * |-----------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |--------------------------------------------------------------------------.
+ * | | | | | | | | | |Sat-|Hue-|Sat+|
+ * `----------------------------------------------------------------------------'
+ */
+ [SETTINGS] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX,
+ AU_TOG, KC_F1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX
+ )
};
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
- if(state->pressed){
+ if (state->pressed) {
layer_on(FUNC);
- }else{
- register_code(KC_ESC);
- unregister_code(KC_ESC);
+ } else {
+ tap_code(KC_ESC);
}
}
@@ -108,21 +106,12 @@ void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
}
qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
+ [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
- };
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
- if(eeconfig_read_default_layer() > 1){
+ if (eeconfig_read_default_layer() > 1) {
eeconfig_update_default_layer(1);
default_layer_set(1);
}
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
index 1d29cb1c56..13cb6c22f5 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
@@ -1,8 +1,5 @@
#include QMK_KEYBOARD_H
-//Define a shorter 'transparent' key code to make the keymaps more compact
-#define KC_TR KC_TRNS
-
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
FUNC, // 0x08
@@ -19,90 +16,80 @@ const Layer_Info layer_info[] = {
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,-----------------------------------------------------------------------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
- * |-----------------------------------------------------------| |--------------|
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
- * |-----------------------------------------------------------| |--------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
- * |-----------------------------------------------------------| `--------------'
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------| ,----.
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
- * |-----------------------------------------------------------| ,-------------.
- * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
- * `-----------------------------------------------------------' `-------------'
- */
- [VANILLA] = LAYOUT(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PEQL,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
+ * |-----------------------------------------------------------| |--------------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
+ * |-----------------------------------------------------------| |--------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
+ * |-----------------------------------------------------------| `--------------'
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------| ,----.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
+ * |-----------------------------------------------------------| ,-------------.
+ * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
+ * `-----------------------------------------------------------' `-------------'
+ */
+ [VANILLA] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PEQL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
- /* Keymap FUNCTION: Function Layer
- * ,-------------------------------------------------------------. ,--------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
- * |-------------------------------------------------------------| |--------------|
- * |Tab | |PgU| | | | | | Up| | | | | | | | | |
- * |-------------------------------------------------------------| `--------------'
- * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
- * |-------------------------------------------------------------| ,----.
- * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
- * |-------------------------------------------------------------' ,-------------.
- * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
- * `------------------------------------------------------' `-------------'
- */
- [FUNC] = LAYOUT(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______,
- XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______,
- _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______
- ),
+ /* Keymap FUNCTION: Function Layer
+ * ,-------------------------------------------------------------. ,--------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
+ * |-------------------------------------------------------------| |--------------|
+ * |Tab | |PgU| | | | | | Up| | | | | | | | | |
+ * |-------------------------------------------------------------| `--------------'
+ * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
+ * |-------------------------------------------------------------| ,----.
+ * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
+ * |-------------------------------------------------------------' ,-------------.
+ * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
+ * `------------------------------------------------------' `-------------'
+ */
+ [FUNC] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______,
+ XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
- /* Keymap SETTINGS: Settings Layer
- * ,-----------------------------------------------------------. ,-------------.
- * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
- * |-------------------------------------------------------------| |--------------|
- * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
- * |-----------------------------------------------------------| |-------------|
- * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
- * |-----------------------------------------------------------| `-------------'
- * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
- * |-----------------------------------------------------------| ,----.
- * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
- * |--------------------------------------------------------------------------.
- * | | | | | | | | | |Sat-|Hue-|Sat+|
- * `----------------------------------------------------------------------------'
- */
- [SETTINGS] = LAYOUT(
- F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX,
- MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, F(2), RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX,
- AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, F(12), XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX
- ),
+ /* Keymap SETTINGS: Settings Layer
+ * ,-----------------------------------------------------------. ,-------------.
+ * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
+ * |-------------------------------------------------------------| |--------------|
+ * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
+ * |-----------------------------------------------------------| |-------------|
+ * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
+ * |-----------------------------------------------------------| `-------------'
+ * |AudTgl |Hz+|MS+| | | | | | | | | | RST |
+ * |-----------------------------------------------------------| ,----.
+ * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
+ * |--------------------------------------------------------------------------.
+ * | | | | | | | | | |Sat-|Hue-|Sat+|
+ * `----------------------------------------------------------------------------'
+ */
+ [SETTINGS] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX,
+ MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX,
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX
+ )
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
- };
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
- if(eeconfig_read_default_layer() > 1){
+ if (eeconfig_read_default_layer() > 1) {
eeconfig_update_default_layer(1);
default_layer_set(1);
}
diff --git a/keyboards/lfkeyboards/mini1800/mini1800.c b/keyboards/lfkeyboards/mini1800/mini1800.c
index 4c897ac693..8819d3465a 100644
--- a/keyboards/lfkeyboards/mini1800/mini1800.c
+++ b/keyboards/lfkeyboards/mini1800/mini1800.c
@@ -122,64 +122,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
return process_record_user(keycode, record);
}
-void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
-{
-#ifdef AUDIO_ENABLE
- int8_t sign = 1;
-#endif
- if(id == LFK_ESC_TILDE){
- // Send ~ on shift-esc
- void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- method(shifted ? KC_GRAVE : KC_ESCAPE);
- send_keyboard_report();
- }else if(event->event.pressed){
- switch(id){
- case LFK_SET_DEFAULT_LAYER:
- // set/save the current base layer to eeprom, falls through to LFK_CLEAR
- eeconfig_update_default_layer(1UL << opt);
- default_layer_set(1UL << opt);
- case LFK_CLEAR:
- // Go back to default layer
- layer_clear();
- break;
-#ifdef ISSI_ENABLE
- case LFK_LED_TEST:
- led_test();
- break;
-#endif
-#ifdef AUDIO_ENABLE
- case LFK_CLICK_FREQ_LOWER:
- sign = -1; // continue to next statement
- case LFK_CLICK_FREQ_HIGHER:
- click_hz += sign * 100;
- click(click_hz, click_time);
- break;
- case LFK_CLICK_TOGGLE:
- if(click_toggle){
- click_toggle = 0;
- click(4000, 100);
- click(1000, 100);
- }else{
- click_toggle = 1;
- click(1000, 100);
- click(4000, 100);
- }
- break;
- case LFK_CLICK_TIME_SHORTER:
- sign = -1; // continue to next statement
- case LFK_CLICK_TIME_LONGER:
- click_time += sign;
- click(click_hz, click_time);
- break;
-#endif
- case LFK_PLAY_ONEUP:
- PLAY_SONG(my_song);
- break;
- }
- }
-}
-
void reset_keyboard_kb(){
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
diff --git a/keyboards/lfkeyboards/mini1800/mini1800.h b/keyboards/lfkeyboards/mini1800/mini1800.h
index 3e460c8a11..3586c75221 100644
--- a/keyboards/lfkeyboards/mini1800/mini1800.h
+++ b/keyboards/lfkeyboards/mini1800/mini1800.h
@@ -19,20 +19,6 @@ typedef struct Layer_Info {
extern const uint32_t layer_count;
extern const Layer_Info layer_info[];
-enum action_functions {
- LFK_CLEAR = 0, // Resets all layers
- LFK_ESC_TILDE, // esc+lshift = ~
- LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
- LFK_CLICK_TOGGLE, // Adjusts click duration
- LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
- LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
- LFK_CLICK_TIME_LONGER, // Adjusts click duration
- LFK_CLICK_TIME_SHORTER, // Adjusts click duration
- LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
- LFK_LED_TEST, // cycles through switch and RGB LEDs
- LFK_PLAY_ONEUP
-};
-
#define CLICK_HZ 500
#define CLICK_MS 2
#define CLICK_ENABLED 0
diff --git a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
index 1470f95022..0e6b2820d0 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
@@ -21,55 +21,45 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| Del|
- * |------------------------------------------------------------|----|
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
- * |------------------------------------------------------------|----|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- [_BASE] = LAYOUT_65_ansi(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| Del|
+ * |------------------------------------------------------------|----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |------------------------------------------------------------|----|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT_65_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap VANILLA: Function Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| \| Del|
- * |------------------------------------------------------------|----|
- * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '|Return |PgUp|
- * |------------------------------------------------------------|----|
- * |ClickTgl|Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- [_FN] = LAYOUT_65_ansi(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
- MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG,
- AU_TOG, F(1), F(3), _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
- F(5), F(2), F(4), _______, _______, _______, _______, MU_TOG, RGB_VAD, RGB_VAI, _______, _______, RGB_HUI, _______,
- _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_SAI
- )
+ /* Keymap VANILLA: Function Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| \| Del|
+ * |------------------------------------------------------------|----|
+ * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |------------------------------------------------------------|----|
+ * |ClickTgl|Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT_65_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
+ MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG,
+ AU_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, MU_TOG, RGB_VAD, RGB_VAI, _______, _______, RGB_HUI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
-
-#ifndef NO_ACTION_FUNCTION
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- [2] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- [3] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- [4] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- [5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
-};
-#endif
diff --git a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
index 3a1701ce86..881ff99c9d 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
@@ -21,55 +21,45 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap VANILLA: (Base Layer) Default Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret | Del|
- * |--------------------------------------------------------. |----|
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |PgUp|
- * |------------------------------------------------------------|----|
- * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- [_BASE] = LAYOUT_65_iso(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ /* Keymap VANILLA: (Base Layer) Default Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret | Del|
+ * |--------------------------------------------------------. |----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |PgUp|
+ * |------------------------------------------------------------|----|
+ * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT_65_iso(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap VANILLA: Function Layer
- * ,------------------------------------------------------------.----.
- * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
- * |------------------------------------------------------------|----|
- * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| RESET| Del|
- * |--------------------------------------------------------. |----|
- * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '| | |PgUp|
- * |------------------------------------------------------------|----|
- * |CTgl| |Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
- * |-----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
- * `-----------------------------------------------------------------'
- */
- [_FN] = LAYOUT_65_iso(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
- MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG,
- AU_TOG, F(1), F(3), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
- F(5), _______, F(2), F(4), _______, _______, _______, _______, MU_TOG, RGB_VAD, RGB_VAI, _______, _______, RGB_HUI, _______,
- _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_SAI
- ),
+ /* Keymap VANILLA: Function Layer
+ * ,------------------------------------------------------------.----.
+ * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
+ * |------------------------------------------------------------|----|
+ * |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| RESET| Del|
+ * |--------------------------------------------------------. |----|
+ * |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '| | |PgUp|
+ * |------------------------------------------------------------|----|
+ * |CTgl| |Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
+ * |-----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
+ * `-----------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT_65_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
+ MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG,
+ AU_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, MU_TOG, RGB_VAD, RGB_VAI, _______, _______, RGB_HUI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_SAI
+ )
};
-
-#ifndef NO_ACTION_FUNCTION
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- [2] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- [3] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- [4] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- [5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
-};
-#endif
diff --git a/keyboards/lfkeyboards/smk65/revb/revb.c b/keyboards/lfkeyboards/smk65/revb/revb.c
index 01c339f06b..9b34eff1c3 100644
--- a/keyboards/lfkeyboards/smk65/revb/revb.c
+++ b/keyboards/lfkeyboards/smk65/revb/revb.c
@@ -81,62 +81,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
return process_record_user(keycode, record);
}
-void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
-{
-#ifdef AUDIO_ENABLE
- int8_t sign = 1;
-#endif
- if(id == LFK_ESC_TILDE){
- // Send ~ on shift-esc
- void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- method(shifted ? KC_GRAVE : KC_ESCAPE);
- send_keyboard_report();
- }else if(event->event.pressed){
- switch(id){
- case LFK_SET_DEFAULT_LAYER:
- // set/save the current base layer to eeprom, falls through to LFK_CLEAR
- eeconfig_update_default_layer(1UL << opt);
- default_layer_set(1UL << opt);
- case LFK_CLEAR:
- // Go back to default layer
- layer_clear();
- break;
-#ifdef AUDIO_ENABLE
- case LFK_CLICK_FREQ_LOWER:
- sign = -1; // continue to next statement
- case LFK_CLICK_FREQ_HIGHER:
- click_hz += sign * 100;
- click(click_hz, click_time);
- break;
- case LFK_CLICK_TOGGLE:
- if(click_toggle){
- click_toggle = 0;
- click(4000, 100);
- click(1000, 100);
- }else{
- click_toggle = 1;
- click(1000, 100);
- click(4000, 100);
- }
- break;
- case LFK_CLICK_TIME_SHORTER:
- sign = -1; // continue to next statement
- case LFK_CLICK_TIME_LONGER:
- click_time += sign;
- click(click_hz, click_time);
- break;
-#endif
- case LFK_DEBUG_SETTINGS:
- dprintf("Click:\n");
- dprintf(" toggle: %d\n", click_toggle);
- dprintf(" freq(hz): %d\n", click_hz);
- dprintf(" duration(ms): %d\n", click_time);
- break;
- }
- }
-}
-
void reset_keyboard_kb(){
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
diff --git a/keyboards/lfkeyboards/smk65/revb/revb.h b/keyboards/lfkeyboards/smk65/revb/revb.h
index dbb25b869a..28fed40aa2 100644
--- a/keyboards/lfkeyboards/smk65/revb/revb.h
+++ b/keyboards/lfkeyboards/smk65/revb/revb.h
@@ -33,19 +33,6 @@ typedef struct Layer_Info {
extern const uint32_t layer_count;
extern const Layer_Info layer_info[];
-enum action_functions {
- LFK_CLEAR = 0, // Resets all layers
- LFK_ESC_TILDE, // esc+lshift = ~
- LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
- LFK_CLICK_TOGGLE, // Adjusts click duration
- LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
- LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
- LFK_CLICK_TIME_LONGER, // Adjusts click duration
- LFK_CLICK_TIME_SHORTER, // Adjusts click duration
- LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
- LFK_LED_TEST // cycles through switch and RGB LEDs
-};
-
#define CLICK_HZ 500
#define CLICK_MS 2
#define CLICK_ENABLED 0
diff --git a/keyboards/lily58/keymaps/druotoni/rules.mk b/keyboards/lily58/keymaps/druotoni/rules.mk
index c07761108e..b3182cb46a 100644
--- a/keyboards/lily58/keymaps/druotoni/rules.mk
+++ b/keyboards/lily58/keymaps/druotoni/rules.mk
@@ -9,7 +9,6 @@ BOOTLOADER = atmel-dfu
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# EXTRAFLAGS += -flto
LTO_ENABLE = yes
SPACE_CADET_ENABLE = no
GRAVE_ESC_ENABLE = no
diff --git a/keyboards/ls_60/readme.md b/keyboards/ls_60/readme.md
deleted file mode 100644
index e0efdfd9b5..0000000000
--- a/keyboards/ls_60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# LS_60
-
-![LS_60](https://i.imgur.com/Cuy5W1H.png)
-
-A 60% keyboard based on STM32f303
-
-* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
-* Hardware Supported: LS_60
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make ls_60:default
-
-The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lck75/config.h b/keyboards/lyso1/lck75/config.h
index 18dd381ece..18dd381ece 100644
--- a/keyboards/lck75/config.h
+++ b/keyboards/lyso1/lck75/config.h
diff --git a/keyboards/lck75/info.json b/keyboards/lyso1/lck75/info.json
index 4d04175e00..4d04175e00 100644
--- a/keyboards/lck75/info.json
+++ b/keyboards/lyso1/lck75/info.json
diff --git a/keyboards/lck75/keymaps/7u/keymap.c b/keyboards/lyso1/lck75/keymaps/7u/keymap.c
index 25cf66176e..25cf66176e 100644
--- a/keyboards/lck75/keymaps/7u/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/7u/keymap.c
diff --git a/keyboards/lck75/keymaps/7u_iso/keymap.c b/keyboards/lyso1/lck75/keymaps/7u_iso/keymap.c
index f42d638778..f42d638778 100644
--- a/keyboards/lck75/keymaps/7u_iso/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/7u_iso/keymap.c
diff --git a/keyboards/lck75/keymaps/7u_sbs/keymap.c b/keyboards/lyso1/lck75/keymaps/7u_sbs/keymap.c
index 3c562659dc..3c562659dc 100644
--- a/keyboards/lck75/keymaps/7u_sbs/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/7u_sbs/keymap.c
diff --git a/keyboards/lck75/keymaps/default/keymap.c b/keyboards/lyso1/lck75/keymaps/default/keymap.c
index 4af75f23e2..4af75f23e2 100644
--- a/keyboards/lck75/keymaps/default/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/default/keymap.c
diff --git a/keyboards/lck75/keymaps/iso/keymap.c b/keyboards/lyso1/lck75/keymaps/iso/keymap.c
index f0d6dbaf12..f0d6dbaf12 100644
--- a/keyboards/lck75/keymaps/iso/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/iso/keymap.c
diff --git a/keyboards/lck75/keymaps/iso_sbs/keymap.c b/keyboards/lyso1/lck75/keymaps/iso_sbs/keymap.c
index a2b2469d3e..a2b2469d3e 100644
--- a/keyboards/lck75/keymaps/iso_sbs/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/iso_sbs/keymap.c
diff --git a/keyboards/lck75/keymaps/sbs/keymap.c b/keyboards/lyso1/lck75/keymaps/sbs/keymap.c
index 7671765619..7671765619 100644
--- a/keyboards/lck75/keymaps/sbs/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/sbs/keymap.c
diff --git a/keyboards/lck75/keymaps/via/keymap.c b/keyboards/lyso1/lck75/keymaps/via/keymap.c
index 4ba5c50f44..4ba5c50f44 100644
--- a/keyboards/lck75/keymaps/via/keymap.c
+++ b/keyboards/lyso1/lck75/keymaps/via/keymap.c
diff --git a/keyboards/lck75/keymaps/via/rules.mk b/keyboards/lyso1/lck75/keymaps/via/rules.mk
index 541a15608a..541a15608a 100644
--- a/keyboards/lck75/keymaps/via/rules.mk
+++ b/keyboards/lyso1/lck75/keymaps/via/rules.mk
diff --git a/keyboards/lck75/lck75.c b/keyboards/lyso1/lck75/lck75.c
index 55650681ac..55650681ac 100644
--- a/keyboards/lck75/lck75.c
+++ b/keyboards/lyso1/lck75/lck75.c
diff --git a/keyboards/lck75/lck75.h b/keyboards/lyso1/lck75/lck75.h
index d7648eff2a..d7648eff2a 100644
--- a/keyboards/lck75/lck75.h
+++ b/keyboards/lyso1/lck75/lck75.h
diff --git a/keyboards/lyso1/lck75/readme.md b/keyboards/lyso1/lck75/readme.md
new file mode 100644
index 0000000000..bb3dd2626a
--- /dev/null
+++ b/keyboards/lyso1/lck75/readme.md
@@ -0,0 +1,17 @@
+# lck75
+
+A 75% keyboard that can be assembled with only through hole components, including usb type-c
+
+* Keyboard Maintainer: [Lyso1](https://github.com/lyso1)
+* Hardware Supported: LCK75, atmega32
+* Hardware Availability: [GitHub](https://github.com/lyso1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lyso1/lck75:default
+
+Flashing example for this keyboard:
+
+ make lyso1/lck75:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lck75/rules.mk b/keyboards/lyso1/lck75/rules.mk
index 1af1d4921b..1af1d4921b 100644
--- a/keyboards/lck75/rules.mk
+++ b/keyboards/lyso1/lck75/rules.mk
diff --git a/keyboards/lefishe/config.h b/keyboards/lyso1/lefishe/config.h
index a5bafa5413..a5bafa5413 100644
--- a/keyboards/lefishe/config.h
+++ b/keyboards/lyso1/lefishe/config.h
diff --git a/keyboards/lefishe/info.json b/keyboards/lyso1/lefishe/info.json
index e31877a95b..e31877a95b 100644
--- a/keyboards/lefishe/info.json
+++ b/keyboards/lyso1/lefishe/info.json
diff --git a/keyboards/lefishe/keymaps/default/keymap.c b/keyboards/lyso1/lefishe/keymaps/default/keymap.c
index 5ba35de7b0..5ba35de7b0 100644
--- a/keyboards/lefishe/keymaps/default/keymap.c
+++ b/keyboards/lyso1/lefishe/keymaps/default/keymap.c
diff --git a/keyboards/lefishe/keymaps/wk_sbs/keymap.c b/keyboards/lyso1/lefishe/keymaps/wk_sbs/keymap.c
index 36c7d73b86..36c7d73b86 100644
--- a/keyboards/lefishe/keymaps/wk_sbs/keymap.c
+++ b/keyboards/lyso1/lefishe/keymaps/wk_sbs/keymap.c
diff --git a/keyboards/lefishe/keymaps/wkl/keymap.c b/keyboards/lyso1/lefishe/keymaps/wkl/keymap.c
index f40e933d6d..f40e933d6d 100644
--- a/keyboards/lefishe/keymaps/wkl/keymap.c
+++ b/keyboards/lyso1/lefishe/keymaps/wkl/keymap.c
diff --git a/keyboards/lefishe/keymaps/wkl_sbs/keymap.c b/keyboards/lyso1/lefishe/keymaps/wkl_sbs/keymap.c
index 91a707db78..91a707db78 100644
--- a/keyboards/lefishe/keymaps/wkl_sbs/keymap.c
+++ b/keyboards/lyso1/lefishe/keymaps/wkl_sbs/keymap.c
diff --git a/keyboards/lefishe/lefishe.c b/keyboards/lyso1/lefishe/lefishe.c
index c557a59c2d..c557a59c2d 100644
--- a/keyboards/lefishe/lefishe.c
+++ b/keyboards/lyso1/lefishe/lefishe.c
diff --git a/keyboards/lefishe/lefishe.h b/keyboards/lyso1/lefishe/lefishe.h
index 98197b21c4..98197b21c4 100644
--- a/keyboards/lefishe/lefishe.h
+++ b/keyboards/lyso1/lefishe/lefishe.h
diff --git a/keyboards/lyso1/lefishe/readme.md b/keyboards/lyso1/lefishe/readme.md
new file mode 100644
index 0000000000..eb8322b2df
--- /dev/null
+++ b/keyboards/lyso1/lefishe/readme.md
@@ -0,0 +1,24 @@
+# lefishe
+
+firmware for the 65xt keyboard designed around the symmetrical blocker 65% layout.
+This pcb cab also be used as a replacement pcb for the revoKmini/kmacmini with some modification to the design
+
+* Keyboard Maintainer: [Lyso1](https://github.com/lyso1)
+* Hardware Supported: LeFishe, atmega32u4
+* Hardware Availability: [/u/TheLysol_27](https://www.reddit.com/user/TheLysol_27)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lyso1/lefishe:default
+
+Enter into the bootloader to flash new firmware in 3 ways:
+
+ * **Bootmagic reset**: Hold down the key at (0,0) in the matrix(The F1 key in this case) and plug the the keyboard in.
+ * **Physical reset button**: Briefly press the button on the back and left side of the PCB(exactly under where the "2" key would be located) while the PCB is plugged in.
+ * **Keycode in layout**: Press the key mapped to `RESET` (RALT + E in this case) while the keyboard is plugged in.
+
+Flashing example for this keyboard:
+
+ make lyso1/lefishe:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lefishe/rules.mk b/keyboards/lyso1/lefishe/rules.mk
index 5d063b8756..5d063b8756 100644
--- a/keyboards/lefishe/rules.mk
+++ b/keyboards/lyso1/lefishe/rules.mk
diff --git a/keyboards/m3n3van/readme.md b/keyboards/m3n3van/readme.md
deleted file mode 100644
index 66f9d08042..0000000000
--- a/keyboards/m3n3van/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# m3n3van
-
-![](https://raw.githubusercontent.com/matthewdias/m3n3van/f642037703cfac5deba284ef7671c0564fdd8d4d/rev2/bottom.svg)
-
-A minivan case compatible PCB with 2x3u split space.
-
-- Keyboard Maintainer: matthewdias
-- Hardware Supported: m3n3van rev2 PCB
-- Hardware Availability: [GitHub](https://github.com/matthewdias/m3n3van/tree/main/rev2)
-
-To reset the keyboard into bootloader mode, press the reset switch on the underside.
-
-Make example for this keyboard (after setting up your build environment):
-
- make m3n3van:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make m3n3van:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/6ball/6ball.c b/keyboards/maple_computing/6ball/6ball.c
index 1eddde9ba5..1eddde9ba5 100644
--- a/keyboards/6ball/6ball.c
+++ b/keyboards/maple_computing/6ball/6ball.c
diff --git a/keyboards/6ball/6ball.h b/keyboards/maple_computing/6ball/6ball.h
index ef73a72053..ef73a72053 100644
--- a/keyboards/6ball/6ball.h
+++ b/keyboards/maple_computing/6ball/6ball.h
diff --git a/keyboards/6ball/config.h b/keyboards/maple_computing/6ball/config.h
index cc496d675a..cc496d675a 100644
--- a/keyboards/6ball/config.h
+++ b/keyboards/maple_computing/6ball/config.h
diff --git a/keyboards/6ball/info.json b/keyboards/maple_computing/6ball/info.json
index fc742ad517..fc742ad517 100644
--- a/keyboards/6ball/info.json
+++ b/keyboards/maple_computing/6ball/info.json
diff --git a/keyboards/6ball/keymaps/default/keymap.c b/keyboards/maple_computing/6ball/keymaps/default/keymap.c
index 5081161e38..5081161e38 100644
--- a/keyboards/6ball/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/6ball/keymaps/default/keymap.c
diff --git a/keyboards/maple_computing/6ball/readme.md b/keyboards/maple_computing/6ball/readme.md
new file mode 100644
index 0000000000..0b91c8aa28
--- /dev/null
+++ b/keyboards/maple_computing/6ball/readme.md
@@ -0,0 +1,14 @@
+6-Ball
+======
+
+A circular 6-key macropad made by ThatCanadian.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Pro Micro ATmega32U4
+Hardware Availability: ThatCanadian
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/6ball:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/6ball/rules.mk b/keyboards/maple_computing/6ball/rules.mk
index bb1a873d64..bb1a873d64 100644
--- a/keyboards/6ball/rules.mk
+++ b/keyboards/maple_computing/6ball/rules.mk
diff --git a/keyboards/c39/c39.c b/keyboards/maple_computing/c39/c39.c
index 78ecae5a32..78ecae5a32 100755
--- a/keyboards/c39/c39.c
+++ b/keyboards/maple_computing/c39/c39.c
diff --git a/keyboards/c39/c39.h b/keyboards/maple_computing/c39/c39.h
index 797dd1ef77..797dd1ef77 100755
--- a/keyboards/c39/c39.h
+++ b/keyboards/maple_computing/c39/c39.h
diff --git a/keyboards/c39/config.h b/keyboards/maple_computing/c39/config.h
index 409023f1fa..409023f1fa 100755
--- a/keyboards/c39/config.h
+++ b/keyboards/maple_computing/c39/config.h
diff --git a/keyboards/c39/info.json b/keyboards/maple_computing/c39/info.json
index 3600570dde..3600570dde 100755
--- a/keyboards/c39/info.json
+++ b/keyboards/maple_computing/c39/info.json
diff --git a/keyboards/c39/keymaps/default/keymap.c b/keyboards/maple_computing/c39/keymaps/default/keymap.c
index 9de75190d0..9de75190d0 100755
--- a/keyboards/c39/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/c39/keymaps/default/keymap.c
diff --git a/keyboards/c39/keymaps/default/readme.md b/keyboards/maple_computing/c39/keymaps/default/readme.md
index f5b1b6ac11..f5b1b6ac11 100755
--- a/keyboards/c39/keymaps/default/readme.md
+++ b/keyboards/maple_computing/c39/keymaps/default/readme.md
diff --git a/keyboards/c39/keymaps/drashna/config.h b/keyboards/maple_computing/c39/keymaps/drashna/config.h
index e48bc46ca8..e48bc46ca8 100644
--- a/keyboards/c39/keymaps/drashna/config.h
+++ b/keyboards/maple_computing/c39/keymaps/drashna/config.h
diff --git a/keyboards/c39/keymaps/drashna/keymap.c b/keyboards/maple_computing/c39/keymaps/drashna/keymap.c
index 6fd1f12984..6fd1f12984 100755
--- a/keyboards/c39/keymaps/drashna/keymap.c
+++ b/keyboards/maple_computing/c39/keymaps/drashna/keymap.c
diff --git a/keyboards/c39/keymaps/drashna/readme.md b/keyboards/maple_computing/c39/keymaps/drashna/readme.md
index a8efbaa5fe..a8efbaa5fe 100755
--- a/keyboards/c39/keymaps/drashna/readme.md
+++ b/keyboards/maple_computing/c39/keymaps/drashna/readme.md
diff --git a/keyboards/c39/keymaps/drashna/rules.mk b/keyboards/maple_computing/c39/keymaps/drashna/rules.mk
index a6575bbd93..a6575bbd93 100644
--- a/keyboards/c39/keymaps/drashna/rules.mk
+++ b/keyboards/maple_computing/c39/keymaps/drashna/rules.mk
diff --git a/keyboards/c39/keymaps/kuchosauronad0/config.h b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/config.h
index d67935a9fd..d67935a9fd 100644
--- a/keyboards/c39/keymaps/kuchosauronad0/config.h
+++ b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/config.h
diff --git a/keyboards/c39/keymaps/kuchosauronad0/keymap.c b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/keymap.c
index 231e3cf44d..231e3cf44d 100644
--- a/keyboards/c39/keymaps/kuchosauronad0/keymap.c
+++ b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/keymap.c
diff --git a/keyboards/c39/keymaps/kuchosauronad0/readme.md b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/readme.md
index ff01fb5ffa..ff01fb5ffa 100644
--- a/keyboards/c39/keymaps/kuchosauronad0/readme.md
+++ b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/readme.md
diff --git a/keyboards/c39/keymaps/kuchosauronad0/rules.mk b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/rules.mk
index a6304cdf4a..a6304cdf4a 100644
--- a/keyboards/c39/keymaps/kuchosauronad0/rules.mk
+++ b/keyboards/maple_computing/c39/keymaps/kuchosauronad0/rules.mk
diff --git a/keyboards/maple_computing/c39/readme.md b/keyboards/maple_computing/c39/readme.md
new file mode 100755
index 0000000000..c74294e300
--- /dev/null
+++ b/keyboards/maple_computing/c39/readme.md
@@ -0,0 +1,16 @@
+# C39
+=======
+
+![C39](https://i.imgur.com/KuWIIuW.png)
+
+A compact 39 key keyboard.
+
+Keyboard Maintainer: [Maple Computing]()
+Hardware Supported: C39 PCB
+Hardware Availability: [SpaceCat.design](https://spacecat.design)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/c39:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/c39/rules.mk b/keyboards/maple_computing/c39/rules.mk
index 4b65b7b9de..4b65b7b9de 100755
--- a/keyboards/c39/rules.mk
+++ b/keyboards/maple_computing/c39/rules.mk
diff --git a/keyboards/cu75/.noci b/keyboards/maple_computing/christmas_tree/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/cu75/.noci
+++ b/keyboards/maple_computing/christmas_tree/.noci
diff --git a/keyboards/christmas_tree/V2017/V2017.c b/keyboards/maple_computing/christmas_tree/V2017/V2017.c
index e367270592..e367270592 100644
--- a/keyboards/christmas_tree/V2017/V2017.c
+++ b/keyboards/maple_computing/christmas_tree/V2017/V2017.c
diff --git a/keyboards/christmas_tree/V2017/V2017.h b/keyboards/maple_computing/christmas_tree/V2017/V2017.h
index f779c0ed47..f779c0ed47 100644
--- a/keyboards/christmas_tree/V2017/V2017.h
+++ b/keyboards/maple_computing/christmas_tree/V2017/V2017.h
diff --git a/keyboards/christmas_tree/V2017/config.h b/keyboards/maple_computing/christmas_tree/V2017/config.h
index abc94749a8..abc94749a8 100644
--- a/keyboards/christmas_tree/V2017/config.h
+++ b/keyboards/maple_computing/christmas_tree/V2017/config.h
diff --git a/keyboards/christmas_tree/V2017/rules.mk b/keyboards/maple_computing/christmas_tree/V2017/rules.mk
index 184a1f2247..184a1f2247 100644
--- a/keyboards/christmas_tree/V2017/rules.mk
+++ b/keyboards/maple_computing/christmas_tree/V2017/rules.mk
diff --git a/keyboards/christmas_tree/christmas_tree.c b/keyboards/maple_computing/christmas_tree/christmas_tree.c
index c03670a3a5..c03670a3a5 100644
--- a/keyboards/christmas_tree/christmas_tree.c
+++ b/keyboards/maple_computing/christmas_tree/christmas_tree.c
diff --git a/keyboards/christmas_tree/christmas_tree.h b/keyboards/maple_computing/christmas_tree/christmas_tree.h
index 68eefca6a8..68eefca6a8 100644
--- a/keyboards/christmas_tree/christmas_tree.h
+++ b/keyboards/maple_computing/christmas_tree/christmas_tree.h
diff --git a/keyboards/christmas_tree/config.h b/keyboards/maple_computing/christmas_tree/config.h
index 531c5996d2..531c5996d2 100644
--- a/keyboards/christmas_tree/config.h
+++ b/keyboards/maple_computing/christmas_tree/config.h
diff --git a/keyboards/christmas_tree/info.json b/keyboards/maple_computing/christmas_tree/info.json
index 5d24218c70..5d24218c70 100644
--- a/keyboards/christmas_tree/info.json
+++ b/keyboards/maple_computing/christmas_tree/info.json
diff --git a/keyboards/christmas_tree/keymaps/default/keymap.c b/keyboards/maple_computing/christmas_tree/keymaps/default/keymap.c
index 6931b91a61..6931b91a61 100644
--- a/keyboards/christmas_tree/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/christmas_tree/keymaps/default/keymap.c
diff --git a/keyboards/christmas_tree/keymaps/default/readme.md b/keyboards/maple_computing/christmas_tree/keymaps/default/readme.md
index a9cb4586ef..a9cb4586ef 100644
--- a/keyboards/christmas_tree/keymaps/default/readme.md
+++ b/keyboards/maple_computing/christmas_tree/keymaps/default/readme.md
diff --git a/keyboards/maple_computing/christmas_tree/readme.md b/keyboards/maple_computing/christmas_tree/readme.md
new file mode 100644
index 0000000000..3ba255a18c
--- /dev/null
+++ b/keyboards/maple_computing/christmas_tree/readme.md
@@ -0,0 +1,14 @@
+Christmas Tree
+===
+
+![Christmas Tree](https://i.imgur.com/I9FNdSv.png)
+
+A tiny 6 key macro pad, in the shape of a christmas tree, made by That-Canadian, SpaceCat, and ChillCaps.
+
+Keyboard Maintainer: [That-Canadian](https://github.com/That-Canadian)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/christmas_tree/V2017:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/maple_computing/christmas_tree/rules.mk b/keyboards/maple_computing/christmas_tree/rules.mk
new file mode 100644
index 0000000000..45ac883163
--- /dev/null
+++ b/keyboards/maple_computing/christmas_tree/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+DEFAULT_FOLDER = maple_computing/christmas_tree/V2017
diff --git a/keyboards/ergo42/.noci b/keyboards/maple_computing/ivy/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ergo42/.noci
+++ b/keyboards/maple_computing/ivy/.noci
diff --git a/keyboards/ivy/config.h b/keyboards/maple_computing/ivy/config.h
index 2ccf3b8f6f..2ccf3b8f6f 100644
--- a/keyboards/ivy/config.h
+++ b/keyboards/maple_computing/ivy/config.h
diff --git a/keyboards/ivy/ivy.c b/keyboards/maple_computing/ivy/ivy.c
index 007ef67253..007ef67253 100644
--- a/keyboards/ivy/ivy.c
+++ b/keyboards/maple_computing/ivy/ivy.c
diff --git a/keyboards/maple_computing/ivy/ivy.h b/keyboards/maple_computing/ivy/ivy.h
new file mode 100644
index 0000000000..645c5e0ef7
--- /dev/null
+++ b/keyboards/maple_computing/ivy/ivy.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef KEYBOARD_maple_computing_ivy_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/ivy/keymaps/default/keymap.c b/keyboards/maple_computing/ivy/keymaps/default/keymap.c
index f02580f19c..f02580f19c 100644
--- a/keyboards/ivy/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/ivy/keymaps/default/keymap.c
diff --git a/keyboards/maple_computing/ivy/readme.md b/keyboards/maple_computing/ivy/readme.md
new file mode 100644
index 0000000000..a3bc043b77
--- /dev/null
+++ b/keyboards/maple_computing/ivy/readme.md
@@ -0,0 +1,15 @@
+IVY
+===
+
+![Ivy](https://i.imgur.com/fnVQet6.jpg)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/ivy/rev1:default
+
+Install examples:
+
+ make maple_computing/ivy/rev1:default:dfu
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ivy/rev1/config.h b/keyboards/maple_computing/ivy/rev1/config.h
index 9b88b89e5e..9b88b89e5e 100644
--- a/keyboards/ivy/rev1/config.h
+++ b/keyboards/maple_computing/ivy/rev1/config.h
diff --git a/keyboards/ivy/rev1/info.json b/keyboards/maple_computing/ivy/rev1/info.json
index c5045bd80f..c5045bd80f 100644
--- a/keyboards/ivy/rev1/info.json
+++ b/keyboards/maple_computing/ivy/rev1/info.json
diff --git a/keyboards/ivy/rev1/rev1.c b/keyboards/maple_computing/ivy/rev1/rev1.c
index 007ef67253..007ef67253 100644
--- a/keyboards/ivy/rev1/rev1.c
+++ b/keyboards/maple_computing/ivy/rev1/rev1.c
diff --git a/keyboards/ivy/rev1/rev1.h b/keyboards/maple_computing/ivy/rev1/rev1.h
index ac338368ed..ac338368ed 100644
--- a/keyboards/ivy/rev1/rev1.h
+++ b/keyboards/maple_computing/ivy/rev1/rev1.h
diff --git a/keyboards/lets_split_eh/keymaps/mikethetiger/rules.mk b/keyboards/maple_computing/ivy/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/lets_split_eh/keymaps/mikethetiger/rules.mk
+++ b/keyboards/maple_computing/ivy/rev1/rules.mk
diff --git a/keyboards/maple_computing/ivy/rules.mk b/keyboards/maple_computing/ivy/rules.mk
new file mode 100644
index 0000000000..c076565dfc
--- /dev/null
+++ b/keyboards/maple_computing/ivy/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+DEFAULT_FOLDER = maple_computing/ivy/rev1
diff --git a/keyboards/jnao/config.h b/keyboards/maple_computing/jnao/config.h
index 7598e049ae..7598e049ae 100644
--- a/keyboards/jnao/config.h
+++ b/keyboards/maple_computing/jnao/config.h
diff --git a/keyboards/jnao/info.json b/keyboards/maple_computing/jnao/info.json
index 4d8f332391..4d8f332391 100644
--- a/keyboards/jnao/info.json
+++ b/keyboards/maple_computing/jnao/info.json
diff --git a/keyboards/jnao/jnao.c b/keyboards/maple_computing/jnao/jnao.c
index 8a49c747a1..8a49c747a1 100644
--- a/keyboards/jnao/jnao.c
+++ b/keyboards/maple_computing/jnao/jnao.c
diff --git a/keyboards/jnao/jnao.h b/keyboards/maple_computing/jnao/jnao.h
index 357a025f91..357a025f91 100644
--- a/keyboards/jnao/jnao.h
+++ b/keyboards/maple_computing/jnao/jnao.h
diff --git a/keyboards/jnao/keymaps/default/keymap.c b/keyboards/maple_computing/jnao/keymaps/default/keymap.c
index 356f056bdb..356f056bdb 100644
--- a/keyboards/jnao/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/jnao/keymaps/default/keymap.c
diff --git a/keyboards/jnao/keymaps/default_4x12/keymap.c b/keyboards/maple_computing/jnao/keymaps/default_4x12/keymap.c
index 8861a36b23..8861a36b23 100644
--- a/keyboards/jnao/keymaps/default_4x12/keymap.c
+++ b/keyboards/maple_computing/jnao/keymaps/default_4x12/keymap.c
diff --git a/keyboards/jnao/keymaps/via/keymap.c b/keyboards/maple_computing/jnao/keymaps/via/keymap.c
index 00305db81d..00305db81d 100644
--- a/keyboards/jnao/keymaps/via/keymap.c
+++ b/keyboards/maple_computing/jnao/keymaps/via/keymap.c
diff --git a/keyboards/jisplit89/keymaps/via/rules.mk b/keyboards/maple_computing/jnao/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/jisplit89/keymaps/via/rules.mk
+++ b/keyboards/maple_computing/jnao/keymaps/via/rules.mk
diff --git a/keyboards/maple_computing/jnao/readme.md b/keyboards/maple_computing/jnao/readme.md
new file mode 100644
index 0000000000..dd7b280a08
--- /dev/null
+++ b/keyboards/maple_computing/jnao/readme.md
@@ -0,0 +1,14 @@
+JNAO
+====
+
+An no-frills 5x12 or 4x12 ortholinear keyboard
+
+Keyboard Maintainer: [That-Canadian](https://github.com/that-canadian)
+Hardware Supported: JNAO PCB
+Hardware Availability: [SpaceCat](https://spacecat.design) and [Keebio](https://keeb.io/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/jnao:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/jnao/rules.mk b/keyboards/maple_computing/jnao/rules.mk
index e50247dfb6..e50247dfb6 100644
--- a/keyboards/jnao/rules.mk
+++ b/keyboards/maple_computing/jnao/rules.mk
diff --git a/keyboards/ergodash/.noci b/keyboards/maple_computing/launchpad/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ergodash/.noci
+++ b/keyboards/maple_computing/launchpad/.noci
diff --git a/keyboards/launchpad/config.h b/keyboards/maple_computing/launchpad/config.h
index 327d67016b..327d67016b 100644
--- a/keyboards/launchpad/config.h
+++ b/keyboards/maple_computing/launchpad/config.h
diff --git a/keyboards/launchpad/keymaps/brandonschlack/config.h b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/config.h
index 6aaf996e57..6aaf996e57 100644
--- a/keyboards/launchpad/keymaps/brandonschlack/config.h
+++ b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/config.h
diff --git a/keyboards/launchpad/keymaps/brandonschlack/keymap.c b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/keymap.c
index 1ef77ccc6e..1ef77ccc6e 100644
--- a/keyboards/launchpad/keymaps/brandonschlack/keymap.c
+++ b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/keymap.c
diff --git a/keyboards/launchpad/keymaps/brandonschlack/readme.md b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/readme.md
index a91a1b80ac..a91a1b80ac 100644
--- a/keyboards/launchpad/keymaps/brandonschlack/readme.md
+++ b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/readme.md
diff --git a/keyboards/launchpad/keymaps/brandonschlack/rules.mk b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/rules.mk
index 31c8f7b39d..31c8f7b39d 100644
--- a/keyboards/launchpad/keymaps/brandonschlack/rules.mk
+++ b/keyboards/maple_computing/launchpad/keymaps/brandonschlack/rules.mk
diff --git a/keyboards/launchpad/keymaps/default/keymap.c b/keyboards/maple_computing/launchpad/keymaps/default/keymap.c
index 62dee131f8..62dee131f8 100644
--- a/keyboards/launchpad/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/launchpad/keymaps/default/keymap.c
diff --git a/keyboards/launchpad/keymaps/default_rgb/config.h b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h
index cae1450c15..cae1450c15 100644
--- a/keyboards/launchpad/keymaps/default_rgb/config.h
+++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h
diff --git a/keyboards/launchpad/keymaps/default_rgb/keymap.c b/keyboards/maple_computing/launchpad/keymaps/default_rgb/keymap.c
index 529fa91f65..529fa91f65 100644
--- a/keyboards/launchpad/keymaps/default_rgb/keymap.c
+++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/keymap.c
diff --git a/keyboards/launchpad/keymaps/default_rgb/readme.md b/keyboards/maple_computing/launchpad/keymaps/default_rgb/readme.md
index 3f15ff9bc3..3f15ff9bc3 100644
--- a/keyboards/launchpad/keymaps/default_rgb/readme.md
+++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/readme.md
diff --git a/keyboards/reviung39/keymaps/default/rules.mk b/keyboards/maple_computing/launchpad/keymaps/default_rgb/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/reviung39/keymaps/default/rules.mk
+++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/rules.mk
diff --git a/keyboards/launchpad/keymaps/drashna/config.h b/keyboards/maple_computing/launchpad/keymaps/drashna/config.h
index b14becc25b..b14becc25b 100644
--- a/keyboards/launchpad/keymaps/drashna/config.h
+++ b/keyboards/maple_computing/launchpad/keymaps/drashna/config.h
diff --git a/keyboards/launchpad/keymaps/drashna/keymap.c b/keyboards/maple_computing/launchpad/keymaps/drashna/keymap.c
index f8e4d1a414..f8e4d1a414 100644
--- a/keyboards/launchpad/keymaps/drashna/keymap.c
+++ b/keyboards/maple_computing/launchpad/keymaps/drashna/keymap.c
diff --git a/keyboards/launchpad/keymaps/drashna/rules.mk b/keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk
index c3b1e0a8b9..c3b1e0a8b9 100644
--- a/keyboards/launchpad/keymaps/drashna/rules.mk
+++ b/keyboards/maple_computing/launchpad/keymaps/drashna/rules.mk
diff --git a/keyboards/launchpad/keymaps/via/keymap.c b/keyboards/maple_computing/launchpad/keymaps/via/keymap.c
index ac25fa1e1e..ac25fa1e1e 100644
--- a/keyboards/launchpad/keymaps/via/keymap.c
+++ b/keyboards/maple_computing/launchpad/keymaps/via/keymap.c
diff --git a/keyboards/launchpad/keymaps/via/rules.mk b/keyboards/maple_computing/launchpad/keymaps/via/rules.mk
index 37484844f5..37484844f5 100644
--- a/keyboards/launchpad/keymaps/via/rules.mk
+++ b/keyboards/maple_computing/launchpad/keymaps/via/rules.mk
diff --git a/keyboards/launchpad/launchpad.c b/keyboards/maple_computing/launchpad/launchpad.c
index cc2812a76c..cc2812a76c 100644
--- a/keyboards/launchpad/launchpad.c
+++ b/keyboards/maple_computing/launchpad/launchpad.c
diff --git a/keyboards/maple_computing/launchpad/launchpad.h b/keyboards/maple_computing/launchpad/launchpad.h
new file mode 100644
index 0000000000..f2a1b40588
--- /dev/null
+++ b/keyboards/maple_computing/launchpad/launchpad.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#if defined(KEYBOARD_maple_computing_launchpad_rev1)
+# include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/maple_computing/launchpad/readme.md b/keyboards/maple_computing/launchpad/readme.md
new file mode 100644
index 0000000000..1dc7a9b4cf
--- /dev/null
+++ b/keyboards/maple_computing/launchpad/readme.md
@@ -0,0 +1,32 @@
+Launch Pad
+===
+
+![Launch Pad](https://i.imgur.com/WVTe0Ku.png)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+A budget-minded, 4-8 key macro-pad with built in legs, plate & case.
+
+Supports MX & Alps switches. 2x 1u or 1x 2u supported for each row.
+
+Supports 2u PCB-Mount stabilizers.
+
+Runs off of 1x Pro Micro & 8x diodes (1n4148).
+
+Optional "Reset" switch can be used on the PCB.
+
+A fantastic project for beginners to learn to solder, veteran's of the hobby who want to add an easy macro-pad to their collection, and everyone in between.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/launchpad/rev1:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Due to PCB tolerance issues outside of our control, the snap-apart legs included on the PCB may need extra padding to prevent a small amount of wobbling once placed properly. We have included small, clear, and semi-permanent "glue dots" in each order (PCB Only -and- Full Kit) to help with this. You may also use plastic wrap, tape, Elmer's glue, hot glue, rubber cement, etc. We advise against using anything more "permanent" in case you wish to make changes to your Launch Pad in the future. It is also best to attach legs after all of your soldering and building is finished, to get the most accurate feel for your Launch Pad.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
diff --git a/keyboards/launchpad/rev1/config.h b/keyboards/maple_computing/launchpad/rev1/config.h
index debc28fab3..debc28fab3 100644
--- a/keyboards/launchpad/rev1/config.h
+++ b/keyboards/maple_computing/launchpad/rev1/config.h
diff --git a/keyboards/launchpad/rev1/info.json b/keyboards/maple_computing/launchpad/rev1/info.json
index c8ba35c966..c8ba35c966 100644
--- a/keyboards/launchpad/rev1/info.json
+++ b/keyboards/maple_computing/launchpad/rev1/info.json
diff --git a/keyboards/launchpad/rev1/rev1.c b/keyboards/maple_computing/launchpad/rev1/rev1.c
index cc2812a76c..cc2812a76c 100644
--- a/keyboards/launchpad/rev1/rev1.c
+++ b/keyboards/maple_computing/launchpad/rev1/rev1.c
diff --git a/keyboards/launchpad/rev1/rev1.h b/keyboards/maple_computing/launchpad/rev1/rev1.h
index 2ea6e7e775..2ea6e7e775 100644
--- a/keyboards/launchpad/rev1/rev1.h
+++ b/keyboards/maple_computing/launchpad/rev1/rev1.h
diff --git a/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk b/keyboards/maple_computing/launchpad/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk
+++ b/keyboards/maple_computing/launchpad/rev1/rules.mk
diff --git a/keyboards/maple_computing/launchpad/rules.mk b/keyboards/maple_computing/launchpad/rules.mk
new file mode 100644
index 0000000000..67e76c6244
--- /dev/null
+++ b/keyboards/maple_computing/launchpad/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+DEFAULT_FOLDER = maple_computing/launchpad/rev1
diff --git a/keyboards/ergodash/mini/.noci b/keyboards/maple_computing/lets_split_eh/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ergodash/mini/.noci
+++ b/keyboards/maple_computing/lets_split_eh/.noci
diff --git a/keyboards/maple_computing/lets_split_eh/config.h b/keyboards/maple_computing/lets_split_eh/config.h
new file mode 100644
index 0000000000..787b9783b8
--- /dev/null
+++ b/keyboards/maple_computing/lets_split_eh/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xE401
+#define DEVICE_VER 0x0100
+#define MANUFACTURER That-Canadian
+#define PRODUCT Lets Split Eh?
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
diff --git a/keyboards/lets_split_eh/eh/config.h b/keyboards/maple_computing/lets_split_eh/eh/config.h
index 43e0266502..43e0266502 100644
--- a/keyboards/lets_split_eh/eh/config.h
+++ b/keyboards/maple_computing/lets_split_eh/eh/config.h
diff --git a/keyboards/lets_split_eh/eh/eh.c b/keyboards/maple_computing/lets_split_eh/eh/eh.c
index d5a312085d..d5a312085d 100644
--- a/keyboards/lets_split_eh/eh/eh.c
+++ b/keyboards/maple_computing/lets_split_eh/eh/eh.c
diff --git a/keyboards/lets_split_eh/eh/eh.h b/keyboards/maple_computing/lets_split_eh/eh/eh.h
index ff37229787..ff37229787 100644
--- a/keyboards/lets_split_eh/eh/eh.h
+++ b/keyboards/maple_computing/lets_split_eh/eh/eh.h
diff --git a/keyboards/lets_split_eh/eh/info.json b/keyboards/maple_computing/lets_split_eh/eh/info.json
index c241fa3813..c241fa3813 100644
--- a/keyboards/lets_split_eh/eh/info.json
+++ b/keyboards/maple_computing/lets_split_eh/eh/info.json
diff --git a/keyboards/lets_split_eh/eh/rules.mk b/keyboards/maple_computing/lets_split_eh/eh/rules.mk
index 0c7e1cb04e..0c7e1cb04e 100644
--- a/keyboards/lets_split_eh/eh/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/eh/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/bbaserdem/README.md b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/README.md
index fcb7037937..fcb7037937 100644
--- a/keyboards/lets_split_eh/keymaps/bbaserdem/README.md
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/README.md
diff --git a/keyboards/lets_split_eh/keymaps/bbaserdem/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/config.h
index 47be76567e..47be76567e 100755
--- a/keyboards/lets_split_eh/keymaps/bbaserdem/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/config.h
diff --git a/keyboards/lets_split_eh/keymaps/bbaserdem/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/keymap.c
index 92e72bbf1c..92e72bbf1c 100755
--- a/keyboards/lets_split_eh/keymaps/bbaserdem/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/keymap.c
diff --git a/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/rules.mk
index 7a37e989d8..7a37e989d8 100755
--- a/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/bbaserdem/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/default/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/default/keymap.c
index 3f41051cf6..3f41051cf6 100644
--- a/keyboards/lets_split_eh/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/default/keymap.c
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h
index 526c0837c7..526c0837c7 100644
--- a/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/config.h
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/keymap.c
index 06ddace84c..06ddace84c 100644
--- a/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/keymap.c
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/doxish_dvorak/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/mikethetiger/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h
index c535299e74..c535299e74 100644
--- a/keyboards/lets_split_eh/keymaps/mikethetiger/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/config.h
diff --git a/keyboards/lets_split_eh/keymaps/mikethetiger/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/keymap.c
index 9e67b7dda8..9e67b7dda8 100644
--- a/keyboards/lets_split_eh/keymaps/mikethetiger/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/keymap.c
diff --git a/keyboards/naked48/rev1/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked48/rev1/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/mikethetiger/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/msiu/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h
index 526c0837c7..526c0837c7 100644
--- a/keyboards/lets_split_eh/keymaps/msiu/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/msiu/config.h
diff --git a/keyboards/lets_split_eh/keymaps/msiu/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/msiu/keymap.c
index af5c98241a..af5c98241a 100644
--- a/keyboards/lets_split_eh/keymaps/msiu/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/msiu/keymap.c
diff --git a/keyboards/lets_split_eh/keymaps/resfury/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/config.h
index 0055bbf459..0055bbf459 100644
--- a/keyboards/lets_split_eh/keymaps/resfury/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/config.h
diff --git a/keyboards/lets_split_eh/keymaps/resfury/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/keymap.c
index 17f790675b..17f790675b 100644
--- a/keyboards/lets_split_eh/keymaps/resfury/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/keymap.c
diff --git a/keyboards/lets_split_eh/keymaps/resfury/readme.md b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/readme.md
index 6a882307b7..6a882307b7 100644
--- a/keyboards/lets_split_eh/keymaps/resfury/readme.md
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/readme.md
diff --git a/keyboards/lets_split_eh/keymaps/resfury/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/rules.mk
index 7ad666d1a3..7ad666d1a3 100644
--- a/keyboards/lets_split_eh/keymaps/resfury/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/resfury/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/romus/README.md b/keyboards/maple_computing/lets_split_eh/keymaps/romus/README.md
index d54ed6856f..d54ed6856f 100644
--- a/keyboards/lets_split_eh/keymaps/romus/README.md
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/romus/README.md
diff --git a/keyboards/lets_split_eh/keymaps/romus/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/romus/keymap.c
index ba5b75a5cf..ba5b75a5cf 100644
--- a/keyboards/lets_split_eh/keymaps/romus/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/romus/keymap.c
diff --git a/keyboards/lets_split_eh/keymaps/romus/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/romus/rules.mk
index ad7dd4c474..ad7dd4c474 100644
--- a/keyboards/lets_split_eh/keymaps/romus/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/romus/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/that_canadian/config.h b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/config.h
index a1df337bd9..a1df337bd9 100644
--- a/keyboards/lets_split_eh/keymaps/that_canadian/config.h
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/config.h
diff --git a/keyboards/lets_split_eh/keymaps/that_canadian/keymap.c b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/keymap.c
index bba9a02c8c..bba9a02c8c 100644
--- a/keyboards/lets_split_eh/keymaps/that_canadian/keymap.c
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/keymap.c
diff --git a/keyboards/naked60/rev1/rules.mk b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked60/rev1/rules.mk
+++ b/keyboards/maple_computing/lets_split_eh/keymaps/that_canadian/rules.mk
diff --git a/keyboards/lets_split_eh/lets_split_eh.c b/keyboards/maple_computing/lets_split_eh/lets_split_eh.c
index 37075aa67d..37075aa67d 100644
--- a/keyboards/lets_split_eh/lets_split_eh.c
+++ b/keyboards/maple_computing/lets_split_eh/lets_split_eh.c
diff --git a/keyboards/maple_computing/lets_split_eh/lets_split_eh.h b/keyboards/maple_computing/lets_split_eh/lets_split_eh.h
new file mode 100644
index 0000000000..aae072e0b6
--- /dev/null
+++ b/keyboards/maple_computing/lets_split_eh/lets_split_eh.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_maple_computing_lets_split_eh_eh
+ #include "eh.h"
+#endif
diff --git a/keyboards/maple_computing/lets_split_eh/readme.md b/keyboards/maple_computing/lets_split_eh/readme.md
new file mode 100644
index 0000000000..90ae5393d1
--- /dev/null
+++ b/keyboards/maple_computing/lets_split_eh/readme.md
@@ -0,0 +1,13 @@
+# Let's Split Eh?
+
+![Let's Split Eh?](https://i.imgur.com/VMQG4qw.jpg?1)
+
+This is a split 40% ortho board. It is the exact same footprint and the Let's Split keyboard by wootpatoot. This board has USB-C / RGB Underglow / and is all on-board. Meant as a drop-in replacement for the V2 Let's Split.
+
+Keyboard Maintainer: [Christopher Poole (That-Canadian)](https://github.com/That-Canadian)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/lets_split_eh/eh:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/maple_computing/lets_split_eh/rules.mk b/keyboards/maple_computing/lets_split_eh/rules.mk
new file mode 100644
index 0000000000..325d4e278c
--- /dev/null
+++ b/keyboards/maple_computing/lets_split_eh/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+SPLIT_KEYBOARD = yes
+
+LAYOUTS = ortho_4x12
+
+DEFAULT_FOLDER = maple_computing/lets_split_eh/eh
diff --git a/keyboards/ergodash/rev1/.noci b/keyboards/maple_computing/minidox/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ergodash/rev1/.noci
+++ b/keyboards/maple_computing/minidox/.noci
diff --git a/keyboards/minidox/config.h b/keyboards/maple_computing/minidox/config.h
index 2c71378961..2c71378961 100644
--- a/keyboards/minidox/config.h
+++ b/keyboards/maple_computing/minidox/config.h
diff --git a/keyboards/minidox/keymaps/alairock/config.h b/keyboards/maple_computing/minidox/keymaps/alairock/config.h
index 6b0069f4b2..6b0069f4b2 100644
--- a/keyboards/minidox/keymaps/alairock/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/alairock/config.h
diff --git a/keyboards/minidox/keymaps/alairock/keymap.c b/keyboards/maple_computing/minidox/keymaps/alairock/keymap.c
index c592b1a6a9..c592b1a6a9 100644
--- a/keyboards/minidox/keymaps/alairock/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/alairock/keymap.c
diff --git a/keyboards/minidox/keymaps/alairock/rules.mk b/keyboards/maple_computing/minidox/keymaps/alairock/rules.mk
index ebada165ae..ebada165ae 100644
--- a/keyboards/minidox/keymaps/alairock/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/alairock/rules.mk
diff --git a/keyboards/minidox/keymaps/bepo/config.h b/keyboards/maple_computing/minidox/keymaps/bepo/config.h
index 7338c24c68..7338c24c68 100644
--- a/keyboards/minidox/keymaps/bepo/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/bepo/config.h
diff --git a/keyboards/minidox/keymaps/bepo/keymap.c b/keyboards/maple_computing/minidox/keymaps/bepo/keymap.c
index 331a22314d..331a22314d 100644
--- a/keyboards/minidox/keymaps/bepo/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/bepo/keymap.c
diff --git a/keyboards/minidox/keymaps/bepo/readme.md b/keyboards/maple_computing/minidox/keymaps/bepo/readme.md
index f928c94471..f928c94471 100644
--- a/keyboards/minidox/keymaps/bepo/readme.md
+++ b/keyboards/maple_computing/minidox/keymaps/bepo/readme.md
diff --git a/keyboards/minidox/keymaps/default/keymap.c b/keyboards/maple_computing/minidox/keymaps/default/keymap.c
index 737b53d301..737b53d301 100644
--- a/keyboards/minidox/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/default/keymap.c
diff --git a/keyboards/minidox/keymaps/dustypomerleau/README.md b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/README.md
index b2ec771257..b2ec771257 100644
--- a/keyboards/minidox/keymaps/dustypomerleau/README.md
+++ b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/README.md
diff --git a/keyboards/minidox/keymaps/dustypomerleau/config.h b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/config.h
index b2169947b7..b2169947b7 100644
--- a/keyboards/minidox/keymaps/dustypomerleau/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/config.h
diff --git a/keyboards/minidox/keymaps/dustypomerleau/keymap.c b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/keymap.c
index e93a09f64a..e93a09f64a 100644
--- a/keyboards/minidox/keymaps/dustypomerleau/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/keymap.c
diff --git a/keyboards/minidox/keymaps/dustypomerleau/rules.mk b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/rules.mk
index 2a74d95536..2a74d95536 100644
--- a/keyboards/minidox/keymaps/dustypomerleau/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/dustypomerleau/rules.mk
diff --git a/keyboards/minidox/keymaps/haegin/keymap.c b/keyboards/maple_computing/minidox/keymaps/haegin/keymap.c
index d95243f10b..d95243f10b 100644
--- a/keyboards/minidox/keymaps/haegin/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/haegin/keymap.c
diff --git a/keyboards/minidox/keymaps/khitsule/config.h b/keyboards/maple_computing/minidox/keymaps/khitsule/config.h
index 645e80ee8f..645e80ee8f 100644
--- a/keyboards/minidox/keymaps/khitsule/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/khitsule/config.h
diff --git a/keyboards/minidox/keymaps/khitsule/keymap.c b/keyboards/maple_computing/minidox/keymaps/khitsule/keymap.c
index 1c6b6749f3..1c6b6749f3 100644
--- a/keyboards/minidox/keymaps/khitsule/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/khitsule/keymap.c
diff --git a/keyboards/minidox/keymaps/khitsule/readme.md b/keyboards/maple_computing/minidox/keymaps/khitsule/readme.md
index 92e2527942..92e2527942 100644
--- a/keyboards/minidox/keymaps/khitsule/readme.md
+++ b/keyboards/maple_computing/minidox/keymaps/khitsule/readme.md
diff --git a/keyboards/minidox/keymaps/norman/config.h b/keyboards/maple_computing/minidox/keymaps/norman/config.h
index 0d3542a03e..0d3542a03e 100644
--- a/keyboards/minidox/keymaps/norman/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/norman/config.h
diff --git a/keyboards/minidox/keymaps/norman/keymap.c b/keyboards/maple_computing/minidox/keymaps/norman/keymap.c
index 2786b7dd93..2786b7dd93 100644
--- a/keyboards/minidox/keymaps/norman/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/norman/keymap.c
diff --git a/keyboards/minidox/keymaps/norman/readme.md b/keyboards/maple_computing/minidox/keymaps/norman/readme.md
index 018e436322..018e436322 100644
--- a/keyboards/minidox/keymaps/norman/readme.md
+++ b/keyboards/maple_computing/minidox/keymaps/norman/readme.md
diff --git a/keyboards/minidox/keymaps/rsthd_combos/config.h b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h
index 1106412b59..1106412b59 100644
--- a/keyboards/minidox/keymaps/rsthd_combos/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h
diff --git a/keyboards/minidox/keymaps/rsthd_combos/keymap.c b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c
index d80febecaf..d80febecaf 100644
--- a/keyboards/minidox/keymaps/rsthd_combos/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c
diff --git a/keyboards/minidox/keymaps/rsthd_combos/readme.md b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/readme.md
index 877d7059e7..877d7059e7 100644
--- a/keyboards/minidox/keymaps/rsthd_combos/readme.md
+++ b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/readme.md
diff --git a/keyboards/qaz/keymaps/default_big_space/rules.mk b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/qaz/keymaps/default_big_space/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/rsthd_combos/rules.mk
diff --git a/keyboards/minidox/keymaps/that_canadian/config.h b/keyboards/maple_computing/minidox/keymaps/that_canadian/config.h
index b85609127e..b85609127e 100644
--- a/keyboards/minidox/keymaps/that_canadian/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/that_canadian/config.h
diff --git a/keyboards/minidox/keymaps/that_canadian/keymap.c b/keyboards/maple_computing/minidox/keymaps/that_canadian/keymap.c
index 78ddca30e8..78ddca30e8 100644
--- a/keyboards/minidox/keymaps/that_canadian/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/that_canadian/keymap.c
diff --git a/keyboards/minidox/keymaps/that_canadian/rules.mk b/keyboards/maple_computing/minidox/keymaps/that_canadian/rules.mk
index f1ef68387f..f1ef68387f 100644
--- a/keyboards/minidox/keymaps/that_canadian/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/that_canadian/rules.mk
diff --git a/keyboards/minidox/keymaps/tomb0y/README.md b/keyboards/maple_computing/minidox/keymaps/tomb0y/README.md
index c00cca1c5b..c00cca1c5b 100644
--- a/keyboards/minidox/keymaps/tomb0y/README.md
+++ b/keyboards/maple_computing/minidox/keymaps/tomb0y/README.md
diff --git a/keyboards/minidox/keymaps/tomb0y/keymap.c b/keyboards/maple_computing/minidox/keymaps/tomb0y/keymap.c
index cb7cd4d0a5..cb7cd4d0a5 100644
--- a/keyboards/minidox/keymaps/tomb0y/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/tomb0y/keymap.c
diff --git a/keyboards/minidox/keymaps/tw1t611/keymap.c b/keyboards/maple_computing/minidox/keymaps/tw1t611/keymap.c
index f479b10f67..f479b10f67 100644
--- a/keyboards/minidox/keymaps/tw1t611/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/tw1t611/keymap.c
diff --git a/keyboards/minidox/keymaps/tw1t611/readme.md b/keyboards/maple_computing/minidox/keymaps/tw1t611/readme.md
index 7ab4526fbc..7ab4526fbc 100644
--- a/keyboards/minidox/keymaps/tw1t611/readme.md
+++ b/keyboards/maple_computing/minidox/keymaps/tw1t611/readme.md
diff --git a/keyboards/minidox/keymaps/tw1t611/rules.mk b/keyboards/maple_computing/minidox/keymaps/tw1t611/rules.mk
index fcfd2225bc..fcfd2225bc 100644
--- a/keyboards/minidox/keymaps/tw1t611/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/tw1t611/rules.mk
diff --git a/keyboards/minidox/keymaps/xyverz/config.h b/keyboards/maple_computing/minidox/keymaps/xyverz/config.h
index ae26f94999..ae26f94999 100644
--- a/keyboards/minidox/keymaps/xyverz/config.h
+++ b/keyboards/maple_computing/minidox/keymaps/xyverz/config.h
diff --git a/keyboards/minidox/keymaps/xyverz/keymap.c b/keyboards/maple_computing/minidox/keymaps/xyverz/keymap.c
index 4c7a05227f..4c7a05227f 100644
--- a/keyboards/minidox/keymaps/xyverz/keymap.c
+++ b/keyboards/maple_computing/minidox/keymaps/xyverz/keymap.c
diff --git a/keyboards/minidox/keymaps/xyverz/rules.mk b/keyboards/maple_computing/minidox/keymaps/xyverz/rules.mk
index c777cb1b9f..c777cb1b9f 100644
--- a/keyboards/minidox/keymaps/xyverz/rules.mk
+++ b/keyboards/maple_computing/minidox/keymaps/xyverz/rules.mk
diff --git a/keyboards/minidox/minidox.c b/keyboards/maple_computing/minidox/minidox.c
index b4bffbb3e4..b4bffbb3e4 100644
--- a/keyboards/minidox/minidox.c
+++ b/keyboards/maple_computing/minidox/minidox.c
diff --git a/keyboards/maple_computing/minidox/minidox.h b/keyboards/maple_computing/minidox/minidox.h
new file mode 100644
index 0000000000..bae36b5560
--- /dev/null
+++ b/keyboards/maple_computing/minidox/minidox.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef KEYBOARD_maple_computing_minidox_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/maple_computing/minidox/readme.md b/keyboards/maple_computing/minidox/readme.md
new file mode 100644
index 0000000000..934985348c
--- /dev/null
+++ b/keyboards/maple_computing/minidox/readme.md
@@ -0,0 +1,27 @@
+# MiniDox
+
+![MiniDox](http://i.imgur.com/iWb3yO0.jpg)
+
+A compact version of the ErgoDox
+
+* Keyboard Maintainer: That-Canadian
+* Hardware Supported: MiniDox PCB rev1 Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/minidox/rev1:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make maple_computing/minidox/rev1:default:flash
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+## Build Guide
+
+A build guide for putting together the MiniDox v1 can be found here: [MiniDox Build Log / Guide](http://imgur.com/a/vImo6)
+
+
+## Choosing which board to plug the USB cable into (choosing Master)
+
+Because the two boards are identical, the firmware has logic to differentiate the left and right board. It uses two strategies to figure things out, [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) or [by define](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-define). See [setting-handedness](https://docs.qmk.fm/#/config_options?id=setting-handedness) for more information.
diff --git a/keyboards/minidox/rev1/config.h b/keyboards/maple_computing/minidox/rev1/config.h
index 734ca562fd..734ca562fd 100644
--- a/keyboards/minidox/rev1/config.h
+++ b/keyboards/maple_computing/minidox/rev1/config.h
diff --git a/keyboards/minidox/rev1/info.json b/keyboards/maple_computing/minidox/rev1/info.json
index 47ed14dab0..47ed14dab0 100644
--- a/keyboards/minidox/rev1/info.json
+++ b/keyboards/maple_computing/minidox/rev1/info.json
diff --git a/keyboards/minidox/rev1/rev1.c b/keyboards/maple_computing/minidox/rev1/rev1.c
index 72b473933e..72b473933e 100644
--- a/keyboards/minidox/rev1/rev1.c
+++ b/keyboards/maple_computing/minidox/rev1/rev1.c
diff --git a/keyboards/minidox/rev1/rev1.h b/keyboards/maple_computing/minidox/rev1/rev1.h
index bb8bd64666..bb8bd64666 100644
--- a/keyboards/minidox/rev1/rev1.h
+++ b/keyboards/maple_computing/minidox/rev1/rev1.h
diff --git a/keyboards/minidox/rev1/rules.mk b/keyboards/maple_computing/minidox/rev1/rules.mk
index 8ec0de6f7f..8ec0de6f7f 100644
--- a/keyboards/minidox/rev1/rules.mk
+++ b/keyboards/maple_computing/minidox/rev1/rules.mk
diff --git a/keyboards/maple_computing/minidox/rules.mk b/keyboards/maple_computing/minidox/rules.mk
new file mode 100644
index 0000000000..175ed0f6be
--- /dev/null
+++ b/keyboards/maple_computing/minidox/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = maple_computing/minidox/rev1
diff --git a/keyboards/the_ruler/config.h b/keyboards/maple_computing/the_ruler/config.h
index bcb7441140..bcb7441140 100644
--- a/keyboards/the_ruler/config.h
+++ b/keyboards/maple_computing/the_ruler/config.h
diff --git a/keyboards/the_ruler/info.json b/keyboards/maple_computing/the_ruler/info.json
index 5f2b9fba8f..5f2b9fba8f 100644
--- a/keyboards/the_ruler/info.json
+++ b/keyboards/maple_computing/the_ruler/info.json
diff --git a/keyboards/the_ruler/keymaps/default/keymap.c b/keyboards/maple_computing/the_ruler/keymaps/default/keymap.c
index 898881fc3c..898881fc3c 100644
--- a/keyboards/the_ruler/keymaps/default/keymap.c
+++ b/keyboards/maple_computing/the_ruler/keymaps/default/keymap.c
diff --git a/keyboards/the_ruler/keymaps/default/readme.md b/keyboards/maple_computing/the_ruler/keymaps/default/readme.md
index b515c1d48e..b515c1d48e 100644
--- a/keyboards/the_ruler/keymaps/default/readme.md
+++ b/keyboards/maple_computing/the_ruler/keymaps/default/readme.md
diff --git a/keyboards/maple_computing/the_ruler/readme.md b/keyboards/maple_computing/the_ruler/readme.md
new file mode 100644
index 0000000000..ff958db029
--- /dev/null
+++ b/keyboards/maple_computing/the_ruler/readme.md
@@ -0,0 +1,13 @@
+# The Ruler PCB
+
+A custom keyboard PCB ruler, that can also function as a macro pad.
+
+Keyboard Maintainer: Maple Computing
+Hardware Supported: PCB Ruler V1 by That-Canadian and Bishop Keyboards
+Hardware Availability: [Bishop Keyboards](https://bishopkeyboards.com/product/pcb-ruler-gloss-black-silver/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maple_computing/the_ruler:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/the_ruler/rules.mk b/keyboards/maple_computing/the_ruler/rules.mk
index 986f0f277a..986f0f277a 100644
--- a/keyboards/the_ruler/rules.mk
+++ b/keyboards/maple_computing/the_ruler/rules.mk
diff --git a/keyboards/the_ruler/the_ruler.c b/keyboards/maple_computing/the_ruler/the_ruler.c
index 29a8248924..29a8248924 100644
--- a/keyboards/the_ruler/the_ruler.c
+++ b/keyboards/maple_computing/the_ruler/the_ruler.c
diff --git a/keyboards/the_ruler/the_ruler.h b/keyboards/maple_computing/the_ruler/the_ruler.h
index 171d21a072..171d21a072 100644
--- a/keyboards/the_ruler/the_ruler.h
+++ b/keyboards/maple_computing/the_ruler/the_ruler.h
diff --git a/keyboards/treadstone32/info.json b/keyboards/marksard/treadstone32/info.json
index d9c1069b38..d9c1069b38 100644
--- a/keyboards/treadstone32/info.json
+++ b/keyboards/marksard/treadstone32/info.json
diff --git a/keyboards/treadstone32/keymaps/default/config.h b/keyboards/marksard/treadstone32/keymaps/default/config.h
index 863588c5aa..863588c5aa 100644
--- a/keyboards/treadstone32/keymaps/default/config.h
+++ b/keyboards/marksard/treadstone32/keymaps/default/config.h
diff --git a/keyboards/treadstone32/keymaps/default/keymap.c b/keyboards/marksard/treadstone32/keymaps/default/keymap.c
index 791fed059b..791fed059b 100644
--- a/keyboards/treadstone32/keymaps/default/keymap.c
+++ b/keyboards/marksard/treadstone32/keymaps/default/keymap.c
diff --git a/keyboards/treadstone32/keymaps/default/readme.md b/keyboards/marksard/treadstone32/keymaps/default/readme.md
index 387efc0d45..387efc0d45 100644
--- a/keyboards/treadstone32/keymaps/default/readme.md
+++ b/keyboards/marksard/treadstone32/keymaps/default/readme.md
diff --git a/keyboards/treadstone32/keymaps/default/readme_jp.md b/keyboards/marksard/treadstone32/keymaps/default/readme_jp.md
index ff078dcc8a..ff078dcc8a 100644
--- a/keyboards/treadstone32/keymaps/default/readme_jp.md
+++ b/keyboards/marksard/treadstone32/keymaps/default/readme_jp.md
diff --git a/keyboards/treadstone32/keymaps/default/rules.mk b/keyboards/marksard/treadstone32/keymaps/default/rules.mk
index 387a81d04b..387a81d04b 100644
--- a/keyboards/treadstone32/keymaps/default/rules.mk
+++ b/keyboards/marksard/treadstone32/keymaps/default/rules.mk
diff --git a/keyboards/treadstone32/keymaps/like_jis/config.h b/keyboards/marksard/treadstone32/keymaps/like_jis/config.h
index 863588c5aa..863588c5aa 100644
--- a/keyboards/treadstone32/keymaps/like_jis/config.h
+++ b/keyboards/marksard/treadstone32/keymaps/like_jis/config.h
diff --git a/keyboards/treadstone32/keymaps/like_jis/keymap.c b/keyboards/marksard/treadstone32/keymaps/like_jis/keymap.c
index 92518b11a7..92518b11a7 100644
--- a/keyboards/treadstone32/keymaps/like_jis/keymap.c
+++ b/keyboards/marksard/treadstone32/keymaps/like_jis/keymap.c
diff --git a/keyboards/treadstone32/keymaps/like_jis/readme.md b/keyboards/marksard/treadstone32/keymaps/like_jis/readme.md
index 206133ee7c..206133ee7c 100644
--- a/keyboards/treadstone32/keymaps/like_jis/readme.md
+++ b/keyboards/marksard/treadstone32/keymaps/like_jis/readme.md
diff --git a/keyboards/treadstone32/keymaps/like_jis/readme_jp.md b/keyboards/marksard/treadstone32/keymaps/like_jis/readme_jp.md
index 3242f101e2..3242f101e2 100644
--- a/keyboards/treadstone32/keymaps/like_jis/readme_jp.md
+++ b/keyboards/marksard/treadstone32/keymaps/like_jis/readme_jp.md
diff --git a/keyboards/treadstone32/keymaps/like_jis/rules.mk b/keyboards/marksard/treadstone32/keymaps/like_jis/rules.mk
index 882ddd6977..882ddd6977 100644
--- a/keyboards/treadstone32/keymaps/like_jis/rules.mk
+++ b/keyboards/marksard/treadstone32/keymaps/like_jis/rules.mk
diff --git a/keyboards/getta25/.noci b/keyboards/marksard/treadstone32/lite/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/getta25/.noci
+++ b/keyboards/marksard/treadstone32/lite/.noci
diff --git a/keyboards/treadstone32/lite/config.h b/keyboards/marksard/treadstone32/lite/config.h
index 90db1a7895..90db1a7895 100644
--- a/keyboards/treadstone32/lite/config.h
+++ b/keyboards/marksard/treadstone32/lite/config.h
diff --git a/keyboards/treadstone32/lite/lite.c b/keyboards/marksard/treadstone32/lite/lite.c
index a1997feff0..a1997feff0 100644
--- a/keyboards/treadstone32/lite/lite.c
+++ b/keyboards/marksard/treadstone32/lite/lite.c
diff --git a/keyboards/treadstone32/lite/lite.h b/keyboards/marksard/treadstone32/lite/lite.h
index 90181124c0..90181124c0 100644
--- a/keyboards/treadstone32/lite/lite.h
+++ b/keyboards/marksard/treadstone32/lite/lite.h
diff --git a/keyboards/treadstone32/lite/rules.mk b/keyboards/marksard/treadstone32/lite/rules.mk
index 6ded83e74b..6ded83e74b 100644
--- a/keyboards/treadstone32/lite/rules.mk
+++ b/keyboards/marksard/treadstone32/lite/rules.mk
diff --git a/keyboards/marksard/treadstone32/readme.md b/keyboards/marksard/treadstone32/readme.md
new file mode 100644
index 0000000000..170c6bc761
--- /dev/null
+++ b/keyboards/marksard/treadstone32/readme.md
@@ -0,0 +1,21 @@
+# treadstone32
+
+![treadstone32](https://github.com/marksard/Keyboards/raw/master/_image/20190421-P4210001.jpg)
+
+A 32-key Symmetric staggered keyboard.
+
+Keyboard Maintainer: [marksard](https://github.com/marksard)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make marksard/treadstone32:default
+ or
+ make marksard/treadstone32/lite:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://github.com/marksard/Keyboards/blob/master/treadstone32/documents/treadstone32_buildguide.md)
+[Build guide (lite)](https://github.com/marksard/Keyboards/blob/master/treadstone32/documents/treadstone32lite_buildguide.md)
+[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/treadstone32)
diff --git a/keyboards/ivy/.noci b/keyboards/marksard/treadstone32/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ivy/.noci
+++ b/keyboards/marksard/treadstone32/rev1/.noci
diff --git a/keyboards/treadstone32/rev1/config.h b/keyboards/marksard/treadstone32/rev1/config.h
index 3f21ad59c5..3f21ad59c5 100644
--- a/keyboards/treadstone32/rev1/config.h
+++ b/keyboards/marksard/treadstone32/rev1/config.h
diff --git a/keyboards/treadstone32/rev1/rev1.c b/keyboards/marksard/treadstone32/rev1/rev1.c
index bf41abddbe..bf41abddbe 100644
--- a/keyboards/treadstone32/rev1/rev1.c
+++ b/keyboards/marksard/treadstone32/rev1/rev1.c
diff --git a/keyboards/treadstone32/rev1/rev1.h b/keyboards/marksard/treadstone32/rev1/rev1.h
index 90181124c0..90181124c0 100644
--- a/keyboards/treadstone32/rev1/rev1.h
+++ b/keyboards/marksard/treadstone32/rev1/rev1.h
diff --git a/keyboards/treadstone32/rev1/rules.mk b/keyboards/marksard/treadstone32/rev1/rules.mk
index bddd4e389e..bddd4e389e 100644
--- a/keyboards/treadstone32/rev1/rules.mk
+++ b/keyboards/marksard/treadstone32/rev1/rules.mk
diff --git a/keyboards/marksard/treadstone32/rules.mk b/keyboards/marksard/treadstone32/rules.mk
new file mode 100644
index 0000000000..a0b43873cc
--- /dev/null
+++ b/keyboards/marksard/treadstone32/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+LEADER_ENABLE = no
+
+DEFAULT_FOLDER = marksard/treadstone32/rev1
diff --git a/keyboards/jisplit89/.noci b/keyboards/marksard/treadstone48/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/jisplit89/.noci
+++ b/keyboards/marksard/treadstone48/.noci
diff --git a/keyboards/treadstone48/common/glcdfont.c b/keyboards/marksard/treadstone48/common/glcdfont.c
index 003ce1a87b..003ce1a87b 100644
--- a/keyboards/treadstone48/common/glcdfont.c
+++ b/keyboards/marksard/treadstone48/common/glcdfont.c
diff --git a/keyboards/treadstone48/common/oled_helper.c b/keyboards/marksard/treadstone48/common/oled_helper.c
index 68adbe83a8..68adbe83a8 100644
--- a/keyboards/treadstone48/common/oled_helper.c
+++ b/keyboards/marksard/treadstone48/common/oled_helper.c
diff --git a/keyboards/treadstone48/common/oled_helper.h b/keyboards/marksard/treadstone48/common/oled_helper.h
index 56c2a5b236..56c2a5b236 100644
--- a/keyboards/treadstone48/common/oled_helper.h
+++ b/keyboards/marksard/treadstone48/common/oled_helper.h
diff --git a/keyboards/marksard/treadstone48/keymaps/default/config.h b/keyboards/marksard/treadstone48/keymaps/default/config.h
new file mode 100644
index 0000000000..a5f68e7a2b
--- /dev/null
+++ b/keyboards/marksard/treadstone48/keymaps/default/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 225
+
+#ifdef MOUSEKEY_ENABLE
+ #undef MOUSEKEY_INTERVAL
+ #define MOUSEKEY_INTERVAL 1
+
+ #undef MOUSEKEY_TIME_TO_MAX
+ #define MOUSEKEY_TIME_TO_MAX 150
+
+ #undef MOUSEKEY_MAX_SPEED
+ #define MOUSEKEY_MAX_SPEED 3
+
+ #undef MOUSEKEY_MOVE_DELTA
+ #define MOUSEKEY_MOVE_DELTA 4
+
+ #undef MOUSEKEY_DELAY
+ #define MOUSEKEY_DELAY 0
+#endif
+
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/marksard/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/default/keymap.c b/keyboards/marksard/treadstone48/keymaps/default/keymap.c
index 00884f3918..00884f3918 100644
--- a/keyboards/treadstone48/keymaps/default/keymap.c
+++ b/keyboards/marksard/treadstone48/keymaps/default/keymap.c
diff --git a/keyboards/treadstone48/keymaps/default/readme.md b/keyboards/marksard/treadstone48/keymaps/default/readme.md
index bb835d169c..bb835d169c 100644
--- a/keyboards/treadstone48/keymaps/default/readme.md
+++ b/keyboards/marksard/treadstone48/keymaps/default/readme.md
diff --git a/keyboards/treadstone48/keymaps/default/readme_jp.md b/keyboards/marksard/treadstone48/keymaps/default/readme_jp.md
index 93aaa190e3..93aaa190e3 100644
--- a/keyboards/treadstone48/keymaps/default/readme_jp.md
+++ b/keyboards/marksard/treadstone48/keymaps/default/readme_jp.md
diff --git a/keyboards/treadstone48/keymaps/default/rules.mk b/keyboards/marksard/treadstone48/keymaps/default/rules.mk
index 23c4ae9542..23c4ae9542 100644
--- a/keyboards/treadstone48/keymaps/default/rules.mk
+++ b/keyboards/marksard/treadstone48/keymaps/default/rules.mk
diff --git a/keyboards/marksard/treadstone48/keymaps/like_jis/config.h b/keyboards/marksard/treadstone48/keymaps/like_jis/config.h
new file mode 100644
index 0000000000..a5f68e7a2b
--- /dev/null
+++ b/keyboards/marksard/treadstone48/keymaps/like_jis/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 225
+
+#ifdef MOUSEKEY_ENABLE
+ #undef MOUSEKEY_INTERVAL
+ #define MOUSEKEY_INTERVAL 1
+
+ #undef MOUSEKEY_TIME_TO_MAX
+ #define MOUSEKEY_TIME_TO_MAX 150
+
+ #undef MOUSEKEY_MAX_SPEED
+ #define MOUSEKEY_MAX_SPEED 3
+
+ #undef MOUSEKEY_MOVE_DELTA
+ #define MOUSEKEY_MOVE_DELTA 4
+
+ #undef MOUSEKEY_DELAY
+ #define MOUSEKEY_DELAY 0
+#endif
+
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/marksard/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/like_jis/keymap.c b/keyboards/marksard/treadstone48/keymaps/like_jis/keymap.c
index 1e90a2416e..1e90a2416e 100644
--- a/keyboards/treadstone48/keymaps/like_jis/keymap.c
+++ b/keyboards/marksard/treadstone48/keymaps/like_jis/keymap.c
diff --git a/keyboards/treadstone48/keymaps/like_jis/readme.md b/keyboards/marksard/treadstone48/keymaps/like_jis/readme.md
index 796df6c4cd..796df6c4cd 100644
--- a/keyboards/treadstone48/keymaps/like_jis/readme.md
+++ b/keyboards/marksard/treadstone48/keymaps/like_jis/readme.md
diff --git a/keyboards/treadstone48/keymaps/like_jis/readme_jp.md b/keyboards/marksard/treadstone48/keymaps/like_jis/readme_jp.md
index 5ae638b0d1..5ae638b0d1 100644
--- a/keyboards/treadstone48/keymaps/like_jis/readme_jp.md
+++ b/keyboards/marksard/treadstone48/keymaps/like_jis/readme_jp.md
diff --git a/keyboards/treadstone48/keymaps/like_jis/rules.mk b/keyboards/marksard/treadstone48/keymaps/like_jis/rules.mk
index 23c4ae9542..23c4ae9542 100644
--- a/keyboards/treadstone48/keymaps/like_jis/rules.mk
+++ b/keyboards/marksard/treadstone48/keymaps/like_jis/rules.mk
diff --git a/keyboards/marksard/treadstone48/readme.md b/keyboards/marksard/treadstone48/readme.md
new file mode 100644
index 0000000000..c5f6f8f73f
--- /dev/null
+++ b/keyboards/marksard/treadstone48/readme.md
@@ -0,0 +1,21 @@
+# treadstone48
+
+![treadstone48](https://github.com/marksard/Keyboards/raw/master/_image/20181219-PC190003.jpg)
+
+A 47 (or 48) keys Symmetric Staggered keyboard.
+
+Keyboard Maintainer: [marksard](https://github.com/marksard)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make marksard/treadstone48:default
+ or
+ make marksard/treadstone48/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://github.com/marksard/Keyboards/blob/master/treadstone48/documents/treadstone48_buildguide.md)
+[Build guide (rev2)](https://github.com/marksard/Keyboards/blob/master/treadstone48/documents/treadstone48rev2_buildguide.md)
+[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/treadstone48)
diff --git a/keyboards/launchpad/.noci b/keyboards/marksard/treadstone48/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/launchpad/.noci
+++ b/keyboards/marksard/treadstone48/rev1/.noci
diff --git a/keyboards/treadstone48/rev1/config.h b/keyboards/marksard/treadstone48/rev1/config.h
index ad9de636d0..ad9de636d0 100644
--- a/keyboards/treadstone48/rev1/config.h
+++ b/keyboards/marksard/treadstone48/rev1/config.h
diff --git a/keyboards/treadstone48/rev1/info.json b/keyboards/marksard/treadstone48/rev1/info.json
index 8b90429d00..8b90429d00 100644
--- a/keyboards/treadstone48/rev1/info.json
+++ b/keyboards/marksard/treadstone48/rev1/info.json
diff --git a/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h
new file mode 100644
index 0000000000..54ac1f2fce
--- /dev/null
+++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h
@@ -0,0 +1,51 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 225
+#define PREVENT_STUCK_MODIFIERS
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#ifdef MOUSEKEY_ENABLE
+ #undef MOUSEKEY_INTERVAL
+ #define MOUSEKEY_INTERVAL 1
+
+ #undef MOUSEKEY_TIME_TO_MAX
+ #define MOUSEKEY_TIME_TO_MAX 150
+
+ #undef MOUSEKEY_MAX_SPEED
+ #define MOUSEKEY_MAX_SPEED 3
+
+ #undef MOUSEKEY_MOVE_DELTA
+ #define MOUSEKEY_MOVE_DELTA 4
+
+ #undef MOUSEKEY_DELAY
+ #define MOUSEKEY_DELAY 0
+#endif
+
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/marksard/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/keymap.c b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/keymap.c
index e1f0835881..e1f0835881 100644
--- a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/keymap.c
+++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/keymap.c
diff --git a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme.md b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme.md
index 796df6c4cd..796df6c4cd 100644
--- a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme.md
+++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme.md
diff --git a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md
index 81c5e017ec..81c5e017ec 100644
--- a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md
+++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/readme_jp.md
diff --git a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/rules.mk b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/rules.mk
index fafe992d6f..fafe992d6f 100644
--- a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/rules.mk
+++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/rules.mk
diff --git a/keyboards/treadstone48/rev1/rev1.c b/keyboards/marksard/treadstone48/rev1/rev1.c
index 3daa3e8e81..3daa3e8e81 100644
--- a/keyboards/treadstone48/rev1/rev1.c
+++ b/keyboards/marksard/treadstone48/rev1/rev1.c
diff --git a/keyboards/treadstone48/rev1/rev1.h b/keyboards/marksard/treadstone48/rev1/rev1.h
index 7534796422..7534796422 100644
--- a/keyboards/treadstone48/rev1/rev1.h
+++ b/keyboards/marksard/treadstone48/rev1/rev1.h
diff --git a/keyboards/getta25/rev1/rules.mk b/keyboards/marksard/treadstone48/rev1/rules.mk
index fff00a1b51..fff00a1b51 100644
--- a/keyboards/getta25/rev1/rules.mk
+++ b/keyboards/marksard/treadstone48/rev1/rules.mk
diff --git a/keyboards/treadstone48/rev2/config.h b/keyboards/marksard/treadstone48/rev2/config.h
index 6df1467d8c..6df1467d8c 100644
--- a/keyboards/treadstone48/rev2/config.h
+++ b/keyboards/marksard/treadstone48/rev2/config.h
diff --git a/keyboards/treadstone48/rev2/info.json b/keyboards/marksard/treadstone48/rev2/info.json
index 73527155e8..73527155e8 100644
--- a/keyboards/treadstone48/rev2/info.json
+++ b/keyboards/marksard/treadstone48/rev2/info.json
diff --git a/keyboards/treadstone48/rev2/rev2.c b/keyboards/marksard/treadstone48/rev2/rev2.c
index f7e7bc7702..f7e7bc7702 100644
--- a/keyboards/treadstone48/rev2/rev2.c
+++ b/keyboards/marksard/treadstone48/rev2/rev2.c
diff --git a/keyboards/treadstone48/rev2/rev2.h b/keyboards/marksard/treadstone48/rev2/rev2.h
index 651468c4a5..651468c4a5 100644
--- a/keyboards/treadstone48/rev2/rev2.h
+++ b/keyboards/marksard/treadstone48/rev2/rev2.h
diff --git a/keyboards/naked48/keymaps/default/rules.mk b/keyboards/marksard/treadstone48/rev2/rules.mk
index d29d9074a0..d29d9074a0 100644
--- a/keyboards/naked48/keymaps/default/rules.mk
+++ b/keyboards/marksard/treadstone48/rev2/rules.mk
diff --git a/keyboards/marksard/treadstone48/rules.mk b/keyboards/marksard/treadstone48/rules.mk
new file mode 100644
index 0000000000..67c171a7b7
--- /dev/null
+++ b/keyboards/marksard/treadstone48/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+SPLIT_KEYBOARD = yes
+
+MOUSEKEY_ENABLE = yes # Mouse keys
+
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+
+DEFAULT_FOLDER = marksard/treadstone48/rev1
diff --git a/keyboards/massdrop/alt/rules.mk b/keyboards/massdrop/alt/rules.mk
index 83d4fc590b..f0ff36fa35 100644
--- a/keyboards/massdrop/alt/rules.mk
+++ b/keyboards/massdrop/alt/rules.mk
@@ -5,6 +5,9 @@ SRC += config_led.c
ARM_ATSAM = SAMD51J18A
MCU = cortex-m4
+# Bootloader selection
+BOOTLOADER = md-boot
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/massdrop/ctrl/rules.mk b/keyboards/massdrop/ctrl/rules.mk
index 667642f83d..a302c82d86 100644
--- a/keyboards/massdrop/ctrl/rules.mk
+++ b/keyboards/massdrop/ctrl/rules.mk
@@ -5,6 +5,9 @@ SRC += config_led.c
ARM_ATSAM = SAMD51J18A
MCU = cortex-m4
+# Bootloader selection
+BOOTLOADER = md-boot
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/matrix/abelx/abelx.c b/keyboards/matrix/abelx/abelx.c
index 77e749ee40..9585948e0c 100644
--- a/keyboards/matrix/abelx/abelx.c
+++ b/keyboards/matrix/abelx/abelx.c
@@ -97,3 +97,8 @@ void shutdown_user(void)
// set the magic number for resetting to the bootloader
*(uint32_t *)(&(RTCD1.rtc->BKP0R)) = REBOOT_MAGIC;
}
+
+void bootloader_jump(void) {
+ shutdown_user();
+ NVIC_SystemReset();
+}
diff --git a/keyboards/matrix/abelx/boards/abelx_bd/board.c b/keyboards/matrix/abelx/boards/abelx_bd/board.c
index 68cf23cddc..db40a8e37b 100644
--- a/keyboards/matrix/abelx/boards/abelx_bd/board.c
+++ b/keyboards/matrix/abelx/boards/abelx_bd/board.c
@@ -208,9 +208,6 @@ static void stm32_gpio_init(void) {
* else.
*/
void __early_init(void) {
- extern void enter_bootloader_mode_if_requested(void);
- enter_bootloader_mode_if_requested();
-
stm32_gpio_init();
stm32_clock_init();
}
diff --git a/keyboards/matrix/abelx/bootloader_defs.h b/keyboards/matrix/abelx/bootloader_defs.h
deleted file mode 100644
index 20b8f73e6f..0000000000
--- a/keyboards/matrix/abelx/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/keyboards/matrix/abelx/rules.mk b/keyboards/matrix/abelx/rules.mk
index 98b6cfa65e..7a5d01e5cb 100644
--- a/keyboards/matrix/abelx/rules.mk
+++ b/keyboards/matrix/abelx/rules.mk
@@ -25,18 +25,13 @@ ARMV = 7
USE_FPU = yes
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-#DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# Bootloader selection
+BOOTLOADER = custom
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+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
@@ -44,7 +39,6 @@ COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
diff --git a/keyboards/matrix/m12og/rev1/rev1.c b/keyboards/matrix/m12og/rev1/rev1.c
index e3277bee27..53183c7d2d 100644
--- a/keyboards/matrix/m12og/rev1/rev1.c
+++ b/keyboards/matrix/m12og/rev1/rev1.c
@@ -20,6 +20,11 @@ void board_init(void) {
writePinLow(A8);
}
+void bootloader_jump(void) {
+ // This board doesn't use the standard DFU bootloader, and no information is available regarding how to enter bootloader mode. All we can do here is reset.
+ NVIC_SystemReset();
+}
+
void keyboard_post_init_kb(void) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom(5, 255, 255);
diff --git a/keyboards/matrix/m12og/rev1/rules.mk b/keyboards/matrix/m12og/rev1/rules.mk
index 0e0584b8c9..d9733e8c5e 100644
--- a/keyboards/matrix/m12og/rev1/rules.mk
+++ b/keyboards/matrix/m12og/rev1/rules.mk
@@ -5,6 +5,9 @@ MCU_LDSCRIPT = m12og_v1
BOARD = m12og_v1
+# Bootloader selection
+BOOTLOADER = custom
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/matrix/m20add/bootloader_defs.h b/keyboards/matrix/m20add/bootloader_defs.h
deleted file mode 100644
index 4da3d39a32..0000000000
--- a/keyboards/matrix/m20add/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/keyboards/matrix/m20add/m20add.c b/keyboards/matrix/m20add/m20add.c
index 21f4f9b1ba..cdcafb9779 100644
--- a/keyboards/matrix/m20add/m20add.c
+++ b/keyboards/matrix/m20add/m20add.c
@@ -53,28 +53,14 @@ bool led_update_kb(led_t led_state) {
return res;
}
-// override the default implementation to avoid re-initialization
-void i2c_init(void)
-{
- static bool initialized = false;
- if (initialized) {
- return;
- } else {
- initialized = true;
- }
-
- // Try releasing special pins for a short time
- palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT);
- palSetLineMode(I2C1_SDA_PIN, PAL_MODE_INPUT);
-
- chThdSleepMilliseconds(10);
- palSetLineMode(I2C1_SCL_PIN, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
- palSetLineMode(I2C1_SDA_PIN, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
-}
-
#define REBOOT_MAGIC 0x41544B42
void shutdown_user(void)
{
// set the magic number for resetting to the bootloader
*(uint32_t *)(&(RTCD1.rtc->BKP0R)) = REBOOT_MAGIC;
}
+
+void bootloader_jump(void) {
+ shutdown_user();
+ NVIC_SystemReset();
+}
diff --git a/keyboards/matrix/m20add/rules.mk b/keyboards/matrix/m20add/rules.mk
index 1ecbd9d308..86bd6b9371 100644
--- a/keyboards/matrix/m20add/rules.mk
+++ b/keyboards/matrix/m20add/rules.mk
@@ -10,6 +10,9 @@ MCU_LDSCRIPT = m20add_boot
# or <this_dir>/boards
BOARD = ST_NUCLEO64_F411RE
+# Bootloader selection
+BOOTLOADER = custom
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/matrix/noah/bootloader_defs.h b/keyboards/matrix/noah/bootloader_defs.h
deleted file mode 100644
index 4da3d39a32..0000000000
--- a/keyboards/matrix/noah/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c
index 2143dee3be..89c25707af 100644
--- a/keyboards/matrix/noah/noah.c
+++ b/keyboards/matrix/noah/noah.c
@@ -4,6 +4,11 @@
#include "noah.h"
+void bootloader_jump(void) {
+ // This board doesn't use the standard DFU bootloader, and no information is available regarding how to enter bootloader mode. All we can do here is reset.
+ NVIC_SystemReset();
+}
+
#ifdef RGBLIGHT_ENABLE
#include <string.h>
#include "rgblight.h"
diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
index b9f642e8cd..7971d628d6 100644
--- a/keyboards/matrix/noah/rules.mk
+++ b/keyboards/matrix/noah/rules.mk
@@ -10,6 +10,9 @@ MCU_LDSCRIPT = noah_boot
# or <this_dir>/boards
BOARD = ST_NUCLEO64_F411RE
+# Bootloader selection
+BOOTLOADER = custom
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/m3n3van/config.h b/keyboards/matthewdias/m3n3van/config.h
index 15f62cecfd..15f62cecfd 100644
--- a/keyboards/m3n3van/config.h
+++ b/keyboards/matthewdias/m3n3van/config.h
diff --git a/keyboards/m3n3van/info.json b/keyboards/matthewdias/m3n3van/info.json
index 240c203c29..240c203c29 100644
--- a/keyboards/m3n3van/info.json
+++ b/keyboards/matthewdias/m3n3van/info.json
diff --git a/keyboards/m3n3van/keymaps/default/keymap.json b/keyboards/matthewdias/m3n3van/keymaps/default/keymap.json
index d59debdaf1..d59debdaf1 100644
--- a/keyboards/m3n3van/keymaps/default/keymap.json
+++ b/keyboards/matthewdias/m3n3van/keymaps/default/keymap.json
diff --git a/keyboards/m3n3van/keymaps/matthewdias/keymap.c b/keyboards/matthewdias/m3n3van/keymaps/matthewdias/keymap.c
index 9ed5028c7c..9ed5028c7c 100644
--- a/keyboards/m3n3van/keymaps/matthewdias/keymap.c
+++ b/keyboards/matthewdias/m3n3van/keymaps/matthewdias/keymap.c
diff --git a/keyboards/m3n3van/keymaps/via/keymap.c b/keyboards/matthewdias/m3n3van/keymaps/via/keymap.c
index 1b01b10adb..1b01b10adb 100644
--- a/keyboards/m3n3van/keymaps/via/keymap.c
+++ b/keyboards/matthewdias/m3n3van/keymaps/via/keymap.c
diff --git a/keyboards/jnao/keymaps/via/rules.mk b/keyboards/matthewdias/m3n3van/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/jnao/keymaps/via/rules.mk
+++ b/keyboards/matthewdias/m3n3van/keymaps/via/rules.mk
diff --git a/keyboards/m3n3van/m3n3van.c b/keyboards/matthewdias/m3n3van/m3n3van.c
index 5032a02c3c..5032a02c3c 100644
--- a/keyboards/m3n3van/m3n3van.c
+++ b/keyboards/matthewdias/m3n3van/m3n3van.c
diff --git a/keyboards/m3n3van/m3n3van.h b/keyboards/matthewdias/m3n3van/m3n3van.h
index be9efe7e54..be9efe7e54 100644
--- a/keyboards/m3n3van/m3n3van.h
+++ b/keyboards/matthewdias/m3n3van/m3n3van.h
diff --git a/keyboards/matthewdias/m3n3van/readme.md b/keyboards/matthewdias/m3n3van/readme.md
new file mode 100644
index 0000000000..4a426cc224
--- /dev/null
+++ b/keyboards/matthewdias/m3n3van/readme.md
@@ -0,0 +1,21 @@
+# m3n3van
+
+![](https://raw.githubusercontent.com/matthewdias/m3n3van/f642037703cfac5deba284ef7671c0564fdd8d4d/rev2/bottom.svg)
+
+A minivan case compatible PCB with 2x3u split space.
+
+- Keyboard Maintainer: matthewdias
+- Hardware Supported: m3n3van rev2 PCB
+- Hardware Availability: [GitHub](https://github.com/matthewdias/m3n3van/tree/main/rev2)
+
+To reset the keyboard into bootloader mode, press the reset switch on the underside.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matthewdias/m3n3van:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make matthewdias/m3n3van:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/m3n3van/rules.mk b/keyboards/matthewdias/m3n3van/rules.mk
index 5f58c5684b..5f58c5684b 100644
--- a/keyboards/m3n3van/rules.mk
+++ b/keyboards/matthewdias/m3n3van/rules.mk
diff --git a/keyboards/minim/config.h b/keyboards/matthewdias/minim/config.h
index e13d2b798f..e13d2b798f 100644
--- a/keyboards/minim/config.h
+++ b/keyboards/matthewdias/minim/config.h
diff --git a/keyboards/minim/info.json b/keyboards/matthewdias/minim/info.json
index 0ac146b9a2..0ac146b9a2 100644
--- a/keyboards/minim/info.json
+++ b/keyboards/matthewdias/minim/info.json
diff --git a/keyboards/minim/keymaps/default/keymap.json b/keyboards/matthewdias/minim/keymaps/default/keymap.json
index bc7407e93a..bc7407e93a 100644
--- a/keyboards/minim/keymaps/default/keymap.json
+++ b/keyboards/matthewdias/minim/keymaps/default/keymap.json
diff --git a/keyboards/minim/minim.c b/keyboards/matthewdias/minim/minim.c
index aadb26fee2..aadb26fee2 100644
--- a/keyboards/minim/minim.c
+++ b/keyboards/matthewdias/minim/minim.c
diff --git a/keyboards/minim/minim.h b/keyboards/matthewdias/minim/minim.h
index 7a732a8ab9..7a732a8ab9 100644
--- a/keyboards/minim/minim.h
+++ b/keyboards/matthewdias/minim/minim.h
diff --git a/keyboards/matthewdias/minim/readme.md b/keyboards/matthewdias/minim/readme.md
new file mode 100644
index 0000000000..e94e928ce5
--- /dev/null
+++ b/keyboards/matthewdias/minim/readme.md
@@ -0,0 +1,21 @@
+# minim
+
+![](https://raw.githubusercontent.com/matthewdias/minim/main/layout.png)
+
+A symmetrical 50% keyboard.
+
+* Keyboard Maintainer: matthewdias
+* Hardware Supported: minim PCB
+* Hardware Availability: [GitHub](https://github.com/matthewdias/minim)
+
+To reset the keyboard into bootloader mode, press the reset switch on the underside.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matthewdias/minim:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make matthewdias/minim:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/minim/rules.mk b/keyboards/matthewdias/minim/rules.mk
index 476cf49f27..476cf49f27 100644
--- a/keyboards/minim/rules.mk
+++ b/keyboards/matthewdias/minim/rules.mk
diff --git a/keyboards/model_v/config.h b/keyboards/matthewdias/model_v/config.h
index 847599a369..847599a369 100644
--- a/keyboards/model_v/config.h
+++ b/keyboards/matthewdias/model_v/config.h
diff --git a/keyboards/model_v/info.json b/keyboards/matthewdias/model_v/info.json
index cdb0efd951..cdb0efd951 100644
--- a/keyboards/model_v/info.json
+++ b/keyboards/matthewdias/model_v/info.json
diff --git a/keyboards/model_v/keymaps/default/keymap.c b/keyboards/matthewdias/model_v/keymaps/default/keymap.c
index d64a12b35f..d64a12b35f 100644
--- a/keyboards/model_v/keymaps/default/keymap.c
+++ b/keyboards/matthewdias/model_v/keymaps/default/keymap.c
diff --git a/keyboards/model_v/keymaps/via/keymap.c b/keyboards/matthewdias/model_v/keymaps/via/keymap.c
index ae16e72b20..ae16e72b20 100644
--- a/keyboards/model_v/keymaps/via/keymap.c
+++ b/keyboards/matthewdias/model_v/keymaps/via/keymap.c
diff --git a/keyboards/kelowna/rgb64/keymaps/via/rules.mk b/keyboards/matthewdias/model_v/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/kelowna/rgb64/keymaps/via/rules.mk
+++ b/keyboards/matthewdias/model_v/keymaps/via/rules.mk
diff --git a/keyboards/model_v/model_v.c b/keyboards/matthewdias/model_v/model_v.c
index a65738d97b..a65738d97b 100644
--- a/keyboards/model_v/model_v.c
+++ b/keyboards/matthewdias/model_v/model_v.c
diff --git a/keyboards/model_v/model_v.h b/keyboards/matthewdias/model_v/model_v.h
index 6f3a96080e..6f3a96080e 100644
--- a/keyboards/model_v/model_v.h
+++ b/keyboards/matthewdias/model_v/model_v.h
diff --git a/keyboards/matthewdias/model_v/readme.md b/keyboards/matthewdias/model_v/readme.md
new file mode 100644
index 0000000000..e73c131e29
--- /dev/null
+++ b/keyboards/matthewdias/model_v/readme.md
@@ -0,0 +1,20 @@
+# model-v
+
+![](https://i.imgur.com/uqL3HSWl.png)
+
+A minivan case compatible PCB with flex cuts.
+
+- Keyboard Maintainer: matthewdias
+- Hardware Supported: model-v pcb
+
+To reset the keyboard into bootloader mode, press the reset switch on the underside.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matthewdias/model_v:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make matthewdias/model_v:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/model_v/rules.mk b/keyboards/matthewdias/model_v/rules.mk
index 476cf49f27..476cf49f27 100644
--- a/keyboards/model_v/rules.mk
+++ b/keyboards/matthewdias/model_v/rules.mk
diff --git a/keyboards/txuu/config.h b/keyboards/matthewdias/txuu/config.h
index 202777a965..202777a965 100644
--- a/keyboards/txuu/config.h
+++ b/keyboards/matthewdias/txuu/config.h
diff --git a/keyboards/txuu/info.json b/keyboards/matthewdias/txuu/info.json
index 20efca6978..20efca6978 100644
--- a/keyboards/txuu/info.json
+++ b/keyboards/matthewdias/txuu/info.json
diff --git a/keyboards/txuu/keymaps/default/keymap.c b/keyboards/matthewdias/txuu/keymaps/default/keymap.c
index 2e0ed852b1..2e0ed852b1 100644
--- a/keyboards/txuu/keymaps/default/keymap.c
+++ b/keyboards/matthewdias/txuu/keymaps/default/keymap.c
diff --git a/keyboards/txuu/keymaps/via/keymap.c b/keyboards/matthewdias/txuu/keymaps/via/keymap.c
index b4318cd5dd..b4318cd5dd 100644
--- a/keyboards/txuu/keymaps/via/keymap.c
+++ b/keyboards/matthewdias/txuu/keymaps/via/keymap.c
diff --git a/keyboards/kprepublic/bm68hsrgb/keymaps/via/rules.mk b/keyboards/matthewdias/txuu/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/kprepublic/bm68hsrgb/keymaps/via/rules.mk
+++ b/keyboards/matthewdias/txuu/keymaps/via/rules.mk
diff --git a/keyboards/matthewdias/txuu/readme.md b/keyboards/matthewdias/txuu/readme.md
new file mode 100644
index 0000000000..017cd23bb1
--- /dev/null
+++ b/keyboards/matthewdias/txuu/readme.md
@@ -0,0 +1,18 @@
+# txuu
+
+A 65% PCB
+
+- Keyboard Maintainer: matthewdias
+- Hardware Supported: txuu PCB, Unified Daughterboard
+
+To reset the keyboard into bootloader mode, press the reset switch on the underside.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matthewdias/txuu:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make matthewdias/txuu:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/txuu/rules.mk b/keyboards/matthewdias/txuu/rules.mk
index 476cf49f27..476cf49f27 100644
--- a/keyboards/txuu/rules.mk
+++ b/keyboards/matthewdias/txuu/rules.mk
diff --git a/keyboards/txuu/txuu.c b/keyboards/matthewdias/txuu/txuu.c
index 81c4b440ad..81c4b440ad 100644
--- a/keyboards/txuu/txuu.c
+++ b/keyboards/matthewdias/txuu/txuu.c
diff --git a/keyboards/txuu/txuu.h b/keyboards/matthewdias/txuu/txuu.h
index 6ba459804b..6ba459804b 100644
--- a/keyboards/txuu/txuu.h
+++ b/keyboards/matthewdias/txuu/txuu.h
diff --git a/keyboards/acr60/acr60.c b/keyboards/mechkeys/acr60/acr60.c
index 7cba669b84..7cba669b84 100644
--- a/keyboards/acr60/acr60.c
+++ b/keyboards/mechkeys/acr60/acr60.c
diff --git a/keyboards/acr60/acr60.h b/keyboards/mechkeys/acr60/acr60.h
index 5a52a3bc86..5a52a3bc86 100644
--- a/keyboards/acr60/acr60.h
+++ b/keyboards/mechkeys/acr60/acr60.h
diff --git a/keyboards/acr60/config.h b/keyboards/mechkeys/acr60/config.h
index 7fb907153a..7fb907153a 100644
--- a/keyboards/acr60/config.h
+++ b/keyboards/mechkeys/acr60/config.h
diff --git a/keyboards/acr60/info.json b/keyboards/mechkeys/acr60/info.json
index 0e42e5162e..0e42e5162e 100644
--- a/keyboards/acr60/info.json
+++ b/keyboards/mechkeys/acr60/info.json
diff --git a/keyboards/acr60/keymaps/default/keymap.c b/keyboards/mechkeys/acr60/keymaps/default/keymap.c
index e7381c5783..e7381c5783 100644
--- a/keyboards/acr60/keymaps/default/keymap.c
+++ b/keyboards/mechkeys/acr60/keymaps/default/keymap.c
diff --git a/keyboards/acr60/keymaps/mitch/keymap.c b/keyboards/mechkeys/acr60/keymaps/mitch/keymap.c
index 1567b14813..1567b14813 100644
--- a/keyboards/acr60/keymaps/mitch/keymap.c
+++ b/keyboards/mechkeys/acr60/keymaps/mitch/keymap.c
diff --git a/keyboards/mechkeys/acr60/readme.md b/keyboards/mechkeys/acr60/readme.md
new file mode 100644
index 0000000000..4d8bffa364
--- /dev/null
+++ b/keyboards/mechkeys/acr60/readme.md
@@ -0,0 +1,24 @@
+# ACR60
+
+![acr60](https://cdn.shopify.com/s/files/1/1697/5323/products/20170522001035_1024x1024.jpg?v=1504725199)
+
+A customizable 60% keyboard made and sold by mechkeys.ca [More info on MECHKEYS](https://mechkeys.ca)
+
+* Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
+* Hardware Supported: ACR60
+* Hardware Availability: [~~MECHKEYS~~](https://mechkeys.ca/products/acr60) (no longer available)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechkeys/acr60:default
+
+Flashing example for this keyboard:
+
+ make mechkeys/acr60:default:flash
+
+To reset the board into bootloader mode, do one of the following:
+
+* Tap the Reset switch mounted on the bottom side of the PCB
+* Hold Space+B while connecting the USB cable
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).`
diff --git a/keyboards/acr60/rules.mk b/keyboards/mechkeys/acr60/rules.mk
index 9ccce6abf4..9ccce6abf4 100644
--- a/keyboards/acr60/rules.mk
+++ b/keyboards/mechkeys/acr60/rules.mk
diff --git a/keyboards/alu84/alu84.c b/keyboards/mechkeys/alu84/alu84.c
index 3e058d3ed5..3e058d3ed5 100755
--- a/keyboards/alu84/alu84.c
+++ b/keyboards/mechkeys/alu84/alu84.c
diff --git a/keyboards/alu84/alu84.h b/keyboards/mechkeys/alu84/alu84.h
index dc263eb8d1..dc263eb8d1 100755
--- a/keyboards/alu84/alu84.h
+++ b/keyboards/mechkeys/alu84/alu84.h
diff --git a/keyboards/alu84/config.h b/keyboards/mechkeys/alu84/config.h
index 3700ced8cf..3700ced8cf 100755
--- a/keyboards/alu84/config.h
+++ b/keyboards/mechkeys/alu84/config.h
diff --git a/keyboards/alu84/info.json b/keyboards/mechkeys/alu84/info.json
index 55d01489dc..55d01489dc 100644
--- a/keyboards/alu84/info.json
+++ b/keyboards/mechkeys/alu84/info.json
diff --git a/keyboards/alu84/keymaps/default/keymap.c b/keyboards/mechkeys/alu84/keymaps/default/keymap.c
index ca370c765a..ca370c765a 100755
--- a/keyboards/alu84/keymaps/default/keymap.c
+++ b/keyboards/mechkeys/alu84/keymaps/default/keymap.c
diff --git a/keyboards/alu84/keymaps/turbomech/config.h b/keyboards/mechkeys/alu84/keymaps/turbomech/config.h
index 2a60c1f381..2a60c1f381 100644
--- a/keyboards/alu84/keymaps/turbomech/config.h
+++ b/keyboards/mechkeys/alu84/keymaps/turbomech/config.h
diff --git a/keyboards/alu84/keymaps/turbomech/keymap.c b/keyboards/mechkeys/alu84/keymaps/turbomech/keymap.c
index 24c0d2c2da..24c0d2c2da 100644
--- a/keyboards/alu84/keymaps/turbomech/keymap.c
+++ b/keyboards/mechkeys/alu84/keymaps/turbomech/keymap.c
diff --git a/keyboards/alu84/keymaps/turbomech/readme.md b/keyboards/mechkeys/alu84/keymaps/turbomech/readme.md
index b78d7a5e7e..b78d7a5e7e 100644
--- a/keyboards/alu84/keymaps/turbomech/readme.md
+++ b/keyboards/mechkeys/alu84/keymaps/turbomech/readme.md
diff --git a/keyboards/alu84/keymaps/turbomech/rules.mk b/keyboards/mechkeys/alu84/keymaps/turbomech/rules.mk
index 6c0a79b110..6c0a79b110 100644
--- a/keyboards/alu84/keymaps/turbomech/rules.mk
+++ b/keyboards/mechkeys/alu84/keymaps/turbomech/rules.mk
diff --git a/keyboards/mechkeys/alu84/readme.md b/keyboards/mechkeys/alu84/readme.md
new file mode 100644
index 0000000000..ca2afbe970
--- /dev/null
+++ b/keyboards/mechkeys/alu84/readme.md
@@ -0,0 +1,21 @@
+# ALU84
+
+![alu84](https://i.imgur.com/wBfazDch.jpg)
+
+A 75% keyboard made and sold by MECHKEYS.
+
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: ALU84
+* Hardware Availability: [~~MECHKEYS~~](https://mechkeys.ca) (No longer available)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechkeys/alu84:default
+
+Flashing example for this keyboard:
+
+ make mechkeys/alu84:default:flash
+
+To reset the board into bootloader mode, hold Space+B while plugging the cable in.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/alu84/rules.mk b/keyboards/mechkeys/alu84/rules.mk
index 323c6a1b87..323c6a1b87 100755
--- a/keyboards/alu84/rules.mk
+++ b/keyboards/mechkeys/alu84/rules.mk
diff --git a/keyboards/espectro/config.h b/keyboards/mechkeys/espectro/config.h
index e328f276eb..e328f276eb 100755
--- a/keyboards/espectro/config.h
+++ b/keyboards/mechkeys/espectro/config.h
diff --git a/keyboards/espectro/espectro.c b/keyboards/mechkeys/espectro/espectro.c
index 64494c49c1..64494c49c1 100755
--- a/keyboards/espectro/espectro.c
+++ b/keyboards/mechkeys/espectro/espectro.c
diff --git a/keyboards/espectro/espectro.h b/keyboards/mechkeys/espectro/espectro.h
index 98c930f8f5..98c930f8f5 100755
--- a/keyboards/espectro/espectro.h
+++ b/keyboards/mechkeys/espectro/espectro.h
diff --git a/keyboards/espectro/info.json b/keyboards/mechkeys/espectro/info.json
index cb34f6938c..cb34f6938c 100644
--- a/keyboards/espectro/info.json
+++ b/keyboards/mechkeys/espectro/info.json
diff --git a/keyboards/espectro/keymaps/default/keymap.c b/keyboards/mechkeys/espectro/keymaps/default/keymap.c
index 3b23fee190..3b23fee190 100755
--- a/keyboards/espectro/keymaps/default/keymap.c
+++ b/keyboards/mechkeys/espectro/keymaps/default/keymap.c
diff --git a/keyboards/espectro/keymaps/iso/keymap.c b/keyboards/mechkeys/espectro/keymaps/iso/keymap.c
index b001f9417d..b001f9417d 100755
--- a/keyboards/espectro/keymaps/iso/keymap.c
+++ b/keyboards/mechkeys/espectro/keymaps/iso/keymap.c
diff --git a/keyboards/espectro/keymaps/mac/config.h b/keyboards/mechkeys/espectro/keymaps/mac/config.h
index a18495221b..a18495221b 100644
--- a/keyboards/espectro/keymaps/mac/config.h
+++ b/keyboards/mechkeys/espectro/keymaps/mac/config.h
diff --git a/keyboards/espectro/keymaps/mac/keymap.c b/keyboards/mechkeys/espectro/keymaps/mac/keymap.c
index 9bd75d61d6..9bd75d61d6 100644
--- a/keyboards/espectro/keymaps/mac/keymap.c
+++ b/keyboards/mechkeys/espectro/keymaps/mac/keymap.c
diff --git a/keyboards/espectro/keymaps/mac/readme.md b/keyboards/mechkeys/espectro/keymaps/mac/readme.md
index fb62260181..fb62260181 100644
--- a/keyboards/espectro/keymaps/mac/readme.md
+++ b/keyboards/mechkeys/espectro/keymaps/mac/readme.md
diff --git a/keyboards/espectro/keymaps/mapdev/keymap.c b/keyboards/mechkeys/espectro/keymaps/mapdev/keymap.c
index 89d412b2dd..89d412b2dd 100644
--- a/keyboards/espectro/keymaps/mapdev/keymap.c
+++ b/keyboards/mechkeys/espectro/keymaps/mapdev/keymap.c
diff --git a/keyboards/espectro/keymaps/mikethetiger/keymap.c b/keyboards/mechkeys/espectro/keymaps/mikethetiger/keymap.c
index 30688ab5c4..30688ab5c4 100644
--- a/keyboards/espectro/keymaps/mikethetiger/keymap.c
+++ b/keyboards/mechkeys/espectro/keymaps/mikethetiger/keymap.c
diff --git a/keyboards/mechkeys/espectro/readme.md b/keyboards/mechkeys/espectro/readme.md
new file mode 100644
index 0000000000..fca7ad7308
--- /dev/null
+++ b/keyboards/mechkeys/espectro/readme.md
@@ -0,0 +1,15 @@
+# Espectro
+
+![Espectro](https://cdn.shopify.com/s/files/1/1697/5323/products/IMG_0162_53a5ca83-3ce5-4741-92e8-10f769cf5ee1_1024x1024.jpg?v=1540701787)
+
+A 96% keyboard made and sold by MECHKEYS [More info on MECHKEYS](https://mechkeys.ca).
+
+Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
+Hardware Supported: Espectro
+Hardware Availability: [MECHKEYS](https://mechkeys.ca)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechkeys/espectro:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/espectro/rules.mk b/keyboards/mechkeys/espectro/rules.mk
index ad15c847bd..ad15c847bd 100755
--- a/keyboards/espectro/rules.mk
+++ b/keyboards/mechkeys/espectro/rules.mk
diff --git a/keyboards/mechmini/mechmini.c b/keyboards/mechkeys/mechmini/mechmini.c
index 46e29ba3e9..46e29ba3e9 100644
--- a/keyboards/mechmini/mechmini.c
+++ b/keyboards/mechkeys/mechmini/mechmini.c
diff --git a/keyboards/mechkeys/mechmini/mechmini.h b/keyboards/mechkeys/mechmini/mechmini.h
new file mode 100644
index 0000000000..9420b3e161
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/mechmini.h
@@ -0,0 +1,25 @@
+/* Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+ * Copyright 2018 TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#if defined(KEYBOARD_mechkeys_mechmini_v1)
+# include "v1.h"
+#elif defined(KEYBOARD_mechkeys_mechmini_v2)
+# include "v2.h"
+#endif
diff --git a/keyboards/mechkeys/mechmini/readme.md b/keyboards/mechkeys/mechmini/readme.md
new file mode 100644
index 0000000000..f9c0264273
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/readme.md
@@ -0,0 +1,28 @@
+Mechmini
+========
+
+![mechmini](https://cdn.shopify.com/s/files/1/1697/5323/products/20495451_468333093530388_1648547540_o_grande.jpg?v=1510792821)
+
+A 40% compact ortholinear/staggered keyboard.
+
+Version 1 was originally bootmapper (ps2avrGB) and can be ported to QMK following the v1 readme (../mechmini/v1/readme.md). This version is no longer in production.
+
+Version 2 (Mechmini 2.0) was shipped powered by QMK [More info on MECHKEYS](https://mechkeys.ca).
+
+Keyboard Maintainer: QMK Community (version 1) & [TurboMech](https://github.com/TurboMech) (version 2 - aka Mechmini 2.0)
+
+Hardware Supported: Mechmini keyboard
+
+Hardware Availability: [MECHKEYS](https://mechkeys.ca/collections/keyboards/products/mechmini-2-0)
+
+Make example for this keyboard (after setting up your build environment), this will make the Mechmini 2.0 default keymap (split space) - please see v1 readme for v1 make instructions:
+
+ make mechkeys/mechmini:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+## Mechmini Notes
+
+There are 2 versions of the Mechmini keyboard. Please read the readme for the version you have for make instructions.
+
+
diff --git a/keyboards/mechkeys/mechmini/rules.mk b/keyboards/mechkeys/mechmini/rules.mk
new file mode 100644
index 0000000000..9d63d875eb
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = mechkeys/mechmini/v2
diff --git a/keyboards/lets_split_eh/.noci b/keyboards/mechkeys/mechmini/v1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/lets_split_eh/.noci
+++ b/keyboards/mechkeys/mechmini/v1/.noci
diff --git a/keyboards/mechmini/v1/config.h b/keyboards/mechkeys/mechmini/v1/config.h
index a64127f597..a64127f597 100644
--- a/keyboards/mechmini/v1/config.h
+++ b/keyboards/mechkeys/mechmini/v1/config.h
diff --git a/keyboards/mechmini/v1/info.json b/keyboards/mechkeys/mechmini/v1/info.json
index f48fddd066..f48fddd066 100644
--- a/keyboards/mechmini/v1/info.json
+++ b/keyboards/mechkeys/mechmini/v1/info.json
diff --git a/keyboards/mechmini/v1/keymaps/default/keymap.c b/keyboards/mechkeys/mechmini/v1/keymaps/default/keymap.c
index e0b746df9f..e0b746df9f 100644
--- a/keyboards/mechmini/v1/keymaps/default/keymap.c
+++ b/keyboards/mechkeys/mechmini/v1/keymaps/default/keymap.c
diff --git a/keyboards/mechmini/v1/keymaps/pitty/keymap.c b/keyboards/mechkeys/mechmini/v1/keymaps/pitty/keymap.c
index 7db2dc1836..7db2dc1836 100644
--- a/keyboards/mechmini/v1/keymaps/pitty/keymap.c
+++ b/keyboards/mechkeys/mechmini/v1/keymaps/pitty/keymap.c
diff --git a/keyboards/mechkeys/mechmini/v1/readme.md b/keyboards/mechkeys/mechmini/v1/readme.md
new file mode 100644
index 0000000000..d6b88d9c04
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/v1/readme.md
@@ -0,0 +1,19 @@
+# Mechmini V1
+
+A 40% ortholinear/staggered keyboard, that was originally bootmapper and can be ported to QMK following this readme. This version is no longer in production [More info on MECHKEYS](https://mechkeys.ca).
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Mechmini 1 PCB
+* Hardware Availability: Version 1 (Bootmapper) no longer in production [MECHKEYS](https://mechkeys.ca)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechkeys/mechmini/v1:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make mechkeys/mechmini/v1:default:flash
+
+**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechkeys/mechmini/v1/rules.mk b/keyboards/mechkeys/mechmini/v1/rules.mk
new file mode 100644
index 0000000000..a7d4a67a16
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/v1/rules.mk
@@ -0,0 +1,17 @@
+# MCU name
+MCU = atmega32a
+
+# Bootloader selection
+BOOTLOADER = bootloadhid
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+WS2812_DRIVER = i2c
diff --git a/keyboards/mechmini/v1/v1.c b/keyboards/mechkeys/mechmini/v1/v1.c
index ba0e095209..ba0e095209 100644
--- a/keyboards/mechmini/v1/v1.c
+++ b/keyboards/mechkeys/mechmini/v1/v1.c
diff --git a/keyboards/mechkeys/mechmini/v1/v1.h b/keyboards/mechkeys/mechmini/v1/v1.h
new file mode 100644
index 0000000000..07d1e683f7
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/v1/v1.h
@@ -0,0 +1,48 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "../mechmini.h"
+
+#define ___ KC_NO
+
+#define LAYOUT( \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K00, K01, K02, K05, K09, K0A \
+) \
+{ \
+ { K00, K01, K02, ___, ___, K05, ___, ___, ___, K09, K0A, ___ }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, ___ }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, ___ }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
+}
+
+#define LAYOUT_split_space( \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K00, K01, K02, K03, K06, K08, K09, K0A \
+) \
+{ \
+ { K00, K01, K02, K03, ___, ___, K06, ___, K08, K09, K0A, ___ }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, ___ }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, ___ }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
+}
diff --git a/keyboards/mechmini/v2/config.h b/keyboards/mechkeys/mechmini/v2/config.h
index 7936caef00..7936caef00 100755
--- a/keyboards/mechmini/v2/config.h
+++ b/keyboards/mechkeys/mechmini/v2/config.h
diff --git a/keyboards/mechmini/v2/info.json b/keyboards/mechkeys/mechmini/v2/info.json
index 1d0d727a3e..1d0d727a3e 100644
--- a/keyboards/mechmini/v2/info.json
+++ b/keyboards/mechkeys/mechmini/v2/info.json
diff --git a/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/2u_space_ortho/keymap.c
index 90bb2ddd60..90bb2ddd60 100644
--- a/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/2u_space_ortho/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/625_space/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/625_space/keymap.c
index 4344d6d2bc..4344d6d2bc 100755
--- a/keyboards/mechmini/v2/keymaps/625_space/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/625_space/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/arkag/config.h b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/config.h
index 966289459b..966289459b 100644
--- a/keyboards/mechmini/v2/keymaps/arkag/config.h
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/config.h
diff --git a/keyboards/mechmini/v2/keymaps/arkag/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/keymap.c
index 2c64c5aac0..2c64c5aac0 100644
--- a/keyboards/mechmini/v2/keymaps/arkag/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/arkag/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/rules.mk
index 735d573d73..735d573d73 100644
--- a/keyboards/mechmini/v2/keymaps/arkag/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/arkag/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/default/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/default/keymap.c
index dae1dc9fd6..dae1dc9fd6 100755
--- a/keyboards/mechmini/v2/keymaps/default/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/default/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/default/readme.md b/keyboards/mechkeys/mechmini/v2/keymaps/default/readme.md
index 093a7b084a..093a7b084a 100644
--- a/keyboards/mechmini/v2/keymaps/default/readme.md
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/default/readme.md
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/config.h
index 7adb68d347..7adb68d347 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/config.h
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/keymap.c
index fba582e1b7..fba582e1b7 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/readme.md
index e09e520131..e09e520131 100644
--- a/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/readme.md
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/rules.mk
index cf808a2b41..cf808a2b41 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_625_space/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/config.h
index 2f35530627..2f35530627 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/config.h
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/keymap.c
index 7ad2aa81e9..7ad2aa81e9 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/readme.md
index 34888fbb19..34888fbb19 100644
--- a/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/readme.md
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/rules.mk
index 7d50540f14..7d50540f14 100755
--- a/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/lbibass_split_space/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/ortho/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/ortho/keymap.c
index 31ccfa82a3..31ccfa82a3 100755
--- a/keyboards/mechmini/v2/keymaps/ortho/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/ortho/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/spacebarracecar/config.h b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/config.h
index 45dcbb04b5..45dcbb04b5 100644
--- a/keyboards/mechmini/v2/keymaps/spacebarracecar/config.h
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/config.h
diff --git a/keyboards/mechmini/v2/keymaps/spacebarracecar/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/keymap.c
index c0fb3695f9..c0fb3695f9 100644
--- a/keyboards/mechmini/v2/keymaps/spacebarracecar/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/spacebarracecar/readme.md b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/readme.md
index d4039713a5..d4039713a5 100644
--- a/keyboards/mechmini/v2/keymaps/spacebarracecar/readme.md
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/readme.md
diff --git a/keyboards/mechmini/v2/keymaps/spacebarracecar/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/rules.mk
index 82f1f96f64..82f1f96f64 100644
--- a/keyboards/mechmini/v2/keymaps/spacebarracecar/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/spacebarracecar/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/split_space/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/split_space/keymap.c
index 635b4eacb3..635b4eacb3 100755
--- a/keyboards/mechmini/v2/keymaps/split_space/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/split_space/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/split_space/readme.md b/keyboards/mechkeys/mechmini/v2/keymaps/split_space/readme.md
index 9c2dad396f..9c2dad396f 100644
--- a/keyboards/mechmini/v2/keymaps/split_space/readme.md
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/split_space/readme.md
diff --git a/keyboards/mechkeys/mechmini/v2/keymaps/via/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/via/keymap.c
new file mode 100644
index 0000000000..e77d9d8859
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho(
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
+
+ [1] = LAYOUT_ortho(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY),
+
+ [2] = LAYOUT_ortho(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_HOME, KC_END, KC_TRNS,
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_PGDN, KC_PGUP, KC_MPLY),
+
+ [3] = LAYOUT_ortho(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/bakeneko60/keymaps/via/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/bakeneko60/keymaps/via/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/via/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/wsturgiss/config.h b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/config.h
index 262c423cc4..262c423cc4 100755
--- a/keyboards/mechmini/v2/keymaps/wsturgiss/config.h
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/config.h
diff --git a/keyboards/mechmini/v2/keymaps/wsturgiss/keymap.c b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/keymap.c
index 218936a19b..218936a19b 100644
--- a/keyboards/mechmini/v2/keymaps/wsturgiss/keymap.c
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/keymap.c
diff --git a/keyboards/mechmini/v2/keymaps/wsturgiss/rules.mk b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/rules.mk
index c429a6486f..c429a6486f 100755
--- a/keyboards/mechmini/v2/keymaps/wsturgiss/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/keymaps/wsturgiss/rules.mk
diff --git a/keyboards/mechkeys/mechmini/v2/readme.md b/keyboards/mechkeys/mechmini/v2/readme.md
new file mode 100644
index 0000000000..8724f16a0f
--- /dev/null
+++ b/keyboards/mechkeys/mechmini/v2/readme.md
@@ -0,0 +1,22 @@
+Mechmini 2.0
+============
+
+A 40% compact ortholinear/staggered keyboard.
+
+Version 2 (Mechmini 2.0) was shipped powered by QMK [More info on MECHKEYS](https://mechkeys.ca).
+
+Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
+
+Hardware Supported: Mechmini 2.0 keyboard
+
+Hardware Availability: [MECHKEYS Mechmini 2.0](https://mechkeys.ca/collections/keyboards/products/mechmini-2-0)
+
+Make example for this keyboard (after setting up your build environment), this will make the Mechmini 2.0 default keymap (split space):
+
+ make mechkeys/mechmini/v2:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+## Mechmini Notes
+
+There are 2 versions of the Mechmini keyboard. Please read the readme for the version you have for make instructions.
diff --git a/keyboards/mechmini/v2/rules.mk b/keyboards/mechkeys/mechmini/v2/rules.mk
index 4f6e666b62..4f6e666b62 100755
--- a/keyboards/mechmini/v2/rules.mk
+++ b/keyboards/mechkeys/mechmini/v2/rules.mk
diff --git a/keyboards/mechmini/v2/v2.c b/keyboards/mechkeys/mechmini/v2/v2.c
index caf7c6f0f2..caf7c6f0f2 100755
--- a/keyboards/mechmini/v2/v2.c
+++ b/keyboards/mechkeys/mechmini/v2/v2.c
diff --git a/keyboards/mechmini/v2/v2.h b/keyboards/mechkeys/mechmini/v2/v2.h
index a0a620675e..a0a620675e 100755
--- a/keyboards/mechmini/v2/v2.h
+++ b/keyboards/mechkeys/mechmini/v2/v2.h
diff --git a/keyboards/mechlovin/mechlovin9/rev1/rules.mk b/keyboards/mechlovin/mechlovin9/rev1/rules.mk
index 1333470e59..927204fc74 100644
--- a/keyboards/mechlovin/mechlovin9/rev1/rules.mk
+++ b/keyboards/mechlovin/mechlovin9/rev1/rules.mk
@@ -2,6 +2,9 @@
MCU = STM32F303
BOARD = QMK_PROTON_C
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/mechlovin/olly/jf/keymaps/via/config.h b/keyboards/mechlovin/olly/jf/keymaps/via/config.h
index f330025a00..82c2e51eb9 100644
--- a/keyboards/mechlovin/olly/jf/keymaps/via/config.h
+++ b/keyboards/mechlovin/olly/jf/keymaps/via/config.h
@@ -17,6 +17,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1607
-#define DYNAMIC_KEYMAP_LAYER_COUNT 6
-
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c b/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c
index c90eeb1830..18ac685abc 100644
--- a/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c
+++ b/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c
@@ -40,29 +40,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [4] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [5] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, 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/mechlovin/olly/jf/rules.mk b/keyboards/mechlovin/olly/jf/rules.mk
index c0c9b2d7ea..2fafe64f12 100644
--- a/keyboards/mechlovin/olly/jf/rules.mk
+++ b/keyboards/mechlovin/olly/jf/rules.mk
@@ -5,7 +5,7 @@ MCU = atmega32a
F_CPU = 16000000
# Bootloader selection
-BOOTLOADER = USBasp
+BOOTLOADER = usbasploader
# Build Options
# change yes to no to disable
@@ -21,4 +21,4 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
-SRC += matrix.c \ No newline at end of file
+SRC += matrix.c
diff --git a/keyboards/mechmini/mechmini.h b/keyboards/mechmini/mechmini.h
deleted file mode 100644
index cbd405285f..0000000000
--- a/keyboards/mechmini/mechmini.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
- * Copyright 2018 TurboMech /u/TurboMech <discord> @A9entOran9e#6134
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "quantum.h"
-
-#if defined(KEYBOARD_mechmini_v1)
-# include "v1.h"
-#elif defined(KEYBOARD_mechmini_v2)
-# include "v2.h"
-#endif
diff --git a/keyboards/mechmini/readme.md b/keyboards/mechmini/readme.md
deleted file mode 100644
index fc43eb1248..0000000000
--- a/keyboards/mechmini/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-Mechmini
-========
-
-![mechmini](https://cdn.shopify.com/s/files/1/1697/5323/products/20495451_468333093530388_1648547540_o_grande.jpg?v=1510792821)
-
-A 40% compact ortholinear/staggered keyboard.
-
-Version 1 was originally bootmapper (ps2avrGB) and can be ported to QMK following the v1 readme (../mechmini/v1/readme.md). This version is no longer in production.
-
-Version 2 (Mechmini 2.0) was shipped powered by QMK [More info on MECHKEYS](https://mechkeys.ca).
-
-Keyboard Maintainer: QMK Community (version 1) & [TurboMech](https://github.com/TurboMech) (version 2 - aka Mechmini 2.0)
-
-Hardware Supported: Mechmini keyboard
-
-Hardware Availability: [MECHKEYS](https://mechkeys.ca/collections/keyboards/products/mechmini-2-0)
-
-Make example for this keyboard (after setting up your build environment), this will make the Mechmini 2.0 default keymap (split space) - please see v1 readme for v1 make instructions:
-
- make mechmini:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-## Mechmini Notes
-
-There are 2 versions of the Mechmini keyboard. Please read the readme for the version you have for make instructions.
-
-
diff --git a/keyboards/mechmini/rules.mk b/keyboards/mechmini/rules.mk
deleted file mode 100644
index 71dae51277..0000000000
--- a/keyboards/mechmini/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = mechmini/v2
diff --git a/keyboards/mechmini/v1/readme.md b/keyboards/mechmini/v1/readme.md
deleted file mode 100644
index 902948c24d..0000000000
--- a/keyboards/mechmini/v1/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Mechmini V1
-
-A 40% ortholinear/staggered keyboard, that was originally bootmapper and can be ported to QMK following this readme. This version is no longer in production [More info on MECHKEYS](https://mechkeys.ca).
-
-* Keyboard Maintainer: QMK Community
-* Hardware Supported: Mechmini 1 PCB
-* Hardware Availability: Version 1 (Bootmapper) no longer in production [MECHKEYS](https://mechkeys.ca)
-
-Make example for this keyboard (after setting up your build environment):
-
- make mechmini/v1:default
-
-Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-
- make mechmini/v1:default:flash
-
-**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechmini/v1/rules.mk b/keyboards/mechmini/v1/rules.mk
deleted file mode 100644
index 6905e73c27..0000000000
--- a/keyboards/mechmini/v1/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# MCU name
-MCU = atmega32a
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-COMMAND_ENABLE = yes
-BACKLIGHT_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-WS2812_DRIVER = i2c
diff --git a/keyboards/mechmini/v1/v1.h b/keyboards/mechmini/v1/v1.h
deleted file mode 100644
index 526f12e410..0000000000
--- a/keyboards/mechmini/v1/v1.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "mechmini.h"
-
-#define ___ KC_NO
-
-#define LAYOUT( \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
- K00, K01, K02, K05, K09, K0A \
-) \
-{ \
- { K00, K01, K02, ___, ___, K05, ___, ___, ___, K09, K0A, ___ }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, ___ }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, ___ }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
-}
-
-#define LAYOUT_split_space( \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
- K00, K01, K02, K03, K06, K08, K09, K0A \
-) \
-{ \
- { K00, K01, K02, K03, ___, ___, K06, ___, K08, K09, K0A, ___ }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, ___ }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, ___ }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
-}
diff --git a/keyboards/mechmini/v2/keymaps/via/keymap.c b/keyboards/mechmini/v2/keymaps/via/keymap.c
deleted file mode 100644
index 7c7c2103c0..0000000000
--- a/keyboards/mechmini/v2/keymaps/via/keymap.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT_ortho(
- KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
-
- [1] = LAYOUT_ortho(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, M(1), M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY),
-
- [2] = LAYOUT_ortho(
- KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
- KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_HOME, KC_END, KC_TRNS,
- RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_PGDN, KC_PGUP, KC_MPLY),
-
- [3] = LAYOUT_ortho(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- 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/mechmini/v2/readme.md b/keyboards/mechmini/v2/readme.md
deleted file mode 100644
index fdc9fef9bf..0000000000
--- a/keyboards/mechmini/v2/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-Mechmini 2.0
-============
-
-A 40% compact ortholinear/staggered keyboard.
-
-Version 2 (Mechmini 2.0) was shipped powered by QMK [More info on MECHKEYS](https://mechkeys.ca).
-
-Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
-
-Hardware Supported: Mechmini 2.0 keyboard
-
-Hardware Availability: [MECHKEYS Mechmini 2.0](https://mechkeys.ca/collections/keyboards/products/mechmini-2-0)
-
-Make example for this keyboard (after setting up your build environment), this will make the Mechmini 2.0 default keymap (split space):
-
- make mechmini/v2:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-## Mechmini Notes
-
-There are 2 versions of the Mechmini keyboard. Please read the readme for the version you have for make instructions.
diff --git a/keyboards/meira/featherble/rules.mk b/keyboards/meira/featherble/rules.mk
deleted file mode 100644
index d3e985e8c2..0000000000
--- a/keyboards/meira/featherble/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# Processor frequency
-F_CPU = 8000000
-
-BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
diff --git a/keyboards/meira/keymaps/cole/rules.mk b/keyboards/meira/keymaps/cole/rules.mk
deleted file mode 100644
index 8f8d53e57a..0000000000
--- a/keyboards/meira/keymaps/cole/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-AUDIO_ENABLE = yes # Audio output on port C6
-EXTRAFLAGS+=-flto # -4-7k \ No newline at end of file
diff --git a/keyboards/meira/keymaps/grahampheath/rules.mk b/keyboards/meira/keymaps/grahampheath/rules.mk
deleted file mode 100644
index b3b1980eb1..0000000000
--- a/keyboards/meira/keymaps/grahampheath/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-AUDIO_ENABLE = yes # Audio output on port C6
-EXTRAFLAGS+=-flto # -4-7k
-MOUSEKEY_ENABLE = no # Mouse keys(-47kb)
-ISSI_ENABLE = no
-BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/meira/matrix.c b/keyboards/meira/matrix.c
deleted file mode 100644
index ae1ae5ce9d..0000000000
--- a/keyboards/meira/matrix.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2017 Cole Markham <cole@ccmcomputing.net>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "meira.h"
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "config.h"
-#include "timer.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-#if (DEBOUNCE > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const uint8_t col_pins[4] = MATRIX_COL_PINS_SCANNED;
-//static const uint8_t lrow_pins[MATRIX_ROWS] = LED_ROW_PINS;
-//static const uint8_t lcol_pins[4] = LED_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-static void init_rows(void);
-//static void init_lcols(void);
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
-static void unselect_cols(void);
-static void select_col(uint8_t col);
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
- unselect_cols();
- init_rows();
-// init_lcols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCE > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix, current_col);
-# endif
-
- }
-
-# if (DEBOUNCE > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCE)) {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
- matrix_scan_quantum();
- return ret;
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_bin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selection to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_cols();
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
-#ifdef FLIPPED_BOARD
- col = MATRIX_COLS - col - 1;
-#endif
- for(uint8_t x = 0; x < 4; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- if (((col >> x) & 0x1) == 1){
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HIGH
- } else {
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
- }
- }
-}
-
-static void unselect_cols(void)
-{
- // FIXME This really needs to use the global enable on the decoder, because currently this sets the value to col1
- for(uint8_t x = 0; x < 4; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
- }
-}
diff --git a/keyboards/meira/readme.md b/keyboards/meira/readme.md
deleted file mode 100644
index 716eb7445d..0000000000
--- a/keyboards/meira/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Meira
-
-![Meira](https://i.imgur.com/kF4MFlWh.jpeg)
-
-A 4x12 ortholinear low-profile keyboard.
-
-* Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham)
-* Hardware Supported: Meira/ProMicro, Meira/FeatherBLE
-* Hardware Availability: [WoodKeys.click](https://woodkeys.click/meira)
-
-Two controllers are supported: the Pro Micro, and the Adafruit Feather BLE 32u4. Support for each is defined as a hardware revision subfolder in QMK. Main differences include processor frequencies and matrix pinouts.
-
-Make examples for this keyboard (after setting up your build environment):
-
- make meira/featherble:default # for Feather BLE 32u4 controllers
- make meira/promicro:default # for Pro Micro controllers
-
-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).
-
-Both the Pro Micro and the Feather BLE use the Caterina bootloader, which is typically programmed using avrdude.
-
-## Matrix
-
-In order to have enough pins for the matrix and other functions, a custom matrix is implemented using a demultiplexer to scan the columns. Since the demux is active low, the diodes must be oriented with the cathode connected to the demux pin. When looking at the bottom of the board with the controller at the top right, the cathode mark on the diode should be toward the left.
-
-## LED Controller
-
-The in-switch LEDs are driven by an ISSI LED controller (IS31FL3731). The micro controller communicates with this chip using I2C. Individual LED control is possible, but currently only general backlighting support is implemented. This functionality is located in lighting.c, issi.c, and TWILib.c.
diff --git a/keyboards/meira/rules.mk b/keyboards/meira/rules.mk
deleted file mode 100644
index cdd0acb824..0000000000
--- a/keyboards/meira/rules.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality, also set ISSI_ENABLE below for Meira
-BACKLIGHT_DRIVER = custom
-ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-CUSTOM_MATRIX = yes
-
-#ifeq ($(strip $(ISSI_ENABLE)), yes)
-# TMK_COMMON_DEFS += -DISSI_ENABLE
-#endif
-
-#ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
-# TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-#endif
-SRC += matrix.c TWIlib.c issi.c lighting.c
-
-DEFAULT_FOLDER = meira/promicro
-LAYOUTS = ortho_4x12
diff --git a/keyboards/meishi/readme.md b/keyboards/meishi/readme.md
deleted file mode 100644
index 99421ed8d3..0000000000
--- a/keyboards/meishi/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Meishi - The micro macro keyboard
-
-_Meishi_ means name cards.
-
-![meishi](https://raw.githubusercontent.com/Biacco42/meishi/readme/readme_image/P1210037.JPG)
-
-Only four keys keyboard for self made keyboard beginners.
-
-Keyboard Maintainer: [Biacco42](https://github.com/biacco42)
-Hardware Supported: [Meishi keyboard PCB](https://github.com/Biacco42/meishi), Pro Micro supported
-Hardware Availability: [Tanoshi life - Booth](https://biacco42.booth.pm/)
-
-Make example for this keyboard (after setting up your build environment):
-
-```
-$ make meishi:default:avrdude
-```
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/meishi2/readme.md b/keyboards/meishi2/readme.md
deleted file mode 100644
index d80ec44184..0000000000
--- a/keyboards/meishi2/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# meishi2
-
-![meishi2](https://i.imgur.com/lG5iI3m.jpg)
-
-meishi2 - The better micro macro keyboard
-
-Keyboard Maintainer: [Biacco42](https://github.com/Biacco42)
-Hardware Supported: The PCBs, controllers supported
-Hardware Availability: [links to where you can find this hardware](https://github.com/Biacco42/meishi2)
-
-Make example for this keyboard (after setting up your build environment):
-
- make meishi2:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/minidox/minidox.h b/keyboards/minidox/minidox.h
deleted file mode 100644
index 5d5ca9f501..0000000000
--- a/keyboards/minidox/minidox.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_minidox_rev1
- #include "rev1.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/minidox/readme.md b/keyboards/minidox/readme.md
deleted file mode 100644
index ec52e1f757..0000000000
--- a/keyboards/minidox/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# MiniDox
-
-![MiniDox](http://i.imgur.com/iWb3yO0.jpg)
-
-A compact version of the ErgoDox
-
-* Keyboard Maintainer: That-Canadian
-* Hardware Supported: MiniDox PCB rev1 Pro Micro
-
-Make example for this keyboard (after setting up your build environment):
-
- make minidox/rev1:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make minidox/rev1:default:flash
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-## Build Guide
-
-A build guide for putting together the MiniDox v1 can be found here: [MiniDox Build Log / Guide](http://imgur.com/a/vImo6)
-
-
-## Choosing which board to plug the USB cable into (choosing Master)
-
-Because the two boards are identical, the firmware has logic to differentiate the left and right board. It uses two strategies to figure things out, [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) or [by define](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-define). See [setting-handedness](https://docs.qmk.fm/#/config_options?id=setting-handedness) for more information.
diff --git a/keyboards/minidox/rules.mk b/keyboards/minidox/rules.mk
deleted file mode 100644
index 69d7bcced4..0000000000
--- a/keyboards/minidox/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = minidox/rev1
diff --git a/keyboards/minim/readme.md b/keyboards/minim/readme.md
deleted file mode 100644
index 95820c4db9..0000000000
--- a/keyboards/minim/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# minim
-
-![](https://raw.githubusercontent.com/matthewdias/minim/main/layout.png)
-
-A symmetrical 50% keyboard.
-
-* Keyboard Maintainer: matthewdias
-* Hardware Supported: minim PCB
-* Hardware Availability: [GitHub](https://github.com/matthewdias/minim)
-
-To reset the keyboard into bootloader mode, press the reset switch on the underside.
-
-Make example for this keyboard (after setting up your build environment):
-
- make minim:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make minim:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mio/readme.md b/keyboards/mio/readme.md
deleted file mode 100644
index 6ae4fd049f..0000000000
--- a/keyboards/mio/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# MIO
-
-![MIO](https://keys.recompile.net/images/mio-01@600w.jpg)
-
-High-end custom gaming keyboard.
-
-* Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
-* Hardware Supported: Original MIO PCB
-* Hardware Availability: https://keys.recompile.net/projects/mio/
-
-Make example for this keyboard (after setting up your build environment):
-
- make mio:default
-
-Flashing example for this keyboard:
-
- make mio: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 Mode
-
-In order to flash the firmware, you need to put the keyboard into bootloader mode. To enable the bootloader mode, press the reset button (SW1) on the underside of the PCB.
diff --git a/keyboards/mitosis/config.h b/keyboards/mitosis/config.h
index 94e84e680e..2c72eed5f2 100644
--- a/keyboards/mitosis/config.h
+++ b/keyboards/mitosis/config.h
@@ -56,12 +56,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/mitosis/matrix.c b/keyboards/mitosis/matrix.c
index 71c372a3ce..a92c3e8431 100644
--- a/keyboards/mitosis/matrix.c
+++ b/keyboards/mitosis/matrix.c
@@ -15,80 +15,21 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-void matrix_init(void) {
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
- matrix_init_quantum();
- serial_init();
+void matrix_init_custom(void) {
+ uart_init(1000000);
}
-uint8_t matrix_scan(void)
-{
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
uint32_t timeout = 0;
+ bool changed = false;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[11] = {0};
@@ -98,58 +39,27 @@ uint8_t matrix_scan(void)
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while (!uart_available()) {
timeout++;
- if (timeout > 10000){
+ if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
+ if (uart_data[10] == 0xE0) {
//shifting and transferring the keystates to the QMK matrix variable
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 5;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
}
}
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
+ return changed;
}
diff --git a/keyboards/mitosis/rules.mk b/keyboards/mitosis/rules.mk
index 6c7aa30d88..0a8a31e7dd 100644
--- a/keyboards/mitosis/rules.mk
+++ b/keyboards/mitosis/rules.mk
@@ -8,14 +8,17 @@ BOOTLOADER = caterina
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-UNICODE_ENABLE = yes # Unicode
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes
+CUSTOM_MATRIX = lite
-# # project specific files
-SRC += matrix.c serial_uart.c
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/mode/m65s/rules.mk b/keyboards/mode/m65s/rules.mk
index ed43a7bc77..bb3ebaee28 100644
--- a/keyboards/mode/m65s/rules.mk
+++ b/keyboards/mode/m65s/rules.mk
@@ -1,6 +1,9 @@
# MCU name
MCU = STM32F401
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Build Options
# change yes to no to disable
#
@@ -14,6 +17,6 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
EEPROM_DRIVER = i2c
+
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE -DDEBUG_EEPROM_OUTPUT=TRUE
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/keyboards/model_v/readme.md b/keyboards/model_v/readme.md
deleted file mode 100644
index 17d12d8108..0000000000
--- a/keyboards/model_v/readme.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# model-v
-
-![](https://i.imgur.com/uqL3HSWl.png)
-
-A minivan case compatible PCB with flex cuts.
-
-- Keyboard Maintainer: matthewdias
-- Hardware Supported: model-v pcb
-
-To reset the keyboard into bootloader mode, press the reset switch on the underside.
-
-Make example for this keyboard (after setting up your build environment):
-
- make model_v:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make model_v:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/molecule/rules.mk b/keyboards/molecule/rules.mk
index c4e48dfa15..8573995efb 100755
--- a/keyboards/molecule/rules.mk
+++ b/keyboards/molecule/rules.mk
@@ -19,5 +19,6 @@ AUDIO_ENABLE = no # Audio output
# Add trackball support
POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = custom
SRC += adns.c
QUANTUM_LIB_SRC += spi_master.c
diff --git a/keyboards/montex/montex.c b/keyboards/montex/montex.c
deleted file mode 100644
index 4d3ecb1860..0000000000
--- a/keyboards/montex/montex.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2021 NachoxMacho
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
-*/
-
-#include "montex.h"
diff --git a/keyboards/montex/readme.md b/keyboards/montex/readme.md
deleted file mode 100644
index 8c4a7226ce..0000000000
--- a/keyboards/montex/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# IDOBAO MONTEX
-
-A hotswap numpad from IDOBAO.
-
-## Support:
-
-* Keyboard Maintainer: [NachoxMacho](https://github.com/NachoxMacho)
-* Hardware Supported: IDOBAO MONTEX
-* Hardware Availability: [IDOBAO](https://www.idobao.net/products/ldobao-montex-pad-hot-swappable-mechanical-keyboard-kit)
-
-
-To jump to the bootloader, the default in the repository and stock on the board is to hold the 4th key on the top row and tap the first key in the top row.
-On some stock keyboard firmware, the top and second from the top row pins have been reversed so you may need to press those keys on the second row.
-If none of that works, there is a reset button on the PCB underside which you can access by removing the back plate.
-Then press the button labeled SW2 located between the 2 upper LEDs.
-
-Make example for this keyboard (after setting up your build environment):
-
- make montex:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/moon/matrix.c b/keyboards/moon/matrix.c
index 24b4d49560..0615b60ad3 100644
--- a/keyboards/moon/matrix.c
+++ b/keyboards/moon/matrix.c
@@ -158,10 +158,12 @@ static void select_row(uint8_t row) {
}
static uint16_t read_cols(void) {
- uint16_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
- uint16_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
+ uint8_t state_1 = 0;
+ uint8_t state_2 = 0;
+ pca9555_readPins(IC2, PCA9555_PORT0, &state_1);
+ pca9555_readPins(IC2, PCA9555_PORT1, &state_2);
- uint16_t state = ((state_1 & PORT0_COLS_MASK) << 3) | ((state_2 & PORT1_COLS_MASK));
+ uint16_t state = (((uint16_t)state_1 & PORT0_COLS_MASK) << 3) | (((uint16_t)state_2 & PORT1_COLS_MASK));
// A low pin indicates an active column
return (~state) & COLS_MASK;
diff --git a/keyboards/mschwingen/modelm/matrix.c b/keyboards/mschwingen/modelm/matrix.c
index ffc1284ead..7ea20b5a11 100644
--- a/keyboards/mschwingen/modelm/matrix.c
+++ b/keyboards/mschwingen/modelm/matrix.c
@@ -24,8 +24,6 @@
#include "print.h"
#include "modelm.h"
-#define DEBUG 0
-
#define SPI_TIMEOUT 100
/* Keyboard Matrix Assignments */
@@ -62,10 +60,9 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
row_data = spi_read() << 8;
row_data |= spi_read();
-#if DEBUG
- print_hex8(~row_data);
- uprint(" ");
-#endif
+ debug_hex8(~row_data);
+ dprint(" ");
+
// For each row...
for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
// Store last value of row prior to reading
@@ -105,9 +102,8 @@ void matrix_init_custom(void) {
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool changed = false;
-#if DEBUG
- uprint("\r\nScan: ");
-#endif
+ dprint("\r\nScan: ");
+
// Set col, read rows
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
changed |= read_rows_on_col(current_matrix, current_col);
diff --git a/keyboards/splitreus62/config.h b/keyboards/nacly/splitreus62/config.h
index d8e67661bd..d8e67661bd 100644
--- a/keyboards/splitreus62/config.h
+++ b/keyboards/nacly/splitreus62/config.h
diff --git a/keyboards/splitreus62/info.json b/keyboards/nacly/splitreus62/info.json
index a9f9b540a9..a9f9b540a9 100644
--- a/keyboards/splitreus62/info.json
+++ b/keyboards/nacly/splitreus62/info.json
diff --git a/keyboards/splitreus62/keymaps/default/keymap.c b/keyboards/nacly/splitreus62/keymaps/default/keymap.c
index 0137b7e3d9..0137b7e3d9 100644
--- a/keyboards/splitreus62/keymaps/default/keymap.c
+++ b/keyboards/nacly/splitreus62/keymaps/default/keymap.c
diff --git a/keyboards/splitreus62/keymaps/scheiklp/config.h b/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h
index 04af418d8f..04af418d8f 100644
--- a/keyboards/splitreus62/keymaps/scheiklp/config.h
+++ b/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h
diff --git a/keyboards/splitreus62/keymaps/scheiklp/keymap.c b/keyboards/nacly/splitreus62/keymaps/scheiklp/keymap.c
index b192e357f0..b192e357f0 100644
--- a/keyboards/splitreus62/keymaps/scheiklp/keymap.c
+++ b/keyboards/nacly/splitreus62/keymaps/scheiklp/keymap.c
diff --git a/keyboards/splitreus62/keymaps/scheiklp/rules.mk b/keyboards/nacly/splitreus62/keymaps/scheiklp/rules.mk
index cbfc44e1bd..cbfc44e1bd 100644
--- a/keyboards/splitreus62/keymaps/scheiklp/rules.mk
+++ b/keyboards/nacly/splitreus62/keymaps/scheiklp/rules.mk
diff --git a/keyboards/nacly/splitreus62/readme.md b/keyboards/nacly/splitreus62/readme.md
new file mode 100644
index 0000000000..414b507d97
--- /dev/null
+++ b/keyboards/nacly/splitreus62/readme.md
@@ -0,0 +1,13 @@
+# splitreus62
+
+A split version of the [Atreus62](https://github.com/profet23/atreus62) by Profet23, which itself is based on Phil Hagelberg's [Atreus](https://github.com/technomancy/atreus). You can copy keymaps from Atreus62 and use them with this keyboard.
+
+* Keyboard Maintainer: [NaCly](https://github.com/Na-Cly)
+* Hardware Supported: splitreus62 PCBs, Pro Micro
+* Hardware Availability: https://github.com/Na-Cly/splitreus62
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nacly/splitreus62:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/splitreus62/rules.mk b/keyboards/nacly/splitreus62/rules.mk
index d585e3b4b3..d585e3b4b3 100644
--- a/keyboards/splitreus62/rules.mk
+++ b/keyboards/nacly/splitreus62/rules.mk
diff --git a/keyboards/splitreus62/splitreus62.c b/keyboards/nacly/splitreus62/splitreus62.c
index d6ea3f9135..d6ea3f9135 100644
--- a/keyboards/splitreus62/splitreus62.c
+++ b/keyboards/nacly/splitreus62/splitreus62.c
diff --git a/keyboards/splitreus62/splitreus62.h b/keyboards/nacly/splitreus62/splitreus62.h
index bc6c2a9131..bc6c2a9131 100644
--- a/keyboards/splitreus62/splitreus62.h
+++ b/keyboards/nacly/splitreus62/splitreus62.h
diff --git a/keyboards/ua62/config.h b/keyboards/nacly/ua62/config.h
index 492bba93e8..492bba93e8 100644
--- a/keyboards/ua62/config.h
+++ b/keyboards/nacly/ua62/config.h
diff --git a/keyboards/ua62/info.json b/keyboards/nacly/ua62/info.json
index 4090b43d11..4090b43d11 100644
--- a/keyboards/ua62/info.json
+++ b/keyboards/nacly/ua62/info.json
diff --git a/keyboards/ua62/keymaps/default/keymap.c b/keyboards/nacly/ua62/keymaps/default/keymap.c
index 5488fdfdc1..5488fdfdc1 100644
--- a/keyboards/ua62/keymaps/default/keymap.c
+++ b/keyboards/nacly/ua62/keymaps/default/keymap.c
diff --git a/keyboards/nacly/ua62/readme.md b/keyboards/nacly/ua62/readme.md
new file mode 100644
index 0000000000..cb4b870bcd
--- /dev/null
+++ b/keyboards/nacly/ua62/readme.md
@@ -0,0 +1,14 @@
+# UA62
+
+* A Universal pcb for the atreus62
+* atreus62 by profet23
+* Original atreus by Phil Hagelberg
+* Keyboard Maintainer: [NaCly](https://github.com/na-cly)
+* Hardware Supported: UA62 PCB
+* Hardware Availability: https://github.com/na-cly/UA62 (Order PCBS)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nacly/ua62:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ua62/rules.mk b/keyboards/nacly/ua62/rules.mk
index 33d28b3a89..33d28b3a89 100644
--- a/keyboards/ua62/rules.mk
+++ b/keyboards/nacly/ua62/rules.mk
diff --git a/keyboards/ua62/ua62.c b/keyboards/nacly/ua62/ua62.c
index cac45f3fbf..cac45f3fbf 100644
--- a/keyboards/ua62/ua62.c
+++ b/keyboards/nacly/ua62/ua62.c
diff --git a/keyboards/ua62/ua62.h b/keyboards/nacly/ua62/ua62.h
index 4509bbff3d..4509bbff3d 100644
--- a/keyboards/ua62/ua62.h
+++ b/keyboards/nacly/ua62/ua62.h
diff --git a/keyboards/nafuda/readme.md b/keyboards/nafuda/readme.md
deleted file mode 100644
index 73007ed01e..0000000000
--- a/keyboards/nafuda/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# nafuda
-
-![nafuda](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190608/20190608024901.jpg)
-
-This is 7 keys cursor macropad.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: Nafuda PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271706)
-
-Make example for this keyboard (after setting up your build environment):
-
- make nafuda:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/nafuda-build-guide)
diff --git a/keyboards/naiping/np64/readme.md b/keyboards/naiping/np64/readme.md
deleted file mode 100644
index 8e85d79de3..0000000000
--- a/keyboards/naiping/np64/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# NP_64
-
-![NP_64](https://i.imgur.com/DzLy87M.png)
-
-A 60% keyboard based on STM32f303
-
-* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) (https://weirdo-f.github.io)
-* Hardware Supported: NP_64
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make naiping/np64:default
-
-The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naiping/nphhkb/readme.md b/keyboards/naiping/nphhkb/readme.md
deleted file mode 100644
index 47ad9dafc3..0000000000
--- a/keyboards/naiping/nphhkb/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# NP_hhkb
-
-![NP_hhkb](https://i.imgur.com/XnA4qVU.png)
-
-A 60% keyboard based on STM32f303
-
-* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) (https://weirdo-f.github.io)
-* Hardware Supported: NP_hhkb
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make naiping/nphhkb:default
-
-The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naiping/npminila/readme.md b/keyboards/naiping/npminila/readme.md
deleted file mode 100644
index 335e12508d..0000000000
--- a/keyboards/naiping/npminila/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# NP_minila
-
-![NP_minila](https://i.imgur.com/Cuy5W1H.png)
-
-A 60% keyboard based on STM32f303
-
-* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
-* Hardware Supported: NP_minila
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make naiping/npminila:default
-
-The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naked48/naked48.h b/keyboards/naked48/naked48.h
deleted file mode 100644
index e210cf0f57..0000000000
--- a/keyboards/naked48/naked48.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2021 Salicylic_Acid
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_naked48_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/naked48/readme.md b/keyboards/naked48/readme.md
deleted file mode 100644
index bb16571efd..0000000000
--- a/keyboards/naked48/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# naked48
-
-![naked48](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190326/20190326015949.jpg)
-
-This is 48 keys modification Ortholinear keyboard.
-
-Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-Hardware Supported: Naked60BMP PCB, Pro Micro
-Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271568)
-
-Make example for this keyboard (after setting up your build environment):
-
- make naked48:default:avrdude
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked48led-build-guide)
-[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked48)
diff --git a/keyboards/naked48/rules.mk b/keyboards/naked48/rules.mk
deleted file mode 100644
index 6e848a2815..0000000000
--- a/keyboards/naked48/rules.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# 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 = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-RGB_MATRIX_ENABLE = no
-RGB_MATRIX_DRIVER = WS2812
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = naked48/rev1
diff --git a/keyboards/naked60/naked60.h b/keyboards/naked60/naked60.h
deleted file mode 100644
index 4952b6b076..0000000000
--- a/keyboards/naked60/naked60.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2021 Salicylic_Acid
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_naked60_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/naked60/readme.md b/keyboards/naked60/readme.md
deleted file mode 100644
index 60bb164377..0000000000
--- a/keyboards/naked60/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# naked60
-
-![naked60](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190530/20190530040355.jpg)
-
-This is 60 keys modification Ortholinear keyboard.
-
-Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-Hardware Supported: Naked60BMP PCB, Pro Micro
-Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1360780)
-
-Make example for this keyboard (after setting up your build environment):
-
- make naked60:default:avrdude
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked60bmp-build-guide)
-[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked60)
diff --git a/keyboards/naked60/rules.mk b/keyboards/naked60/rules.mk
deleted file mode 100644
index 46aef17c7a..0000000000
--- a/keyboards/naked60/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# 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
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = naked60/rev1
diff --git a/keyboards/naked64/naked64.h b/keyboards/naked64/naked64.h
deleted file mode 100644
index a131440118..0000000000
--- a/keyboards/naked64/naked64.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_naked64_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/naked64/readme.md b/keyboards/naked64/readme.md
deleted file mode 100644
index 403e5cf4ae..0000000000
--- a/keyboards/naked64/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# naked64
-
-![naked64](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190627/20190627022840.jpg)
-
-This is 64 keys modification Ortholinear keyboard.
-
-Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-Hardware Supported: Naked64SF PCB, Pro Micro
-Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1418693)
-
-Make example for this keyboard (after setting up your build environment):
-
- make naked64: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).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked64SF-build-guide)
-[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked64)
diff --git a/keyboards/naked64/rules.mk b/keyboards/naked64/rules.mk
deleted file mode 100644
index 7de80383e1..0000000000
--- a/keyboards/naked64/rules.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-USE_I2C = no
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = naked64/rev1
diff --git a/keyboards/namecard2x4/readme.md b/keyboards/namecard2x4/readme.md
deleted file mode 100644
index ec98bc6736..0000000000
--- a/keyboards/namecard2x4/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# namecard2x4
-
-日本式名刺サイズのキーボードです(55x91mm)。
-Kailh PCB SocketとWS2812/SK6812に対応しています。
-
-This keyboard is Japanese namecard size(55x91mm) keyboard.
-
-namecard2x4 has 8 switch and kailh PCB socket.
-
-![namecard2x4](https://i.imgur.com/Bi9SV9A.jpg)
-
-![namecard2x4 with case](https://i.imgur.com/yTv1vSz.jpg)
-
-
-
-Keyboard Maintainer: [takashiski](https://github.com/takashiski)
-
-
-Make example for this keyboard (after setting up your build environment):
-
- make namecard2x4:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
diff --git a/keyboards/namecard2x4/rules.mk b/keyboards/namecard2x4/rules.mk
deleted file mode 100644
index b1f04b15ec..0000000000
--- a/keyboards/namecard2x4/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-
-#RGBLIGHT_ENABLE = yes # uncomment if you want addressable led strips
-
-DEFAULT_FOLDER = namecard2x4/rev2
diff --git a/keyboards/nebula12/readme.md b/keyboards/nebula12/readme.md
deleted file mode 100755
index 3a68d0a97d..0000000000
--- a/keyboards/nebula12/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Nebula65
-
-This is a standard fixed layout 12 key PCB. It supports VIA, full per-key RGB and underglow RGB.
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A 65% keyboard with STM32F072CB
-* Hardware Availability: https://spaceholdings.net/
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nebula12:via
-
-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 dfu-util (`make nebula12:<keymap>:dfu-util`)
diff --git a/keyboards/nebula68/readme.md b/keyboards/nebula68/readme.md
deleted file mode 100755
index b990ed20dc..0000000000
--- a/keyboards/nebula68/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Nebula68
-
-This is a standard fixed layout 68% PCB. It supports VIA, full per-key RGB and underglow RGB.
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A 68% keyboard with STM32F303CC
-* Hardware Availability: https://spaceholdings.net/
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nebula68:via
-
-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 dfu-util (`make nebula65:<keymap>:flash`)
diff --git a/keyboards/nebula68b/readme.md b/keyboards/nebula68b/readme.md
deleted file mode 100755
index c0834e463a..0000000000
--- a/keyboards/nebula68b/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Nebula68B
-
-This is a standard fixed layout 68% PCB. It supports VIA, full per-key RGB and underglow RGB. This is revision B.
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A 68% keyboard with ATMEGA32U4
-* Hardware Availability: https://spaceholdings.net/
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nebula68b:via
-
-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 dfu-util (`make nebula65b:<keymap>:flash`)
diff --git a/keyboards/nek_type_a/matrix.c b/keyboards/nek_type_a/matrix.c
index a59598a503..b396be9911 100644
--- a/keyboards/nek_type_a/matrix.c
+++ b/keyboards/nek_type_a/matrix.c
@@ -205,14 +205,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/nek_type_a/rules.mk b/keyboards/nek_type_a/rules.mk
index ea79c962da..0a8adccb52 100644
--- a/keyboards/nek_type_a/rules.mk
+++ b/keyboards/nek_type_a/rules.mk
@@ -22,6 +22,6 @@ AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = yes
DEBUG_ENABLE = yes
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
SRC += matrix.c mcp23017.c
diff --git a/keyboards/niu_mini/readme.md b/keyboards/niu_mini/readme.md
deleted file mode 100644
index f4863d8549..0000000000
--- a/keyboards/niu_mini/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# NIU Mini
-
-![NIU Mini](https://cdn.shopify.com/s/files/1/1473/3902/files/40__01.jpg)
-
-A compact 40% (12x4) ortholinear keyboard kit sold by KBDFans.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: NIU Mini PCB
-Hardware Availability: [KBDFans](https://kbdfans.myshopify.com/products/niu-mini-40-diy-kit)
-
-Make example for this keyboard (after setting up your build environment):
-
- make niu_mini:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make niu_mini:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/nk1/readme.md b/keyboards/nk1/readme.md
deleted file mode 100644
index bc668481b5..0000000000
--- a/keyboards/nk1/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# NK1
-
-A big switch keypad!
-
-* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A BIG keypad with ATmega 32u4
-* Hardware Availability: https://novelkeys.xyz/
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nk1: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 the key
-- Plug In
-- Unplug
-- Release the key
-
-### Flash
-
-- Unplug
-- Hold the key
-- Plug In
-- Flash using QMK Toolbox or dfu-util (`make nk1:<keymap>:flash`)
diff --git a/keyboards/nk65/readme.md b/keyboards/nk65/readme.md
deleted file mode 100755
index 3bd04210d1..0000000000
--- a/keyboards/nk65/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-NK65
-=========
-
-![NK65](https://i.imgur.com/EXNbVpL.jpg)
-
-This is a standard fixed layout 65% PCB. It supports VIA and full per-key RGB.
-
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-Hardware Supported: A 65% keyboard with STM32F303CC
-Hardware Availability: https://novelkeys.xyz/
-
-Due to the RGB implementation, the NK65 is currently not compatible with community layouts.
-
-NOTE: For PCBs with revision v1.4 or later please use nk65/v1_4 in the make command.
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nk65:via
-
-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 dfu-util (`make nk65:<keymap>:dfu-util`)
diff --git a/keyboards/nk87/readme.md b/keyboards/nk87/readme.md
deleted file mode 100755
index 9ea4d99718..0000000000
--- a/keyboards/nk87/readme.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# NK87
-
-![NK87](https://i.imgur.com/nw29fvc.png)
-
-This is a standard fixed layout TKL PCB. It supports VIA and full per-key RGB.
-
-* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: A TKL keyboard with STM32F303CC
-* Hardware Availability: https://novelkeys.xyz/
-
-## Instructions
-
-### Build
-
-Make example for this keyboard (after setting up your build environment):
-
- make nk87: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 dfu-util (`make nk87:<keymap>:dfu-util`)
diff --git a/keyboards/nknl7en/readme.md b/keyboards/nknl7en/readme.md
deleted file mode 100644
index 5cbffae30c..0000000000
--- a/keyboards/nknl7en/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# nknl7en
-
-![nknl7en](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20201113/20201113010013.png)
-
-This is 70 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: nknl7 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2672651)
-
-Make example for this keyboard (after setting up your build environment):
-
- make nknl7en:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/nknl7-build-guide)
diff --git a/keyboards/nknl7jp/readme.md b/keyboards/nknl7jp/readme.md
deleted file mode 100644
index 9d0ccba4e8..0000000000
--- a/keyboards/nknl7jp/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# nknl7jp
-
-![nknl7jp](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20201113/20201113010013.png)
-
-This is 73 keys Custom keyboard.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: nknl7jp PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2672651)
-
-Make example for this keyboard (after setting up your build environment):
-
- make nknl7jp:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/nknl7-build-guide)
diff --git a/keyboards/nomu30/nomu30.h b/keyboards/nomu30/nomu30.h
deleted file mode 100644
index cf724ac6e4..0000000000
--- a/keyboards/nomu30/nomu30.h
+++ /dev/null
@@ -1,34 +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
-
-#include "quantum.h"
-#ifdef KEYBOARD_nomu30_rev1
- #include "rev1.h"
-#elif KEYBOARD_nomu30_rev2
- #include "rev2.h"
-#endif
-
-#define LAYOUT( \
- K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208 \
-) \
-{ \
- { KC_NO, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, KC_NO }, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, KC_NO, KC_NO, KC_NO }, \
-}
diff --git a/keyboards/nomu30/readme.md b/keyboards/nomu30/readme.md
deleted file mode 100644
index 95577164a1..0000000000
--- a/keyboards/nomu30/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# nomu30
-
-![nomu30](https://keys.recompile.net/images/nomu30-main@600w.jpg)
-
-A 30% keyboard with ISO enter.
-
-Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
-Hardware Supported: The Nomu30 PCBs, ProMicro supported
-Hardware Availability: https://keys.recompile.net/projects/nomu30/
-
-Make example for this keyboard (after setting up your build environment):
-
- make nomu30:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/nomu30/rules.mk b/keyboards/nomu30/rules.mk
deleted file mode 100644
index 8a73959407..0000000000
--- a/keyboards/nomu30/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = nomu30/rev1
diff --git a/keyboards/nk1/config.h b/keyboards/novelkeys/nk1/config.h
index 122df2e6da..122df2e6da 100644
--- a/keyboards/nk1/config.h
+++ b/keyboards/novelkeys/nk1/config.h
diff --git a/keyboards/nk1/info.json b/keyboards/novelkeys/nk1/info.json
index 43b1719e94..43b1719e94 100755
--- a/keyboards/nk1/info.json
+++ b/keyboards/novelkeys/nk1/info.json
diff --git a/keyboards/nk1/keymaps/default/keymap.c b/keyboards/novelkeys/nk1/keymaps/default/keymap.c
index 550a0f4873..550a0f4873 100644
--- a/keyboards/nk1/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/nk1/keymaps/default/keymap.c
diff --git a/keyboards/nk1/keymaps/default/readme.md b/keyboards/novelkeys/nk1/keymaps/default/readme.md
index 6e9c78ee51..6e9c78ee51 100644
--- a/keyboards/nk1/keymaps/default/readme.md
+++ b/keyboards/novelkeys/nk1/keymaps/default/readme.md
diff --git a/keyboards/nk1/keymaps/via/keymap.c b/keyboards/novelkeys/nk1/keymaps/via/keymap.c
index 550a0f4873..550a0f4873 100644
--- a/keyboards/nk1/keymaps/via/keymap.c
+++ b/keyboards/novelkeys/nk1/keymaps/via/keymap.c
diff --git a/keyboards/nk1/keymaps/via/readme.md b/keyboards/novelkeys/nk1/keymaps/via/readme.md
index 10025a5969..10025a5969 100644
--- a/keyboards/nk1/keymaps/via/readme.md
+++ b/keyboards/novelkeys/nk1/keymaps/via/readme.md
diff --git a/keyboards/ergoarrows/keymaps/via/rules.mk b/keyboards/novelkeys/nk1/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/ergoarrows/keymaps/via/rules.mk
+++ b/keyboards/novelkeys/nk1/keymaps/via/rules.mk
diff --git a/keyboards/nk1/nk1.c b/keyboards/novelkeys/nk1/nk1.c
index 6833478568..6833478568 100644
--- a/keyboards/nk1/nk1.c
+++ b/keyboards/novelkeys/nk1/nk1.c
diff --git a/keyboards/nk1/nk1.h b/keyboards/novelkeys/nk1/nk1.h
index 3962e18516..3962e18516 100644
--- a/keyboards/nk1/nk1.h
+++ b/keyboards/novelkeys/nk1/nk1.h
diff --git a/keyboards/novelkeys/nk1/readme.md b/keyboards/novelkeys/nk1/readme.md
new file mode 100644
index 0000000000..720d03adbc
--- /dev/null
+++ b/keyboards/novelkeys/nk1/readme.md
@@ -0,0 +1,32 @@
+# NK1
+
+A big switch keypad!
+
+* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A BIG keypad with ATmega 32u4
+* Hardware Availability: https://novelkeys.xyz/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk1: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 the key
+- Plug In
+- Unplug
+- Release the key
+
+### Flash
+
+- Unplug
+- Hold the key
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make nk1:<keymap>:flash`)
diff --git a/keyboards/nk1/rules.mk b/keyboards/novelkeys/nk1/rules.mk
index 16d3dfedd0..16d3dfedd0 100644
--- a/keyboards/nk1/rules.mk
+++ b/keyboards/novelkeys/nk1/rules.mk
diff --git a/keyboards/nk65/config.h b/keyboards/novelkeys/nk65/config.h
index 3268e8ebf4..3268e8ebf4 100755
--- a/keyboards/nk65/config.h
+++ b/keyboards/novelkeys/nk65/config.h
diff --git a/keyboards/nk65/halconf.h b/keyboards/novelkeys/nk65/halconf.h
index e6d7e3c2ed..e6d7e3c2ed 100644
--- a/keyboards/nk65/halconf.h
+++ b/keyboards/novelkeys/nk65/halconf.h
diff --git a/keyboards/nk65/info.json b/keyboards/novelkeys/nk65/info.json
index 3c2b438c2b..3c2b438c2b 100755
--- a/keyboards/nk65/info.json
+++ b/keyboards/novelkeys/nk65/info.json
diff --git a/keyboards/nk65/keymaps/default/keymap.c b/keyboards/novelkeys/nk65/keymaps/default/keymap.c
index f0fcda4674..f0fcda4674 100755
--- a/keyboards/nk65/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/nk65/keymaps/default/keymap.c
diff --git a/keyboards/nk65/keymaps/default/readme.md b/keyboards/novelkeys/nk65/keymaps/default/readme.md
index 27bcd0501d..27bcd0501d 100755
--- a/keyboards/nk65/keymaps/default/readme.md
+++ b/keyboards/novelkeys/nk65/keymaps/default/readme.md
diff --git a/keyboards/nk65/keymaps/madhatter/keymap.c b/keyboards/novelkeys/nk65/keymaps/madhatter/keymap.c
index e5e0fea461..e5e0fea461 100755
--- a/keyboards/nk65/keymaps/madhatter/keymap.c
+++ b/keyboards/novelkeys/nk65/keymaps/madhatter/keymap.c
diff --git a/keyboards/nk65/keymaps/via/keymap.c b/keyboards/novelkeys/nk65/keymaps/via/keymap.c
index f0fcda4674..f0fcda4674 100755
--- a/keyboards/nk65/keymaps/via/keymap.c
+++ b/keyboards/novelkeys/nk65/keymaps/via/keymap.c
diff --git a/keyboards/nk65/keymaps/via/readme.md b/keyboards/novelkeys/nk65/keymaps/via/readme.md
index 6689191e4c..6689191e4c 100755
--- a/keyboards/nk65/keymaps/via/readme.md
+++ b/keyboards/novelkeys/nk65/keymaps/via/readme.md
diff --git a/keyboards/le_chiffre/keymaps/via/rules.mk b/keyboards/novelkeys/nk65/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644..100755
--- a/keyboards/le_chiffre/keymaps/via/rules.mk
+++ b/keyboards/novelkeys/nk65/keymaps/via/rules.mk
diff --git a/keyboards/nk65/mcuconf.h b/keyboards/novelkeys/nk65/mcuconf.h
index f37f37c179..f37f37c179 100644
--- a/keyboards/nk65/mcuconf.h
+++ b/keyboards/novelkeys/nk65/mcuconf.h
diff --git a/keyboards/nk65/nk65.c b/keyboards/novelkeys/nk65/nk65.c
index 4ed18c114e..4ed18c114e 100755
--- a/keyboards/nk65/nk65.c
+++ b/keyboards/novelkeys/nk65/nk65.c
diff --git a/keyboards/nk65/nk65.h b/keyboards/novelkeys/nk65/nk65.h
index 35aca2a64c..35aca2a64c 100755
--- a/keyboards/nk65/nk65.h
+++ b/keyboards/novelkeys/nk65/nk65.h
diff --git a/keyboards/novelkeys/nk65/readme.md b/keyboards/novelkeys/nk65/readme.md
new file mode 100755
index 0000000000..38f66500b9
--- /dev/null
+++ b/keyboards/novelkeys/nk65/readme.md
@@ -0,0 +1,39 @@
+NK65
+=========
+
+![NK65](https://i.imgur.com/EXNbVpL.jpg)
+
+This is a standard fixed layout 65% PCB. It supports VIA and full per-key RGB.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+Hardware Supported: A 65% keyboard with STM32F303CC
+Hardware Availability: https://novelkeys.xyz/
+
+Due to the RGB implementation, the NK65 is currently not compatible with community layouts.
+
+NOTE: For PCBs with revision v1.4 or later please use nk65/v1_4 in the make command.
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk65:via
+
+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 dfu-util (`make nk65:<keymap>:dfu-util`)
diff --git a/keyboards/nk65/rules.mk b/keyboards/novelkeys/nk65/rules.mk
index d64ce8e1f6..d64ce8e1f6 100755
--- a/keyboards/nk65/rules.mk
+++ b/keyboards/novelkeys/nk65/rules.mk
diff --git a/keyboards/nk65/v1_4/config.h b/keyboards/novelkeys/nk65/v1_4/config.h
index 88629e5c99..88629e5c99 100755
--- a/keyboards/nk65/v1_4/config.h
+++ b/keyboards/novelkeys/nk65/v1_4/config.h
diff --git a/keyboards/nk65/v1_4/readme.md b/keyboards/novelkeys/nk65/v1_4/readme.md
index 399919a8be..399919a8be 100755
--- a/keyboards/nk65/v1_4/readme.md
+++ b/keyboards/novelkeys/nk65/v1_4/readme.md
diff --git a/keyboards/niu_mini/keymaps/planck/rules.mk b/keyboards/novelkeys/nk65/v1_4/rules.mk
index 8b13789179..8b13789179 100644..100755
--- a/keyboards/niu_mini/keymaps/planck/rules.mk
+++ b/keyboards/novelkeys/nk65/v1_4/rules.mk
diff --git a/keyboards/nk87/config.h b/keyboards/novelkeys/nk87/config.h
index 091d80efb8..091d80efb8 100755
--- a/keyboards/nk87/config.h
+++ b/keyboards/novelkeys/nk87/config.h
diff --git a/keyboards/nk87/halconf.h b/keyboards/novelkeys/nk87/halconf.h
index fb0c214264..fb0c214264 100644
--- a/keyboards/nk87/halconf.h
+++ b/keyboards/novelkeys/nk87/halconf.h
diff --git a/keyboards/nk87/info.json b/keyboards/novelkeys/nk87/info.json
index 5603ffd52b..5603ffd52b 100755
--- a/keyboards/nk87/info.json
+++ b/keyboards/novelkeys/nk87/info.json
diff --git a/keyboards/nk87/keymaps/default/keymap.c b/keyboards/novelkeys/nk87/keymaps/default/keymap.c
index f5387d48de..f5387d48de 100755
--- a/keyboards/nk87/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/nk87/keymaps/default/keymap.c
diff --git a/keyboards/nk87/keymaps/default/readme.md b/keyboards/novelkeys/nk87/keymaps/default/readme.md
index c0ca436184..c0ca436184 100755
--- a/keyboards/nk87/keymaps/default/readme.md
+++ b/keyboards/novelkeys/nk87/keymaps/default/readme.md
diff --git a/keyboards/nk87/keymaps/via/keymap.c b/keyboards/novelkeys/nk87/keymaps/via/keymap.c
index f8ada46952..f8ada46952 100755
--- a/keyboards/nk87/keymaps/via/keymap.c
+++ b/keyboards/novelkeys/nk87/keymaps/via/keymap.c
diff --git a/keyboards/nk87/keymaps/via/readme.md b/keyboards/novelkeys/nk87/keymaps/via/readme.md
index 90253575e7..90253575e7 100755
--- a/keyboards/nk87/keymaps/via/readme.md
+++ b/keyboards/novelkeys/nk87/keymaps/via/readme.md
diff --git a/keyboards/ls_60/keymaps/via/rules.mk b/keyboards/novelkeys/nk87/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644..100755
--- a/keyboards/ls_60/keymaps/via/rules.mk
+++ b/keyboards/novelkeys/nk87/keymaps/via/rules.mk
diff --git a/keyboards/nk87/mcuconf.h b/keyboards/novelkeys/nk87/mcuconf.h
index 1aa2fb55b4..1aa2fb55b4 100644
--- a/keyboards/nk87/mcuconf.h
+++ b/keyboards/novelkeys/nk87/mcuconf.h
diff --git a/keyboards/nk87/nk87.c b/keyboards/novelkeys/nk87/nk87.c
index c90ba02ea4..c90ba02ea4 100755
--- a/keyboards/nk87/nk87.c
+++ b/keyboards/novelkeys/nk87/nk87.c
diff --git a/keyboards/nk87/nk87.h b/keyboards/novelkeys/nk87/nk87.h
index d17b1fb4a0..d17b1fb4a0 100755
--- a/keyboards/nk87/nk87.h
+++ b/keyboards/novelkeys/nk87/nk87.h
diff --git a/keyboards/novelkeys/nk87/readme.md b/keyboards/novelkeys/nk87/readme.md
new file mode 100755
index 0000000000..0de3e08b40
--- /dev/null
+++ b/keyboards/novelkeys/nk87/readme.md
@@ -0,0 +1,34 @@
+# NK87
+
+![NK87](https://i.imgur.com/nw29fvc.png)
+
+This is a standard fixed layout TKL PCB. It supports VIA and full per-key RGB.
+
+* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A TKL keyboard with STM32F303CC
+* Hardware Availability: https://novelkeys.xyz/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk87: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 dfu-util (`make nk87:<keymap>:dfu-util`)
diff --git a/keyboards/nk87/rules.mk b/keyboards/novelkeys/nk87/rules.mk
index fb3055a2a8..fb3055a2a8 100755
--- a/keyboards/nk87/rules.mk
+++ b/keyboards/novelkeys/nk87/rules.mk
diff --git a/keyboards/novelpad/config.h b/keyboards/novelkeys/novelpad/config.h
index a7947220ff..a7947220ff 100755
--- a/keyboards/novelpad/config.h
+++ b/keyboards/novelkeys/novelpad/config.h
diff --git a/keyboards/novelpad/info.json b/keyboards/novelkeys/novelpad/info.json
index ed4a31236d..ed4a31236d 100644
--- a/keyboards/novelpad/info.json
+++ b/keyboards/novelkeys/novelpad/info.json
diff --git a/keyboards/novelpad/keymaps/0xdec/keymap.c b/keyboards/novelkeys/novelpad/keymaps/0xdec/keymap.c
index bb8c977c92..bb8c977c92 100755
--- a/keyboards/novelpad/keymaps/0xdec/keymap.c
+++ b/keyboards/novelkeys/novelpad/keymaps/0xdec/keymap.c
diff --git a/keyboards/novelpad/keymaps/default/keymap.c b/keyboards/novelkeys/novelpad/keymaps/default/keymap.c
index cbac67eaaa..cbac67eaaa 100755
--- a/keyboards/novelpad/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/novelpad/keymaps/default/keymap.c
diff --git a/keyboards/novelpad/novelpad.c b/keyboards/novelkeys/novelpad/novelpad.c
index 9f6ee7dae4..9f6ee7dae4 100755
--- a/keyboards/novelpad/novelpad.c
+++ b/keyboards/novelkeys/novelpad/novelpad.c
diff --git a/keyboards/novelpad/novelpad.h b/keyboards/novelkeys/novelpad/novelpad.h
index 6650a67223..6650a67223 100755
--- a/keyboards/novelpad/novelpad.h
+++ b/keyboards/novelkeys/novelpad/novelpad.h
diff --git a/keyboards/novelkeys/novelpad/readme.md b/keyboards/novelkeys/novelpad/readme.md
new file mode 100644
index 0000000000..49773b8dc0
--- /dev/null
+++ b/keyboards/novelkeys/novelpad/readme.md
@@ -0,0 +1,15 @@
+# NovelPad/NumChoc
+
+![NovelPad](https://i.imgur.com/vi4EdSh.jpg?1)
+
+A 5x4 macropad/numpad, sold by NovelKeys.xyz. There are two versions of the PCB, the NovelPad for MX switches and the NumChoc for Kailh Choc low profile switches. Both utilize the same firmware with no changes required.
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: NovelPad
+Hardware Availability: [Novelkeys.xyz](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/novelpad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/novelpad/rules.mk b/keyboards/novelkeys/novelpad/rules.mk
index ecdb295257..ecdb295257 100755
--- a/keyboards/novelpad/rules.mk
+++ b/keyboards/novelkeys/novelpad/rules.mk
diff --git a/keyboards/novelpad/readme.md b/keyboards/novelpad/readme.md
deleted file mode 100644
index 0cde8337ca..0000000000
--- a/keyboards/novelpad/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# NovelPad/NumChoc
-
-![NovelPad](https://i.imgur.com/vi4EdSh.jpg?1)
-
-A 5x4 macropad/numpad, sold by NovelKeys.xyz. There are two versions of the PCB, the NovelPad for MX switches and the NumChoc for Kailh Choc low profile switches. Both utilize the same firmware with no changes required.
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
-Hardware Supported: NovelPad
-Hardware Availability: [Novelkeys.xyz](https://novelkeys.xyz)
-
-Make example for this keyboard (after setting up your build environment):
-
- make novelpad:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/noxary/valhalla/rules.mk b/keyboards/noxary/valhalla/rules.mk
index f7365adecf..75490909f3 100644
--- a/keyboards/noxary/valhalla/rules.mk
+++ b/keyboards/noxary/valhalla/rules.mk
@@ -7,7 +7,7 @@ BOOTLOADER = stm32-dfu
# Build options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+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
diff --git a/keyboards/arch_36/arch_36.c b/keyboards/obosob/arch_36/arch_36.c
index d707e64195..d707e64195 100644
--- a/keyboards/arch_36/arch_36.c
+++ b/keyboards/obosob/arch_36/arch_36.c
diff --git a/keyboards/arch_36/arch_36.h b/keyboards/obosob/arch_36/arch_36.h
index 11c5e2de22..11c5e2de22 100644
--- a/keyboards/arch_36/arch_36.h
+++ b/keyboards/obosob/arch_36/arch_36.h
diff --git a/keyboards/arch_36/config.h b/keyboards/obosob/arch_36/config.h
index be4a0a9830..be4a0a9830 100644
--- a/keyboards/arch_36/config.h
+++ b/keyboards/obosob/arch_36/config.h
diff --git a/keyboards/arch_36/info.json b/keyboards/obosob/arch_36/info.json
index 344674a426..344674a426 100644
--- a/keyboards/arch_36/info.json
+++ b/keyboards/obosob/arch_36/info.json
diff --git a/keyboards/arch_36/keymaps/default/keymap.c b/keyboards/obosob/arch_36/keymaps/default/keymap.c
index 797ca8798f..797ca8798f 100644
--- a/keyboards/arch_36/keymaps/default/keymap.c
+++ b/keyboards/obosob/arch_36/keymaps/default/keymap.c
diff --git a/keyboards/arch_36/keymaps/obosob/config.h b/keyboards/obosob/arch_36/keymaps/obosob/config.h
index a60cafb5df..a60cafb5df 100644
--- a/keyboards/arch_36/keymaps/obosob/config.h
+++ b/keyboards/obosob/arch_36/keymaps/obosob/config.h
diff --git a/keyboards/arch_36/keymaps/obosob/keymap.c b/keyboards/obosob/arch_36/keymaps/obosob/keymap.c
index 104ee378f5..104ee378f5 100644
--- a/keyboards/arch_36/keymaps/obosob/keymap.c
+++ b/keyboards/obosob/arch_36/keymaps/obosob/keymap.c
diff --git a/keyboards/arch_36/keymaps/obosob/readme.md b/keyboards/obosob/arch_36/keymaps/obosob/readme.md
index e7dc6952d7..e7dc6952d7 100644
--- a/keyboards/arch_36/keymaps/obosob/readme.md
+++ b/keyboards/obosob/arch_36/keymaps/obosob/readme.md
diff --git a/keyboards/arch_36/keymaps/obosob/rules.mk b/keyboards/obosob/arch_36/keymaps/obosob/rules.mk
index 2b16ebb7bc..2b16ebb7bc 100644
--- a/keyboards/arch_36/keymaps/obosob/rules.mk
+++ b/keyboards/obosob/arch_36/keymaps/obosob/rules.mk
diff --git a/keyboards/obosob/arch_36/readme.md b/keyboards/obosob/arch_36/readme.md
new file mode 100644
index 0000000000..77c07a2a3b
--- /dev/null
+++ b/keyboards/obosob/arch_36/readme.md
@@ -0,0 +1,16 @@
+# Arch-36
+
+An ergonomic 30% split keyboard
+
+* Keyboard Maintainer: [obosob](https://github.com/obosob)
+* Hardware Supported: Pro Micro 5V/16MHz and compatible.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make obosob/arch_36:default
+
+Example of flashing this keyboard:
+
+ make obosob/arch_36:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/arch_36/rules.mk b/keyboards/obosob/arch_36/rules.mk
index 9631a0323e..9631a0323e 100644
--- a/keyboards/arch_36/rules.mk
+++ b/keyboards/obosob/arch_36/rules.mk
diff --git a/keyboards/steal_this_keyboard/config.h b/keyboards/obosob/steal_this_keyboard/config.h
index ea637d0c2f..ea637d0c2f 100644
--- a/keyboards/steal_this_keyboard/config.h
+++ b/keyboards/obosob/steal_this_keyboard/config.h
diff --git a/keyboards/steal_this_keyboard/info.json b/keyboards/obosob/steal_this_keyboard/info.json
index 7a4eabdb55..7a4eabdb55 100644
--- a/keyboards/steal_this_keyboard/info.json
+++ b/keyboards/obosob/steal_this_keyboard/info.json
diff --git a/keyboards/steal_this_keyboard/keymaps/default/config.h b/keyboards/obosob/steal_this_keyboard/keymaps/default/config.h
index 14ec0792b1..14ec0792b1 100644
--- a/keyboards/steal_this_keyboard/keymaps/default/config.h
+++ b/keyboards/obosob/steal_this_keyboard/keymaps/default/config.h
diff --git a/keyboards/steal_this_keyboard/keymaps/default/keymap.c b/keyboards/obosob/steal_this_keyboard/keymaps/default/keymap.c
index 32834c16b1..32834c16b1 100644
--- a/keyboards/steal_this_keyboard/keymaps/default/keymap.c
+++ b/keyboards/obosob/steal_this_keyboard/keymaps/default/keymap.c
diff --git a/keyboards/obosob/steal_this_keyboard/readme.md b/keyboards/obosob/steal_this_keyboard/readme.md
new file mode 100644
index 0000000000..55384a9234
--- /dev/null
+++ b/keyboards/obosob/steal_this_keyboard/readme.md
@@ -0,0 +1,11 @@
+# steal this keyboard!
+
+A split 34 keys column staggered keyboard named and decorated after the System of a Down album Steal This Album. All PCB files are available on the [project's github page](https://github.com/obosob/steal_this_keyboard)
+
+* Keyboard Maintainer: [Obosob](https://github.com/obosob)
+
+Make examples for this keyboard (after setting up your build environment):
+
+ make obosob/steal_this_keyboard:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/steal_this_keyboard/rules.mk b/keyboards/obosob/steal_this_keyboard/rules.mk
index 03ff795574..03ff795574 100644
--- a/keyboards/steal_this_keyboard/rules.mk
+++ b/keyboards/obosob/steal_this_keyboard/rules.mk
diff --git a/keyboards/steal_this_keyboard/steal_this_keyboard.c b/keyboards/obosob/steal_this_keyboard/steal_this_keyboard.c
index cd5ef5cdda..cd5ef5cdda 100644
--- a/keyboards/steal_this_keyboard/steal_this_keyboard.c
+++ b/keyboards/obosob/steal_this_keyboard/steal_this_keyboard.c
diff --git a/keyboards/steal_this_keyboard/steal_this_keyboard.h b/keyboards/obosob/steal_this_keyboard/steal_this_keyboard.h
index af7204f540..af7204f540 100644
--- a/keyboards/steal_this_keyboard/steal_this_keyboard.h
+++ b/keyboards/obosob/steal_this_keyboard/steal_this_keyboard.h
diff --git a/keyboards/ogurec/ogurec.h b/keyboards/ogurec/ogurec.h
deleted file mode 100644
index 53956aa586..0000000000
--- a/keyboards/ogurec/ogurec.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2021 drhigsby
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#pragma once
-
-#include "quantum.h"
-
-#if defined(KEYBOARD_ogurec_left_pm)
-# include "left_pm.h"
-#elif defined(KEYBOARD_ogurec_right_pm)
-# include "right_pm.h"
-#endif
diff --git a/keyboards/ogurec/readme.md b/keyboards/ogurec/readme.md
deleted file mode 100644
index 3e0ae153fa..0000000000
--- a/keyboards/ogurec/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# ogurec
-
-![ogurec](https://i.imgur.com/OJ5UnXT.png)
-
-ogurec is a reversible 12u x 3u ortholinear keyboard that offers left-sided and right-sided PM placement.
-
-The default ogurec keymap is for left-sided PM placement.
-
-When flashing ogurec with the PM soldered onto the right side, follow the second example below and use: make ogure/right_pm:default
-
-* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
-* Hardware Supported: ogurec (https://github.com/drhigsby/ogurec)
-* Hardware Availability: open source 3DP case available here https://github.com/drhigsby (case creator: https://github.com/dpalka15)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ogurec:default
- make ogurec/right_pm:default
-
-To place the keyboard into bootloader mode, solder a reset switch onto the PCB and press it OR short the GND and RST pins on the pro micro.
-
-Flashing example for this keyboard:
-
- make ogurec:default:flash
- make ogurec/right_pm:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ogurec/rules.mk b/keyboards/ogurec/rules.mk
deleted file mode 100644
index cf372ceb7e..0000000000
--- a/keyboards/ogurec/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-DEFAULT_FOLDER = ogurec/left_pm
diff --git a/keyboards/mechmini/v1/.noci b/keyboards/omkbd/ergodash/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/mechmini/v1/.noci
+++ b/keyboards/omkbd/ergodash/.noci
diff --git a/keyboards/getta25/config.h b/keyboards/omkbd/ergodash/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/getta25/config.h
+++ b/keyboards/omkbd/ergodash/config.h
diff --git a/keyboards/ergodash/ergodash.c b/keyboards/omkbd/ergodash/ergodash.c
index 51e6dbf08f..51e6dbf08f 100644
--- a/keyboards/ergodash/ergodash.c
+++ b/keyboards/omkbd/ergodash/ergodash.c
diff --git a/keyboards/omkbd/ergodash/ergodash.h b/keyboards/omkbd/ergodash/ergodash.h
new file mode 100644
index 0000000000..8c8bd3cdc3
--- /dev/null
+++ b/keyboards/omkbd/ergodash/ergodash.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_omkbd_ergodash_rev1
+ #include "rev1.h"
+#endif // #ifdef KEYBOARD_ergodash_rev1
+
+#ifdef KEYBOARD_omkbd_ergodash_mini
+ #include "mini.h"
+#endif
diff --git a/keyboards/minidox/.noci b/keyboards/omkbd/ergodash/mini/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/minidox/.noci
+++ b/keyboards/omkbd/ergodash/mini/.noci
diff --git a/keyboards/ergodash/mini/config.h b/keyboards/omkbd/ergodash/mini/config.h
index b936e0f54e..b936e0f54e 100644
--- a/keyboards/ergodash/mini/config.h
+++ b/keyboards/omkbd/ergodash/mini/config.h
diff --git a/keyboards/ergodash/mini/info.json b/keyboards/omkbd/ergodash/mini/info.json
index 1a0c1766f6..1a0c1766f6 100644
--- a/keyboards/ergodash/mini/info.json
+++ b/keyboards/omkbd/ergodash/mini/info.json
diff --git a/keyboards/ergodash/mini/keymaps/default/config.h b/keyboards/omkbd/ergodash/mini/keymaps/default/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/mini/keymaps/default/config.h
+++ b/keyboards/omkbd/ergodash/mini/keymaps/default/config.h
diff --git a/keyboards/ergodash/mini/keymaps/default/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/default/keymap.c
index 064584e43a..064584e43a 100644
--- a/keyboards/ergodash/mini/keymaps/default/keymap.c
+++ b/keyboards/omkbd/ergodash/mini/keymaps/default/keymap.c
diff --git a/keyboards/ergodash/mini/keymaps/default/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/default/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/mini/keymaps/default/rules.mk
+++ b/keyboards/omkbd/ergodash/mini/keymaps/default/rules.mk
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h
+++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
index 7224af7a00..7224af7a00 100644
--- a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
+++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md
index ebc13043a7..ebc13043a7 100644
--- a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md
+++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
index 11b62b9bff..11b62b9bff 100644
--- a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
+++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/config.h b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/mini/keymaps/yoshimaru46/config.h
+++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c
index 98c56c8d16..98c56c8d16 100644
--- a/keyboards/ergodash/mini/keymaps/yoshimaru46/keymap.c
+++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md
index 67a6ed9b90..67a6ed9b90 100644
--- a/keyboards/ergodash/mini/keymaps/yoshimaru46/readme.md
+++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md
diff --git a/keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk
index f85c6a4151..f85c6a4151 100644
--- a/keyboards/ergodash/mini/keymaps/yoshimaru46/rules.mk
+++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk
diff --git a/keyboards/ergodash/mini/mini.c b/keyboards/omkbd/ergodash/mini/mini.c
index 3aa9e74cce..3aa9e74cce 100644
--- a/keyboards/ergodash/mini/mini.c
+++ b/keyboards/omkbd/ergodash/mini/mini.c
diff --git a/keyboards/ergodash/mini/mini.h b/keyboards/omkbd/ergodash/mini/mini.h
index 4aca15775b..4aca15775b 100644
--- a/keyboards/ergodash/mini/mini.h
+++ b/keyboards/omkbd/ergodash/mini/mini.h
diff --git a/keyboards/omkbd/ergodash/mini/readme.md b/keyboards/omkbd/ergodash/mini/readme.md
new file mode 100644
index 0000000000..273935f3e3
--- /dev/null
+++ b/keyboards/omkbd/ergodash/mini/readme.md
@@ -0,0 +1,18 @@
+# ErgoDash mini
+
+![ErgoDash mini](https://github.com/omkbd/picture/blob/master/Ergodashmini.jpg)
+
+Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
+Hardware Supported: ErgoDash mini PCB, Pro Micro ATmega32u4
+Hardware Availability: Order your own [yourself](https://github.com/omkbd/ErgoDash)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make omkbd/ergodash/mini:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+# Layout
+![layout](https://github.com/omkbd/picture/blob/master/ergodashmini-layout.png)
+![PCB](https://github.com/omkbd/picture/blob/master/Ergodashmini_PCB.jpg)
diff --git a/keyboards/ergodash/mini/rules.mk b/keyboards/omkbd/ergodash/mini/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/mini/rules.mk
+++ b/keyboards/omkbd/ergodash/mini/rules.mk
diff --git a/keyboards/omkbd/ergodash/readme.md b/keyboards/omkbd/ergodash/readme.md
new file mode 100644
index 0000000000..4260397a99
--- /dev/null
+++ b/keyboards/omkbd/ergodash/readme.md
@@ -0,0 +1,32 @@
+# ErgoDash
+
+![ErgoDash](https://github.com/omkbd/picture/blob/master/Ergodash.jpg)
+
+Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
+Hardware Supported: ErgoDash PCB, Pro Micro ATmega32u4
+Hardware Availability: Order your own [yourself](https://github.com/omkbd/ErgoDash)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make omkbd/ergodash/rev1:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+Install Example: (for pro micro)
+ `make omkbd/ergodash/rev1:default:avrdude`
+
+Note:
+ "rev1" is for PCB ver 1.0,1.1,1.2
+ **The original Rev 1 was owned only by the designer. Therefore, Rev1 has been removed. Since the current PCB is Rev1, we changed Rev2 to Rev1 to match the firmware version.**
+
+
+# Layout
+![layout](https://github.com/omkbd/picture/blob/master/ergodash-layout.png)
+
+Layout Note:
+- In thumb cluster, it is not possible to use all 5 positions as small keys. (as pictured)
+- The top 2 1u keys in the thumb cluster share the same connection.
+- 2u key (center) position shares with the lower 1u key position
+
+![PCB](https://github.com/omkbd/picture/blob/master/Ergodash_PCB.jpg)
diff --git a/keyboards/naked48/.noci b/keyboards/omkbd/ergodash/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked48/.noci
+++ b/keyboards/omkbd/ergodash/rev1/.noci
diff --git a/keyboards/ergodash/rev1/config.h b/keyboards/omkbd/ergodash/rev1/config.h
index 07282cdad2..07282cdad2 100644
--- a/keyboards/ergodash/rev1/config.h
+++ b/keyboards/omkbd/ergodash/rev1/config.h
diff --git a/keyboards/ergodash/rev1/info.json b/keyboards/omkbd/ergodash/rev1/info.json
index bb491b5f50..bb491b5f50 100644
--- a/keyboards/ergodash/rev1/info.json
+++ b/keyboards/omkbd/ergodash/rev1/info.json
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/config.h
index a8ad1e4fe7..a8ad1e4fe7 100644
--- a/keyboards/ergodash/rev1/keymaps/333fred/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/keymap.c
index 8fb5d0db26..8fb5d0db26 100644
--- a/keyboards/ergodash/rev1/keymaps/333fred/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/rules.mk
index 2a91ad3ba4..2a91ad3ba4 100644
--- a/keyboards/ergodash/rev1/keymaps/333fred/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/333fred/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/default/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/default/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/rev1/keymaps/default/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/default/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/default/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/default/keymap.c
index 68c5e52708..68c5e52708 100644
--- a/keyboards/ergodash/rev1/keymaps/default/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/default/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/default/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/default/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/rev1/keymaps/default/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/default/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json
index 8f8d308553..8f8d308553 100644
--- a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keyboard-layout-editor.json
diff --git a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keymap.c
index ea79ae194b..ea79ae194b 100644
--- a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/rules.mk
index 11b62b9bff..11b62b9bff 100644
--- a/keyboards/ergodash/rev1/keymaps/greenshadowmaker/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/greenshadowmaker/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/ifohancroft/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/config.h
index 9a0d0e54f7..9a0d0e54f7 100644
--- a/keyboards/ergodash/rev1/keymaps/ifohancroft/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/ifohancroft/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/keymap.c
index a489c3f4dc..a489c3f4dc 100644
--- a/keyboards/ergodash/rev1/keymaps/ifohancroft/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/ifohancroft/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/readme.md
index aab6984af7..aab6984af7 100644
--- a/keyboards/ergodash/rev1/keymaps/ifohancroft/readme.md
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/readme.md
diff --git a/keyboards/ergodash/rev1/keymaps/ifohancroft/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/rules.mk
index 298b2a89cf..298b2a89cf 100644
--- a/keyboards/ergodash/rev1/keymaps/ifohancroft/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/ifohancroft/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/m47ch4n/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/rev1/keymaps/m47ch4n/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/m47ch4n/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c
index 4b102157d5..4b102157d5 100644
--- a/keyboards/ergodash/rev1/keymaps/m47ch4n/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json
index 1f5eee6014..1f5eee6014 100644
--- a/keyboards/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json
diff --git a/keyboards/ergodash/rev1/keymaps/m47ch4n/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md
index 598f258e1c..598f258e1c 100644
--- a/keyboards/ergodash/rev1/keymaps/m47ch4n/readme.md
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md
diff --git a/keyboards/ergodash/rev1/keymaps/m47ch4n/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/rev1/keymaps/m47ch4n/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/nopunin10did/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/config.h
index b5c45669d4..b5c45669d4 100644
--- a/keyboards/ergodash/rev1/keymaps/nopunin10did/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/nopunin10did/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/keymap.c
index 61cac97b0d..61cac97b0d 100644
--- a/keyboards/ergodash/rev1/keymaps/nopunin10did/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/nopunin10did/layers.json b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/layers.json
index d6f647622b..d6f647622b 100644
--- a/keyboards/ergodash/rev1/keymaps/nopunin10did/layers.json
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/layers.json
diff --git a/keyboards/ergodash/rev1/keymaps/nopunin10did/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/readme.md
index f3ba6752ad..f3ba6752ad 100644
--- a/keyboards/ergodash/rev1/keymaps/nopunin10did/readme.md
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/readme.md
diff --git a/keyboards/ergodash/rev1/keymaps/nopunin10did/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/rev1/keymaps/nopunin10did/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/nopunin10did/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/shadowprogr/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h
index 4dcefdbcc6..4dcefdbcc6 100644
--- a/keyboards/ergodash/rev1/keymaps/shadowprogr/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/shadowprogr/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c
index 9c450bca97..9c450bca97 100644
--- a/keyboards/ergodash/rev1/keymaps/shadowprogr/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/shadowprogr/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md
index 7ab665a8d4..7ab665a8d4 100644
--- a/keyboards/ergodash/rev1/keymaps/shadowprogr/readme.md
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md
diff --git a/keyboards/ergodash/rev1/keymaps/shadowprogr/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk
index 30d8419904..30d8419904 100644
--- a/keyboards/ergodash/rev1/keymaps/shadowprogr/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/tw1t611/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/config.h
index df04873a97..df04873a97 100644
--- a/keyboards/ergodash/rev1/keymaps/tw1t611/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/tw1t611/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/keymap.c
index 6d080f2af1..6d080f2af1 100644
--- a/keyboards/ergodash/rev1/keymaps/tw1t611/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/tw1t611/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/readme.md
index 54ee4d4f1f..54ee4d4f1f 100644
--- a/keyboards/ergodash/rev1/keymaps/tw1t611/readme.md
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/readme.md
diff --git a/keyboards/ergodash/rev1/keymaps/tw1t611/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/rev1/keymaps/tw1t611/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/tw1t611/rules.mk
diff --git a/keyboards/ergodash/rev1/keymaps/yet-another-developer/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/config.h
index 1005c48046..1005c48046 100644
--- a/keyboards/ergodash/rev1/keymaps/yet-another-developer/config.h
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/config.h
diff --git a/keyboards/ergodash/rev1/keymaps/yet-another-developer/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/keymap.c
index 1d51227ccf..1d51227ccf 100644
--- a/keyboards/ergodash/rev1/keymaps/yet-another-developer/keymap.c
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/keymap.c
diff --git a/keyboards/ergodash/rev1/keymaps/yet-another-developer/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/rules.mk
index a7d4fcaac3..a7d4fcaac3 100644
--- a/keyboards/ergodash/rev1/keymaps/yet-another-developer/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/keymaps/yet-another-developer/rules.mk
diff --git a/keyboards/ergodash/rev1/rev1.c b/keyboards/omkbd/ergodash/rev1/rev1.c
index 00f81cae11..00f81cae11 100644
--- a/keyboards/ergodash/rev1/rev1.c
+++ b/keyboards/omkbd/ergodash/rev1/rev1.c
diff --git a/keyboards/ergodash/rev1/rev1.h b/keyboards/omkbd/ergodash/rev1/rev1.h
index 7f094534cc..7f094534cc 100644
--- a/keyboards/ergodash/rev1/rev1.h
+++ b/keyboards/omkbd/ergodash/rev1/rev1.h
diff --git a/keyboards/ergodash/rev1/rules.mk b/keyboards/omkbd/ergodash/rev1/rules.mk
index bb9e33b082..bb9e33b082 100644
--- a/keyboards/ergodash/rev1/rules.mk
+++ b/keyboards/omkbd/ergodash/rev1/rules.mk
diff --git a/keyboards/omkbd/ergodash/rules.mk b/keyboards/omkbd/ergodash/rules.mk
new file mode 100644
index 0000000000..5c44a74433
--- /dev/null
+++ b/keyboards/omkbd/ergodash/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+SPLIT_KEYBOARD = yes # Enables split keyboard support
+
+DEFAULT_FOLDER = omkbd/ergodash/rev1
diff --git a/keyboards/naked64/.noci b/keyboards/omkbd/runner3680/3x6/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked64/.noci
+++ b/keyboards/omkbd/runner3680/3x6/.noci
diff --git a/keyboards/runner3680/3x6/3x6.c b/keyboards/omkbd/runner3680/3x6/3x6.c
index 1f375c3ecb..1f375c3ecb 100644
--- a/keyboards/runner3680/3x6/3x6.c
+++ b/keyboards/omkbd/runner3680/3x6/3x6.c
diff --git a/keyboards/runner3680/3x6/3x6.h b/keyboards/omkbd/runner3680/3x6/3x6.h
index c197c6de2c..c197c6de2c 100644
--- a/keyboards/runner3680/3x6/3x6.h
+++ b/keyboards/omkbd/runner3680/3x6/3x6.h
diff --git a/keyboards/runner3680/3x6/config.h b/keyboards/omkbd/runner3680/3x6/config.h
index af8e6eb32b..af8e6eb32b 100644
--- a/keyboards/runner3680/3x6/config.h
+++ b/keyboards/omkbd/runner3680/3x6/config.h
diff --git a/keyboards/runner3680/3x6/info.json b/keyboards/omkbd/runner3680/3x6/info.json
index c54fe46106..c54fe46106 100644
--- a/keyboards/runner3680/3x6/info.json
+++ b/keyboards/omkbd/runner3680/3x6/info.json
diff --git a/keyboards/runner3680/3x6/keymaps/default/config.h b/keyboards/omkbd/runner3680/3x6/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/3x6/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/3x6/keymaps/default/config.h
diff --git a/keyboards/runner3680/3x6/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/3x6/keymaps/default/keymap.c
index 99ab7ff2d7..99ab7ff2d7 100644
--- a/keyboards/runner3680/3x6/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/3x6/keymaps/default/keymap.c
diff --git a/keyboards/naked64/keymaps/default/rules.mk b/keyboards/omkbd/runner3680/3x6/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked64/keymaps/default/rules.mk
+++ b/keyboards/omkbd/runner3680/3x6/rules.mk
diff --git a/keyboards/namecard2x4/.noci b/keyboards/omkbd/runner3680/3x7/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/namecard2x4/.noci
+++ b/keyboards/omkbd/runner3680/3x7/.noci
diff --git a/keyboards/runner3680/3x7/3x7.c b/keyboards/omkbd/runner3680/3x7/3x7.c
index 5246953b58..5246953b58 100644
--- a/keyboards/runner3680/3x7/3x7.c
+++ b/keyboards/omkbd/runner3680/3x7/3x7.c
diff --git a/keyboards/runner3680/3x7/3x7.h b/keyboards/omkbd/runner3680/3x7/3x7.h
index 2e07bc3b35..2e07bc3b35 100644
--- a/keyboards/runner3680/3x7/3x7.h
+++ b/keyboards/omkbd/runner3680/3x7/3x7.h
diff --git a/keyboards/runner3680/3x7/config.h b/keyboards/omkbd/runner3680/3x7/config.h
index 789dda45fd..789dda45fd 100644
--- a/keyboards/runner3680/3x7/config.h
+++ b/keyboards/omkbd/runner3680/3x7/config.h
diff --git a/keyboards/runner3680/3x7/info.json b/keyboards/omkbd/runner3680/3x7/info.json
index 1a5ac8221e..1a5ac8221e 100644
--- a/keyboards/runner3680/3x7/info.json
+++ b/keyboards/omkbd/runner3680/3x7/info.json
diff --git a/keyboards/runner3680/3x7/keymaps/default/config.h b/keyboards/omkbd/runner3680/3x7/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/3x7/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/3x7/keymaps/default/config.h
diff --git a/keyboards/runner3680/3x7/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/3x7/keymaps/default/keymap.c
index 795999cf5b..795999cf5b 100644
--- a/keyboards/runner3680/3x7/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/3x7/keymaps/default/keymap.c
diff --git a/keyboards/naked64/keymaps/default_with_setta21/rules.mk b/keyboards/omkbd/runner3680/3x7/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked64/keymaps/default_with_setta21/rules.mk
+++ b/keyboards/omkbd/runner3680/3x7/rules.mk
diff --git a/keyboards/namecard2x4/rev1/.noci b/keyboards/omkbd/runner3680/3x8/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/namecard2x4/rev1/.noci
+++ b/keyboards/omkbd/runner3680/3x8/.noci
diff --git a/keyboards/runner3680/3x8/3x8.c b/keyboards/omkbd/runner3680/3x8/3x8.c
index 8ea77001c5..8ea77001c5 100644
--- a/keyboards/runner3680/3x8/3x8.c
+++ b/keyboards/omkbd/runner3680/3x8/3x8.c
diff --git a/keyboards/runner3680/3x8/3x8.h b/keyboards/omkbd/runner3680/3x8/3x8.h
index c5856d0034..c5856d0034 100644
--- a/keyboards/runner3680/3x8/3x8.h
+++ b/keyboards/omkbd/runner3680/3x8/3x8.h
diff --git a/keyboards/runner3680/3x8/config.h b/keyboards/omkbd/runner3680/3x8/config.h
index b1d1db1171..b1d1db1171 100644
--- a/keyboards/runner3680/3x8/config.h
+++ b/keyboards/omkbd/runner3680/3x8/config.h
diff --git a/keyboards/runner3680/3x8/info.json b/keyboards/omkbd/runner3680/3x8/info.json
index d8e71f97e0..d8e71f97e0 100644
--- a/keyboards/runner3680/3x8/info.json
+++ b/keyboards/omkbd/runner3680/3x8/info.json
diff --git a/keyboards/runner3680/3x8/keymaps/default/config.h b/keyboards/omkbd/runner3680/3x8/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/3x8/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/3x8/keymaps/default/config.h
diff --git a/keyboards/runner3680/3x8/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/3x8/keymaps/default/keymap.c
index ae5d2ba650..ae5d2ba650 100644
--- a/keyboards/runner3680/3x8/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/3x8/keymaps/default/keymap.c
diff --git a/keyboards/naked64/rev1/rules.mk b/keyboards/omkbd/runner3680/3x8/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/naked64/rev1/rules.mk
+++ b/keyboards/omkbd/runner3680/3x8/rules.mk
diff --git a/keyboards/nomu30/.noci b/keyboards/omkbd/runner3680/4x6/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/nomu30/.noci
+++ b/keyboards/omkbd/runner3680/4x6/.noci
diff --git a/keyboards/runner3680/4x6/4x6.c b/keyboards/omkbd/runner3680/4x6/4x6.c
index 5e68c1a9fa..5e68c1a9fa 100644
--- a/keyboards/runner3680/4x6/4x6.c
+++ b/keyboards/omkbd/runner3680/4x6/4x6.c
diff --git a/keyboards/runner3680/4x6/4x6.h b/keyboards/omkbd/runner3680/4x6/4x6.h
index dfc3a977b7..dfc3a977b7 100644
--- a/keyboards/runner3680/4x6/4x6.h
+++ b/keyboards/omkbd/runner3680/4x6/4x6.h
diff --git a/keyboards/runner3680/4x6/config.h b/keyboards/omkbd/runner3680/4x6/config.h
index 12596acd9a..12596acd9a 100644
--- a/keyboards/runner3680/4x6/config.h
+++ b/keyboards/omkbd/runner3680/4x6/config.h
diff --git a/keyboards/runner3680/4x6/info.json b/keyboards/omkbd/runner3680/4x6/info.json
index 41ea3e0061..41ea3e0061 100644
--- a/keyboards/runner3680/4x6/info.json
+++ b/keyboards/omkbd/runner3680/4x6/info.json
diff --git a/keyboards/runner3680/4x6/keymaps/default/config.h b/keyboards/omkbd/runner3680/4x6/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/4x6/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/4x6/keymaps/default/config.h
diff --git a/keyboards/runner3680/4x6/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/4x6/keymaps/default/keymap.c
index d0c07ddd04..d0c07ddd04 100644
--- a/keyboards/runner3680/4x6/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/4x6/keymaps/default/keymap.c
diff --git a/keyboards/namecard2x4/rev1/rules.mk b/keyboards/omkbd/runner3680/4x6/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/namecard2x4/rev1/rules.mk
+++ b/keyboards/omkbd/runner3680/4x6/rules.mk
diff --git a/keyboards/nomu30/rev1/.noci b/keyboards/omkbd/runner3680/4x7/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/nomu30/rev1/.noci
+++ b/keyboards/omkbd/runner3680/4x7/.noci
diff --git a/keyboards/runner3680/4x7/4x7.c b/keyboards/omkbd/runner3680/4x7/4x7.c
index 568fc2dacd..568fc2dacd 100644
--- a/keyboards/runner3680/4x7/4x7.c
+++ b/keyboards/omkbd/runner3680/4x7/4x7.c
diff --git a/keyboards/runner3680/4x7/4x7.h b/keyboards/omkbd/runner3680/4x7/4x7.h
index 7bd43e1114..7bd43e1114 100644
--- a/keyboards/runner3680/4x7/4x7.h
+++ b/keyboards/omkbd/runner3680/4x7/4x7.h
diff --git a/keyboards/runner3680/4x7/config.h b/keyboards/omkbd/runner3680/4x7/config.h
index bbfdd383c0..bbfdd383c0 100644
--- a/keyboards/runner3680/4x7/config.h
+++ b/keyboards/omkbd/runner3680/4x7/config.h
diff --git a/keyboards/runner3680/4x7/info.json b/keyboards/omkbd/runner3680/4x7/info.json
index 43876dd57e..43876dd57e 100644
--- a/keyboards/runner3680/4x7/info.json
+++ b/keyboards/omkbd/runner3680/4x7/info.json
diff --git a/keyboards/runner3680/4x7/keymaps/default/config.h b/keyboards/omkbd/runner3680/4x7/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/4x7/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/4x7/keymaps/default/config.h
diff --git a/keyboards/runner3680/4x7/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/4x7/keymaps/default/keymap.c
index 95e2a67ebe..95e2a67ebe 100644
--- a/keyboards/runner3680/4x7/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/4x7/keymaps/default/keymap.c
diff --git a/keyboards/namecard2x4/rev2/rules.mk b/keyboards/omkbd/runner3680/4x7/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/namecard2x4/rev2/rules.mk
+++ b/keyboards/omkbd/runner3680/4x7/rules.mk
diff --git a/keyboards/nomu30/rev2/.noci b/keyboards/omkbd/runner3680/4x8/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/nomu30/rev2/.noci
+++ b/keyboards/omkbd/runner3680/4x8/.noci
diff --git a/keyboards/runner3680/4x8/4x8.c b/keyboards/omkbd/runner3680/4x8/4x8.c
index 2667548078..2667548078 100644
--- a/keyboards/runner3680/4x8/4x8.c
+++ b/keyboards/omkbd/runner3680/4x8/4x8.c
diff --git a/keyboards/runner3680/4x8/4x8.h b/keyboards/omkbd/runner3680/4x8/4x8.h
index bc95b439b0..bc95b439b0 100644
--- a/keyboards/runner3680/4x8/4x8.h
+++ b/keyboards/omkbd/runner3680/4x8/4x8.h
diff --git a/keyboards/runner3680/4x8/config.h b/keyboards/omkbd/runner3680/4x8/config.h
index 82e2dc7ee8..82e2dc7ee8 100644
--- a/keyboards/runner3680/4x8/config.h
+++ b/keyboards/omkbd/runner3680/4x8/config.h
diff --git a/keyboards/runner3680/4x8/info.json b/keyboards/omkbd/runner3680/4x8/info.json
index 4502a86404..4502a86404 100644
--- a/keyboards/runner3680/4x8/info.json
+++ b/keyboards/omkbd/runner3680/4x8/info.json
diff --git a/keyboards/runner3680/4x8/keymaps/default/config.h b/keyboards/omkbd/runner3680/4x8/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/4x8/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/4x8/keymaps/default/config.h
diff --git a/keyboards/runner3680/4x8/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/4x8/keymaps/default/keymap.c
index 5ff0c0d691..5ff0c0d691 100644
--- a/keyboards/runner3680/4x8/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/4x8/keymaps/default/keymap.c
diff --git a/keyboards/ogurec/left_pm/rules.mk b/keyboards/omkbd/runner3680/4x8/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ogurec/left_pm/rules.mk
+++ b/keyboards/omkbd/runner3680/4x8/rules.mk
diff --git a/keyboards/otaku_split/rev0/.noci b/keyboards/omkbd/runner3680/5x6/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/otaku_split/rev0/.noci
+++ b/keyboards/omkbd/runner3680/5x6/.noci
diff --git a/keyboards/runner3680/5x6/5x6.c b/keyboards/omkbd/runner3680/5x6/5x6.c
index 0e9d5481c4..0e9d5481c4 100644
--- a/keyboards/runner3680/5x6/5x6.c
+++ b/keyboards/omkbd/runner3680/5x6/5x6.c
diff --git a/keyboards/runner3680/5x6/5x6.h b/keyboards/omkbd/runner3680/5x6/5x6.h
index 5a6e70c209..5a6e70c209 100644
--- a/keyboards/runner3680/5x6/5x6.h
+++ b/keyboards/omkbd/runner3680/5x6/5x6.h
diff --git a/keyboards/runner3680/5x6/config.h b/keyboards/omkbd/runner3680/5x6/config.h
index d2f288546d..d2f288546d 100644
--- a/keyboards/runner3680/5x6/config.h
+++ b/keyboards/omkbd/runner3680/5x6/config.h
diff --git a/keyboards/runner3680/5x6/info.json b/keyboards/omkbd/runner3680/5x6/info.json
index 02c65ec7cc..02c65ec7cc 100644
--- a/keyboards/runner3680/5x6/info.json
+++ b/keyboards/omkbd/runner3680/5x6/info.json
diff --git a/keyboards/runner3680/5x6/keymaps/default/config.h b/keyboards/omkbd/runner3680/5x6/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/5x6/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/5x6/keymaps/default/config.h
diff --git a/keyboards/runner3680/5x6/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/5x6/keymaps/default/keymap.c
index e183b3cbfc..e183b3cbfc 100644
--- a/keyboards/runner3680/5x6/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/5x6/keymaps/default/keymap.c
diff --git a/keyboards/ogurec/right_pm/rules.mk b/keyboards/omkbd/runner3680/5x6/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ogurec/right_pm/rules.mk
+++ b/keyboards/omkbd/runner3680/5x6/rules.mk
diff --git a/keyboards/reviung33/.noci b/keyboards/omkbd/runner3680/5x6_5x8/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/reviung33/.noci
+++ b/keyboards/omkbd/runner3680/5x6_5x8/.noci
diff --git a/keyboards/runner3680/5x6_5x8/5x6_5x8.c b/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c
index 62597d0060..62597d0060 100644
--- a/keyboards/runner3680/5x6_5x8/5x6_5x8.c
+++ b/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c
diff --git a/keyboards/runner3680/5x6_5x8/5x6_5x8.h b/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.h
index afceac0a89..afceac0a89 100644
--- a/keyboards/runner3680/5x6_5x8/5x6_5x8.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.h
diff --git a/keyboards/runner3680/5x6_5x8/config.h b/keyboards/omkbd/runner3680/5x6_5x8/config.h
index 815da24950..815da24950 100644
--- a/keyboards/runner3680/5x6_5x8/config.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/config.h
diff --git a/keyboards/runner3680/5x6_5x8/info.json b/keyboards/omkbd/runner3680/5x6_5x8/info.json
index e8fb4c0927..e8fb4c0927 100644
--- a/keyboards/runner3680/5x6_5x8/info.json
+++ b/keyboards/omkbd/runner3680/5x6_5x8/info.json
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/default/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/config.h
index a21551badf..a21551badf 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/config.h
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/keymap.c
index 4dafb4b2a3..4dafb4b2a3 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/default/keymap.c
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h
index 818ea7d4af..818ea7d4af 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/config.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c
index 2f8aed176c..2f8aed176c 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk
index 8110dbaa1f..8110dbaa1f 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/jis/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/config.h
index a21551badf..a21551badf 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/jis/config.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/config.h
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/jis/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/keymap.c
index 463d847639..463d847639 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/jis/keymap.c
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/jis/keymap.c
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/via/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/config.h
index a21551badf..a21551badf 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/via/config.h
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/config.h
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/via/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/keymap.c
index 4dafb4b2a3..4dafb4b2a3 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/via/keymap.c
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/keymap.c
diff --git a/keyboards/m3n3van/keymaps/via/rules.mk b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/m3n3van/keymaps/via/rules.mk
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/via/rules.mk
diff --git a/keyboards/runner3680/5x6_5x8/rules.mk b/keyboards/omkbd/runner3680/5x6_5x8/rules.mk
index 32afd21635..32afd21635 100644
--- a/keyboards/runner3680/5x6_5x8/rules.mk
+++ b/keyboards/omkbd/runner3680/5x6_5x8/rules.mk
diff --git a/keyboards/reviung61/.noci b/keyboards/omkbd/runner3680/5x7/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/reviung61/.noci
+++ b/keyboards/omkbd/runner3680/5x7/.noci
diff --git a/keyboards/runner3680/5x7/5x7.c b/keyboards/omkbd/runner3680/5x7/5x7.c
index aae28e450c..aae28e450c 100644
--- a/keyboards/runner3680/5x7/5x7.c
+++ b/keyboards/omkbd/runner3680/5x7/5x7.c
diff --git a/keyboards/runner3680/5x7/5x7.h b/keyboards/omkbd/runner3680/5x7/5x7.h
index 451ecf6cd4..451ecf6cd4 100644
--- a/keyboards/runner3680/5x7/5x7.h
+++ b/keyboards/omkbd/runner3680/5x7/5x7.h
diff --git a/keyboards/runner3680/5x7/config.h b/keyboards/omkbd/runner3680/5x7/config.h
index 6bcbeeda54..6bcbeeda54 100644
--- a/keyboards/runner3680/5x7/config.h
+++ b/keyboards/omkbd/runner3680/5x7/config.h
diff --git a/keyboards/runner3680/5x7/info.json b/keyboards/omkbd/runner3680/5x7/info.json
index c60177d38c..c60177d38c 100644
--- a/keyboards/runner3680/5x7/info.json
+++ b/keyboards/omkbd/runner3680/5x7/info.json
diff --git a/keyboards/runner3680/5x7/keymaps/default/config.h b/keyboards/omkbd/runner3680/5x7/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/5x7/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/5x7/keymaps/default/config.h
diff --git a/keyboards/runner3680/5x7/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/5x7/keymaps/default/keymap.c
index 9c6c12fe40..9c6c12fe40 100644
--- a/keyboards/runner3680/5x7/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/5x7/keymaps/default/keymap.c
diff --git a/keyboards/runner3680/3x6/rules.mk b/keyboards/omkbd/runner3680/5x7/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x6/rules.mk
+++ b/keyboards/omkbd/runner3680/5x7/rules.mk
diff --git a/keyboards/runner3680/3x6/.noci b/keyboards/omkbd/runner3680/5x8/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x6/.noci
+++ b/keyboards/omkbd/runner3680/5x8/.noci
diff --git a/keyboards/runner3680/5x8/5x8.c b/keyboards/omkbd/runner3680/5x8/5x8.c
index 3958702572..3958702572 100644
--- a/keyboards/runner3680/5x8/5x8.c
+++ b/keyboards/omkbd/runner3680/5x8/5x8.c
diff --git a/keyboards/runner3680/5x8/5x8.h b/keyboards/omkbd/runner3680/5x8/5x8.h
index de53a0eb29..de53a0eb29 100644
--- a/keyboards/runner3680/5x8/5x8.h
+++ b/keyboards/omkbd/runner3680/5x8/5x8.h
diff --git a/keyboards/runner3680/5x8/config.h b/keyboards/omkbd/runner3680/5x8/config.h
index 29cfba78d1..29cfba78d1 100644
--- a/keyboards/runner3680/5x8/config.h
+++ b/keyboards/omkbd/runner3680/5x8/config.h
diff --git a/keyboards/runner3680/5x8/info.json b/keyboards/omkbd/runner3680/5x8/info.json
index 70e3cc7833..70e3cc7833 100644
--- a/keyboards/runner3680/5x8/info.json
+++ b/keyboards/omkbd/runner3680/5x8/info.json
diff --git a/keyboards/runner3680/5x8/keymaps/JIS/config.h b/keyboards/omkbd/runner3680/5x8/keymaps/JIS/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/5x8/keymaps/JIS/config.h
+++ b/keyboards/omkbd/runner3680/5x8/keymaps/JIS/config.h
diff --git a/keyboards/runner3680/5x8/keymaps/JIS/keymap.c b/keyboards/omkbd/runner3680/5x8/keymaps/JIS/keymap.c
index 75ff755651..75ff755651 100644
--- a/keyboards/runner3680/5x8/keymaps/JIS/keymap.c
+++ b/keyboards/omkbd/runner3680/5x8/keymaps/JIS/keymap.c
diff --git a/keyboards/runner3680/5x8/keymaps/default/config.h b/keyboards/omkbd/runner3680/5x8/keymaps/default/config.h
index 43a82f38a0..43a82f38a0 100644
--- a/keyboards/runner3680/5x8/keymaps/default/config.h
+++ b/keyboards/omkbd/runner3680/5x8/keymaps/default/config.h
diff --git a/keyboards/runner3680/5x8/keymaps/default/keymap.c b/keyboards/omkbd/runner3680/5x8/keymaps/default/keymap.c
index b9efd44ef7..b9efd44ef7 100644
--- a/keyboards/runner3680/5x8/keymaps/default/keymap.c
+++ b/keyboards/omkbd/runner3680/5x8/keymaps/default/keymap.c
diff --git a/keyboards/runner3680/3x7/rules.mk b/keyboards/omkbd/runner3680/5x8/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x7/rules.mk
+++ b/keyboards/omkbd/runner3680/5x8/rules.mk
diff --git a/keyboards/runner3680/config.h b/keyboards/omkbd/runner3680/config.h
index b8c5759db6..b8c5759db6 100644
--- a/keyboards/runner3680/config.h
+++ b/keyboards/omkbd/runner3680/config.h
diff --git a/keyboards/omkbd/runner3680/readme.md b/keyboards/omkbd/runner3680/readme.md
new file mode 100644
index 0000000000..9dd15495a9
--- /dev/null
+++ b/keyboards/omkbd/runner3680/readme.md
@@ -0,0 +1,15 @@
+# runner3680
+
+![runner3680](https://github.com/omkbd/Runner3680/blob/master/Picture/Runner3680.jpg)
+
+A split ortholinear keyboard. Each half is a 5x8 arrangement, with breakable pieces to allow the number of rows to be customized between 3 to 5, and the number of columns to be between 6 to 8.
+
+Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
+Hardware Supported: Runner3680, Pro Micro ATmega32u4
+Hardware Availability: Order your own [yourself](https://github.com/omkbd/Runner3680)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make omkbd/runner3680/5x8:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/omkbd/runner3680/rules.mk b/keyboards/omkbd/runner3680/rules.mk
new file mode 100644
index 0000000000..1be171295d
--- /dev/null
+++ b/keyboards/omkbd/runner3680/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes # Enables split keyboard support
+
+DEFAULT_FOLDER = omkbd/runner3680/5x8
diff --git a/keyboards/runner3680/runner3680.c b/keyboards/omkbd/runner3680/runner3680.c
index 7d8362363b..7d8362363b 100644
--- a/keyboards/runner3680/runner3680.c
+++ b/keyboards/omkbd/runner3680/runner3680.c
diff --git a/keyboards/omkbd/runner3680/runner3680.h b/keyboards/omkbd/runner3680/runner3680.h
new file mode 100644
index 0000000000..59afecfcfa
--- /dev/null
+++ b/keyboards/omkbd/runner3680/runner3680.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_omkbd_runner3680_5x8
+ #include "5x8.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_5x7
+ #include "5x7.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_5x6
+ #include "5x6.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_5x6_5x8
+ #include "5x6_5x8.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_4x8
+ #include "4x8.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_4x7
+ #include "4x7.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_4x6
+ #include "4x6.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_3x8
+ #include "3x8.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_3x7
+ #include "3x7.h"
+#endif
+
+#ifdef KEYBOARD_omkbd_runner3680_3x6
+ #include "3x6.h"
+#endif
diff --git a/keyboards/otaku_split/rev0/readme.md b/keyboards/otaku_split/rev0/readme.md
deleted file mode 100644
index 9103843d5d..0000000000
--- a/keyboards/otaku_split/rev0/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Otaku Split rev.0
-
-![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1365150/9953f612-d35f-4f31-873d-2323c7b2f622_base_resized.jpg)
-
-Otaku Split is Japanese layout based keyboard.
-rev.0 is prototype. it has MDF color plate Iron Black and Ayanami blue.
-
-Keyboard Maintainer: [takashiski](https://github.com/takashiski)
-Hardware Supported: promicro(atmega32u4)
-Hardware Availability: https://skyhigh-works.booth.pm/items/1365150
-
-Make example for this keyboard (after setting up your build environment):
-
- make otaku_split/rev0:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/otaku_split/rev1/readme.md b/keyboards/otaku_split/rev1/readme.md
deleted file mode 100644
index 592c82641e..0000000000
--- a/keyboards/otaku_split/rev1/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# otaku_split
-
-![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/511647ef-43e4-4f50-b56d-a0166c090fae_base_resized.jpg)
-![otaku_split_bottom](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/cc9eb113-46a9-42fa-aaed-c4007efbe45e_base_resized.jpg)
-
-
-This is JP layout based split keyboards.
-
-
-
-Keyboard Maintainer: [takashiski](https://github.com/takashiski)
-Hardware Supported: promicro(atmega32u4) on Otaku Split rev.1 PCB
-Hardware Availability: https://skyhigh-works.booth.pm/items/1398595
-
-Make example for this keyboard (after setting up your build environment):
-
- make otaku_split/rev1:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/owl8/readme.md b/keyboards/owl8/readme.md
deleted file mode 100644
index b40a5f35cb..0000000000
--- a/keyboards/owl8/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# owl8
-
-![owl8](https://raw.githubusercontent.com/yfuku/owl8/master/images/owl8.jpg)
-
-macropad
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: owl8 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make owl8:default
-
-Flashing example for this keyboard:
-
- make owl8:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/packrat/readme.md b/keyboards/packrat/readme.md
deleted file mode 100644
index a53377f870..0000000000
--- a/keyboards/packrat/readme.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Packrat
-
-![Packrat](https://i.imgur.com/t6vWYIbh.jpeg)
-
-Full Gallery: https://imgur.com/gallery/fZklCG6
-
-Packrat is an 11u wide ortholinear keyboard featuring multiple bottom row options and top-centered rotary encoder support.
-
-* Keyboard Maintainer: [H. Bond](https://github.com/drhigsby)
-* Hardware Supported: Packrat (https://github.com/drhigsby/packrat)
-* Hardware Availability: cases available at TBD / make your own
-
-Make example for this keyboard (after setting up your build environment):
-
- make packrat: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).
-
-## Bootloader
-
-Enter the bootloader in 3 ways:
-
-* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/paprikman/albacore/rules.mk b/keyboards/paprikman/albacore/rules.mk
index baf1b10f28..cbfd971b0f 100644
--- a/keyboards/paprikman/albacore/rules.mk
+++ b/keyboards/paprikman/albacore/rules.mk
@@ -12,10 +12,7 @@ MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+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
diff --git a/keyboards/peej/rosaline/rules.mk b/keyboards/peej/rosaline/rules.mk
index d8133b74ab..d1dde8af62 100644
--- a/keyboards/peej/rosaline/rules.mk
+++ b/keyboards/peej/rosaline/rules.mk
@@ -2,7 +2,7 @@
MCU = atmega328p
# Bootloader selection
-BOOTLOADER = USBasp
+BOOTLOADER = usbasploader
# Build Options
# change yes to no to disable
diff --git a/keyboards/pistachio/pistachio.h b/keyboards/pistachio/pistachio.h
deleted file mode 100644
index 8cbb967f49..0000000000
--- a/keyboards/pistachio/pistachio.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2020 rate
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include "quantum.h"
-
-#if defined(KEYBOARD_pistachio_rev1)
-# include "rev1.h"
-#elif defined(KEYBOARD_pistachio_rev2)
-# include "rev2.h"
-#endif
diff --git a/keyboards/pistachio/readme.md b/keyboards/pistachio/readme.md
deleted file mode 100644
index 8ff5933f4f..0000000000
--- a/keyboards/pistachio/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# pistachio
-
-![pistachio](https://ratelog.net/wp-content/uploads/2021/05/s-IMG_1835.jpg)
-
-This is a 92-key split keyboard with JIS layout and spare keys.
-
-* Keyboard Maintainer: [rate](https://github.com/7-rate) [@7_rate](https://twitter.com/7_rate)
-* Hardware Supported: pistachio PCB Rev1 Rev2, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/7-rate/Pistachio), [Booth Shop](https://rates.booth.pm/items/2237334)
-
-Make example for this keyboard (after setting up your build environment):
-
- make pistachio/rev1:default
- make pistachio/rev2:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://ratelog.net/pistachio-build-guide/) \ No newline at end of file
diff --git a/keyboards/pistachio/rules.mk b/keyboards/pistachio/rules.mk
deleted file mode 100644
index 93ae534be9..0000000000
--- a/keyboards/pistachio/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = pistachio/rev2 \ No newline at end of file
diff --git a/keyboards/pistachio_mp/readme.md b/keyboards/pistachio_mp/readme.md
deleted file mode 100644
index 0e5b030a6e..0000000000
--- a/keyboards/pistachio_mp/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# PistachioMacroPad
-
-![PistachioMacroPad](https://ratelog.net/wp-content/uploads/2020/11/s-PXL_20201114_134133741.jpg)
-
-This is a numeric keypad with a rotary encoder that uses a stainless steel plate.
-
-* Keyboard Maintainer: [rate](https://github.com/7-rate)
-* Hardware Supported: PistachioMacroPad PCB, Pro Micro, BMP MicroPro
-* Hardware Availability: [PCB & CaseData](https://github.com/7-rate/Pistachio_MacroPad.git), [Booth Shop](https://rates.booth.pm/items/2531312)
-
-Make example for this keyboard (after setting up your build environment):
-
- make pistachio_mp:default
-
-Flashing example for this keyboard:
-
- make pistachio_mp: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).
-
-[Build guide](https://ratelog.net/pistachiomacropad-build-guide/) \ No newline at end of file
diff --git a/keyboards/pistachio_pro/config.h b/keyboards/pistachio_pro/config.h
deleted file mode 100644
index c3cb584962..0000000000
--- a/keyboards/pistachio_pro/config.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-Copyright 2021 rate
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0x5255
-#define PRODUCT_ID 0xF40C
-#define DEVICE_VER 0x0001
-#define MANUFACTURER rate
-#define PRODUCT PistachioPro
-
-#define ENCODERS_PAD_A {D2}
-#define ENCODERS_PAD_B {D3}
-
-/* key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 18
-
-#define MATRIX_ROW_PINS { D4, C6, D7, B3, B4, B5 }
-#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B6, D6 }
-#define UNUSED_PINS
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
- * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
- */
-//#define GRAVE_ESC_CTRL_OVERRIDE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-
-/* disable these deprecated features by default */
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-/* Bootmagic Lite key configuration */
-//#define BOOTMAGIC_LITE_ROW 0
-//#define BOOTMAGIC_LITE_COLUMN 0
-
-/* OLED */
-#define OLED_DISPLAY_128X64
-#define OLED_FONT_H "keyboards/pistachio_pro/lib/glcdfont.c"
-
-#define OLED_FONT_WIDTH 6
-#define OLED_FONT_HEIGHT 6
-
-#define OLED_UPDATE_INTERVAL 1000
-
-#define OLED_TIMEOUT 0
-
-#define OLED_BRIGHTNESS 255
diff --git a/keyboards/pistachio_pro/readme.md b/keyboards/pistachio_pro/readme.md
deleted file mode 100644
index b224c874e6..0000000000
--- a/keyboards/pistachio_pro/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# PistachioPro
-
-![PistachioPro](https://ratelog.net/wp-content/uploads/2021/07/PistachioPro-scaled.jpg)
-
-This is a JIS layout TKL keyboard with 89 keys, encoder and OLED.
-
-* Keyboard Maintainer: [rate](https://github.com/7-rate)
-* Hardware Supported: PistachioPro PCB,
-* Hardware Availability: [Booth Shop](https://rates.booth.pm/items/2925303)
-
-Make example for this keyboard (after setting up your build environment):
-
- make pistachio_pro:default
-
-Flashing example for this keyboard:
-
- make pistachio_pro:default:flash
-
-To reset the keyboard into bootloader mode, press the reset switch on the underside.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h
index 4ae9ced258..dd9d6a9d25 100644
--- a/keyboards/planck/keymaps/thermal_printer/config.h
+++ b/keyboards/planck/keymaps/thermal_printer/config.h
@@ -1,9 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define SERIAL_UART_BAUD 19200
+#pragma once
/*
* MIDI options
@@ -21,8 +16,3 @@
- etc.
*/
//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2
-
- #endif \ No newline at end of file
diff --git a/keyboards/plexus75/readme.md b/keyboards/plexus75/readme.md
deleted file mode 100644
index 4cc2ff2b09..0000000000
--- a/keyboards/plexus75/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Plexus75
-
-![Plexus75](https://i.imgur.com/c06EAxJl.jpg)
-
-The Plexus75 is a 60% ortholinear keyboard based on the XD75 but instead of an all 1u bottom row the Plexus75 has a more traditional bottom row similar to reg. 60% boards.
-
-* Keyboard Maintainer: [Nasp](https://github.com/npspears)
-* Hardware Supported: Plexus75 PCB
-* Hardware Availability: https://forms.gle/uSqeNRgJEEQNk4C97
-
-Make example for this keyboard (after setting up your build environment):
-
- make plexus75:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ploopyco/mouse/readme.md b/keyboards/ploopyco/mouse/readme.md
index f7f072928b..af3cb3520f 100644
--- a/keyboards/ploopyco/mouse/readme.md
+++ b/keyboards/ploopyco/mouse/readme.md
@@ -39,7 +39,7 @@ This should allow you to more heavily customize the behavior.
Alternatively, the `process_wheel` and `process_mouse` functions can both be replaced too, to allow for even more functionality.
-Additionally, you can change the DPI/CPI or speed of the krackball by calling `pmw_set_cpi` at any time. Additionally, there is a `DPI_CONFIG` macro that will cycle through an array of options for the DPI. This is set to 1200, 1600, and 2400, but can be changed. 1600 is also set to the default.
+Additionally, you can change the DPI/CPI or speed of the trackball by calling `pointing_device_set_cpi` at any time. Additionally, there is a `DPI_CONFIG` macro that will cycle through an array of options for the DPI. This is set to 1200, 1600, and 2400, but can be changed. 1600 is also set to the default.
To configure/set your own array, there are two defines to use, `PLOOPY_DPI_OPTIONS` to set the array, and `PLOOPY_DPI_DEFAULT`.
diff --git a/keyboards/ploopyco/trackball/readme.md b/keyboards/ploopyco/trackball/readme.md
index e1885d149a..1648bd20f9 100644
--- a/keyboards/ploopyco/trackball/readme.md
+++ b/keyboards/ploopyco/trackball/readme.md
@@ -19,7 +19,7 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
## Revisions
-There are two main revisions for the PloopyCo Tracball, everything up to 1.004, and 1.005-1.006.
+There are two main revisions for the PloopyCo Trackball, everything up to 1.004, and 1.005-1.006.
In the 1.005 revision, button for was changed from pin B5 to B6, and the debug LED pin was changed from F7 to B5.
@@ -47,7 +47,7 @@ This should allow you to more heavily customize the behavior.
Alternatively, the `process_wheel` and `process_mouse` functions can both be replaced too, to allow for even more functionality.
-Additionally, you can change the DPI/CPI or speed of the trackball by calling `pmw_set_cpi` at any time. Additionally, there is a `DPI_CONFIG` macro that will cycle through an array of options for the DPI. This is set to 1200, 1600, and 2400, but can be changed. 1600 is also set to the default.
+Additionally, you can change the DPI/CPI or speed of the trackball by calling `pointing_device_set_cpi` at any time. Additionally, there is a `DPI_CONFIG` macro that will cycle through an array of options for the DPI. This is set to 1200, 1600, and 2400, but can be changed. 1600 is also set to the default.
To configure/set your own array, there are two defines to use, `PLOOPY_DPI_OPTIONS` to set the array, and `PLOOPY_DPI_DEFAULT`.
diff --git a/keyboards/ploopyco/trackball/trackball.c b/keyboards/ploopyco/trackball/trackball.c
index 25b36574a5..f819958734 100644
--- a/keyboards/ploopyco/trackball/trackball.c
+++ b/keyboards/ploopyco/trackball/trackball.c
@@ -218,7 +218,7 @@ void keyboard_pre_init_kb(void) {
}
void pointing_device_init_kb(void) {
- pmw3360_set_cpi(dpi_array[keyboard_config.dpi_config]);
+ pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]);
// initialize the scroll wheel's optical encoder
opt_encoder_init();
}
diff --git a/keyboards/allison/allison.c b/keyboards/prototypist/allison/allison.c
index 4ca8bd07de..4ca8bd07de 100644
--- a/keyboards/allison/allison.c
+++ b/keyboards/prototypist/allison/allison.c
diff --git a/keyboards/allison/allison.h b/keyboards/prototypist/allison/allison.h
index e9078a82a1..e9078a82a1 100644
--- a/keyboards/allison/allison.h
+++ b/keyboards/prototypist/allison/allison.h
diff --git a/keyboards/allison/config.h b/keyboards/prototypist/allison/config.h
index 85cb6ee9f5..85cb6ee9f5 100644
--- a/keyboards/allison/config.h
+++ b/keyboards/prototypist/allison/config.h
diff --git a/keyboards/allison/info.json b/keyboards/prototypist/allison/info.json
index cd6b51f96e..cd6b51f96e 100644
--- a/keyboards/allison/info.json
+++ b/keyboards/prototypist/allison/info.json
diff --git a/keyboards/allison/keymaps/default/keymap.c b/keyboards/prototypist/allison/keymaps/default/keymap.c
index 30fed354a4..30fed354a4 100644
--- a/keyboards/allison/keymaps/default/keymap.c
+++ b/keyboards/prototypist/allison/keymaps/default/keymap.c
diff --git a/keyboards/allison/keymaps/default/readme.md b/keyboards/prototypist/allison/keymaps/default/readme.md
index 13f200dad3..13f200dad3 100644
--- a/keyboards/allison/keymaps/default/readme.md
+++ b/keyboards/prototypist/allison/keymaps/default/readme.md
diff --git a/keyboards/allison/keymaps/via/keymap.c b/keyboards/prototypist/allison/keymaps/via/keymap.c
index 30fed354a4..30fed354a4 100644
--- a/keyboards/allison/keymaps/via/keymap.c
+++ b/keyboards/prototypist/allison/keymaps/via/keymap.c
diff --git a/keyboards/allison/keymaps/via/readme.md b/keyboards/prototypist/allison/keymaps/via/readme.md
index b82bc8e79f..b82bc8e79f 100644
--- a/keyboards/allison/keymaps/via/readme.md
+++ b/keyboards/prototypist/allison/keymaps/via/readme.md
diff --git a/keyboards/model_v/keymaps/via/rules.mk b/keyboards/prototypist/allison/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/model_v/keymaps/via/rules.mk
+++ b/keyboards/prototypist/allison/keymaps/via/rules.mk
diff --git a/keyboards/prototypist/allison/readme.md b/keyboards/prototypist/allison/readme.md
new file mode 100644
index 0000000000..8101c3c715
--- /dev/null
+++ b/keyboards/prototypist/allison/readme.md
@@ -0,0 +1,15 @@
+# Allison
+
+![Allison](https://i.imgur.com/tvLtu4K.jpg)
+
+A custom luxurious 60 with F-row and Macro
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make prototypist/allison:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/allison/rules.mk b/keyboards/prototypist/allison/rules.mk
index 1c4073c9ce..1c4073c9ce 100644
--- a/keyboards/allison/rules.mk
+++ b/keyboards/prototypist/allison/rules.mk
diff --git a/keyboards/allison_numpad/allison_numpad.c b/keyboards/prototypist/allison_numpad/allison_numpad.c
index 16f36e3140..16f36e3140 100644
--- a/keyboards/allison_numpad/allison_numpad.c
+++ b/keyboards/prototypist/allison_numpad/allison_numpad.c
diff --git a/keyboards/allison_numpad/allison_numpad.h b/keyboards/prototypist/allison_numpad/allison_numpad.h
index 9295e68668..9295e68668 100644
--- a/keyboards/allison_numpad/allison_numpad.h
+++ b/keyboards/prototypist/allison_numpad/allison_numpad.h
diff --git a/keyboards/allison_numpad/config.h b/keyboards/prototypist/allison_numpad/config.h
index 581926c24c..581926c24c 100644
--- a/keyboards/allison_numpad/config.h
+++ b/keyboards/prototypist/allison_numpad/config.h
diff --git a/keyboards/allison_numpad/info.json b/keyboards/prototypist/allison_numpad/info.json
index e644d8ec3b..e644d8ec3b 100644
--- a/keyboards/allison_numpad/info.json
+++ b/keyboards/prototypist/allison_numpad/info.json
diff --git a/keyboards/allison_numpad/keymaps/default/keymap.c b/keyboards/prototypist/allison_numpad/keymaps/default/keymap.c
index 74310885c5..74310885c5 100644
--- a/keyboards/allison_numpad/keymaps/default/keymap.c
+++ b/keyboards/prototypist/allison_numpad/keymaps/default/keymap.c
diff --git a/keyboards/allison_numpad/keymaps/default/readme.md b/keyboards/prototypist/allison_numpad/keymaps/default/readme.md
index b6b98a1815..b6b98a1815 100644
--- a/keyboards/allison_numpad/keymaps/default/readme.md
+++ b/keyboards/prototypist/allison_numpad/keymaps/default/readme.md
diff --git a/keyboards/allison_numpad/keymaps/via/keymap.c b/keyboards/prototypist/allison_numpad/keymaps/via/keymap.c
index 74310885c5..74310885c5 100644
--- a/keyboards/allison_numpad/keymaps/via/keymap.c
+++ b/keyboards/prototypist/allison_numpad/keymaps/via/keymap.c
diff --git a/keyboards/allison_numpad/keymaps/via/readme.md b/keyboards/prototypist/allison_numpad/keymaps/via/readme.md
index b82bc8e79f..b82bc8e79f 100644
--- a/keyboards/allison_numpad/keymaps/via/readme.md
+++ b/keyboards/prototypist/allison_numpad/keymaps/via/readme.md
diff --git a/keyboards/naiping/np64/keymaps/via/rules.mk b/keyboards/prototypist/allison_numpad/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/naiping/np64/keymaps/via/rules.mk
+++ b/keyboards/prototypist/allison_numpad/keymaps/via/rules.mk
diff --git a/keyboards/prototypist/allison_numpad/readme.md b/keyboards/prototypist/allison_numpad/readme.md
new file mode 100644
index 0000000000..ea5e449b03
--- /dev/null
+++ b/keyboards/prototypist/allison_numpad/readme.md
@@ -0,0 +1,15 @@
+# Allison Numpad
+
+![Allison Numpad](https://i.imgur.com/tvLtu4K.jpg)
+
+A custom luxurious numpad to match Allison
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make prototypist/allison_numpad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/allison_numpad/rules.mk b/keyboards/prototypist/allison_numpad/rules.mk
index 3bf8aba9f4..3bf8aba9f4 100644
--- a/keyboards/allison_numpad/rules.mk
+++ b/keyboards/prototypist/allison_numpad/rules.mk
diff --git a/keyboards/pursuit40/readme.md b/keyboards/pursuit40/readme.md
deleted file mode 100644
index 86cd043f38..0000000000
--- a/keyboards/pursuit40/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Pursuit40
-
-![Pursuit40](https://i.imgur.com/Ay3k75tl.jpg)
-
-The Pursuit40 PCB is a modified layout Panc40 by Alex Panc. It's similar to traditional ortho but the bottom row keys are larger than 1u.
-
-* Keyboard Maintainer: [Nasp](https://github.com/npspears)
-* Hardware Supported: Panc40
-* Hardware Availability: https://panc.co/store/ols/products/panc40-keyboard-pnc-kyb1
-
-Make example for this keyboard (after setting up your build environment):
-
- make pursuit40:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/qaz/readme.md b/keyboards/qaz/readme.md
deleted file mode 100644
index 2f1e7fcc9a..0000000000
--- a/keyboards/qaz/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# QAZ
-
-![QAZ](https://i.imgur.com/kmxDneol.png)
-
-QAZ is a careful exercise in minimalism, leveraging advanced QMK magic like combos, tapdances and mod layers to unlock complete functionality while remaining oddly familiar.
-Throw it in your fanny pack and hop on your fixed gear and away you go. QAZ is cheap, hip, and effective with all the keyboardy features you expect, including the ability to type numbers- should you choose to add them to your layout.
-
-* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
-* Hardware Availability: 40s Discord Mini Group Buy
-
-Make example for this keyboard (after setting up your build environment):
-
- qmk compile -kb qaz -km default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/eggman/config.h b/keyboards/qpockets/eggman/config.h
index e1515e6c3d..e1515e6c3d 100644
--- a/keyboards/eggman/config.h
+++ b/keyboards/qpockets/eggman/config.h
diff --git a/keyboards/eggman/eggman.c b/keyboards/qpockets/eggman/eggman.c
index 2287b9e278..2287b9e278 100644
--- a/keyboards/eggman/eggman.c
+++ b/keyboards/qpockets/eggman/eggman.c
diff --git a/keyboards/eggman/eggman.h b/keyboards/qpockets/eggman/eggman.h
index 4d4c4a1241..4d4c4a1241 100644
--- a/keyboards/eggman/eggman.h
+++ b/keyboards/qpockets/eggman/eggman.h
diff --git a/keyboards/eggman/info.json b/keyboards/qpockets/eggman/info.json
index 17e1cb2166..17e1cb2166 100644
--- a/keyboards/eggman/info.json
+++ b/keyboards/qpockets/eggman/info.json
diff --git a/keyboards/eggman/keymaps/default/config.h b/keyboards/qpockets/eggman/keymaps/default/config.h
index dd1d9753fd..dd1d9753fd 100644
--- a/keyboards/eggman/keymaps/default/config.h
+++ b/keyboards/qpockets/eggman/keymaps/default/config.h
diff --git a/keyboards/eggman/keymaps/default/keymap.c b/keyboards/qpockets/eggman/keymaps/default/keymap.c
index 11da71c6c7..11da71c6c7 100644
--- a/keyboards/eggman/keymaps/default/keymap.c
+++ b/keyboards/qpockets/eggman/keymaps/default/keymap.c
diff --git a/keyboards/space_space/rev2/keymaps/default/rules.mk b/keyboards/qpockets/eggman/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/space_space/rev2/keymaps/default/rules.mk
+++ b/keyboards/qpockets/eggman/keymaps/default/rules.mk
diff --git a/keyboards/qpockets/eggman/readme.md b/keyboards/qpockets/eggman/readme.md
new file mode 100644
index 0000000000..e0066fbe1f
--- /dev/null
+++ b/keyboards/qpockets/eggman/readme.md
@@ -0,0 +1,18 @@
+# eggman
+
+![eggman](https://i.imgur.com/x4kaGmll.jpg)
+
+i am he and you are me
+
+* Keyboard Maintainer: https://github.com/qpockets
+* Hardware Availability:
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qpockets/eggman:default
+
+Flashing example for this keyboard:
+
+ make qpockets/eggman:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/eggman/rules.mk b/keyboards/qpockets/eggman/rules.mk
index 7cb0dc381f..7cb0dc381f 100644
--- a/keyboards/eggman/rules.mk
+++ b/keyboards/qpockets/eggman/rules.mk
diff --git a/keyboards/qpockets/space_space/readme.md b/keyboards/qpockets/space_space/readme.md
new file mode 100644
index 0000000000..c84a583267
--- /dev/null
+++ b/keyboards/qpockets/space_space/readme.md
@@ -0,0 +1,18 @@
+# space_space
+
+![space_space](https://i.imgur.com/SxjhzIMl.jpg)
+
+Give your space some space
+
+* Keyboard Maintainer: https://github.com/qpockets
+* Hardware Availability: [p3dstore](https://p3dstore.com/products/space-space-acrylic-case?_pos=21&_sid=c75de6a78&_ss=r&variant=39907740844216)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qpockets/space_space/rev2:default
+
+Flashing example for this keyboard:
+
+ make qpockets/space_space/rev2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/space_space/rev1/config.h b/keyboards/qpockets/space_space/rev1/config.h
index d52aad4c2b..d52aad4c2b 100644
--- a/keyboards/space_space/rev1/config.h
+++ b/keyboards/qpockets/space_space/rev1/config.h
diff --git a/keyboards/space_space/rev1/info.json b/keyboards/qpockets/space_space/rev1/info.json
index 5bac73c642..5bac73c642 100644
--- a/keyboards/space_space/rev1/info.json
+++ b/keyboards/qpockets/space_space/rev1/info.json
diff --git a/keyboards/space_space/rev1/keymaps/big_space/config.h b/keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h
index ffc2124e1b..ffc2124e1b 100644
--- a/keyboards/space_space/rev1/keymaps/big_space/config.h
+++ b/keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h
diff --git a/keyboards/space_space/rev1/keymaps/big_space/keymap.c b/keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c
index 62241532e8..62241532e8 100644
--- a/keyboards/space_space/rev1/keymaps/big_space/keymap.c
+++ b/keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c
diff --git a/keyboards/space_space/rev1/keymaps/big_space/rules.mk b/keyboards/qpockets/space_space/rev1/keymaps/big_space/rules.mk
index ff681299e4..ff681299e4 100644
--- a/keyboards/space_space/rev1/keymaps/big_space/rules.mk
+++ b/keyboards/qpockets/space_space/rev1/keymaps/big_space/rules.mk
diff --git a/keyboards/space_space/rev1/keymaps/default/config.h b/keyboards/qpockets/space_space/rev1/keymaps/default/config.h
index ffc2124e1b..ffc2124e1b 100644
--- a/keyboards/space_space/rev1/keymaps/default/config.h
+++ b/keyboards/qpockets/space_space/rev1/keymaps/default/config.h
diff --git a/keyboards/space_space/rev1/keymaps/default/keymap.c b/keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c
index 6b4219b289..6b4219b289 100644
--- a/keyboards/space_space/rev1/keymaps/default/keymap.c
+++ b/keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c
diff --git a/keyboards/space_space/rev1/keymaps/default/rules.mk b/keyboards/qpockets/space_space/rev1/keymaps/default/rules.mk
index ff681299e4..ff681299e4 100644
--- a/keyboards/space_space/rev1/keymaps/default/rules.mk
+++ b/keyboards/qpockets/space_space/rev1/keymaps/default/rules.mk
diff --git a/keyboards/space_space/rev1/keymaps/readme.md b/keyboards/qpockets/space_space/rev1/keymaps/readme.md
index 79e944c711..79e944c711 100644
--- a/keyboards/space_space/rev1/keymaps/readme.md
+++ b/keyboards/qpockets/space_space/rev1/keymaps/readme.md
diff --git a/keyboards/space_space/rev1/readme.md b/keyboards/qpockets/space_space/rev1/readme.md
index 4b170612e8..4b170612e8 100644
--- a/keyboards/space_space/rev1/readme.md
+++ b/keyboards/qpockets/space_space/rev1/readme.md
diff --git a/keyboards/space_space/rev1/rev1.c b/keyboards/qpockets/space_space/rev1/rev1.c
index e639552cfb..e639552cfb 100644
--- a/keyboards/space_space/rev1/rev1.c
+++ b/keyboards/qpockets/space_space/rev1/rev1.c
diff --git a/keyboards/space_space/rev1/rev1.h b/keyboards/qpockets/space_space/rev1/rev1.h
index e56068ec42..e56068ec42 100644
--- a/keyboards/space_space/rev1/rev1.h
+++ b/keyboards/qpockets/space_space/rev1/rev1.h
diff --git a/keyboards/space_space/rev1/rules.mk b/keyboards/qpockets/space_space/rev1/rules.mk
index 5f58c5684b..5f58c5684b 100644
--- a/keyboards/space_space/rev1/rules.mk
+++ b/keyboards/qpockets/space_space/rev1/rules.mk
diff --git a/keyboards/space_space/rev2/config.h b/keyboards/qpockets/space_space/rev2/config.h
index bb8f04da2b..bb8f04da2b 100644
--- a/keyboards/space_space/rev2/config.h
+++ b/keyboards/qpockets/space_space/rev2/config.h
diff --git a/keyboards/space_space/rev2/info.json b/keyboards/qpockets/space_space/rev2/info.json
index 5bac73c642..5bac73c642 100644
--- a/keyboards/space_space/rev2/info.json
+++ b/keyboards/qpockets/space_space/rev2/info.json
diff --git a/keyboards/space_space/rev2/keymaps/big_space/config.h b/keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h
index ffc2124e1b..ffc2124e1b 100644
--- a/keyboards/space_space/rev2/keymaps/big_space/config.h
+++ b/keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h
diff --git a/keyboards/space_space/rev2/keymaps/big_space/keymap.c b/keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c
index a272c001b4..a272c001b4 100644
--- a/keyboards/space_space/rev2/keymaps/big_space/keymap.c
+++ b/keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c
diff --git a/keyboards/space_space/rev2/keymaps/big_space/rules.mk b/keyboards/qpockets/space_space/rev2/keymaps/big_space/rules.mk
index ff681299e4..ff681299e4 100644
--- a/keyboards/space_space/rev2/keymaps/big_space/rules.mk
+++ b/keyboards/qpockets/space_space/rev2/keymaps/big_space/rules.mk
diff --git a/keyboards/space_space/rev2/keymaps/default/config.h b/keyboards/qpockets/space_space/rev2/keymaps/default/config.h
index 0b0e89fa1f..0b0e89fa1f 100644
--- a/keyboards/space_space/rev2/keymaps/default/config.h
+++ b/keyboards/qpockets/space_space/rev2/keymaps/default/config.h
diff --git a/keyboards/space_space/rev2/keymaps/default/keymap.c b/keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c
index 64f34c8291..64f34c8291 100644
--- a/keyboards/space_space/rev2/keymaps/default/keymap.c
+++ b/keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c
diff --git a/keyboards/squiggle/keymaps/default/rules.mk b/keyboards/qpockets/space_space/rev2/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/squiggle/keymaps/default/rules.mk
+++ b/keyboards/qpockets/space_space/rev2/keymaps/default/rules.mk
diff --git a/keyboards/space_space/rev2/keymaps/qpockets/config.h b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h
index bf8c47eb3e..bf8c47eb3e 100644
--- a/keyboards/space_space/rev2/keymaps/qpockets/config.h
+++ b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h
diff --git a/keyboards/space_space/rev2/keymaps/qpockets/keymap.c b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c
index 986e435957..986e435957 100644
--- a/keyboards/space_space/rev2/keymaps/qpockets/keymap.c
+++ b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c
diff --git a/keyboards/space_space/rev2/keymaps/qpockets/rules.mk b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/rules.mk
index ff681299e4..ff681299e4 100644
--- a/keyboards/space_space/rev2/keymaps/qpockets/rules.mk
+++ b/keyboards/qpockets/space_space/rev2/keymaps/qpockets/rules.mk
diff --git a/keyboards/space_space/rev2/readme.md b/keyboards/qpockets/space_space/rev2/readme.md
index d8391a21a6..d8391a21a6 100644
--- a/keyboards/space_space/rev2/readme.md
+++ b/keyboards/qpockets/space_space/rev2/readme.md
diff --git a/keyboards/space_space/rev2/rev2.c b/keyboards/qpockets/space_space/rev2/rev2.c
index 07b93b36aa..07b93b36aa 100644
--- a/keyboards/space_space/rev2/rev2.c
+++ b/keyboards/qpockets/space_space/rev2/rev2.c
diff --git a/keyboards/space_space/rev2/rev2.h b/keyboards/qpockets/space_space/rev2/rev2.h
index 99362b900f..99362b900f 100644
--- a/keyboards/space_space/rev2/rev2.h
+++ b/keyboards/qpockets/space_space/rev2/rev2.h
diff --git a/keyboards/space_space/rev2/rules.mk b/keyboards/qpockets/space_space/rev2/rules.mk
index 8876a45881..8876a45881 100644
--- a/keyboards/space_space/rev2/rules.mk
+++ b/keyboards/qpockets/space_space/rev2/rules.mk
diff --git a/keyboards/qpockets/space_space/rules.mk b/keyboards/qpockets/space_space/rules.mk
new file mode 100644
index 0000000000..0ffe2efbf2
--- /dev/null
+++ b/keyboards/qpockets/space_space/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = qpockets/space_space/rev2
diff --git a/keyboards/wanten/config.h b/keyboards/qpockets/wanten/config.h
index ed6294f73f..ed6294f73f 100644
--- a/keyboards/wanten/config.h
+++ b/keyboards/qpockets/wanten/config.h
diff --git a/keyboards/wanten/info.json b/keyboards/qpockets/wanten/info.json
index e683761582..e683761582 100644
--- a/keyboards/wanten/info.json
+++ b/keyboards/qpockets/wanten/info.json
diff --git a/keyboards/wanten/keymaps/2u_bars/config.h b/keyboards/qpockets/wanten/keymaps/2u_bars/config.h
index 51e54382af..51e54382af 100644
--- a/keyboards/wanten/keymaps/2u_bars/config.h
+++ b/keyboards/qpockets/wanten/keymaps/2u_bars/config.h
diff --git a/keyboards/wanten/keymaps/2u_bars/keymap.c b/keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c
index 5e2dd8aa09..5e2dd8aa09 100644
--- a/keyboards/wanten/keymaps/2u_bars/keymap.c
+++ b/keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c
diff --git a/keyboards/squiggle/keymaps/default38/rules.mk b/keyboards/qpockets/wanten/keymaps/2u_bars/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/squiggle/keymaps/default38/rules.mk
+++ b/keyboards/qpockets/wanten/keymaps/2u_bars/rules.mk
diff --git a/keyboards/wanten/keymaps/625_bar/config.h b/keyboards/qpockets/wanten/keymaps/625_bar/config.h
index 51e54382af..51e54382af 100644
--- a/keyboards/wanten/keymaps/625_bar/config.h
+++ b/keyboards/qpockets/wanten/keymaps/625_bar/config.h
diff --git a/keyboards/wanten/keymaps/625_bar/keymap.c b/keyboards/qpockets/wanten/keymaps/625_bar/keymap.c
index b1cc213d1b..b1cc213d1b 100644
--- a/keyboards/wanten/keymaps/625_bar/keymap.c
+++ b/keyboards/qpockets/wanten/keymaps/625_bar/keymap.c
diff --git a/keyboards/squiggle/keymaps/defaultfull/rules.mk b/keyboards/qpockets/wanten/keymaps/625_bar/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/squiggle/keymaps/defaultfull/rules.mk
+++ b/keyboards/qpockets/wanten/keymaps/625_bar/rules.mk
diff --git a/keyboards/wanten/keymaps/default/config.h b/keyboards/qpockets/wanten/keymaps/default/config.h
index 51e54382af..51e54382af 100644
--- a/keyboards/wanten/keymaps/default/config.h
+++ b/keyboards/qpockets/wanten/keymaps/default/config.h
diff --git a/keyboards/wanten/keymaps/default/keymap.c b/keyboards/qpockets/wanten/keymaps/default/keymap.c
index f0cec2cc45..f0cec2cc45 100644
--- a/keyboards/wanten/keymaps/default/keymap.c
+++ b/keyboards/qpockets/wanten/keymaps/default/keymap.c
diff --git a/keyboards/wanten/keymaps/default/readme.md b/keyboards/qpockets/wanten/keymaps/default/readme.md
index 5a2b63c0bb..5a2b63c0bb 100644
--- a/keyboards/wanten/keymaps/default/readme.md
+++ b/keyboards/qpockets/wanten/keymaps/default/readme.md
diff --git a/keyboards/squiggle/keymaps/defaultminidox/rules.mk b/keyboards/qpockets/wanten/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/squiggle/keymaps/defaultminidox/rules.mk
+++ b/keyboards/qpockets/wanten/keymaps/default/rules.mk
diff --git a/keyboards/qpockets/wanten/readme.md b/keyboards/qpockets/wanten/readme.md
new file mode 100644
index 0000000000..243e949f34
--- /dev/null
+++ b/keyboards/qpockets/wanten/readme.md
@@ -0,0 +1,27 @@
+# wanten
+
+![wanten](https://i.imgur.com/d7o1Edf.png)
+
+an ortho drop in PCB for Van cases
+
+* Keyboard Maintainer: [qpockets](https://github.com/qpockets)
+* Hardware Supported: V1 wanten PCB
+* Hardware Availability: [pocketspace discord server](https://discord.gg/fKbTxraHc6)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qpockets/wanten:default
+
+Flashing example for this keyboard:
+
+ make qpockets/wanten: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 (0,0) in the matrix (top left key or encoder) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/wanten/rules.mk b/keyboards/qpockets/wanten/rules.mk
index c4a39c910f..c4a39c910f 100644
--- a/keyboards/wanten/rules.mk
+++ b/keyboards/qpockets/wanten/rules.mk
diff --git a/keyboards/wanten/wanten.c b/keyboards/qpockets/wanten/wanten.c
index 15f3e64cb8..15f3e64cb8 100644
--- a/keyboards/wanten/wanten.c
+++ b/keyboards/qpockets/wanten/wanten.c
diff --git a/keyboards/wanten/wanten.h b/keyboards/qpockets/wanten/wanten.h
index e6db44fea6..e6db44fea6 100644
--- a/keyboards/wanten/wanten.h
+++ b/keyboards/qpockets/wanten/wanten.h
diff --git a/keyboards/quark/readme.md b/keyboards/quark/readme.md
deleted file mode 100644
index 88b742f821..0000000000
--- a/keyboards/quark/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Quark
-
-![Quark](https://i.imgur.com/WcvKyf4l.jpg)
-
-The Quark PCB is a modified layout for the Planck by OLKB. It's similar to a Planck, but the bottom row was designed to be more useable-larger than 1u keys.
-
-* Keyboard Maintainer: [Nasp](https://github.com/npspears)
-* Hardware Supported: Planck
-* Hardware Availability: https://forms.gle/ZpGtQjBNtsbuSV767
-
-Make example for this keyboard (after setting up your build environment):
-
- make quark:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/rabbit_capture_plan/readme.md b/keyboards/rabbit_capture_plan/readme.md
deleted file mode 100644
index bc6f9d5dea..0000000000
--- a/keyboards/rabbit_capture_plan/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# rabbit_capture_plan
-
-![rabbit_capture_plan](https://i.gyazo.com/eb25048b17906f897253e8be18db001c.jpg)
-
-This is 70 keys split keyboard with trackball.
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: rabbit capture plan pcb
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make rabbit_capture_plan:default
-
-Flashing example for this keyboard:
-
- make rabbit_capture_plan:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/rainkeeb/readme.md b/keyboards/rainkeeb/readme.md
deleted file mode 100644
index f2c759ebeb..0000000000
--- a/keyboards/rainkeeb/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# rainkeeb
-
-![rainkeeb](https://i.imgur.com/GpVBRMw.jpg)
-
-My first custom mech design. 4x10(ish), pro micro based, unibody, split, ortho (any more adjectives?), with OLED and (optional) rotary encoder.
-
-![Default layout](https://i.imgur.com/rCOwsoy.png)
-This is the default layout, at least the base layer. By default the OLED displays "rainkeeb" at the top in case you forget what you're typing on, a layer indicator below that (Default, Raised, Alt), and a WPM counter below that. Encoder toggles Play/Pause on click on the Default and Raised layers, and is supposed to RESET into flash-mode on the Alt layer but that's not working for some reason. Clockwise turn increases volume, scrolls down, and scrolls right on the Default, Raise, and Alt layers respectively. Counterclockwise does the opposite of the clockwise turns, you get the picture.
-
-* Keyboard Maintainer: [rain](https://github.com/rainsff)
-* Hardware Supported: rainkeeb PCB v1
-* Hardware Availability: GB soon
-
-Make example for this keyboard (after setting up your build environment):
-
- make rainkeeb:default
-
-To put reset into bootloader mode just push the reset button from the left side of the board using a pair of tweezers or similar object.
-
-Install example for this keyboard:
-
- make rainkeeb:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/delilah/config.h b/keyboards/rainkeebs/delilah/config.h
index d07366a51d..d07366a51d 100644
--- a/keyboards/delilah/config.h
+++ b/keyboards/rainkeebs/delilah/config.h
diff --git a/keyboards/delilah/delilah.c b/keyboards/rainkeebs/delilah/delilah.c
index b2e98b60fa..b2e98b60fa 100644
--- a/keyboards/delilah/delilah.c
+++ b/keyboards/rainkeebs/delilah/delilah.c
diff --git a/keyboards/delilah/delilah.h b/keyboards/rainkeebs/delilah/delilah.h
index 64b25351b1..64b25351b1 100644
--- a/keyboards/delilah/delilah.h
+++ b/keyboards/rainkeebs/delilah/delilah.h
diff --git a/keyboards/delilah/info.json b/keyboards/rainkeebs/delilah/info.json
index d6a378eeba..d6a378eeba 100644
--- a/keyboards/delilah/info.json
+++ b/keyboards/rainkeebs/delilah/info.json
diff --git a/keyboards/delilah/keymaps/default/keymap.c b/keyboards/rainkeebs/delilah/keymaps/default/keymap.c
index ae00beadf5..ae00beadf5 100644
--- a/keyboards/delilah/keymaps/default/keymap.c
+++ b/keyboards/rainkeebs/delilah/keymaps/default/keymap.c
diff --git a/keyboards/delilah/keymaps/via/keymap.c b/keyboards/rainkeebs/delilah/keymaps/via/keymap.c
index 3a6e0d9a20..3a6e0d9a20 100644
--- a/keyboards/delilah/keymaps/via/keymap.c
+++ b/keyboards/rainkeebs/delilah/keymaps/via/keymap.c
diff --git a/keyboards/naiping/nphhkb/keymaps/via/rules.mk b/keyboards/rainkeebs/delilah/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/naiping/nphhkb/keymaps/via/rules.mk
+++ b/keyboards/rainkeebs/delilah/keymaps/via/rules.mk
diff --git a/keyboards/rainkeebs/delilah/readme.md b/keyboards/rainkeebs/delilah/readme.md
new file mode 100644
index 0000000000..cc8ad40d62
--- /dev/null
+++ b/keyboards/rainkeebs/delilah/readme.md
@@ -0,0 +1,22 @@
+# Delilah
+
+![Delilah](https://i.imgur.com/TqBZycx.png)
+
+A 12.25u, traditional stagger, 40% keyboard. Designed to keep another punctuation key on base layer while still being compact.
+
+* Keyboard Maintainer: Rain
+* Hardware Supported: Delilah PCB v1.0, v1.1
+* Hardware Availability: [rainkeebs](https://www.rainkeebs.mx/)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb rainkeebs/delilah -km default
+
+To reset the keyboard, hold the top left key while plugging in, or hit the reset button near the USB port
+
+Install example for this keyboard:
+
+ qmk flash -kb rainkeebs/delilah -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/delilah/rules.mk b/keyboards/rainkeebs/delilah/rules.mk
index 7c928a6cbf..7c928a6cbf 100644
--- a/keyboards/delilah/rules.mk
+++ b/keyboards/rainkeebs/delilah/rules.mk
diff --git a/keyboards/rainkeeb/config.h b/keyboards/rainkeebs/rainkeeb/config.h
index 36c3a5d5bf..36c3a5d5bf 100644
--- a/keyboards/rainkeeb/config.h
+++ b/keyboards/rainkeebs/rainkeeb/config.h
diff --git a/keyboards/rainkeeb/info.json b/keyboards/rainkeebs/rainkeeb/info.json
index b704d2d43b..b704d2d43b 100644
--- a/keyboards/rainkeeb/info.json
+++ b/keyboards/rainkeebs/rainkeeb/info.json
diff --git a/keyboards/rainkeeb/keymaps/default/keymap.c b/keyboards/rainkeebs/rainkeeb/keymaps/default/keymap.c
index 08cf7462c3..08cf7462c3 100644
--- a/keyboards/rainkeeb/keymaps/default/keymap.c
+++ b/keyboards/rainkeebs/rainkeeb/keymaps/default/keymap.c
diff --git a/keyboards/rainkeeb/keymaps/via/keymap.c b/keyboards/rainkeebs/rainkeeb/keymaps/via/keymap.c
index 08cf7462c3..08cf7462c3 100644
--- a/keyboards/rainkeeb/keymaps/via/keymap.c
+++ b/keyboards/rainkeebs/rainkeeb/keymaps/via/keymap.c
diff --git a/keyboards/gurindam/keymaps/via/rules.mk b/keyboards/rainkeebs/rainkeeb/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/gurindam/keymaps/via/rules.mk
+++ b/keyboards/rainkeebs/rainkeeb/keymaps/via/rules.mk
diff --git a/keyboards/rainkeeb/rainkeeb.c b/keyboards/rainkeebs/rainkeeb/rainkeeb.c
index b13ecb2483..b13ecb2483 100644
--- a/keyboards/rainkeeb/rainkeeb.c
+++ b/keyboards/rainkeebs/rainkeeb/rainkeeb.c
diff --git a/keyboards/rainkeeb/rainkeeb.h b/keyboards/rainkeebs/rainkeeb/rainkeeb.h
index f0179f087c..f0179f087c 100644
--- a/keyboards/rainkeeb/rainkeeb.h
+++ b/keyboards/rainkeebs/rainkeeb/rainkeeb.h
diff --git a/keyboards/rainkeebs/rainkeeb/readme.md b/keyboards/rainkeebs/rainkeeb/readme.md
new file mode 100644
index 0000000000..6d82df0283
--- /dev/null
+++ b/keyboards/rainkeebs/rainkeeb/readme.md
@@ -0,0 +1,24 @@
+# rainkeeb
+
+![rainkeeb](https://i.imgur.com/GpVBRMw.jpg)
+
+My first custom mech design. 4x10(ish), pro micro based, unibody, split, ortho (any more adjectives?), with OLED and (optional) rotary encoder.
+
+![Default layout](https://i.imgur.com/rCOwsoy.png)
+This is the default layout, at least the base layer. By default the OLED displays "rainkeeb" at the top in case you forget what you're typing on, a layer indicator below that (Default, Raised, Alt), and a WPM counter below that. Encoder toggles Play/Pause on click on the Default and Raised layers, and is supposed to RESET into flash-mode on the Alt layer but that's not working for some reason. Clockwise turn increases volume, scrolls down, and scrolls right on the Default, Raise, and Alt layers respectively. Counterclockwise does the opposite of the clockwise turns, you get the picture.
+
+* Keyboard Maintainer: [rain](https://github.com/rainsff)
+* Hardware Supported: rainkeeb PCB v1
+* Hardware Availability: GB soon
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rainkeebs/rainkeeb:default
+
+To put reset into bootloader mode just push the reset button from the left side of the board using a pair of tweezers or similar object.
+
+Install example for this keyboard:
+
+ make rainkeebs/rainkeeb:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/rainkeeb/rules.mk b/keyboards/rainkeebs/rainkeeb/rules.mk
index a4b7fca0d1..a4b7fca0d1 100644
--- a/keyboards/rainkeeb/rules.mk
+++ b/keyboards/rainkeebs/rainkeeb/rules.mk
diff --git a/keyboards/yasui/config.h b/keyboards/rainkeebs/yasui/config.h
index 7d41a9e7f9..7d41a9e7f9 100644
--- a/keyboards/yasui/config.h
+++ b/keyboards/rainkeebs/yasui/config.h
diff --git a/keyboards/yasui/info.json b/keyboards/rainkeebs/yasui/info.json
index 019d4f94fc..019d4f94fc 100644
--- a/keyboards/yasui/info.json
+++ b/keyboards/rainkeebs/yasui/info.json
diff --git a/keyboards/yasui/keymaps/default/keymap.c b/keyboards/rainkeebs/yasui/keymaps/default/keymap.c
index 3f90b06c41..3f90b06c41 100644
--- a/keyboards/yasui/keymaps/default/keymap.c
+++ b/keyboards/rainkeebs/yasui/keymaps/default/keymap.c
diff --git a/keyboards/yasui/keymaps/via/keymap.c b/keyboards/rainkeebs/yasui/keymaps/via/keymap.c
index 3f90b06c41..3f90b06c41 100644
--- a/keyboards/yasui/keymaps/via/keymap.c
+++ b/keyboards/rainkeebs/yasui/keymaps/via/keymap.c
diff --git a/keyboards/naiping/npminila/keymaps/via/rules.mk b/keyboards/rainkeebs/yasui/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/naiping/npminila/keymaps/via/rules.mk
+++ b/keyboards/rainkeebs/yasui/keymaps/via/rules.mk
diff --git a/keyboards/rainkeebs/yasui/readme.md b/keyboards/rainkeebs/yasui/readme.md
new file mode 100644
index 0000000000..c167abf4a0
--- /dev/null
+++ b/keyboards/rainkeebs/yasui/readme.md
@@ -0,0 +1,22 @@
+# Yasui
+
+![Yasui](https://i.imgur.com/TRFOEkw.png)
+
+A 10u ortho kit.
+
+* Keyboard Maintainer: Rain
+* Hardware Supported: Yasui PCB v2
+* Hardware Availability: [rainkeebs](https://www.rainkeebs.mx/product/yasui-keyboard-kit)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb rainkeebs/yasui -km default
+
+To reset the keyboard, hold the top left key while plugging in, or hit the reset button near the USB port
+
+Install example for this keyboard:
+
+ qmk flash -kb rainkeebs/yasui -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/yasui/rules.mk b/keyboards/rainkeebs/yasui/rules.mk
index bc14e746aa..bc14e746aa 100644
--- a/keyboards/yasui/rules.mk
+++ b/keyboards/rainkeebs/yasui/rules.mk
diff --git a/keyboards/yasui/yasui.c b/keyboards/rainkeebs/yasui/yasui.c
index a87f7482a0..a87f7482a0 100644
--- a/keyboards/yasui/yasui.c
+++ b/keyboards/rainkeebs/yasui/yasui.c
diff --git a/keyboards/yasui/yasui.h b/keyboards/rainkeebs/yasui/yasui.h
index 387b9a5ac8..387b9a5ac8 100644
--- a/keyboards/yasui/yasui.h
+++ b/keyboards/rainkeebs/yasui/yasui.h
diff --git a/keyboards/ramonimbao/mona/v32a/rules.mk b/keyboards/ramonimbao/mona/v32a/rules.mk
index 0ed8962504..fe2be33f82 100644
--- a/keyboards/ramonimbao/mona/v32a/rules.mk
+++ b/keyboards/ramonimbao/mona/v32a/rules.mk
@@ -15,8 +15,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+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
diff --git a/keyboards/ramonimbao/squishytkl/config.h b/keyboards/ramonimbao/squishytkl/config.h
index 3e0812bb12..ebebc35bb4 100644
--- a/keyboards/ramonimbao/squishytkl/config.h
+++ b/keyboards/ramonimbao/squishytkl/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xB16B
#define PRODUCT_ID 0x00B1
-#define DEVICE_VER 0xE500
+#define DEVICE_VER 0x0100
#define MANUFACTURER Ramon Imbao
#define PRODUCT SquishyTKL
diff --git a/keyboards/pistachio/config.h b/keyboards/rate/pistachio/config.h
index 5ff7b3d799..5ff7b3d799 100644
--- a/keyboards/pistachio/config.h
+++ b/keyboards/rate/pistachio/config.h
diff --git a/keyboards/pistachio/info.json b/keyboards/rate/pistachio/info.json
index 8cdeb51ca3..8cdeb51ca3 100644
--- a/keyboards/pistachio/info.json
+++ b/keyboards/rate/pistachio/info.json
diff --git a/keyboards/pistachio/keymaps/default/keymap.c b/keyboards/rate/pistachio/keymaps/default/keymap.c
index 585807abdd..585807abdd 100644
--- a/keyboards/pistachio/keymaps/default/keymap.c
+++ b/keyboards/rate/pistachio/keymaps/default/keymap.c
diff --git a/keyboards/pistachio/keymaps/rate/keymap.c b/keyboards/rate/pistachio/keymaps/rate/keymap.c
index 34e1324aed..34e1324aed 100644
--- a/keyboards/pistachio/keymaps/rate/keymap.c
+++ b/keyboards/rate/pistachio/keymaps/rate/keymap.c
diff --git a/keyboards/pistachio/keymaps/via/keymap.c b/keyboards/rate/pistachio/keymaps/via/keymap.c
index 357253ac2d..357253ac2d 100644
--- a/keyboards/pistachio/keymaps/via/keymap.c
+++ b/keyboards/rate/pistachio/keymaps/via/keymap.c
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/rules.mk b/keyboards/rate/pistachio/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/keymaps/via/rules.mk
+++ b/keyboards/rate/pistachio/keymaps/via/rules.mk
diff --git a/keyboards/pistachio/pistachio.c b/keyboards/rate/pistachio/pistachio.c
index 2a850f64a4..2a850f64a4 100644
--- a/keyboards/pistachio/pistachio.c
+++ b/keyboards/rate/pistachio/pistachio.c
diff --git a/keyboards/rate/pistachio/pistachio.h b/keyboards/rate/pistachio/pistachio.h
new file mode 100644
index 0000000000..7bf2c59ad6
--- /dev/null
+++ b/keyboards/rate/pistachio/pistachio.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 rate
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#if defined(KEYBOARD_rate_pistachio_rev1)
+# include "rev1.h"
+#elif defined(KEYBOARD_rate_pistachio_rev2)
+# include "rev2.h"
+#endif
diff --git a/keyboards/rate/pistachio/readme.md b/keyboards/rate/pistachio/readme.md
new file mode 100644
index 0000000000..dc989bbe6c
--- /dev/null
+++ b/keyboards/rate/pistachio/readme.md
@@ -0,0 +1,18 @@
+# pistachio
+
+![pistachio](https://ratelog.net/wp-content/uploads/2021/05/s-IMG_1835.jpg)
+
+This is a 92-key split keyboard with JIS layout and spare keys.
+
+* Keyboard Maintainer: [rate](https://github.com/7-rate) [@7_rate](https://twitter.com/7_rate)
+* Hardware Supported: pistachio PCB Rev1 Rev2, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/7-rate/Pistachio), [Booth Shop](https://rates.booth.pm/items/2237334)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rate/pistachio/rev1:default
+ make rate/pistachio/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://ratelog.net/pistachio-build-guide/)
diff --git a/keyboards/pistachio/rev1/config.h b/keyboards/rate/pistachio/rev1/config.h
index 24f121ef17..24f121ef17 100644
--- a/keyboards/pistachio/rev1/config.h
+++ b/keyboards/rate/pistachio/rev1/config.h
diff --git a/keyboards/pistachio/rev1/readme.md b/keyboards/rate/pistachio/rev1/readme.md
index eae3776935..eae3776935 100644
--- a/keyboards/pistachio/rev1/readme.md
+++ b/keyboards/rate/pistachio/rev1/readme.md
diff --git a/keyboards/pistachio/rev1/rev1.c b/keyboards/rate/pistachio/rev1/rev1.c
index 5824157f53..5824157f53 100644
--- a/keyboards/pistachio/rev1/rev1.c
+++ b/keyboards/rate/pistachio/rev1/rev1.c
diff --git a/keyboards/pistachio/rev1/rev1.h b/keyboards/rate/pistachio/rev1/rev1.h
index e42de2d2b0..e42de2d2b0 100644
--- a/keyboards/pistachio/rev1/rev1.h
+++ b/keyboards/rate/pistachio/rev1/rev1.h
diff --git a/keyboards/pistachio/rev1/rules.mk b/keyboards/rate/pistachio/rev1/rules.mk
index 909b1e68de..909b1e68de 100644
--- a/keyboards/pistachio/rev1/rules.mk
+++ b/keyboards/rate/pistachio/rev1/rules.mk
diff --git a/keyboards/pistachio/rev2/config.h b/keyboards/rate/pistachio/rev2/config.h
index d0de298542..d0de298542 100644
--- a/keyboards/pistachio/rev2/config.h
+++ b/keyboards/rate/pistachio/rev2/config.h
diff --git a/keyboards/pistachio/rev2/readme.md b/keyboards/rate/pistachio/rev2/readme.md
index 12d9f6598f..12d9f6598f 100644
--- a/keyboards/pistachio/rev2/readme.md
+++ b/keyboards/rate/pistachio/rev2/readme.md
diff --git a/keyboards/pistachio/rev2/rev2.c b/keyboards/rate/pistachio/rev2/rev2.c
index c6e64a526d..c6e64a526d 100644
--- a/keyboards/pistachio/rev2/rev2.c
+++ b/keyboards/rate/pistachio/rev2/rev2.c
diff --git a/keyboards/pistachio/rev2/rev2.h b/keyboards/rate/pistachio/rev2/rev2.h
index 750778a30e..750778a30e 100644
--- a/keyboards/pistachio/rev2/rev2.h
+++ b/keyboards/rate/pistachio/rev2/rev2.h
diff --git a/keyboards/pistachio/rev2/rules.mk b/keyboards/rate/pistachio/rev2/rules.mk
index 909b1e68de..909b1e68de 100644
--- a/keyboards/pistachio/rev2/rules.mk
+++ b/keyboards/rate/pistachio/rev2/rules.mk
diff --git a/keyboards/rate/pistachio/rules.mk b/keyboards/rate/pistachio/rules.mk
new file mode 100644
index 0000000000..a5f4485316
--- /dev/null
+++ b/keyboards/rate/pistachio/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = rate/pistachio/rev2
diff --git a/keyboards/pistachio_mp/config.h b/keyboards/rate/pistachio_mp/config.h
index 4da866bb7d..4da866bb7d 100644
--- a/keyboards/pistachio_mp/config.h
+++ b/keyboards/rate/pistachio_mp/config.h
diff --git a/keyboards/pistachio_mp/info.json b/keyboards/rate/pistachio_mp/info.json
index d4e130300c..d4e130300c 100644
--- a/keyboards/pistachio_mp/info.json
+++ b/keyboards/rate/pistachio_mp/info.json
diff --git a/keyboards/pistachio_mp/keymaps/default/keymap.c b/keyboards/rate/pistachio_mp/keymaps/default/keymap.c
index c206f30617..c206f30617 100644
--- a/keyboards/pistachio_mp/keymaps/default/keymap.c
+++ b/keyboards/rate/pistachio_mp/keymaps/default/keymap.c
diff --git a/keyboards/pistachio_mp/keymaps/default/readme.md b/keyboards/rate/pistachio_mp/keymaps/default/readme.md
index 2bc50be9dd..2bc50be9dd 100644
--- a/keyboards/pistachio_mp/keymaps/default/readme.md
+++ b/keyboards/rate/pistachio_mp/keymaps/default/readme.md
diff --git a/keyboards/pistachio_mp/keymaps/via/keymap.c b/keyboards/rate/pistachio_mp/keymaps/via/keymap.c
index 241b501d1d..241b501d1d 100644
--- a/keyboards/pistachio_mp/keymaps/via/keymap.c
+++ b/keyboards/rate/pistachio_mp/keymaps/via/keymap.c
diff --git a/keyboards/pistachio_mp/keymaps/via/readme.md b/keyboards/rate/pistachio_mp/keymaps/via/readme.md
index b768049ccc..b768049ccc 100644
--- a/keyboards/pistachio_mp/keymaps/via/readme.md
+++ b/keyboards/rate/pistachio_mp/keymaps/via/readme.md
diff --git a/keyboards/mechmini/v2/keymaps/via/rules.mk b/keyboards/rate/pistachio_mp/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/mechmini/v2/keymaps/via/rules.mk
+++ b/keyboards/rate/pistachio_mp/keymaps/via/rules.mk
diff --git a/keyboards/pistachio_mp/pistachio_mp.c b/keyboards/rate/pistachio_mp/pistachio_mp.c
index 40e75fe1b0..40e75fe1b0 100644
--- a/keyboards/pistachio_mp/pistachio_mp.c
+++ b/keyboards/rate/pistachio_mp/pistachio_mp.c
diff --git a/keyboards/pistachio_mp/pistachio_mp.h b/keyboards/rate/pistachio_mp/pistachio_mp.h
index d7c5c9bad9..d7c5c9bad9 100644
--- a/keyboards/pistachio_mp/pistachio_mp.h
+++ b/keyboards/rate/pistachio_mp/pistachio_mp.h
diff --git a/keyboards/rate/pistachio_mp/readme.md b/keyboards/rate/pistachio_mp/readme.md
new file mode 100644
index 0000000000..b8ea088a4a
--- /dev/null
+++ b/keyboards/rate/pistachio_mp/readme.md
@@ -0,0 +1,21 @@
+# PistachioMacroPad
+
+![PistachioMacroPad](https://ratelog.net/wp-content/uploads/2020/11/s-PXL_20201114_134133741.jpg)
+
+This is a numeric keypad with a rotary encoder that uses a stainless steel plate.
+
+* Keyboard Maintainer: [rate](https://github.com/7-rate)
+* Hardware Supported: PistachioMacroPad PCB, Pro Micro, BMP MicroPro
+* Hardware Availability: [PCB & CaseData](https://github.com/7-rate/Pistachio_MacroPad.git), [Booth Shop](https://rates.booth.pm/items/2531312)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rate/pistachio_mp:default
+
+Flashing example for this keyboard:
+
+ make rate/pistachio_mp: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).
+
+[Build guide](https://ratelog.net/pistachiomacropad-build-guide/)
diff --git a/keyboards/pistachio_mp/rules.mk b/keyboards/rate/pistachio_mp/rules.mk
index 424aed9074..424aed9074 100644
--- a/keyboards/pistachio_mp/rules.mk
+++ b/keyboards/rate/pistachio_mp/rules.mk
diff --git a/keyboards/rate/pistachio_pro/config.h b/keyboards/rate/pistachio_pro/config.h
new file mode 100644
index 0000000000..f268967f6e
--- /dev/null
+++ b/keyboards/rate/pistachio_pro/config.h
@@ -0,0 +1,108 @@
+/*
+Copyright 2021 rate
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5255
+#define PRODUCT_ID 0xF40C
+#define DEVICE_VER 0x0001
+#define MANUFACTURER rate
+#define PRODUCT PistachioPro
+
+#define ENCODERS_PAD_A {D2}
+#define ENCODERS_PAD_B {D3}
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 18
+
+#define MATRIX_ROW_PINS { D4, C6, D7, B3, B4, B5 }
+#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B6, D6 }
+#define UNUSED_PINS
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+//#define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
+
+/* OLED */
+#define OLED_DISPLAY_128X64
+#define OLED_FONT_H "keyboards/rate/pistachio_pro/lib/glcdfont.c"
+
+#define OLED_FONT_WIDTH 6
+#define OLED_FONT_HEIGHT 6
+
+#define OLED_UPDATE_INTERVAL 1000
+
+#define OLED_TIMEOUT 0
+
+#define OLED_BRIGHTNESS 255
diff --git a/keyboards/pistachio_pro/info.json b/keyboards/rate/pistachio_pro/info.json
index c519a69e11..c519a69e11 100644
--- a/keyboards/pistachio_pro/info.json
+++ b/keyboards/rate/pistachio_pro/info.json
diff --git a/keyboards/pistachio_pro/keymaps/default/keymap.c b/keyboards/rate/pistachio_pro/keymaps/default/keymap.c
index 3fe6e8a5f5..3fe6e8a5f5 100644
--- a/keyboards/pistachio_pro/keymaps/default/keymap.c
+++ b/keyboards/rate/pistachio_pro/keymaps/default/keymap.c
diff --git a/keyboards/pistachio_pro/keymaps/default/readme.md b/keyboards/rate/pistachio_pro/keymaps/default/readme.md
index bf313ec19d..bf313ec19d 100644
--- a/keyboards/pistachio_pro/keymaps/default/readme.md
+++ b/keyboards/rate/pistachio_pro/keymaps/default/readme.md
diff --git a/keyboards/pistachio_pro/keymaps/rate/keymap.c b/keyboards/rate/pistachio_pro/keymaps/rate/keymap.c
index 7aa70c51d1..7aa70c51d1 100644
--- a/keyboards/pistachio_pro/keymaps/rate/keymap.c
+++ b/keyboards/rate/pistachio_pro/keymaps/rate/keymap.c
diff --git a/keyboards/pistachio_pro/keymaps/rate/readme.md b/keyboards/rate/pistachio_pro/keymaps/rate/readme.md
index c7049b67ce..c7049b67ce 100644
--- a/keyboards/pistachio_pro/keymaps/rate/readme.md
+++ b/keyboards/rate/pistachio_pro/keymaps/rate/readme.md
diff --git a/keyboards/pistachio_pro/keymaps/via/keymap.c b/keyboards/rate/pistachio_pro/keymaps/via/keymap.c
index f30254320b..f30254320b 100644
--- a/keyboards/pistachio_pro/keymaps/via/keymap.c
+++ b/keyboards/rate/pistachio_pro/keymaps/via/keymap.c
diff --git a/keyboards/pistachio_pro/keymaps/via/readme.md b/keyboards/rate/pistachio_pro/keymaps/via/readme.md
index e2f4b9f6b2..e2f4b9f6b2 100644
--- a/keyboards/pistachio_pro/keymaps/via/readme.md
+++ b/keyboards/rate/pistachio_pro/keymaps/via/readme.md
diff --git a/keyboards/latinpadble/keymaps/via/rules.mk b/keyboards/rate/pistachio_pro/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/latinpadble/keymaps/via/rules.mk
+++ b/keyboards/rate/pistachio_pro/keymaps/via/rules.mk
diff --git a/keyboards/pistachio_pro/lib/bme280.c b/keyboards/rate/pistachio_pro/lib/bme280.c
index f3dc231dc5..f3dc231dc5 100644
--- a/keyboards/pistachio_pro/lib/bme280.c
+++ b/keyboards/rate/pistachio_pro/lib/bme280.c
diff --git a/keyboards/pistachio_pro/lib/bme280.h b/keyboards/rate/pistachio_pro/lib/bme280.h
index eb503038d3..eb503038d3 100644
--- a/keyboards/pistachio_pro/lib/bme280.h
+++ b/keyboards/rate/pistachio_pro/lib/bme280.h
diff --git a/keyboards/pistachio_pro/lib/glcdfont.c b/keyboards/rate/pistachio_pro/lib/glcdfont.c
index 41041f12bb..41041f12bb 100644
--- a/keyboards/pistachio_pro/lib/glcdfont.c
+++ b/keyboards/rate/pistachio_pro/lib/glcdfont.c
diff --git a/keyboards/pistachio_pro/matrix.c b/keyboards/rate/pistachio_pro/matrix.c
index 6cbfb6dfea..6cbfb6dfea 100644
--- a/keyboards/pistachio_pro/matrix.c
+++ b/keyboards/rate/pistachio_pro/matrix.c
diff --git a/keyboards/pistachio_pro/pistachio_pro.c b/keyboards/rate/pistachio_pro/pistachio_pro.c
index fda14471b7..fda14471b7 100644
--- a/keyboards/pistachio_pro/pistachio_pro.c
+++ b/keyboards/rate/pistachio_pro/pistachio_pro.c
diff --git a/keyboards/pistachio_pro/pistachio_pro.h b/keyboards/rate/pistachio_pro/pistachio_pro.h
index 42de95ea87..42de95ea87 100644
--- a/keyboards/pistachio_pro/pistachio_pro.h
+++ b/keyboards/rate/pistachio_pro/pistachio_pro.h
diff --git a/keyboards/rate/pistachio_pro/readme.md b/keyboards/rate/pistachio_pro/readme.md
new file mode 100644
index 0000000000..752f98b73b
--- /dev/null
+++ b/keyboards/rate/pistachio_pro/readme.md
@@ -0,0 +1,21 @@
+# PistachioPro
+
+![PistachioPro](https://ratelog.net/wp-content/uploads/2021/07/PistachioPro-scaled.jpg)
+
+This is a JIS layout TKL keyboard with 89 keys, encoder and OLED.
+
+* Keyboard Maintainer: [rate](https://github.com/7-rate)
+* Hardware Supported: PistachioPro PCB,
+* Hardware Availability: [Booth Shop](https://rates.booth.pm/items/2925303)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rate/pistachio_pro:default
+
+Flashing example for this keyboard:
+
+ make rate/pistachio_pro:default:flash
+
+To reset the keyboard into bootloader mode, press the reset switch on the underside.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pistachio_pro/rules.mk b/keyboards/rate/pistachio_pro/rules.mk
index 6816d8d32b..6816d8d32b 100644
--- a/keyboards/pistachio_pro/rules.mk
+++ b/keyboards/rate/pistachio_pro/rules.mk
diff --git a/keyboards/choco60/choco60.c b/keyboards/recompile_keys/choco60/choco60.c
index fc56c68ac8..fc56c68ac8 100644
--- a/keyboards/choco60/choco60.c
+++ b/keyboards/recompile_keys/choco60/choco60.c
diff --git a/keyboards/choco60/choco60.h b/keyboards/recompile_keys/choco60/choco60.h
index fedcf942bf..fedcf942bf 100644
--- a/keyboards/choco60/choco60.h
+++ b/keyboards/recompile_keys/choco60/choco60.h
diff --git a/keyboards/choco60/config.h b/keyboards/recompile_keys/choco60/config.h
index 72264f51e2..72264f51e2 100644
--- a/keyboards/choco60/config.h
+++ b/keyboards/recompile_keys/choco60/config.h
diff --git a/keyboards/choco60/info.json b/keyboards/recompile_keys/choco60/info.json
index 193e8f37b6..193e8f37b6 100644
--- a/keyboards/choco60/info.json
+++ b/keyboards/recompile_keys/choco60/info.json
diff --git a/keyboards/choco60/keymaps/default/keymap.c b/keyboards/recompile_keys/choco60/keymaps/default/keymap.c
index c906fef779..c906fef779 100644
--- a/keyboards/choco60/keymaps/default/keymap.c
+++ b/keyboards/recompile_keys/choco60/keymaps/default/keymap.c
diff --git a/keyboards/choco60/keymaps/default/readme.md b/keyboards/recompile_keys/choco60/keymaps/default/readme.md
index f55e392c39..f55e392c39 100644
--- a/keyboards/choco60/keymaps/default/readme.md
+++ b/keyboards/recompile_keys/choco60/keymaps/default/readme.md
diff --git a/keyboards/choco60/keymaps/via/keymap.c b/keyboards/recompile_keys/choco60/keymaps/via/keymap.c
index 878a74210b..878a74210b 100644
--- a/keyboards/choco60/keymaps/via/keymap.c
+++ b/keyboards/recompile_keys/choco60/keymaps/via/keymap.c
diff --git a/keyboards/mio/keymaps/via/rules.mk b/keyboards/recompile_keys/choco60/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/mio/keymaps/via/rules.mk
+++ b/keyboards/recompile_keys/choco60/keymaps/via/rules.mk
diff --git a/keyboards/recompile_keys/choco60/readme.md b/keyboards/recompile_keys/choco60/readme.md
new file mode 100644
index 0000000000..187c3c8942
--- /dev/null
+++ b/keyboards/recompile_keys/choco60/readme.md
@@ -0,0 +1,17 @@
+# Choco60
+
+A 60% split keyboard for programmers.
+
+1. [Rev.1](rev2/): Pro Micro supported.
+2. [Rev.2](rev2/): Atmega32u2, USB-C supported.
+
+* Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
+* Hardware Supported: Choco60 PCB Rev1, Rev.2
+* Hardware Availability: https://keys.recompile.net/projects/choco60/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make recompile_keys/choco60/rev1:default
+ make recompile_keys/choco60/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/runner3680/3x7/.noci b/keyboards/recompile_keys/choco60/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x7/.noci
+++ b/keyboards/recompile_keys/choco60/rev1/.noci
diff --git a/keyboards/choco60/rev1/config.h b/keyboards/recompile_keys/choco60/rev1/config.h
index c5efc6f5f0..c5efc6f5f0 100644
--- a/keyboards/choco60/rev1/config.h
+++ b/keyboards/recompile_keys/choco60/rev1/config.h
diff --git a/keyboards/choco60/rev1/readme.md b/keyboards/recompile_keys/choco60/rev1/readme.md
index df9d50e0aa..df9d50e0aa 100644
--- a/keyboards/choco60/rev1/readme.md
+++ b/keyboards/recompile_keys/choco60/rev1/readme.md
diff --git a/keyboards/choco60/rev1/rev1.c b/keyboards/recompile_keys/choco60/rev1/rev1.c
index fe60477e34..fe60477e34 100644
--- a/keyboards/choco60/rev1/rev1.c
+++ b/keyboards/recompile_keys/choco60/rev1/rev1.c
diff --git a/keyboards/choco60/rev1/rev1.h b/keyboards/recompile_keys/choco60/rev1/rev1.h
index fa161f267e..fa161f267e 100644
--- a/keyboards/choco60/rev1/rev1.h
+++ b/keyboards/recompile_keys/choco60/rev1/rev1.h
diff --git a/keyboards/choco60/rev1/rules.mk b/keyboards/recompile_keys/choco60/rev1/rules.mk
index ff16426c32..ff16426c32 100644
--- a/keyboards/choco60/rev1/rules.mk
+++ b/keyboards/recompile_keys/choco60/rev1/rules.mk
diff --git a/keyboards/choco60/rev2/config.h b/keyboards/recompile_keys/choco60/rev2/config.h
index 46aef108d8..46aef108d8 100644
--- a/keyboards/choco60/rev2/config.h
+++ b/keyboards/recompile_keys/choco60/rev2/config.h
diff --git a/keyboards/choco60/rev2/readme.md b/keyboards/recompile_keys/choco60/rev2/readme.md
index 6e3d4dd2e5..6e3d4dd2e5 100644
--- a/keyboards/choco60/rev2/readme.md
+++ b/keyboards/recompile_keys/choco60/rev2/readme.md
diff --git a/keyboards/choco60/rev2/rev2.c b/keyboards/recompile_keys/choco60/rev2/rev2.c
index 5eabb33ac6..5eabb33ac6 100644
--- a/keyboards/choco60/rev2/rev2.c
+++ b/keyboards/recompile_keys/choco60/rev2/rev2.c
diff --git a/keyboards/choco60/rev2/rev2.h b/keyboards/recompile_keys/choco60/rev2/rev2.h
index fa161f267e..fa161f267e 100644
--- a/keyboards/choco60/rev2/rev2.h
+++ b/keyboards/recompile_keys/choco60/rev2/rev2.h
diff --git a/keyboards/choco60/rev2/rules.mk b/keyboards/recompile_keys/choco60/rev2/rules.mk
index f8bad8e08e..f8bad8e08e 100644
--- a/keyboards/choco60/rev2/rules.mk
+++ b/keyboards/recompile_keys/choco60/rev2/rules.mk
diff --git a/keyboards/recompile_keys/choco60/rules.mk b/keyboards/recompile_keys/choco60/rules.mk
new file mode 100644
index 0000000000..6abfd34d47
--- /dev/null
+++ b/keyboards/recompile_keys/choco60/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = recompile_keys/choco60/rev1
diff --git a/keyboards/runner3680/3x8/.noci b/keyboards/recompile_keys/cocoa40/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x8/.noci
+++ b/keyboards/recompile_keys/cocoa40/.noci
diff --git a/keyboards/cocoa40/cocoa40.c b/keyboards/recompile_keys/cocoa40/cocoa40.c
index fdc9f9c0ea..fdc9f9c0ea 100644
--- a/keyboards/cocoa40/cocoa40.c
+++ b/keyboards/recompile_keys/cocoa40/cocoa40.c
diff --git a/keyboards/cocoa40/cocoa40.h b/keyboards/recompile_keys/cocoa40/cocoa40.h
index a468a75ef2..a468a75ef2 100644
--- a/keyboards/cocoa40/cocoa40.h
+++ b/keyboards/recompile_keys/cocoa40/cocoa40.h
diff --git a/keyboards/cocoa40/config.h b/keyboards/recompile_keys/cocoa40/config.h
index 50da34ffbd..50da34ffbd 100644
--- a/keyboards/cocoa40/config.h
+++ b/keyboards/recompile_keys/cocoa40/config.h
diff --git a/keyboards/cocoa40/info.json b/keyboards/recompile_keys/cocoa40/info.json
index d2b75a6fca..d2b75a6fca 100644
--- a/keyboards/cocoa40/info.json
+++ b/keyboards/recompile_keys/cocoa40/info.json
diff --git a/keyboards/cocoa40/keymaps/default/keymap.c b/keyboards/recompile_keys/cocoa40/keymaps/default/keymap.c
index 320f918a9e..320f918a9e 100644
--- a/keyboards/cocoa40/keymaps/default/keymap.c
+++ b/keyboards/recompile_keys/cocoa40/keymaps/default/keymap.c
diff --git a/keyboards/cocoa40/keymaps/default/readme.md b/keyboards/recompile_keys/cocoa40/keymaps/default/readme.md
index 9e530faff0..9e530faff0 100644
--- a/keyboards/cocoa40/keymaps/default/readme.md
+++ b/keyboards/recompile_keys/cocoa40/keymaps/default/readme.md
diff --git a/keyboards/recompile_keys/cocoa40/readme.md b/keyboards/recompile_keys/cocoa40/readme.md
new file mode 100644
index 0000000000..2690628940
--- /dev/null
+++ b/keyboards/recompile_keys/cocoa40/readme.md
@@ -0,0 +1,15 @@
+# cocoa40
+
+![cocoa40](https://keys.recompile.net/images/cocoa40-main@600w.jpg)
+
+A 40% split keyboard for programmers.
+
+Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
+Hardware Supported: The Cocoa40 PCBs, Pro Micro supported
+Hardware Availability: https://keys.recompile.net/projects/cocoa40/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make recompile_keys/cocoa40:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cocoa40/rules.mk b/keyboards/recompile_keys/cocoa40/rules.mk
index 3ef3128f4b..3ef3128f4b 100644
--- a/keyboards/cocoa40/rules.mk
+++ b/keyboards/recompile_keys/cocoa40/rules.mk
diff --git a/keyboards/mio/config.h b/keyboards/recompile_keys/mio/config.h
index 7eab9ea590..7eab9ea590 100644
--- a/keyboards/mio/config.h
+++ b/keyboards/recompile_keys/mio/config.h
diff --git a/keyboards/mio/info.json b/keyboards/recompile_keys/mio/info.json
index fb66fba7f5..fb66fba7f5 100644
--- a/keyboards/mio/info.json
+++ b/keyboards/recompile_keys/mio/info.json
diff --git a/keyboards/mio/keymaps/default/keymap.c b/keyboards/recompile_keys/mio/keymaps/default/keymap.c
index 39223f537a..39223f537a 100644
--- a/keyboards/mio/keymaps/default/keymap.c
+++ b/keyboards/recompile_keys/mio/keymaps/default/keymap.c
diff --git a/keyboards/mio/keymaps/default/readme.md b/keyboards/recompile_keys/mio/keymaps/default/readme.md
index 688c514730..688c514730 100644
--- a/keyboards/mio/keymaps/default/readme.md
+++ b/keyboards/recompile_keys/mio/keymaps/default/readme.md
diff --git a/keyboards/mio/keymaps/via/keymap.c b/keyboards/recompile_keys/mio/keymaps/via/keymap.c
index b521df9971..b521df9971 100644
--- a/keyboards/mio/keymaps/via/keymap.c
+++ b/keyboards/recompile_keys/mio/keymaps/via/keymap.c
diff --git a/keyboards/nomu30/keymaps/via/rules.mk b/keyboards/recompile_keys/mio/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/nomu30/keymaps/via/rules.mk
+++ b/keyboards/recompile_keys/mio/keymaps/via/rules.mk
diff --git a/keyboards/mio/mio.c b/keyboards/recompile_keys/mio/mio.c
index 154a89d26f..154a89d26f 100644
--- a/keyboards/mio/mio.c
+++ b/keyboards/recompile_keys/mio/mio.c
diff --git a/keyboards/mio/mio.h b/keyboards/recompile_keys/mio/mio.h
index da6dc3229c..da6dc3229c 100644
--- a/keyboards/mio/mio.h
+++ b/keyboards/recompile_keys/mio/mio.h
diff --git a/keyboards/recompile_keys/mio/readme.md b/keyboards/recompile_keys/mio/readme.md
new file mode 100644
index 0000000000..2703c39e69
--- /dev/null
+++ b/keyboards/recompile_keys/mio/readme.md
@@ -0,0 +1,23 @@
+# MIO
+
+![MIO](https://keys.recompile.net/images/mio-01@600w.jpg)
+
+High-end custom gaming keyboard.
+
+* Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
+* Hardware Supported: Original MIO PCB
+* Hardware Availability: https://keys.recompile.net/projects/mio/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make recompile_keys/mio:default
+
+Flashing example for this keyboard:
+
+ make recompile_keys/mio: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 Mode
+
+In order to flash the firmware, you need to put the keyboard into bootloader mode. To enable the bootloader mode, press the reset button (SW1) on the underside of the PCB.
diff --git a/keyboards/mio/rules.mk b/keyboards/recompile_keys/mio/rules.mk
index 3ff392a61f..3ff392a61f 100644
--- a/keyboards/mio/rules.mk
+++ b/keyboards/recompile_keys/mio/rules.mk
diff --git a/keyboards/runner3680/4x6/.noci b/keyboards/recompile_keys/nomu30/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x6/.noci
+++ b/keyboards/recompile_keys/nomu30/.noci
diff --git a/keyboards/nomu30/config.h b/keyboards/recompile_keys/nomu30/config.h
index 62aec20525..62aec20525 100644
--- a/keyboards/nomu30/config.h
+++ b/keyboards/recompile_keys/nomu30/config.h
diff --git a/keyboards/nomu30/info.json b/keyboards/recompile_keys/nomu30/info.json
index 8f53f003b5..8f53f003b5 100644
--- a/keyboards/nomu30/info.json
+++ b/keyboards/recompile_keys/nomu30/info.json
diff --git a/keyboards/nomu30/keymaps/center_sprit/config.h b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/config.h
index 8861dc5396..8861dc5396 100644
--- a/keyboards/nomu30/keymaps/center_sprit/config.h
+++ b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/config.h
diff --git a/keyboards/nomu30/keymaps/center_sprit/keymap.c b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/keymap.c
index cc540b891f..cc540b891f 100644
--- a/keyboards/nomu30/keymaps/center_sprit/keymap.c
+++ b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/keymap.c
diff --git a/keyboards/nomu30/keymaps/center_sprit/readme.md b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/readme.md
index 754e37f46b..754e37f46b 100644
--- a/keyboards/nomu30/keymaps/center_sprit/readme.md
+++ b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/readme.md
diff --git a/keyboards/nomu30/keymaps/center_sprit/rules.mk b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/rules.mk
index 1b0d208ced..1b0d208ced 100644
--- a/keyboards/nomu30/keymaps/center_sprit/rules.mk
+++ b/keyboards/recompile_keys/nomu30/keymaps/center_sprit/rules.mk
diff --git a/keyboards/nomu30/keymaps/default/config.h b/keyboards/recompile_keys/nomu30/keymaps/default/config.h
index fb21eed1bc..fb21eed1bc 100644
--- a/keyboards/nomu30/keymaps/default/config.h
+++ b/keyboards/recompile_keys/nomu30/keymaps/default/config.h
diff --git a/keyboards/nomu30/keymaps/default/keymap.c b/keyboards/recompile_keys/nomu30/keymaps/default/keymap.c
index 8878c3b1e8..8878c3b1e8 100644
--- a/keyboards/nomu30/keymaps/default/keymap.c
+++ b/keyboards/recompile_keys/nomu30/keymaps/default/keymap.c
diff --git a/keyboards/nomu30/keymaps/default/readme.md b/keyboards/recompile_keys/nomu30/keymaps/default/readme.md
index 55bc458501..55bc458501 100644
--- a/keyboards/nomu30/keymaps/default/readme.md
+++ b/keyboards/recompile_keys/nomu30/keymaps/default/readme.md
diff --git a/keyboards/nomu30/keymaps/like_jis/config.h b/keyboards/recompile_keys/nomu30/keymaps/like_jis/config.h
index 8861dc5396..8861dc5396 100644
--- a/keyboards/nomu30/keymaps/like_jis/config.h
+++ b/keyboards/recompile_keys/nomu30/keymaps/like_jis/config.h
diff --git a/keyboards/nomu30/keymaps/like_jis/keymap.c b/keyboards/recompile_keys/nomu30/keymaps/like_jis/keymap.c
index fc2d26ad7a..fc2d26ad7a 100644
--- a/keyboards/nomu30/keymaps/like_jis/keymap.c
+++ b/keyboards/recompile_keys/nomu30/keymaps/like_jis/keymap.c
diff --git a/keyboards/nomu30/keymaps/like_jis/readme.md b/keyboards/recompile_keys/nomu30/keymaps/like_jis/readme.md
index ad64f06b15..ad64f06b15 100644
--- a/keyboards/nomu30/keymaps/like_jis/readme.md
+++ b/keyboards/recompile_keys/nomu30/keymaps/like_jis/readme.md
diff --git a/keyboards/nomu30/keymaps/like_jis/rules.mk b/keyboards/recompile_keys/nomu30/keymaps/like_jis/rules.mk
index b1a6026c2a..b1a6026c2a 100644
--- a/keyboards/nomu30/keymaps/like_jis/rules.mk
+++ b/keyboards/recompile_keys/nomu30/keymaps/like_jis/rules.mk
diff --git a/keyboards/nomu30/keymaps/via/keymap.c b/keyboards/recompile_keys/nomu30/keymaps/via/keymap.c
index e732c1f63e..e732c1f63e 100644
--- a/keyboards/nomu30/keymaps/via/keymap.c
+++ b/keyboards/recompile_keys/nomu30/keymaps/via/keymap.c
diff --git a/keyboards/pistachio_pro/keymaps/via/rules.mk b/keyboards/recompile_keys/nomu30/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/pistachio_pro/keymaps/via/rules.mk
+++ b/keyboards/recompile_keys/nomu30/keymaps/via/rules.mk
diff --git a/keyboards/nomu30/nomu30.c b/keyboards/recompile_keys/nomu30/nomu30.c
index 37a8614c11..37a8614c11 100644
--- a/keyboards/nomu30/nomu30.c
+++ b/keyboards/recompile_keys/nomu30/nomu30.c
diff --git a/keyboards/recompile_keys/nomu30/nomu30.h b/keyboards/recompile_keys/nomu30/nomu30.h
new file mode 100644
index 0000000000..964eb2a65f
--- /dev/null
+++ b/keyboards/recompile_keys/nomu30/nomu30.h
@@ -0,0 +1,34 @@
+/* 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
+
+#include "quantum.h"
+#ifdef KEYBOARD_recompile_keys_nomu30_rev1
+ #include "rev1.h"
+#elif KEYBOARD_recompile_keys_nomu30_rev2
+ #include "rev2.h"
+#endif
+
+#define LAYOUT( \
+ K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208 \
+) \
+{ \
+ { KC_NO, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, KC_NO }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/recompile_keys/nomu30/readme.md b/keyboards/recompile_keys/nomu30/readme.md
new file mode 100644
index 0000000000..e0551d0002
--- /dev/null
+++ b/keyboards/recompile_keys/nomu30/readme.md
@@ -0,0 +1,15 @@
+# nomu30
+
+![nomu30](https://keys.recompile.net/images/nomu30-main@600w.jpg)
+
+A 30% keyboard with ISO enter.
+
+Keyboard Maintainer: [Naoto Takai](https://github.com/takai)
+Hardware Supported: The Nomu30 PCBs, ProMicro supported
+Hardware Availability: https://keys.recompile.net/projects/nomu30/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make recompile_keys/nomu30:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/runner3680/4x7/.noci b/keyboards/recompile_keys/nomu30/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x7/.noci
+++ b/keyboards/recompile_keys/nomu30/rev1/.noci
diff --git a/keyboards/nomu30/rev1/config.h b/keyboards/recompile_keys/nomu30/rev1/config.h
index 718c840bd6..718c840bd6 100644
--- a/keyboards/nomu30/rev1/config.h
+++ b/keyboards/recompile_keys/nomu30/rev1/config.h
diff --git a/keyboards/nomu30/rev1/rev1.c b/keyboards/recompile_keys/nomu30/rev1/rev1.c
index 8adf9859f8..8adf9859f8 100644
--- a/keyboards/nomu30/rev1/rev1.c
+++ b/keyboards/recompile_keys/nomu30/rev1/rev1.c
diff --git a/keyboards/nomu30/rev1/rev1.h b/keyboards/recompile_keys/nomu30/rev1/rev1.h
index fa161f267e..fa161f267e 100644
--- a/keyboards/nomu30/rev1/rev1.h
+++ b/keyboards/recompile_keys/nomu30/rev1/rev1.h
diff --git a/keyboards/nomu30/rev1/rules.mk b/keyboards/recompile_keys/nomu30/rev1/rules.mk
index df6d769aec..df6d769aec 100644
--- a/keyboards/nomu30/rev1/rules.mk
+++ b/keyboards/recompile_keys/nomu30/rev1/rules.mk
diff --git a/keyboards/runner3680/4x8/.noci b/keyboards/recompile_keys/nomu30/rev2/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x8/.noci
+++ b/keyboards/recompile_keys/nomu30/rev2/.noci
diff --git a/keyboards/nomu30/rev2/config.h b/keyboards/recompile_keys/nomu30/rev2/config.h
index de9b37ec26..de9b37ec26 100644
--- a/keyboards/nomu30/rev2/config.h
+++ b/keyboards/recompile_keys/nomu30/rev2/config.h
diff --git a/keyboards/nomu30/rev2/rev2.c b/keyboards/recompile_keys/nomu30/rev2/rev2.c
index 5eabb33ac6..5eabb33ac6 100644
--- a/keyboards/nomu30/rev2/rev2.c
+++ b/keyboards/recompile_keys/nomu30/rev2/rev2.c
diff --git a/keyboards/nomu30/rev2/rev2.h b/keyboards/recompile_keys/nomu30/rev2/rev2.h
index fa161f267e..fa161f267e 100644
--- a/keyboards/nomu30/rev2/rev2.h
+++ b/keyboards/recompile_keys/nomu30/rev2/rev2.h
diff --git a/keyboards/nomu30/rev2/rules.mk b/keyboards/recompile_keys/nomu30/rev2/rules.mk
index eca6e85311..eca6e85311 100644
--- a/keyboards/nomu30/rev2/rules.mk
+++ b/keyboards/recompile_keys/nomu30/rev2/rules.mk
diff --git a/keyboards/recompile_keys/nomu30/rules.mk b/keyboards/recompile_keys/nomu30/rules.mk
new file mode 100644
index 0000000000..431b619249
--- /dev/null
+++ b/keyboards/recompile_keys/nomu30/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = recompile_keys/nomu30/rev1
diff --git a/keyboards/redox_w/config.h b/keyboards/redox_w/config.h
index b480b072f9..c4aeb32d58 100644
--- a/keyboards/redox_w/config.h
+++ b/keyboards/redox_w/config.h
@@ -55,12 +55,3 @@
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/redox_w/matrix.c b/keyboards/redox_w/matrix.c
index 703987a939..fd25231d9e 100644
--- a/keyboards/redox_w/matrix.c
+++ b/keyboards/redox_w/matrix.c
@@ -13,89 +13,21 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
- matrix_init_quantum();
- serial_init();
+void matrix_init_custom(void) {
+ uart_init(1000000);
}
-uint8_t matrix_scan(void)
-{
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
uint32_t timeout = 0;
+ bool changed = false;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[11] = {0};
@@ -105,58 +37,27 @@ uint8_t matrix_scan(void)
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while (!uart_available()) {
timeout++;
- if (timeout > 10000){
+ if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
+ if (uart_data[10] == 0xE0) {
//shifting and transferring the keystates to the QMK matrix variable
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 7;
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 7;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
}
}
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
+ return changed;
}
diff --git a/keyboards/redox_w/rules.mk b/keyboards/redox_w/rules.mk
index a8bd3a027a..8cb1736147 100644
--- a/keyboards/redox_w/rules.mk
+++ b/keyboards/redox_w/rules.mk
@@ -8,13 +8,16 @@ BOOTLOADER = caterina
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+CUSTOM_MATRIX = lite
-# # project specific files
-SRC += matrix.c serial_uart.c
+# project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/redscarf_iiplus/verb/matrix.c b/keyboards/redscarf_iiplus/verb/matrix.c
index 42cfb7c037..88ecb586b3 100755
--- a/keyboards/redscarf_iiplus/verb/matrix.c
+++ b/keyboards/redscarf_iiplus/verb/matrix.c
@@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/redscarf_iiplus/verc/matrix.c b/keyboards/redscarf_iiplus/verc/matrix.c
index 42cfb7c037..88ecb586b3 100755
--- a/keyboards/redscarf_iiplus/verc/matrix.c
+++ b/keyboards/redscarf_iiplus/verc/matrix.c
@@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/redscarf_iiplus/verd/matrix.c b/keyboards/redscarf_iiplus/verd/matrix.c
index 78d1191b68..d9dbb3c0a3 100644
--- a/keyboards/redscarf_iiplus/verd/matrix.c
+++ b/keyboards/redscarf_iiplus/verd/matrix.c
@@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/runner3680/5x6/.noci b/keyboards/reviung/reviung33/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x6/.noci
+++ b/keyboards/reviung/reviung33/.noci
diff --git a/keyboards/reviung33/config.h b/keyboards/reviung/reviung33/config.h
index b65d1d7c39..b65d1d7c39 100644
--- a/keyboards/reviung33/config.h
+++ b/keyboards/reviung/reviung33/config.h
diff --git a/keyboards/reviung33/info.json b/keyboards/reviung/reviung33/info.json
index 450a41930b..450a41930b 100644
--- a/keyboards/reviung33/info.json
+++ b/keyboards/reviung/reviung33/info.json
diff --git a/keyboards/reviung33/keymaps/default/keymap.c b/keyboards/reviung/reviung33/keymaps/default/keymap.c
index 875df97601..875df97601 100644
--- a/keyboards/reviung33/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung33/keymaps/default/keymap.c
diff --git a/keyboards/reviung33/keymaps/default/readme.md b/keyboards/reviung/reviung33/keymaps/default/readme.md
index 9121b14294..9121b14294 100644
--- a/keyboards/reviung33/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung33/keymaps/default/readme.md
diff --git a/keyboards/reviung33/keymaps/default_jp/keymap.c b/keyboards/reviung/reviung33/keymaps/default_jp/keymap.c
index 1265a301ed..1265a301ed 100644
--- a/keyboards/reviung33/keymaps/default_jp/keymap.c
+++ b/keyboards/reviung/reviung33/keymaps/default_jp/keymap.c
diff --git a/keyboards/reviung33/keymaps/default_jp/readme.md b/keyboards/reviung/reviung33/keymaps/default_jp/readme.md
index d7739a3d86..d7739a3d86 100644
--- a/keyboards/reviung33/keymaps/default_jp/readme.md
+++ b/keyboards/reviung/reviung33/keymaps/default_jp/readme.md
diff --git a/keyboards/reviung33/readme.md b/keyboards/reviung/reviung33/readme.md
index 64ed4d57fe..64ed4d57fe 100644
--- a/keyboards/reviung33/readme.md
+++ b/keyboards/reviung/reviung33/readme.md
diff --git a/keyboards/reviung33/reviung33.c b/keyboards/reviung/reviung33/reviung33.c
index 7684cb72c8..7684cb72c8 100644
--- a/keyboards/reviung33/reviung33.c
+++ b/keyboards/reviung/reviung33/reviung33.c
diff --git a/keyboards/reviung33/reviung33.h b/keyboards/reviung/reviung33/reviung33.h
index ea72a4aadb..ea72a4aadb 100644
--- a/keyboards/reviung33/reviung33.h
+++ b/keyboards/reviung/reviung33/reviung33.h
diff --git a/keyboards/reviung33/rules.mk b/keyboards/reviung/reviung33/rules.mk
index 77a2d1ee7d..77a2d1ee7d 100644
--- a/keyboards/reviung33/rules.mk
+++ b/keyboards/reviung/reviung33/rules.mk
diff --git a/keyboards/reviung34/config.h b/keyboards/reviung/reviung34/config.h
index 0847678e86..0847678e86 100755
--- a/keyboards/reviung34/config.h
+++ b/keyboards/reviung/reviung34/config.h
diff --git a/keyboards/reviung34/info.json b/keyboards/reviung/reviung34/info.json
index ecd89d4742..ecd89d4742 100755
--- a/keyboards/reviung34/info.json
+++ b/keyboards/reviung/reviung34/info.json
diff --git a/keyboards/reviung34/keymaps/default/keymap.c b/keyboards/reviung/reviung34/keymaps/default/keymap.c
index 66939d2469..66939d2469 100755
--- a/keyboards/reviung34/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung34/keymaps/default/keymap.c
diff --git a/keyboards/reviung34/keymaps/default/readme.md b/keyboards/reviung/reviung34/keymaps/default/readme.md
index 2e4619fae8..2e4619fae8 100755
--- a/keyboards/reviung34/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung34/keymaps/default/readme.md
diff --git a/keyboards/reviung34/keymaps/default_2uL/keymap.c b/keyboards/reviung/reviung34/keymaps/default_2uL/keymap.c
index 767c0ff4c6..767c0ff4c6 100755
--- a/keyboards/reviung34/keymaps/default_2uL/keymap.c
+++ b/keyboards/reviung/reviung34/keymaps/default_2uL/keymap.c
diff --git a/keyboards/reviung34/keymaps/default_2uL/readme.md b/keyboards/reviung/reviung34/keymaps/default_2uL/readme.md
index 2e4619fae8..2e4619fae8 100755
--- a/keyboards/reviung34/keymaps/default_2uL/readme.md
+++ b/keyboards/reviung/reviung34/keymaps/default_2uL/readme.md
diff --git a/keyboards/reviung34/keymaps/default_jp/keymap.c b/keyboards/reviung/reviung34/keymaps/default_jp/keymap.c
index c37d87662c..c37d87662c 100755
--- a/keyboards/reviung34/keymaps/default_jp/keymap.c
+++ b/keyboards/reviung/reviung34/keymaps/default_jp/keymap.c
diff --git a/keyboards/reviung34/keymaps/default_jp/readme.md b/keyboards/reviung/reviung34/keymaps/default_jp/readme.md
index 2e4619fae8..2e4619fae8 100755
--- a/keyboards/reviung34/keymaps/default_jp/readme.md
+++ b/keyboards/reviung/reviung34/keymaps/default_jp/readme.md
diff --git a/keyboards/reviung34/keymaps/default_rgb/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h
index b68201231f..b68201231f 100644
--- a/keyboards/reviung34/keymaps/default_rgb/config.h
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h
diff --git a/keyboards/reviung34/keymaps/default_rgb/keymap.c b/keyboards/reviung/reviung34/keymaps/default_rgb/keymap.c
index e2d852354b..e2d852354b 100755
--- a/keyboards/reviung34/keymaps/default_rgb/keymap.c
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb/keymap.c
diff --git a/keyboards/reviung34/keymaps/default_rgb/readme.md b/keyboards/reviung/reviung34/keymaps/default_rgb/readme.md
index 81b04868cb..81b04868cb 100755
--- a/keyboards/reviung34/keymaps/default_rgb/readme.md
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb/readme.md
diff --git a/keyboards/reviung39/keymaps/default_s/rules.mk b/keyboards/reviung/reviung34/keymaps/default_rgb/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/reviung39/keymaps/default_s/rules.mk
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb/rules.mk
diff --git a/keyboards/reviung34/keymaps/default_rgb2u/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h
index b68201231f..b68201231f 100644
--- a/keyboards/reviung34/keymaps/default_rgb2u/config.h
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h
diff --git a/keyboards/reviung34/keymaps/default_rgb2u/keymap.c b/keyboards/reviung/reviung34/keymaps/default_rgb2u/keymap.c
index f4f1d3be50..f4f1d3be50 100755
--- a/keyboards/reviung34/keymaps/default_rgb2u/keymap.c
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/keymap.c
diff --git a/keyboards/reviung34/keymaps/default_rgb2u/readme.md b/keyboards/reviung/reviung34/keymaps/default_rgb2u/readme.md
index 8acc99250f..8acc99250f 100755
--- a/keyboards/reviung34/keymaps/default_rgb2u/readme.md
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/readme.md
diff --git a/keyboards/suihankey/alpha/rules.mk b/keyboards/reviung/reviung34/keymaps/default_rgb2u/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/suihankey/alpha/rules.mk
+++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/rules.mk
diff --git a/keyboards/reviung34/readme.md b/keyboards/reviung/reviung34/readme.md
index 48b054cf94..48b054cf94 100755
--- a/keyboards/reviung34/readme.md
+++ b/keyboards/reviung/reviung34/readme.md
diff --git a/keyboards/reviung34/reviung34.c b/keyboards/reviung/reviung34/reviung34.c
index 00862d73e9..00862d73e9 100755
--- a/keyboards/reviung34/reviung34.c
+++ b/keyboards/reviung/reviung34/reviung34.c
diff --git a/keyboards/reviung34/reviung34.h b/keyboards/reviung/reviung34/reviung34.h
index 8385e5c8c2..8385e5c8c2 100755
--- a/keyboards/reviung34/reviung34.h
+++ b/keyboards/reviung/reviung34/reviung34.h
diff --git a/keyboards/reviung34/rules.mk b/keyboards/reviung/reviung34/rules.mk
index 203f9645e5..203f9645e5 100755
--- a/keyboards/reviung34/rules.mk
+++ b/keyboards/reviung/reviung34/rules.mk
diff --git a/keyboards/reviung39/config.h b/keyboards/reviung/reviung39/config.h
index 098497bc9f..098497bc9f 100644
--- a/keyboards/reviung39/config.h
+++ b/keyboards/reviung/reviung39/config.h
diff --git a/keyboards/reviung39/info.json b/keyboards/reviung/reviung39/info.json
index 725e2ff8e1..725e2ff8e1 100644
--- a/keyboards/reviung39/info.json
+++ b/keyboards/reviung/reviung39/info.json
diff --git a/keyboards/reviung39/keymaps/default/config.h b/keyboards/reviung/reviung39/keymaps/default/config.h
index 70c641fca0..70c641fca0 100644
--- a/keyboards/reviung39/keymaps/default/config.h
+++ b/keyboards/reviung/reviung39/keymaps/default/config.h
diff --git a/keyboards/reviung39/keymaps/default/keymap.c b/keyboards/reviung/reviung39/keymaps/default/keymap.c
index 7030be13fa..7030be13fa 100644
--- a/keyboards/reviung39/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung39/keymaps/default/keymap.c
diff --git a/keyboards/reviung39/keymaps/default/readme.md b/keyboards/reviung/reviung39/keymaps/default/readme.md
index 0c8f52d105..0c8f52d105 100644
--- a/keyboards/reviung39/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung39/keymaps/default/readme.md
diff --git a/keyboards/suihankey/rev1/rules.mk b/keyboards/reviung/reviung39/keymaps/default/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/suihankey/rev1/rules.mk
+++ b/keyboards/reviung/reviung39/keymaps/default/rules.mk
diff --git a/keyboards/reviung39/keymaps/default_s/config.h b/keyboards/reviung/reviung39/keymaps/default_s/config.h
index 48be04a5b1..48be04a5b1 100644
--- a/keyboards/reviung39/keymaps/default_s/config.h
+++ b/keyboards/reviung/reviung39/keymaps/default_s/config.h
diff --git a/keyboards/reviung39/keymaps/default_s/keymap.c b/keyboards/reviung/reviung39/keymaps/default_s/keymap.c
index 42e2694315..42e2694315 100644
--- a/keyboards/reviung39/keymaps/default_s/keymap.c
+++ b/keyboards/reviung/reviung39/keymaps/default_s/keymap.c
diff --git a/keyboards/reviung39/keymaps/default_s/readme.md b/keyboards/reviung/reviung39/keymaps/default_s/readme.md
index b882ec40c2..b882ec40c2 100644
--- a/keyboards/reviung39/keymaps/default_s/readme.md
+++ b/keyboards/reviung/reviung39/keymaps/default_s/readme.md
diff --git a/keyboards/suihankey/split/alpha/rules.mk b/keyboards/reviung/reviung39/keymaps/default_s/rules.mk
index 1e3cebb145..1e3cebb145 100644
--- a/keyboards/suihankey/split/alpha/rules.mk
+++ b/keyboards/reviung/reviung39/keymaps/default_s/rules.mk
diff --git a/keyboards/reviung39/keymaps/toshi0383/config.h b/keyboards/reviung/reviung39/keymaps/toshi0383/config.h
index cd201ebfbb..cd201ebfbb 100644
--- a/keyboards/reviung39/keymaps/toshi0383/config.h
+++ b/keyboards/reviung/reviung39/keymaps/toshi0383/config.h
diff --git a/keyboards/reviung39/keymaps/toshi0383/keymap.c b/keyboards/reviung/reviung39/keymaps/toshi0383/keymap.c
index f2586086c2..f2586086c2 100644
--- a/keyboards/reviung39/keymaps/toshi0383/keymap.c
+++ b/keyboards/reviung/reviung39/keymaps/toshi0383/keymap.c
diff --git a/keyboards/reviung39/keymaps/toshi0383/readme.md b/keyboards/reviung/reviung39/keymaps/toshi0383/readme.md
index 5a09f2559a..5a09f2559a 100644
--- a/keyboards/reviung39/keymaps/toshi0383/readme.md
+++ b/keyboards/reviung/reviung39/keymaps/toshi0383/readme.md
diff --git a/keyboards/reviung39/keymaps/toshi0383/rules.mk b/keyboards/reviung/reviung39/keymaps/toshi0383/rules.mk
index 7ad666d1a3..7ad666d1a3 100644
--- a/keyboards/reviung39/keymaps/toshi0383/rules.mk
+++ b/keyboards/reviung/reviung39/keymaps/toshi0383/rules.mk
diff --git a/keyboards/reviung39/keymaps/via/keymap.c b/keyboards/reviung/reviung39/keymaps/via/keymap.c
index 0a4a664dc2..0a4a664dc2 100644
--- a/keyboards/reviung39/keymaps/via/keymap.c
+++ b/keyboards/reviung/reviung39/keymaps/via/keymap.c
diff --git a/keyboards/reviung39/keymaps/via/rules.mk b/keyboards/reviung/reviung39/keymaps/via/rules.mk
index 5d85ccd103..5d85ccd103 100644
--- a/keyboards/reviung39/keymaps/via/rules.mk
+++ b/keyboards/reviung/reviung39/keymaps/via/rules.mk
diff --git a/keyboards/reviung39/readme.md b/keyboards/reviung/reviung39/readme.md
index e0bf642828..e0bf642828 100644
--- a/keyboards/reviung39/readme.md
+++ b/keyboards/reviung/reviung39/readme.md
diff --git a/keyboards/reviung39/reviung39.c b/keyboards/reviung/reviung39/reviung39.c
index 0948106e9d..0948106e9d 100644
--- a/keyboards/reviung39/reviung39.c
+++ b/keyboards/reviung/reviung39/reviung39.c
diff --git a/keyboards/reviung39/reviung39.h b/keyboards/reviung/reviung39/reviung39.h
index 89776c5aa2..89776c5aa2 100644
--- a/keyboards/reviung39/reviung39.h
+++ b/keyboards/reviung/reviung39/reviung39.h
diff --git a/keyboards/reviung39/rules.mk b/keyboards/reviung/reviung39/rules.mk
index 203f9645e5..203f9645e5 100644
--- a/keyboards/reviung39/rules.mk
+++ b/keyboards/reviung/reviung39/rules.mk
diff --git a/keyboards/reviung41/config.h b/keyboards/reviung/reviung41/config.h
index 967ca791d5..967ca791d5 100644
--- a/keyboards/reviung41/config.h
+++ b/keyboards/reviung/reviung41/config.h
diff --git a/keyboards/reviung41/info.json b/keyboards/reviung/reviung41/info.json
index ff9e11b939..ff9e11b939 100644
--- a/keyboards/reviung41/info.json
+++ b/keyboards/reviung/reviung41/info.json
diff --git a/keyboards/reviung41/keymaps/ciutadellla/config.h b/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h
index 920c317e4b..920c317e4b 100644
--- a/keyboards/reviung41/keymaps/ciutadellla/config.h
+++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h
diff --git a/keyboards/reviung41/keymaps/ciutadellla/keymap.c b/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c
index a35b677197..a35b677197 100644
--- a/keyboards/reviung41/keymaps/ciutadellla/keymap.c
+++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c
diff --git a/keyboards/reviung41/keymaps/ciutadellla/rules.mk b/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk
index eeafc12006..eeafc12006 100644
--- a/keyboards/reviung41/keymaps/ciutadellla/rules.mk
+++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk
diff --git a/keyboards/reviung41/keymaps/default/keymap.c b/keyboards/reviung/reviung41/keymaps/default/keymap.c
index 4231e4896b..4231e4896b 100644
--- a/keyboards/reviung41/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung41/keymaps/default/keymap.c
diff --git a/keyboards/reviung41/keymaps/default/readme.md b/keyboards/reviung/reviung41/keymaps/default/readme.md
index 7e8120413e..7e8120413e 100644
--- a/keyboards/reviung41/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung41/keymaps/default/readme.md
diff --git a/keyboards/reviung41/keymaps/via/keymap.c b/keyboards/reviung/reviung41/keymaps/via/keymap.c
index 1f0bce741f..1f0bce741f 100644
--- a/keyboards/reviung41/keymaps/via/keymap.c
+++ b/keyboards/reviung/reviung41/keymaps/via/keymap.c
diff --git a/keyboards/reviung41/keymaps/via/rules.mk b/keyboards/reviung/reviung41/keymaps/via/rules.mk
index 5ed1ee4706..5ed1ee4706 100644
--- a/keyboards/reviung41/keymaps/via/rules.mk
+++ b/keyboards/reviung/reviung41/keymaps/via/rules.mk
diff --git a/keyboards/reviung41/readme.md b/keyboards/reviung/reviung41/readme.md
index c8f5146385..c8f5146385 100644
--- a/keyboards/reviung41/readme.md
+++ b/keyboards/reviung/reviung41/readme.md
diff --git a/keyboards/reviung41/reviung41.c b/keyboards/reviung/reviung41/reviung41.c
index 05bb42160a..05bb42160a 100644
--- a/keyboards/reviung41/reviung41.c
+++ b/keyboards/reviung/reviung41/reviung41.c
diff --git a/keyboards/reviung41/reviung41.h b/keyboards/reviung/reviung41/reviung41.h
index 6bc80e8b21..6bc80e8b21 100644
--- a/keyboards/reviung41/reviung41.h
+++ b/keyboards/reviung/reviung41/reviung41.h
diff --git a/keyboards/reviung41/rules.mk b/keyboards/reviung/reviung41/rules.mk
index e4e00e6274..e4e00e6274 100644
--- a/keyboards/reviung41/rules.mk
+++ b/keyboards/reviung/reviung41/rules.mk
diff --git a/keyboards/reviung5/config.h b/keyboards/reviung/reviung5/config.h
index b06c5797fd..b06c5797fd 100644
--- a/keyboards/reviung5/config.h
+++ b/keyboards/reviung/reviung5/config.h
diff --git a/keyboards/reviung5/info.json b/keyboards/reviung/reviung5/info.json
index 78d27d64e2..78d27d64e2 100644
--- a/keyboards/reviung5/info.json
+++ b/keyboards/reviung/reviung5/info.json
diff --git a/keyboards/reviung5/keymaps/default/keymap.c b/keyboards/reviung/reviung5/keymaps/default/keymap.c
index 39f6669a52..39f6669a52 100644
--- a/keyboards/reviung5/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung5/keymaps/default/keymap.c
diff --git a/keyboards/reviung5/keymaps/default/readme.md b/keyboards/reviung/reviung5/keymaps/default/readme.md
index babdce579f..babdce579f 100644
--- a/keyboards/reviung5/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung5/keymaps/default/readme.md
diff --git a/keyboards/reviung5/keymaps/default_lre/keymap.c b/keyboards/reviung/reviung5/keymaps/default_lre/keymap.c
index 2e732e72fe..2e732e72fe 100644
--- a/keyboards/reviung5/keymaps/default_lre/keymap.c
+++ b/keyboards/reviung/reviung5/keymaps/default_lre/keymap.c
diff --git a/keyboards/reviung5/keymaps/default_lre/readme.md b/keyboards/reviung/reviung5/keymaps/default_lre/readme.md
index 0e3edee7b1..0e3edee7b1 100644
--- a/keyboards/reviung5/keymaps/default_lre/readme.md
+++ b/keyboards/reviung/reviung5/keymaps/default_lre/readme.md
diff --git a/keyboards/reviung5/keymaps/default_rre/keymap.c b/keyboards/reviung/reviung5/keymaps/default_rre/keymap.c
index 9ee41cb7e9..9ee41cb7e9 100644
--- a/keyboards/reviung5/keymaps/default_rre/keymap.c
+++ b/keyboards/reviung/reviung5/keymaps/default_rre/keymap.c
diff --git a/keyboards/reviung5/keymaps/default_rre/readme.md b/keyboards/reviung/reviung5/keymaps/default_rre/readme.md
index d16e25ce50..d16e25ce50 100644
--- a/keyboards/reviung5/keymaps/default_rre/readme.md
+++ b/keyboards/reviung/reviung5/keymaps/default_rre/readme.md
diff --git a/keyboards/reviung5/readme.md b/keyboards/reviung/reviung5/readme.md
index 990645649c..990645649c 100644
--- a/keyboards/reviung5/readme.md
+++ b/keyboards/reviung/reviung5/readme.md
diff --git a/keyboards/reviung5/reviung5.c b/keyboards/reviung/reviung5/reviung5.c
index a8f98f0627..a8f98f0627 100644
--- a/keyboards/reviung5/reviung5.c
+++ b/keyboards/reviung/reviung5/reviung5.c
diff --git a/keyboards/reviung5/reviung5.h b/keyboards/reviung/reviung5/reviung5.h
index f5d952ba94..f5d952ba94 100644
--- a/keyboards/reviung5/reviung5.h
+++ b/keyboards/reviung/reviung5/reviung5.h
diff --git a/keyboards/reviung5/rules.mk b/keyboards/reviung/reviung5/rules.mk
index a72c119315..a72c119315 100644
--- a/keyboards/reviung5/rules.mk
+++ b/keyboards/reviung/reviung5/rules.mk
diff --git a/keyboards/reviung53/config.h b/keyboards/reviung/reviung53/config.h
index d73e6eab8a..d73e6eab8a 100644
--- a/keyboards/reviung53/config.h
+++ b/keyboards/reviung/reviung53/config.h
diff --git a/keyboards/reviung53/info.json b/keyboards/reviung/reviung53/info.json
index ff63de5bc8..ff63de5bc8 100644
--- a/keyboards/reviung53/info.json
+++ b/keyboards/reviung/reviung53/info.json
diff --git a/keyboards/reviung53/keymaps/default/keymap.c b/keyboards/reviung/reviung53/keymaps/default/keymap.c
index a8d95d70d5..a8d95d70d5 100644
--- a/keyboards/reviung53/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung53/keymaps/default/keymap.c
diff --git a/keyboards/reviung53/keymaps/default/readme.md b/keyboards/reviung/reviung53/keymaps/default/readme.md
index 1e473c9a74..1e473c9a74 100644
--- a/keyboards/reviung53/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung53/keymaps/default/readme.md
diff --git a/keyboards/reviung53/keymaps/via/keymap.c b/keyboards/reviung/reviung53/keymaps/via/keymap.c
index a8d95d70d5..a8d95d70d5 100644
--- a/keyboards/reviung53/keymaps/via/keymap.c
+++ b/keyboards/reviung/reviung53/keymaps/via/keymap.c
diff --git a/keyboards/reviung53/keymaps/via/readme.md b/keyboards/reviung/reviung53/keymaps/via/readme.md
index 9b299ba286..9b299ba286 100644
--- a/keyboards/reviung53/keymaps/via/readme.md
+++ b/keyboards/reviung/reviung53/keymaps/via/readme.md
diff --git a/keyboards/naked60/keymaps/via/rules.mk b/keyboards/reviung/reviung53/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/naked60/keymaps/via/rules.mk
+++ b/keyboards/reviung/reviung53/keymaps/via/rules.mk
diff --git a/keyboards/reviung53/readme.md b/keyboards/reviung/reviung53/readme.md
index a2bfbcdbc2..a2bfbcdbc2 100644
--- a/keyboards/reviung53/readme.md
+++ b/keyboards/reviung/reviung53/readme.md
diff --git a/keyboards/reviung53/reviung53.c b/keyboards/reviung/reviung53/reviung53.c
index e2190aeccf..e2190aeccf 100644
--- a/keyboards/reviung53/reviung53.c
+++ b/keyboards/reviung/reviung53/reviung53.c
diff --git a/keyboards/reviung53/reviung53.h b/keyboards/reviung/reviung53/reviung53.h
index 89ebc45c18..89ebc45c18 100644
--- a/keyboards/reviung53/reviung53.h
+++ b/keyboards/reviung/reviung53/reviung53.h
diff --git a/keyboards/reviung/reviung53/rules.mk b/keyboards/reviung/reviung53/rules.mk
new file mode 100644
index 0000000000..bc1c6f2dc0
--- /dev/null
+++ b/keyboards/reviung/reviung53/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/runner3680/5x6_5x8/.noci b/keyboards/reviung/reviung61/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x6_5x8/.noci
+++ b/keyboards/reviung/reviung61/.noci
diff --git a/keyboards/reviung61/config.h b/keyboards/reviung/reviung61/config.h
index 26588d8688..26588d8688 100644
--- a/keyboards/reviung61/config.h
+++ b/keyboards/reviung/reviung61/config.h
diff --git a/keyboards/reviung61/info.json b/keyboards/reviung/reviung61/info.json
index 5a23617d55..5a23617d55 100644
--- a/keyboards/reviung61/info.json
+++ b/keyboards/reviung/reviung61/info.json
diff --git a/keyboards/reviung61/keymaps/default/keymap.c b/keyboards/reviung/reviung61/keymaps/default/keymap.c
index ef24d4be27..ef24d4be27 100644
--- a/keyboards/reviung61/keymaps/default/keymap.c
+++ b/keyboards/reviung/reviung61/keymaps/default/keymap.c
diff --git a/keyboards/reviung61/keymaps/default/readme.md b/keyboards/reviung/reviung61/keymaps/default/readme.md
index 43446daa89..43446daa89 100644
--- a/keyboards/reviung61/keymaps/default/readme.md
+++ b/keyboards/reviung/reviung61/keymaps/default/readme.md
diff --git a/keyboards/reviung61/keymaps/default_rgb/config.h b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h
index 619060d0bc..619060d0bc 100644
--- a/keyboards/reviung61/keymaps/default_rgb/config.h
+++ b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h
diff --git a/keyboards/reviung61/keymaps/default_rgb/keymap.c b/keyboards/reviung/reviung61/keymaps/default_rgb/keymap.c
index ef24d4be27..ef24d4be27 100644
--- a/keyboards/reviung61/keymaps/default_rgb/keymap.c
+++ b/keyboards/reviung/reviung61/keymaps/default_rgb/keymap.c
diff --git a/keyboards/reviung61/keymaps/default_rgb/readme.md b/keyboards/reviung/reviung61/keymaps/default_rgb/readme.md
index 741e912705..741e912705 100644
--- a/keyboards/reviung61/keymaps/default_rgb/readme.md
+++ b/keyboards/reviung/reviung61/keymaps/default_rgb/readme.md
diff --git a/keyboards/reviung61/keymaps/default_rgb/rules.mk b/keyboards/reviung/reviung61/keymaps/default_rgb/rules.mk
index 7ad666d1a3..7ad666d1a3 100644
--- a/keyboards/reviung61/keymaps/default_rgb/rules.mk
+++ b/keyboards/reviung/reviung61/keymaps/default_rgb/rules.mk
diff --git a/keyboards/reviung61/readme.md b/keyboards/reviung/reviung61/readme.md
index d483ec5b09..d483ec5b09 100644
--- a/keyboards/reviung61/readme.md
+++ b/keyboards/reviung/reviung61/readme.md
diff --git a/keyboards/reviung61/reviung61.c b/keyboards/reviung/reviung61/reviung61.c
index 3cd69bf27f..3cd69bf27f 100644
--- a/keyboards/reviung61/reviung61.c
+++ b/keyboards/reviung/reviung61/reviung61.c
diff --git a/keyboards/reviung61/reviung61.h b/keyboards/reviung/reviung61/reviung61.h
index bae0cd2155..bae0cd2155 100644
--- a/keyboards/reviung61/reviung61.h
+++ b/keyboards/reviung/reviung61/reviung61.h
diff --git a/keyboards/reviung61/rules.mk b/keyboards/reviung/reviung61/rules.mk
index badcdb845b..badcdb845b 100644
--- a/keyboards/reviung61/rules.mk
+++ b/keyboards/reviung/reviung61/rules.mk
diff --git a/keyboards/reviung53/rules.mk b/keyboards/reviung53/rules.mk
deleted file mode 100644
index 90670e4b9e..0000000000
--- a/keyboards/reviung53/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/rgbkb/common/touch_encoder.c b/keyboards/rgbkb/common/touch_encoder.c
index 6293739ec9..1e6c54e8eb 100644
--- a/keyboards/rgbkb/common/touch_encoder.c
+++ b/keyboards/rgbkb/common/touch_encoder.c
@@ -292,7 +292,7 @@ void touch_encoder_calibrate(void) {
write_register8(QT_CALIBRATE, 0x01);
}
-bool touch_encoder_calibrating(void) {
+bool touch_encoder_is_calibrating(void) {
return touch_raw[0] & CALIBRATION_BIT;
}
@@ -300,8 +300,8 @@ void touch_encoder_toggle(void) {
touch_disabled = !touch_disabled;
}
-bool touch_encoder_toggled(void) {
- return touch_disabled;
+bool touch_encoder_is_on(void) {
+ return !touch_disabled;
}
void touch_encoder_slave_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
diff --git a/keyboards/rgbkb/common/touch_encoder.h b/keyboards/rgbkb/common/touch_encoder.h
index 022f619063..bc9a9ccb7f 100644
--- a/keyboards/rgbkb/common/touch_encoder.h
+++ b/keyboards/rgbkb/common/touch_encoder.h
@@ -34,10 +34,10 @@ void touch_encoder_init(void);
void touch_encoder_update(int8_t transaction_id);
void touch_encoder_calibrate(void);
-bool touch_encoder_calibrating(void);
+bool touch_encoder_is_calibrating(void);
void touch_encoder_toggle(void);
-bool touch_encoder_toggled(void);
+bool touch_encoder_is_on(void);
// Called when touch encoder is tapped, weak function overridable by the kb
bool touch_encoder_tapped_kb(uint8_t index, uint8_t section);
diff --git a/keyboards/rgbkb/mun/config.h b/keyboards/rgbkb/mun/config.h
index af0876861e..eec3009d8c 100644
--- a/keyboards/rgbkb/mun/config.h
+++ b/keyboards/rgbkb/mun/config.h
@@ -21,8 +21,8 @@
/* Matrix Configuration - Rows are doubled up */
#define MATRIX_ROWS 14
-// B1, A2 reserved for encoder / touch encoder support
-#define MATRIX_ROW_PINS { A1, A3, B3, A13, B15, B1, A2 }
+// Last pins reserved for encoder / touch encoder support
+#define MATRIX_ROW_PINS { A1, A3, B3, A13, B15, NO_PIN, NO_PIN }
#define MATRIX_COLS 7
#define MATRIX_COL_PINS { A0, B11, B0, B10, B12, B2, A8 }
#define MATRIX_IO_DELAY 5
@@ -35,11 +35,11 @@
#define TOUCH_DEADZONE 50 // width of a "button", wider inputs will be interpreted as a swipe
#define TOUCH_TERM 350 // time of a "button" touch, longer inputs will be a swipe
#define TOUCH_RESOLUTION 25 // sensitivity of swipes, lower=faster
+#define TOUCH_SEGMENTS 3
/* Encoder Configuration */
#define ENCODERS_PAD_A { B8, B9 }
#define ENCODERS_PAD_B { A14, A15 }
-#define TOUCH_SEGMENTS 3
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/rgbkb/mun/keymaps/default/keymap.c b/keyboards/rgbkb/mun/keymaps/default/keymap.c
index 866b8a0d15..bdc2ea9811 100644
--- a/keyboards/rgbkb/mun/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/mun/keymaps/default/keymap.c
@@ -226,8 +226,8 @@ static void render_leds(void)
static void render_touch(void)
{
// Host Touch LED Status
- oled_write_P(!touch_encoder_toggled() ? PSTR("TOUCH") : PSTR(" "), false);
- oled_write_P(touch_encoder_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
}
bool oled_task_user(void) {
diff --git a/keyboards/rgbkb/mun/keymaps/via/keymap.c b/keyboards/rgbkb/mun/keymaps/via/keymap.c
index 866b8a0d15..bdc2ea9811 100644
--- a/keyboards/rgbkb/mun/keymaps/via/keymap.c
+++ b/keyboards/rgbkb/mun/keymaps/via/keymap.c
@@ -226,8 +226,8 @@ static void render_leds(void)
static void render_touch(void)
{
// Host Touch LED Status
- oled_write_P(!touch_encoder_toggled() ? PSTR("TOUCH") : PSTR(" "), false);
- oled_write_P(touch_encoder_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
}
bool oled_task_user(void) {
diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c b/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c
index ae5c0c9b19..0b01d43eb2 100644
--- a/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c
+++ b/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c
@@ -189,8 +189,8 @@ static void render_leds(void)
static void render_touch(void)
{
// Host Touch LED Status
- oled_write_P(!touch_encoder_toggled() ? PSTR("TOUCH") : PSTR(" "), false);
- oled_write_P(touch_encoder_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
}
#else
static uint32_t scan_counter = 0;
diff --git a/keyboards/rgbkb/mun/rules.mk b/keyboards/rgbkb/mun/rules.mk
index c7e6594ead..a682f3aa04 100644
--- a/keyboards/rgbkb/mun/rules.mk
+++ b/keyboards/rgbkb/mun/rules.mk
@@ -1,9 +1,13 @@
# MCU name
MCU = STM32F303
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
# Touch encoder needs
-SRC += ../common/touch_encoder.c
-SRC += ../common/common_oled.c
+VPATH += keyboards/rgbkb/common
+SRC += touch_encoder.c
+SRC += common_oled.c
QUANTUM_LIB_SRC += i2c_master.c
# Build Options
@@ -32,8 +36,7 @@ SERIAL_DRIVER = usart
LTO_ENABLE = yes
OPT = 3
-OPT_DEFS += -DOLED_FONT_H=\"../common/glcdfont.c\"
-OPT_DEFS += -Ikeyboards/rgbkb/common
+OPT_DEFS += -DOLED_FONT_H=\"keyboards/rgbkb/common/glcdfont.c\"
# matrix optimisations
SRC += matrix.c
diff --git a/keyboards/runner3680/5x7/.noci b/keyboards/rgbkb/sol3/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x7/.noci
+++ b/keyboards/rgbkb/sol3/.noci
diff --git a/keyboards/rgbkb/sol3/config.h b/keyboards/rgbkb/sol3/config.h
new file mode 100644
index 0000000000..8d87e5b2fa
--- /dev/null
+++ b/keyboards/rgbkb/sol3/config.h
@@ -0,0 +1,182 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x3535
+#define PRODUCT_ID 0x3510
+#define MANUFACTURER RGBKB
+#define PRODUCT Sol 3
+
+#define USB_POLLING_INTERVAL_MS 1
+
+/* Matrix Configuration - Rows are doubled up */
+#define MATRIX_ROWS 12
+// Last pins reserved for encoder / touch encoder support
+#define MATRIX_ROW_PINS { B15, A8, A15, B12, A3, NO_PIN }
+#define MATRIX_ROW_PINS_RIGHT { B15, B14, A8, A13, A7, NO_PIN }
+#define MATRIX_COLS 8
+// Empty matrix entries used for encoder / touch encoder support
+#define MATRIX_COL_PINS { A6, A7, B0, B2, B1, B9, B3, B4 }
+#define MATRIX_COL_PINS_RIGHT { B9, B8, B4, A6, A3, B10, B12, B11 }
+#define MATRIX_IO_DELAY 5
+
+#define BUSY_WAIT
+#define BUSY_WAIT_INSTRUCTIONS 35 // Increase if two rows are pressed at the same time.
+#define GPIO_INPUT_PIN_DELAY 10
+
+/* Touchbar adjustments */
+#define TOUCH_DEADZONE 50 // width of a "button", wider inputs will be interpreted as a swipe
+#define TOUCH_TERM 350 // time of a "button" touch, longer inputs will be a swipe
+#define TOUCH_RESOLUTION 25 // sensitivity of swipes, lower=faster
+#define TOUCH_SEGMENTS 3
+
+/* Encoder Configuration */
+// Matrix Entries k36/k35(E1SW>B13), k33/k32, k7/k28
+#define ENCODERS_PAD_A { A1, B10, A13 }
+#define ENCODERS_PAD_B { A2, B11, B14 }
+// Matrix Entries k72/k71(E5SW>B0), k69/k68, k43/k64
+#define ENCODERS_PAD_A_RIGHT { A1, C15, B3 }
+#define ENCODERS_PAD_B_RIGHT { A2, C14, B13 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* CRC Configuration */
+#define CRC8_OPTIMIZE_SPEED
+#define CRC8_USE_TABLE
+
+/* Split Keyboard Configuration */
+#define SPLIT_HAND_PIN C13
+#define SPLIT_USB_DETECT
+// also handles the SERIAL_USART_TX_PIN define
+#define SOFT_SERIAL_PIN A9
+#define SERIAL_USART_TX_PAL_MODE 7
+#define SERIAL_USART_TIMEOUT 5
+#define SERIAL_USART_DRIVER SD1
+//#define SERIAL_USART_FULL_DUPLEX - Waiting on reunification pr
+#if SERIAL_USART_FULL_DUPLEX
+ #define SERIAL_USART_RX_PIN A10
+ #define SERIAL_USART_RX_PAL_MODE 7
+ // Mun connects TX to TX and RX to RX as we were planning on i2c split, so we need pin swap for full duplex
+ #define SERIAL_USART_PIN_SWAP
+ #define SERIAL_USART_SPEED (2 * 1024 * 1024)
+#else
+ #define SERIAL_USART_SPEED (1 * 1024 * 1024)
+#endif
+
+/* Split Transport Features */
+#define SPLIT_TRANSPORT_MIRROR
+#define SPLIT_LAYER_STATE_ENABLE
+#define SPLIT_LED_STATE_ENABLE
+#define SPLIT_TRANSACTION_IDS_KB TOUCH_ENCODER_SYNC, RGB_MENU_SYNC
+
+/* LED Turbo DIP Switch */
+#define DIP_SWITCH_PINS { A14, B13 }
+#define DIP_SWITCH_PINS_RIGHT { A14, B0 }
+
+/* RGB LED Configuration */
+#define RGB_DI_PIN B5
+#define RGBLED_NUM 156
+#define RGBLED_SPLIT { 78, 78 }
+#define RGBLIGHT_LIMIT_VAL 255
+
+// RGB Lighting Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgblight?id=effect-and-animation-toggles
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+
+#define DRIVER_LED_TOTAL RGBLED_NUM
+#define RGB_MATRIX_SPLIT RGBLED_SPLIT
+#define RGB_MATRIX_CENTER { 81, 28 }
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS RGBLIGHT_LIMIT_VAL
+#define RGB_MATRIX_LED_FLUSH_LIMIT 33
+#define RGB_MATRIX_LED_PROCESS_LIMIT 10
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#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_PIXEL_RAIN
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define RGB_MATRIX_KEYPRESSES
+#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
+
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 2
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_DMA_CHANNEL 3
+
+#define TOUCH_UPDATE_INTERVAL 33
+#define OLED_UPDATE_INTERVAL 33
+#define TAP_CODE_DELAY 5
+
+/* Audio Configuration */
+#define AUDIO_PIN A4
+#define AUDIO_PIN_ALT A5
+#define AUDIO_PIN_ALT_AS_NEGATIVE
+#define AUDIO_CLICKY
+#define AUDIO_DAC_SAMPLE_WAVEFORM_SQUARE
+#define AUDIO_DAC_OFF_VALUE 0
diff --git a/keyboards/rgbkb/sol3/halconf.h b/keyboards/rgbkb/sol3/halconf.h
new file mode 100644
index 0000000000..f882cef085
--- /dev/null
+++ b/keyboards/rgbkb/sol3/halconf.h
@@ -0,0 +1,22 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#define HAL_USE_DAC TRUE
+
+#define HAL_USE_GPT TRUE
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_PWM TRUE
+
+#define HAL_USE_SERIAL TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/rgbkb/sol3/keymaps/default/config.h b/keyboards/rgbkb/sol3/keymaps/default/config.h
new file mode 100644
index 0000000000..b239f5bb80
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+// No need for the single versions when multi performance isn't a problem =D
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+
+// 20m timeout (20m * 60s * 1000mil)
+// #define RGB_DISABLE_TIMEOUT 1200000
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define STM32_ONBOARD_EEPROM_SIZE 2048
+
diff --git a/keyboards/rgbkb/sol3/keymaps/default/keymap.c b/keyboards/rgbkb/sol3/keymaps/default/keymap.c
new file mode 100644
index 0000000000..c1d1a04d79
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/default/keymap.c
@@ -0,0 +1,173 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#include QMK_KEYBOARD_H
+
+/* Qwerty
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ GESC │ 1 │ 2 │ 3 │ 4 │ 5 │ - │ │ = │ 6 │ 7 │ 8 │ 9 │ 0 │ BkSp │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ [ │ │ ] │ Y │ U │ I │ O │ P │ \ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │FNCAPS│ A │ S │ D │ F │ G │ ( │ │ ) │ H │ J │ K │ L │ ; │ ' │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │Shift │ Z │ X │ C │ V │ B │ { │ │ } │ N │ M │ , │ . │ / │Enter │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ Ctrl │ Win │ Alt │ RGB │ ADJ │ │ DEL │ │ Enter│ │ FN │ Left │ Down │ Up │Right │
+ * └──────┴──────┴──────┴──────┴──────┤ Space├──────┤ ├──────┤ Space├──────┴──────┴──────┴──────┴──────┘
+ * │ │ DEL │ │ Enter│ │
+ * └──────┴──────┘ └──────┴──────┘
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │Vol Dn│Vol Up│Vol Dn│Vol Up│Vol Dn│Vol Up│ │Vol Dn│Vol Up│Vol Dn│Vol Up│Vol Dn│Vol Up│
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ * ┌──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┐
+ * │Vol Dn│Vol Up│ Prev │ Play │ Next │ │Vol Dn│Vol Up│ Prev │ Play │ Next │
+ * └──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┘
+ */
+
+enum sol_layers {
+ _QWERTY,
+ _COLEMAK,
+ _GAME,
+ _FN,
+ _ADJUST
+};
+
+enum sol_keycodes {
+ // Disables touch processing
+ TCH_TOG = SAFE_RANGE,
+ MENU_BTN,
+ MENU_UP,
+ MENU_DN,
+ RGB_RST
+};
+
+#define FN MO(_FN)
+#define ADJUST MO(_ADJUST)
+#define COLEMAK DF(_COLEMAK)
+#define GAME DF(_GAME)
+#define QWERTY DF(_QWERTY)
+#define FN_CAPS LT(_FN, KC_CAPS)
+//#define RGB_ADJ LT(_ADJUST, RGB_TOG)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJUST, KC_SPC, KC_PGDN, KC_DEL, KC_ENT, KC_PGUP, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL,
+
+ KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU,
+ KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV
+ ),
+
+ [_COLEMAK] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_Q, KC_W, KC_F, KC_P, KC_G, _______, _______, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______,
+ _______, KC_A, KC_R, KC_S, KC_T, KC_D, _______, _______, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, KC_F1, KC_F5, _______, _______, _______, _______, _______, _______,
+ _______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F2, KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, _______,
+ _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F3, KC_F7, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F4, KC_F8, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PSCR, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_PGDN,
+ _______, AU_TOG, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, CK_TOGG, CK_UP, CK_DOWN, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______,
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGB_RST, _______, DM_REC1, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______,
+ _______, RGB_SPD, _______, RGB_SPI, _______, _______, DM_RSTP, _______, _______, KC_P1, KC_P2, KC_P3, _______, GAME,
+ _______, RGB_RMOD,RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_NLCK, QWERTY, COLEMAK,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode)
+ {
+ case MENU_BTN:
+ if (record->event.pressed) {
+ rgb_menu_selection();
+ }
+ return false;
+ case MENU_UP:
+ if (record->event.pressed) {
+ rgb_menu_action(true);
+ }
+ return false;
+ case MENU_DN:
+ if (record->event.pressed) {
+ rgb_menu_action(false);
+ }
+ return false;
+ case RGB_RST:
+ if (record->event.pressed) {
+ eeconfig_update_rgb_matrix_default();
+ }
+ return false;
+ case TCH_TOG:
+ if (record->event.pressed) {
+ touch_encoder_toggle();
+ }
+ return false; // Skip all further processing of this key
+ default:
+ return true;
+ }
+}
+
+void render_layer_status(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer"), false);
+ switch (get_highest_layer(layer_state)) {
+ case _QWERTY:
+ oled_write_ln_P(PSTR("QWRTY"), false);
+ break;
+ case _COLEMAK:
+ oled_write_ln_P(PSTR("Colemk"), false);
+ break;
+ case _GAME:
+ oled_write_ln_P(PSTR("Game "), false);
+ break;
+ case _FN:
+ oled_write_ln_P(PSTR("FN "), false);
+ break;
+ case _ADJUST:
+ oled_write_ln_P(PSTR("Adjst"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ }
+}
diff --git a/keyboards/rgbkb/sol3/keymaps/kageurufu/config.h b/keyboards/rgbkb/sol3/keymaps/kageurufu/config.h
new file mode 100644
index 0000000000..400848aa35
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/kageurufu/config.h
@@ -0,0 +1,32 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/kageurufu> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. Frank Tackitt
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+// No need for the single versions when multi performance isn't a problem =D
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_SOLID_SPLASH
+
+// 20m timeout (20m * 60s * 1000mil)
+// #define RGB_DISABLE_TIMEOUT 1200000
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+
+#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
+// 224B per layer right now
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
+#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+
+#define VIA_QMK_RGBLIGHT_ENABLE
+
+#define STM32_ONBOARD_EEPROM_SIZE 2048
+
diff --git a/keyboards/rgbkb/sol3/keymaps/kageurufu/keymap.c b/keyboards/rgbkb/sol3/keymaps/kageurufu/keymap.c
new file mode 100644
index 0000000000..90773203b5
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/kageurufu/keymap.c
@@ -0,0 +1,61 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/kageurufu> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. Frank Tackitt
+ * ----------------------------------------------------------------------------
+ */
+
+#include QMK_KEYBOARD_H
+#include "kageurufu.h"
+
+extern keymap_config_t keymap_config;
+
+/* Base Layout
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ` | | | | | | | | | | | | | | BkSp |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | | | | | | | | | | | | | | \ |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Esc | | | | | | | | | | | | | | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Sft( | | | | | | | | | | | | | | Sft) |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | Win | Win | Alt | FN | Space| RGB | | FN | FN | - | = | Down | PgUp | PgDn |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Space| Bksp | | Enter| Space|
+ * `-------------' `--------=----'
+ */
+#define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__, \
+ KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, \
+ KC_MNXT, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU )
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = EXPAND_LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, RGB_MOD, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, KC_LBRC, KC_RBRC, _________________QWERTY_R1_________________, KC_BSLS,
+ FN_ESC, _________________QWERTY_L2_________________, RGB_SAI, RGB_VAI, _________________QWERTY_R2_________________, KC_QUOT,
+ KC_LSPO, _________________QWERTY_L3_________________, RGB_SAD, RGB_VAD, _________________QWERTY_R3_________________, KC_RSPC,
+ KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, FN, KC_SPC, KC_MUTE, KC_BSPC, KC_ENT, FN, KC_SPC, KC_MINS, KC_EQL, KC_DOWN, KC_PGUP, KC_PGDN
+ ),
+
+ [_FN] = EXPAND_LAYOUT(
+ ________________FUNCTION_L1________________, _______, KC_PSCR, ________________FUNCTION_R1________________,
+ ________________FUNCTION_L2________________, _______, _______, ________________FUNCTION_R2________________,
+ ________________FUNCTION_L3________________, _______, _______, ________________FUNCTION_R3________________,
+ ________________FUNCTION_L4________________, _______, _______, ________________FUNCTION_R4________________,
+ ________________FUNCTION_L5________________, ADJ, KC_DEL, _______, ADJ, ________________FUNCTION_R5________________
+ ),
+
+ [_ADJ] = EXPAND_LAYOUT(
+ _________________ADJUST_L1_________________, _______, _______, _________________ADJUST_R1_________________,
+ _________________ADJUST_L2_________________, _______, _______, _________________ADJUST_R2_________________,
+ _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________,
+ _________________ADJUST_L4_________________, _______, _______, _________________ADJUST_R4_________________,
+ _________________ADJUST_L5_________________, _______, _______, _______, _______, _________________ADJUST_R5_________________
+
+ )
+
+};
diff --git a/keyboards/nebula12/keymaps/via/rules.mk b/keyboards/rgbkb/sol3/keymaps/kageurufu/rules.mk
index 1e5b99807c..1e5b99807c 100755..100644
--- a/keyboards/nebula12/keymaps/via/rules.mk
+++ b/keyboards/rgbkb/sol3/keymaps/kageurufu/rules.mk
diff --git a/keyboards/rgbkb/sol3/keymaps/via/config.h b/keyboards/rgbkb/sol3/keymaps/via/config.h
new file mode 100644
index 0000000000..3934e6c491
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/via/config.h
@@ -0,0 +1,32 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+// No need for the single versions when multi performance isn't a problem =D
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+
+// 20m timeout (20m * 60s * 1000mil)
+// #define RGB_DISABLE_TIMEOUT 1200000
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+
+#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
+// 224B per layer right now
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
+#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+
+#define VIA_QMK_RGBLIGHT_ENABLE
+
+#define STM32_ONBOARD_EEPROM_SIZE 2048
+
diff --git a/keyboards/rgbkb/sol3/keymaps/via/keymap.c b/keyboards/rgbkb/sol3/keymaps/via/keymap.c
new file mode 100644
index 0000000000..740d3cc084
--- /dev/null
+++ b/keyboards/rgbkb/sol3/keymaps/via/keymap.c
@@ -0,0 +1,218 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#include QMK_KEYBOARD_H
+
+/* Qwerty
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ GESC │ 1 │ 2 │ 3 │ 4 │ 5 │ - │ │ = │ 6 │ 7 │ 8 │ 9 │ 0 │ BkSp │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ [ │ │ ] │ Y │ U │ I │ O │ P │ \ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │FNCAPS│ A │ S │ D │ F │ G │ ( │ │ ) │ H │ J │ K │ L │ ; │ ' │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │Shift │ Z │ X │ C │ V │ B │ { │ │ } │ N │ M │ , │ . │ / │Enter │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ Ctrl │ Win │ Alt │ RGB │ ADJ │ │ DEL │ │ Enter│ │ FN │ Left │ Down │ Up │Right │
+ * └──────┴──────┴──────┴──────┴──────┤ Space├──────┤ ├──────┤ Space├──────┴──────┴──────┴──────┴──────┘
+ * │ │ DEL │ │ Enter│ │
+ * └──────┴──────┘ └──────┴──────┘
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │Vol Dn│Vol Up│Vol Dn│Vol Up│Vol Dn│Vol Up│ │Vol Dn│Vol Up│Vol Dn│Vol Up│Vol Dn│Vol Up│
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ * ┌──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┐
+ * │Vol Dn│Vol Up│ Prev │ Play │ Next │ │Vol Dn│Vol Up│ Prev │ Play │ Next │
+ * └──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┘
+ */
+
+enum sol_layers {
+ _QWERTY,
+ _COLEMAK,
+ _GAME,
+ _FN,
+ _ADJUST,
+ _VIA1,
+ _VIA2,
+ _VIA3
+};
+
+enum sol_keycodes {
+ // Disables touch processing
+ TCH_TOG = SAFE_RANGE,
+ MENU_BTN,
+ MENU_UP,
+ MENU_DN,
+ RGB_RST
+};
+
+#define FN MO(_FN)
+#define ADJUST MO(_ADJUST)
+#define COLEMAK DF(_COLEMAK)
+#define GAME DF(_GAME)
+#define QWERTY DF(_QWERTY)
+#define FN_CAPS LT(_FN, KC_CAPS)
+//#define RGB_ADJ LT(_ADJUST, RGB_TOG)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJUST, KC_SPC, KC_PGDN, KC_DEL, KC_ENT, KC_PGUP, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL,
+
+ KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU,
+ KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV
+ ),
+
+ [_COLEMAK] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_Q, KC_W, KC_F, KC_P, KC_G, _______, _______, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______,
+ _______, KC_A, KC_R, KC_S, KC_T, KC_D, _______, _______, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, KC_F1, KC_F5, _______, _______, _______, _______, _______, _______,
+ _______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F2, KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, _______,
+ _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F3, KC_F7, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F4, KC_F8, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PSCR, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_PGDN,
+ _______, AU_TOG, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, CK_TOGG, CK_UP, CK_DOWN, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______,
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGB_RST, _______, DM_REC1, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______,
+ _______, RGB_SPD, _______, RGB_SPI, _______, _______, DM_RSTP, _______, _______, KC_P1, KC_P2, KC_P3, _______, GAME,
+ _______, RGB_RMOD,RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_NLCK, QWERTY, COLEMAK,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_VIA1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_VIA2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_VIA3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode)
+ {
+ case MENU_BTN:
+ if (record->event.pressed) {
+ rgb_menu_selection();
+ }
+ return false;
+ case MENU_UP:
+ if (record->event.pressed) {
+ rgb_menu_action(true);
+ }
+ return false;
+ case MENU_DN:
+ if (record->event.pressed) {
+ rgb_menu_action(false);
+ }
+ return false;
+ case RGB_RST:
+ if (record->event.pressed) {
+ eeconfig_update_rgb_matrix_default();
+ }
+ return false;
+ case TCH_TOG:
+ if (record->event.pressed) {
+ touch_encoder_toggle();
+ }
+ return false; // Skip all further processing of this key
+ default:
+ return true;
+ }
+}
+
+void render_layer_status(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer"), false);
+ switch (get_highest_layer(layer_state)) {
+ case _QWERTY:
+ oled_write_ln_P(PSTR("QWRTY"), false);
+ break;
+ case _COLEMAK:
+ oled_write_ln_P(PSTR("Colemk"), false);
+ break;
+ case _GAME:
+ oled_write_ln_P(PSTR("Game "), false);
+ break;
+ case _FN:
+ oled_write_ln_P(PSTR("FN "), false);
+ break;
+ case _ADJUST:
+ oled_write_ln_P(PSTR("Adjst"), false);
+ break;
+ case _VIA1:
+ oled_write_ln_P(PSTR("VIA1 "), false);
+ break;
+ case _VIA2:
+ oled_write_ln_P(PSTR("VIA2 "), false);
+ break;
+ case _VIA3:
+ oled_write_ln_P(PSTR("VIA3 "), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ }
+}
diff --git a/keyboards/nebula68/keymaps/via/rules.mk b/keyboards/rgbkb/sol3/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100755..100644
--- a/keyboards/nebula68/keymaps/via/rules.mk
+++ b/keyboards/rgbkb/sol3/keymaps/via/rules.mk
diff --git a/keyboards/rgbkb/sol3/mcuconf.h b/keyboards/rgbkb/sol3/mcuconf.h
new file mode 100644
index 0000000000..e68a680f48
--- /dev/null
+++ b/keyboards/rgbkb/sol3/mcuconf.h
@@ -0,0 +1,30 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_DAC_USE_DAC1_CH1
+#define STM32_DAC_USE_DAC1_CH1 TRUE
+
+#undef STM32_DAC_USE_DAC1_CH2
+#define STM32_DAC_USE_DAC1_CH2 TRUE
+
+#undef STM32_GPT_USE_TIM6
+#define STM32_GPT_USE_TIM6 TRUE
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_SERIAL_USE_USART1
+#define STM32_SERIAL_USE_USART1 TRUE
diff --git a/keyboards/rgbkb/sol3/rev1/config.h b/keyboards/rgbkb/sol3/rev1/config.h
new file mode 100644
index 0000000000..7ff0b54903
--- /dev/null
+++ b/keyboards/rgbkb/sol3/rev1/config.h
@@ -0,0 +1,12 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#define DEVICE_VER 0x0001
diff --git a/keyboards/rgbkb/sol3/rev1/rev1.c b/keyboards/rgbkb/sol3/rev1/rev1.c
new file mode 100644
index 0000000000..5dc156c94d
--- /dev/null
+++ b/keyboards/rgbkb/sol3/rev1/rev1.c
@@ -0,0 +1,287 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#include "rev1.h"
+#include "split_util.h"
+
+#define NUMBER_OF_TOUCH_ENCODERS 2
+#define TOUCH_ENCODER_OPTIONS TOUCH_SEGMENTS + 2
+
+#define NUMBER_OF_ENCODERS 6
+#define ENCODER_OPTIONS 2
+
+typedef struct PACKED {
+ uint8_t r;
+ uint8_t c;
+} encodermap_t;
+
+// this maps encoders and then touch encoders to their respective electrical matrix entry
+// mapping is row (y) then column (x) when looking at the electrical layout
+const encodermap_t encoder_map[NUMBER_OF_ENCODERS][ENCODER_OPTIONS] =
+{
+ { { 5, 0 }, { 5, 1 } }, // Encoder 0 matrix entries
+ { { 5, 2 }, { 5, 3 } }, // Encoder 1 matrix entries
+ { { 5, 4 }, { 5, 5 } }, // Encoder 2 matrix entries
+ { { 11, 0 }, { 11, 1 } }, // Encoder 3 matrix entries
+ { { 11, 2 }, { 11, 3 } }, // Encoder 4 matrix entries
+ { { 11, 4 }, { 11, 5 } } // Encoder 5 matrix entries
+};
+
+const encodermap_t touch_encoder_map[NUMBER_OF_TOUCH_ENCODERS][TOUCH_ENCODER_OPTIONS] =
+{
+ { { 1, 7 }, { 0, 7 }, { 2, 7 }, { 5, 6 }, { 5, 7 }, }, // Touch Encoder 0 matrix entries
+ { { 7, 7 }, { 6, 7 }, { 8, 7 }, { 11, 6 }, { 11, 7 }, } // Touch Encoder 1 matrix entries
+};
+
+static bool limit_lightning = true;
+
+RGB rgb_matrix_hsv_to_rgb(HSV hsv) {
+ if (limit_lightning) hsv.v /= 2;
+ return hsv_to_rgb(hsv);
+}
+
+bool dip_switch_update_kb(uint8_t index, bool active) {
+ if (!dip_switch_update_user(index, active))
+ return false;
+
+ switch(index) {
+ case 0: {
+ limit_lightning = active;
+ break;
+ }
+ case 1: {
+ // Handle RGB Encoder switch press
+ action_exec((keyevent_t){
+ .key = (keypos_t){.row = isLeftHand ? 4 : 10, .col = 6},
+ .pressed = active, .time = (timer_read() | 1) /* time should not be 0 */
+ });
+ break;
+ }
+ }
+ return false;
+}
+
+static void process_encoder_matrix(encodermap_t pos) {
+ action_exec((keyevent_t){
+ .key = (keypos_t){.row = pos.r, .col = pos.c}, .pressed = true, .time = (timer_read() | 1) /* time should not be 0 */
+ });
+#if TAP_CODE_DELAY > 0
+ wait_ms(TAP_CODE_DELAY);
+#endif
+ action_exec((keyevent_t){
+ .key = (keypos_t){.row = pos.r, .col = pos.c}, .pressed = false, .time = (timer_read() | 1) /* time should not be 0 */
+ });
+}
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise))
+ return false;
+
+ // Mapping clockwise (typically increase) to zero, and counter clockwise (decrease) to 1
+ process_encoder_matrix(encoder_map[index][clockwise ? 0 : 1]);
+ return false;
+}
+
+bool touch_encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!touch_encoder_update_user(index, clockwise))
+ return false;
+
+ // Mapping clockwise (typically increase) to zero, and counter clockwise (decrease) to 1
+ process_encoder_matrix(touch_encoder_map[index][clockwise ? 0 : 1]);
+ return false;
+}
+
+bool touch_encoder_tapped_kb(uint8_t index, uint8_t section) {
+ if (!touch_encoder_tapped_user(index, section))
+ return false;
+
+ process_encoder_matrix(touch_encoder_map[index][section + 2]);
+ return false;
+}
+
+void matrix_slave_scan_kb() {
+ dip_switch_read(false);
+ matrix_slave_scan_user();
+}
+
+#ifdef RGB_MATRIX_ENABLE
+// clang-format off
+led_config_t g_led_config = { {
+ { 41, 42, 43, 44, 45, 46, 47 },
+ { 54, 53, 52, 51, 50, 49, 48 },
+ { 55, 56, 57, 58, 59, 60, 61 },
+ { 68, 67, 66, 65, 64, 63, 62 },
+ { 69, 70, 71, 72, 73, 74, 75, 76 },
+ { 119, 120, 121, 122, 123, 124, 125 },
+ { 132, 131, 130, 129, 128, 127, 126 },
+ { 133, 134, 135, 136, 137, 138, 139 },
+ { 146, 145, 144, 143, 142, 141, 140 },
+ { 147, 148, 149, 150, 151, 152, 153 }
+}, { // ALL XY VALUES DIVIDE BY 2, THEN ADD 5
+ { 1, 6 }, { 1, 13 }, { 1, 19 }, { 1, 25 }, { 1, 31 }, { 1, 37 }, { 1, 43 }, { 1, 49 }, { 4, 52 }, { 11, 52 },
+ { 17, 52 }, { 23, 52 }, { 29, 52 }, { 35, 52 }, { 41, 54 }, { 46, 57 }, { 52, 60 }, { 57, 63 }, { 62, 66 }, { 68, 69 },
+ { 73, 67 }, { 76, 62 }, { 79, 57 }, { 78, 51 }, { 77, 45 }, { 76, 39 }, { 76, 33 }, { 76, 27 }, { 76, 21 }, { 76, 14 },
+ { 76, 8 }, { 72, 3 }, { 59, 3 }, { 53, 3 }, { 46, 3 }, { 40, 3 }, { 34, 3 }, { 28, 3 }, { 22, 3 }, { 10, 3 }, { 3, 3 },
+ { 9, 6 }, { 21, 6 }, { 30, 6 }, { 40, 6 }, { 49, 6 }, { 59, 6 }, { 71, 6 },
+ { 71, 16 }, { 59, 16 }, { 49, 16 }, { 40, 16 }, { 30, 16 }, { 21, 16 }, { 9, 16 },
+ { 9, 25 }, { 21, 25 }, { 30, 25 }, { 40, 25 }, { 49, 25 }, { 59, 25 }, { 71, 25 },
+ { 71, 35 }, { 59, 35 }, { 49, 35 }, { 40, 35 }, { 30, 35 }, { 21, 35 }, { 9, 35 },
+ { 9, 44 }, { 21, 44 }, { 30, 44 }, { 40, 44 }, { 49, 44 }, { 66, 50 }, { 75, 54 }, { 70, 62 }, { 60, 60 },
+
+ { 160, 6 }, { 160, 13 }, { 160, 19 }, { 160, 25 }, { 160, 31 }, { 160, 37 }, { 160, 43 }, { 160, 49 }, { 157, 52 }, { 151, 52 },
+ { 145, 52 }, { 138, 52 }, { 132, 52 }, { 126, 52 }, { 120, 54 }, { 115, 57 }, { 110, 60 }, { 105, 63 }, { 99, 66 }, { 94, 69 },
+ { 89, 67 }, { 86, 62 }, { 83, 57 }, { 83, 51 }, { 85, 45 }, { 86, 39 }, { 86, 33 }, { 86, 27 }, { 86, 21 }, { 86, 14 },
+ { 86, 8 }, { 90, 3 }, { 103, 3 }, { 109, 3 }, { 115, 3 }, { 121, 3 }, { 127, 3 }, { 133, 3 }, { 140, 3 }, { 152, 3 }, { 158, 3 },
+ { 153, 6 }, { 141, 6 }, { 131, 6 }, { 122, 6 }, { 112, 6 }, { 103, 6 }, { 91, 6 },
+ { 91, 16 }, { 103, 16 }, { 112, 16 }, { 122, 16 }, { 131, 16 }, { 141, 16 }, { 153, 16 },
+ { 153, 25 }, { 141, 25 }, { 131, 25 }, { 122, 25 }, { 112, 25 }, { 103, 25 }, { 91, 25 },
+ { 91, 35 }, { 103, 35 }, { 112, 35 }, { 122, 35 }, { 131, 35 }, { 141, 35 }, { 153, 35 },
+ { 153, 44 }, { 141, 44 }, { 131, 44 }, { 122, 44 }, { 112, 44 }, { 96, 50 }, { 87, 54 }, { 92, 62 }, { 102, 60 },
+}, {
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1
+} };
+// clang-format on
+
+void rgb_matrix_increase_flags(void)
+{
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
+ rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case LED_FLAG_UNDERGLOW: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_disable_noeeprom();
+ }
+ break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable_noeeprom();
+ }
+ break;
+ }
+}
+#endif
+
+
+__attribute__((weak))
+void render_layer_status(void) {
+ // Keymap specific, expected to be overridden
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer"), false);
+ oled_write_ln_P(PSTR("Undef"), false);
+}
+
+__attribute__((weak))
+void render_leds_status(void)
+{
+ // Host Keyboard LED Status
+ static const char PROGMEM led_icon[] = {
+ 0x0F,0x3A,0
+ };
+ oled_write_P(led_icon, false);
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P( led_state.num_lock ? PSTR("N") : PSTR(" "), false);
+ oled_write_P( led_state.caps_lock ? PSTR("C") : PSTR(" "), false);
+ oled_write_P(led_state.scroll_lock ? PSTR("S") : PSTR(" "), false);
+}
+
+__attribute__((weak))
+void render_touch_status(void)
+{
+ // Host Touch LED Status
+ static const char PROGMEM touch_icon[] = {
+ 0x12,0x3A,0
+ };
+ oled_write_P(touch_icon, false);
+ oled_write_P( touch_encoder_is_on() ? PSTR("T") : PSTR(" "), false);
+ oled_write_P(touch_encoder_is_calibrating() ? PSTR("C") : PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+}
+
+__attribute__((weak))
+void render_audio_status(void)
+{
+ // Host Audio Status
+ static const char PROGMEM audio_icon[] = {
+ 0x0E,0x3A,0
+ };
+ oled_write_P(audio_icon, false);
+ oled_write_P( audio_is_on() ? PSTR("A") : PSTR(" "), false);
+ oled_write_P(is_clicky_on() ? PSTR("C") : PSTR(" "), false);
+ oled_write_P( is_music_on() ? PSTR("M") : PSTR(" "), false);
+}
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ // Sol 3 uses OLED_ROTATION_270 for default rotation on both halves
+ return oled_init_user(OLED_ROTATION_270);
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user())
+ return false;
+
+ if (is_keyboard_left()) {
+ render_icon();
+ oled_write_P(PSTR(" "), false);
+ render_layer_status();
+ oled_write_P(PSTR(" "), false);
+ render_leds_status();
+ oled_write_P(PSTR(" "), false);
+ render_touch_status();
+ oled_write_P(PSTR(" "), false);
+ render_audio_status();
+ }
+ else {
+ render_icon();
+ oled_write_P(PSTR(" "), false);
+ render_rgb_menu();
+ }
+ return false;
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record))
+ return false;
+
+ switch(keycode) {
+#ifdef RGB_MATRIX_ENABLE
+ case RGB_TOG:
+ if (record->event.pressed) {
+ rgb_matrix_increase_flags();
+ }
+ return false;
+#endif
+ }
+ return true;
+}; \ No newline at end of file
diff --git a/keyboards/rgbkb/sol3/rev1/rev1.h b/keyboards/rgbkb/sol3/rev1/rev1.h
new file mode 100644
index 0000000000..e80f8c298d
--- /dev/null
+++ b/keyboards/rgbkb/sol3/rev1/rev1.h
@@ -0,0 +1,74 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#include "sol3.h"
+
+// clang-format off
+/* Blank ascii map to reuse, with labeled possible encoder positions, *rgb encoder only
+┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐
+│ │ │ │ │ │ │ E2 │ │ E5 │ │ │ │ │ │ │
+├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│ │ │ │ │ │ │ E2 │ │ E5 │ │ │ │ │ │ │
+├──────┼──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│ │ │ │ E1 │ E1 │ │ E0* │ │ E3* │ │ E4 │ E4 │ │ │ │
+└──────┴──────┴──────┴──────┴──────┤ ├──────┤ ├──────┤ ├──────┴──────┴──────┴──────┴──────┘
+ │ │ E0 │ │ E3 │ │
+ └──────┴──────┘ └──────┴──────┘
+┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+│ E0↑ │ E0↓ │ E1↑ │ E1↓ │ E2↑ │ E2↓ │ │ E3↑ │ E3↓ │ E4↑ │ E4↓ │ E5↑ │ E5↓ │
+└──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+┌──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┘
+*/
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, L46, L47, R40, R41, R42, R43, R44, R45, R46, R47, \
+ \
+ E0L, E0R, E1L, E1R, E2L, E2R, E3L, E3R, E4L, E4R, E5L, E5R, \
+ LT0, LT1, LT2, LSL, LSR, RT0, RT1, RT2, RSL, RSR \
+) \
+{ \
+ /* Left Half */ \
+ { L00, L01, L02, L03, L04, L05, L06, LT0 }, \
+ { L10, L11, L12, L13, L14, L15, L16, LT1 }, \
+ { L20, L21, L22, L23, L24, L25, L26, LT2 }, \
+ { L30, L31, L32, L33, L34, L35, L36, KC_NO }, \
+ { L40, L41, L42, L43, L44, L45, L46, L47 }, \
+ { E0L, E0R, E1L, E1R, E2L, E2R, LSL, LSR }, \
+ /* Right Half */ \
+ { R06, R05, R04, R03, R02, R01, R00, RT0 }, \
+ { R16, R15, R14, R13, R12, R11, R10, RT1 }, \
+ { R26, R25, R24, R23, R22, R21, R20, RT2 }, \
+ { R36, R35, R34, R33, R32, R31, R30, KC_NO }, \
+ { R47, R46, R45, R44, R43, R42, R41, R40 }, \
+ { E3L, E3R, E4L, E4R, E5L, E5R, RSL, RSR } \
+}
+// clang-format on
+
+// weak functions overridable by the user
+void render_layer_status(void);
+void render_leds_status(void);
+void render_touch_status(void);
+void render_audio_status(void);
+
+#ifdef RGB_MATRIX_ENABLE
+// utility function to cycle active led zones
+void rgb_matrix_increase_flags(void);
+#endif \ No newline at end of file
diff --git a/keyboards/runner3680/3x8/rules.mk b/keyboards/rgbkb/sol3/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/3x8/rules.mk
+++ b/keyboards/rgbkb/sol3/rev1/rules.mk
diff --git a/keyboards/rgbkb/sol3/rules.mk b/keyboards/rgbkb/sol3/rules.mk
new file mode 100644
index 0000000000..e30330d333
--- /dev/null
+++ b/keyboards/rgbkb/sol3/rules.mk
@@ -0,0 +1,49 @@
+# MCU name
+MCU = STM32F303
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Touch encoder needs
+VPATH += keyboards/rgbkb/common
+SRC += touch_encoder.c
+SRC += common_oled.c
+QUANTUM_LIB_SRC += i2c_master.c
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+AUDIO_ENABLE = yes # Audio output
+AUDIO_DRIVER = dac_additive
+
+DYNAMIC_MACRO_ENABLE = yes
+DIP_SWITCH_ENABLE = yes
+
+WS2812_DRIVER = pwm
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = WS2812
+
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306 # Enable the OLED Driver
+
+ENCODER_ENABLE = yes
+
+SPLIT_KEYBOARD = yes
+SERIAL_DRIVER = usart
+LTO_ENABLE = yes
+OPT = 3
+
+OPT_DEFS += -DOLED_FONT_H=\"keyboards/rgbkb/common/glcdfont.c\"
+
+# TODO: Implement fast matrix scanning
+# matrix optimisations
+# SRC += matrix.c
+
+DEFAULT_FOLDER = rgbkb/sol3/rev1
diff --git a/keyboards/rgbkb/sol3/sol3.c b/keyboards/rgbkb/sol3/sol3.c
new file mode 100644
index 0000000000..97ae5bc5de
--- /dev/null
+++ b/keyboards/rgbkb/sol3/sol3.c
@@ -0,0 +1,38 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#include "sol3.h"
+#include "eeconfig.h"
+#include "audio.h"
+#include <transactions.h>
+
+extern audio_config_t audio_config;
+
+void keyboard_post_init_kb(void) {
+ touch_encoder_init();
+ transaction_register_rpc(TOUCH_ENCODER_SYNC, touch_encoder_slave_sync);
+ transaction_register_rpc(RGB_MENU_SYNC, rgb_menu_slave_sync);
+ keyboard_post_init_user();
+}
+
+void eeconfig_init_kb(void) {
+ // Reset Keyboard EEPROM value to blank, rather than to a set value
+ eeconfig_update_kb(0);
+
+ audio_config.raw = eeconfig_read_audio();
+ audio_config.clicky_enable = false;
+ eeconfig_update_audio(audio_config.raw);
+
+ eeconfig_init_user();
+}
+
+void housekeeping_task_kb(void) {
+ touch_encoder_update(TOUCH_ENCODER_SYNC);
+ rgb_menu_update(RGB_MENU_SYNC);
+}
diff --git a/keyboards/rgbkb/sol3/sol3.h b/keyboards/rgbkb/sol3/sol3.h
new file mode 100644
index 0000000000..06d5dcdea0
--- /dev/null
+++ b/keyboards/rgbkb/sol3/sol3.h
@@ -0,0 +1,18 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <https://github.com/Legonut> wrote this file. As long as you retain this
+ * notice you can do whatever you want with this stuff. If we meet some day, and
+ * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
+ * ----------------------------------------------------------------------------
+ */
+
+#pragma once
+
+#if defined(KEYBOARD_rgbkb_sol3_rev1)
+# include "rev1.h"
+#endif
+
+#include "quantum.h"
+#include "touch_encoder.h"
+#include "common_oled.h"
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/333fred/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/333fred/rules.mk
index f858bbe3da..a5b4454073 100644
--- a/keyboards/rgbkb/zen/rev1/keymaps/333fred/rules.mk
+++ b/keyboards/rgbkb/zen/rev1/keymaps/333fred/rules.mk
@@ -1,4 +1,4 @@
RGBLIGHT_ENABLE = yes
KEY_LOCK_ENABLE = yes
CONSOLE_ENABLE = no
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
diff --git a/keyboards/rgbkb/zygomorph/keymaps/kageurufu/rules.mk b/keyboards/rgbkb/zygomorph/keymaps/kageurufu/rules.mk
index d484c47366..c5cc34d898 100644
--- a/keyboards/rgbkb/zygomorph/keymaps/kageurufu/rules.mk
+++ b/keyboards/rgbkb/zygomorph/keymaps/kageurufu/rules.mk
@@ -41,4 +41,4 @@ ifeq ($(strip $(RGBLIGHT_SPLIT_ENABLE)), yes)
endif
# Link time optimization, should save on firmware size
-EXTRAFLAGS += -flto
+LTO_ENABLE = yes
diff --git a/keyboards/rocketboard_16/keycode_lookup.c b/keyboards/rocketboard_16/keycode_lookup.c
index 9e1c5f92af..d967a03c31 100644
--- a/keyboards/rocketboard_16/keycode_lookup.c
+++ b/keyboards/rocketboard_16/keycode_lookup.c
@@ -55,7 +55,7 @@ char* translate_keycode_to_string(uint16_t code)
return (return_p);
}
-lookup_table_t lookup_table[366] =
+lookup_table_t lookup_table[334] =
{
{"KC_NO", KC_NO},
{"KC_TRNS", KC_TRNS},
@@ -243,38 +243,6 @@ lookup_table_t lookup_table[366] =
{"KC_MRWD", KC_MRWD},
{"KC_BRIU", KC_BRIU},
{"KC_BRID", KC_BRID},
- {"KC_FN0", KC_FN0},
- {"KC_FN1", KC_FN1},
- {"KC_FN2", KC_FN2},
- {"KC_FN3", KC_FN3},
- {"KC_FN4", KC_FN4},
- {"KC_FN5", KC_FN5},
- {"KC_FN6", KC_FN6},
- {"KC_FN7", KC_FN7},
- {"KC_FN8", KC_FN8},
- {"KC_FN9", KC_FN9},
- {"KC_FN10", KC_FN10},
- {"KC_FN11", KC_FN11},
- {"KC_FN12", KC_FN12},
- {"KC_FN13", KC_FN13},
- {"KC_FN14", KC_FN14},
- {"KC_FN15", KC_FN15},
- {"KC_FN16", KC_FN16},
- {"KC_FN17", KC_FN17},
- {"KC_FN18", KC_FN18},
- {"KC_FN19", KC_FN19},
- {"KC_FN20", KC_FN20},
- {"KC_FN21", KC_FN21},
- {"KC_FN22", KC_FN22},
- {"KC_FN23", KC_FN23},
- {"KC_FN24", KC_FN24},
- {"KC_FN25", KC_FN25},
- {"KC_FN26", KC_FN26},
- {"KC_FN27", KC_FN27},
- {"KC_FN28", KC_FN28},
- {"KC_FN29", KC_FN29},
- {"KC_FN30", KC_FN30},
- {"KC_FN31", KC_FN31},
{"KC_LCTL", KC_LCTL},
{"KC_LSFT", KC_LSFT},
{"KC_LALT", KC_LALT},
diff --git a/keyboards/rocketboard_16/keycode_lookup.h b/keyboards/rocketboard_16/keycode_lookup.h
index f51dcfd52a..218b709b47 100644
--- a/keyboards/rocketboard_16/keycode_lookup.h
+++ b/keyboards/rocketboard_16/keycode_lookup.h
@@ -26,4 +26,4 @@ typedef struct
char* translate_keycode_to_string(uint16_t code);
-extern lookup_table_t lookup_table[366];
+extern lookup_table_t lookup_table[334];
diff --git a/keyboards/rocketboard_16/rules.mk b/keyboards/rocketboard_16/rules.mk
index d27da2c226..c07ebff427 100644
--- a/keyboards/rocketboard_16/rules.mk
+++ b/keyboards/rocketboard_16/rules.mk
@@ -8,7 +8,7 @@ MCU = STM32F103
MCU_LDSCRIPT = STM32F103xB_stm32duino_bootloader
OPT_DEFS += -DBOOTLOADER_STM32DUINO
BOARD = STM32_F103_STM32DUINO
-STM32_BOOTLOADER_ADDRESS = 0x80000000
+BOOTLOADER_TYPE = stm32duino
DFU_ARGS = -d 1EAF:0003 -a 2 -R
DFU_SUFFIX_ARGS = -v 1EAF -p 0003
diff --git a/keyboards/runner3680/readme.md b/keyboards/runner3680/readme.md
deleted file mode 100644
index b32ead412b..0000000000
--- a/keyboards/runner3680/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# runner3680
-
-![runner3680](https://github.com/omkbd/Runner3680/blob/master/Picture/Runner3680.jpg)
-
-A split ortholinear keyboard. Each half is a 5x8 arrangement, with breakable pieces to allow the number of rows to be customized between 3 to 5, and the number of columns to be between 6 to 8.
-
-Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
-Hardware Supported: Runner3680, Pro Micro ATmega32u4
-Hardware Availability: Order your own [yourself](https://github.com/omkbd/Runner3680)
-
-Make example for this keyboard (after setting up your build environment):
-
- make runner3680/5x8:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/runner3680/rules.mk b/keyboards/runner3680/rules.mk
deleted file mode 100644
index 2d0ea406eb..0000000000
--- a/keyboards/runner3680/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-SPLIT_KEYBOARD = yes # Enables split keyboard support
-
-DEFAULT_FOLDER = runner3680/5x8
diff --git a/keyboards/runner3680/runner3680.h b/keyboards/runner3680/runner3680.h
deleted file mode 100644
index 39a498e90a..0000000000
--- a/keyboards/runner3680/runner3680.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_runner3680_5x8
- #include "5x8.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_5x7
- #include "5x7.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_5x6
- #include "5x6.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_5x6_5x8
- #include "5x6_5x8.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_4x8
- #include "4x8.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_4x7
- #include "4x7.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_4x6
- #include "4x6.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_3x8
- #include "3x8.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_3x7
- #include "3x7.h"
-#endif
-
-#ifdef KEYBOARD_runner3680_3x6
- #include "3x6.h"
-#endif
diff --git a/keyboards/runner3680/5x8/.noci b/keyboards/salicylic_acid3/7skb/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x8/.noci
+++ b/keyboards/salicylic_acid3/7skb/.noci
diff --git a/keyboards/7skb/7skb.c b/keyboards/salicylic_acid3/7skb/7skb.c
index 3044e02233..3044e02233 100644
--- a/keyboards/7skb/7skb.c
+++ b/keyboards/salicylic_acid3/7skb/7skb.c
diff --git a/keyboards/salicylic_acid3/7skb/7skb.h b/keyboards/salicylic_acid3/7skb/7skb.h
new file mode 100644
index 0000000000..5043a46747
--- /dev/null
+++ b/keyboards/salicylic_acid3/7skb/7skb.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_7skb_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/naked64/config.h b/keyboards/salicylic_acid3/7skb/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/naked64/config.h
+++ b/keyboards/salicylic_acid3/7skb/config.h
diff --git a/keyboards/7skb/info.json b/keyboards/salicylic_acid3/7skb/info.json
index f85f32cb6d..f85f32cb6d 100644
--- a/keyboards/7skb/info.json
+++ b/keyboards/salicylic_acid3/7skb/info.json
diff --git a/keyboards/7skb/keymaps/default/config.h b/keyboards/salicylic_acid3/7skb/keymaps/default/config.h
index 4b3496d856..4b3496d856 100644
--- a/keyboards/7skb/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/7skb/keymaps/default/config.h
diff --git a/keyboards/7skb/keymaps/default/keymap.c b/keyboards/salicylic_acid3/7skb/keymaps/default/keymap.c
index c56fb76fcb..c56fb76fcb 100644
--- a/keyboards/7skb/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/7skb/keymaps/default/keymap.c
diff --git a/keyboards/7skb/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/config.h
index cc4a3d4426..cc4a3d4426 100644
--- a/keyboards/7skb/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/config.h
diff --git a/keyboards/7skb/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/keymap.c
index ad12f49d5b..ad12f49d5b 100644
--- a/keyboards/7skb/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/keymap.c
diff --git a/keyboards/7skb/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/7skb/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/7skb/keymaps/salicylic/rules.mk
diff --git a/keyboards/7skb/keymaps/via/keymap.c b/keyboards/salicylic_acid3/7skb/keymaps/via/keymap.c
index 7b0b76c76a..7b0b76c76a 100644
--- a/keyboards/7skb/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/7skb/keymaps/via/keymap.c
diff --git a/keyboards/7skb/keymaps/via/readme.md b/keyboards/salicylic_acid3/7skb/keymaps/via/readme.md
index 67c31de5c0..67c31de5c0 100644
--- a/keyboards/7skb/keymaps/via/readme.md
+++ b/keyboards/salicylic_acid3/7skb/keymaps/via/readme.md
diff --git a/keyboards/nk1/keymaps/via/rules.mk b/keyboards/salicylic_acid3/7skb/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/nk1/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/7skb/keymaps/via/rules.mk
diff --git a/keyboards/salicylic_acid3/7skb/readme.md b/keyboards/salicylic_acid3/7skb/readme.md
new file mode 100644
index 0000000000..a3077f068a
--- /dev/null
+++ b/keyboards/salicylic_acid3/7skb/readme.md
@@ -0,0 +1,17 @@
+# 7skb
+
+![7skb](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20191124/20191124025208.png)
+
+This is 63 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: 7skb PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1673395)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/7skb/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/7skb-mx-build-guide)
diff --git a/keyboards/7skb/rev1/config.h b/keyboards/salicylic_acid3/7skb/rev1/config.h
index a74cd25c29..a74cd25c29 100644
--- a/keyboards/7skb/rev1/config.h
+++ b/keyboards/salicylic_acid3/7skb/rev1/config.h
diff --git a/keyboards/getta25/rev1/rev1.c b/keyboards/salicylic_acid3/7skb/rev1/rev1.c
index 520a869e57..520a869e57 100644
--- a/keyboards/getta25/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/7skb/rev1/rev1.c
diff --git a/keyboards/7skb/rev1/rev1.h b/keyboards/salicylic_acid3/7skb/rev1/rev1.h
index 8ab845240d..8ab845240d 100644
--- a/keyboards/7skb/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/7skb/rev1/rev1.h
diff --git a/keyboards/runner3680/4x6/rules.mk b/keyboards/salicylic_acid3/7skb/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x6/rules.mk
+++ b/keyboards/salicylic_acid3/7skb/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/7skb/rules.mk b/keyboards/salicylic_acid3/7skb/rules.mk
new file mode 100644
index 0000000000..3ae2e899ca
--- /dev/null
+++ b/keyboards/salicylic_acid3/7skb/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = salicylic_acid3/7skb/rev1
diff --git a/keyboards/7splus/7splus.c b/keyboards/salicylic_acid3/7splus/7splus.c
index ca94ab0efa..ca94ab0efa 100644
--- a/keyboards/7splus/7splus.c
+++ b/keyboards/salicylic_acid3/7splus/7splus.c
diff --git a/keyboards/7splus/7splus.h b/keyboards/salicylic_acid3/7splus/7splus.h
index 55b9c24f9c..55b9c24f9c 100644
--- a/keyboards/7splus/7splus.h
+++ b/keyboards/salicylic_acid3/7splus/7splus.h
diff --git a/keyboards/7splus/config.h b/keyboards/salicylic_acid3/7splus/config.h
index 8f3e32a52f..8f3e32a52f 100644
--- a/keyboards/7splus/config.h
+++ b/keyboards/salicylic_acid3/7splus/config.h
diff --git a/keyboards/7splus/info.json b/keyboards/salicylic_acid3/7splus/info.json
index a87909c07b..a87909c07b 100644
--- a/keyboards/7splus/info.json
+++ b/keyboards/salicylic_acid3/7splus/info.json
diff --git a/keyboards/7splus/keymaps/default/keymap.c b/keyboards/salicylic_acid3/7splus/keymaps/default/keymap.c
index 282bfaf661..282bfaf661 100644
--- a/keyboards/7splus/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/7splus/keymaps/default/keymap.c
diff --git a/keyboards/7splus/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/7splus/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/config.h
diff --git a/keyboards/7splus/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/keymap.c
index cbe4e57dcf..cbe4e57dcf 100644
--- a/keyboards/7splus/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/keymap.c
diff --git a/keyboards/7splus/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/rules.mk
index 0bcbf86d5e..0bcbf86d5e 100644
--- a/keyboards/7splus/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/7splus/keymaps/salicylic/rules.mk
diff --git a/keyboards/7splus/keymaps/via/config.h b/keyboards/salicylic_acid3/7splus/keymaps/via/config.h
index 8a89da2eae..8a89da2eae 100644
--- a/keyboards/7splus/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/7splus/keymaps/via/config.h
diff --git a/keyboards/7splus/keymaps/via/keymap.c b/keyboards/salicylic_acid3/7splus/keymaps/via/keymap.c
index c17e1ce450..c17e1ce450 100644
--- a/keyboards/7splus/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/7splus/keymaps/via/keymap.c
diff --git a/keyboards/nknl7en/keymaps/via/rules.mk b/keyboards/salicylic_acid3/7splus/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/nknl7en/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/7splus/keymaps/via/rules.mk
diff --git a/keyboards/salicylic_acid3/7splus/readme.md b/keyboards/salicylic_acid3/7splus/readme.md
new file mode 100644
index 0000000000..ef6820a188
--- /dev/null
+++ b/keyboards/salicylic_acid3/7splus/readme.md
@@ -0,0 +1,17 @@
+# 7sPlus
+
+![7splus](https://s2.booth.pm/1d33594d-0c5f-4f93-baf5-2e89e0d99afc/i/2425503/044ca31d-6715-475c-b8c4-1dfdeb57b682_base_resized.jpg)
+
+This is 85 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: 7sPlus PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2425503)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/7splus:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/7splus-build-guide)
diff --git a/keyboards/7splus/rules.mk b/keyboards/salicylic_acid3/7splus/rules.mk
index b0a2799e4b..b0a2799e4b 100644
--- a/keyboards/7splus/rules.mk
+++ b/keyboards/salicylic_acid3/7splus/rules.mk
diff --git a/keyboards/ajisai74/ajisai74.c b/keyboards/salicylic_acid3/ajisai74/ajisai74.c
index 3c9342e6f7..3c9342e6f7 100644
--- a/keyboards/ajisai74/ajisai74.c
+++ b/keyboards/salicylic_acid3/ajisai74/ajisai74.c
diff --git a/keyboards/ajisai74/ajisai74.h b/keyboards/salicylic_acid3/ajisai74/ajisai74.h
index 40c7d8b31b..40c7d8b31b 100644
--- a/keyboards/ajisai74/ajisai74.h
+++ b/keyboards/salicylic_acid3/ajisai74/ajisai74.h
diff --git a/keyboards/ajisai74/config.h b/keyboards/salicylic_acid3/ajisai74/config.h
index e7a1555aea..e7a1555aea 100644
--- a/keyboards/ajisai74/config.h
+++ b/keyboards/salicylic_acid3/ajisai74/config.h
diff --git a/keyboards/ajisai74/info.json b/keyboards/salicylic_acid3/ajisai74/info.json
index 6bf2d7af49..6bf2d7af49 100644
--- a/keyboards/ajisai74/info.json
+++ b/keyboards/salicylic_acid3/ajisai74/info.json
diff --git a/keyboards/ajisai74/keymaps/default/config.h b/keyboards/salicylic_acid3/ajisai74/keymaps/default/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/ajisai74/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/default/config.h
diff --git a/keyboards/ajisai74/keymaps/default/keymap.c b/keyboards/salicylic_acid3/ajisai74/keymaps/default/keymap.c
index 4bd68878aa..4bd68878aa 100644
--- a/keyboards/ajisai74/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/default/keymap.c
diff --git a/keyboards/ajisai74/keymaps/jis/config.h b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/ajisai74/keymaps/jis/config.h
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/config.h
diff --git a/keyboards/ajisai74/keymaps/jis/keymap.c b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/keymap.c
index b0d31b03bd..b0d31b03bd 100644
--- a/keyboards/ajisai74/keymaps/jis/keymap.c
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/keymap.c
diff --git a/keyboards/ajisai74/keymaps/jis/rules.mk b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/ajisai74/keymaps/jis/rules.mk
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/jis/rules.mk
diff --git a/keyboards/ajisai74/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/ajisai74/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/config.h
diff --git a/keyboards/ajisai74/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/keymap.c
index f8b430af1c..f8b430af1c 100644
--- a/keyboards/ajisai74/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/keymap.c
diff --git a/keyboards/ajisai74/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/ajisai74/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/salicylic/rules.mk
diff --git a/keyboards/ajisai74/keymaps/via/config.h b/keyboards/salicylic_acid3/ajisai74/keymaps/via/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/ajisai74/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/via/config.h
diff --git a/keyboards/ajisai74/keymaps/via/keymap.c b/keyboards/salicylic_acid3/ajisai74/keymaps/via/keymap.c
index 79bd7541c5..79bd7541c5 100644
--- a/keyboards/ajisai74/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/via/keymap.c
diff --git a/keyboards/nknl7jp/keymaps/via/rules.mk b/keyboards/salicylic_acid3/ajisai74/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/nknl7jp/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/ajisai74/keymaps/via/rules.mk
diff --git a/keyboards/salicylic_acid3/ajisai74/readme.md b/keyboards/salicylic_acid3/ajisai74/readme.md
new file mode 100644
index 0000000000..e274eb0ac4
--- /dev/null
+++ b/keyboards/salicylic_acid3/ajisai74/readme.md
@@ -0,0 +1,17 @@
+# AJisai74
+
+![ajisai74](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20200812/20200812214740.png)
+
+This is 74 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: AJisai74 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2291877)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/ajisai74:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/ajisai74-build-guide)
diff --git a/keyboards/ajisai74/rules.mk b/keyboards/salicylic_acid3/ajisai74/rules.mk
index 8f9772df22..8f9772df22 100644
--- a/keyboards/ajisai74/rules.mk
+++ b/keyboards/salicylic_acid3/ajisai74/rules.mk
diff --git a/keyboards/ergoarrows/config.h b/keyboards/salicylic_acid3/ergoarrows/config.h
index ae13e20014..ae13e20014 100644
--- a/keyboards/ergoarrows/config.h
+++ b/keyboards/salicylic_acid3/ergoarrows/config.h
diff --git a/keyboards/ergoarrows/ergoarrows.c b/keyboards/salicylic_acid3/ergoarrows/ergoarrows.c
index 7d2c11e6ec..7d2c11e6ec 100644
--- a/keyboards/ergoarrows/ergoarrows.c
+++ b/keyboards/salicylic_acid3/ergoarrows/ergoarrows.c
diff --git a/keyboards/ergoarrows/ergoarrows.h b/keyboards/salicylic_acid3/ergoarrows/ergoarrows.h
index 7944337b4e..7944337b4e 100644
--- a/keyboards/ergoarrows/ergoarrows.h
+++ b/keyboards/salicylic_acid3/ergoarrows/ergoarrows.h
diff --git a/keyboards/ergoarrows/info.json b/keyboards/salicylic_acid3/ergoarrows/info.json
index a625476e79..a625476e79 100644
--- a/keyboards/ergoarrows/info.json
+++ b/keyboards/salicylic_acid3/ergoarrows/info.json
diff --git a/keyboards/ergoarrows/keymaps/default/config.h b/keyboards/salicylic_acid3/ergoarrows/keymaps/default/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/ergoarrows/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/default/config.h
diff --git a/keyboards/ergoarrows/keymaps/default/keymap.c b/keyboards/salicylic_acid3/ergoarrows/keymaps/default/keymap.c
index eda419d72c..eda419d72c 100644
--- a/keyboards/ergoarrows/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/default/keymap.c
diff --git a/keyboards/ergoarrows/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/ergoarrows/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/config.h
diff --git a/keyboards/ergoarrows/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/keymap.c
index c841371dba..c841371dba 100644
--- a/keyboards/ergoarrows/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/salicylic/keymap.c
diff --git a/keyboards/ergoarrows/keymaps/via/config.h b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/ergoarrows/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/config.h
diff --git a/keyboards/ergoarrows/keymaps/via/keymap.c b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/keymap.c
index 6bc8ec95ef..6bc8ec95ef 100644
--- a/keyboards/ergoarrows/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/keymap.c
diff --git a/keyboards/pistachio/keymaps/via/rules.mk b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/pistachio/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/ergoarrows/keymaps/via/rules.mk
diff --git a/keyboards/salicylic_acid3/ergoarrows/readme.md b/keyboards/salicylic_acid3/ergoarrows/readme.md
new file mode 100644
index 0000000000..93ad989415
--- /dev/null
+++ b/keyboards/salicylic_acid3/ergoarrows/readme.md
@@ -0,0 +1,17 @@
+# ergoarrows
+
+![ergoarrows](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20210117/20210117011553.png)
+
+This is 76 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: nknl7 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2681816)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/ergoarrows:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/ergo-arrows-build-guide)
diff --git a/keyboards/ergoarrows/rules.mk b/keyboards/salicylic_acid3/ergoarrows/rules.mk
index aba3644c9e..aba3644c9e 100644
--- a/keyboards/ergoarrows/rules.mk
+++ b/keyboards/salicylic_acid3/ergoarrows/rules.mk
diff --git a/keyboards/setta21/rev1/.noci b/keyboards/salicylic_acid3/getta25/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/setta21/rev1/.noci
+++ b/keyboards/salicylic_acid3/getta25/.noci
diff --git a/keyboards/setta21/config.h b/keyboards/salicylic_acid3/getta25/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/setta21/config.h
+++ b/keyboards/salicylic_acid3/getta25/config.h
diff --git a/keyboards/getta25/getta25.c b/keyboards/salicylic_acid3/getta25/getta25.c
index 4f8cc63b42..4f8cc63b42 100644
--- a/keyboards/getta25/getta25.c
+++ b/keyboards/salicylic_acid3/getta25/getta25.c
diff --git a/keyboards/salicylic_acid3/getta25/getta25.h b/keyboards/salicylic_acid3/getta25/getta25.h
new file mode 100644
index 0000000000..67632bba4d
--- /dev/null
+++ b/keyboards/salicylic_acid3/getta25/getta25.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_getta25_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/getta25/info.json b/keyboards/salicylic_acid3/getta25/info.json
index 980b5142db..980b5142db 100644
--- a/keyboards/getta25/info.json
+++ b/keyboards/salicylic_acid3/getta25/info.json
diff --git a/keyboards/getta25/keymaps/default/config.h b/keyboards/salicylic_acid3/getta25/keymaps/default/config.h
index 8c4e1f5129..8c4e1f5129 100644
--- a/keyboards/getta25/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/getta25/keymaps/default/config.h
diff --git a/keyboards/getta25/keymaps/default/keymap.c b/keyboards/salicylic_acid3/getta25/keymaps/default/keymap.c
index a70df01c18..a70df01c18 100644
--- a/keyboards/getta25/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/getta25/keymaps/default/keymap.c
diff --git a/keyboards/getta25/keymaps/oled/config.h b/keyboards/salicylic_acid3/getta25/keymaps/oled/config.h
index be988915c2..be988915c2 100644
--- a/keyboards/getta25/keymaps/oled/config.h
+++ b/keyboards/salicylic_acid3/getta25/keymaps/oled/config.h
diff --git a/keyboards/getta25/keymaps/oled/glcdfont.c b/keyboards/salicylic_acid3/getta25/keymaps/oled/glcdfont.c
index 939db32ca6..939db32ca6 100644
--- a/keyboards/getta25/keymaps/oled/glcdfont.c
+++ b/keyboards/salicylic_acid3/getta25/keymaps/oled/glcdfont.c
diff --git a/keyboards/getta25/keymaps/oled/keymap.c b/keyboards/salicylic_acid3/getta25/keymaps/oled/keymap.c
index 7d8151b86d..7d8151b86d 100644
--- a/keyboards/getta25/keymaps/oled/keymap.c
+++ b/keyboards/salicylic_acid3/getta25/keymaps/oled/keymap.c
diff --git a/keyboards/getta25/keymaps/oled/rules.mk b/keyboards/salicylic_acid3/getta25/keymaps/oled/rules.mk
index d34d066ded..d34d066ded 100644
--- a/keyboards/getta25/keymaps/oled/rules.mk
+++ b/keyboards/salicylic_acid3/getta25/keymaps/oled/rules.mk
diff --git a/keyboards/salicylic_acid3/getta25/readme.md b/keyboards/salicylic_acid3/getta25/readme.md
new file mode 100644
index 0000000000..2f3e9d1f1b
--- /dev/null
+++ b/keyboards/salicylic_acid3/getta25/readme.md
@@ -0,0 +1,17 @@
+# getta25
+
+![getta25](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20191127/20191127005608.png)
+
+This is 25 keys tenkeypad.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: Getta25 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1700006)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/getta25/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/getta25-rev2-build-guide)
diff --git a/keyboards/getta25/rev1/config.h b/keyboards/salicylic_acid3/getta25/rev1/config.h
index 740a9f3fbd..740a9f3fbd 100644
--- a/keyboards/getta25/rev1/config.h
+++ b/keyboards/salicylic_acid3/getta25/rev1/config.h
diff --git a/keyboards/naked64/rev1/rev1.c b/keyboards/salicylic_acid3/getta25/rev1/rev1.c
index 520a869e57..520a869e57 100644
--- a/keyboards/naked64/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/getta25/rev1/rev1.c
diff --git a/keyboards/getta25/rev1/rev1.h b/keyboards/salicylic_acid3/getta25/rev1/rev1.h
index 98f4318a6a..98f4318a6a 100644
--- a/keyboards/getta25/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/getta25/rev1/rev1.h
diff --git a/keyboards/treadstone48/rev1/rules.mk b/keyboards/salicylic_acid3/getta25/rev1/rules.mk
index fff00a1b51..fff00a1b51 100644
--- a/keyboards/treadstone48/rev1/rules.mk
+++ b/keyboards/salicylic_acid3/getta25/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/getta25/rules.mk b/keyboards/salicylic_acid3/getta25/rules.mk
new file mode 100644
index 0000000000..977ef5bb1d
--- /dev/null
+++ b/keyboards/salicylic_acid3/getta25/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+OLED_ENABLE = no
+
+DEFAULT_FOLDER = salicylic_acid3/getta25/rev1
diff --git a/keyboards/squiggle/rev1/.noci b/keyboards/salicylic_acid3/jisplit89/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/squiggle/rev1/.noci
+++ b/keyboards/salicylic_acid3/jisplit89/.noci
diff --git a/keyboards/jisplit89/config.h b/keyboards/salicylic_acid3/jisplit89/config.h
index c9b55e7a03..c9b55e7a03 100644
--- a/keyboards/jisplit89/config.h
+++ b/keyboards/salicylic_acid3/jisplit89/config.h
diff --git a/keyboards/jisplit89/info.json b/keyboards/salicylic_acid3/jisplit89/info.json
index 4f138a5262..4f138a5262 100644
--- a/keyboards/jisplit89/info.json
+++ b/keyboards/salicylic_acid3/jisplit89/info.json
diff --git a/keyboards/jisplit89/jisplit89.c b/keyboards/salicylic_acid3/jisplit89/jisplit89.c
index 0f03aa4ce2..0f03aa4ce2 100644
--- a/keyboards/jisplit89/jisplit89.c
+++ b/keyboards/salicylic_acid3/jisplit89/jisplit89.c
diff --git a/keyboards/salicylic_acid3/jisplit89/jisplit89.h b/keyboards/salicylic_acid3/jisplit89/jisplit89.h
new file mode 100644
index 0000000000..8de2326de6
--- /dev/null
+++ b/keyboards/salicylic_acid3/jisplit89/jisplit89.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2020 Salicylic_Acid
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#ifdef KEYBOARD_salicylic_acid3_jisplit89_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/jisplit89/keymaps/default/keymap.c b/keyboards/salicylic_acid3/jisplit89/keymaps/default/keymap.c
index e782a4b451..e782a4b451 100644
--- a/keyboards/jisplit89/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/default/keymap.c
diff --git a/keyboards/jisplit89/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/config.h
index 81ee8ef785..81ee8ef785 100644
--- a/keyboards/jisplit89/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/config.h
diff --git a/keyboards/jisplit89/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/keymap.c
index ffd3b853b5..ffd3b853b5 100644
--- a/keyboards/jisplit89/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/keymap.c
diff --git a/keyboards/jisplit89/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/rules.mk
index 8db2280906..8db2280906 100644
--- a/keyboards/jisplit89/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/salicylic/rules.mk
diff --git a/keyboards/jisplit89/keymaps/via/config.h b/keyboards/salicylic_acid3/jisplit89/keymaps/via/config.h
index 08bcdab701..08bcdab701 100644
--- a/keyboards/jisplit89/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/via/config.h
diff --git a/keyboards/jisplit89/keymaps/via/keymap.c b/keyboards/salicylic_acid3/jisplit89/keymaps/via/keymap.c
index b2ceacb0e6..b2ceacb0e6 100644
--- a/keyboards/jisplit89/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/via/keymap.c
diff --git a/keyboards/nebula68b/keymaps/via/rules.mk b/keyboards/salicylic_acid3/jisplit89/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100755..100644
--- a/keyboards/nebula68b/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/jisplit89/keymaps/via/rules.mk
diff --git a/keyboards/salicylic_acid3/jisplit89/readme.md b/keyboards/salicylic_acid3/jisplit89/readme.md
new file mode 100644
index 0000000000..df0994e109
--- /dev/null
+++ b/keyboards/salicylic_acid3/jisplit89/readme.md
@@ -0,0 +1,17 @@
+# JISplit89
+
+![jisplit89](https://s2.booth.pm/1d33594d-0c5f-4f93-baf5-2e89e0d99afc/i/1916810/ee9743ff-b03d-4ab8-8130-ddaad3c1b30d_base_resized.jpg)
+
+This is 89 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: jisplit89 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1916810)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/jisplit89/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/jisplit89-build-guide)
diff --git a/keyboards/jisplit89/rev1/config.h b/keyboards/salicylic_acid3/jisplit89/rev1/config.h
index ee5f2ca0bc..ee5f2ca0bc 100644
--- a/keyboards/jisplit89/rev1/config.h
+++ b/keyboards/salicylic_acid3/jisplit89/rev1/config.h
diff --git a/keyboards/jisplit89/rev1/rev1.c b/keyboards/salicylic_acid3/jisplit89/rev1/rev1.c
index 13e201e63a..13e201e63a 100644
--- a/keyboards/jisplit89/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/jisplit89/rev1/rev1.c
diff --git a/keyboards/jisplit89/rev1/rev1.h b/keyboards/salicylic_acid3/jisplit89/rev1/rev1.h
index 71515f5ef6..71515f5ef6 100644
--- a/keyboards/jisplit89/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/jisplit89/rev1/rev1.h
diff --git a/keyboards/runner3680/4x7/rules.mk b/keyboards/salicylic_acid3/jisplit89/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x7/rules.mk
+++ b/keyboards/salicylic_acid3/jisplit89/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/jisplit89/rules.mk b/keyboards/salicylic_acid3/jisplit89/rules.mk
new file mode 100644
index 0000000000..a6a8510675
--- /dev/null
+++ b/keyboards/salicylic_acid3/jisplit89/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = salicylic_acid3/jisplit89/rev1
diff --git a/keyboards/nafuda/config.h b/keyboards/salicylic_acid3/nafuda/config.h
index 22e17c6cc7..22e17c6cc7 100644
--- a/keyboards/nafuda/config.h
+++ b/keyboards/salicylic_acid3/nafuda/config.h
diff --git a/keyboards/nafuda/info.json b/keyboards/salicylic_acid3/nafuda/info.json
index d418341d19..d418341d19 100644
--- a/keyboards/nafuda/info.json
+++ b/keyboards/salicylic_acid3/nafuda/info.json
diff --git a/keyboards/nafuda/keymaps/default/config.h b/keyboards/salicylic_acid3/nafuda/keymaps/default/config.h
index e35fe2ccd7..e35fe2ccd7 100644
--- a/keyboards/nafuda/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/nafuda/keymaps/default/config.h
diff --git a/keyboards/nafuda/keymaps/default/keymap.c b/keyboards/salicylic_acid3/nafuda/keymaps/default/keymap.c
index f0baff6c22..f0baff6c22 100644
--- a/keyboards/nafuda/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/nafuda/keymaps/default/keymap.c
diff --git a/keyboards/nafuda/keymaps/default/readme.md b/keyboards/salicylic_acid3/nafuda/keymaps/default/readme.md
index b84276bf8a..b84276bf8a 100644
--- a/keyboards/nafuda/keymaps/default/readme.md
+++ b/keyboards/salicylic_acid3/nafuda/keymaps/default/readme.md
diff --git a/keyboards/nafuda/nafuda.c b/keyboards/salicylic_acid3/nafuda/nafuda.c
index 334b3dab27..334b3dab27 100644
--- a/keyboards/nafuda/nafuda.c
+++ b/keyboards/salicylic_acid3/nafuda/nafuda.c
diff --git a/keyboards/nafuda/nafuda.h b/keyboards/salicylic_acid3/nafuda/nafuda.h
index 008a9c16f4..008a9c16f4 100644
--- a/keyboards/nafuda/nafuda.h
+++ b/keyboards/salicylic_acid3/nafuda/nafuda.h
diff --git a/keyboards/salicylic_acid3/nafuda/readme.md b/keyboards/salicylic_acid3/nafuda/readme.md
new file mode 100644
index 0000000000..5df9b5df0f
--- /dev/null
+++ b/keyboards/salicylic_acid3/nafuda/readme.md
@@ -0,0 +1,17 @@
+# nafuda
+
+![nafuda](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190608/20190608024901.jpg)
+
+This is 7 keys cursor macropad.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: Nafuda PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271706)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/nafuda:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/nafuda-build-guide)
diff --git a/keyboards/nafuda/rules.mk b/keyboards/salicylic_acid3/nafuda/rules.mk
index e9d90e7ad8..e9d90e7ad8 100644
--- a/keyboards/nafuda/rules.mk
+++ b/keyboards/salicylic_acid3/nafuda/rules.mk
diff --git a/keyboards/suihankey/split/.noci b/keyboards/salicylic_acid3/naked48/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/suihankey/split/.noci
+++ b/keyboards/salicylic_acid3/naked48/.noci
diff --git a/keyboards/naked48/config.h b/keyboards/salicylic_acid3/naked48/config.h
index fae55d19f7..fae55d19f7 100644
--- a/keyboards/naked48/config.h
+++ b/keyboards/salicylic_acid3/naked48/config.h
diff --git a/keyboards/naked48/info.json b/keyboards/salicylic_acid3/naked48/info.json
index 8186a6ba5b..8186a6ba5b 100644
--- a/keyboards/naked48/info.json
+++ b/keyboards/salicylic_acid3/naked48/info.json
diff --git a/keyboards/naked48/keymaps/default/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default/config.h
index 0e452bdb4a..0e452bdb4a 100644
--- a/keyboards/naked48/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default/config.h
diff --git a/keyboards/naked48/keymaps/default/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/default/keymap.c
index e145c02e32..e145c02e32 100644
--- a/keyboards/naked48/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default/keymap.c
diff --git a/keyboards/naked48/keymaps/default/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/default/readme.md
index a28ad8c52c..a28ad8c52c 100644
--- a/keyboards/naked48/keymaps/default/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default/readme.md
diff --git a/keyboards/treadstone48/rev2/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/default/rules.mk
index d29d9074a0..d29d9074a0 100644
--- a/keyboards/treadstone48/rev2/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default/rules.mk
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h
index 314fe55c30..314fe55c30 100644
--- a/keyboards/naked48/keymaps/default_with_nafuda/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/keymap.c
index f5d0772aa4..f5d0772aa4 100644
--- a/keyboards/naked48/keymaps/default_with_nafuda/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/keymap.c
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/readme.md
index 417b44133b..417b44133b 100644
--- a/keyboards/naked48/keymaps/default_with_nafuda/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/readme.md
diff --git a/keyboards/quark/keymaps/ajp10304/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/rules.mk
index 6c605daecf..6c605daecf 100644
--- a/keyboards/quark/keymaps/ajp10304/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/rules.mk
diff --git a/keyboards/naked48/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h
index 2ad4d0adeb..2ad4d0adeb 100644
--- a/keyboards/naked48/keymaps/default_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h
diff --git a/keyboards/naked48/keymaps/default_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/keymap.c
index f6e460588c..f6e460588c 100644
--- a/keyboards/naked48/keymaps/default_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/keymap.c
diff --git a/keyboards/naked48/keymaps/default_with_setta21/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/readme.md
index 6e2a3441d2..6e2a3441d2 100644
--- a/keyboards/naked48/keymaps/default_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/readme.md
diff --git a/keyboards/naked48/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h
index 71a43e208c..71a43e208c 100644
--- a/keyboards/naked48/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h
diff --git a/keyboards/naked48/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/keymap.c
index dddb6c0432..dddb6c0432 100644
--- a/keyboards/naked48/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/keymap.c
diff --git a/keyboards/naked48/keymaps/salicylic/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/readme.md
index 6563bb46ff..6563bb46ff 100644
--- a/keyboards/naked48/keymaps/salicylic/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/readme.md
diff --git a/keyboards/naked48/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/rules.mk
index bdf3488cc1..bdf3488cc1 100644
--- a/keyboards/naked48/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/rules.mk
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/config.h b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/config.h
index 7ce6416010..7ce6416010 100644
--- a/keyboards/naked48/keymaps/salicylic_with_nafuda/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/config.h
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/keymap.c
index 7566d4c00a..7566d4c00a 100644
--- a/keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/keymap.c
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/readme.md
index 15e34e188c..15e34e188c 100644
--- a/keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/readme.md
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/rules.mk
index f76b955efd..f76b955efd 100644
--- a/keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_nafuda/rules.mk
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/config.h b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/config.h
index 2ad4d0adeb..2ad4d0adeb 100644
--- a/keyboards/naked48/keymaps/salicylic_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/config.h
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/keymap.c
index 1925067d22..1925067d22 100644
--- a/keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/keymap.c
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/readme.md
index 2c76bc2907..2c76bc2907 100644
--- a/keyboards/naked48/keymaps/salicylic_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/readme.md
diff --git a/keyboards/runner3680/4x8/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/4x8/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic_with_setta21/rules.mk
diff --git a/keyboards/naked48/keymaps/scheiklp/config.h b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/config.h
index 8c11ad6078..8c11ad6078 100644
--- a/keyboards/naked48/keymaps/scheiklp/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/config.h
diff --git a/keyboards/naked48/keymaps/scheiklp/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/keymap.c
index d8549e0e8b..d8549e0e8b 100644
--- a/keyboards/naked48/keymaps/scheiklp/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/keymap.c
diff --git a/keyboards/naked48/keymaps/scheiklp/readme.md b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/readme.md
index a28ad8c52c..a28ad8c52c 100644
--- a/keyboards/naked48/keymaps/scheiklp/readme.md
+++ b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/readme.md
diff --git a/keyboards/naked48/keymaps/scheiklp/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/rules.mk
index 0b64091e58..0b64091e58 100644
--- a/keyboards/naked48/keymaps/scheiklp/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/scheiklp/rules.mk
diff --git a/keyboards/naked48/keymaps/via/config.h b/keyboards/salicylic_acid3/naked48/keymaps/via/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/naked48/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via/config.h
diff --git a/keyboards/naked48/keymaps/via/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/via/keymap.c
index 8d0c6f901b..8d0c6f901b 100644
--- a/keyboards/naked48/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via/keymap.c
diff --git a/keyboards/naked48/keymaps/via/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/via/rules.mk
index 8712957dfa..8712957dfa 100644
--- a/keyboards/naked48/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via/rules.mk
diff --git a/keyboards/naked48/keymaps/via_rgb_matrix/config.h b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h
index 0920b2bc35..0920b2bc35 100644
--- a/keyboards/naked48/keymaps/via_rgb_matrix/config.h
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h
diff --git a/keyboards/naked48/keymaps/via_rgb_matrix/keymap.c b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/keymap.c
index 8d0c6f901b..8d0c6f901b 100644
--- a/keyboards/naked48/keymaps/via_rgb_matrix/keymap.c
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/keymap.c
diff --git a/keyboards/naked48/keymaps/via_rgb_matrix/rules.mk b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/rules.mk
index 49bb80ca31..49bb80ca31 100644
--- a/keyboards/naked48/keymaps/via_rgb_matrix/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/rules.mk
diff --git a/keyboards/naked48/naked48.c b/keyboards/salicylic_acid3/naked48/naked48.c
index c2a10ed3e6..c2a10ed3e6 100644
--- a/keyboards/naked48/naked48.c
+++ b/keyboards/salicylic_acid3/naked48/naked48.c
diff --git a/keyboards/salicylic_acid3/naked48/naked48.h b/keyboards/salicylic_acid3/naked48/naked48.h
new file mode 100644
index 0000000000..bbfa6d2e84
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked48/naked48.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2021 Salicylic_Acid
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_naked48_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/salicylic_acid3/naked48/readme.md b/keyboards/salicylic_acid3/naked48/readme.md
new file mode 100644
index 0000000000..c3a826f13e
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked48/readme.md
@@ -0,0 +1,18 @@
+# naked48
+
+![naked48](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190326/20190326015949.jpg)
+
+This is 48 keys modification Ortholinear keyboard.
+
+Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+Hardware Supported: Naked60BMP PCB, Pro Micro
+Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271568)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/naked48/rev1:default:avrdude
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked48led-build-guide)
+[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked48)
diff --git a/keyboards/naked48/rev1/config.h b/keyboards/salicylic_acid3/naked48/rev1/config.h
index b79384a48a..b79384a48a 100644
--- a/keyboards/naked48/rev1/config.h
+++ b/keyboards/salicylic_acid3/naked48/rev1/config.h
diff --git a/keyboards/naked48/rev1/rev1.c b/keyboards/salicylic_acid3/naked48/rev1/rev1.c
index 0129b6c1a3..0129b6c1a3 100644
--- a/keyboards/naked48/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/naked48/rev1/rev1.c
diff --git a/keyboards/naked48/rev1/rev1.h b/keyboards/salicylic_acid3/naked48/rev1/rev1.h
index eee5c4185f..eee5c4185f 100644
--- a/keyboards/naked48/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/naked48/rev1/rev1.h
diff --git a/keyboards/runner3680/5x6/rules.mk b/keyboards/salicylic_acid3/naked48/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x6/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/naked48/rules.mk b/keyboards/salicylic_acid3/naked48/rules.mk
new file mode 100644
index 0000000000..0e297ebf60
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked48/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+RGB_MATRIX_ENABLE = no
+RGB_MATRIX_DRIVER = WS2812
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = salicylic_acid3/naked48/rev1
diff --git a/keyboards/naked60/config.h b/keyboards/salicylic_acid3/naked60/config.h
index fae55d19f7..fae55d19f7 100644
--- a/keyboards/naked60/config.h
+++ b/keyboards/salicylic_acid3/naked60/config.h
diff --git a/keyboards/naked60/info.json b/keyboards/salicylic_acid3/naked60/info.json
index 8ec020ae72..8ec020ae72 100644
--- a/keyboards/naked60/info.json
+++ b/keyboards/salicylic_acid3/naked60/info.json
diff --git a/keyboards/naked60/keymaps/333fred/config.h b/keyboards/salicylic_acid3/naked60/keymaps/333fred/config.h
index d19e77f044..d19e77f044 100644
--- a/keyboards/naked60/keymaps/333fred/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/333fred/config.h
diff --git a/keyboards/naked60/keymaps/333fred/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/333fred/keymap.c
index 7185ec78b7..7185ec78b7 100644
--- a/keyboards/naked60/keymaps/333fred/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/333fred/keymap.c
diff --git a/keyboards/naked60/keymaps/default/config.h b/keyboards/salicylic_acid3/naked60/keymaps/default/config.h
index 4b3496d856..4b3496d856 100644
--- a/keyboards/naked60/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default/config.h
diff --git a/keyboards/naked60/keymaps/default/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/default/keymap.c
index 3a95e73244..3a95e73244 100644
--- a/keyboards/naked60/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default/keymap.c
diff --git a/keyboards/naked60/keymaps/default/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/default/readme.md
index c6f3342b21..c6f3342b21 100644
--- a/keyboards/naked60/keymaps/default/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default/readme.md
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/config.h b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/config.h
index 0761e5b6d3..0761e5b6d3 100644
--- a/keyboards/naked60/keymaps/default_with_nafuda/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/config.h
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/keymap.c
index be8c9f3ec9..be8c9f3ec9 100644
--- a/keyboards/naked60/keymaps/default_with_nafuda/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/keymap.c
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/readme.md
index 27201090df..27201090df 100644
--- a/keyboards/naked60/keymaps/default_with_nafuda/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_nafuda/readme.md
diff --git a/keyboards/naked60/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/config.h
index 0761e5b6d3..0761e5b6d3 100644
--- a/keyboards/naked60/keymaps/default_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/config.h
diff --git a/keyboards/naked60/keymaps/default_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/keymap.c
index 95a273a388..95a273a388 100644
--- a/keyboards/naked60/keymaps/default_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/keymap.c
diff --git a/keyboards/naked60/keymaps/default_with_setta21/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/readme.md
index 750a8b3508..750a8b3508 100644
--- a/keyboards/naked60/keymaps/default_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/default_with_setta21/readme.md
diff --git a/keyboards/naked60/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/config.h
index 4b3496d856..4b3496d856 100644
--- a/keyboards/naked60/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/config.h
diff --git a/keyboards/naked60/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/keymap.c
index 9be4bcb422..9be4bcb422 100644
--- a/keyboards/naked60/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/keymap.c
diff --git a/keyboards/naked60/keymaps/salicylic/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/readme.md
index 2901dbf7fa..2901dbf7fa 100644
--- a/keyboards/naked60/keymaps/salicylic/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/readme.md
diff --git a/keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic/rules.mk
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/config.h b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/config.h
index 47da6d4418..47da6d4418 100644
--- a/keyboards/naked60/keymaps/salicylic_with_nafuda/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/config.h
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/keymap.c
index 8fb0ce26f1..8fb0ce26f1 100644
--- a/keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/keymap.c
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/readme.md
index 17b973b73a..17b973b73a 100644
--- a/keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/readme.md
diff --git a/keyboards/diverge3/keymaps/default/rules.mk b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/diverge3/keymaps/default/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_nafuda/rules.mk
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/config.h b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/config.h
index 0761e5b6d3..0761e5b6d3 100644
--- a/keyboards/naked60/keymaps/salicylic_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/config.h
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/keymap.c
index 7f50e89f3c..7f50e89f3c 100644
--- a/keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/keymap.c
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/readme.md b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/readme.md
index 1baa36703a..1baa36703a 100644
--- a/keyboards/naked60/keymaps/salicylic_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/readme.md
diff --git a/keyboards/naked60/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/naked60/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/keymaps/salicylic_with_setta21/rules.mk
diff --git a/keyboards/naked60/keymaps/via/config.h b/keyboards/salicylic_acid3/naked60/keymaps/via/config.h
index 32ec5281b2..32ec5281b2 100644
--- a/keyboards/naked60/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/naked60/keymaps/via/config.h
diff --git a/keyboards/naked60/keymaps/via/keymap.c b/keyboards/salicylic_acid3/naked60/keymaps/via/keymap.c
index 9921858717..9921858717 100644
--- a/keyboards/naked60/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/naked60/keymaps/via/keymap.c
diff --git a/keyboards/nk65/keymaps/via/rules.mk b/keyboards/salicylic_acid3/naked60/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100755..100644
--- a/keyboards/nk65/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/keymaps/via/rules.mk
diff --git a/keyboards/naked60/naked60.c b/keyboards/salicylic_acid3/naked60/naked60.c
index d1d46394f6..d1d46394f6 100644
--- a/keyboards/naked60/naked60.c
+++ b/keyboards/salicylic_acid3/naked60/naked60.c
diff --git a/keyboards/salicylic_acid3/naked60/naked60.h b/keyboards/salicylic_acid3/naked60/naked60.h
new file mode 100644
index 0000000000..9ad73df67f
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked60/naked60.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2021 Salicylic_Acid
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_naked60_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/salicylic_acid3/naked60/readme.md b/keyboards/salicylic_acid3/naked60/readme.md
new file mode 100644
index 0000000000..e44aa64a44
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked60/readme.md
@@ -0,0 +1,18 @@
+# naked60
+
+![naked60](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190530/20190530040355.jpg)
+
+This is 60 keys modification Ortholinear keyboard.
+
+Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+Hardware Supported: Naked60BMP PCB, Pro Micro
+Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1360780)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/naked60/rev1:default:avrdude
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked60bmp-build-guide)
+[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked60)
diff --git a/keyboards/naked60/rev1/config.h b/keyboards/salicylic_acid3/naked60/rev1/config.h
index b754095011..b754095011 100644
--- a/keyboards/naked60/rev1/config.h
+++ b/keyboards/salicylic_acid3/naked60/rev1/config.h
diff --git a/keyboards/naked60/rev1/rev1.c b/keyboards/salicylic_acid3/naked60/rev1/rev1.c
index d1d46394f6..d1d46394f6 100644
--- a/keyboards/naked60/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/naked60/rev1/rev1.c
diff --git a/keyboards/naked60/rev1/rev1.h b/keyboards/salicylic_acid3/naked60/rev1/rev1.h
index 12798022e9..12798022e9 100644
--- a/keyboards/naked60/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/naked60/rev1/rev1.h
diff --git a/keyboards/runner3680/5x7/rules.mk b/keyboards/salicylic_acid3/naked60/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x7/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/naked60/rules.mk b/keyboards/salicylic_acid3/naked60/rules.mk
new file mode 100644
index 0000000000..1aefc7b595
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked60/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = salicylic_acid3/naked60/rev1
diff --git a/keyboards/suihankey/split/alpha/.noci b/keyboards/salicylic_acid3/naked64/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/suihankey/split/alpha/.noci
+++ b/keyboards/salicylic_acid3/naked64/.noci
diff --git a/keyboards/wings42/config.h b/keyboards/salicylic_acid3/naked64/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/wings42/config.h
+++ b/keyboards/salicylic_acid3/naked64/config.h
diff --git a/keyboards/naked64/info.json b/keyboards/salicylic_acid3/naked64/info.json
index 887f43b087..887f43b087 100644
--- a/keyboards/naked64/info.json
+++ b/keyboards/salicylic_acid3/naked64/info.json
diff --git a/keyboards/naked64/keymaps/default/config.h b/keyboards/salicylic_acid3/naked64/keymaps/default/config.h
index 8c4e1f5129..8c4e1f5129 100644
--- a/keyboards/naked64/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default/config.h
diff --git a/keyboards/naked64/keymaps/default/keymap.c b/keyboards/salicylic_acid3/naked64/keymaps/default/keymap.c
index b26044507e..b26044507e 100644
--- a/keyboards/naked64/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default/keymap.c
diff --git a/keyboards/naked64/keymaps/default/readme.md b/keyboards/salicylic_acid3/naked64/keymaps/default/readme.md
index 66bb965b29..66bb965b29 100644
--- a/keyboards/naked64/keymaps/default/readme.md
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default/readme.md
diff --git a/keyboards/runner3680/5x8/rules.mk b/keyboards/salicylic_acid3/naked64/keymaps/default/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/runner3680/5x8/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default/rules.mk
diff --git a/keyboards/naked64/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h
index c88277da20..c88277da20 100644
--- a/keyboards/naked64/keymaps/default_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h
diff --git a/keyboards/naked64/keymaps/default_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/keymap.c
index 01039aaecc..01039aaecc 100644
--- a/keyboards/naked64/keymaps/default_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/keymap.c
diff --git a/keyboards/naked64/keymaps/default_with_setta21/readme.md b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/readme.md
index 6196d68fe0..6196d68fe0 100644
--- a/keyboards/naked64/keymaps/default_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/readme.md
diff --git a/keyboards/setta21/rev1/rules.mk b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/setta21/rev1/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/rules.mk
diff --git a/keyboards/naked64/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/config.h
index 4b3496d856..4b3496d856 100644
--- a/keyboards/naked64/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/config.h
diff --git a/keyboards/naked64/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/keymap.c
index 40e92393da..40e92393da 100644
--- a/keyboards/naked64/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/keymap.c
diff --git a/keyboards/naked64/keymaps/salicylic/readme.md b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/readme.md
index 8b2d812ea4..8b2d812ea4 100644
--- a/keyboards/naked64/keymaps/salicylic/readme.md
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/readme.md
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic/rules.mk
diff --git a/keyboards/naked64/keymaps/salicylic_with_setta21/config.h b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/config.h
index 0761e5b6d3..0761e5b6d3 100644
--- a/keyboards/naked64/keymaps/salicylic_with_setta21/config.h
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/config.h
diff --git a/keyboards/naked64/keymaps/salicylic_with_setta21/keymap.c b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/keymap.c
index df80e0772b..df80e0772b 100644
--- a/keyboards/naked64/keymaps/salicylic_with_setta21/keymap.c
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/keymap.c
diff --git a/keyboards/naked64/keymaps/salicylic_with_setta21/readme.md b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/readme.md
index cf09c1a74c..cf09c1a74c 100644
--- a/keyboards/naked64/keymaps/salicylic_with_setta21/readme.md
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/readme.md
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/keymaps/salicylic_with_setta21/rules.mk
diff --git a/keyboards/naked64/naked64.c b/keyboards/salicylic_acid3/naked64/naked64.c
index a2863f0477..a2863f0477 100644
--- a/keyboards/naked64/naked64.c
+++ b/keyboards/salicylic_acid3/naked64/naked64.c
diff --git a/keyboards/salicylic_acid3/naked64/naked64.h b/keyboards/salicylic_acid3/naked64/naked64.h
new file mode 100644
index 0000000000..cb73e2142d
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked64/naked64.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_naked64_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/salicylic_acid3/naked64/readme.md b/keyboards/salicylic_acid3/naked64/readme.md
new file mode 100644
index 0000000000..ab02be74f5
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked64/readme.md
@@ -0,0 +1,18 @@
+# naked64
+
+![naked64](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190627/20190627022840.jpg)
+
+This is 64 keys modification Ortholinear keyboard.
+
+Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+Hardware Supported: Naked64SF PCB, Pro Micro
+Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1418693)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/naked64/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked64SF-build-guide)
+[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked64)
diff --git a/keyboards/naked64/rev1/config.h b/keyboards/salicylic_acid3/naked64/rev1/config.h
index b4699a9ca2..b4699a9ca2 100644
--- a/keyboards/naked64/rev1/config.h
+++ b/keyboards/salicylic_acid3/naked64/rev1/config.h
diff --git a/keyboards/squiggle/rev1/rev1.c b/keyboards/salicylic_acid3/naked64/rev1/rev1.c
index 520a869e57..520a869e57 100644
--- a/keyboards/squiggle/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/naked64/rev1/rev1.c
diff --git a/keyboards/naked64/rev1/rev1.h b/keyboards/salicylic_acid3/naked64/rev1/rev1.h
index 0ac804ee0f..0ac804ee0f 100644
--- a/keyboards/naked64/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/naked64/rev1/rev1.h
diff --git a/keyboards/wings42/rev1/rules.mk b/keyboards/salicylic_acid3/naked64/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/wings42/rev1/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/naked64/rules.mk b/keyboards/salicylic_acid3/naked64/rules.mk
new file mode 100644
index 0000000000..db027e3bda
--- /dev/null
+++ b/keyboards/salicylic_acid3/naked64/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+OLED_ENABLE = no
+USE_I2C = no
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = salicylic_acid3/naked64/rev1
diff --git a/keyboards/nknl7en/config.h b/keyboards/salicylic_acid3/nknl7en/config.h
index 997971bc96..997971bc96 100644
--- a/keyboards/nknl7en/config.h
+++ b/keyboards/salicylic_acid3/nknl7en/config.h
diff --git a/keyboards/nknl7en/info.json b/keyboards/salicylic_acid3/nknl7en/info.json
index c80ac22769..c80ac22769 100644
--- a/keyboards/nknl7en/info.json
+++ b/keyboards/salicylic_acid3/nknl7en/info.json
diff --git a/keyboards/nknl7en/keymaps/default/config.h b/keyboards/salicylic_acid3/nknl7en/keymaps/default/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/nknl7en/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/default/config.h
diff --git a/keyboards/nknl7en/keymaps/default/keymap.c b/keyboards/salicylic_acid3/nknl7en/keymaps/default/keymap.c
index f3ce52e91b..f3ce52e91b 100644
--- a/keyboards/nknl7en/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/default/keymap.c
diff --git a/keyboards/nknl7en/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/nknl7en/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/config.h
diff --git a/keyboards/nknl7en/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/keymap.c
index e7de4e50f0..e7de4e50f0 100644
--- a/keyboards/nknl7en/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/salicylic/keymap.c
diff --git a/keyboards/nknl7en/keymaps/via/config.h b/keyboards/salicylic_acid3/nknl7en/keymaps/via/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/nknl7en/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/via/config.h
diff --git a/keyboards/nknl7en/keymaps/via/keymap.c b/keyboards/salicylic_acid3/nknl7en/keymaps/via/keymap.c
index f31d06a22b..f31d06a22b 100644
--- a/keyboards/nknl7en/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/via/keymap.c
diff --git a/keyboards/pistachio_mp/keymaps/via/rules.mk b/keyboards/salicylic_acid3/nknl7en/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/pistachio_mp/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/nknl7en/keymaps/via/rules.mk
diff --git a/keyboards/nknl7en/nknl7en.c b/keyboards/salicylic_acid3/nknl7en/nknl7en.c
index 1f06cb7336..1f06cb7336 100644
--- a/keyboards/nknl7en/nknl7en.c
+++ b/keyboards/salicylic_acid3/nknl7en/nknl7en.c
diff --git a/keyboards/nknl7en/nknl7en.h b/keyboards/salicylic_acid3/nknl7en/nknl7en.h
index 945e42956f..945e42956f 100644
--- a/keyboards/nknl7en/nknl7en.h
+++ b/keyboards/salicylic_acid3/nknl7en/nknl7en.h
diff --git a/keyboards/salicylic_acid3/nknl7en/readme.md b/keyboards/salicylic_acid3/nknl7en/readme.md
new file mode 100644
index 0000000000..07f87e3e5e
--- /dev/null
+++ b/keyboards/salicylic_acid3/nknl7en/readme.md
@@ -0,0 +1,17 @@
+# nknl7en
+
+![nknl7en](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20201113/20201113010013.png)
+
+This is 70 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: nknl7 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2672651)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/nknl7en:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/nknl7-build-guide)
diff --git a/keyboards/nknl7en/rules.mk b/keyboards/salicylic_acid3/nknl7en/rules.mk
index aba3644c9e..aba3644c9e 100644
--- a/keyboards/nknl7en/rules.mk
+++ b/keyboards/salicylic_acid3/nknl7en/rules.mk
diff --git a/keyboards/nknl7jp/config.h b/keyboards/salicylic_acid3/nknl7jp/config.h
index 7fb3c0e9c9..7fb3c0e9c9 100644
--- a/keyboards/nknl7jp/config.h
+++ b/keyboards/salicylic_acid3/nknl7jp/config.h
diff --git a/keyboards/nknl7jp/info.json b/keyboards/salicylic_acid3/nknl7jp/info.json
index c074d9019f..c074d9019f 100644
--- a/keyboards/nknl7jp/info.json
+++ b/keyboards/salicylic_acid3/nknl7jp/info.json
diff --git a/keyboards/nknl7jp/keymaps/default/config.h b/keyboards/salicylic_acid3/nknl7jp/keymaps/default/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/nknl7jp/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/default/config.h
diff --git a/keyboards/nknl7jp/keymaps/default/keymap.c b/keyboards/salicylic_acid3/nknl7jp/keymaps/default/keymap.c
index 0f90eb883c..0f90eb883c 100644
--- a/keyboards/nknl7jp/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/default/keymap.c
diff --git a/keyboards/nknl7jp/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/config.h
index 653695d629..653695d629 100644
--- a/keyboards/nknl7jp/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/config.h
diff --git a/keyboards/nknl7jp/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/keymap.c
index 65f95f0173..65f95f0173 100644
--- a/keyboards/nknl7jp/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/salicylic/keymap.c
diff --git a/keyboards/nknl7jp/keymaps/via/config.h b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/config.h
index fd96baa819..fd96baa819 100644
--- a/keyboards/nknl7jp/keymaps/via/config.h
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/config.h
diff --git a/keyboards/nknl7jp/keymaps/via/keymap.c b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/keymap.c
index 660fb2a159..660fb2a159 100644
--- a/keyboards/nknl7jp/keymaps/via/keymap.c
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/keymap.c
diff --git a/keyboards/rainkeeb/keymaps/via/rules.mk b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/rainkeeb/keymaps/via/rules.mk
+++ b/keyboards/salicylic_acid3/nknl7jp/keymaps/via/rules.mk
diff --git a/keyboards/nknl7jp/nknl7jp.c b/keyboards/salicylic_acid3/nknl7jp/nknl7jp.c
index 0395a3b678..0395a3b678 100644
--- a/keyboards/nknl7jp/nknl7jp.c
+++ b/keyboards/salicylic_acid3/nknl7jp/nknl7jp.c
diff --git a/keyboards/nknl7jp/nknl7jp.h b/keyboards/salicylic_acid3/nknl7jp/nknl7jp.h
index 3984ac7788..3984ac7788 100644
--- a/keyboards/nknl7jp/nknl7jp.h
+++ b/keyboards/salicylic_acid3/nknl7jp/nknl7jp.h
diff --git a/keyboards/salicylic_acid3/nknl7jp/readme.md b/keyboards/salicylic_acid3/nknl7jp/readme.md
new file mode 100644
index 0000000000..b2f375aef8
--- /dev/null
+++ b/keyboards/salicylic_acid3/nknl7jp/readme.md
@@ -0,0 +1,17 @@
+# nknl7jp
+
+![nknl7jp](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20201113/20201113010013.png)
+
+This is 73 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: nknl7jp PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/2672651)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/nknl7jp:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/nknl7-build-guide)
diff --git a/keyboards/nknl7jp/rules.mk b/keyboards/salicylic_acid3/nknl7jp/rules.mk
index aba3644c9e..aba3644c9e 100644
--- a/keyboards/nknl7jp/rules.mk
+++ b/keyboards/salicylic_acid3/nknl7jp/rules.mk
diff --git a/keyboards/zinc/config.h b/keyboards/salicylic_acid3/setta21/config.h
index cfb6bf4ffc..cfb6bf4ffc 100644
--- a/keyboards/zinc/config.h
+++ b/keyboards/salicylic_acid3/setta21/config.h
diff --git a/keyboards/setta21/info.json b/keyboards/salicylic_acid3/setta21/info.json
index 46c06613a8..46c06613a8 100644
--- a/keyboards/setta21/info.json
+++ b/keyboards/salicylic_acid3/setta21/info.json
diff --git a/keyboards/setta21/keymaps/default/config.h b/keyboards/salicylic_acid3/setta21/keymaps/default/config.h
index e35fe2ccd7..e35fe2ccd7 100644
--- a/keyboards/setta21/keymaps/default/config.h
+++ b/keyboards/salicylic_acid3/setta21/keymaps/default/config.h
diff --git a/keyboards/setta21/keymaps/default/keymap.c b/keyboards/salicylic_acid3/setta21/keymaps/default/keymap.c
index fa33c08f26..fa33c08f26 100644
--- a/keyboards/setta21/keymaps/default/keymap.c
+++ b/keyboards/salicylic_acid3/setta21/keymaps/default/keymap.c
diff --git a/keyboards/setta21/keymaps/default/readme.md b/keyboards/salicylic_acid3/setta21/keymaps/default/readme.md
index 1028d848c5..1028d848c5 100644
--- a/keyboards/setta21/keymaps/default/readme.md
+++ b/keyboards/salicylic_acid3/setta21/keymaps/default/readme.md
diff --git a/keyboards/setta21/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h
index 06e23ba7a3..06e23ba7a3 100644
--- a/keyboards/setta21/keymaps/salicylic/config.h
+++ b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h
diff --git a/keyboards/setta21/keymaps/salicylic/keymap.c b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/keymap.c
index 06fa89c9c7..06fa89c9c7 100644
--- a/keyboards/setta21/keymaps/salicylic/keymap.c
+++ b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/keymap.c
diff --git a/keyboards/setta21/keymaps/salicylic/readme.md b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/readme.md
index ad27736d2b..ad27736d2b 100644
--- a/keyboards/setta21/keymaps/salicylic/readme.md
+++ b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/readme.md
diff --git a/keyboards/setta21/keymaps/salicylic/rules.mk b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/rules.mk
index 69864a3166..69864a3166 100644
--- a/keyboards/setta21/keymaps/salicylic/rules.mk
+++ b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/rules.mk
diff --git a/keyboards/salicylic_acid3/setta21/readme.md b/keyboards/salicylic_acid3/setta21/readme.md
new file mode 100644
index 0000000000..25027b7281
--- /dev/null
+++ b/keyboards/salicylic_acid3/setta21/readme.md
@@ -0,0 +1,17 @@
+# setta21
+
+![setta21](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190315/20190315022018.jpg)
+
+This is 21 keys tenkeypad.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: setta21 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271667)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make salicylic_acid3/setta21/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/setta21-build-guide)
diff --git a/keyboards/treadstone32/lite/.noci b/keyboards/salicylic_acid3/setta21/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/treadstone32/lite/.noci
+++ b/keyboards/salicylic_acid3/setta21/rev1/.noci
diff --git a/keyboards/setta21/rev1/config.h b/keyboards/salicylic_acid3/setta21/rev1/config.h
index 742a8d73d0..742a8d73d0 100644
--- a/keyboards/setta21/rev1/config.h
+++ b/keyboards/salicylic_acid3/setta21/rev1/config.h
diff --git a/keyboards/setta21/rev1/rev1.c b/keyboards/salicylic_acid3/setta21/rev1/rev1.c
index b377452770..b377452770 100644
--- a/keyboards/setta21/rev1/rev1.c
+++ b/keyboards/salicylic_acid3/setta21/rev1/rev1.c
diff --git a/keyboards/setta21/rev1/rev1.h b/keyboards/salicylic_acid3/setta21/rev1/rev1.h
index 772c843c57..772c843c57 100644
--- a/keyboards/setta21/rev1/rev1.h
+++ b/keyboards/salicylic_acid3/setta21/rev1/rev1.h
diff --git a/keyboards/wings42/rev1_extkeys/rules.mk b/keyboards/salicylic_acid3/setta21/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/wings42/rev1_extkeys/rules.mk
+++ b/keyboards/salicylic_acid3/setta21/rev1/rules.mk
diff --git a/keyboards/salicylic_acid3/setta21/rules.mk b/keyboards/salicylic_acid3/setta21/rules.mk
new file mode 100644
index 0000000000..c7920fdfe8
--- /dev/null
+++ b/keyboards/salicylic_acid3/setta21/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+OLED_ENABLE = no
+USE_I2C = no
+RGB_MATRIX_ENABLE = no
+RGB_MATRIX_DRIVER = WS2812
+
+DEFAULT_FOLDER = salicylic_acid3/setta21/rev1
+
+LAYOUTS = numpad_6x4
diff --git a/keyboards/setta21/setta21.c b/keyboards/salicylic_acid3/setta21/setta21.c
index 73c07682f7..73c07682f7 100644
--- a/keyboards/setta21/setta21.c
+++ b/keyboards/salicylic_acid3/setta21/setta21.c
diff --git a/keyboards/salicylic_acid3/setta21/setta21.h b/keyboards/salicylic_acid3/setta21/setta21.h
new file mode 100644
index 0000000000..9e5b17e2c3
--- /dev/null
+++ b/keyboards/salicylic_acid3/setta21/setta21.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_salicylic_acid3_setta21_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/comet46/comet46.c b/keyboards/satt/comet46/comet46.c
index 7c7edba93e..7c7edba93e 100644
--- a/keyboards/comet46/comet46.c
+++ b/keyboards/satt/comet46/comet46.c
diff --git a/keyboards/comet46/comet46.h b/keyboards/satt/comet46/comet46.h
index 094d960e20..094d960e20 100644
--- a/keyboards/comet46/comet46.h
+++ b/keyboards/satt/comet46/comet46.h
diff --git a/keyboards/satt/comet46/config.h b/keyboards/satt/comet46/config.h
new file mode 100644
index 0000000000..5ea40c14c5
--- /dev/null
+++ b/keyboards/satt/comet46/config.h
@@ -0,0 +1,64 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER SatT
+#define PRODUCT Comet46
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 10
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+// Define masks for modifiers
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
+#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
diff --git a/keyboards/comet46/i2c.c b/keyboards/satt/comet46/i2c.c
index 4bee5c6398..4bee5c6398 100644
--- a/keyboards/comet46/i2c.c
+++ b/keyboards/satt/comet46/i2c.c
diff --git a/keyboards/comet46/i2c.h b/keyboards/satt/comet46/i2c.h
index 710662c7ab..710662c7ab 100644
--- a/keyboards/comet46/i2c.h
+++ b/keyboards/satt/comet46/i2c.h
diff --git a/keyboards/comet46/info.json b/keyboards/satt/comet46/info.json
index f49c878e08..f49c878e08 100644
--- a/keyboards/comet46/info.json
+++ b/keyboards/satt/comet46/info.json
diff --git a/keyboards/comet46/keymaps/default-rgbled/keymap.c b/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c
index d1e5b663dc..d1e5b663dc 100644
--- a/keyboards/comet46/keymaps/default-rgbled/keymap.c
+++ b/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c
diff --git a/keyboards/comet46/keymaps/default-rgbled/readme.md b/keyboards/satt/comet46/keymaps/default-rgbled/readme.md
index 40cc744337..40cc744337 100644
--- a/keyboards/comet46/keymaps/default-rgbled/readme.md
+++ b/keyboards/satt/comet46/keymaps/default-rgbled/readme.md
diff --git a/keyboards/comet46/keymaps/default/config.h b/keyboards/satt/comet46/keymaps/default/config.h
index ee02a94b7e..ee02a94b7e 100644
--- a/keyboards/comet46/keymaps/default/config.h
+++ b/keyboards/satt/comet46/keymaps/default/config.h
diff --git a/keyboards/comet46/keymaps/default/keymap.c b/keyboards/satt/comet46/keymaps/default/keymap.c
index 7a8c29dcb9..7a8c29dcb9 100644
--- a/keyboards/comet46/keymaps/default/keymap.c
+++ b/keyboards/satt/comet46/keymaps/default/keymap.c
diff --git a/keyboards/comet46/keymaps/default/readme.md b/keyboards/satt/comet46/keymaps/default/readme.md
index b0085d2a62..b0085d2a62 100644
--- a/keyboards/comet46/keymaps/default/readme.md
+++ b/keyboards/satt/comet46/keymaps/default/readme.md
diff --git a/keyboards/comet46/keymaps/default/rules.mk b/keyboards/satt/comet46/keymaps/default/rules.mk
index 3fa01f96af..3fa01f96af 100644
--- a/keyboards/comet46/keymaps/default/rules.mk
+++ b/keyboards/satt/comet46/keymaps/default/rules.mk
diff --git a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c b/keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.c
index 4a7cb3a3a2..4a7cb3a3a2 100644
--- a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c
+++ b/keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.c
diff --git a/keyboards/comet46/keymaps/satt/action_pseudo_lut.h b/keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.h
index 681252440f..681252440f 100644
--- a/keyboards/comet46/keymaps/satt/action_pseudo_lut.h
+++ b/keyboards/satt/comet46/keymaps/satt/action_pseudo_lut.h
diff --git a/keyboards/comet46/keymaps/satt/config.h b/keyboards/satt/comet46/keymaps/satt/config.h
index a3ca2ebfef..a3ca2ebfef 100644
--- a/keyboards/comet46/keymaps/satt/config.h
+++ b/keyboards/satt/comet46/keymaps/satt/config.h
diff --git a/keyboards/comet46/keymaps/satt/keymap.c b/keyboards/satt/comet46/keymaps/satt/keymap.c
index 57aa635934..57aa635934 100644
--- a/keyboards/comet46/keymaps/satt/keymap.c
+++ b/keyboards/satt/comet46/keymaps/satt/keymap.c
diff --git a/keyboards/comet46/keymaps/satt/keymap_jis2us.h b/keyboards/satt/comet46/keymaps/satt/keymap_jis2us.h
index e32a0579aa..e32a0579aa 100644
--- a/keyboards/comet46/keymaps/satt/keymap_jis2us.h
+++ b/keyboards/satt/comet46/keymaps/satt/keymap_jis2us.h
diff --git a/keyboards/comet46/keymaps/satt/readme.md b/keyboards/satt/comet46/keymaps/satt/readme.md
index 33bbad3264..33bbad3264 100644
--- a/keyboards/comet46/keymaps/satt/readme.md
+++ b/keyboards/satt/comet46/keymaps/satt/readme.md
diff --git a/keyboards/comet46/keymaps/satt/rules.mk b/keyboards/satt/comet46/keymaps/satt/rules.mk
index 91609dd4fd..91609dd4fd 100644
--- a/keyboards/comet46/keymaps/satt/rules.mk
+++ b/keyboards/satt/comet46/keymaps/satt/rules.mk
diff --git a/keyboards/comet46/lib/glcdfont.c b/keyboards/satt/comet46/lib/glcdfont.c
index 361d0c3dc6..361d0c3dc6 100644
--- a/keyboards/comet46/lib/glcdfont.c
+++ b/keyboards/satt/comet46/lib/glcdfont.c
diff --git a/keyboards/comet46/lib/host_led_state_reader.c b/keyboards/satt/comet46/lib/host_led_state_reader.c
index 864b1e2447..864b1e2447 100644
--- a/keyboards/comet46/lib/host_led_state_reader.c
+++ b/keyboards/satt/comet46/lib/host_led_state_reader.c
diff --git a/keyboards/comet46/lib/keylogger.c b/keyboards/satt/comet46/lib/keylogger.c
index a0abdd79ab..a0abdd79ab 100644
--- a/keyboards/comet46/lib/keylogger.c
+++ b/keyboards/satt/comet46/lib/keylogger.c
diff --git a/keyboards/comet46/lib/modifier_state_reader.c b/keyboards/satt/comet46/lib/modifier_state_reader.c
index 518eef92a6..518eef92a6 100644
--- a/keyboards/comet46/lib/modifier_state_reader.c
+++ b/keyboards/satt/comet46/lib/modifier_state_reader.c
diff --git a/keyboards/satt/comet46/matrix.c b/keyboards/satt/comet46/matrix.c
new file mode 100644
index 0000000000..a92c3e8431
--- /dev/null
+++ b/keyboards/satt/comet46/matrix.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
+
+void matrix_init_custom(void) {
+ uart_init(1000000);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ uint32_t timeout = 0;
+ bool changed = false;
+
+ //the s character requests the RF slave to send the matrix
+ uart_write('s');
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[11] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 11; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while (!uart_available()) {
+ timeout++;
+ if (timeout > 10000) {
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0) {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 5;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
+ }
+ }
+
+ return changed;
+}
diff --git a/keyboards/satt/comet46/readme.md b/keyboards/satt/comet46/readme.md
new file mode 100644
index 0000000000..60cb432a48
--- /dev/null
+++ b/keyboards/satt/comet46/readme.md
@@ -0,0 +1,17 @@
+# Comet46
+
+![Comet46](https://user-images.githubusercontent.com/39004890/50396817-a1660600-07af-11e9-8611-3156c635db43.jpg)
+
+A split wireless 40% column-staggered keyboard
+
+Keyboard Maintainer: [SatT](https://github.com/satt99)
+Hardware Supported: Comet46 PCB, atmega32u4, nRF51822
+Hardware Availability: [Comet46 PCB, case, and receiver](https://github.com/satt99/comet46-hardware)
+Firmware for nordic MCUs: [SRC and precompiled](https://github.com/satt99/comet46-firmware)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make satt/comet46:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
diff --git a/keyboards/satt/comet46/rules.mk b/keyboards/satt/comet46/rules.mk
new file mode 100644
index 0000000000..e177fc6441
--- /dev/null
+++ b/keyboards/satt/comet46/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+CUSTOM_MATRIX = lite
+
+# project specific files
+SRC += matrix.c \
+ i2c.c \
+ ssd1306.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/comet46/ssd1306.c b/keyboards/satt/comet46/ssd1306.c
index 4bd2d80bc4..4bd2d80bc4 100644
--- a/keyboards/comet46/ssd1306.c
+++ b/keyboards/satt/comet46/ssd1306.c
diff --git a/keyboards/comet46/ssd1306.h b/keyboards/satt/comet46/ssd1306.h
index 11a3cc67f4..11a3cc67f4 100644
--- a/keyboards/comet46/ssd1306.h
+++ b/keyboards/satt/comet46/ssd1306.h
diff --git a/keyboards/scarletbandana/readme.md b/keyboards/scarletbandana/readme.md
deleted file mode 100644
index 83281bae36..0000000000
--- a/keyboards/scarletbandana/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Scarlet Bandana Version IV Mark 2
-
-Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham)
-Hardware Supported: Scarlet Bandana Version IV Mark 2
-Hardware Availability: [WoodKeys.click](https://woodkeys.click/product/scarlet-bandana-version-iv-mark-2/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make scarletbandana:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/scythe/readme.md b/keyboards/scythe/readme.md
deleted file mode 100644
index fed4a77e2f..0000000000
--- a/keyboards/scythe/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Scythe
-
-![Scythe](https://i.imgur.com/jBqQAAt.jpg)
-
-Yet another 60% symmetrical split keyboard.
-
-Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
-Hardware Supported: Scythe PCB, ATMEGA32U4
-Hardware Availability: [@kagizaraya](https://twitter.com/kagizaraya)
-
-Make example for this keyboard (after setting up your build environment):
-
- make scythe:default:dfu
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/seigaiha/readme.md b/keyboards/seigaiha/readme.md
deleted file mode 100644
index fb0e8571ae..0000000000
--- a/keyboards/seigaiha/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Seigaiha
-
-![Seigaiha](https://i.imgur.com/GCGyOmph.jpg)
-
-An alice layout kit with only through hole components.
-
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
-* Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/seigaiha_pcb)
-* Hardware Availability: https://mykeyboard.eu/, https://novelkeys.xyz
-
-Make example for this keyboard (after setting up your build environment):
-
- make seigaiha:default
-
-Flashing example for this keyboard:
-
- make seigaiha:default:flash
-
-Bootloader:
-use usbasploader from HSGW's repository.
-https://github.com/hsgw/USBaspLoader/tree/plaid
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sekigon/grs_70ec/matrix.c b/keyboards/sekigon/grs_70ec/matrix.c
index 98b2347937..926ed6f813 100644
--- a/keyboards/sekigon/grs_70ec/matrix.c
+++ b/keyboards/sekigon/grs_70ec/matrix.c
@@ -70,50 +70,3 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
return updated;
}
-
-bool matrix_post_scan(void) {
- bool changed = false;
- if (is_keyboard_master()) {
- static uint8_t error_count;
-
- matrix_row_t slave_matrix[ROWS_PER_HAND] = {0};
- if (!transport_master(matrix + thatHand, slave_matrix)) {
- error_count++;
-
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- dprintf("Error: disconnect split half\n");
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[thatHand + i] = 0;
- slave_matrix[i] = 0;
- }
-
- changed = true;
- }
- } else {
- error_count = 0;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- if (matrix[thatHand + i] != slave_matrix[i]) {
- matrix[thatHand + i] = slave_matrix[i];
- changed = true;
- }
- }
- }
-
- matrix_scan_quantum();
- } else {
- transport_slave(matrix + thatHand, matrix + thisHand);
-
- matrix_slave_scan_user();
- }
- return changed;
-}
-
-uint8_t matrix_scan(void) {
- bool changed = matrix_scan_custom(raw_matrix) || matrix_post_scan();
-
- debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
-
- return changed;
-}
diff --git a/keyboards/senselessclay/gos65/rules.mk b/keyboards/senselessclay/gos65/rules.mk
index 08b268c041..b5761555d4 100644
--- a/keyboards/senselessclay/gos65/rules.mk
+++ b/keyboards/senselessclay/gos65/rules.mk
@@ -7,15 +7,12 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
-MOUSEKEY_ENABLE = no # Mouse keys
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
+NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output \ No newline at end of file
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/setta21/readme.md b/keyboards/setta21/readme.md
deleted file mode 100644
index c940079997..0000000000
--- a/keyboards/setta21/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# setta21
-
-![setta21](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190315/20190315022018.jpg)
-
-This is 21 keys tenkeypad.
-
-* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
-* Hardware Supported: setta21 PCB, Pro Micro
-* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271667)
-
-Make example for this keyboard (after setting up your build environment):
-
- make setta21:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://salicylic-acid3.hatenablog.com/entry/setta21-build-guide)
diff --git a/keyboards/setta21/rules.mk b/keyboards/setta21/rules.mk
deleted file mode 100644
index e31a7b5c7a..0000000000
--- a/keyboards/setta21/rules.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-USE_I2C = no
-RGB_MATRIX_ENABLE = no
-RGB_MATRIX_DRIVER = WS2812
-
-DEFAULT_FOLDER = setta21/rev1
-
-LAYOUTS = numpad_6x4
diff --git a/keyboards/setta21/setta21.h b/keyboards/setta21/setta21.h
deleted file mode 100644
index 0409f6cbc2..0000000000
--- a/keyboards/setta21/setta21.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_setta21_rev1
- #include "rev1.h"
-#endif
diff --git a/keyboards/sirius/uni660/rev1/config.h b/keyboards/sirius/uni660/rev1/config.h
index 91d7c5d7a3..f9815844cb 100644
--- a/keyboards/sirius/uni660/rev1/config.h
+++ b/keyboards/sirius/uni660/rev1/config.h
@@ -57,13 +57,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
-
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
diff --git a/keyboards/sirius/uni660/rev1/matrix.c b/keyboards/sirius/uni660/rev1/matrix.c
index 2db6767a46..919db5c80d 100644
--- a/keyboards/sirius/uni660/rev1/matrix.c
+++ b/keyboards/sirius/uni660/rev1/matrix.c
@@ -15,83 +15,21 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "debounce.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
-void matrix_init(void) {
- debounce_init(MATRIX_ROWS);
- matrix_init_quantum();
- serial_init();
+void matrix_init_custom(void) {
+ uart_init(1000000);
}
-uint8_t matrix_scan(void)
-{
- bool matrix_has_changed = false;
-
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
uint32_t timeout = 0;
+ bool changed = false;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[17] = {0};
@@ -101,60 +39,27 @@ uint8_t matrix_scan(void)
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while (!uart_available()) {
timeout++;
- if (timeout > 10000){
+ if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
+ if (uart_data[10] == 0xE0) {
//shifting and transferring the keystates to the QMK matrix variable
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 8;
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 8;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
}
}
- debounce(matrix, matrix, MATRIX_ROWS, matrix_has_changed);
-
- matrix_scan_quantum();
-
- return matrix_has_changed;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
+ return changed;
}
diff --git a/keyboards/sirius/uni660/rev1/rules.mk b/keyboards/sirius/uni660/rev1/rules.mk
index 836bf6b442..71cc3efd92 100644
--- a/keyboards/sirius/uni660/rev1/rules.mk
+++ b/keyboards/sirius/uni660/rev1/rules.mk
@@ -17,7 +17,8 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = yes # Unicode
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
# project specific files
-SRC += matrix.c serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/sirius/uni660/rev2/ansi/config.h b/keyboards/sirius/uni660/rev2/ansi/config.h
index 13e33ebf11..8777dc4011 100644
--- a/keyboards/sirius/uni660/rev2/ansi/config.h
+++ b/keyboards/sirius/uni660/rev2/ansi/config.h
@@ -57,13 +57,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
-
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
diff --git a/keyboards/sirius/uni660/rev2/iso/config.h b/keyboards/sirius/uni660/rev2/iso/config.h
index 3283f0cd67..763230dca8 100644
--- a/keyboards/sirius/uni660/rev2/iso/config.h
+++ b/keyboards/sirius/uni660/rev2/iso/config.h
@@ -57,13 +57,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
-
#define DYNAMIC_KEYMAP_LAYER_COUNT 4
diff --git a/keyboards/sirius/uni660/rev2/matrix.c b/keyboards/sirius/uni660/rev2/matrix.c
index 2db6767a46..919db5c80d 100644
--- a/keyboards/sirius/uni660/rev2/matrix.c
+++ b/keyboards/sirius/uni660/rev2/matrix.c
@@ -15,83 +15,21 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.h"
-#include "debounce.h"
-#include "protocol/serial.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
+#include "quantum.h"
+#include "matrix.h"
+#include "uart.h"
-void matrix_init(void) {
- debounce_init(MATRIX_ROWS);
- matrix_init_quantum();
- serial_init();
+void matrix_init_custom(void) {
+ uart_init(1000000);
}
-uint8_t matrix_scan(void)
-{
- bool matrix_has_changed = false;
-
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
uint32_t timeout = 0;
+ bool changed = false;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[17] = {0};
@@ -101,60 +39,27 @@ uint8_t matrix_scan(void)
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
+ while (!uart_available()) {
timeout++;
- if (timeout > 10000){
+ if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved
- if (uart_data[10] == 0xE0)
- {
+ if (uart_data[10] == 0xE0) {
//shifting and transferring the keystates to the QMK matrix variable
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 8;
+ matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 8;
+ if (current_matrix[i] != current_row) {
+ changed = true;
+ }
+ current_matrix[i] = current_row;
}
}
- debounce(matrix, matrix, MATRIX_ROWS, matrix_has_changed);
-
- matrix_scan_quantum();
-
- return matrix_has_changed;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
+ return changed;
}
diff --git a/keyboards/sirius/uni660/rev2/rules.mk b/keyboards/sirius/uni660/rev2/rules.mk
index 0abebb07c6..850c2a2e35 100644
--- a/keyboards/sirius/uni660/rev2/rules.mk
+++ b/keyboards/sirius/uni660/rev2/rules.mk
@@ -17,9 +17,10 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = yes # Unicode
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
# project specific files
-SRC += matrix.c serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
DEFAULT_FOLDER = sirius/uni660/rev2/ansi
diff --git a/keyboards/sirius/unigo66/custom_matrix.cpp b/keyboards/sirius/unigo66/custom_matrix.cpp
index fba107c7cb..955ce189a8 100644
--- a/keyboards/sirius/unigo66/custom_matrix.cpp
+++ b/keyboards/sirius/unigo66/custom_matrix.cpp
@@ -166,16 +166,12 @@ extern "C"
// restore LED state when keyboard comes up
if (usb_state == USB_STATE_RUNNING) {
dprintf("speed: %s\n", usb_host.getVbusState()==FSHOST ? "full" : "low");
- keyboard_set_leds(host_keyboard_leds());
+ led_set(host_keyboard_leds());
}
}
return 1;
}
- bool matrix_is_modified(void) {
- return matrix_is_mod;
- }
-
bool matrix_is_on(uint8_t row, uint8_t col) {
uint8_t code = CODE(row, col);
diff --git a/keyboards/sixkeyboard/matrix.c b/keyboards/sixkeyboard/matrix.c
index 64b46e9b0c..a6b28f3a12 100644
--- a/keyboards/sixkeyboard/matrix.c
+++ b/keyboards/sixkeyboard/matrix.c
@@ -114,11 +114,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/space_space/readme.md b/keyboards/space_space/readme.md
deleted file mode 100644
index 08fa640f22..0000000000
--- a/keyboards/space_space/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# space_space
-
-![space_space](https://i.imgur.com/SxjhzIMl.jpg)
-
-Give your space some space
-
-* Keyboard Maintainer: https://github.com/qpockets
-* Hardware Availability: [p3dstore](https://p3dstore.com/products/space-space-acrylic-case?_pos=21&_sid=c75de6a78&_ss=r&variant=39907740844216)
-
-Make example for this keyboard (after setting up your build environment):
-
- make space_space/rev2:default
-
-Flashing example for this keyboard:
-
- make space_space/rev2:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/space_space/rules.mk b/keyboards/space_space/rules.mk
deleted file mode 100644
index 2ca04be440..0000000000
--- a/keyboards/space_space/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = space_space/rev2
diff --git a/keyboards/nebula12/chconf.h b/keyboards/spaceholdings/nebula12/chconf.h
index 51c2e75712..51c2e75712 100644
--- a/keyboards/nebula12/chconf.h
+++ b/keyboards/spaceholdings/nebula12/chconf.h
diff --git a/keyboards/nebula12/config.h b/keyboards/spaceholdings/nebula12/config.h
index da9fd10575..da9fd10575 100755
--- a/keyboards/nebula12/config.h
+++ b/keyboards/spaceholdings/nebula12/config.h
diff --git a/keyboards/nebula12/halconf.h b/keyboards/spaceholdings/nebula12/halconf.h
index e4223dc639..e4223dc639 100644
--- a/keyboards/nebula12/halconf.h
+++ b/keyboards/spaceholdings/nebula12/halconf.h
diff --git a/keyboards/nebula12/info.json b/keyboards/spaceholdings/nebula12/info.json
index 64ad3747a6..64ad3747a6 100755
--- a/keyboards/nebula12/info.json
+++ b/keyboards/spaceholdings/nebula12/info.json
diff --git a/keyboards/nebula12/keymaps/default/keymap.c b/keyboards/spaceholdings/nebula12/keymaps/default/keymap.c
index 670d25e732..670d25e732 100755
--- a/keyboards/nebula12/keymaps/default/keymap.c
+++ b/keyboards/spaceholdings/nebula12/keymaps/default/keymap.c
diff --git a/keyboards/nebula12/keymaps/default/readme.md b/keyboards/spaceholdings/nebula12/keymaps/default/readme.md
index 706ec9f3bf..706ec9f3bf 100755
--- a/keyboards/nebula12/keymaps/default/readme.md
+++ b/keyboards/spaceholdings/nebula12/keymaps/default/readme.md
diff --git a/keyboards/nebula12/keymaps/via/keymap.c b/keyboards/spaceholdings/nebula12/keymaps/via/keymap.c
index 670d25e732..670d25e732 100755
--- a/keyboards/nebula12/keymaps/via/keymap.c
+++ b/keyboards/spaceholdings/nebula12/keymaps/via/keymap.c
diff --git a/keyboards/nebula12/keymaps/via/readme.md b/keyboards/spaceholdings/nebula12/keymaps/via/readme.md
index 7023515d77..7023515d77 100755
--- a/keyboards/nebula12/keymaps/via/readme.md
+++ b/keyboards/spaceholdings/nebula12/keymaps/via/readme.md
diff --git a/keyboards/nk87/keymaps/via/rules.mk b/keyboards/spaceholdings/nebula12/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100755
--- a/keyboards/nk87/keymaps/via/rules.mk
+++ b/keyboards/spaceholdings/nebula12/keymaps/via/rules.mk
diff --git a/keyboards/nebula12/mcuconf.h b/keyboards/spaceholdings/nebula12/mcuconf.h
index 9d1d693146..9d1d693146 100644
--- a/keyboards/nebula12/mcuconf.h
+++ b/keyboards/spaceholdings/nebula12/mcuconf.h
diff --git a/keyboards/nebula12/nebula12.c b/keyboards/spaceholdings/nebula12/nebula12.c
index 7491bee844..7491bee844 100755
--- a/keyboards/nebula12/nebula12.c
+++ b/keyboards/spaceholdings/nebula12/nebula12.c
diff --git a/keyboards/nebula12/nebula12.h b/keyboards/spaceholdings/nebula12/nebula12.h
index 1c73fbdaec..1c73fbdaec 100755
--- a/keyboards/nebula12/nebula12.h
+++ b/keyboards/spaceholdings/nebula12/nebula12.h
diff --git a/keyboards/spaceholdings/nebula12/readme.md b/keyboards/spaceholdings/nebula12/readme.md
new file mode 100755
index 0000000000..0fc5be178f
--- /dev/null
+++ b/keyboards/spaceholdings/nebula12/readme.md
@@ -0,0 +1,32 @@
+# Nebula65
+
+This is a standard fixed layout 12 key PCB. It supports VIA, full per-key RGB and underglow RGB.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A 65% keyboard with STM32F072CB
+* Hardware Availability: https://spaceholdings.net/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make spaceholdings/nebula12:via
+
+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 dfu-util (`make nebula12:<keymap>:dfu-util`)
diff --git a/keyboards/nebula12/rules.mk b/keyboards/spaceholdings/nebula12/rules.mk
index 961d5a4915..961d5a4915 100755
--- a/keyboards/nebula12/rules.mk
+++ b/keyboards/spaceholdings/nebula12/rules.mk
diff --git a/keyboards/nebula68/config.h b/keyboards/spaceholdings/nebula68/config.h
index 1d6cb5e918..1d6cb5e918 100755
--- a/keyboards/nebula68/config.h
+++ b/keyboards/spaceholdings/nebula68/config.h
diff --git a/keyboards/nebula68/halconf.h b/keyboards/spaceholdings/nebula68/halconf.h
index faf4d34e65..faf4d34e65 100644
--- a/keyboards/nebula68/halconf.h
+++ b/keyboards/spaceholdings/nebula68/halconf.h
diff --git a/keyboards/nebula68/info.json b/keyboards/spaceholdings/nebula68/info.json
index a0f0ba8aa3..a0f0ba8aa3 100755
--- a/keyboards/nebula68/info.json
+++ b/keyboards/spaceholdings/nebula68/info.json
diff --git a/keyboards/nebula68/keymaps/default/keymap.c b/keyboards/spaceholdings/nebula68/keymaps/default/keymap.c
index da4479f89b..da4479f89b 100755
--- a/keyboards/nebula68/keymaps/default/keymap.c
+++ b/keyboards/spaceholdings/nebula68/keymaps/default/keymap.c
diff --git a/keyboards/nebula68/keymaps/default/readme.md b/keyboards/spaceholdings/nebula68/keymaps/default/readme.md
index a8ae2ac8c7..a8ae2ac8c7 100755
--- a/keyboards/nebula68/keymaps/default/readme.md
+++ b/keyboards/spaceholdings/nebula68/keymaps/default/readme.md
diff --git a/keyboards/nebula68/keymaps/via/keymap.c b/keyboards/spaceholdings/nebula68/keymaps/via/keymap.c
index da4479f89b..da4479f89b 100755
--- a/keyboards/nebula68/keymaps/via/keymap.c
+++ b/keyboards/spaceholdings/nebula68/keymaps/via/keymap.c
diff --git a/keyboards/nebula68/keymaps/via/readme.md b/keyboards/spaceholdings/nebula68/keymaps/via/readme.md
index e45ec36bb4..e45ec36bb4 100755
--- a/keyboards/nebula68/keymaps/via/readme.md
+++ b/keyboards/spaceholdings/nebula68/keymaps/via/readme.md
diff --git a/keyboards/owl8/keymaps/via/rules.mk b/keyboards/spaceholdings/nebula68/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644..100755
--- a/keyboards/owl8/keymaps/via/rules.mk
+++ b/keyboards/spaceholdings/nebula68/keymaps/via/rules.mk
diff --git a/keyboards/nebula68/mcuconf.h b/keyboards/spaceholdings/nebula68/mcuconf.h
index 8bd404746e..8bd404746e 100644
--- a/keyboards/nebula68/mcuconf.h
+++ b/keyboards/spaceholdings/nebula68/mcuconf.h
diff --git a/keyboards/nebula68/nebula68.c b/keyboards/spaceholdings/nebula68/nebula68.c
index 054a269bf6..054a269bf6 100755
--- a/keyboards/nebula68/nebula68.c
+++ b/keyboards/spaceholdings/nebula68/nebula68.c
diff --git a/keyboards/nebula68/nebula68.h b/keyboards/spaceholdings/nebula68/nebula68.h
index db9c7f26cb..db9c7f26cb 100755
--- a/keyboards/nebula68/nebula68.h
+++ b/keyboards/spaceholdings/nebula68/nebula68.h
diff --git a/keyboards/spaceholdings/nebula68/readme.md b/keyboards/spaceholdings/nebula68/readme.md
new file mode 100755
index 0000000000..528d397529
--- /dev/null
+++ b/keyboards/spaceholdings/nebula68/readme.md
@@ -0,0 +1,32 @@
+# Nebula68
+
+This is a standard fixed layout 68% PCB. It supports VIA, full per-key RGB and underglow RGB.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A 68% keyboard with STM32F303CC
+* Hardware Availability: https://spaceholdings.net/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make spaceholdings/nebula68:via
+
+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 dfu-util (`make nebula65:<keymap>:flash`)
diff --git a/keyboards/nebula68/rules.mk b/keyboards/spaceholdings/nebula68/rules.mk
index b7d3ca2005..b7d3ca2005 100755
--- a/keyboards/nebula68/rules.mk
+++ b/keyboards/spaceholdings/nebula68/rules.mk
diff --git a/keyboards/nebula68b/config.h b/keyboards/spaceholdings/nebula68b/config.h
index 1c0d6db233..1c0d6db233 100755
--- a/keyboards/nebula68b/config.h
+++ b/keyboards/spaceholdings/nebula68b/config.h
diff --git a/keyboards/nebula68b/info.json b/keyboards/spaceholdings/nebula68b/info.json
index 253e9682ed..253e9682ed 100755
--- a/keyboards/nebula68b/info.json
+++ b/keyboards/spaceholdings/nebula68b/info.json
diff --git a/keyboards/nebula68b/keymaps/default/keymap.c b/keyboards/spaceholdings/nebula68b/keymaps/default/keymap.c
index efb16d920e..efb16d920e 100755
--- a/keyboards/nebula68b/keymaps/default/keymap.c
+++ b/keyboards/spaceholdings/nebula68b/keymaps/default/keymap.c
diff --git a/keyboards/nebula68b/keymaps/default/readme.md b/keyboards/spaceholdings/nebula68b/keymaps/default/readme.md
index 699c741555..699c741555 100755
--- a/keyboards/nebula68b/keymaps/default/readme.md
+++ b/keyboards/spaceholdings/nebula68b/keymaps/default/readme.md
diff --git a/keyboards/nebula68b/keymaps/via/keymap.c b/keyboards/spaceholdings/nebula68b/keymaps/via/keymap.c
index 565e11bd36..565e11bd36 100755
--- a/keyboards/nebula68b/keymaps/via/keymap.c
+++ b/keyboards/spaceholdings/nebula68b/keymaps/via/keymap.c
diff --git a/keyboards/nebula68b/keymaps/via/readme.md b/keyboards/spaceholdings/nebula68b/keymaps/via/readme.md
index 75cbcac25e..75cbcac25e 100755
--- a/keyboards/nebula68b/keymaps/via/readme.md
+++ b/keyboards/spaceholdings/nebula68b/keymaps/via/readme.md
diff --git a/keyboards/plexus75/keymaps/via/rules.mk b/keyboards/spaceholdings/nebula68b/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644..100755
--- a/keyboards/plexus75/keymaps/via/rules.mk
+++ b/keyboards/spaceholdings/nebula68b/keymaps/via/rules.mk
diff --git a/keyboards/nebula68b/nebula68b.c b/keyboards/spaceholdings/nebula68b/nebula68b.c
index 4842d9be92..4842d9be92 100755
--- a/keyboards/nebula68b/nebula68b.c
+++ b/keyboards/spaceholdings/nebula68b/nebula68b.c
diff --git a/keyboards/nebula68b/nebula68b.h b/keyboards/spaceholdings/nebula68b/nebula68b.h
index dd3469c54e..dd3469c54e 100755
--- a/keyboards/nebula68b/nebula68b.h
+++ b/keyboards/spaceholdings/nebula68b/nebula68b.h
diff --git a/keyboards/spaceholdings/nebula68b/readme.md b/keyboards/spaceholdings/nebula68b/readme.md
new file mode 100755
index 0000000000..624d9aced0
--- /dev/null
+++ b/keyboards/spaceholdings/nebula68b/readme.md
@@ -0,0 +1,32 @@
+# Nebula68B
+
+This is a standard fixed layout 68% PCB. It supports VIA, full per-key RGB and underglow RGB. This is revision B.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A 68% keyboard with ATMEGA32U4
+* Hardware Availability: https://spaceholdings.net/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make spaceholdings/nebula68b:via
+
+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 dfu-util (`make nebula65b:<keymap>:flash`)
diff --git a/keyboards/nebula68b/rules.mk b/keyboards/spaceholdings/nebula68b/rules.mk
index 92dd198801..92dd198801 100755
--- a/keyboards/nebula68b/rules.mk
+++ b/keyboards/spaceholdings/nebula68b/rules.mk
diff --git a/keyboards/spaceman/pancake/rev1/feather/rules.mk b/keyboards/spaceman/pancake/rev1/feather/rules.mk
index 6530422734..c213c70872 100644
--- a/keyboards/spaceman/pancake/rev1/feather/rules.mk
+++ b/keyboards/spaceman/pancake/rev1/feather/rules.mk
@@ -20,7 +20,7 @@ BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not b
AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port.
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
LAYOUTS = ortho_4x12 planck_mit
diff --git a/keyboards/spacetime/config.h b/keyboards/spacetime/config.h
index 3afcee1735..7dfca576a0 100644
--- a/keyboards/spacetime/config.h
+++ b/keyboards/spacetime/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x4A1F
+#define DEVICE_VER 0x0100
#define MANUFACTURER Kyle Terry
#define PRODUCT spacetime
diff --git a/keyboards/spiderisland/winry25tc/readme.md b/keyboards/spiderisland/winry25tc/readme.md
deleted file mode 100644
index 45ba0bd5a4..0000000000
--- a/keyboards/spiderisland/winry25tc/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# SpiderIsland 25-key RGB Backlight Hot Swap Mechanical Keyboard
-
-Keyboard from [SpiderIsland on AliExpress](https://a.aliexpress.com/_dVJsSpR). Seller provides [kbfirmware](https://kbfirmware.com/) JSON config that was converted to QMK.
-
-* Keyboard Maintainer: [andrzejressel](https://github.com/andrzejressel)
-* Hardware Availability: https://aliexpress.com/item/1005001523579896.html
-
-Make example for this keyboard (after setting up your build environment):
-
- make spiderisland/winry25tc:default
-
-**Reset Key**: Located on the other side of the keyboard.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/splitkb/kyria/keymaps/gotham/rules.mk b/keyboards/splitkb/kyria/keymaps/gotham/rules.mk
index 81b7123ba5..be3789ce9b 100644
--- a/keyboards/splitkb/kyria/keymaps/gotham/rules.mk
+++ b/keyboards/splitkb/kyria/keymaps/gotham/rules.mk
@@ -16,6 +16,7 @@ endif
ifeq ($(strip $(THUMBSTICK_ENABLE)), yes)
POINTING_DEVICE_ENABLE = yes
+ POINTING_DEVICE_DRIVER = custom
OPT_DEFS += -DTHUMBSTICK_ENABLE
SRC += analog.c
SRC += thumbstick.c
diff --git a/keyboards/splitreus62/readme.md b/keyboards/splitreus62/readme.md
deleted file mode 100644
index 34fda47535..0000000000
--- a/keyboards/splitreus62/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# splitreus62
-
-A split version of the [Atreus62](https://github.com/profet23/atreus62) by Profet23, which itself is based on Phil Hagelberg's [Atreus](https://github.com/technomancy/atreus). You can copy keymaps from Atreus62 and use them with this keyboard.
-
-* Keyboard Maintainer: [NaCly](https://github.com/Na-Cly)
-* Hardware Supported: splitreus62 PCBs, Pro Micro
-* Hardware Availability: https://github.com/Na-Cly/splitreus62
-
-Make example for this keyboard (after setting up your build environment):
-
- make splitreus62:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/squiggle/readme.md b/keyboards/squiggle/readme.md
deleted file mode 100644
index 8d7b58125e..0000000000
--- a/keyboards/squiggle/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# squiggle
-
-![squiggle](https://i.imgur.com/5UhvDsjl.jpg)
-
-It's a keyboard family which has the following requirements:
-
-- 5 columns per hand.
-- No numrow.
-- Split.
-- Symmetric.
-
-* Keyboard Maintainer: [ibnuda](https://github.com/ibnuda)
-* Hardware Supported: Atmega32u4.
-* Hardware Availability: [repo](https://github.com/ibnuda/squiggle).
-
-Make example for this keyboard (after setting up your build environment):
-
- make squiggle:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-To enter to the bootloader you need to:
-
-* Press the key mapped to `RESET`
diff --git a/keyboards/squiggle/rules.mk b/keyboards/squiggle/rules.mk
deleted file mode 100644
index 4f44ddbb73..0000000000
--- a/keyboards/squiggle/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = squiggle/rev1
diff --git a/keyboards/squiggle/squiggle.h b/keyboards/squiggle/squiggle.h
deleted file mode 100644
index 1f3e48552f..0000000000
--- a/keyboards/squiggle/squiggle.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2020 Ibnu D. Aji
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#ifdef KEYBOARD_squiggle_rev1
- #include "rev1.h"
-#endif
-
-#include "quantum.h"
diff --git a/keyboards/standaside/readme.md b/keyboards/standaside/readme.md
deleted file mode 100644
index ca1cfb2763..0000000000
--- a/keyboards/standaside/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Stand Aside
-
-![Stand Aside](https://i.imgur.com/X6Katar.png)
-
-A compact 60% keyboard designed by Fate Everywhere. Born out of the desire for a Planck with a numpad for technical work. Available for sale (kit and completed) once the store comes up.
-
-Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)
-Hardware Supported: Mark 3 Stand Aside.
-Hardware Availability: Seven Store (https://store.7storm.org).
-
-Make example for this keyboard (after setting up your build environment):
-
- make standaside:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/steal_this_keyboard/readme.md b/keyboards/steal_this_keyboard/readme.md
deleted file mode 100644
index 395487f7b3..0000000000
--- a/keyboards/steal_this_keyboard/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# steal this keyboard!
-
-A split 34 keys column staggered keyboard named and decorated after the System of a Down album Steal This Album. All PCB files are available on the [project's github page](https://github.com/obosob/steal_this_keyboard)
-
-* Keyboard Maintainer: [Obosob](https://github.com/obosob)
-
-Make examples for this keyboard (after setting up your build environment):
-
- make steal_this_keyboard:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/stella/readme.md b/keyboards/stella/readme.md
deleted file mode 100644
index f5820dcf9b..0000000000
--- a/keyboards/stella/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# stella
-
-![stella](https://i.imgur.com/jaiG578l.jpg)
-
-A custom keyboard design for VGS community
-
-* Keyboard Maintainer: [HnahKB](https://github.com/vuhopkep)
-* Hardware Supported: Stella Keyboard
-* Hardware Availability: [VGS](https://www.facebook.com/groups/vietnamgamingsetup/permalink/2403066473102277)
-
-Make example for this keyboard (after setting up your build environment):
-
- make stella:default
-
-Flashing example for this keyboard:
-
- make stella:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/readme.md b/keyboards/suihankey/readme.md
deleted file mode 100644
index 29d82323d3..0000000000
--- a/keyboards/suihankey/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# suihankey
-
-![suihankey](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
-
-Compact with only 36 keys is a concept keyboard.
-Supports OLED and RGBLED (optional)
-
-
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: suihankeyboard_alpha, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make suihankey:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/rules.mk b/keyboards/suihankey/rules.mk
deleted file mode 100644
index 8e1e7f7856..0000000000
--- a/keyboards/suihankey/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-OLED_ENABLE = yes
-OLED_DRIVER = SSD1306
-SPLIT_KEYBOARD = no
-
-DEFAULT_FOLDER = suihankey/rev1
diff --git a/keyboards/suihankey/split/alpha/readme.md b/keyboards/suihankey/split/alpha/readme.md
deleted file mode 100644
index 2ea1503eb3..0000000000
--- a/keyboards/suihankey/split/alpha/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# suihankey_alpha
-
-![suihankey_alpha](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
-
-Compact with only 36 keys is a concept keyboard.
-Supports OLED and RGBLED (optional)
-
-
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: suihankey_alphaboard_alpha, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make suihankey/alpha:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/split/readme.md b/keyboards/suihankey/split/readme.md
deleted file mode 100644
index 34d30580d1..0000000000
--- a/keyboards/suihankey/split/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# suihankey split
-
-![suihankey](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
-
-Compact with only 36 keys is a concept keyboard.
-Supports OLED and RGBLED (optional)
-
-
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: suihankeyboard_alpha, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make suihankey/split:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/split/rev1/readme.md b/keyboards/suihankey/split/rev1/readme.md
deleted file mode 100644
index f7c4bce166..0000000000
--- a/keyboards/suihankey/split/rev1/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# suihankey_rev1
-
-![suihankey_rev1](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
-
-Compact with only 36 keys is a concept keyboard.
-Supports OLED and RGBLED (optional)
-
-
-
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: suihankey_rev1board_rev1, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make suihankey/rev1:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/split/rules.mk b/keyboards/suihankey/split/rules.mk
deleted file mode 100644
index f0bdf744ee..0000000000
--- a/keyboards/suihankey/split/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-OLED_ENABLE = no
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = suihankey/split/rev1
diff --git a/keyboards/switchplate/southpaw_65/matrix.c b/keyboards/switchplate/southpaw_65/matrix.c
index e701d274f0..5895750f89 100644
--- a/keyboards/switchplate/southpaw_65/matrix.c
+++ b/keyboards/switchplate/southpaw_65/matrix.c
@@ -51,11 +51,14 @@ static void select_row(uint8_t row) {
static uint32_t read_cols(void) {
//Read column inputs. Pins 13-31 are used. Split across both ICs but they are sequential
- uint32_t state_1 = pca9555_readPins(IC1, PCA9555_PORT1);
- uint32_t state_2 = pca9555_readPins(IC2, PCA9555_PORT0);
- uint32_t state_3 = pca9555_readPins(IC2, PCA9555_PORT1);
-
- uint32_t state = (((state_3 & 0b01111111) << 12) | (state_2 << 4) | ((state_1 & 0b11110000) >> 4));
+ uint8_t state_1 = 0;
+ uint8_t state_2 = 0;
+ uint8_t state_3 = 0;
+ pca9555_readPins(IC2, PCA9555_PORT0, &state_1);
+ pca9555_readPins(IC2, PCA9555_PORT1, &state_2);
+ pca9555_readPins(IC1, PCA9555_PORT1, &state_3);
+
+ uint32_t state = ((((uint32_t)state_3 & 0b01111111) << 12) | ((uint32_t)state_2 << 4) | (((uint32_t)state_1 & 0b11110000) >> 4));
return ~state;
}
diff --git a/keyboards/sx60/matrix.c b/keyboards/sx60/matrix.c
index b7dc25425d..231e1c8836 100644
--- a/keyboards/sx60/matrix.c
+++ b/keyboards/sx60/matrix.c
@@ -172,14 +172,6 @@ uint8_t matrix_scan(void)
return 1;
}
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCE > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/hecomi/alpha/config.h b/keyboards/takashiski/hecomi/alpha/config.h
index 55c5ac50eb..55c5ac50eb 100644
--- a/keyboards/hecomi/alpha/config.h
+++ b/keyboards/takashiski/hecomi/alpha/config.h
diff --git a/keyboards/hecomi/alpha/info.json b/keyboards/takashiski/hecomi/alpha/info.json
index a7493203f0..a7493203f0 100644
--- a/keyboards/hecomi/alpha/info.json
+++ b/keyboards/takashiski/hecomi/alpha/info.json
diff --git a/keyboards/hecomi/alpha/readme.md b/keyboards/takashiski/hecomi/alpha/readme.md
index 5b316245c3..5b316245c3 100644
--- a/keyboards/hecomi/alpha/readme.md
+++ b/keyboards/takashiski/hecomi/alpha/readme.md
diff --git a/keyboards/hecomi/alpha/rules.mk b/keyboards/takashiski/hecomi/alpha/rules.mk
index 343dd7d5a1..343dd7d5a1 100644
--- a/keyboards/hecomi/alpha/rules.mk
+++ b/keyboards/takashiski/hecomi/alpha/rules.mk
diff --git a/keyboards/hecomi/hecomi.c b/keyboards/takashiski/hecomi/hecomi.c
index d527547119..d527547119 100644
--- a/keyboards/hecomi/hecomi.c
+++ b/keyboards/takashiski/hecomi/hecomi.c
diff --git a/keyboards/hecomi/hecomi.h b/keyboards/takashiski/hecomi/hecomi.h
index 9586e83947..9586e83947 100644
--- a/keyboards/hecomi/hecomi.h
+++ b/keyboards/takashiski/hecomi/hecomi.h
diff --git a/keyboards/hecomi/keymaps/default/keymap.c b/keyboards/takashiski/hecomi/keymaps/default/keymap.c
index 4ed135c25e..4ed135c25e 100644
--- a/keyboards/hecomi/keymaps/default/keymap.c
+++ b/keyboards/takashiski/hecomi/keymaps/default/keymap.c
diff --git a/keyboards/hecomi/keymaps/default/readme.md b/keyboards/takashiski/hecomi/keymaps/default/readme.md
index e44f3d6f61..e44f3d6f61 100644
--- a/keyboards/hecomi/keymaps/default/readme.md
+++ b/keyboards/takashiski/hecomi/keymaps/default/readme.md
diff --git a/keyboards/hecomi/keymaps/kakunpc/config.h b/keyboards/takashiski/hecomi/keymaps/kakunpc/config.h
index faf175a8f3..faf175a8f3 100644
--- a/keyboards/hecomi/keymaps/kakunpc/config.h
+++ b/keyboards/takashiski/hecomi/keymaps/kakunpc/config.h
diff --git a/keyboards/hecomi/keymaps/kakunpc/keymap.c b/keyboards/takashiski/hecomi/keymaps/kakunpc/keymap.c
index 614035de23..614035de23 100644
--- a/keyboards/hecomi/keymaps/kakunpc/keymap.c
+++ b/keyboards/takashiski/hecomi/keymaps/kakunpc/keymap.c
diff --git a/keyboards/hecomi/keymaps/kakunpc/readme.md b/keyboards/takashiski/hecomi/keymaps/kakunpc/readme.md
index d5ccbbf824..d5ccbbf824 100644
--- a/keyboards/hecomi/keymaps/kakunpc/readme.md
+++ b/keyboards/takashiski/hecomi/keymaps/kakunpc/readme.md
diff --git a/keyboards/takashiski/hecomi/readme.md b/keyboards/takashiski/hecomi/readme.md
new file mode 100644
index 0000000000..3d061659d5
--- /dev/null
+++ b/keyboards/takashiski/hecomi/readme.md
@@ -0,0 +1,17 @@
+# hecomi
+
+![hecomi](https://imgur.com/a/5AwQw0r)
+
+This keyboard based on HHKB pro 2 and physical layout designed by @hecomi and @takashiski.
+
+This keyboard use 2 pro micro's, but you can use USB type-c. There are hand wiring .
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+Hardware Supported: hecomi_alpha, promicro
+Hardware Availability: booth(@skyhigh_works)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashiski/hecomi/alpha:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/takashiski/hecomi/rules.mk b/keyboards/takashiski/hecomi/rules.mk
new file mode 100644
index 0000000000..c46100f19e
--- /dev/null
+++ b/keyboards/takashiski/hecomi/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = takashiski/hecomi/alpha
diff --git a/keyboards/treadstone32/rev1/.noci b/keyboards/takashiski/namecard2x4/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/treadstone32/rev1/.noci
+++ b/keyboards/takashiski/namecard2x4/.noci
diff --git a/keyboards/namecard2x4/info.json b/keyboards/takashiski/namecard2x4/info.json
index 04a431f9f3..04a431f9f3 100644
--- a/keyboards/namecard2x4/info.json
+++ b/keyboards/takashiski/namecard2x4/info.json
diff --git a/keyboards/namecard2x4/keymaps/brainfuck/config.h b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h
index dbacdcce58..dbacdcce58 100644
--- a/keyboards/namecard2x4/keymaps/brainfuck/config.h
+++ b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/config.h
diff --git a/keyboards/namecard2x4/keymaps/brainfuck/keymap.c b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/keymap.c
index 28640db0fd..28640db0fd 100644
--- a/keyboards/namecard2x4/keymaps/brainfuck/keymap.c
+++ b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/keymap.c
diff --git a/keyboards/namecard2x4/keymaps/brainfuck/readme.md b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/readme.md
index 7fee17acd9..7fee17acd9 100644
--- a/keyboards/namecard2x4/keymaps/brainfuck/readme.md
+++ b/keyboards/takashiski/namecard2x4/keymaps/brainfuck/readme.md
diff --git a/keyboards/namecard2x4/keymaps/default/keymap.c b/keyboards/takashiski/namecard2x4/keymaps/default/keymap.c
index 5858be6d68..5858be6d68 100644
--- a/keyboards/namecard2x4/keymaps/default/keymap.c
+++ b/keyboards/takashiski/namecard2x4/keymaps/default/keymap.c
diff --git a/keyboards/namecard2x4/keymaps/default/readme.md b/keyboards/takashiski/namecard2x4/keymaps/default/readme.md
index 83601c9cf5..83601c9cf5 100644
--- a/keyboards/namecard2x4/keymaps/default/readme.md
+++ b/keyboards/takashiski/namecard2x4/keymaps/default/readme.md
diff --git a/keyboards/namecard2x4/namecard2x4.c b/keyboards/takashiski/namecard2x4/namecard2x4.c
index 091b55c10d..091b55c10d 100644
--- a/keyboards/namecard2x4/namecard2x4.c
+++ b/keyboards/takashiski/namecard2x4/namecard2x4.c
diff --git a/keyboards/namecard2x4/namecard2x4.h b/keyboards/takashiski/namecard2x4/namecard2x4.h
index f3f6992703..f3f6992703 100644
--- a/keyboards/namecard2x4/namecard2x4.h
+++ b/keyboards/takashiski/namecard2x4/namecard2x4.h
diff --git a/keyboards/takashiski/namecard2x4/readme.md b/keyboards/takashiski/namecard2x4/readme.md
new file mode 100644
index 0000000000..165940bceb
--- /dev/null
+++ b/keyboards/takashiski/namecard2x4/readme.md
@@ -0,0 +1,24 @@
+# namecard2x4
+
+日本式名刺サイズのキーボードです(55x91mm)。
+Kailh PCB SocketとWS2812/SK6812に対応しています。
+
+This keyboard is Japanese namecard size(55x91mm) keyboard.
+
+namecard2x4 has 8 switch and kailh PCB socket.
+
+![namecard2x4](https://i.imgur.com/Bi9SV9A.jpg)
+
+![namecard2x4 with case](https://i.imgur.com/yTv1vSz.jpg)
+
+
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashiski/namecard2x4:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
diff --git a/keyboards/treadstone48/.noci b/keyboards/takashiski/namecard2x4/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/treadstone48/.noci
+++ b/keyboards/takashiski/namecard2x4/rev1/.noci
diff --git a/keyboards/namecard2x4/rev1/config.h b/keyboards/takashiski/namecard2x4/rev1/config.h
index d743c0e339..d743c0e339 100644
--- a/keyboards/namecard2x4/rev1/config.h
+++ b/keyboards/takashiski/namecard2x4/rev1/config.h
diff --git a/keyboards/wings42/rev2/rules.mk b/keyboards/takashiski/namecard2x4/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/wings42/rev2/rules.mk
+++ b/keyboards/takashiski/namecard2x4/rev1/rules.mk
diff --git a/keyboards/namecard2x4/rev2/config.h b/keyboards/takashiski/namecard2x4/rev2/config.h
index 37434d41a0..37434d41a0 100644
--- a/keyboards/namecard2x4/rev2/config.h
+++ b/keyboards/takashiski/namecard2x4/rev2/config.h
diff --git a/keyboards/yd60mq/12led/rules.mk b/keyboards/takashiski/namecard2x4/rev2/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/yd60mq/12led/rules.mk
+++ b/keyboards/takashiski/namecard2x4/rev2/rules.mk
diff --git a/keyboards/takashiski/namecard2x4/rules.mk b/keyboards/takashiski/namecard2x4/rules.mk
new file mode 100644
index 0000000000..e0f4e62f04
--- /dev/null
+++ b/keyboards/takashiski/namecard2x4/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+
+#RGBLIGHT_ENABLE = yes # uncomment if you want addressable led strips
+
+DEFAULT_FOLDER = takashiski/namecard2x4/rev2
diff --git a/keyboards/treadstone48/rev1/.noci b/keyboards/takashiski/otaku_split/rev0/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/treadstone48/rev1/.noci
+++ b/keyboards/takashiski/otaku_split/rev0/.noci
diff --git a/keyboards/otaku_split/rev0/config.h b/keyboards/takashiski/otaku_split/rev0/config.h
index 454f4866e6..454f4866e6 100644
--- a/keyboards/otaku_split/rev0/config.h
+++ b/keyboards/takashiski/otaku_split/rev0/config.h
diff --git a/keyboards/otaku_split/rev0/info.json b/keyboards/takashiski/otaku_split/rev0/info.json
index c7dc09e523..c7dc09e523 100644
--- a/keyboards/otaku_split/rev0/info.json
+++ b/keyboards/takashiski/otaku_split/rev0/info.json
diff --git a/keyboards/otaku_split/rev0/keymaps/default/keymap.c b/keyboards/takashiski/otaku_split/rev0/keymaps/default/keymap.c
index 4c74afb363..4c74afb363 100644
--- a/keyboards/otaku_split/rev0/keymaps/default/keymap.c
+++ b/keyboards/takashiski/otaku_split/rev0/keymaps/default/keymap.c
diff --git a/keyboards/otaku_split/rev0/keymaps/default/readme.md b/keyboards/takashiski/otaku_split/rev0/keymaps/default/readme.md
index dbaaa2eb8e..dbaaa2eb8e 100644
--- a/keyboards/otaku_split/rev0/keymaps/default/readme.md
+++ b/keyboards/takashiski/otaku_split/rev0/keymaps/default/readme.md
diff --git a/keyboards/otaku_split/rev0/keymaps/sample/keymap.c b/keyboards/takashiski/otaku_split/rev0/keymaps/sample/keymap.c
index 6126d780fa..6126d780fa 100644
--- a/keyboards/otaku_split/rev0/keymaps/sample/keymap.c
+++ b/keyboards/takashiski/otaku_split/rev0/keymaps/sample/keymap.c
diff --git a/keyboards/otaku_split/rev0/keymaps/sample/readme.md b/keyboards/takashiski/otaku_split/rev0/keymaps/sample/readme.md
index dbaaa2eb8e..dbaaa2eb8e 100644
--- a/keyboards/otaku_split/rev0/keymaps/sample/readme.md
+++ b/keyboards/takashiski/otaku_split/rev0/keymaps/sample/readme.md
diff --git a/keyboards/takashiski/otaku_split/rev0/readme.md b/keyboards/takashiski/otaku_split/rev0/readme.md
new file mode 100644
index 0000000000..53efbd85f8
--- /dev/null
+++ b/keyboards/takashiski/otaku_split/rev0/readme.md
@@ -0,0 +1,16 @@
+# Otaku Split rev.0
+
+![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1365150/9953f612-d35f-4f31-873d-2323c7b2f622_base_resized.jpg)
+
+Otaku Split is Japanese layout based keyboard.
+rev.0 is prototype. it has MDF color plate Iron Black and Ayanami blue.
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+Hardware Supported: promicro(atmega32u4)
+Hardware Availability: https://skyhigh-works.booth.pm/items/1365150
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashiski/otaku_split/rev0:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/otaku_split/rev0/rev0.c b/keyboards/takashiski/otaku_split/rev0/rev0.c
index 6ec80aabb6..6ec80aabb6 100644
--- a/keyboards/otaku_split/rev0/rev0.c
+++ b/keyboards/takashiski/otaku_split/rev0/rev0.c
diff --git a/keyboards/otaku_split/rev0/rev0.h b/keyboards/takashiski/otaku_split/rev0/rev0.h
index c3040d2332..c3040d2332 100644
--- a/keyboards/otaku_split/rev0/rev0.h
+++ b/keyboards/takashiski/otaku_split/rev0/rev0.h
diff --git a/keyboards/otaku_split/rev0/rules.mk b/keyboards/takashiski/otaku_split/rev0/rules.mk
index 2406b0dadf..2406b0dadf 100644
--- a/keyboards/otaku_split/rev0/rules.mk
+++ b/keyboards/takashiski/otaku_split/rev0/rules.mk
diff --git a/keyboards/otaku_split/rev1/config.h b/keyboards/takashiski/otaku_split/rev1/config.h
index 7ae6155d8c..7ae6155d8c 100644
--- a/keyboards/otaku_split/rev1/config.h
+++ b/keyboards/takashiski/otaku_split/rev1/config.h
diff --git a/keyboards/otaku_split/rev1/info.json b/keyboards/takashiski/otaku_split/rev1/info.json
index 9c2121e0e1..9c2121e0e1 100644
--- a/keyboards/otaku_split/rev1/info.json
+++ b/keyboards/takashiski/otaku_split/rev1/info.json
diff --git a/keyboards/otaku_split/rev1/keymaps/default/keymap.c b/keyboards/takashiski/otaku_split/rev1/keymaps/default/keymap.c
index a7f88b2a87..a7f88b2a87 100644
--- a/keyboards/otaku_split/rev1/keymaps/default/keymap.c
+++ b/keyboards/takashiski/otaku_split/rev1/keymaps/default/keymap.c
diff --git a/keyboards/otaku_split/rev1/keymaps/default/readme.md b/keyboards/takashiski/otaku_split/rev1/keymaps/default/readme.md
index dbaaa2eb8e..dbaaa2eb8e 100644
--- a/keyboards/otaku_split/rev1/keymaps/default/readme.md
+++ b/keyboards/takashiski/otaku_split/rev1/keymaps/default/readme.md
diff --git a/keyboards/otaku_split/rev1/keymaps/sample/keymap.c b/keyboards/takashiski/otaku_split/rev1/keymaps/sample/keymap.c
index 148c80f274..148c80f274 100644
--- a/keyboards/otaku_split/rev1/keymaps/sample/keymap.c
+++ b/keyboards/takashiski/otaku_split/rev1/keymaps/sample/keymap.c
diff --git a/keyboards/otaku_split/rev1/keymaps/sample/readme.md b/keyboards/takashiski/otaku_split/rev1/keymaps/sample/readme.md
index dbaaa2eb8e..dbaaa2eb8e 100644
--- a/keyboards/otaku_split/rev1/keymaps/sample/readme.md
+++ b/keyboards/takashiski/otaku_split/rev1/keymaps/sample/readme.md
diff --git a/keyboards/takashiski/otaku_split/rev1/readme.md b/keyboards/takashiski/otaku_split/rev1/readme.md
new file mode 100644
index 0000000000..1c1ff5656a
--- /dev/null
+++ b/keyboards/takashiski/otaku_split/rev1/readme.md
@@ -0,0 +1,19 @@
+# otaku_split
+
+![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/511647ef-43e4-4f50-b56d-a0166c090fae_base_resized.jpg)
+![otaku_split_bottom](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/cc9eb113-46a9-42fa-aaed-c4007efbe45e_base_resized.jpg)
+
+
+This is JP layout based split keyboards.
+
+
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+Hardware Supported: promicro(atmega32u4) on Otaku Split rev.1 PCB
+Hardware Availability: https://skyhigh-works.booth.pm/items/1398595
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashiski/otaku_split/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/otaku_split/rev1/rev1.c b/keyboards/takashiski/otaku_split/rev1/rev1.c
index b63bb047aa..b63bb047aa 100644
--- a/keyboards/otaku_split/rev1/rev1.c
+++ b/keyboards/takashiski/otaku_split/rev1/rev1.c
diff --git a/keyboards/otaku_split/rev1/rev1.h b/keyboards/takashiski/otaku_split/rev1/rev1.h
index a1f71f0338..a1f71f0338 100644
--- a/keyboards/otaku_split/rev1/rev1.h
+++ b/keyboards/takashiski/otaku_split/rev1/rev1.h
diff --git a/keyboards/otaku_split/rev1/rules.mk b/keyboards/takashiski/otaku_split/rev1/rules.mk
index 2406b0dadf..2406b0dadf 100644
--- a/keyboards/otaku_split/rev1/rules.mk
+++ b/keyboards/takashiski/otaku_split/rev1/rules.mk
diff --git a/keyboards/telophase/config.h b/keyboards/telophase/config.h
index 51718da9d4..837bb8ab9b 100644
--- a/keyboards/telophase/config.h
+++ b/keyboards/telophase/config.h
@@ -72,12 +72,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-
-// UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT_CUSTOM \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
diff --git a/keyboards/telophase/matrix.c b/keyboards/telophase/matrix.c
index a153dd4bf1..44b7e4c9e9 100644
--- a/keyboards/telophase/matrix.c
+++ b/keyboards/telophase/matrix.c
@@ -18,10 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
#include "matrix.h"
-#include "protocol/serial.h"
+#include "uart.h"
void matrix_init_custom(void) {
- serial_init();
+ uart_init(1000000);
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
@@ -29,7 +29,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool changed = false;
//the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
+ uart_write('s');
//trust the external keystates entirely, erase the last data
uint8_t uart_data[13] = {0};
@@ -39,13 +39,13 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
//wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no
//harm to leave it in here
- while (!SERIAL_UART_RXD_PRESENT) {
+ while (!uart_available()) {
timeout++;
if (timeout > 10000) {
break;
}
}
- uart_data[i] = SERIAL_UART_DATA;
+ uart_data[i] = uart_read();
}
//check for the end packet, the key state bytes use the LSBs, so 0xE0
diff --git a/keyboards/telophase/rules.mk b/keyboards/telophase/rules.mk
index c3a8aaf79f..41a6ee25f5 100644
--- a/keyboards/telophase/rules.mk
+++ b/keyboards/telophase/rules.mk
@@ -19,7 +19,8 @@ AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
# project specific files
-SRC += matrix.c serial_uart.c
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
# Disable unsupported hardware
RGBLIGHT_SUPPORTED = no
diff --git a/keyboards/tempo_turtle/bradpad/info.json b/keyboards/tempo_turtle/bradpad/info.json
index d32cc2c665..e1caeeeb88 100644
--- a/keyboards/tempo_turtle/bradpad/info.json
+++ b/keyboards/tempo_turtle/bradpad/info.json
@@ -10,7 +10,7 @@
"usb":{
"vid":"0x7474",
"pid":"0x6270",
- "device_ver":"0x0001"
+ "device_version":"0.0.1"
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/tgr/jane/v2ce/rules.mk b/keyboards/tgr/jane/v2ce/rules.mk
index 0a865321a6..8fcc8d911f 100644
--- a/keyboards/tgr/jane/v2ce/rules.mk
+++ b/keyboards/tgr/jane/v2ce/rules.mk
@@ -2,7 +2,7 @@
MCU = atmega32a
# Bootloader selection
-BOOTLOADER = bootloadHID
+BOOTLOADER = bootloadhid
# Build Options
# change yes to no to disable
diff --git a/keyboards/the_ruler/readme.md b/keyboards/the_ruler/readme.md
deleted file mode 100644
index 13ea61c9a7..0000000000
--- a/keyboards/the_ruler/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# The Ruler PCB
-
-A custom keyboard PCB ruler, that can also function as a macro pad.
-
-Keyboard Maintainer: Maple Computing
-Hardware Supported: PCB Ruler V1 by That-Canadian and Bishop Keyboards
-Hardware Availability: [Bishop Keyboards](https://bishopkeyboards.com/product/pcb-ruler-gloss-black-silver/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make the_ruler:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/thedogkeyboard/matrix.c b/keyboards/thedogkeyboard/matrix.c
deleted file mode 100644
index 474fbec030..0000000000
--- a/keyboards/thedogkeyboard/matrix.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
-Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "debounce.h"
-#include "quantum.h"
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-#ifdef MATRIX_MASKED
- extern const matrix_row_t matrix_mask[];
-#endif
-
-static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
-static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
- // switch blocker installed and the switch is always pressed.
-#ifdef MATRIX_MASKED
- return matrix[row] & matrix_mask[row];
-#else
- return matrix[row];
-#endif
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- print_hex8(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
-
-static void select_row(uint8_t row)
-{
- setPinOutput(row_pins[row]);
- writePinLow(row_pins[row]);
-}
-
-static void unselect_row(uint8_t row)
-{
- setPinInputHigh(row_pins[row]);
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static void select_col(uint8_t col)
-{
- setPinOutput(col_pins[col]);
- writePinLow(col_pins[col]);
-}
-
-static void unselect_col(uint8_t col)
-{
- setPinInputHigh(col_pins[col]);
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
-}
-
-static void init_pins(void) {
- unselect_rows();
- unselect_cols();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin_state = readPin(col_pins[col_index]);
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
- {
- uint8_t tmp = row_index + MATRIX_ROWS/2;
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[tmp];
-
- // Check row pin state
- if (readPin(row_pins[row_index]) == 0)
- {
- // Pin LO, set col bit
- current_matrix[tmp] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-void matrix_init(void) {
-
- // initialize key pins
- init_pins();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- bool changed = false;
-
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
- changed |= read_cols_on_row(raw_matrix, current_row);
- }
- //else
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- changed |= read_rows_on_col(raw_matrix, current_col);
- }
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return (uint8_t)changed;
-}
diff --git a/keyboards/thedogkeyboard/readme.md b/keyboards/thedogkeyboard/readme.md
deleted file mode 100644
index 789149ca82..0000000000
--- a/keyboards/thedogkeyboard/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# thedogkeyboard
-
-![thedogkeyboard](https://i.gyazo.com/70ac677c1e75c04b812e5dce311f7901.jpg)
-
-ProMicro 100% Keyboard.
-
-* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-* Hardware Supported: thedogkeyboard_rev1, promicro
-* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
-
-Make example for this keyboard (after setting up your build environment):
-
- make thedogkeyboard:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tiger910/readme.md b/keyboards/tiger910/readme.md
deleted file mode 100644
index ed14a307d3..0000000000
--- a/keyboards/tiger910/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Tiger910
-
-![Tiger910](https://www.hualigs.cn/image/60272570d2764.jpg)
-
-A 65% keyboard
-
-* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
-* Hardware Supported: Tiger910
-* Hardware Availability: Not yet
-
-Make example for this keyboard (after setting up your build environment):
-
- make tiger910:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tokyokeyboard/alix40/rules.mk b/keyboards/tokyokeyboard/alix40/rules.mk
index f9e5e2485a..358de97c5a 100644
--- a/keyboards/tokyokeyboard/alix40/rules.mk
+++ b/keyboards/tokyokeyboard/alix40/rules.mk
@@ -20,4 +20,4 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = AdafruitBLE
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/adalyn/adalyn.c b/keyboards/tominabox1/adalyn/adalyn.c
index 837cb9c98a..837cb9c98a 100644
--- a/keyboards/adalyn/adalyn.c
+++ b/keyboards/tominabox1/adalyn/adalyn.c
diff --git a/keyboards/adalyn/adalyn.h b/keyboards/tominabox1/adalyn/adalyn.h
index d9c1c68504..d9c1c68504 100644
--- a/keyboards/adalyn/adalyn.h
+++ b/keyboards/tominabox1/adalyn/adalyn.h
diff --git a/keyboards/adalyn/config.h b/keyboards/tominabox1/adalyn/config.h
index c34337f245..c34337f245 100644
--- a/keyboards/adalyn/config.h
+++ b/keyboards/tominabox1/adalyn/config.h
diff --git a/keyboards/adalyn/info.json b/keyboards/tominabox1/adalyn/info.json
index b8cc6640af..b8cc6640af 100644
--- a/keyboards/adalyn/info.json
+++ b/keyboards/tominabox1/adalyn/info.json
diff --git a/keyboards/adalyn/keymaps/default/config.h b/keyboards/tominabox1/adalyn/keymaps/default/config.h
index d8b87f9478..d8b87f9478 100644
--- a/keyboards/adalyn/keymaps/default/config.h
+++ b/keyboards/tominabox1/adalyn/keymaps/default/config.h
diff --git a/keyboards/adalyn/keymaps/default/keymap.c b/keyboards/tominabox1/adalyn/keymaps/default/keymap.c
index 21cc74fa9f..21cc74fa9f 100644
--- a/keyboards/adalyn/keymaps/default/keymap.c
+++ b/keyboards/tominabox1/adalyn/keymaps/default/keymap.c
diff --git a/keyboards/adalyn/keymaps/default/readme.md b/keyboards/tominabox1/adalyn/keymaps/default/readme.md
index fb85d36e28..fb85d36e28 100644
--- a/keyboards/adalyn/keymaps/default/readme.md
+++ b/keyboards/tominabox1/adalyn/keymaps/default/readme.md
diff --git a/keyboards/squiggle/keymaps/rick/rules.mk b/keyboards/tominabox1/adalyn/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/squiggle/keymaps/rick/rules.mk
+++ b/keyboards/tominabox1/adalyn/keymaps/default/rules.mk
diff --git a/keyboards/tominabox1/adalyn/readme.md b/keyboards/tominabox1/adalyn/readme.md
new file mode 100644
index 0000000000..d6292b5cad
--- /dev/null
+++ b/keyboards/tominabox1/adalyn/readme.md
@@ -0,0 +1,19 @@
+# Adalyn
+
+![Adalyn](https://i.imgur.com/3mGQlh2.jpg)
+
+*A cool QAZ-Alice hybrid designed by [Marv](https://github.com/MarvFPV/Adalyn) with a PCB by [tominabox1](https://github.com/tominabox1)*
+* Keyboard Maintainer: [tominabox1](https://github.com/tominabox1)
+* Hardware Supported: Adalyn PCB, atmega32u4
+* Hardware Availability: Open source on @tominabox1 GitHub
+
+Make example for this keyboard (after setting up your build environment):
+ make tominabox1/adalyn:default
+Flashing example for this keyboard:
+ make tominabox1/adalyn: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 (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/tominabox1/adalyn/rules.mk b/keyboards/tominabox1/adalyn/rules.mk
new file mode 100644
index 0000000000..4574cfd83a
--- /dev/null
+++ b/keyboards/tominabox1/adalyn/rules.mk
@@ -0,0 +1,19 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# 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
+COMBO_ENABLE = no
diff --git a/keyboards/le_chiffre/config.h b/keyboards/tominabox1/le_chiffre/config.h
index b2e4c673a4..b2e4c673a4 100644
--- a/keyboards/le_chiffre/config.h
+++ b/keyboards/tominabox1/le_chiffre/config.h
diff --git a/keyboards/le_chiffre/info.json b/keyboards/tominabox1/le_chiffre/info.json
index afcbc752a5..afcbc752a5 100644
--- a/keyboards/le_chiffre/info.json
+++ b/keyboards/tominabox1/le_chiffre/info.json
diff --git a/keyboards/le_chiffre/keymaps/default/config.h b/keyboards/tominabox1/le_chiffre/keymaps/default/config.h
index ce604301a3..ce604301a3 100644
--- a/keyboards/le_chiffre/keymaps/default/config.h
+++ b/keyboards/tominabox1/le_chiffre/keymaps/default/config.h
diff --git a/keyboards/le_chiffre/keymaps/default/keymap.c b/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c
index 45fee56a95..45fee56a95 100644
--- a/keyboards/le_chiffre/keymaps/default/keymap.c
+++ b/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c
diff --git a/keyboards/le_chiffre/keymaps/default/readme.md b/keyboards/tominabox1/le_chiffre/keymaps/default/readme.md
index 29f2d31f6f..29f2d31f6f 100644
--- a/keyboards/le_chiffre/keymaps/default/readme.md
+++ b/keyboards/tominabox1/le_chiffre/keymaps/default/readme.md
diff --git a/keyboards/underscore33/rev1/keymaps/default/rules.mk b/keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/underscore33/rev1/keymaps/default/rules.mk
+++ b/keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk
diff --git a/keyboards/le_chiffre/keymaps/via/keymap.c b/keyboards/tominabox1/le_chiffre/keymaps/via/keymap.c
index 10a2fb0d4a..10a2fb0d4a 100644
--- a/keyboards/le_chiffre/keymaps/via/keymap.c
+++ b/keyboards/tominabox1/le_chiffre/keymaps/via/keymap.c
diff --git a/keyboards/pursuit40/keymaps/via/rules.mk b/keyboards/tominabox1/le_chiffre/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/pursuit40/keymaps/via/rules.mk
+++ b/keyboards/tominabox1/le_chiffre/keymaps/via/rules.mk
diff --git a/keyboards/le_chiffre/le_chiffre.c b/keyboards/tominabox1/le_chiffre/le_chiffre.c
index 8eca292cce..8eca292cce 100644
--- a/keyboards/le_chiffre/le_chiffre.c
+++ b/keyboards/tominabox1/le_chiffre/le_chiffre.c
diff --git a/keyboards/le_chiffre/le_chiffre.h b/keyboards/tominabox1/le_chiffre/le_chiffre.h
index 0277e1b42d..0277e1b42d 100644
--- a/keyboards/le_chiffre/le_chiffre.h
+++ b/keyboards/tominabox1/le_chiffre/le_chiffre.h
diff --git a/keyboards/tominabox1/le_chiffre/readme.md b/keyboards/tominabox1/le_chiffre/readme.md
new file mode 100644
index 0000000000..ea18546c61
--- /dev/null
+++ b/keyboards/tominabox1/le_chiffre/readme.md
@@ -0,0 +1,15 @@
+# Le Chiffre
+
+![Le Chiffre](https://i.imgur.com/X1WsUmdl.png)
+
+Le Chiffre (ironically, "the number" in French is a 30% keyboard designed by tominabox1. The purpose of the board is to provide a platform for MX and Choc ergo in one package for when ones wrists need a break. The board supports an RGB LED strip with DI on port F0. The board is also fitted with support for run-of-the-mill .91" OLED and EC11 rotary encoder.
+
+* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
+* Hardware Supported: Le Chiffre (source not available at this time)
+* Hardware Availability: Bring your own case.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tominabox1/le_chiffre:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/le_chiffre/rules.mk b/keyboards/tominabox1/le_chiffre/rules.mk
index bc5775a151..bc5775a151 100644
--- a/keyboards/le_chiffre/rules.mk
+++ b/keyboards/tominabox1/le_chiffre/rules.mk
diff --git a/keyboards/qaz/config.h b/keyboards/tominabox1/qaz/config.h
index 1dbaaa0fc4..1dbaaa0fc4 100644
--- a/keyboards/qaz/config.h
+++ b/keyboards/tominabox1/qaz/config.h
diff --git a/keyboards/qaz/info.json b/keyboards/tominabox1/qaz/info.json
index bae0c72bf1..bae0c72bf1 100644
--- a/keyboards/qaz/info.json
+++ b/keyboards/tominabox1/qaz/info.json
diff --git a/keyboards/qaz/keymaps/default/config.h b/keyboards/tominabox1/qaz/keymaps/default/config.h
index 12482ff6fe..12482ff6fe 100644
--- a/keyboards/qaz/keymaps/default/config.h
+++ b/keyboards/tominabox1/qaz/keymaps/default/config.h
diff --git a/keyboards/qaz/keymaps/default/keymap.c b/keyboards/tominabox1/qaz/keymaps/default/keymap.c
index cf721292a6..cf721292a6 100644
--- a/keyboards/qaz/keymaps/default/keymap.c
+++ b/keyboards/tominabox1/qaz/keymaps/default/keymap.c
diff --git a/keyboards/qaz/keymaps/default/readme.md b/keyboards/tominabox1/qaz/keymaps/default/readme.md
index fb85d36e28..fb85d36e28 100644
--- a/keyboards/qaz/keymaps/default/readme.md
+++ b/keyboards/tominabox1/qaz/keymaps/default/readme.md
diff --git a/keyboards/underscore33/rev1/keymaps/default_big_space/rules.mk b/keyboards/tominabox1/qaz/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/underscore33/rev1/keymaps/default_big_space/rules.mk
+++ b/keyboards/tominabox1/qaz/keymaps/default/rules.mk
diff --git a/keyboards/qaz/keymaps/default_big_space/config.h b/keyboards/tominabox1/qaz/keymaps/default_big_space/config.h
index 12482ff6fe..12482ff6fe 100644
--- a/keyboards/qaz/keymaps/default_big_space/config.h
+++ b/keyboards/tominabox1/qaz/keymaps/default_big_space/config.h
diff --git a/keyboards/qaz/keymaps/default_big_space/keymap.c b/keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c
index 13f105add0..13f105add0 100644
--- a/keyboards/qaz/keymaps/default_big_space/keymap.c
+++ b/keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c
diff --git a/keyboards/qaz/keymaps/default_big_space/readme.md b/keyboards/tominabox1/qaz/keymaps/default_big_space/readme.md
index f1fc30c211..f1fc30c211 100644
--- a/keyboards/qaz/keymaps/default_big_space/readme.md
+++ b/keyboards/tominabox1/qaz/keymaps/default_big_space/readme.md
diff --git a/keyboards/underscore33/rev2/keymaps/default/rules.mk b/keyboards/tominabox1/qaz/keymaps/default_big_space/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/underscore33/rev2/keymaps/default/rules.mk
+++ b/keyboards/tominabox1/qaz/keymaps/default_big_space/rules.mk
diff --git a/keyboards/qaz/keymaps/via/keymap.c b/keyboards/tominabox1/qaz/keymaps/via/keymap.c
index 92556c330e..92556c330e 100644
--- a/keyboards/qaz/keymaps/via/keymap.c
+++ b/keyboards/tominabox1/qaz/keymaps/via/keymap.c
diff --git a/keyboards/qaz/keymaps/via/rules.mk b/keyboards/tominabox1/qaz/keymaps/via/rules.mk
index 74d66eb22c..74d66eb22c 100644
--- a/keyboards/qaz/keymaps/via/rules.mk
+++ b/keyboards/tominabox1/qaz/keymaps/via/rules.mk
diff --git a/keyboards/qaz/qaz.c b/keyboards/tominabox1/qaz/qaz.c
index a9e72fa610..a9e72fa610 100644
--- a/keyboards/qaz/qaz.c
+++ b/keyboards/tominabox1/qaz/qaz.c
diff --git a/keyboards/qaz/qaz.h b/keyboards/tominabox1/qaz/qaz.h
index aba68d3d27..aba68d3d27 100644
--- a/keyboards/qaz/qaz.h
+++ b/keyboards/tominabox1/qaz/qaz.h
diff --git a/keyboards/tominabox1/qaz/readme.md b/keyboards/tominabox1/qaz/readme.md
new file mode 100644
index 0000000000..13940e7c25
--- /dev/null
+++ b/keyboards/tominabox1/qaz/readme.md
@@ -0,0 +1,15 @@
+# QAZ
+
+![QAZ](https://i.imgur.com/kmxDneol.png)
+
+QAZ is a careful exercise in minimalism, leveraging advanced QMK magic like combos, tapdances and mod layers to unlock complete functionality while remaining oddly familiar.
+Throw it in your fanny pack and hop on your fixed gear and away you go. QAZ is cheap, hip, and effective with all the keyboardy features you expect, including the ability to type numbers- should you choose to add them to your layout.
+
+* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
+* Hardware Availability: 40s Discord Mini Group Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb tominabox1/qaz -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/qaz/rules.mk b/keyboards/tominabox1/qaz/rules.mk
index d946d8641a..d946d8641a 100644
--- a/keyboards/qaz/rules.mk
+++ b/keyboards/tominabox1/qaz/rules.mk
diff --git a/keyboards/underscore33/.noci b/keyboards/tominabox1/underscore33/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/underscore33/.noci
+++ b/keyboards/tominabox1/underscore33/.noci
diff --git a/keyboards/tominabox1/underscore33/readme.md b/keyboards/tominabox1/underscore33/readme.md
new file mode 100644
index 0000000000..273786dce0
--- /dev/null
+++ b/keyboards/tominabox1/underscore33/readme.md
@@ -0,0 +1,19 @@
+# underscore33 (stylized as "_33")
+
+![_33](https://i.imgur.com/0Wuf8aT.png)
+
+A little bitty 30% (10x4) ortholinear keyboard designed by tominabox1. The R1 version of the board supports an RGB LED strip with DI on port B6. There is an error on the initial 25 PCBs that incorrectly indicates PF0 for the RGB. The R2 version is correctly labeled for RGB on D6. The appropriate port is commented out in config.h for proper LED support.
+
+* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
+* Hardware Supported: [_33 r1 and r2 PCBs](https://github.com/tominabox1/_33-Keyboard)
+* Hardware Availability: [3D printed open sourced](https://github.com/tominabox1/_33-Keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tominabox1/underscore33/rev2:default
+
+Flashing example for this keyboard:
+
+ make tominabox1/underscore33/rev2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/underscore33/rev1/.noci b/keyboards/tominabox1/underscore33/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/underscore33/rev1/.noci
+++ b/keyboards/tominabox1/underscore33/rev1/.noci
diff --git a/keyboards/underscore33/rev1/config.h b/keyboards/tominabox1/underscore33/rev1/config.h
index 8bdb802bde..8bdb802bde 100644
--- a/keyboards/underscore33/rev1/config.h
+++ b/keyboards/tominabox1/underscore33/rev1/config.h
diff --git a/keyboards/underscore33/rev1/info.json b/keyboards/tominabox1/underscore33/rev1/info.json
index dff483d85f..dff483d85f 100644
--- a/keyboards/underscore33/rev1/info.json
+++ b/keyboards/tominabox1/underscore33/rev1/info.json
diff --git a/keyboards/underscore33/rev1/keymaps/default/config.h b/keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h
index 82cbcc42cb..82cbcc42cb 100644
--- a/keyboards/underscore33/rev1/keymaps/default/config.h
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h
diff --git a/keyboards/underscore33/rev1/keymaps/default/keymap.c b/keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c
index beaa8d92f2..beaa8d92f2 100644
--- a/keyboards/underscore33/rev1/keymaps/default/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c
diff --git a/keyboards/underscore33/rev1/keymaps/default/readme.md b/keyboards/tominabox1/underscore33/rev1/keymaps/default/readme.md
index 908b3e04ab..908b3e04ab 100644
--- a/keyboards/underscore33/rev1/keymaps/default/readme.md
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default/readme.md
diff --git a/keyboards/underscore33/rev2/keymaps/default_big_space/rules.mk b/keyboards/tominabox1/underscore33/rev1/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/underscore33/rev2/keymaps/default_big_space/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default/rules.mk
diff --git a/keyboards/underscore33/rev1/keymaps/default_big_space/config.h b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h
index 82cbcc42cb..82cbcc42cb 100644
--- a/keyboards/underscore33/rev1/keymaps/default_big_space/config.h
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h
diff --git a/keyboards/underscore33/rev1/keymaps/default_big_space/keymap.c b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c
index 09547fa06f..09547fa06f 100644
--- a/keyboards/underscore33/rev1/keymaps/default_big_space/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c
diff --git a/keyboards/underscore33/rev1/keymaps/default_big_space/readme.md b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/readme.md
index 3f22df7c22..3f22df7c22 100644
--- a/keyboards/underscore33/rev1/keymaps/default_big_space/readme.md
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/readme.md
diff --git a/keyboards/wanten/keymaps/2u_bars/rules.mk b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/wanten/keymaps/2u_bars/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/rules.mk
diff --git a/keyboards/underscore33/rev1/keymaps/via/keymap.c b/keyboards/tominabox1/underscore33/rev1/keymaps/via/keymap.c
index 03e209fd15..03e209fd15 100644
--- a/keyboards/underscore33/rev1/keymaps/via/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/via/keymap.c
diff --git a/keyboards/underscore33/rev1/keymaps/via/readme.md b/keyboards/tominabox1/underscore33/rev1/keymaps/via/readme.md
index a63a8342e8..a63a8342e8 100644
--- a/keyboards/underscore33/rev1/keymaps/via/readme.md
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/via/readme.md
diff --git a/keyboards/quark/keymaps/via/rules.mk b/keyboards/tominabox1/underscore33/rev1/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/quark/keymaps/via/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev1/keymaps/via/rules.mk
diff --git a/keyboards/underscore33/rev1/rev1.c b/keyboards/tominabox1/underscore33/rev1/rev1.c
index 4f763dbb49..4f763dbb49 100644
--- a/keyboards/underscore33/rev1/rev1.c
+++ b/keyboards/tominabox1/underscore33/rev1/rev1.c
diff --git a/keyboards/underscore33/rev1/rev1.h b/keyboards/tominabox1/underscore33/rev1/rev1.h
index 12cc7d9fd8..12cc7d9fd8 100644
--- a/keyboards/underscore33/rev1/rev1.h
+++ b/keyboards/tominabox1/underscore33/rev1/rev1.h
diff --git a/keyboards/underscore33/rev1/rules.mk b/keyboards/tominabox1/underscore33/rev1/rules.mk
index 476cf49f27..476cf49f27 100644
--- a/keyboards/underscore33/rev1/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev1/rules.mk
diff --git a/keyboards/underscore33/rev2/config.h b/keyboards/tominabox1/underscore33/rev2/config.h
index 0e965de231..0e965de231 100644
--- a/keyboards/underscore33/rev2/config.h
+++ b/keyboards/tominabox1/underscore33/rev2/config.h
diff --git a/keyboards/underscore33/rev2/info.json b/keyboards/tominabox1/underscore33/rev2/info.json
index b2c89ba344..b2c89ba344 100644
--- a/keyboards/underscore33/rev2/info.json
+++ b/keyboards/tominabox1/underscore33/rev2/info.json
diff --git a/keyboards/underscore33/rev2/keymaps/default/config.h b/keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h
index 82cbcc42cb..82cbcc42cb 100644
--- a/keyboards/underscore33/rev2/keymaps/default/config.h
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h
diff --git a/keyboards/underscore33/rev2/keymaps/default/keymap.c b/keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c
index ebacea4132..ebacea4132 100644
--- a/keyboards/underscore33/rev2/keymaps/default/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c
diff --git a/keyboards/underscore33/rev2/keymaps/default/readme.md b/keyboards/tominabox1/underscore33/rev2/keymaps/default/readme.md
index fb48598891..fb48598891 100644
--- a/keyboards/underscore33/rev2/keymaps/default/readme.md
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default/readme.md
diff --git a/keyboards/wanten/keymaps/625_bar/rules.mk b/keyboards/tominabox1/underscore33/rev2/keymaps/default/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/wanten/keymaps/625_bar/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default/rules.mk
diff --git a/keyboards/underscore33/rev2/keymaps/default_big_space/config.h b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h
index 82cbcc42cb..82cbcc42cb 100644
--- a/keyboards/underscore33/rev2/keymaps/default_big_space/config.h
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h
diff --git a/keyboards/underscore33/rev2/keymaps/default_big_space/keymap.c b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c
index 09547fa06f..09547fa06f 100644
--- a/keyboards/underscore33/rev2/keymaps/default_big_space/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c
diff --git a/keyboards/underscore33/rev2/keymaps/default_big_space/readme.md b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/readme.md
index f11d18ece9..f11d18ece9 100644
--- a/keyboards/underscore33/rev2/keymaps/default_big_space/readme.md
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/readme.md
diff --git a/keyboards/wanten/keymaps/default/rules.mk b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/rules.mk
index ab1e438182..ab1e438182 100644
--- a/keyboards/wanten/keymaps/default/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/rules.mk
diff --git a/keyboards/underscore33/rev2/keymaps/via/keymap.c b/keyboards/tominabox1/underscore33/rev2/keymaps/via/keymap.c
index 9464b0cdb8..9464b0cdb8 100644
--- a/keyboards/underscore33/rev2/keymaps/via/keymap.c
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/via/keymap.c
diff --git a/keyboards/underscore33/rev2/keymaps/via/readme.md b/keyboards/tominabox1/underscore33/rev2/keymaps/via/readme.md
index 7a6d4cf2f7..7a6d4cf2f7 100644
--- a/keyboards/underscore33/rev2/keymaps/via/readme.md
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/via/readme.md
diff --git a/keyboards/underscore33/rev2/keymaps/via/rules.mk b/keyboards/tominabox1/underscore33/rev2/keymaps/via/rules.mk
index 16d33cd89f..16d33cd89f 100644
--- a/keyboards/underscore33/rev2/keymaps/via/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev2/keymaps/via/rules.mk
diff --git a/keyboards/underscore33/rev2/rev2.c b/keyboards/tominabox1/underscore33/rev2/rev2.c
index e89b2938f9..e89b2938f9 100644
--- a/keyboards/underscore33/rev2/rev2.c
+++ b/keyboards/tominabox1/underscore33/rev2/rev2.c
diff --git a/keyboards/underscore33/rev2/rev2.h b/keyboards/tominabox1/underscore33/rev2/rev2.h
index 34e6e6b7a9..34e6e6b7a9 100644
--- a/keyboards/underscore33/rev2/rev2.h
+++ b/keyboards/tominabox1/underscore33/rev2/rev2.h
diff --git a/keyboards/underscore33/rev2/rules.mk b/keyboards/tominabox1/underscore33/rev2/rules.mk
index dd550e3ae5..dd550e3ae5 100644
--- a/keyboards/underscore33/rev2/rules.mk
+++ b/keyboards/tominabox1/underscore33/rev2/rules.mk
diff --git a/keyboards/tominabox1/underscore33/rules.mk b/keyboards/tominabox1/underscore33/rules.mk
new file mode 100644
index 0000000000..b5e13fd420
--- /dev/null
+++ b/keyboards/tominabox1/underscore33/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = tominabox1/underscore33/rev1
diff --git a/keyboards/treadstone32/readme.md b/keyboards/treadstone32/readme.md
deleted file mode 100644
index 99cbe4e014..0000000000
--- a/keyboards/treadstone32/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# treadstone32
-
-![treadstone32](https://github.com/marksard/Keyboards/raw/master/_image/20190421-P4210001.jpg)
-
-A 32-key Symmetric staggered keyboard.
-
-Keyboard Maintainer: [marksard](https://github.com/marksard)
-Hardware Supported: The PCBs, controllers supported
-Hardware Availability: links to where you can find this hardware
-
-Make example for this keyboard (after setting up your build environment):
-
- make treadstone32:default
- or
- make treadstone32/lite:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://github.com/marksard/Keyboards/blob/master/treadstone32/documents/treadstone32_buildguide.md)
-[Build guide (lite)](https://github.com/marksard/Keyboards/blob/master/treadstone32/documents/treadstone32lite_buildguide.md)
-[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/treadstone32)
diff --git a/keyboards/treadstone32/rules.mk b/keyboards/treadstone32/rules.mk
deleted file mode 100644
index 096c25856e..0000000000
--- a/keyboards/treadstone32/rules.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-LEADER_ENABLE = no
-
-DEFAULT_FOLDER = treadstone32/rev1
diff --git a/keyboards/treadstone48/keymaps/default/config.h b/keyboards/treadstone48/keymaps/default/config.h
deleted file mode 100644
index baa4ec8461..0000000000
--- a/keyboards/treadstone48/keymaps/default/config.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2020 marksard
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-// place overrides here
-
-#ifdef TAPPING_TERM
-#undef TAPPING_TERM
-#endif
-#define TAPPING_TERM 225
-
-#ifdef MOUSEKEY_ENABLE
- #undef MOUSEKEY_INTERVAL
- #define MOUSEKEY_INTERVAL 1
-
- #undef MOUSEKEY_TIME_TO_MAX
- #define MOUSEKEY_TIME_TO_MAX 150
-
- #undef MOUSEKEY_MAX_SPEED
- #define MOUSEKEY_MAX_SPEED 3
-
- #undef MOUSEKEY_MOVE_DELTA
- #define MOUSEKEY_MOVE_DELTA 4
-
- #undef MOUSEKEY_DELAY
- #define MOUSEKEY_DELAY 0
-#endif
-
-// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
-// #define ANGELINA_KEYMAP
-
-// If you plug in the USB on the right side, please enable MASTER_RIGHT
-// #define RHYMESTONE_RIGHTHAND
-
-#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/like_jis/config.h b/keyboards/treadstone48/keymaps/like_jis/config.h
deleted file mode 100644
index baa4ec8461..0000000000
--- a/keyboards/treadstone48/keymaps/like_jis/config.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2020 marksard
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-// place overrides here
-
-#ifdef TAPPING_TERM
-#undef TAPPING_TERM
-#endif
-#define TAPPING_TERM 225
-
-#ifdef MOUSEKEY_ENABLE
- #undef MOUSEKEY_INTERVAL
- #define MOUSEKEY_INTERVAL 1
-
- #undef MOUSEKEY_TIME_TO_MAX
- #define MOUSEKEY_TIME_TO_MAX 150
-
- #undef MOUSEKEY_MAX_SPEED
- #define MOUSEKEY_MAX_SPEED 3
-
- #undef MOUSEKEY_MOVE_DELTA
- #define MOUSEKEY_MOVE_DELTA 4
-
- #undef MOUSEKEY_DELAY
- #define MOUSEKEY_DELAY 0
-#endif
-
-// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
-// #define ANGELINA_KEYMAP
-
-// If you plug in the USB on the right side, please enable MASTER_RIGHT
-// #define RHYMESTONE_RIGHTHAND
-
-#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/readme.md b/keyboards/treadstone48/readme.md
deleted file mode 100644
index 432ef33fe9..0000000000
--- a/keyboards/treadstone48/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# treadstone48
-
-![treadstone48](https://github.com/marksard/Keyboards/raw/master/_image/20181219-PC190003.jpg)
-
-A 47 (or 48) keys Symmetric Staggered keyboard.
-
-Keyboard Maintainer: [marksard](https://github.com/marksard)
-Hardware Supported: The PCBs, controllers supported
-Hardware Availability: links to where you can find this hardware
-
-Make example for this keyboard (after setting up your build environment):
-
- make treadstone48:default
- or
- make treadstone48/rev2:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-[Build guide](https://github.com/marksard/Keyboards/blob/master/treadstone48/documents/treadstone48_buildguide.md)
-[Build guide (rev2)](https://github.com/marksard/Keyboards/blob/master/treadstone48/documents/treadstone48rev2_buildguide.md)
-[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/treadstone48)
diff --git a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/config.h b/keyboards/treadstone48/rev1/keymaps/like_jis_rs/config.h
deleted file mode 100644
index 95b58c23db..0000000000
--- a/keyboards/treadstone48/rev1/keymaps/like_jis_rs/config.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2020 marksard
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-// place overrides here
-
-#ifdef TAPPING_TERM
-#undef TAPPING_TERM
-#endif
-#define TAPPING_TERM 225
-#define PREVENT_STUCK_MODIFIERS
-#define IGNORE_MOD_TAP_INTERRUPT
-
-#ifdef MOUSEKEY_ENABLE
- #undef MOUSEKEY_INTERVAL
- #define MOUSEKEY_INTERVAL 1
-
- #undef MOUSEKEY_TIME_TO_MAX
- #define MOUSEKEY_TIME_TO_MAX 150
-
- #undef MOUSEKEY_MAX_SPEED
- #define MOUSEKEY_MAX_SPEED 3
-
- #undef MOUSEKEY_MOVE_DELTA
- #define MOUSEKEY_MOVE_DELTA 4
-
- #undef MOUSEKEY_DELAY
- #define MOUSEKEY_DELAY 0
-#endif
-
-// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
-// #define ANGELINA_KEYMAP
-
-// If you plug in the USB on the right side, please enable MASTER_RIGHT
-// #define RHYMESTONE_RIGHTHAND
-
-#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/rules.mk b/keyboards/treadstone48/rules.mk
deleted file mode 100644
index 3bf42c85c6..0000000000
--- a/keyboards/treadstone48/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-SPLIT_KEYBOARD = yes
-
-MOUSEKEY_ENABLE = yes # Mouse keys
-
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-OLED_ENABLE = yes
-OLED_DRIVER = SSD1306
-
-DEFAULT_FOLDER = treadstone48/rev1
diff --git a/keyboards/txuu/readme.md b/keyboards/txuu/readme.md
deleted file mode 100644
index 1800d8a8ca..0000000000
--- a/keyboards/txuu/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# txuu
-
-A 65% PCB
-
-- Keyboard Maintainer: matthewdias
-- Hardware Supported: txuu PCB, Unified Daughterboard
-
-To reset the keyboard into bootloader mode, press the reset switch on the underside.
-
-Make example for this keyboard (after setting up your build environment):
-
- make txuu:default
-
-Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
-
- make txuu:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ua62/readme.md b/keyboards/ua62/readme.md
deleted file mode 100644
index 62523e2146..0000000000
--- a/keyboards/ua62/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# UA62
-
-* A Universal pcb for the atreus62
-* atreus62 by profet23
-* Original atreus by Phil Hagelberg
-* Keyboard Maintainer: [NaCly](https://github.com/na-cly)
-* Hardware Supported: UA62 PCB
-* Hardware Availability: https://github.com/na-cly/UA62 (Order PCBS)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ua62:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/underscore33/readme.md b/keyboards/underscore33/readme.md
deleted file mode 100644
index 7cc2f9f411..0000000000
--- a/keyboards/underscore33/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# underscore33 (stylized as "_33")
-
-![_33](https://i.imgur.com/0Wuf8aT.png)
-
-A little bitty 30% (10x4) ortholinear keyboard designed by tominabox1. The R1 version of the board supports an RGB LED strip with DI on port B6. There is an error on the initial 25 PCBs that incorrectly indicates PF0 for the RGB. The R2 version is correctly labeled for RGB on D6. The appropriate port is commented out in config.h for proper LED support.
-
-* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
-* Hardware Supported: [_33 r1 and r2 PCBs](https://github.com/tominabox1/_33-Keyboard)
-* Hardware Availability: [3D printed open sourced](https://github.com/tominabox1/_33-Keyboard)
-
-Make example for this keyboard (after setting up your build environment):
-
- make underscore33/rev2:default
-
-Flashing example for this keyboard:
-
- make underscore33/rev2:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/underscore33/rules.mk b/keyboards/underscore33/rules.mk
deleted file mode 100644
index b86f18e114..0000000000
--- a/keyboards/underscore33/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = underscore33/rev1
diff --git a/keyboards/diverge3/config.h b/keyboards/unikeyboard/diverge3/config.h
index 45dedfe621..45dedfe621 100644
--- a/keyboards/diverge3/config.h
+++ b/keyboards/unikeyboard/diverge3/config.h
diff --git a/keyboards/diverge3/diverge3.c b/keyboards/unikeyboard/diverge3/diverge3.c
index 4143b14275..4143b14275 100644
--- a/keyboards/diverge3/diverge3.c
+++ b/keyboards/unikeyboard/diverge3/diverge3.c
diff --git a/keyboards/diverge3/diverge3.h b/keyboards/unikeyboard/diverge3/diverge3.h
index c668bb29ef..c668bb29ef 100644
--- a/keyboards/diverge3/diverge3.h
+++ b/keyboards/unikeyboard/diverge3/diverge3.h
diff --git a/keyboards/diverge3/info.json b/keyboards/unikeyboard/diverge3/info.json
index fc678b40bc..fc678b40bc 100644
--- a/keyboards/diverge3/info.json
+++ b/keyboards/unikeyboard/diverge3/info.json
diff --git a/keyboards/diverge3/keymaps/default/config.h b/keyboards/unikeyboard/diverge3/keymaps/default/config.h
index fc375f0812..fc375f0812 100644
--- a/keyboards/diverge3/keymaps/default/config.h
+++ b/keyboards/unikeyboard/diverge3/keymaps/default/config.h
diff --git a/keyboards/diverge3/keymaps/default/keymap.c b/keyboards/unikeyboard/diverge3/keymaps/default/keymap.c
index acf262696b..acf262696b 100644
--- a/keyboards/diverge3/keymaps/default/keymap.c
+++ b/keyboards/unikeyboard/diverge3/keymaps/default/keymap.c
diff --git a/keyboards/diverge3/keymaps/default/readme.md b/keyboards/unikeyboard/diverge3/keymaps/default/readme.md
index c2e698b3ce..c2e698b3ce 100644
--- a/keyboards/diverge3/keymaps/default/readme.md
+++ b/keyboards/unikeyboard/diverge3/keymaps/default/readme.md
diff --git a/keyboards/naked64/keymaps/salicylic/rules.mk b/keyboards/unikeyboard/diverge3/keymaps/default/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/naked64/keymaps/salicylic/rules.mk
+++ b/keyboards/unikeyboard/diverge3/keymaps/default/rules.mk
diff --git a/keyboards/diverge3/keymaps/iso_uk/config.h b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/config.h
index 83f65979c7..83f65979c7 100755
--- a/keyboards/diverge3/keymaps/iso_uk/config.h
+++ b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/config.h
diff --git a/keyboards/diverge3/keymaps/iso_uk/keymap.c b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/keymap.c
index 2564640293..2564640293 100644
--- a/keyboards/diverge3/keymaps/iso_uk/keymap.c
+++ b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/keymap.c
diff --git a/keyboards/diverge3/keymaps/iso_uk/readme.md b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/readme.md
index ff4971754a..ff4971754a 100755
--- a/keyboards/diverge3/keymaps/iso_uk/readme.md
+++ b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/readme.md
diff --git a/keyboards/diverge3/keymaps/iso_uk/rules.mk b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/rules.mk
index c9383ab8db..c9383ab8db 100755
--- a/keyboards/diverge3/keymaps/iso_uk/rules.mk
+++ b/keyboards/unikeyboard/diverge3/keymaps/iso_uk/rules.mk
diff --git a/keyboards/diverge3/keymaps/workman/config.h b/keyboards/unikeyboard/diverge3/keymaps/workman/config.h
index 9829a604f1..9829a604f1 100644
--- a/keyboards/diverge3/keymaps/workman/config.h
+++ b/keyboards/unikeyboard/diverge3/keymaps/workman/config.h
diff --git a/keyboards/diverge3/keymaps/workman/keymap.c b/keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c
index 415df2eead..415df2eead 100644
--- a/keyboards/diverge3/keymaps/workman/keymap.c
+++ b/keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c
diff --git a/keyboards/diverge3/keymaps/workman/readme.md b/keyboards/unikeyboard/diverge3/keymaps/workman/readme.md
index 48ba482fe6..48ba482fe6 100644
--- a/keyboards/diverge3/keymaps/workman/readme.md
+++ b/keyboards/unikeyboard/diverge3/keymaps/workman/readme.md
diff --git a/keyboards/nk65/v1_4/rules.mk b/keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk
index 8b13789179..8b13789179 100755..100644
--- a/keyboards/nk65/v1_4/rules.mk
+++ b/keyboards/unikeyboard/diverge3/keymaps/workman/rules.mk
diff --git a/keyboards/unikeyboard/diverge3/readme.md b/keyboards/unikeyboard/diverge3/readme.md
new file mode 100644
index 0000000000..6e4cf3d781
--- /dev/null
+++ b/keyboards/unikeyboard/diverge3/readme.md
@@ -0,0 +1,20 @@
+# diverge3
+
+A split 5x7 keyboard with 3 thumb keys. Made by [Unikeyboard](https://unikeyboard.io).
+
+Keyboard Maintainer: [IslandMan93](https://github.com/islandman93)
+Hardware Supported: Pro Micro
+Hardware Availability: [Diverge 3](https://unikeyboard.io/product/diverge/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make unikeyboard/diverge3:default
+
+Or for the [Workman](https://github.com/ojbucao/workman) layout:
+
+ make unikeyboard/diverge3:workman
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+# Reflashing Animus
+Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites.
diff --git a/keyboards/diverge3/rules.mk b/keyboards/unikeyboard/diverge3/rules.mk
index 7fc9fd2291..7fc9fd2291 100644
--- a/keyboards/diverge3/rules.mk
+++ b/keyboards/unikeyboard/diverge3/rules.mk
diff --git a/keyboards/divergetm2/config.h b/keyboards/unikeyboard/divergetm2/config.h
index ee8372aa7e..ee8372aa7e 100644
--- a/keyboards/divergetm2/config.h
+++ b/keyboards/unikeyboard/divergetm2/config.h
diff --git a/keyboards/divergetm2/divergetm2.c b/keyboards/unikeyboard/divergetm2/divergetm2.c
index 61ea45416c..61ea45416c 100644
--- a/keyboards/divergetm2/divergetm2.c
+++ b/keyboards/unikeyboard/divergetm2/divergetm2.c
diff --git a/keyboards/divergetm2/divergetm2.h b/keyboards/unikeyboard/divergetm2/divergetm2.h
index 6de48e41c7..6de48e41c7 100644
--- a/keyboards/divergetm2/divergetm2.h
+++ b/keyboards/unikeyboard/divergetm2/divergetm2.h
diff --git a/keyboards/divergetm2/info.json b/keyboards/unikeyboard/divergetm2/info.json
index fc64e57906..fc64e57906 100644
--- a/keyboards/divergetm2/info.json
+++ b/keyboards/unikeyboard/divergetm2/info.json
diff --git a/keyboards/divergetm2/keymaps/default/config.h b/keyboards/unikeyboard/divergetm2/keymaps/default/config.h
index ccd00621fd..ccd00621fd 100644
--- a/keyboards/divergetm2/keymaps/default/config.h
+++ b/keyboards/unikeyboard/divergetm2/keymaps/default/config.h
diff --git a/keyboards/divergetm2/keymaps/default/keymap.c b/keyboards/unikeyboard/divergetm2/keymaps/default/keymap.c
index fb5957ccae..fb5957ccae 100644
--- a/keyboards/divergetm2/keymaps/default/keymap.c
+++ b/keyboards/unikeyboard/divergetm2/keymaps/default/keymap.c
diff --git a/keyboards/divergetm2/keymaps/default/readme.md b/keyboards/unikeyboard/divergetm2/keymaps/default/readme.md
index dceb4f8a95..dceb4f8a95 100644
--- a/keyboards/divergetm2/keymaps/default/readme.md
+++ b/keyboards/unikeyboard/divergetm2/keymaps/default/readme.md
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/config.h b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/config.h
index 4ba4a57165..4ba4a57165 100644
--- a/keyboards/divergetm2/keymaps/xtonhasvim/config.h
+++ b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/config.h
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/keymap.c b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/keymap.c
index 5f478c1df1..5f478c1df1 100644
--- a/keyboards/divergetm2/keymaps/xtonhasvim/keymap.c
+++ b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/keymap.c
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/readme.md b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/readme.md
index 9ff4ce1f19..9ff4ce1f19 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/readme.md
+++ b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/readme.md
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/rules.mk b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/rules.mk
index ede4e02b64..ede4e02b64 100644
--- a/keyboards/divergetm2/keymaps/xtonhasvim/rules.mk
+++ b/keyboards/unikeyboard/divergetm2/keymaps/xtonhasvim/rules.mk
diff --git a/keyboards/unikeyboard/divergetm2/readme.md b/keyboards/unikeyboard/divergetm2/readme.md
new file mode 100644
index 0000000000..5bff74389f
--- /dev/null
+++ b/keyboards/unikeyboard/divergetm2/readme.md
@@ -0,0 +1,21 @@
+# diverge tm2
+
+A 4x6x2 split ortholinear keyboard with 2u spacebars like the Levinson (similar to Let's Split). Made by [Unikeyboard](https://unikeyboard.io).
+
+Keyboard Maintainer: [IslandMan93](https://github.com/islandman93) and [xton](https://github.com/xton)
+Hardware Supported: Pro Micro
+Hardware Availability: [Diverge TM2](https://unikeyboard.io/product/diverge-tm/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make unikeyboard/divergetm2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+# Flashing the first time
+
+Disassemble the case so you have access to each Pro Micro. Flash each half with QMK Toolbox by connecting the USB cable and shorting RST and GND. After that, just use the soft reset key on your respective layout to reflash both halves.
+
+# Reflashing Animus
+
+Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites.
diff --git a/keyboards/divergetm2/rules.mk b/keyboards/unikeyboard/divergetm2/rules.mk
index bd53948797..bd53948797 100644
--- a/keyboards/divergetm2/rules.mk
+++ b/keyboards/unikeyboard/divergetm2/rules.mk
diff --git a/keyboards/felix/config.h b/keyboards/unikeyboard/felix/config.h
index 73f9d1fa86..73f9d1fa86 100644
--- a/keyboards/felix/config.h
+++ b/keyboards/unikeyboard/felix/config.h
diff --git a/keyboards/felix/felix.c b/keyboards/unikeyboard/felix/felix.c
index 013360d043..013360d043 100644
--- a/keyboards/felix/felix.c
+++ b/keyboards/unikeyboard/felix/felix.c
diff --git a/keyboards/felix/felix.h b/keyboards/unikeyboard/felix/felix.h
index f43a586c8e..f43a586c8e 100644
--- a/keyboards/felix/felix.h
+++ b/keyboards/unikeyboard/felix/felix.h
diff --git a/keyboards/felix/info.json b/keyboards/unikeyboard/felix/info.json
index f81d56f340..f81d56f340 100644
--- a/keyboards/felix/info.json
+++ b/keyboards/unikeyboard/felix/info.json
diff --git a/keyboards/felix/keymaps/default/keymap.c b/keyboards/unikeyboard/felix/keymaps/default/keymap.c
index 630a46c086..630a46c086 100644
--- a/keyboards/felix/keymaps/default/keymap.c
+++ b/keyboards/unikeyboard/felix/keymaps/default/keymap.c
diff --git a/keyboards/unikeyboard/felix/readme.md b/keyboards/unikeyboard/felix/readme.md
new file mode 100644
index 0000000000..2ea41d382f
--- /dev/null
+++ b/keyboards/unikeyboard/felix/readme.md
@@ -0,0 +1,13 @@
+# Felix
+
+A customizable number/macropad made by Unikeyboard.
+
+Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+Hardware Supported: Felix PCB, Pro Micro
+Hardware Availability: [Unikeyboard](https://unikeyboard.io/product/felix/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make unikeyboard/felix:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/felix/rules.mk b/keyboards/unikeyboard/felix/rules.mk
index 9fbe5d4dad..9fbe5d4dad 100644
--- a/keyboards/felix/rules.mk
+++ b/keyboards/unikeyboard/felix/rules.mk
diff --git a/keyboards/viktus/smolka/rules.mk b/keyboards/viktus/smolka/rules.mk
index 04821bd6e7..5f58c5684b 100644
--- a/keyboards/viktus/smolka/rules.mk
+++ b/keyboards/viktus/smolka/rules.mk
@@ -12,8 +12,7 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
+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/viktus/sp111/mcp23018.c b/keyboards/viktus/sp111/mcp23018.c
deleted file mode 100644
index f1d8e568d2..0000000000
--- a/keyboards/viktus/sp111/mcp23018.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 2020 zvecr<git@zvecr.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include "mcp23018.h"
-#include "i2c_master.h"
-#include "wait.h"
-#include "debug.h"
-
-#define SLAVE_TO_ADDR(n) (n << 1)
-#define TIMEOUT 100
-
-enum {
- CMD_IODIRA = 0x00, // i/o direction register
- CMD_IODIRB = 0x01,
- CMD_GPPUA = 0x0C, // GPIO pull-up resistor register
- CMD_GPPUB = 0x0D,
- CMD_GPIOA = 0x12, // general purpose i/o port register (write modifies OLAT)
- CMD_GPIOB = 0x13,
-};
-
-void mcp23018_init(uint8_t addr) {
- static uint8_t s_init = 0;
- if (!s_init) {
- i2c_init();
- wait_ms(1000);
-
- s_init = 1;
- }
-}
-
-bool mcp23018_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
- uint8_t addr = SLAVE_TO_ADDR(slave_addr);
- uint8_t cmdDirection = port ? CMD_IODIRB : CMD_IODIRA;
- uint8_t cmdPullup = port ? CMD_GPPUB : CMD_GPPUA;
-
- i2c_status_t ret = i2c_writeReg(addr, cmdDirection, &conf, sizeof(conf), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_set_config::directionFAILED::%u\n", ret);
- return false;
- }
-
- ret = i2c_writeReg(addr, cmdPullup, &conf, sizeof(conf), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_set_config::pullupFAILED::%u\n", ret);
- return false;
- }
-
- return true;
-}
-
-bool mcp23018_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
- uint8_t addr = SLAVE_TO_ADDR(slave_addr);
- uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA;
-
- i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_set_output::FAILED::%u\n", ret);
- return false;
- }
-
- return true;
-}
-
-bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) {
- uint8_t addr = SLAVE_TO_ADDR(slave_addr);
- uint8_t conf[2] = {confA, confB};
-
- i2c_status_t ret = i2c_writeReg(addr, CMD_GPIOA, &conf[0], sizeof(conf), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_set_output::FAILED::%u\n", ret);
- return false;
- }
-
- return true;
-}
-
-bool mcp23018_readPins(uint8_t slave_addr, uint8_t port, uint8_t* out) {
- uint8_t addr = SLAVE_TO_ADDR(slave_addr);
- uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA;
-
- i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_readPins::FAILED::%u\n", ret);
- return false;
- }
-
- return true;
-}
-
-bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* out) {
- uint8_t addr = SLAVE_TO_ADDR(slave_addr);
-
- typedef union {
- uint8_t u8[2];
- uint16_t u16;
- } data16;
-
- data16 data = {.u16 = 0};
-
- i2c_status_t ret = i2c_readReg(addr, CMD_GPIOA, &data.u8[0], sizeof(data), TIMEOUT);
- if (ret != I2C_STATUS_SUCCESS) {
- dprintf("mcp23018_readPins::FAILED::%u\n", ret);
- return false;
- }
-
- *out = data.u16;
- return true;
-}
diff --git a/keyboards/viktus/sp111/mcp23018.h b/keyboards/viktus/sp111/mcp23018.h
deleted file mode 100644
index dc2251b72f..0000000000
--- a/keyboards/viktus/sp111/mcp23018.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright 2020 zvecr<git@zvecr.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#define mcp23018_PORTA 0
-#define mcp23018_PORTB 1
-
-#define ALL_OUTPUT 0
-#define ALL_INPUT 0xFF
-#define ALL_LOW 0
-#define ALL_HIGH 0xFF
-
-void mcp23018_init(uint8_t addr);
-bool mcp23018_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
-bool mcp23018_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
-bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB);
-bool mcp23018_readPins(uint8_t slave_addraddr, uint8_t port, uint8_t* ret);
-bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* ret);
diff --git a/keyboards/viktus/sp111/rules.mk b/keyboards/viktus/sp111/rules.mk
index b779ef4cb2..fab90d4a88 100644
--- a/keyboards/viktus/sp111/rules.mk
+++ b/keyboards/viktus/sp111/rules.mk
@@ -22,5 +22,6 @@ LTO_ENABLE = yes # Smaller (and slightly faster) firmware
# custom matrix setup
CUSTOM_MATRIX = lite
+VPATH += drivers/gpio
SRC += mcp23018.c matrix.c
QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/vn66/readme.md b/keyboards/vn66/readme.md
deleted file mode 100644
index 9b043cb081..0000000000
--- a/keyboards/vn66/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# VN66
-
-![vn66](https://i.imgur.com/Eo28suIl.jpg)
-
-A compact 60% keyboard for VNMK
-
-* Keyboard Maintainer: VNMK Community
-* Hardware Supported: VN66 PCB rev.2
-* Hardware Availability: https://geekhack.org/index.php?topic=101754.0
-
-Make example for this keyboard (after setting up your build environment):
-
- make vn66:default
-
-Flashing example for this keyboard:
-
- make vn66:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wallaby/readme.md b/keyboards/wallaby/readme.md
deleted file mode 100644
index 89c9f9c567..0000000000
--- a/keyboards/wallaby/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# wallaby
-
-A Tenkeyless PCB for YMDK aluminium case compatible with Filco
-
-* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
-* Hardware Supported: Wallaby PCB
-* Hardware Availability: https://github.com/kkatano/wallaby
-
-Make example for this keyboard (after setting up your build environment):
-
- make wallaby:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wanten/readme.md b/keyboards/wanten/readme.md
deleted file mode 100644
index 90dd1ae132..0000000000
--- a/keyboards/wanten/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# wanten
-
-![wanten](https://i.imgur.com/d7o1Edf.png)
-
-an ortho drop in PCB for Van cases
-
-* Keyboard Maintainer: [qpockets](https://github.com/qpockets)
-* Hardware Supported: V1 wanten PCB
-* Hardware Availability: [pocketspace discord server](https://discord.gg/fKbTxraHc6)
-
-Make example for this keyboard (after setting up your build environment):
-
- make wanten:default
-
-Flashing example for this keyboard:
-
- make wanten: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 (0,0) in the matrix (top left key or encoder) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
diff --git a/keyboards/geminate60/chconf.h b/keyboards/weirdo/geminate60/chconf.h
index d58807924a..d58807924a 100644
--- a/keyboards/geminate60/chconf.h
+++ b/keyboards/weirdo/geminate60/chconf.h
diff --git a/keyboards/geminate60/config.h b/keyboards/weirdo/geminate60/config.h
index 6e13da06de..6e13da06de 100644
--- a/keyboards/geminate60/config.h
+++ b/keyboards/weirdo/geminate60/config.h
diff --git a/keyboards/geminate60/geminate60.c b/keyboards/weirdo/geminate60/geminate60.c
index 3f0218c890..3f0218c890 100644
--- a/keyboards/geminate60/geminate60.c
+++ b/keyboards/weirdo/geminate60/geminate60.c
diff --git a/keyboards/geminate60/geminate60.h b/keyboards/weirdo/geminate60/geminate60.h
index 7361930a20..7361930a20 100644
--- a/keyboards/geminate60/geminate60.h
+++ b/keyboards/weirdo/geminate60/geminate60.h
diff --git a/keyboards/geminate60/info.json b/keyboards/weirdo/geminate60/info.json
index ba34264f62..ba34264f62 100644
--- a/keyboards/geminate60/info.json
+++ b/keyboards/weirdo/geminate60/info.json
diff --git a/keyboards/geminate60/keymaps/default/keymap.c b/keyboards/weirdo/geminate60/keymaps/default/keymap.c
index 91a6f8c3e2..91a6f8c3e2 100644
--- a/keyboards/geminate60/keymaps/default/keymap.c
+++ b/keyboards/weirdo/geminate60/keymaps/default/keymap.c
diff --git a/keyboards/geminate60/keymaps/via/keymap.c b/keyboards/weirdo/geminate60/keymaps/via/keymap.c
index 85210835e4..85210835e4 100644
--- a/keyboards/geminate60/keymaps/via/keymap.c
+++ b/keyboards/weirdo/geminate60/keymaps/via/keymap.c
diff --git a/keyboards/rabbit_capture_plan/keymaps/via/rules.mk b/keyboards/weirdo/geminate60/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/rabbit_capture_plan/keymaps/via/rules.mk
+++ b/keyboards/weirdo/geminate60/keymaps/via/rules.mk
diff --git a/keyboards/weirdo/geminate60/readme.md b/keyboards/weirdo/geminate60/readme.md
new file mode 100644
index 0000000000..ca865c8cff
--- /dev/null
+++ b/keyboards/weirdo/geminate60/readme.md
@@ -0,0 +1,16 @@
+# Geminate60
+
+![Geminate60](https://www.hualigs.cn/image/600d9391f16d7.jpg)
+
+A 60% keyboard based on STM32F303.
+
+* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) ([weirdo-f.github.io](https://))
+* Hardware Supported: Geminate60
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/geminate60:default
+
+The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/geminate60/rules.mk b/keyboards/weirdo/geminate60/rules.mk
index f6ad535987..f6ad535987 100644
--- a/keyboards/geminate60/rules.mk
+++ b/keyboards/weirdo/geminate60/rules.mk
diff --git a/keyboards/kelowna/rgb64/config.h b/keyboards/weirdo/kelowna/rgb64/config.h
index 906755d88a..906755d88a 100644
--- a/keyboards/kelowna/rgb64/config.h
+++ b/keyboards/weirdo/kelowna/rgb64/config.h
diff --git a/keyboards/kelowna/rgb64/info.json b/keyboards/weirdo/kelowna/rgb64/info.json
index 8dbb01a410..8dbb01a410 100644
--- a/keyboards/kelowna/rgb64/info.json
+++ b/keyboards/weirdo/kelowna/rgb64/info.json
diff --git a/keyboards/kelowna/rgb64/keymaps/default/keymap.c b/keyboards/weirdo/kelowna/rgb64/keymaps/default/keymap.c
index 1c5acf6bab..1c5acf6bab 100644
--- a/keyboards/kelowna/rgb64/keymaps/default/keymap.c
+++ b/keyboards/weirdo/kelowna/rgb64/keymaps/default/keymap.c
diff --git a/keyboards/kelowna/rgb64/keymaps/via/keymap.c b/keyboards/weirdo/kelowna/rgb64/keymaps/via/keymap.c
index db6b096b54..db6b096b54 100644
--- a/keyboards/kelowna/rgb64/keymaps/via/keymap.c
+++ b/keyboards/weirdo/kelowna/rgb64/keymaps/via/keymap.c
diff --git a/keyboards/reviung53/keymaps/via/rules.mk b/keyboards/weirdo/kelowna/rgb64/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/reviung53/keymaps/via/rules.mk
+++ b/keyboards/weirdo/kelowna/rgb64/keymaps/via/rules.mk
diff --git a/keyboards/weirdo/kelowna/rgb64/readme.md b/keyboards/weirdo/kelowna/rgb64/readme.md
new file mode 100644
index 0000000000..f12e155c8a
--- /dev/null
+++ b/keyboards/weirdo/kelowna/rgb64/readme.md
@@ -0,0 +1,17 @@
+# kelownaRGB64
+
+![kelownaRGB64](https://i.imgur.com/DzLy87M.png)
+
+A 60% keyboard based on STM32f303
+
+* Keyboard Maintainer: [Weirdo](https://github.com/Weirdo-F)(https://github.com/Weirdo-F)
+* Hardware Supported: kelownaRGB64
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/kelowna/rgb64:default
+
+Use the SWD interface on the board to connect to the STlink (JLink) to directly burn firmware without entering the bootloader.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kelowna/rgb64/rgb64.c b/keyboards/weirdo/kelowna/rgb64/rgb64.c
index dd57616161..dd57616161 100644
--- a/keyboards/kelowna/rgb64/rgb64.c
+++ b/keyboards/weirdo/kelowna/rgb64/rgb64.c
diff --git a/keyboards/kelowna/rgb64/rgb64.h b/keyboards/weirdo/kelowna/rgb64/rgb64.h
index c2277aa208..c2277aa208 100644
--- a/keyboards/kelowna/rgb64/rgb64.h
+++ b/keyboards/weirdo/kelowna/rgb64/rgb64.h
diff --git a/keyboards/kelowna/rgb64/rules.mk b/keyboards/weirdo/kelowna/rgb64/rules.mk
index 4e81168041..4e81168041 100644
--- a/keyboards/kelowna/rgb64/rules.mk
+++ b/keyboards/weirdo/kelowna/rgb64/rules.mk
diff --git a/keyboards/ls_60/chconf.h b/keyboards/weirdo/ls_60/chconf.h
index 5884dd8b0b..5884dd8b0b 100644
--- a/keyboards/ls_60/chconf.h
+++ b/keyboards/weirdo/ls_60/chconf.h
diff --git a/keyboards/ls_60/config.h b/keyboards/weirdo/ls_60/config.h
index e7151ac10f..e7151ac10f 100644
--- a/keyboards/ls_60/config.h
+++ b/keyboards/weirdo/ls_60/config.h
diff --git a/keyboards/ls_60/info.json b/keyboards/weirdo/ls_60/info.json
index 20cb544b98..20cb544b98 100644
--- a/keyboards/ls_60/info.json
+++ b/keyboards/weirdo/ls_60/info.json
diff --git a/keyboards/ls_60/keymaps/default/keymap.c b/keyboards/weirdo/ls_60/keymaps/default/keymap.c
index 3587959399..3587959399 100644
--- a/keyboards/ls_60/keymaps/default/keymap.c
+++ b/keyboards/weirdo/ls_60/keymaps/default/keymap.c
diff --git a/keyboards/ls_60/keymaps/via/keymap.c b/keyboards/weirdo/ls_60/keymaps/via/keymap.c
index e3af8eb7da..e3af8eb7da 100644
--- a/keyboards/ls_60/keymaps/via/keymap.c
+++ b/keyboards/weirdo/ls_60/keymaps/via/keymap.c
diff --git a/keyboards/runner3680/5x6_5x8/keymaps/via/rules.mk b/keyboards/weirdo/ls_60/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/runner3680/5x6_5x8/keymaps/via/rules.mk
+++ b/keyboards/weirdo/ls_60/keymaps/via/rules.mk
diff --git a/keyboards/ls_60/ls_60.c b/keyboards/weirdo/ls_60/ls_60.c
index ef29acf9a1..ef29acf9a1 100644
--- a/keyboards/ls_60/ls_60.c
+++ b/keyboards/weirdo/ls_60/ls_60.c
diff --git a/keyboards/ls_60/ls_60.h b/keyboards/weirdo/ls_60/ls_60.h
index b099521b9e..b099521b9e 100644
--- a/keyboards/ls_60/ls_60.h
+++ b/keyboards/weirdo/ls_60/ls_60.h
diff --git a/keyboards/weirdo/ls_60/readme.md b/keyboards/weirdo/ls_60/readme.md
new file mode 100644
index 0000000000..cb289b8ad6
--- /dev/null
+++ b/keyboards/weirdo/ls_60/readme.md
@@ -0,0 +1,17 @@
+# LS_60
+
+![LS_60](https://i.imgur.com/Cuy5W1H.png)
+
+A 60% keyboard based on STM32f303
+
+* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
+* Hardware Supported: LS_60
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/ls_60:default
+
+The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ls_60/rules.mk b/keyboards/weirdo/ls_60/rules.mk
index bcc109f6d4..bcc109f6d4 100644
--- a/keyboards/ls_60/rules.mk
+++ b/keyboards/weirdo/ls_60/rules.mk
diff --git a/keyboards/naiping/np64/chconf.h b/keyboards/weirdo/naiping/np64/chconf.h
index 5884dd8b0b..5884dd8b0b 100644
--- a/keyboards/naiping/np64/chconf.h
+++ b/keyboards/weirdo/naiping/np64/chconf.h
diff --git a/keyboards/naiping/np64/config.h b/keyboards/weirdo/naiping/np64/config.h
index ee4bdb8675..ee4bdb8675 100644
--- a/keyboards/naiping/np64/config.h
+++ b/keyboards/weirdo/naiping/np64/config.h
diff --git a/keyboards/naiping/np64/info.json b/keyboards/weirdo/naiping/np64/info.json
index 8bf71afe0c..8bf71afe0c 100644
--- a/keyboards/naiping/np64/info.json
+++ b/keyboards/weirdo/naiping/np64/info.json
diff --git a/keyboards/naiping/np64/keymaps/default/keymap.c b/keyboards/weirdo/naiping/np64/keymaps/default/keymap.c
index 25f72fe664..25f72fe664 100644
--- a/keyboards/naiping/np64/keymaps/default/keymap.c
+++ b/keyboards/weirdo/naiping/np64/keymaps/default/keymap.c
diff --git a/keyboards/naiping/np64/keymaps/via/keymap.c b/keyboards/weirdo/naiping/np64/keymaps/via/keymap.c
index 7afa15e735..7afa15e735 100644
--- a/keyboards/naiping/np64/keymaps/via/keymap.c
+++ b/keyboards/weirdo/naiping/np64/keymaps/via/keymap.c
diff --git a/keyboards/seigaiha/keymaps/via/rules.mk b/keyboards/weirdo/naiping/np64/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/seigaiha/keymaps/via/rules.mk
+++ b/keyboards/weirdo/naiping/np64/keymaps/via/rules.mk
diff --git a/keyboards/naiping/np64/np64.c b/keyboards/weirdo/naiping/np64/np64.c
index ee4c08cd34..ee4c08cd34 100644
--- a/keyboards/naiping/np64/np64.c
+++ b/keyboards/weirdo/naiping/np64/np64.c
diff --git a/keyboards/naiping/np64/np64.h b/keyboards/weirdo/naiping/np64/np64.h
index c2277aa208..c2277aa208 100644
--- a/keyboards/naiping/np64/np64.h
+++ b/keyboards/weirdo/naiping/np64/np64.h
diff --git a/keyboards/weirdo/naiping/np64/readme.md b/keyboards/weirdo/naiping/np64/readme.md
new file mode 100644
index 0000000000..a5b4c89f01
--- /dev/null
+++ b/keyboards/weirdo/naiping/np64/readme.md
@@ -0,0 +1,17 @@
+# NP_64
+
+![NP_64](https://i.imgur.com/DzLy87M.png)
+
+A 60% keyboard based on STM32f303
+
+* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) (https://weirdo-f.github.io)
+* Hardware Supported: NP_64
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/naiping/np64:default
+
+The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naiping/np64/rules.mk b/keyboards/weirdo/naiping/np64/rules.mk
index 55c914453e..55c914453e 100644
--- a/keyboards/naiping/np64/rules.mk
+++ b/keyboards/weirdo/naiping/np64/rules.mk
diff --git a/keyboards/naiping/nphhkb/chconf.h b/keyboards/weirdo/naiping/nphhkb/chconf.h
index 5884dd8b0b..5884dd8b0b 100644
--- a/keyboards/naiping/nphhkb/chconf.h
+++ b/keyboards/weirdo/naiping/nphhkb/chconf.h
diff --git a/keyboards/naiping/nphhkb/config.h b/keyboards/weirdo/naiping/nphhkb/config.h
index 26993eeb7f..26993eeb7f 100644
--- a/keyboards/naiping/nphhkb/config.h
+++ b/keyboards/weirdo/naiping/nphhkb/config.h
diff --git a/keyboards/naiping/nphhkb/info.json b/keyboards/weirdo/naiping/nphhkb/info.json
index 4975aa3a41..4975aa3a41 100644
--- a/keyboards/naiping/nphhkb/info.json
+++ b/keyboards/weirdo/naiping/nphhkb/info.json
diff --git a/keyboards/naiping/nphhkb/keymaps/default/keymap.c b/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c
index 2c4b6324be..2c4b6324be 100644
--- a/keyboards/naiping/nphhkb/keymaps/default/keymap.c
+++ b/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c
diff --git a/keyboards/naiping/nphhkb/keymaps/via/keymap.c b/keyboards/weirdo/naiping/nphhkb/keymaps/via/keymap.c
index 36128f8bba..36128f8bba 100644
--- a/keyboards/naiping/nphhkb/keymaps/via/keymap.c
+++ b/keyboards/weirdo/naiping/nphhkb/keymaps/via/keymap.c
diff --git a/keyboards/txuu/keymaps/via/rules.mk b/keyboards/weirdo/naiping/nphhkb/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/txuu/keymaps/via/rules.mk
+++ b/keyboards/weirdo/naiping/nphhkb/keymaps/via/rules.mk
diff --git a/keyboards/naiping/nphhkb/nphhkb.c b/keyboards/weirdo/naiping/nphhkb/nphhkb.c
index 881522c0b3..881522c0b3 100644
--- a/keyboards/naiping/nphhkb/nphhkb.c
+++ b/keyboards/weirdo/naiping/nphhkb/nphhkb.c
diff --git a/keyboards/naiping/nphhkb/nphhkb.h b/keyboards/weirdo/naiping/nphhkb/nphhkb.h
index 96c99451b4..96c99451b4 100644
--- a/keyboards/naiping/nphhkb/nphhkb.h
+++ b/keyboards/weirdo/naiping/nphhkb/nphhkb.h
diff --git a/keyboards/weirdo/naiping/nphhkb/readme.md b/keyboards/weirdo/naiping/nphhkb/readme.md
new file mode 100644
index 0000000000..1ed6d46eff
--- /dev/null
+++ b/keyboards/weirdo/naiping/nphhkb/readme.md
@@ -0,0 +1,17 @@
+# NP_hhkb
+
+![NP_hhkb](https://i.imgur.com/XnA4qVU.png)
+
+A 60% keyboard based on STM32f303
+
+* Keyboard Maintainer: [Weirdo](https://github.com/weirdo-f) (https://weirdo-f.github.io)
+* Hardware Supported: NP_hhkb
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/naiping/nphhkb:default
+
+The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naiping/nphhkb/rules.mk b/keyboards/weirdo/naiping/nphhkb/rules.mk
index 64284e913b..64284e913b 100644
--- a/keyboards/naiping/nphhkb/rules.mk
+++ b/keyboards/weirdo/naiping/nphhkb/rules.mk
diff --git a/keyboards/naiping/npminila/chconf.h b/keyboards/weirdo/naiping/npminila/chconf.h
index 5884dd8b0b..5884dd8b0b 100644
--- a/keyboards/naiping/npminila/chconf.h
+++ b/keyboards/weirdo/naiping/npminila/chconf.h
diff --git a/keyboards/naiping/npminila/config.h b/keyboards/weirdo/naiping/npminila/config.h
index f18b36d8e7..f18b36d8e7 100644
--- a/keyboards/naiping/npminila/config.h
+++ b/keyboards/weirdo/naiping/npminila/config.h
diff --git a/keyboards/naiping/npminila/info.json b/keyboards/weirdo/naiping/npminila/info.json
index 4dbe3127d3..4dbe3127d3 100644
--- a/keyboards/naiping/npminila/info.json
+++ b/keyboards/weirdo/naiping/npminila/info.json
diff --git a/keyboards/naiping/npminila/keymaps/default/keymap.c b/keyboards/weirdo/naiping/npminila/keymaps/default/keymap.c
index 30d6bf291e..30d6bf291e 100644
--- a/keyboards/naiping/npminila/keymaps/default/keymap.c
+++ b/keyboards/weirdo/naiping/npminila/keymaps/default/keymap.c
diff --git a/keyboards/naiping/npminila/keymaps/via/keymap.c b/keyboards/weirdo/naiping/npminila/keymaps/via/keymap.c
index 10ec385de9..10ec385de9 100644
--- a/keyboards/naiping/npminila/keymaps/via/keymap.c
+++ b/keyboards/weirdo/naiping/npminila/keymaps/via/keymap.c
diff --git a/keyboards/underscore33/rev1/keymaps/via/rules.mk b/keyboards/weirdo/naiping/npminila/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/underscore33/rev1/keymaps/via/rules.mk
+++ b/keyboards/weirdo/naiping/npminila/keymaps/via/rules.mk
diff --git a/keyboards/naiping/npminila/npminila.c b/keyboards/weirdo/naiping/npminila/npminila.c
index ab9ebb45d7..ab9ebb45d7 100644
--- a/keyboards/naiping/npminila/npminila.c
+++ b/keyboards/weirdo/naiping/npminila/npminila.c
diff --git a/keyboards/naiping/npminila/npminila.h b/keyboards/weirdo/naiping/npminila/npminila.h
index 3d0d927a0b..3d0d927a0b 100644
--- a/keyboards/naiping/npminila/npminila.h
+++ b/keyboards/weirdo/naiping/npminila/npminila.h
diff --git a/keyboards/weirdo/naiping/npminila/readme.md b/keyboards/weirdo/naiping/npminila/readme.md
new file mode 100644
index 0000000000..35d5a2e5ec
--- /dev/null
+++ b/keyboards/weirdo/naiping/npminila/readme.md
@@ -0,0 +1,17 @@
+# NP_minila
+
+![NP_minila](https://i.imgur.com/Cuy5W1H.png)
+
+A 60% keyboard based on STM32f303
+
+* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
+* Hardware Supported: NP_minila
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/naiping/npminila:default
+
+The RST pin and GND pin on the board can be quickly shortened twice to enter DFU mode, and then the program can be written.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/naiping/npminila/rules.mk b/keyboards/weirdo/naiping/npminila/rules.mk
index bcc109f6d4..bcc109f6d4 100644
--- a/keyboards/naiping/npminila/rules.mk
+++ b/keyboards/weirdo/naiping/npminila/rules.mk
diff --git a/keyboards/tiger910/config.h b/keyboards/weirdo/tiger910/config.h
index 4f2541739a..4f2541739a 100644
--- a/keyboards/tiger910/config.h
+++ b/keyboards/weirdo/tiger910/config.h
diff --git a/keyboards/tiger910/info.json b/keyboards/weirdo/tiger910/info.json
index 1c4e706e37..1c4e706e37 100644
--- a/keyboards/tiger910/info.json
+++ b/keyboards/weirdo/tiger910/info.json
diff --git a/keyboards/tiger910/keymaps/default/keymap.c b/keyboards/weirdo/tiger910/keymaps/default/keymap.c
index 5896a6913c..5896a6913c 100644
--- a/keyboards/tiger910/keymaps/default/keymap.c
+++ b/keyboards/weirdo/tiger910/keymaps/default/keymap.c
diff --git a/keyboards/tiger910/keymaps/via/keymap.c b/keyboards/weirdo/tiger910/keymaps/via/keymap.c
index 051796e3de..051796e3de 100644
--- a/keyboards/tiger910/keymaps/via/keymap.c
+++ b/keyboards/weirdo/tiger910/keymaps/via/keymap.c
diff --git a/keyboards/tiger910/keymaps/via/rules.mk b/keyboards/weirdo/tiger910/keymaps/via/rules.mk
index 036bd6d1c3..036bd6d1c3 100644
--- a/keyboards/tiger910/keymaps/via/rules.mk
+++ b/keyboards/weirdo/tiger910/keymaps/via/rules.mk
diff --git a/keyboards/weirdo/tiger910/readme.md b/keyboards/weirdo/tiger910/readme.md
new file mode 100644
index 0000000000..a47b84db87
--- /dev/null
+++ b/keyboards/weirdo/tiger910/readme.md
@@ -0,0 +1,15 @@
+# Tiger910
+
+![Tiger910](https://www.hualigs.cn/image/60272570d2764.jpg)
+
+A 65% keyboard
+
+* Keyboard Maintainer: [Weirdo](https://weirdo-f.github.io)(https://github.com/1248314361)
+* Hardware Supported: Tiger910
+* Hardware Availability: Not yet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make weirdo/tiger910:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tiger910/rules.mk b/keyboards/weirdo/tiger910/rules.mk
index ee0b9bc30c..ee0b9bc30c 100644
--- a/keyboards/tiger910/rules.mk
+++ b/keyboards/weirdo/tiger910/rules.mk
diff --git a/keyboards/tiger910/tiger910.c b/keyboards/weirdo/tiger910/tiger910.c
index d0964d9be9..d0964d9be9 100644
--- a/keyboards/tiger910/tiger910.c
+++ b/keyboards/weirdo/tiger910/tiger910.c
diff --git a/keyboards/tiger910/tiger910.h b/keyboards/weirdo/tiger910/tiger910.h
index 529c12fc5e..529c12fc5e 100644
--- a/keyboards/tiger910/tiger910.h
+++ b/keyboards/weirdo/tiger910/tiger910.h
diff --git a/keyboards/whitefox/readme.md b/keyboards/whitefox/readme.md
deleted file mode 100644
index a170723e22..0000000000
--- a/keyboards/whitefox/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# WhiteFox
-
-A compact 65% keyboard.
-
-* Keyboard Maintainer: QMK Community
-* Hardware Supported: Whitefox PCB
-* Hardware Availability: https://input.club/whitefox/
-
-Make example for this keyboard (after setting up your build environment):
-
- make whitefox:default
-
-Flashing example for this keyboard:
-
- make whitefox:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wings42/readme.md b/keyboards/wings42/readme.md
deleted file mode 100644
index fc71d58ab6..0000000000
--- a/keyboards/wings42/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# wings42
-
-![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
-
-A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: wings42 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make wings42:default
-
-Flashing example for this keyboard:
-
- make wings42:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wings42/rev1/readme.md b/keyboards/wings42/rev1/readme.md
deleted file mode 100644
index 4ddfe3e83c..0000000000
--- a/keyboards/wings42/rev1/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# wings42
-
-![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
-
-A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: wings42 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make wings42/rev1:default
-
-Flashing example for this keyboard:
-
- make wings42/rev1:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-A build guide for this keyboard can be found here: [wings42 build guide](https://yfuku.com/wings42/buildguide/)
diff --git a/keyboards/wings42/rev1_extkeys/readme.md b/keyboards/wings42/rev1_extkeys/readme.md
deleted file mode 100644
index 7be464a141..0000000000
--- a/keyboards/wings42/rev1_extkeys/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# wings42
-
-![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
-
-A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: wings42 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make make wings42/rev1_extkeys:default
-
-Flashing example for this keyboard:
-
- make make wings42/rev1_extkeys:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-A build guide for this keyboard can be found here: [wings42 build guide](https://yfuku.com/wings42/buildguide/)
diff --git a/keyboards/wings42/rev2/readme.md b/keyboards/wings42/rev2/readme.md
deleted file mode 100644
index 158372feb4..0000000000
--- a/keyboards/wings42/rev2/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# wings42
-
-![wings42](https://raw.githubusercontent.com/yfuku/wings42/main/images/wings42.jpg)
-
-A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
-
-* Keyboard Maintainer: [yfuku](https://github.com/yfuku)
-* Hardware Supported: wings42 PCB, Pro Micro
-* Hardware Availability: https://yfuku.booth.pm/
-
-Make example for this keyboard (after setting up your build environment):
-
- make wings42:default
-
-Flashing example for this keyboard:
-
- make wings42:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-A build guide for this keyboard can be found here: [wings42 build guide](https://yfuku.com/wings42/buildguide/)
diff --git a/keyboards/wings42/rules.mk b/keyboards/wings42/rules.mk
deleted file mode 100644
index 74e894efec..0000000000
--- a/keyboards/wings42/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# 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
-
-SPLIT_KEYBOARD = yes
-
-DEFAULT_FOLDER = wings42/rev2
diff --git a/keyboards/wings42/wings42.h b/keyboards/wings42/wings42.h
deleted file mode 100644
index 9412b7117a..0000000000
--- a/keyboards/wings42/wings42.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2021 yfuku
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_wings42_rev1
-# include "rev1.h"
-#endif
-#ifdef KEYBOARD_wings42_rev1_extkeys
-# include "rev1_extkeys.h"
-#endif
-#ifdef KEYBOARD_wings42_rev2
-# include "rev2.h"
-#endif
-
diff --git a/keyboards/spiderisland/winry25tc/config.h b/keyboards/winry/winry25tc/config.h
index 1e7ff4c63b..1e7ff4c63b 100644
--- a/keyboards/spiderisland/winry25tc/config.h
+++ b/keyboards/winry/winry25tc/config.h
diff --git a/keyboards/spiderisland/winry25tc/info.json b/keyboards/winry/winry25tc/info.json
index 8e503bc74a..8e503bc74a 100644
--- a/keyboards/spiderisland/winry25tc/info.json
+++ b/keyboards/winry/winry25tc/info.json
diff --git a/keyboards/spiderisland/winry25tc/keymaps/default/keymap.c b/keyboards/winry/winry25tc/keymaps/default/keymap.c
index ec1d0f42ed..ec1d0f42ed 100644
--- a/keyboards/spiderisland/winry25tc/keymaps/default/keymap.c
+++ b/keyboards/winry/winry25tc/keymaps/default/keymap.c
diff --git a/keyboards/winry/winry25tc/readme.md b/keyboards/winry/winry25tc/readme.md
new file mode 100644
index 0000000000..9507aef74b
--- /dev/null
+++ b/keyboards/winry/winry25tc/readme.md
@@ -0,0 +1,19 @@
+# Winry 25-key RGB Backlight Hot Swap Mechanical Keyboard
+
+Keyboard from
+* [SpiderIsland on AliExpress(reseller)](https://a.aliexpress.com/_dVJsSpR). Seller provides [kbfirmware](https://kbfirmware.com/) JSON config that was converted to QMK.
+
+
+
+* Keyboard Maintainer: [andrzejressel](https://github.com/andrzejressel)
+* Hardware Availability:
+https://aliexpress.com/item/1005001523579896.html
+https://item.taobao.com/item.htm?id=599731303104
+
+Make example for this keyboard (after setting up your build environment):
+
+ make winry/winry25tc:default
+
+**Reset Key**: Located on the other side of the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/spiderisland/winry25tc/rules.mk b/keyboards/winry/winry25tc/rules.mk
index b0352b513c..b0352b513c 100644
--- a/keyboards/spiderisland/winry25tc/rules.mk
+++ b/keyboards/winry/winry25tc/rules.mk
diff --git a/keyboards/spiderisland/winry25tc/winry25tc.c b/keyboards/winry/winry25tc/winry25tc.c
index 938dadaf8f..938dadaf8f 100644
--- a/keyboards/spiderisland/winry25tc/winry25tc.c
+++ b/keyboards/winry/winry25tc/winry25tc.c
diff --git a/keyboards/spiderisland/winry25tc/winry25tc.h b/keyboards/winry/winry25tc/winry25tc.h
index 5498dd8d6b..5498dd8d6b 100644
--- a/keyboards/spiderisland/winry25tc/winry25tc.h
+++ b/keyboards/winry/winry25tc/winry25tc.h
diff --git a/keyboards/wolfmarkclub/wm1/rules.mk b/keyboards/wolfmarkclub/wm1/rules.mk
index 2782d497ce..a712747048 100644
--- a/keyboards/wolfmarkclub/wm1/rules.mk
+++ b/keyboards/wolfmarkclub/wm1/rules.mk
@@ -5,6 +5,9 @@ MCU = STM32F103
MCU_LDSCRIPT = wm1_f103
BOARD = STM32_F103_STM32DUINO
+# Bootloader selection
+BOOTLOADER = custom
+
PROGRAM_CMD = echo 'CLI flashing not supported' >&2
# Build Options
diff --git a/keyboards/wolfmarkclub/wm1/wm1.c b/keyboards/wolfmarkclub/wm1/wm1.c
index d199546f89..0ad1ade4cc 100644
--- a/keyboards/wolfmarkclub/wm1/wm1.c
+++ b/keyboards/wolfmarkclub/wm1/wm1.c
@@ -1,5 +1,10 @@
#include "wm1.h"
+void bootloader_jump(void) {
+ // This board doesn't use the "standard" stm32duino bootloader, and no information is available regarding how to enter bootloader mode. All we can do here is reset.
+ NVIC_SystemReset();
+}
+
void matrix_init_kb(void) {
setPinOutput(B1); // Top Indicator LED
setPinOutput(B0); // Middle Indicator LED
diff --git a/keyboards/ymd75/.noci b/keyboards/woodkeys/bigseries/1key/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ymd75/.noci
+++ b/keyboards/woodkeys/bigseries/1key/.noci
diff --git a/keyboards/bigseries/1key/1key.c b/keyboards/woodkeys/bigseries/1key/1key.c
index 6036bd9991..6036bd9991 100755
--- a/keyboards/bigseries/1key/1key.c
+++ b/keyboards/woodkeys/bigseries/1key/1key.c
diff --git a/keyboards/bigseries/1key/1key.h b/keyboards/woodkeys/bigseries/1key/1key.h
index 6e5ddcc760..6e5ddcc760 100755
--- a/keyboards/bigseries/1key/1key.h
+++ b/keyboards/woodkeys/bigseries/1key/1key.h
diff --git a/keyboards/bigseries/1key/config.h b/keyboards/woodkeys/bigseries/1key/config.h
index f31a7fc057..f31a7fc057 100755
--- a/keyboards/bigseries/1key/config.h
+++ b/keyboards/woodkeys/bigseries/1key/config.h
diff --git a/keyboards/bigseries/1key/info.json b/keyboards/woodkeys/bigseries/1key/info.json
index 4355191d2c..4355191d2c 100644
--- a/keyboards/bigseries/1key/info.json
+++ b/keyboards/woodkeys/bigseries/1key/info.json
diff --git a/keyboards/bigseries/1key/keymaps/8ball/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/8ball/keymap.c
index 33a5428fe4..33a5428fe4 100755
--- a/keyboards/bigseries/1key/keymaps/8ball/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/8ball/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
index d87471b007..d87471b007 100755
--- a/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/default/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/default/keymap.c
index 830093af54..830093af54 100755
--- a/keyboards/bigseries/1key/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/default/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/dudeofawesome/README.md b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/README.md
index 86b79b4621..86b79b4621 100644
--- a/keyboards/bigseries/1key/keymaps/dudeofawesome/README.md
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/README.md
diff --git a/keyboards/bigseries/1key/keymaps/dudeofawesome/config.h b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/config.h
index 30b86224c6..30b86224c6 100644
--- a/keyboards/bigseries/1key/keymaps/dudeofawesome/config.h
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/config.h
diff --git a/keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/keymap.c
index 4c3739bbeb..4c3739bbeb 100755
--- a/keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/keymap.c
diff --git a/keyboards/naked64/keymaps/salicylic_with_setta21/rules.mk b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/naked64/keymaps/salicylic_with_setta21/rules.mk
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/dudeofawesome/rules.mk
diff --git a/keyboards/bigseries/1key/keymaps/leddance/config.h b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/config.h
index 57398fb996..57398fb996 100644
--- a/keyboards/bigseries/1key/keymaps/leddance/config.h
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/config.h
diff --git a/keyboards/bigseries/1key/keymaps/leddance/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/keymap.c
index c77e579028..c77e579028 100755
--- a/keyboards/bigseries/1key/keymaps/leddance/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/leddance/rules.mk b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/rules.mk
index 1ba2fa8fbe..1ba2fa8fbe 100644
--- a/keyboards/bigseries/1key/keymaps/leddance/rules.mk
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/leddance/rules.mk
diff --git a/keyboards/bigseries/1key/keymaps/lock/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/lock/keymap.c
index 650554e020..650554e020 100755
--- a/keyboards/bigseries/1key/keymaps/lock/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/lock/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/tester/keymap.c b/keyboards/woodkeys/bigseries/1key/keymaps/tester/keymap.c
index 8248ae7895..8248ae7895 100755
--- a/keyboards/bigseries/1key/keymaps/tester/keymap.c
+++ b/keyboards/woodkeys/bigseries/1key/keymaps/tester/keymap.c
diff --git a/keyboards/woodkeys/bigseries/1key/readme.md b/keyboards/woodkeys/bigseries/1key/readme.md
new file mode 100644
index 0000000000..3d019c65d3
--- /dev/null
+++ b/keyboards/woodkeys/bigseries/1key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 1-Key](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make woodkeys/bigseries/1key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/1key/rules.mk b/keyboards/woodkeys/bigseries/1key/rules.mk
index 49ff0998f6..49ff0998f6 100755
--- a/keyboards/bigseries/1key/rules.mk
+++ b/keyboards/woodkeys/bigseries/1key/rules.mk
diff --git a/keyboards/ymd75/rev1/.noci b/keyboards/woodkeys/bigseries/2key/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ymd75/rev1/.noci
+++ b/keyboards/woodkeys/bigseries/2key/.noci
diff --git a/keyboards/bigseries/2key/2key.c b/keyboards/woodkeys/bigseries/2key/2key.c
index cffb71907e..cffb71907e 100755
--- a/keyboards/bigseries/2key/2key.c
+++ b/keyboards/woodkeys/bigseries/2key/2key.c
diff --git a/keyboards/bigseries/2key/2key.h b/keyboards/woodkeys/bigseries/2key/2key.h
index eff82fef93..eff82fef93 100755
--- a/keyboards/bigseries/2key/2key.h
+++ b/keyboards/woodkeys/bigseries/2key/2key.h
diff --git a/keyboards/bigseries/2key/config.h b/keyboards/woodkeys/bigseries/2key/config.h
index 53866a15d1..53866a15d1 100755
--- a/keyboards/bigseries/2key/config.h
+++ b/keyboards/woodkeys/bigseries/2key/config.h
diff --git a/keyboards/bigseries/2key/info.json b/keyboards/woodkeys/bigseries/2key/info.json
index df3237defc..df3237defc 100644
--- a/keyboards/bigseries/2key/info.json
+++ b/keyboards/woodkeys/bigseries/2key/info.json
diff --git a/keyboards/bigseries/2key/keymaps/default/keymap.c b/keyboards/woodkeys/bigseries/2key/keymaps/default/keymap.c
index 128a3e9c82..128a3e9c82 100755
--- a/keyboards/bigseries/2key/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/bigseries/2key/keymaps/default/keymap.c
diff --git a/keyboards/bigseries/2key/keymaps/lock/keymap.c b/keyboards/woodkeys/bigseries/2key/keymaps/lock/keymap.c
index 3646fb40d1..3646fb40d1 100755
--- a/keyboards/bigseries/2key/keymaps/lock/keymap.c
+++ b/keyboards/woodkeys/bigseries/2key/keymaps/lock/keymap.c
diff --git a/keyboards/bigseries/2key/keymaps/tester/keymap.c b/keyboards/woodkeys/bigseries/2key/keymaps/tester/keymap.c
index 8938b1b40b..8938b1b40b 100755
--- a/keyboards/bigseries/2key/keymaps/tester/keymap.c
+++ b/keyboards/woodkeys/bigseries/2key/keymaps/tester/keymap.c
diff --git a/keyboards/woodkeys/bigseries/2key/readme.md b/keyboards/woodkeys/bigseries/2key/readme.md
new file mode 100644
index 0000000000..f6bcc5efbb
--- /dev/null
+++ b/keyboards/woodkeys/bigseries/2key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 2-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_2u_Case_2018-Apr-03_08-45-05PM-000_CustomizedView8990071229.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make woodkeys/bigseries/2key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/2key/rules.mk b/keyboards/woodkeys/bigseries/2key/rules.mk
index 49ff0998f6..49ff0998f6 100755
--- a/keyboards/bigseries/2key/rules.mk
+++ b/keyboards/woodkeys/bigseries/2key/rules.mk
diff --git a/keyboards/ymd75/rev2/.noci b/keyboards/woodkeys/bigseries/3key/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/ymd75/rev2/.noci
+++ b/keyboards/woodkeys/bigseries/3key/.noci
diff --git a/keyboards/bigseries/3key/3key.c b/keyboards/woodkeys/bigseries/3key/3key.c
index 3735c10543..3735c10543 100755
--- a/keyboards/bigseries/3key/3key.c
+++ b/keyboards/woodkeys/bigseries/3key/3key.c
diff --git a/keyboards/bigseries/3key/3key.h b/keyboards/woodkeys/bigseries/3key/3key.h
index caee1e4551..caee1e4551 100755
--- a/keyboards/bigseries/3key/3key.h
+++ b/keyboards/woodkeys/bigseries/3key/3key.h
diff --git a/keyboards/bigseries/3key/config.h b/keyboards/woodkeys/bigseries/3key/config.h
index 4a474cc3d1..4a474cc3d1 100755
--- a/keyboards/bigseries/3key/config.h
+++ b/keyboards/woodkeys/bigseries/3key/config.h
diff --git a/keyboards/bigseries/3key/info.json b/keyboards/woodkeys/bigseries/3key/info.json
index 17f7621480..17f7621480 100644
--- a/keyboards/bigseries/3key/info.json
+++ b/keyboards/woodkeys/bigseries/3key/info.json
diff --git a/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c b/keyboards/woodkeys/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
index d1410ecf1e..d1410ecf1e 100755
--- a/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
+++ b/keyboards/woodkeys/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
diff --git a/keyboards/bigseries/3key/keymaps/default/keymap.c b/keyboards/woodkeys/bigseries/3key/keymaps/default/keymap.c
index 855c7c3ecd..855c7c3ecd 100755
--- a/keyboards/bigseries/3key/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/bigseries/3key/keymaps/default/keymap.c
diff --git a/keyboards/bigseries/3key/keymaps/tester/keymap.c b/keyboards/woodkeys/bigseries/3key/keymaps/tester/keymap.c
index 7ee0d7a419..7ee0d7a419 100755
--- a/keyboards/bigseries/3key/keymaps/tester/keymap.c
+++ b/keyboards/woodkeys/bigseries/3key/keymaps/tester/keymap.c
diff --git a/keyboards/woodkeys/bigseries/3key/readme.md b/keyboards/woodkeys/bigseries/3key/readme.md
new file mode 100644
index 0000000000..c8d0275b87
--- /dev/null
+++ b/keyboards/woodkeys/bigseries/3key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 3-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_3u_Case_2018-Apr-03_07-03-31PM-000_CustomizedView20086357020.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make woodkeys/bigseries/3key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/3key/rules.mk b/keyboards/woodkeys/bigseries/3key/rules.mk
index 49ff0998f6..49ff0998f6 100755
--- a/keyboards/bigseries/3key/rules.mk
+++ b/keyboards/woodkeys/bigseries/3key/rules.mk
diff --git a/keyboards/bigseries/4key/4key.c b/keyboards/woodkeys/bigseries/4key/4key.c
index fdb9a92514..fdb9a92514 100755
--- a/keyboards/bigseries/4key/4key.c
+++ b/keyboards/woodkeys/bigseries/4key/4key.c
diff --git a/keyboards/bigseries/4key/4key.h b/keyboards/woodkeys/bigseries/4key/4key.h
index 7e9ff7a793..7e9ff7a793 100755
--- a/keyboards/bigseries/4key/4key.h
+++ b/keyboards/woodkeys/bigseries/4key/4key.h
diff --git a/keyboards/bigseries/4key/config.h b/keyboards/woodkeys/bigseries/4key/config.h
index c1635022de..c1635022de 100755
--- a/keyboards/bigseries/4key/config.h
+++ b/keyboards/woodkeys/bigseries/4key/config.h
diff --git a/keyboards/bigseries/4key/info.json b/keyboards/woodkeys/bigseries/4key/info.json
index 4429159a6b..4429159a6b 100644
--- a/keyboards/bigseries/4key/info.json
+++ b/keyboards/woodkeys/bigseries/4key/info.json
diff --git a/keyboards/bigseries/4key/keymaps/default/keymap.c b/keyboards/woodkeys/bigseries/4key/keymaps/default/keymap.c
index 5674bc6194..5674bc6194 100755
--- a/keyboards/bigseries/4key/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/bigseries/4key/keymaps/default/keymap.c
diff --git a/keyboards/bigseries/4key/keymaps/tester/keymap.c b/keyboards/woodkeys/bigseries/4key/keymaps/tester/keymap.c
index eb2e42b7af..eb2e42b7af 100755
--- a/keyboards/bigseries/4key/keymaps/tester/keymap.c
+++ b/keyboards/woodkeys/bigseries/4key/keymaps/tester/keymap.c
diff --git a/keyboards/woodkeys/bigseries/4key/readme.md b/keyboards/woodkeys/bigseries/4key/readme.md
new file mode 100644
index 0000000000..2ac56a25c7
--- /dev/null
+++ b/keyboards/woodkeys/bigseries/4key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 4-Key](https://woodkeys.click/wp-content/uploads/2017/09/BigSeries_4u_with_keys_2018-Apr-01_04-54-09AM-000_CustomizedView38438685666_png.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make woodkeys/bigseries/4key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/4key/rules.mk b/keyboards/woodkeys/bigseries/4key/rules.mk
index 49ff0998f6..49ff0998f6 100755
--- a/keyboards/bigseries/4key/rules.mk
+++ b/keyboards/woodkeys/bigseries/4key/rules.mk
diff --git a/keyboards/woodkeys/bigseries/readme.md b/keyboards/woodkeys/bigseries/readme.md
new file mode 100644
index 0000000000..5f7a123508
--- /dev/null
+++ b/keyboards/woodkeys/bigseries/readme.md
@@ -0,0 +1,16 @@
+# Big Series Keyboards
+
+![Big Series Keyboards](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
+
+The is the parent folder for all PCBs made by [Woodkeys](https://woodkeys.click) for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for these keyboards (after setting up your build environment):
+
+ make woodkeys/bigseries/1key:default
+ make woodkeys/bigseries/3key:ctrl-alt-del
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/meira/TWIlib.c b/keyboards/woodkeys/meira/TWIlib.c
index 8f5658fcdb..8f5658fcdb 100755
--- a/keyboards/meira/TWIlib.c
+++ b/keyboards/woodkeys/meira/TWIlib.c
diff --git a/keyboards/meira/TWIlib.h b/keyboards/woodkeys/meira/TWIlib.h
index 8ba261c6e5..8ba261c6e5 100755
--- a/keyboards/meira/TWIlib.h
+++ b/keyboards/woodkeys/meira/TWIlib.h
diff --git a/keyboards/meira/config.h b/keyboards/woodkeys/meira/config.h
index 999ab1bf8a..999ab1bf8a 100644
--- a/keyboards/meira/config.h
+++ b/keyboards/woodkeys/meira/config.h
diff --git a/keyboards/meira/featherble/config.h b/keyboards/woodkeys/meira/featherble/config.h
index 94bef3b330..94bef3b330 100644
--- a/keyboards/meira/featherble/config.h
+++ b/keyboards/woodkeys/meira/featherble/config.h
diff --git a/keyboards/meira/featherble/featherble.c b/keyboards/woodkeys/meira/featherble/featherble.c
index 63ade21904..63ade21904 100644
--- a/keyboards/meira/featherble/featherble.c
+++ b/keyboards/woodkeys/meira/featherble/featherble.c
diff --git a/keyboards/meira/featherble/featherble.h b/keyboards/woodkeys/meira/featherble/featherble.h
index eab7c639b9..eab7c639b9 100644
--- a/keyboards/meira/featherble/featherble.h
+++ b/keyboards/woodkeys/meira/featherble/featherble.h
diff --git a/keyboards/woodkeys/meira/featherble/rules.mk b/keyboards/woodkeys/meira/featherble/rules.mk
new file mode 100644
index 0000000000..01f1af1ae8
--- /dev/null
+++ b/keyboards/woodkeys/meira/featherble/rules.mk
@@ -0,0 +1,5 @@
+# Processor frequency
+F_CPU = 8000000
+
+BLUETOOTH_ENABLE = yes
+BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/meira/info.json b/keyboards/woodkeys/meira/info.json
index de9ce42f8e..de9ce42f8e 100644
--- a/keyboards/meira/info.json
+++ b/keyboards/woodkeys/meira/info.json
diff --git a/keyboards/meira/issi.c b/keyboards/woodkeys/meira/issi.c
index 600a465ba3..600a465ba3 100755
--- a/keyboards/meira/issi.c
+++ b/keyboards/woodkeys/meira/issi.c
diff --git a/keyboards/meira/issi.h b/keyboards/woodkeys/meira/issi.h
index 74379ddbc8..74379ddbc8 100755
--- a/keyboards/meira/issi.h
+++ b/keyboards/woodkeys/meira/issi.h
diff --git a/keyboards/meira/keymaps/cole/config.h b/keyboards/woodkeys/meira/keymaps/cole/config.h
index 90c490e836..90c490e836 100644
--- a/keyboards/meira/keymaps/cole/config.h
+++ b/keyboards/woodkeys/meira/keymaps/cole/config.h
diff --git a/keyboards/meira/keymaps/cole/keymap.c b/keyboards/woodkeys/meira/keymaps/cole/keymap.c
index 94806c5da2..94806c5da2 100644
--- a/keyboards/meira/keymaps/cole/keymap.c
+++ b/keyboards/woodkeys/meira/keymaps/cole/keymap.c
diff --git a/keyboards/meira/keymaps/cole/readme.md b/keyboards/woodkeys/meira/keymaps/cole/readme.md
index be84048813..be84048813 100644
--- a/keyboards/meira/keymaps/cole/readme.md
+++ b/keyboards/woodkeys/meira/keymaps/cole/readme.md
diff --git a/keyboards/woodkeys/meira/keymaps/cole/rules.mk b/keyboards/woodkeys/meira/keymaps/cole/rules.mk
new file mode 100644
index 0000000000..eed6b9c119
--- /dev/null
+++ b/keyboards/woodkeys/meira/keymaps/cole/rules.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes # Audio output on port C6
+LTO_ENABLE = yes # -4-7k
diff --git a/keyboards/meira/keymaps/default/config.h b/keyboards/woodkeys/meira/keymaps/default/config.h
index e3776d2eff..e3776d2eff 100644
--- a/keyboards/meira/keymaps/default/config.h
+++ b/keyboards/woodkeys/meira/keymaps/default/config.h
diff --git a/keyboards/meira/keymaps/default/keymap.c b/keyboards/woodkeys/meira/keymaps/default/keymap.c
index dacf848cf1..dacf848cf1 100644
--- a/keyboards/meira/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/meira/keymaps/default/keymap.c
diff --git a/keyboards/meira/keymaps/default/readme.md b/keyboards/woodkeys/meira/keymaps/default/readme.md
index be84048813..be84048813 100644
--- a/keyboards/meira/keymaps/default/readme.md
+++ b/keyboards/woodkeys/meira/keymaps/default/readme.md
diff --git a/keyboards/meira/keymaps/grahampheath/config.h b/keyboards/woodkeys/meira/keymaps/grahampheath/config.h
index 604f378461..604f378461 100644
--- a/keyboards/meira/keymaps/grahampheath/config.h
+++ b/keyboards/woodkeys/meira/keymaps/grahampheath/config.h
diff --git a/keyboards/meira/keymaps/grahampheath/keymap.c b/keyboards/woodkeys/meira/keymaps/grahampheath/keymap.c
index 35fa31b8b8..35fa31b8b8 100644
--- a/keyboards/meira/keymaps/grahampheath/keymap.c
+++ b/keyboards/woodkeys/meira/keymaps/grahampheath/keymap.c
diff --git a/keyboards/meira/keymaps/grahampheath/readme.md b/keyboards/woodkeys/meira/keymaps/grahampheath/readme.md
index 10459e3566..10459e3566 100644
--- a/keyboards/meira/keymaps/grahampheath/readme.md
+++ b/keyboards/woodkeys/meira/keymaps/grahampheath/readme.md
diff --git a/keyboards/woodkeys/meira/keymaps/grahampheath/rules.mk b/keyboards/woodkeys/meira/keymaps/grahampheath/rules.mk
new file mode 100644
index 0000000000..1c61fe1c12
--- /dev/null
+++ b/keyboards/woodkeys/meira/keymaps/grahampheath/rules.mk
@@ -0,0 +1,5 @@
+AUDIO_ENABLE = yes # Audio output on port C6
+LTO_ENABLE = yes # -4-7k
+MOUSEKEY_ENABLE = no # Mouse keys(-47kb)
+ISSI_ENABLE = no
+BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/meira/keymaps/takmiya/config.h b/keyboards/woodkeys/meira/keymaps/takmiya/config.h
index 97210115b9..97210115b9 100644
--- a/keyboards/meira/keymaps/takmiya/config.h
+++ b/keyboards/woodkeys/meira/keymaps/takmiya/config.h
diff --git a/keyboards/meira/keymaps/takmiya/keymap.c b/keyboards/woodkeys/meira/keymaps/takmiya/keymap.c
index 25f50abc49..25f50abc49 100644
--- a/keyboards/meira/keymaps/takmiya/keymap.c
+++ b/keyboards/woodkeys/meira/keymaps/takmiya/keymap.c
diff --git a/keyboards/meira/keymaps/takmiya/readme.md b/keyboards/woodkeys/meira/keymaps/takmiya/readme.md
index 40f48bb091..40f48bb091 100644
--- a/keyboards/meira/keymaps/takmiya/readme.md
+++ b/keyboards/woodkeys/meira/keymaps/takmiya/readme.md
diff --git a/keyboards/meira/lighting.c b/keyboards/woodkeys/meira/lighting.c
index 1a3c954bcf..1a3c954bcf 100755
--- a/keyboards/meira/lighting.c
+++ b/keyboards/woodkeys/meira/lighting.c
diff --git a/keyboards/meira/lighting.h b/keyboards/woodkeys/meira/lighting.h
index 42fee8ac92..42fee8ac92 100755
--- a/keyboards/meira/lighting.h
+++ b/keyboards/woodkeys/meira/lighting.h
diff --git a/keyboards/woodkeys/meira/matrix.c b/keyboards/woodkeys/meira/matrix.c
new file mode 100644
index 0000000000..8e8e9485b4
--- /dev/null
+++ b/keyboards/woodkeys/meira/matrix.c
@@ -0,0 +1,270 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2017 Cole Markham <cole@ccmcomputing.net>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include "meira.h"
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "config.h"
+#include "timer.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+#if (DEBOUNCE > 0)
+ static uint16_t debouncing_time;
+ static bool debouncing = false;
+#endif
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const uint8_t col_pins[4] = MATRIX_COL_PINS_SCANNED;
+//static const uint8_t lrow_pins[MATRIX_ROWS] = LED_ROW_PINS;
+//static const uint8_t lcol_pins[4] = LED_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+static void init_rows(void);
+//static void init_lcols(void);
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
+static void unselect_cols(void);
+static void select_col(uint8_t col);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
+ // initialize row and col
+ unselect_cols();
+ init_rows();
+// init_lcols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+
+}
+
+uint8_t _matrix_scan(void)
+{
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+# if (DEBOUNCE > 0)
+ bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+# else
+ read_rows_on_col(matrix, current_col);
+# endif
+
+ }
+
+# if (DEBOUNCE > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCE)) {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ debouncing = false;
+ }
+# endif
+
+ return 1;
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t ret = _matrix_scan();
+ matrix_scan_quantum();
+ return ret;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_bin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+
+static void init_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selection to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
+ {
+
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
+
+ // Check row pin state
+ if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_cols();
+
+ return matrix_changed;
+}
+
+static void select_col(uint8_t col)
+{
+#ifdef FLIPPED_BOARD
+ col = MATRIX_COLS - col - 1;
+#endif
+ for(uint8_t x = 0; x < 4; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ if (((col >> x) & 0x1) == 1){
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HIGH
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+ }
+}
+
+static void unselect_cols(void)
+{
+ // FIXME This really needs to use the global enable on the decoder, because currently this sets the value to col1
+ for(uint8_t x = 0; x < 4; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+}
diff --git a/keyboards/meira/meira.c b/keyboards/woodkeys/meira/meira.c
index e900fd0dd6..e900fd0dd6 100644
--- a/keyboards/meira/meira.c
+++ b/keyboards/woodkeys/meira/meira.c
diff --git a/keyboards/meira/meira.h b/keyboards/woodkeys/meira/meira.h
index 55fccf5de5..55fccf5de5 100644
--- a/keyboards/meira/meira.h
+++ b/keyboards/woodkeys/meira/meira.h
diff --git a/keyboards/meira/promicro/config.h b/keyboards/woodkeys/meira/promicro/config.h
index bbdaa9dbd8..bbdaa9dbd8 100644
--- a/keyboards/meira/promicro/config.h
+++ b/keyboards/woodkeys/meira/promicro/config.h
diff --git a/keyboards/meira/promicro/promicro.c b/keyboards/woodkeys/meira/promicro/promicro.c
index 63ade21904..63ade21904 100644
--- a/keyboards/meira/promicro/promicro.c
+++ b/keyboards/woodkeys/meira/promicro/promicro.c
diff --git a/keyboards/meira/promicro/promicro.h b/keyboards/woodkeys/meira/promicro/promicro.h
index eab7c639b9..eab7c639b9 100644
--- a/keyboards/meira/promicro/promicro.h
+++ b/keyboards/woodkeys/meira/promicro/promicro.h
diff --git a/keyboards/meira/promicro/rules.mk b/keyboards/woodkeys/meira/promicro/rules.mk
index 09057bea54..09057bea54 100644
--- a/keyboards/meira/promicro/rules.mk
+++ b/keyboards/woodkeys/meira/promicro/rules.mk
diff --git a/keyboards/woodkeys/meira/readme.md b/keyboards/woodkeys/meira/readme.md
new file mode 100644
index 0000000000..f0fb02b69e
--- /dev/null
+++ b/keyboards/woodkeys/meira/readme.md
@@ -0,0 +1,28 @@
+# Meira
+
+![Meira](https://i.imgur.com/kF4MFlWh.jpeg)
+
+A 4x12 ortholinear low-profile keyboard.
+
+* Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham)
+* Hardware Supported: Meira/ProMicro, Meira/FeatherBLE
+* Hardware Availability: [WoodKeys.click](https://woodkeys.click/meira)
+
+Two controllers are supported: the Pro Micro, and the Adafruit Feather BLE 32u4. Support for each is defined as a hardware revision subfolder in QMK. Main differences include processor frequencies and matrix pinouts.
+
+Make examples for this keyboard (after setting up your build environment):
+
+ make woodkeys/meira/featherble:default # for Feather BLE 32u4 controllers
+ make woodkeys/meira/promicro:default # for Pro Micro controllers
+
+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).
+
+Both the Pro Micro and the Feather BLE use the Caterina bootloader, which is typically programmed using avrdude.
+
+## Matrix
+
+In order to have enough pins for the matrix and other functions, a custom matrix is implemented using a demultiplexer to scan the columns. Since the demux is active low, the diodes must be oriented with the cathode connected to the demux pin. When looking at the bottom of the board with the controller at the top right, the cathode mark on the diode should be toward the left.
+
+## LED Controller
+
+The in-switch LEDs are driven by an ISSI LED controller (IS31FL3731). The micro controller communicates with this chip using I2C. Individual LED control is possible, but currently only general backlighting support is implemented. This functionality is located in lighting.c, issi.c, and TWILib.c.
diff --git a/keyboards/woodkeys/meira/rules.mk b/keyboards/woodkeys/meira/rules.mk
new file mode 100644
index 0000000000..6b5025500c
--- /dev/null
+++ b/keyboards/woodkeys/meira/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality, also set ISSI_ENABLE below for Meira
+BACKLIGHT_DRIVER = custom
+ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+CUSTOM_MATRIX = yes
+
+#ifeq ($(strip $(ISSI_ENABLE)), yes)
+# TMK_COMMON_DEFS += -DISSI_ENABLE
+#endif
+
+#ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
+# TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
+#endif
+SRC += matrix.c TWIlib.c issi.c lighting.c
+
+DEFAULT_FOLDER = woodkeys/meira/promicro
+LAYOUTS = ortho_4x12
diff --git a/keyboards/scarletbandana/config.h b/keyboards/woodkeys/scarletbandana/config.h
index b9c8dd9b0f..b9c8dd9b0f 100644
--- a/keyboards/scarletbandana/config.h
+++ b/keyboards/woodkeys/scarletbandana/config.h
diff --git a/keyboards/scarletbandana/info.json b/keyboards/woodkeys/scarletbandana/info.json
index c700093194..c700093194 100644
--- a/keyboards/scarletbandana/info.json
+++ b/keyboards/woodkeys/scarletbandana/info.json
diff --git a/keyboards/scarletbandana/keymaps/default/keymap.c b/keyboards/woodkeys/scarletbandana/keymaps/default/keymap.c
index 7b2687a607..7b2687a607 100644
--- a/keyboards/scarletbandana/keymaps/default/keymap.c
+++ b/keyboards/woodkeys/scarletbandana/keymaps/default/keymap.c
diff --git a/keyboards/scarletbandana/keymaps/default/readme.md b/keyboards/woodkeys/scarletbandana/keymaps/default/readme.md
index c2c281fe35..c2c281fe35 100644
--- a/keyboards/scarletbandana/keymaps/default/readme.md
+++ b/keyboards/woodkeys/scarletbandana/keymaps/default/readme.md
diff --git a/keyboards/woodkeys/scarletbandana/readme.md b/keyboards/woodkeys/scarletbandana/readme.md
new file mode 100644
index 0000000000..4505fd0573
--- /dev/null
+++ b/keyboards/woodkeys/scarletbandana/readme.md
@@ -0,0 +1,11 @@
+# Scarlet Bandana Version IV Mark 2
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham)
+Hardware Supported: Scarlet Bandana Version IV Mark 2
+Hardware Availability: [WoodKeys.click](https://woodkeys.click/product/scarlet-bandana-version-iv-mark-2/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make woodkeys/scarletbandana:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/scarletbandana/rules.mk b/keyboards/woodkeys/scarletbandana/rules.mk
index a6313e3b41..a6313e3b41 100644
--- a/keyboards/scarletbandana/rules.mk
+++ b/keyboards/woodkeys/scarletbandana/rules.mk
diff --git a/keyboards/scarletbandana/scarletbandana.c b/keyboards/woodkeys/scarletbandana/scarletbandana.c
index 6ef183c2cc..6ef183c2cc 100644
--- a/keyboards/scarletbandana/scarletbandana.c
+++ b/keyboards/woodkeys/scarletbandana/scarletbandana.c
diff --git a/keyboards/scarletbandana/scarletbandana.h b/keyboards/woodkeys/scarletbandana/scarletbandana.h
index 8178e8c8dc..8178e8c8dc 100644
--- a/keyboards/scarletbandana/scarletbandana.h
+++ b/keyboards/woodkeys/scarletbandana/scarletbandana.h
diff --git a/keyboards/work_louder/work_board/work_board.c b/keyboards/work_louder/work_board/work_board.c
index 7a8edc1a9e..d25ea0cdba 100644
--- a/keyboards/work_louder/work_board/work_board.c
+++ b/keyboards/work_louder/work_board/work_board.c
@@ -100,15 +100,15 @@ led_config_t g_led_config = { {
} };
// clang-format on
+# ifdef VIA_ENABLE
+bool via_layout_2u = false;
+
+void via_set_layout_options_kb(uint32_t value) { via_layout_2u = (bool)value; }
+# endif // VIA_ENABLE
+
__attribute__((weak)) void rgb_matrix_indicators_user(void) {
# ifdef VIA_ENABLE
- static bool layout_2u = false;
- static uint16_t timer = 0;
- if (timer_elapsed(timer) > 500) {
- timer = timer_read();
- layout_2u = (bool)via_get_layout_options();
- }
- if (layout_2u) {
+ if (via_layout_2u) {
rgb_matrix_set_color(5, 0, 0, 0);
rgb_matrix_set_color(7, 0, 0, 0);
} else {
diff --git a/keyboards/wren/rules.mk b/keyboards/wren/rules.mk
index 76e0fdf55d..7fa6b51f4b 100644
--- a/keyboards/wren/rules.mk
+++ b/keyboards/wren/rules.mk
@@ -12,10 +12,9 @@ MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
+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 # Enables the use of one or more encoders
-SPLIT_KEYBOARD = yes # Enables split keyboard
+ENCODER_ENABLE = yes # Enables the use of one or more encoders
+SPLIT_KEYBOARD = yes # Enables split keyboard
diff --git a/keyboards/xiaomi/mk02/rules.mk b/keyboards/xiaomi/mk02/rules.mk
index 9d6d62c394..c20d67dd89 100644
--- a/keyboards/xiaomi/mk02/rules.mk
+++ b/keyboards/xiaomi/mk02/rules.mk
@@ -3,6 +3,9 @@ MCU = STM32F072
BOARD = ST_STM32F072B_DISCOVERY
MCU_LDSCRIPT = STM32F072_0x2000_bootloader
+# Bootloader selection
+BOOTLOADER = custom
+
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08002000:leave
DFU_SUFFIX_ARGS = -v 0483 -p DF11
diff --git a/keyboards/xiudi/xd002/rules.mk b/keyboards/xiudi/xd002/rules.mk
index 77dd994783..70c620c8f0 100644
--- a/keyboards/xiudi/xd002/rules.mk
+++ b/keyboards/xiudi/xd002/rules.mk
@@ -2,7 +2,7 @@
MCU = attiny85
# Bootloader selection
-BOOTLOADER = micronucleus
+BOOTLOADER = custom
OPT_DEFS += -DBOOTLOADER_SIZE=1862
PROGRAM_CMD = micronucleus --run $(BUILD_DIR)/$(TARGET).hex
diff --git a/keyboards/xiudi/xd84/matrix.c b/keyboards/xiudi/xd84/matrix.c
index 92b8ff8546..04128561ee 100644
--- a/keyboards/xiudi/xd84/matrix.c
+++ b/keyboards/xiudi/xd84/matrix.c
@@ -53,7 +53,8 @@ static void select_row(uint8_t row) {
static uint16_t read_cols(void) {
// uint16_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
// uint16_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
- uint16_t state = pca9555_readAllPins(IC2);
+ uint16_t state = 0;
+ pca9555_readPins_all(IC2, &state);
// For the XD84 all cols are on the same IC and mapped sequentially
// while this technically gives 16 column reads,
diff --git a/keyboards/xiudi/xd96/matrix.c b/keyboards/xiudi/xd96/matrix.c
index 8cecc79c26..beef7fae12 100644
--- a/keyboards/xiudi/xd96/matrix.c
+++ b/keyboards/xiudi/xd96/matrix.c
@@ -50,13 +50,16 @@ static void select_row(uint8_t row) {
}
static uint32_t read_cols(void) {
- uint32_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
- uint32_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
- uint32_t state_3 = pca9555_readPins(IC1, PCA9555_PORT1);
+ uint8_t state_1 = 0;
+ uint8_t state_2 = 0;
+ uint8_t state_3 = 0;
+ pca9555_readPins(IC2, PCA9555_PORT0, &state_1);
+ pca9555_readPins(IC2, PCA9555_PORT1, &state_2);
+ pca9555_readPins(IC1, PCA9555_PORT1, &state_3);
// For the XD96 the pins are mapped to port expanders as follows:
// all 8 pins port 0 IC2, first 6 pins port 1 IC2, first 4 pins port 1 IC1
- uint32_t state = (((state_3 & 0b00001111) << 14) | ((state_2 & 0b00111111) << 8) | state_1);
+ uint32_t state = ((((uint32_t)state_3 & 0b00001111) << 14) | (((uint32_t)state_2 & 0b00111111) << 8) | (uint32_t)state_1);
return (~state) & 0b111111111111111111;
}
diff --git a/keyboards/yanghu/unicorne/config.h b/keyboards/yanghu/unicorne/config.h
index 652afeb3b4..27d21c7906 100644
--- a/keyboards/yanghu/unicorne/config.h
+++ b/keyboards/yanghu/unicorne/config.h
@@ -42,6 +42,12 @@
#define ENCODERS_PAD_B \
{ B12, B0 }
+/* I2C - required for custom i2c_init */
+#define I2C1_SCL_PIN B6
+#define I2C1_SDA_PIN B7
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_SDA_PAL_MODE 4
+
/* Audio */
#define AUDIO_PIN A8
#define AUDIO_PWM_PAL_MODE 1
diff --git a/keyboards/yasui/readme.md b/keyboards/yasui/readme.md
deleted file mode 100644
index dfc20bbe6b..0000000000
--- a/keyboards/yasui/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Yasui
-
-![Yasui](https://i.imgur.com/TRFOEkw.png)
-
-A 10u ortho kit.
-
-* Keyboard Maintainer: Rain
-* Hardware Supported: Yasui PCB v2
-* Hardware Availability: [rainkeebs](https://www.rainkeebs.mx/product/yasui-keyboard-kit)
-
-
-Make example for this keyboard (after setting up your build environment):
-
- qmk compile -kb yasui -kb default
-
-To reset the keyboard, hold the top left key while plugging in, or hit the reset button near the USB port
-
-Install example for this keyboard:
-
- qmk flash -kb yasui -km default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/yd60mq/readme.md b/keyboards/yd60mq/readme.md
deleted file mode 100644
index 32073da631..0000000000
--- a/keyboards/yd60mq/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# YD60MQ
-
-![YD60MQ PCB](https://ae01.alicdn.com/kf/HTB1PVQ2X_HuK1RkSndVq6xVwpXaO.jpg)
-
-Customizable 60% PCB by [YMDK](https://ymdk.aliexpress.com/store/429151?spm=2114.10010108.0.0.3ab23641lIkgzm).
-
-* Keyboard Maintainer: QMK Community
-* Hardware Supported: YD60MQ PCB
- * 12led (unknown revision number, has 12 RGB LEDs on the back) – _default variant_
- * 16led (unknown revision number, has 16 RGB LEDs on the back)
-* Hardware Availability: [YMDK on AliExpress](https://www.aliexpress.com/i/32869207240.html)
-
-Make example for this keyboard (after setting up your build environment):
-
-```sh
-make yd60mq:default # builds the 12 LED variant
-make yd60mq/12led:default # also builds the 12 LED variant
-make yd60mq/16led:default # builds the 16 LED variant
-```
-
-The keyboard uses a DFU bootloader. To make a keymap and use dfu to flash it:
-
-```sh
-make yd60mq:default:flash # builds and flashes the 12 LED variant
-make yd60mq/12led:default:flash # also builds and flashes the 12 LED variant
-make yd60mq/16led:default:flash # builds and flashes the 16 LED variant
-```
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/yd60mq/rules.mk b/keyboards/yd60mq/rules.mk
deleted file mode 100644
index 824b053a88..0000000000
--- a/keyboards/yd60mq/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# 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 = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_ansi_tsangan 60_hhkb 60_iso 60_iso_split_bs_rshift 60_iso_tsangan
-
-DEFAULT_FOLDER = yd60mq/12led
diff --git a/keyboards/yd68/readme.md b/keyboards/yd68/readme.md
deleted file mode 100644
index 7e5e83bcc9..0000000000
--- a/keyboards/yd68/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# yd68
-
-[yd68](https://imgur.com/gallery/Ygo668L)
-
-A 68-key board with RGB underlighting and bluetooth.
-
-Keyboard Maintainer: [Izzy84075](https://github.com/izzy84075)
-Hardware Supported: YD68/YD68v2
-Hardware Availability: [KBDFans](https://kbdfans.cn/collections/diy-kit/products/yd68-65-bluetooth-custom-keyboard-pcb)
-
-Make example for this keyboard (after setting up your build environment):
-
- make yd68:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chili/chili.c b/keyboards/ydkb/chili/chili.c
index f629a6d60a..f629a6d60a 100644
--- a/keyboards/chili/chili.c
+++ b/keyboards/ydkb/chili/chili.c
diff --git a/keyboards/chili/chili.h b/keyboards/ydkb/chili/chili.h
index f5e1444b94..f5e1444b94 100644
--- a/keyboards/chili/chili.h
+++ b/keyboards/ydkb/chili/chili.h
diff --git a/keyboards/chili/config.h b/keyboards/ydkb/chili/config.h
index 13bd700363..13bd700363 100644
--- a/keyboards/chili/config.h
+++ b/keyboards/ydkb/chili/config.h
diff --git a/keyboards/chili/info.json b/keyboards/ydkb/chili/info.json
index 8e92d83de0..8e92d83de0 100644
--- a/keyboards/chili/info.json
+++ b/keyboards/ydkb/chili/info.json
diff --git a/keyboards/chili/keymaps/default/keymap.c b/keyboards/ydkb/chili/keymaps/default/keymap.c
index 32ac9a066d..32ac9a066d 100644
--- a/keyboards/chili/keymaps/default/keymap.c
+++ b/keyboards/ydkb/chili/keymaps/default/keymap.c
diff --git a/keyboards/chili/keymaps/via/keymap.c b/keyboards/ydkb/chili/keymaps/via/keymap.c
index 9d5cdd303f..9d5cdd303f 100644
--- a/keyboards/chili/keymaps/via/keymap.c
+++ b/keyboards/ydkb/chili/keymaps/via/keymap.c
diff --git a/keyboards/wings42/rev1/keymaps/via/rules.mk b/keyboards/ydkb/chili/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/wings42/rev1/keymaps/via/rules.mk
+++ b/keyboards/ydkb/chili/keymaps/via/rules.mk
diff --git a/keyboards/ydkb/chili/readme.md b/keyboards/ydkb/chili/readme.md
new file mode 100644
index 0000000000..c7be92b9e5
--- /dev/null
+++ b/keyboards/ydkb/chili/readme.md
@@ -0,0 +1,15 @@
+# YDKB Chili
+
+[Chili PCB](https://i.imgur.com/fKi896a.jpg)
+
+The YDKB Chili is a Cherry G80-3000 replacement PCB utilizing the ATmega32U4 microcontroller.
+
+* Keyboard Maintainer: QMK community
+* Hardware Supported: YDKB Chili
+* Hardware Availability: [TaoBao](https://item.taobao.com/item.htm?id=565823984744)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ydkb/chili:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chili/rules.mk b/keyboards/ydkb/chili/rules.mk
index 31559786a6..31559786a6 100644
--- a/keyboards/chili/rules.mk
+++ b/keyboards/ydkb/chili/rules.mk
diff --git a/keyboards/just60/config.h b/keyboards/ydkb/just60/config.h
index b2ff156310..b2ff156310 100644
--- a/keyboards/just60/config.h
+++ b/keyboards/ydkb/just60/config.h
diff --git a/keyboards/just60/info.json b/keyboards/ydkb/just60/info.json
index 5f42033845..5f42033845 100644
--- a/keyboards/just60/info.json
+++ b/keyboards/ydkb/just60/info.json
diff --git a/keyboards/just60/just60.h b/keyboards/ydkb/just60/just60.h
index 426324fe02..426324fe02 100644
--- a/keyboards/just60/just60.h
+++ b/keyboards/ydkb/just60/just60.h
diff --git a/keyboards/just60/keymaps/default/keymap.c b/keyboards/ydkb/just60/keymaps/default/keymap.c
index da034e0e44..da034e0e44 100644
--- a/keyboards/just60/keymaps/default/keymap.c
+++ b/keyboards/ydkb/just60/keymaps/default/keymap.c
diff --git a/keyboards/just60/keymaps/default/readme.md b/keyboards/ydkb/just60/keymaps/default/readme.md
index 927618c910..927618c910 100644
--- a/keyboards/just60/keymaps/default/readme.md
+++ b/keyboards/ydkb/just60/keymaps/default/readme.md
diff --git a/keyboards/just60/keymaps/thinxer/keymap.c b/keyboards/ydkb/just60/keymaps/thinxer/keymap.c
index da034e0e44..da034e0e44 100644
--- a/keyboards/just60/keymaps/thinxer/keymap.c
+++ b/keyboards/ydkb/just60/keymaps/thinxer/keymap.c
diff --git a/keyboards/just60/keymaps/thinxer/readme.md b/keyboards/ydkb/just60/keymaps/thinxer/readme.md
index 9cd12c192f..9cd12c192f 100644
--- a/keyboards/just60/keymaps/thinxer/readme.md
+++ b/keyboards/ydkb/just60/keymaps/thinxer/readme.md
diff --git a/keyboards/just60/keymaps/thinxer/rules.mk b/keyboards/ydkb/just60/keymaps/thinxer/rules.mk
index 0613ea8667..0613ea8667 100644
--- a/keyboards/just60/keymaps/thinxer/rules.mk
+++ b/keyboards/ydkb/just60/keymaps/thinxer/rules.mk
diff --git a/keyboards/ydkb/just60/readme.md b/keyboards/ydkb/just60/readme.md
new file mode 100644
index 0000000000..1fe05bd3ea
--- /dev/null
+++ b/keyboards/ydkb/just60/readme.md
@@ -0,0 +1,17 @@
+# Just60
+
+Just60 keyboard produced by Yang. The keyboard comes with a custom Mass Storage Device bootloader and a TMK based firmware from ydkb.io.
+
+To use a QMK based firmware, you might want to install a QMK bootloader. The PCB exposes 6 pins for ISP(In-System Programming), and they are located just under the ATMega32U4 chip. From left to right, the pins are `VCC`, `SCLK`, `MOSI`, `MISO`, `RESET`, `GND`. The `GND` is the square one. You could program the flash with any AVR programmer, or a Raspberry Pi with `avrdude`.
+
+Backlight LEDs and Bluetooth are not working yet.
+
+* Keyboard Maintainer: [Jianfei Wang](https://github.com/thinxer)
+* Hardware Supported: Just60 (atmega32u4)
+* Hardware Availability: https://item.taobao.com/item.htm?id=564176654249
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ydkb/just60:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/just60/rules.mk b/keyboards/ydkb/just60/rules.mk
index 7323e8f1e2..7323e8f1e2 100644
--- a/keyboards/just60/rules.mk
+++ b/keyboards/ydkb/just60/rules.mk
diff --git a/keyboards/yd68/config.h b/keyboards/ydkb/yd68/config.h
index a501a98476..a501a98476 100644
--- a/keyboards/yd68/config.h
+++ b/keyboards/ydkb/yd68/config.h
diff --git a/keyboards/yd68/info.json b/keyboards/ydkb/yd68/info.json
index 8797620557..8797620557 100644
--- a/keyboards/yd68/info.json
+++ b/keyboards/ydkb/yd68/info.json
diff --git a/keyboards/yd68/keymaps/default/keymap.c b/keyboards/ydkb/yd68/keymaps/default/keymap.c
index c8b49c76a3..c8b49c76a3 100644
--- a/keyboards/yd68/keymaps/default/keymap.c
+++ b/keyboards/ydkb/yd68/keymaps/default/keymap.c
diff --git a/keyboards/yd68/keymaps/default/readme.md b/keyboards/ydkb/yd68/keymaps/default/readme.md
index 877e64f18b..877e64f18b 100644
--- a/keyboards/yd68/keymaps/default/readme.md
+++ b/keyboards/ydkb/yd68/keymaps/default/readme.md
diff --git a/keyboards/ydkb/yd68/readme.md b/keyboards/ydkb/yd68/readme.md
new file mode 100644
index 0000000000..2632e8e9f8
--- /dev/null
+++ b/keyboards/ydkb/yd68/readme.md
@@ -0,0 +1,15 @@
+# yd68
+
+[yd68](https://imgur.com/gallery/Ygo668L)
+
+A 68-key board with RGB underlighting and bluetooth.
+
+Keyboard Maintainer: [Izzy84075](https://github.com/izzy84075)
+Hardware Supported: YD68/YD68v2
+Hardware Availability: [KBDFans](https://kbdfans.cn/collections/diy-kit/products/yd68-65-bluetooth-custom-keyboard-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ydkb/yd68:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/yd68/rules.mk b/keyboards/ydkb/yd68/rules.mk
index 561e8f4ca1..561e8f4ca1 100644
--- a/keyboards/yd68/rules.mk
+++ b/keyboards/ydkb/yd68/rules.mk
diff --git a/keyboards/yd68/yd68.c b/keyboards/ydkb/yd68/yd68.c
index 22f75f7f81..22f75f7f81 100644
--- a/keyboards/yd68/yd68.c
+++ b/keyboards/ydkb/yd68/yd68.c
diff --git a/keyboards/yd68/yd68.h b/keyboards/ydkb/yd68/yd68.h
index 3303bd899e..3303bd899e 100644
--- a/keyboards/yd68/yd68.h
+++ b/keyboards/ydkb/yd68/yd68.h
diff --git a/keyboards/barleycorn/barleycorn.c b/keyboards/yiancardesigns/barleycorn/barleycorn.c
index 4d555de195..4d555de195 100644
--- a/keyboards/barleycorn/barleycorn.c
+++ b/keyboards/yiancardesigns/barleycorn/barleycorn.c
diff --git a/keyboards/barleycorn/barleycorn.h b/keyboards/yiancardesigns/barleycorn/barleycorn.h
index 0b266feaed..0b266feaed 100644
--- a/keyboards/barleycorn/barleycorn.h
+++ b/keyboards/yiancardesigns/barleycorn/barleycorn.h
diff --git a/keyboards/barleycorn/config.h b/keyboards/yiancardesigns/barleycorn/config.h
index 77714a87fc..77714a87fc 100644
--- a/keyboards/barleycorn/config.h
+++ b/keyboards/yiancardesigns/barleycorn/config.h
diff --git a/keyboards/barleycorn/info.json b/keyboards/yiancardesigns/barleycorn/info.json
index 293f321b2c..293f321b2c 100644
--- a/keyboards/barleycorn/info.json
+++ b/keyboards/yiancardesigns/barleycorn/info.json
diff --git a/keyboards/barleycorn/keymaps/default/keymap.c b/keyboards/yiancardesigns/barleycorn/keymaps/default/keymap.c
index 230b78e991..230b78e991 100644
--- a/keyboards/barleycorn/keymaps/default/keymap.c
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/default/keymap.c
diff --git a/keyboards/barleycorn/keymaps/default/readme.md b/keyboards/yiancardesigns/barleycorn/keymaps/default/readme.md
index 04903f8cc9..04903f8cc9 100644
--- a/keyboards/barleycorn/keymaps/default/readme.md
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/default/readme.md
diff --git a/keyboards/barleycorn/keymaps/iso/keymap.c b/keyboards/yiancardesigns/barleycorn/keymaps/iso/keymap.c
index 7fd4d06969..7fd4d06969 100644
--- a/keyboards/barleycorn/keymaps/iso/keymap.c
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/iso/keymap.c
diff --git a/keyboards/barleycorn/keymaps/iso/readme.md b/keyboards/yiancardesigns/barleycorn/keymaps/iso/readme.md
index 492abfcecc..492abfcecc 100644
--- a/keyboards/barleycorn/keymaps/iso/readme.md
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/iso/readme.md
diff --git a/keyboards/barleycorn/keymaps/via/keymap.c b/keyboards/yiancardesigns/barleycorn/keymaps/via/keymap.c
index 90ce60d1ea..90ce60d1ea 100644
--- a/keyboards/barleycorn/keymaps/via/keymap.c
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/via/keymap.c
diff --git a/keyboards/barleycorn/keymaps/via/readme.md b/keyboards/yiancardesigns/barleycorn/keymaps/via/readme.md
index b82bc8e79f..b82bc8e79f 100644
--- a/keyboards/barleycorn/keymaps/via/readme.md
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/via/readme.md
diff --git a/keyboards/wings42/rev1_extkeys/keymaps/via/rules.mk b/keyboards/yiancardesigns/barleycorn/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/wings42/rev1_extkeys/keymaps/via/rules.mk
+++ b/keyboards/yiancardesigns/barleycorn/keymaps/via/rules.mk
diff --git a/keyboards/barleycorn/matrix.c b/keyboards/yiancardesigns/barleycorn/matrix.c
index 99366d6098..99366d6098 100644
--- a/keyboards/barleycorn/matrix.c
+++ b/keyboards/yiancardesigns/barleycorn/matrix.c
diff --git a/keyboards/yiancardesigns/barleycorn/readme.md b/keyboards/yiancardesigns/barleycorn/readme.md
new file mode 100644
index 0000000000..c98be3e042
--- /dev/null
+++ b/keyboards/yiancardesigns/barleycorn/readme.md
@@ -0,0 +1,23 @@
+# Barleycorn
+
+![Barleycorn](https://i.imgur.com/vi3L1HYl.png)
+
+An f-row less compact 1800 kit with only through hole components.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/barleycorn_pcb)
+* Hardware Availability: https://mykeyboard.eu/, https://novelkeys.xyz
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yiancardesigns/barleycorn:default
+
+Flashing example for this keyboard:
+
+ make yiancardesigns/barleycorn:default:flash
+
+Bootloader:
+use usbasploader from HSGW's repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/barleycorn/rules.mk b/keyboards/yiancardesigns/barleycorn/rules.mk
index c7d4310cb2..c7d4310cb2 100644
--- a/keyboards/barleycorn/rules.mk
+++ b/keyboards/yiancardesigns/barleycorn/rules.mk
diff --git a/keyboards/gingham/config.h b/keyboards/yiancardesigns/gingham/config.h
index 62f25b06c9..62f25b06c9 100644
--- a/keyboards/gingham/config.h
+++ b/keyboards/yiancardesigns/gingham/config.h
diff --git a/keyboards/gingham/gingham.c b/keyboards/yiancardesigns/gingham/gingham.c
index 9a5ffe4530..9a5ffe4530 100644
--- a/keyboards/gingham/gingham.c
+++ b/keyboards/yiancardesigns/gingham/gingham.c
diff --git a/keyboards/gingham/gingham.h b/keyboards/yiancardesigns/gingham/gingham.h
index a9785b5416..a9785b5416 100644
--- a/keyboards/gingham/gingham.h
+++ b/keyboards/yiancardesigns/gingham/gingham.h
diff --git a/keyboards/gingham/info.json b/keyboards/yiancardesigns/gingham/info.json
index 0f9e81decc..0f9e81decc 100644
--- a/keyboards/gingham/info.json
+++ b/keyboards/yiancardesigns/gingham/info.json
diff --git a/keyboards/gingham/keymaps/codecoffeecode/keymap.c b/keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/keymap.c
index 5c3891845d..5c3891845d 100644
--- a/keyboards/gingham/keymaps/codecoffeecode/keymap.c
+++ b/keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/keymap.c
diff --git a/keyboards/gingham/keymaps/codecoffeecode/readme.md b/keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/readme.md
index 6f6dbfc859..6f6dbfc859 100644
--- a/keyboards/gingham/keymaps/codecoffeecode/readme.md
+++ b/keyboards/yiancardesigns/gingham/keymaps/codecoffeecode/readme.md
diff --git a/keyboards/gingham/keymaps/default/keymap.c b/keyboards/yiancardesigns/gingham/keymaps/default/keymap.c
index f54d6d8bdc..f54d6d8bdc 100644
--- a/keyboards/gingham/keymaps/default/keymap.c
+++ b/keyboards/yiancardesigns/gingham/keymaps/default/keymap.c
diff --git a/keyboards/gingham/keymaps/default/readme.md b/keyboards/yiancardesigns/gingham/keymaps/default/readme.md
index 2f3372492e..2f3372492e 100644
--- a/keyboards/gingham/keymaps/default/readme.md
+++ b/keyboards/yiancardesigns/gingham/keymaps/default/readme.md
diff --git a/keyboards/gingham/keymaps/iso/keymap.c b/keyboards/yiancardesigns/gingham/keymaps/iso/keymap.c
index 6aae0ccf36..6aae0ccf36 100644
--- a/keyboards/gingham/keymaps/iso/keymap.c
+++ b/keyboards/yiancardesigns/gingham/keymaps/iso/keymap.c
diff --git a/keyboards/gingham/keymaps/iso/readme.md b/keyboards/yiancardesigns/gingham/keymaps/iso/readme.md
index cd29c28900..cd29c28900 100644
--- a/keyboards/gingham/keymaps/iso/readme.md
+++ b/keyboards/yiancardesigns/gingham/keymaps/iso/readme.md
diff --git a/keyboards/gingham/keymaps/via/keymap.c b/keyboards/yiancardesigns/gingham/keymaps/via/keymap.c
index f303449739..f303449739 100644
--- a/keyboards/gingham/keymaps/via/keymap.c
+++ b/keyboards/yiancardesigns/gingham/keymaps/via/keymap.c
diff --git a/keyboards/gingham/keymaps/via/readme.md b/keyboards/yiancardesigns/gingham/keymaps/via/readme.md
index b82bc8e79f..b82bc8e79f 100644
--- a/keyboards/gingham/keymaps/via/readme.md
+++ b/keyboards/yiancardesigns/gingham/keymaps/via/readme.md
diff --git a/keyboards/yasui/keymaps/via/rules.mk b/keyboards/yiancardesigns/gingham/keymaps/via/rules.mk
index 1e5b99807c..1e5b99807c 100644
--- a/keyboards/yasui/keymaps/via/rules.mk
+++ b/keyboards/yiancardesigns/gingham/keymaps/via/rules.mk
diff --git a/keyboards/gingham/matrix.c b/keyboards/yiancardesigns/gingham/matrix.c
index 47c8830565..47c8830565 100644
--- a/keyboards/gingham/matrix.c
+++ b/keyboards/yiancardesigns/gingham/matrix.c
diff --git a/keyboards/yiancardesigns/gingham/readme.md b/keyboards/yiancardesigns/gingham/readme.md
new file mode 100644
index 0000000000..994fcaac55
--- /dev/null
+++ b/keyboards/yiancardesigns/gingham/readme.md
@@ -0,0 +1,23 @@
+# Gingham
+
+![gingham](https://yiancar-designs.com/wp-content/uploads/2019/06/IMG_20190625_233619.jpg)
+
+A 60% keyboard with only through hole components.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/gingham_pcb)
+Hardware Availability: https://yiancar-designs.com/, https://novelkeys.xyz, https://mechboards.co.uk/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yiancardesigns/gingham:default
+
+Flashing example for this keyboard:
+
+ make yiancardesigns/gingham:default:flash
+
+Bootloader:
+use usbasploader HSGW's my repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/gingham/rules.mk b/keyboards/yiancardesigns/gingham/rules.mk
index 977d9b9d81..977d9b9d81 100644
--- a/keyboards/gingham/rules.mk
+++ b/keyboards/yiancardesigns/gingham/rules.mk
diff --git a/keyboards/seigaiha/config.h b/keyboards/yiancardesigns/seigaiha/config.h
index 5e87bd6f83..5e87bd6f83 100644
--- a/keyboards/seigaiha/config.h
+++ b/keyboards/yiancardesigns/seigaiha/config.h
diff --git a/keyboards/seigaiha/info.json b/keyboards/yiancardesigns/seigaiha/info.json
index 09bc2d09d0..09bc2d09d0 100644
--- a/keyboards/seigaiha/info.json
+++ b/keyboards/yiancardesigns/seigaiha/info.json
diff --git a/keyboards/seigaiha/keymaps/default/keymap.c b/keyboards/yiancardesigns/seigaiha/keymaps/default/keymap.c
index 607d85a132..607d85a132 100644
--- a/keyboards/seigaiha/keymaps/default/keymap.c
+++ b/keyboards/yiancardesigns/seigaiha/keymaps/default/keymap.c
diff --git a/keyboards/seigaiha/keymaps/default/readme.md b/keyboards/yiancardesigns/seigaiha/keymaps/default/readme.md
index dceb6080e4..dceb6080e4 100644
--- a/keyboards/seigaiha/keymaps/default/readme.md
+++ b/keyboards/yiancardesigns/seigaiha/keymaps/default/readme.md
diff --git a/keyboards/seigaiha/keymaps/via/keymap.c b/keyboards/yiancardesigns/seigaiha/keymaps/via/keymap.c
index 00f1b01501..00f1b01501 100644
--- a/keyboards/seigaiha/keymaps/via/keymap.c
+++ b/keyboards/yiancardesigns/seigaiha/keymaps/via/keymap.c
diff --git a/keyboards/seigaiha/keymaps/via/readme.md b/keyboards/yiancardesigns/seigaiha/keymaps/via/readme.md
index 8f626d49e3..8f626d49e3 100644
--- a/keyboards/seigaiha/keymaps/via/readme.md
+++ b/keyboards/yiancardesigns/seigaiha/keymaps/via/readme.md
diff --git a/keyboards/yiancardesigns/seigaiha/keymaps/via/rules.mk b/keyboards/yiancardesigns/seigaiha/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/yiancardesigns/seigaiha/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/seigaiha/matrix.c b/keyboards/yiancardesigns/seigaiha/matrix.c
index 212b8015f0..212b8015f0 100644
--- a/keyboards/seigaiha/matrix.c
+++ b/keyboards/yiancardesigns/seigaiha/matrix.c
diff --git a/keyboards/yiancardesigns/seigaiha/readme.md b/keyboards/yiancardesigns/seigaiha/readme.md
new file mode 100644
index 0000000000..8c81723563
--- /dev/null
+++ b/keyboards/yiancardesigns/seigaiha/readme.md
@@ -0,0 +1,23 @@
+# Seigaiha
+
+![Seigaiha](https://i.imgur.com/GCGyOmph.jpg)
+
+An alice layout kit with only through hole components.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/seigaiha_pcb)
+* Hardware Availability: https://mykeyboard.eu/, https://novelkeys.xyz
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yiancardesigns/seigaiha:default
+
+Flashing example for this keyboard:
+
+ make yiancardesigns/seigaiha:default:flash
+
+Bootloader:
+use usbasploader from HSGW's repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/seigaiha/rules.mk b/keyboards/yiancardesigns/seigaiha/rules.mk
index 0e494f8488..0e494f8488 100644
--- a/keyboards/seigaiha/rules.mk
+++ b/keyboards/yiancardesigns/seigaiha/rules.mk
diff --git a/keyboards/seigaiha/seigaiha.c b/keyboards/yiancardesigns/seigaiha/seigaiha.c
index 911034eb56..911034eb56 100644
--- a/keyboards/seigaiha/seigaiha.c
+++ b/keyboards/yiancardesigns/seigaiha/seigaiha.c
diff --git a/keyboards/seigaiha/seigaiha.h b/keyboards/yiancardesigns/seigaiha/seigaiha.h
index e05c6f5242..e05c6f5242 100644
--- a/keyboards/seigaiha/seigaiha.h
+++ b/keyboards/yiancardesigns/seigaiha/seigaiha.h
diff --git a/keyboards/ymd75/readme.md b/keyboards/ymd75/readme.md
deleted file mode 100644
index 99e9f656c0..0000000000
--- a/keyboards/ymd75/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# YMD75 / MT84
-
-75% keyboard from YMDK. YMDK sell the board and name it "YMD75", however revision 1 of the PCB has "MT84" printed on both sides.
-
-This firmware can also be flashed onto the KBDFans KBD75 Round 2 Bootmapper Client boards sold during the mid-2018 timeframe.
-
-* Keyboard Maintainer: [Wayne K Jones](github.com/WarmCatUK)
-* Hardware Supported:
- - rev1 (ATmega32a)
- - rev2 (ATmega32a)
- - rev3 (ATmega32u4)
-* Hardware Availability: <https://www.aliexpress.com/item/32812690592.html>
-
-Make example for this keyboard (after setting up your build environment):
-
- make ymd75/rev1:default
-
-Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-
- make ymd75/rev1:default:flash
-
-**Reset Key**: Hold down the key located at *Key below the top right key*, commonly programmed as *Backspace* while plugging in the keyboard. On PCB revision 2, enter the bootloader by holding `L_CTRL` while plugging in the keyboard.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymd75/rules.mk b/keyboards/ymd75/rules.mk
deleted file mode 100644
index 756d20c54c..0000000000
--- a/keyboards/ymd75/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = ymd75/rev1
diff --git a/keyboards/ymd75/ymd75.h b/keyboards/ymd75/ymd75.h
deleted file mode 100644
index 134f08060f..0000000000
--- a/keyboards/ymd75/ymd75.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#if defined(KEYBOARD_ymd75_rev1)
- #include "rev1.h"
-#elif defined(KEYBOARD_ymd75_rev2)
- #include "rev2.h"
-#elif defined(KEYBOARD_ymd75_rev3)
- #include "rev3.h"
-#endif
diff --git a/keyboards/ymd96/readme.md b/keyboards/ymd96/readme.md
deleted file mode 100644
index 59d6b73379..0000000000
--- a/keyboards/ymd96/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# YMD96
-
-A 96-keyboard which supports both ANSI and ISO along with many different layout combinations, and RGB underglow.
-
-* Keyboard maintainer: [Andrew](https://github.com/sparkyman215)
-* Hardware Supported: YMD96 with the ATmega32a chip.
-* Hardware Availability: The GB was run June 2017, [in this thread](https://www.reddit.com/r/mechmarket/comments/6hu3yx/vendor_ymd96_gb_is_now_live_68_an_universal_and/). The vendor has stated that they plan on selling more rounds.
-
-Make example for this keyboard (after setting up your build environment):
-
- make ymd96:default
-
-Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-
- make ymd96:default:flash
-
-**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymdk_np21/config.h b/keyboards/ymdk/np21/config.h
index 83423792b0..83423792b0 100644
--- a/keyboards/ymdk_np21/config.h
+++ b/keyboards/ymdk/np21/config.h
diff --git a/keyboards/ymdk_np21/info.json b/keyboards/ymdk/np21/info.json
index 6a611d7a38..6a611d7a38 100644
--- a/keyboards/ymdk_np21/info.json
+++ b/keyboards/ymdk/np21/info.json
diff --git a/keyboards/ymdk_np21/keymaps/default/keymap.c b/keyboards/ymdk/np21/keymaps/default/keymap.c
index e15fb1d6eb..e15fb1d6eb 100644
--- a/keyboards/ymdk_np21/keymaps/default/keymap.c
+++ b/keyboards/ymdk/np21/keymaps/default/keymap.c
diff --git a/keyboards/ymdk_np21/keymaps/default/readme.md b/keyboards/ymdk/np21/keymaps/default/readme.md
index 3a4730f7e6..3a4730f7e6 100644
--- a/keyboards/ymdk_np21/keymaps/default/readme.md
+++ b/keyboards/ymdk/np21/keymaps/default/readme.md
diff --git a/keyboards/ymdk_np21/keymaps/via/keymap.c b/keyboards/ymdk/np21/keymaps/via/keymap.c
index b361414023..b361414023 100644
--- a/keyboards/ymdk_np21/keymaps/via/keymap.c
+++ b/keyboards/ymdk/np21/keymaps/via/keymap.c
diff --git a/keyboards/yd60mq/keymaps/via/rules.mk b/keyboards/ymdk/np21/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/yd60mq/keymaps/via/rules.mk
+++ b/keyboards/ymdk/np21/keymaps/via/rules.mk
diff --git a/keyboards/ymdk/np21/np21.c b/keyboards/ymdk/np21/np21.c
new file mode 100644
index 0000000000..824cfb0d1a
--- /dev/null
+++ b/keyboards/ymdk/np21/np21.c
@@ -0,0 +1,19 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2018 Kenneth A. <github.com/krusli>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "np21.h"
diff --git a/keyboards/ymdk_np21/ymdk_np21.h b/keyboards/ymdk/np21/np21.h
index 7434cf016d..7434cf016d 100644
--- a/keyboards/ymdk_np21/ymdk_np21.h
+++ b/keyboards/ymdk/np21/np21.h
diff --git a/keyboards/ymdk/np21/readme.md b/keyboards/ymdk/np21/readme.md
new file mode 100644
index 0000000000..e9eaad9b7b
--- /dev/null
+++ b/keyboards/ymdk/np21/readme.md
@@ -0,0 +1,21 @@
+# YMDK NP21
+
+![kp21 &mdash; full grid layout](https://ae01.alicdn.com/kf/HTB1d.txfHsTMeJjSszhq6AGCFXaF.jpg?size=35021&height=662&width=1000&hash=62b3a453686e2154dc51a7af67495e28)
+
+ps2avrGB based number-pad sold fully assembled by YMDK on Aliexpress.
+
+* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+* Hardware Supported: Atmega32A
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/21-Key-NPKC-Programmable-Cherry-MX-Kailh-Gateron-Switches-Mechanical-Keyboard-Numpad-Free-shipping/32812732361.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/np21:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make ymdk/np21:default:flash
+
+**Reset Key**: Hold down the 'Top Left Key' (USB on top) while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymdk_np21/rules.mk b/keyboards/ymdk/np21/rules.mk
index 7316ceff6d..7316ceff6d 100644
--- a/keyboards/ymdk_np21/rules.mk
+++ b/keyboards/ymdk/np21/rules.mk
diff --git a/keyboards/yd60mq/12led/config.h b/keyboards/ymdk/yd60mq/12led/config.h
index dde57aafec..dde57aafec 100644
--- a/keyboards/yd60mq/12led/config.h
+++ b/keyboards/ymdk/yd60mq/12led/config.h
diff --git a/keyboards/yd60mq/12led/readme.md b/keyboards/ymdk/yd60mq/12led/readme.md
index 1170690615..1170690615 100644
--- a/keyboards/yd60mq/12led/readme.md
+++ b/keyboards/ymdk/yd60mq/12led/readme.md
diff --git a/keyboards/yd60mq/16led/rules.mk b/keyboards/ymdk/yd60mq/12led/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/yd60mq/16led/rules.mk
+++ b/keyboards/ymdk/yd60mq/12led/rules.mk
diff --git a/keyboards/yd60mq/16led/config.h b/keyboards/ymdk/yd60mq/16led/config.h
index 11ce3aeb27..11ce3aeb27 100644
--- a/keyboards/yd60mq/16led/config.h
+++ b/keyboards/ymdk/yd60mq/16led/config.h
diff --git a/keyboards/yd60mq/16led/readme.md b/keyboards/ymdk/yd60mq/16led/readme.md
index a03d6259e4..a03d6259e4 100644
--- a/keyboards/yd60mq/16led/readme.md
+++ b/keyboards/ymdk/yd60mq/16led/readme.md
diff --git a/keyboards/zinc/.noci b/keyboards/ymdk/yd60mq/16led/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/zinc/.noci
+++ b/keyboards/ymdk/yd60mq/16led/rules.mk
diff --git a/keyboards/yd60mq/config.h b/keyboards/ymdk/yd60mq/config.h
index 0cff43c888..0cff43c888 100644
--- a/keyboards/yd60mq/config.h
+++ b/keyboards/ymdk/yd60mq/config.h
diff --git a/keyboards/yd60mq/info.json b/keyboards/ymdk/yd60mq/info.json
index 98db8ac3f6..98db8ac3f6 100644
--- a/keyboards/yd60mq/info.json
+++ b/keyboards/ymdk/yd60mq/info.json
diff --git a/keyboards/yd60mq/keymaps/64key/keymap.c b/keyboards/ymdk/yd60mq/keymaps/64key/keymap.c
index 3c27f14d11..3c27f14d11 100644
--- a/keyboards/yd60mq/keymaps/64key/keymap.c
+++ b/keyboards/ymdk/yd60mq/keymaps/64key/keymap.c
diff --git a/keyboards/yd60mq/keymaps/default/keymap.c b/keyboards/ymdk/yd60mq/keymaps/default/keymap.c
index 2ba4416262..2ba4416262 100644
--- a/keyboards/yd60mq/keymaps/default/keymap.c
+++ b/keyboards/ymdk/yd60mq/keymaps/default/keymap.c
diff --git a/keyboards/yd60mq/keymaps/iso/keymap.c b/keyboards/ymdk/yd60mq/keymaps/iso/keymap.c
index 9a4debed77..9a4debed77 100644
--- a/keyboards/yd60mq/keymaps/iso/keymap.c
+++ b/keyboards/ymdk/yd60mq/keymaps/iso/keymap.c
diff --git a/keyboards/yd60mq/keymaps/krusli/keymap.c b/keyboards/ymdk/yd60mq/keymaps/krusli/keymap.c
index d9c2765659..d9c2765659 100644
--- a/keyboards/yd60mq/keymaps/krusli/keymap.c
+++ b/keyboards/ymdk/yd60mq/keymaps/krusli/keymap.c
diff --git a/keyboards/yd60mq/keymaps/via/keymap.c b/keyboards/ymdk/yd60mq/keymaps/via/keymap.c
index ab503ee277..ab503ee277 100644
--- a/keyboards/yd60mq/keymaps/via/keymap.c
+++ b/keyboards/ymdk/yd60mq/keymaps/via/keymap.c
diff --git a/keyboards/ymdk_np21/keymaps/via/rules.mk b/keyboards/ymdk/yd60mq/keymaps/via/rules.mk
index 36b7ba9cbc..36b7ba9cbc 100644
--- a/keyboards/ymdk_np21/keymaps/via/rules.mk
+++ b/keyboards/ymdk/yd60mq/keymaps/via/rules.mk
diff --git a/keyboards/ymdk/yd60mq/readme.md b/keyboards/ymdk/yd60mq/readme.md
new file mode 100644
index 0000000000..9a8dece4da
--- /dev/null
+++ b/keyboards/ymdk/yd60mq/readme.md
@@ -0,0 +1,29 @@
+# YD60MQ
+
+![YD60MQ PCB](https://ae01.alicdn.com/kf/HTB1PVQ2X_HuK1RkSndVq6xVwpXaO.jpg)
+
+Customizable 60% PCB by [YMDK](https://ymdk.aliexpress.com/store/429151?spm=2114.10010108.0.0.3ab23641lIkgzm).
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: YD60MQ PCB
+ * 12led (unknown revision number, has 12 RGB LEDs on the back) – _default variant_
+ * 16led (unknown revision number, has 16 RGB LEDs on the back)
+* Hardware Availability: [YMDK on AliExpress](https://www.aliexpress.com/i/32869207240.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+```sh
+make ymdk/yd60mq:default # builds the 12 LED variant
+make ymdk/yd60mq/12led:default # also builds the 12 LED variant
+make ymdk/yd60mq/16led:default # builds the 16 LED variant
+```
+
+The keyboard uses a DFU bootloader. To make a keymap and use dfu to flash it:
+
+```sh
+make ymdk/yd60mq:default:flash # builds and flashes the 12 LED variant
+make ymdk/yd60mq/12led:default:flash # also builds and flashes the 12 LED variant
+make ymdk/yd60mq/16led:default:flash # builds and flashes the 16 LED variant
+```
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymdk/yd60mq/rules.mk b/keyboards/ymdk/yd60mq/rules.mk
new file mode 100644
index 0000000000..5161d11ac1
--- /dev/null
+++ b/keyboards/ymdk/yd60mq/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# 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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_ansi_tsangan 60_hhkb 60_iso 60_iso_split_bs_rshift 60_iso_tsangan
+
+DEFAULT_FOLDER = ymdk/yd60mq/12led
diff --git a/keyboards/yd60mq/yd60mq.c b/keyboards/ymdk/yd60mq/yd60mq.c
index bfe6b6c2de..bfe6b6c2de 100644
--- a/keyboards/yd60mq/yd60mq.c
+++ b/keyboards/ymdk/yd60mq/yd60mq.c
diff --git a/keyboards/yd60mq/yd60mq.h b/keyboards/ymdk/yd60mq/yd60mq.h
index 79ff1a6c05..79ff1a6c05 100644
--- a/keyboards/yd60mq/yd60mq.h
+++ b/keyboards/ymdk/yd60mq/yd60mq.h
diff --git a/keyboards/zinc/rev1/.noci b/keyboards/ymdk/ymd75/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/zinc/rev1/.noci
+++ b/keyboards/ymdk/ymd75/.noci
diff --git a/keyboards/ymd75/config.h b/keyboards/ymdk/ymd75/config.h
index a828c4d64b..a828c4d64b 100644
--- a/keyboards/ymd75/config.h
+++ b/keyboards/ymdk/ymd75/config.h
diff --git a/keyboards/ymd75/info.json b/keyboards/ymdk/ymd75/info.json
index 65a53e87cd..65a53e87cd 100644
--- a/keyboards/ymd75/info.json
+++ b/keyboards/ymdk/ymd75/info.json
diff --git a/keyboards/ymd75/keymaps/default/keymap.c b/keyboards/ymdk/ymd75/keymaps/default/keymap.c
index 2b64124681..2b64124681 100644
--- a/keyboards/ymd75/keymaps/default/keymap.c
+++ b/keyboards/ymdk/ymd75/keymaps/default/keymap.c
diff --git a/keyboards/ymd75/keymaps/default_iso/keymap.c b/keyboards/ymdk/ymd75/keymaps/default_iso/keymap.c
index 2008dddf8c..2008dddf8c 100644
--- a/keyboards/ymd75/keymaps/default_iso/keymap.c
+++ b/keyboards/ymdk/ymd75/keymaps/default_iso/keymap.c
diff --git a/keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c b/keyboards/ymdk/ymd75/keymaps/default_iso_rwkl/keymap.c
index 0db1c8d288..0db1c8d288 100644
--- a/keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c
+++ b/keyboards/ymdk/ymd75/keymaps/default_iso_rwkl/keymap.c
diff --git a/keyboards/ymd75/keymaps/via/keymap.c b/keyboards/ymdk/ymd75/keymaps/via/keymap.c
index 4a9107bf95..4a9107bf95 100644
--- a/keyboards/ymd75/keymaps/via/keymap.c
+++ b/keyboards/ymdk/ymd75/keymaps/via/keymap.c
diff --git a/keyboards/ymd75/keymaps/via/rules.mk b/keyboards/ymdk/ymd75/keymaps/via/rules.mk
index 152460f304..152460f304 100644
--- a/keyboards/ymd75/keymaps/via/rules.mk
+++ b/keyboards/ymdk/ymd75/keymaps/via/rules.mk
diff --git a/keyboards/ymdk/ymd75/readme.md b/keyboards/ymdk/ymd75/readme.md
new file mode 100644
index 0000000000..78b4d089af
--- /dev/null
+++ b/keyboards/ymdk/ymd75/readme.md
@@ -0,0 +1,24 @@
+# YMD75 / MT84
+
+75% keyboard from YMDK. YMDK sell the board and name it "YMD75", however revision 1 of the PCB has "MT84" printed on both sides.
+
+This firmware can also be flashed onto the KBDFans KBD75 Round 2 Bootmapper Client boards sold during the mid-2018 timeframe.
+
+* Keyboard Maintainer: [Wayne K Jones](github.com/WarmCatUK)
+* Hardware Supported:
+ - rev1 (ATmega32a)
+ - rev2 (ATmega32a)
+ - rev3 (ATmega32u4)
+* Hardware Availability: <https://www.aliexpress.com/item/32812690592.html>
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/ymd75/rev1:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make ymdk/ymd75/rev1:default:flash
+
+**Reset Key**: Hold down the key located at *Key below the top right key*, commonly programmed as *Backspace* while plugging in the keyboard. On PCB revision 2, enter the bootloader by holding `L_CTRL` while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/zinc/reva/.noci b/keyboards/ymdk/ymd75/rev1/.noci
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/zinc/reva/.noci
+++ b/keyboards/ymdk/ymd75/rev1/.noci
diff --git a/keyboards/ymd75/rev1/config.h b/keyboards/ymdk/ymd75/rev1/config.h
index bd169471af..bd169471af 100644
--- a/keyboards/ymd75/rev1/config.h
+++ b/keyboards/ymdk/ymd75/rev1/config.h
diff --git a/keyboards/ymd75/rev1/rev1.c b/keyboards/ymdk/ymd75/rev1/rev1.c
index c1ad021b15..c1ad021b15 100644
--- a/keyboards/ymd75/rev1/rev1.c
+++ b/keyboards/ymdk/ymd75/rev1/rev1.c
diff --git a/keyboards/ymd75/rev1/rev1.h b/keyboards/ymdk/ymd75/rev1/rev1.h
index d88e8fb802..d88e8fb802 100644
--- a/keyboards/ymd75/rev1/rev1.h
+++ b/keyboards/ymdk/ymd75/rev1/rev1.h
diff --git a/keyboards/ymd75/rev1/rules.mk b/keyboards/ymdk/ymd75/rev1/rules.mk
index 816b0060c9..816b0060c9 100644
--- a/keyboards/ymd75/rev1/rules.mk
+++ b/keyboards/ymdk/ymd75/rev1/rules.mk
diff --git a/keyboards/ymdk/ymd75/rev2/.noci b/keyboards/ymdk/ymd75/rev2/.noci
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/ymdk/ymd75/rev2/.noci
diff --git a/keyboards/ymd75/rev2/config.h b/keyboards/ymdk/ymd75/rev2/config.h
index 41a75e6271..41a75e6271 100644
--- a/keyboards/ymd75/rev2/config.h
+++ b/keyboards/ymdk/ymd75/rev2/config.h
diff --git a/keyboards/ymd75/rev2/rev2.c b/keyboards/ymdk/ymd75/rev2/rev2.c
index c1ad021b15..c1ad021b15 100644
--- a/keyboards/ymd75/rev2/rev2.c
+++ b/keyboards/ymdk/ymd75/rev2/rev2.c
diff --git a/keyboards/ymd75/rev2/rev2.h b/keyboards/ymdk/ymd75/rev2/rev2.h
index 952858382b..952858382b 100644
--- a/keyboards/ymd75/rev2/rev2.h
+++ b/keyboards/ymdk/ymd75/rev2/rev2.h
diff --git a/keyboards/ymd75/rev2/rules.mk b/keyboards/ymdk/ymd75/rev2/rules.mk
index 816b0060c9..816b0060c9 100644
--- a/keyboards/ymd75/rev2/rules.mk
+++ b/keyboards/ymdk/ymd75/rev2/rules.mk
diff --git a/keyboards/ymd75/rev3/config.h b/keyboards/ymdk/ymd75/rev3/config.h
index cbed2e00ee..cbed2e00ee 100644
--- a/keyboards/ymd75/rev3/config.h
+++ b/keyboards/ymdk/ymd75/rev3/config.h
diff --git a/keyboards/ymd75/rev3/rev3.c b/keyboards/ymdk/ymd75/rev3/rev3.c
index c1ad021b15..c1ad021b15 100644
--- a/keyboards/ymd75/rev3/rev3.c
+++ b/keyboards/ymdk/ymd75/rev3/rev3.c
diff --git a/keyboards/ymd75/rev3/rev3.h b/keyboards/ymdk/ymd75/rev3/rev3.h
index d247797736..d247797736 100644
--- a/keyboards/ymd75/rev3/rev3.h
+++ b/keyboards/ymdk/ymd75/rev3/rev3.h
diff --git a/keyboards/ymd75/rev3/rules.mk b/keyboards/ymdk/ymd75/rev3/rules.mk
index 258c4d3ff6..258c4d3ff6 100644
--- a/keyboards/ymd75/rev3/rules.mk
+++ b/keyboards/ymdk/ymd75/rev3/rules.mk
diff --git a/keyboards/ymdk/ymd75/rules.mk b/keyboards/ymdk/ymd75/rules.mk
new file mode 100644
index 0000000000..ec66e0734a
--- /dev/null
+++ b/keyboards/ymdk/ymd75/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = ymdk/ymd75/rev1
diff --git a/keyboards/ymd75/ymd75.c b/keyboards/ymdk/ymd75/ymd75.c
index 2fca021f78..2fca021f78 100644
--- a/keyboards/ymd75/ymd75.c
+++ b/keyboards/ymdk/ymd75/ymd75.c
diff --git a/keyboards/ymdk/ymd75/ymd75.h b/keyboards/ymdk/ymd75/ymd75.h
new file mode 100644
index 0000000000..dbaf93e7db
--- /dev/null
+++ b/keyboards/ymdk/ymd75/ymd75.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "quantum.h"
+
+#if defined(KEYBOARD_ymdk_ymd75_rev1)
+ #include "rev1.h"
+#elif defined(KEYBOARD_ymdk_ymd75_rev2)
+ #include "rev2.h"
+#elif defined(KEYBOARD_ymdk_ymd75_rev3)
+ #include "rev3.h"
+#endif
diff --git a/keyboards/ymd96/config.h b/keyboards/ymdk/ymd96/config.h
index 55c5beaf3e..55c5beaf3e 100644
--- a/keyboards/ymd96/config.h
+++ b/keyboards/ymdk/ymd96/config.h
diff --git a/keyboards/ymd96/info.json b/keyboards/ymdk/ymd96/info.json
index d83312015e..d83312015e 100644
--- a/keyboards/ymd96/info.json
+++ b/keyboards/ymdk/ymd96/info.json
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/README.md b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/README.md
index 973e336cb6..973e336cb6 100644
--- a/keyboards/ymd96/keymaps/AnthonyWharton/README.md
+++ b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/README.md
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/config.h b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h
index e730e99b27..e730e99b27 100644
--- a/keyboards/ymd96/keymaps/AnthonyWharton/config.h
+++ b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/keymap.c b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/keymap.c
index 2b3e2e2c7c..2b3e2e2c7c 100644
--- a/keyboards/ymd96/keymaps/AnthonyWharton/keymap.c
+++ b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/keymap.c
diff --git a/keyboards/ymd96/keymaps/default/keymap.c b/keyboards/ymdk/ymd96/keymaps/default/keymap.c
index 0b8b98157d..0b8b98157d 100644
--- a/keyboards/ymd96/keymaps/default/keymap.c
+++ b/keyboards/ymdk/ymd96/keymaps/default/keymap.c
diff --git a/keyboards/ymd96/keymaps/epx/keymap.c b/keyboards/ymdk/ymd96/keymaps/epx/keymap.c
index cb353a08b7..cb353a08b7 100644
--- a/keyboards/ymd96/keymaps/epx/keymap.c
+++ b/keyboards/ymdk/ymd96/keymaps/epx/keymap.c
diff --git a/keyboards/ymd96/keymaps/hgoel89/config.h b/keyboards/ymdk/ymd96/keymaps/hgoel89/config.h
index b1d74e1e69..b1d74e1e69 100644
--- a/keyboards/ymd96/keymaps/hgoel89/config.h
+++ b/keyboards/ymdk/ymd96/keymaps/hgoel89/config.h
diff --git a/keyboards/ymd96/keymaps/hgoel89/keymap.c b/keyboards/ymdk/ymd96/keymaps/hgoel89/keymap.c
index cb7a3eb1e7..cb7a3eb1e7 100644
--- a/keyboards/ymd96/keymaps/hgoel89/keymap.c
+++ b/keyboards/ymdk/ymd96/keymaps/hgoel89/keymap.c
diff --git a/keyboards/ymd96/keymaps/hgoel89/readme.md b/keyboards/ymdk/ymd96/keymaps/hgoel89/readme.md
index 05488df990..05488df990 100644
--- a/keyboards/ymd96/keymaps/hgoel89/readme.md
+++ b/keyboards/ymdk/ymd96/keymaps/hgoel89/readme.md
diff --git a/keyboards/ymd96/keymaps/hgoel89/rules.mk b/keyboards/ymdk/ymd96/keymaps/hgoel89/rules.mk
index e5ddcae8d9..e5ddcae8d9 100644
--- a/keyboards/ymd96/keymaps/hgoel89/rules.mk
+++ b/keyboards/ymdk/ymd96/keymaps/hgoel89/rules.mk
diff --git a/keyboards/ymdk/ymd96/readme.md b/keyboards/ymdk/ymd96/readme.md
new file mode 100644
index 0000000000..6a967a49c2
--- /dev/null
+++ b/keyboards/ymdk/ymd96/readme.md
@@ -0,0 +1,19 @@
+# YMD96
+
+A 96-keyboard which supports both ANSI and ISO along with many different layout combinations, and RGB underglow.
+
+* Keyboard maintainer: [Andrew](https://github.com/sparkyman215)
+* Hardware Supported: YMD96 with the ATmega32a chip.
+* Hardware Availability: The GB was run June 2017, [in this thread](https://www.reddit.com/r/mechmarket/comments/6hu3yx/vendor_ymd96_gb_is_now_live_68_an_universal_and/). The vendor has stated that they plan on selling more rounds.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/ymd96:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make ymdk/ymd96:default:flash
+
+**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymd96/rules.mk b/keyboards/ymdk/ymd96/rules.mk
index 8dab58389a..8dab58389a 100644
--- a/keyboards/ymd96/rules.mk
+++ b/keyboards/ymdk/ymd96/rules.mk
diff --git a/keyboards/ymd96/ymd96.c b/keyboards/ymdk/ymd96/ymd96.c
index 0c212f4abb..0c212f4abb 100644
--- a/keyboards/ymd96/ymd96.c
+++ b/keyboards/ymdk/ymd96/ymd96.c
diff --git a/keyboards/ymd96/ymd96.h b/keyboards/ymdk/ymd96/ymd96.h
index c89be71686..c89be71686 100644
--- a/keyboards/ymd96/ymd96.h
+++ b/keyboards/ymdk/ymd96/ymd96.h
diff --git a/keyboards/ymdk_np21/readme.md b/keyboards/ymdk_np21/readme.md
deleted file mode 100644
index decd30b275..0000000000
--- a/keyboards/ymdk_np21/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# YMDK NP21
-
-![kp21 &mdash; full grid layout](https://ae01.alicdn.com/kf/HTB1d.txfHsTMeJjSszhq6AGCFXaF.jpg?size=35021&height=662&width=1000&hash=62b3a453686e2154dc51a7af67495e28)
-
-ps2avrGB based number-pad sold fully assembled by YMDK on Aliexpress.
-
-* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
-* Hardware Supported: Atmega32A
-* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/21-Key-NPKC-Programmable-Cherry-MX-Kailh-Gateron-Switches-Mechanical-Keyboard-Numpad-Free-shipping/32812732361.html)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ymdk_np21:default
-
-Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-
- make ymdk_np21:default:flash
-
-**Reset Key**: Hold down the 'Top Left Key' (USB on top) while plugging in the keyboard.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ymdk_np21/ymdk_np21.c b/keyboards/ymdk_np21/ymdk_np21.c
deleted file mode 100644
index 3ca0e8baa0..0000000000
--- a/keyboards/ymdk_np21/ymdk_np21.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-Modified 2018 Kenneth A. <github.com/krusli>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ymdk_np21.h"
diff --git a/keyboards/yoichiro/lunakey_mini/keymaps/via/rules.mk b/keyboards/yoichiro/lunakey_mini/keymaps/via/rules.mk
index 8b55a3b731..989d0d173c 100644
--- a/keyboards/yoichiro/lunakey_mini/keymaps/via/rules.mk
+++ b/keyboards/yoichiro/lunakey_mini/keymaps/via/rules.mk
@@ -2,4 +2,4 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB Underglow
AUDIO_ENABLE = no # Enable Audio output
OLED_ENABLE = no # Enable OLED Display
VIA_ENABLE = yes # Enable VIA support
-LTO_ENABLE = yes # CFLAGS=flto
+LTO_ENABLE = yes # Reduce firmware size
diff --git a/keyboards/yosino58/rev1/matrix.c b/keyboards/yosino58/rev1/matrix.c
index 3db40b3829..e2be7113bf 100644
--- a/keyboards/yosino58/rev1/matrix.c
+++ b/keyboards/yosino58/rev1/matrix.c
@@ -289,12 +289,6 @@ void matrix_slave_scan(void) {
#endif
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
diff --git a/keyboards/yurei/readme.md b/keyboards/yurei/readme.md
deleted file mode 100644
index fc5b3eb5c0..0000000000
--- a/keyboards/yurei/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Yurei
-
-A Tenkeyless PCB inspired by Phantom, for customizing Filco Majestouch 2.
-
-* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
-* Hardware Supported: Yurei PCB
-* Hardware Availability: https://github.com/kkatano/yurei
-
-Make example for this keyboard (after setting up your build environment):
-
- make yurei:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/dozen0/config.h b/keyboards/yynmt/dozen0/config.h
index 48d847bde1..48d847bde1 100644
--- a/keyboards/dozen0/config.h
+++ b/keyboards/yynmt/dozen0/config.h
diff --git a/keyboards/dozen0/dozen0.c b/keyboards/yynmt/dozen0/dozen0.c
index 42872a2105..42872a2105 100644
--- a/keyboards/dozen0/dozen0.c
+++ b/keyboards/yynmt/dozen0/dozen0.c
diff --git a/keyboards/dozen0/dozen0.h b/keyboards/yynmt/dozen0/dozen0.h
index e2ab35bcef..e2ab35bcef 100644
--- a/keyboards/dozen0/dozen0.h
+++ b/keyboards/yynmt/dozen0/dozen0.h
diff --git a/keyboards/dozen0/info.json b/keyboards/yynmt/dozen0/info.json
index 38e0f38751..38e0f38751 100644
--- a/keyboards/dozen0/info.json
+++ b/keyboards/yynmt/dozen0/info.json
diff --git a/keyboards/dozen0/keymaps/default/keymap.c b/keyboards/yynmt/dozen0/keymaps/default/keymap.c
index a869c6e93c..a869c6e93c 100644
--- a/keyboards/dozen0/keymaps/default/keymap.c
+++ b/keyboards/yynmt/dozen0/keymaps/default/keymap.c
diff --git a/keyboards/dozen0/keymaps/default/readme.md b/keyboards/yynmt/dozen0/keymaps/default/readme.md
index 832c720751..832c720751 100644
--- a/keyboards/dozen0/keymaps/default/readme.md
+++ b/keyboards/yynmt/dozen0/keymaps/default/readme.md
diff --git a/keyboards/dozen0/keymaps/f12/keymap.c b/keyboards/yynmt/dozen0/keymaps/f12/keymap.c
index 167e29e106..167e29e106 100644
--- a/keyboards/dozen0/keymaps/f12/keymap.c
+++ b/keyboards/yynmt/dozen0/keymaps/f12/keymap.c
diff --git a/keyboards/dozen0/keymaps/via/keymap.c b/keyboards/yynmt/dozen0/keymaps/via/keymap.c
index 91f15469ff..91f15469ff 100644
--- a/keyboards/dozen0/keymaps/via/keymap.c
+++ b/keyboards/yynmt/dozen0/keymaps/via/keymap.c
diff --git a/keyboards/yynmt/dozen0/keymaps/via/rules.mk b/keyboards/yynmt/dozen0/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/yynmt/dozen0/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/yynmt/dozen0/readme.md b/keyboards/yynmt/dozen0/readme.md
new file mode 100644
index 0000000000..c215e96e4c
--- /dev/null
+++ b/keyboards/yynmt/dozen0/readme.md
@@ -0,0 +1,15 @@
+# Dozen0
+
+![Dozen0](https://raw.githubusercontent.com/yynmt/Dozen0/master/images/main_image_mx.jpg)
+
+Dozen0 is 12 keys macropad.
+
+Keyboard Maintainer: [yynmt](https://github.com/yynmt)
+Hardware Supported: Dozen0 PCBs, ProMicro supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yynmt/dozen0:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/dozen0/rules.mk b/keyboards/yynmt/dozen0/rules.mk
index 7d2cea91df..7d2cea91df 100644
--- a/keyboards/dozen0/rules.mk
+++ b/keyboards/yynmt/dozen0/rules.mk
diff --git a/keyboards/kagamidget/config.h b/keyboards/yynmt/kagamidget/config.h
index 2bf5b8d7f8..2bf5b8d7f8 100644
--- a/keyboards/kagamidget/config.h
+++ b/keyboards/yynmt/kagamidget/config.h
diff --git a/keyboards/kagamidget/info.json b/keyboards/yynmt/kagamidget/info.json
index 8899b22054..8899b22054 100644
--- a/keyboards/kagamidget/info.json
+++ b/keyboards/yynmt/kagamidget/info.json
diff --git a/keyboards/kagamidget/kagamidget.c b/keyboards/yynmt/kagamidget/kagamidget.c
index e682357018..e682357018 100644
--- a/keyboards/kagamidget/kagamidget.c
+++ b/keyboards/yynmt/kagamidget/kagamidget.c
diff --git a/keyboards/kagamidget/kagamidget.h b/keyboards/yynmt/kagamidget/kagamidget.h
index e0655a4e98..e0655a4e98 100644
--- a/keyboards/kagamidget/kagamidget.h
+++ b/keyboards/yynmt/kagamidget/kagamidget.h
diff --git a/keyboards/kagamidget/keymaps/default/keymap.c b/keyboards/yynmt/kagamidget/keymaps/default/keymap.c
index cb1ee4c63b..cb1ee4c63b 100644
--- a/keyboards/kagamidget/keymaps/default/keymap.c
+++ b/keyboards/yynmt/kagamidget/keymaps/default/keymap.c
diff --git a/keyboards/kagamidget/keymaps/default/readme.md b/keyboards/yynmt/kagamidget/keymaps/default/readme.md
index 9ce02fb09d..9ce02fb09d 100644
--- a/keyboards/kagamidget/keymaps/default/readme.md
+++ b/keyboards/yynmt/kagamidget/keymaps/default/readme.md
diff --git a/keyboards/yynmt/kagamidget/readme.md b/keyboards/yynmt/kagamidget/readme.md
new file mode 100644
index 0000000000..78ec4f3c7b
--- /dev/null
+++ b/keyboards/yynmt/kagamidget/readme.md
@@ -0,0 +1,14 @@
+# KagaMidget
+
+![KagaMidget](https://raw.githubusercontent.com/yynmt/KagaMidget/master/images/main_image.jpg)
+
+KagaMidget is 40% tiny keyboard.
+
+Keyboard Maintainer: [yynmt](https://github.com/yynmt)
+Hardware Supported: KagaMidget PCBs, ProMicro supported
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yynmt/kagamidget:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kagamidget/rules.mk b/keyboards/yynmt/kagamidget/rules.mk
index 9afe45ddf5..9afe45ddf5 100644
--- a/keyboards/kagamidget/rules.mk
+++ b/keyboards/yynmt/kagamidget/rules.mk
diff --git a/keyboards/zinc/readme.md b/keyboards/zinc/readme.md
deleted file mode 100644
index 0e8d6cd65d..0000000000
--- a/keyboards/zinc/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-Zinc
-===
-
-![Zinc](https://i.imgur.com/vxlpWkD.jpg)
-
-40% row-staggered split keyboard.
-
-* Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk/) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
-* Hardware Supported: Zinc PCB
-* Hardware Availability: (https://twitter.com/monksoffunkJP)
-
-Make example for this keyboard (after setting up your build environment):
-
- make zinc:default
-
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/zinc/rules.mk b/keyboards/zinc/rules.mk
deleted file mode 100644
index c83741f40c..0000000000
--- a/keyboards/zinc/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-RGB_MATRIX_ENABLE = no
-RGB_MATRIX_DRIVER = WS2812
-
-DEFAULT_FOLDER = zinc/rev1
-
-#SRC += i2c.c
-SRC += serial.c
diff --git a/keyboards/zinc/zinc.h b/keyboards/zinc/zinc.h
deleted file mode 100644
index dedc9253b0..0000000000
--- a/keyboards/zinc/zinc.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_zinc_reva
- #include "reva.h"
-#endif
-#ifdef KEYBOARD_zinc_rev1
- #include "rev1.h"
-#endif
-
-#include "quantum.h"
diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py
index f16dca1de8..6b1012fae7 100755
--- a/lib/python/qmk/cli/generate/config_h.py
+++ b/lib/python/qmk/cli/generate/config_h.py
@@ -108,6 +108,12 @@ def generate_config_items(kb_info_json, config_h_lines):
config_h_lines.append(f'#ifndef {key}')
config_h_lines.append(f'# define {key} {value}')
config_h_lines.append(f'#endif // {key}')
+ elif key_type == 'bcd_version':
+ (major, minor, revision) = config_value.split('.')
+ config_h_lines.append('')
+ config_h_lines.append(f'#ifndef {config_key}')
+ config_h_lines.append(f'# define {config_key} 0x{major.zfill(2)}{minor}{revision}')
+ config_h_lines.append(f'#endif // {config_key}')
else:
config_h_lines.append('')
config_h_lines.append(f'#ifndef {config_key}')
diff --git a/lib/python/qmk/cli/generate/develop_pr_list.py b/lib/python/qmk/cli/generate/develop_pr_list.py
index 07e46752a6..09236a7c42 100755
--- a/lib/python/qmk/cli/generate/develop_pr_list.py
+++ b/lib/python/qmk/cli/generate/develop_pr_list.py
@@ -12,6 +12,14 @@ fix_expr = re.compile(r'fix', flags=re.IGNORECASE)
clean1_expr = re.compile(r'\[(develop|keyboard|keymap|core|cli|bug|docs|feature)\]', flags=re.IGNORECASE)
clean2_expr = re.compile(r'^(develop|keyboard|keymap|core|cli|bug|docs|feature):', flags=re.IGNORECASE)
+ignored_titles = ["Format code according to conventions"]
+
+
+def _is_ignored(title):
+ for ignore in ignored_titles:
+ if ignore in title:
+ return
+
def _get_pr_info(cache, gh, pr_num):
pull = cache.get(f'pull:{pr_num}')
@@ -81,7 +89,9 @@ def generate_develop_pr_list(cli):
else:
normal_collection.append(info)
- if "dependencies" in commit_info['pr_labels']:
+ if _is_ignored(commit_info['title']):
+ return
+ elif "dependencies" in commit_info['pr_labels']:
fix_or_normal(commit_info, pr_list_bugs, pr_list_dependencies)
elif "core" in commit_info['pr_labels']:
fix_or_normal(commit_info, pr_list_bugs, pr_list_core)
@@ -97,7 +107,7 @@ def generate_develop_pr_list(cli):
match = git_expr.search(line)
if match:
pr_info = _get_pr_info(cache, gh, match.group("pr"))
- commit_info = {'hash': match.group("hash"), 'title': match.group("title"), 'pr_num': int(match.group("pr")), 'pr_labels': [label.name for label in pr_info.labels.items]}
+ commit_info = {'hash': match.group("hash"), 'title': pr_info['title'], 'pr_num': int(match.group("pr")), 'pr_labels': [label.name for label in pr_info.labels.items]}
_categorise_commit(commit_info)
def _dump_commit_list(name, collection):
diff --git a/lib/python/qmk/cli/generate/version_h.py b/lib/python/qmk/cli/generate/version_h.py
index b8e52588c4..69341e36f0 100644
--- a/lib/python/qmk/cli/generate/version_h.py
+++ b/lib/python/qmk/cli/generate/version_h.py
@@ -20,6 +20,9 @@ def generate_version_h(cli):
version_h = create_version_h(cli.args.skip_git, cli.args.skip_all)
if cli.args.output:
+ cli.args.output.parent.mkdir(parents=True, exist_ok=True)
+ if cli.args.output.exists():
+ cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
cli.args.output.write_text(version_h)
if not cli.args.quiet:
diff --git a/lib/python/qmk/cli/multibuild.py b/lib/python/qmk/cli/multibuild.py
index 85ed0fa1e9..dff8c88422 100755
--- a/lib/python/qmk/cli/multibuild.py
+++ b/lib/python/qmk/cli/multibuild.py
@@ -32,6 +32,7 @@ def _is_split(keyboard_name):
@cli.argument('-c', '--clean', arg_only=True, action='store_true', help="Remove object files before compiling.")
@cli.argument('-f', '--filter', arg_only=True, action='append', default=[], help="Filter the list of keyboards based on the supplied value in rules.mk. Supported format is 'SPLIT_KEYBOARD=yes'. May be passed multiple times.")
@cli.argument('-km', '--keymap', type=str, default='default', help="The keymap name to build. Default is 'default'.")
+@cli.argument('-e', '--env', arg_only=True, action='append', default=[], help="Set a variable to be passed to make. May be passed multiple times.")
@cli.subcommand('Compile QMK Firmware for all keyboards.', hidden=False if cli.config.user.developer else True)
def multibuild(cli):
"""Compile QMK Firmware against all keyboards.
@@ -68,7 +69,7 @@ def multibuild(cli):
all: {keyboard_safe}_binary
{keyboard_safe}_binary:
@rm -f "{QMK_FIRMWARE}/.build/failed.log.{keyboard_safe}" || true
- +@$(MAKE) -C "{QMK_FIRMWARE}" -f "{QMK_FIRMWARE}/build_keyboard.mk" KEYBOARD="{keyboard_name}" KEYMAP="{cli.args.keymap}" REQUIRE_PLATFORM_KEY= COLOR=true SILENT=false \\
+ +@$(MAKE) -C "{QMK_FIRMWARE}" -f "{QMK_FIRMWARE}/builddefs/build_keyboard.mk" KEYBOARD="{keyboard_name}" KEYMAP="{cli.args.keymap}" REQUIRE_PLATFORM_KEY= COLOR=true SILENT=false {' '.join(cli.args.env)} \\
>>"{QMK_FIRMWARE}/.build/build.log.{os.getpid()}.{keyboard_safe}" 2>&1 \\
|| cp "{QMK_FIRMWARE}/.build/build.log.{os.getpid()}.{keyboard_safe}" "{QMK_FIRMWARE}/.build/failed.log.{os.getpid()}.{keyboard_safe}"
@{{ grep '\[ERRORS\]' "{QMK_FIRMWARE}/.build/build.log.{os.getpid()}.{keyboard_safe}" >/dev/null 2>&1 && printf "Build %-64s \e[1;31m[ERRORS]\e[0m\\n" "{keyboard_name}:{cli.args.keymap}" ; }} \\
diff --git a/lib/python/qmk/cli/new/keyboard.py b/lib/python/qmk/cli/new/keyboard.py
index 4093b8c90d..59e781a932 100644
--- a/lib/python/qmk/cli/new/keyboard.py
+++ b/lib/python/qmk/cli/new/keyboard.py
@@ -1,15 +1,82 @@
"""This script automates the creation of new keyboard directories using a starter template.
"""
+import re
+import json
+import shutil
from datetime import date
from pathlib import Path
-import re
+from dotty_dict import dotty
-from qmk.commands import git_get_username
-import qmk.path
from milc import cli
from milc.questions import choice, question
-KEYBOARD_TYPES = ['avr', 'ps2avrgb']
+from qmk.commands import git_get_username
+from qmk.json_schema import load_jsonschema
+from qmk.path import keyboard
+from qmk.json_encoders import InfoJSONEncoder
+from qmk.json_schema import deep_update
+
+COMMUNITY = Path('layouts/default/')
+TEMPLATE = Path('data/templates/keyboard/')
+
+MCU2BOOTLOADER = {
+ "MKL26Z64": "halfkay",
+ "MK20DX128": "halfkay",
+ "MK20DX256": "halfkay",
+ "MK66FX1M0": "halfkay",
+ "STM32F042": "stm32-dfu",
+ "STM32F072": "stm32-dfu",
+ "STM32F103": "stm32duino",
+ "STM32F303": "stm32-dfu",
+ "STM32F401": "stm32-dfu",
+ "STM32F405": "stm32-dfu",
+ "STM32F407": "stm32-dfu",
+ "STM32F411": "stm32-dfu",
+ "STM32F446": "stm32-dfu",
+ "STM32G431": "stm32-dfu",
+ "STM32G474": "stm32-dfu",
+ "STM32L412": "stm32-dfu",
+ "STM32L422": "stm32-dfu",
+ "STM32L432": "stm32-dfu",
+ "STM32L433": "stm32-dfu",
+ "STM32L442": "stm32-dfu",
+ "STM32L443": "stm32-dfu",
+ "GD32VF103": "gd32v-dfu",
+ "WB32F3G71": "wb32-dfu",
+ "atmega16u2": "atmel-dfu",
+ "atmega32u2": "atmel-dfu",
+ "atmega16u4": "atmel-dfu",
+ "atmega32u4": "atmel-dfu",
+ "at90usb162": "atmel-dfu",
+ "at90usb646": "atmel-dfu",
+ "at90usb647": "atmel-dfu",
+ "at90usb1286": "atmel-dfu",
+ "at90usb1287": "atmel-dfu",
+ "atmega32a": "bootloadhid",
+ "atmega328p": "usbasploader",
+ "atmega328": "usbasploader",
+}
+
+# defaults
+schema = dotty(load_jsonschema('keyboard'))
+mcu_types = sorted(schema["properties.processor.enum"], key=str.casefold)
+available_layouts = sorted([x.name for x in COMMUNITY.iterdir() if x.is_dir()])
+
+
+def mcu_type(mcu):
+ """Callable for argparse validation.
+ """
+ if mcu not in mcu_types:
+ raise ValueError
+ return mcu
+
+
+def layout_type(layout):
+ """Callable for argparse validation.
+ """
+ if layout not in available_layouts:
+ raise ValueError
+ return layout
def keyboard_name(name):
@@ -27,113 +94,163 @@ def validate_keyboard_name(name):
return bool(regex.match(name))
-@cli.argument('-kb', '--keyboard', help='Specify the name for the new keyboard directory', arg_only=True, type=keyboard_name)
-@cli.argument('-t', '--type', help='Specify the keyboard type', arg_only=True, choices=KEYBOARD_TYPES)
-@cli.argument('-u', '--username', help='Specify your username (default from Git config)', arg_only=True)
-@cli.argument('-n', '--realname', help='Specify your real name if you want to use that. Defaults to username', arg_only=True)
-@cli.subcommand('Creates a new keyboard directory')
-def new_keyboard(cli):
- """Creates a new keyboard.
+def select_default_bootloader(mcu):
+ """Provide sane defaults for bootloader
"""
- cli.log.info('{style_bright}Generating a new QMK keyboard directory{style_normal}')
- cli.echo('')
+ return MCU2BOOTLOADER.get(mcu, "custom")
+
+
+def replace_placeholders(src, dest, tokens):
+ """Replaces the given placeholders in each template file.
+ """
+ content = src.read_text()
+ for key, value in tokens.items():
+ content = content.replace(f'%{key}%', value)
- # Get keyboard name
- new_keyboard_name = None
- while not new_keyboard_name:
- new_keyboard_name = cli.args.keyboard if cli.args.keyboard else question('Keyboard Name:')
- if not validate_keyboard_name(new_keyboard_name):
- cli.log.error('Keyboard names must contain only {fg_cyan}lowercase a-z{fg_reset}, {fg_cyan}0-9{fg_reset}, and {fg_cyan}_{fg_reset}! Please choose a different name.')
+ dest.write_text(content)
- # Exit if passed by arg
- if cli.args.keyboard:
- return False
- new_keyboard_name = None
- continue
+def augment_community_info(src, dest):
+ """Splice in any additional data into info.json
+ """
+ info = json.loads(src.read_text())
+ template = json.loads(dest.read_text())
- keyboard_path = qmk.path.keyboard(new_keyboard_name)
- if keyboard_path.exists():
- cli.log.error(f'Keyboard {{fg_cyan}}{new_keyboard_name}{{fg_reset}} already exists! Please choose a different name.')
+ # merge community with template
+ deep_update(info, template)
- # Exit if passed by arg
- if cli.args.keyboard:
- return False
+ # avoid assumptions on macro name by using the first available
+ first_layout = next(iter(info["layouts"].values()))["layout"]
- new_keyboard_name = None
+ # guess at width and height now its optional
+ width, height = (0, 0)
+ for item in first_layout:
+ width = max(width, int(item["x"]) + 1)
+ height = max(height, int(item["y"]) + 1)
- # Get keyboard type
- keyboard_type = cli.args.type if cli.args.type else choice('Keyboard Type:', KEYBOARD_TYPES, default=0)
+ info["matrix_pins"] = {
+ "cols": ["C2"] * width,
+ "rows": ["D1"] * height,
+ }
- # Get username
- user_name = None
- while not user_name:
- user_name = question('Your GitHub User Name:', default=find_user_name())
+ # assume a 1:1 mapping on matrix to electrical
+ for item in first_layout:
+ item["matrix"] = [int(item["y"]), int(item["x"])]
- if not user_name:
- cli.log.error('You didn\'t provide a username, and we couldn\'t find one set in your QMK or Git configs. Please try again.')
+ # finally write out the updated info.json
+ dest.write_text(json.dumps(info, cls=InfoJSONEncoder))
- # Exit if passed by arg
- if cli.args.username:
- return False
- real_name = None
- while not real_name:
- real_name = question('Your real name:', default=user_name)
+def prompt_keyboard():
+ prompt = """{fg_yellow}Name Your Keyboard Project{style_reset_all}
- keyboard_basename = keyboard_path.name
- replacements = {
- "YEAR": str(date.today().year),
- "KEYBOARD": keyboard_basename,
- "USER_NAME": user_name,
- "YOUR_NAME": real_name,
- }
+For more infomation, see:
+https://docs.qmk.fm/#/hardware_keyboard_guidelines?id=naming-your-keyboardproject
- template_dir = Path('data/templates')
- template_tree(template_dir / 'base', keyboard_path, replacements)
- template_tree(template_dir / keyboard_type, keyboard_path, replacements)
+keyboard Name? """
+
+ return question(prompt, validate=lambda x: not keyboard(x).exists())
- cli.echo('')
- cli.log.info(f'{{fg_green}}Created a new keyboard called {{fg_cyan}}{new_keyboard_name}{{fg_green}}.{{fg_reset}}')
- cli.log.info(f'To start working on things, `cd` into {{fg_cyan}}{keyboard_path}{{fg_reset}},')
- cli.log.info('or open the directory in your preferred text editor.')
+def prompt_user():
+ prompt = """{fg_yellow}Attribution{style_reset_all}
-def find_user_name():
- if cli.args.username:
- return cli.args.username
- elif cli.config.user.name:
- return cli.config.user.name
- else:
- return git_get_username()
+Used for maintainer, copyright, etc
+Your GitHub Username? """
+ return question(prompt, default=git_get_username())
-def template_tree(src: Path, dst: Path, replacements: dict):
- """Recursively copy template and replace placeholders
- Args:
- src (Path)
- The source folder to copy from
- dst (Path)
- The destination folder to copy to
- replacements (dict)
- a dictionary with "key":"value" pairs to replace.
+def prompt_name(def_name):
+ prompt = """{fg_yellow}More Attribution{style_reset_all}
- Raises:
- FileExistsError
- When trying to overwrite existing files
+Used for maintainer, copyright, etc
+
+Your Real Name? """
+ return question(prompt, default=def_name)
+
+
+def prompt_layout():
+ prompt = """{fg_yellow}Pick Base Layout{style_reset_all}
+
+As a starting point, one of the common layouts can be used to bootstrap the process
+
+Default Layout? """
+ # avoid overwhelming user - remove some?
+ filtered_layouts = [x for x in available_layouts if not any(xs in x for xs in ['_split', '_blocker', '_tsangan', '_f13'])]
+ filtered_layouts.append("none of the above")
+
+ return choice(prompt, filtered_layouts, default=len(filtered_layouts) - 1)
+
+
+def prompt_mcu():
+ prompt = """{fg_yellow}What Powers Your Project{style_reset_all}
+
+For more infomation, see:
+https://docs.qmk.fm/#/compatible_microcontrollers
+
+MCU? """
+ # remove any options strictly used for compatibility
+ filtered_mcu = [x for x in mcu_types if not any(xs in x for xs in ['cortex', 'unknown'])]
+
+ return choice(prompt, filtered_mcu, default=filtered_mcu.index("atmega32u4"))
+
+
+@cli.argument('-kb', '--keyboard', help='Specify the name for the new keyboard directory', arg_only=True, type=keyboard_name)
+@cli.argument('-l', '--layout', help='Community layout to bootstrap with', arg_only=True, type=layout_type)
+@cli.argument('-t', '--type', help='Specify the keyboard MCU type', arg_only=True, type=mcu_type)
+@cli.argument('-u', '--username', help='Specify your username (default from Git config)', arg_only=True)
+@cli.argument('-n', '--realname', help='Specify your real name if you want to use that. Defaults to username', arg_only=True)
+@cli.subcommand('Creates a new keyboard directory')
+def new_keyboard(cli):
+ """Creates a new keyboard.
"""
+ cli.log.info('{style_bright}Generating a new QMK keyboard directory{style_normal}')
+ cli.echo('')
+
+ kb_name = cli.args.keyboard if cli.args.keyboard else prompt_keyboard()
+ user_name = cli.args.username if cli.args.username else prompt_user()
+ real_name = cli.args.realname or cli.args.username if cli.args.realname or cli.args.username else prompt_name(user_name)
+ default_layout = cli.args.layout if cli.args.layout else prompt_layout()
+ mcu = cli.args.type if cli.args.type else prompt_mcu()
+ bootloader = select_default_bootloader(mcu)
- dst.mkdir(parents=True, exist_ok=True)
+ if not validate_keyboard_name(kb_name):
+ cli.log.error('Keyboard names must contain only {fg_cyan}lowercase a-z{fg_reset}, {fg_cyan}0-9{fg_reset}, and {fg_cyan}_{fg_reset}! Please choose a different name.')
+ return 1
- for child in src.iterdir():
- if child.is_dir():
- template_tree(child, dst / child.name, replacements=replacements)
+ if keyboard(kb_name).exists():
+ cli.log.error(f'Keyboard {{fg_cyan}}{kb_name}{{fg_reset}} already exists! Please choose a different name.')
+ return 1
- if child.is_file():
- file_name = dst / (child.name % replacements)
+ tokens = {'YEAR': str(date.today().year), 'KEYBOARD': kb_name, 'USER_NAME': user_name, 'REAL_NAME': real_name, 'LAYOUT': default_layout, 'MCU': mcu, 'BOOTLOADER': bootloader}
- with file_name.open(mode='x') as dst_f:
- with child.open() as src_f:
- template = src_f.read()
- dst_f.write(template % replacements)
+ if cli.config.general.verbose:
+ cli.log.info("Creating keyboard with:")
+ for key, value in tokens.items():
+ cli.echo(f" {key.ljust(10)}: {value}")
+
+ # TODO: detach community layout and rename to just "LAYOUT"
+ if default_layout == 'none of the above':
+ default_layout = "ortho_4x4"
+
+ # begin with making the deepest folder in the tree
+ keymaps_path = keyboard(kb_name) / 'keymaps/'
+ keymaps_path.mkdir(parents=True)
+
+ # copy in keymap.c or keymap.json
+ community_keymap = Path(COMMUNITY / f'{default_layout}/default_{default_layout}/')
+ shutil.copytree(community_keymap, keymaps_path / 'default')
+
+ # process template files
+ for file in list(TEMPLATE.iterdir()):
+ replace_placeholders(file, keyboard(kb_name) / file.name, tokens)
+
+ # merge in infos
+ community_info = Path(COMMUNITY / f'{default_layout}/info.json')
+ augment_community_info(community_info, keyboard(kb_name) / community_info.name)
+
+ cli.log.info(f'{{fg_green}}Created a new keyboard called {{fg_cyan}}{kb_name}{{fg_green}}.{{fg_reset}}')
+ cli.log.info(f'To start working on things, `cd` into {{fg_cyan}}keyboards/{kb_name}{{fg_reset}},')
+ cli.log.info('or open the directory in your preferred text editor.')
+ cli.log.info(f"And build with {{fg_yellow}}qmk compile -kb {kb_name} -km default{{fg_reset}}.")
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py
index 90a68ca3cd..275cd72e5c 100644
--- a/lib/python/qmk/commands.py
+++ b/lib/python/qmk/commands.py
@@ -213,7 +213,7 @@ def compile_configurator_json(user_keymap, bootloader=None, parallel=1, **env_va
'-r',
'-R',
'-f',
- 'build_keyboard.mk',
+ 'builddefs/build_keyboard.mk',
])
if bootloader:
diff --git a/lib/python/qmk/constants.py b/lib/python/qmk/constants.py
index 433b110523..00e453189f 100644
--- a/lib/python/qmk/constants.py
+++ b/lib/python/qmk/constants.py
@@ -13,7 +13,7 @@ QMK_FIRMWARE_UPSTREAM = 'qmk/qmk_firmware'
MAX_KEYBOARD_SUBFOLDERS = 5
# Supported processor types
-CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'MK66FX1M0', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F405', 'STM32F407', 'STM32F411', 'STM32F446', 'STM32G431', 'STM32G474', 'STM32L412', 'STM32L422', 'STM32L433', 'STM32L443', 'GD32VF103', 'WB32F3G71'
+CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'MK66FX1M0', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F405', 'STM32F407', 'STM32F411', 'STM32F446', 'STM32G431', 'STM32G474', 'STM32L412', 'STM32L422', 'STM32L432', 'STM32L433', 'STM32L442', 'STM32L443', 'GD32VF103', 'WB32F3G71'
LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None
VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85'
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index 9a07fc842f..905f10ecc2 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -387,6 +387,19 @@ def _extract_matrix_info(info_data, config_c):
return info_data
+# TODO: kill off usb.device_ver in favor of usb.device_version
+def _extract_device_version(info_data):
+ if info_data.get('usb'):
+ if info_data['usb'].get('device_version') and not info_data['usb'].get('device_ver'):
+ (major, minor, revision) = info_data['usb']['device_version'].split('.', 3)
+ info_data['usb']['device_ver'] = f'0x{major.zfill(2)}{minor}{revision}'
+ if not info_data['usb'].get('device_version') and info_data['usb'].get('device_ver'):
+ major = int(info_data['usb']['device_ver'][2:4])
+ minor = int(info_data['usb']['device_ver'][4])
+ revision = int(info_data['usb']['device_ver'][5])
+ info_data['usb']['device_version'] = f'{major}.{minor}.{revision}'
+
+
def _extract_config_h(info_data):
"""Pull some keyboard information from existing config.h files
"""
@@ -430,6 +443,13 @@ def _extract_config_h(info_data):
elif key_type == 'int':
dotty_info[info_key] = int(config_c[config_key])
+ elif key_type == 'bcd_version':
+ major = int(config_c[config_key][2:4])
+ minor = int(config_c[config_key][4])
+ revision = int(config_c[config_key][5])
+
+ dotty_info[info_key] = f'{major}.{minor}.{revision}'
+
else:
dotty_info[info_key] = config_c[config_key]
@@ -444,6 +464,7 @@ def _extract_config_h(info_data):
_extract_split_main(info_data, config_c)
_extract_split_transport(info_data, config_c)
_extract_split_right_pins(info_data, config_c)
+ _extract_device_version(info_data)
return info_data
@@ -622,12 +643,7 @@ def arm_processor_rules(info_data, rules):
info_data['protocol'] = 'ChibiOS'
if 'bootloader' not in info_data:
- if 'STM32' in info_data['processor']:
- info_data['bootloader'] = 'stm32-dfu'
- elif 'WB32' in info_data['processor']:
- info_data['bootloader'] = 'wb32-dfu'
- else:
- info_data['bootloader'] = 'unknown'
+ info_data['bootloader'] = 'unknown'
if 'STM32' in info_data['processor']:
info_data['platform'] = 'STM32'
diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py
index 72bae59273..dfb8371f84 100644
--- a/lib/python/qmk/path.py
+++ b/lib/python/qmk/path.py
@@ -46,7 +46,7 @@ def keymap(keyboard_name):
"""
keyboard_folder = keyboard(keyboard_name)
- for i in range(MAX_KEYBOARD_SUBFOLDERS):
+ for _ in range(MAX_KEYBOARD_SUBFOLDERS):
if (keyboard_folder / 'keymaps').exists():
return (keyboard_folder / 'keymaps').resolve()
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index 2973f81702..54b143c64f 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -113,7 +113,7 @@ def test_list_keymaps_community():
def test_list_keymaps_kb_only():
- result = check_subcommand('list-keymaps', '-kb', 'niu_mini')
+ result = check_subcommand('list-keymaps', '-kb', 'contra')
check_returncode(result)
assert 'default' and 'via' in result.stdout
diff --git a/paths.mk b/paths.mk
index 5a39d00ecd..85ccfa0796 100644
--- a/paths.mk
+++ b/paths.mk
@@ -2,7 +2,9 @@
TOP_DIR = .
TMK_DIR = tmk_core
TMK_PATH = $(TMK_DIR)
-LIB_PATH = lib
+
+LIB_DIR = lib
+LIB_PATH = $(LIB_DIR)
QUANTUM_DIR = quantum
QUANTUM_PATH = $(QUANTUM_DIR)
diff --git a/platforms/arm_atsam/bootloader.c b/platforms/arm_atsam/bootloader.c
deleted file mode 100644
index 9015b00aab..0000000000
--- a/platforms/arm_atsam/bootloader.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright 2017 Fred Sundvik
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "bootloader.h"
-#include "samd51j18a.h"
-#include "md_bootloader.h"
-
-// Set watchdog timer to reset. Directs the bootloader to stay in programming mode.
-void bootloader_jump(void) {
-#ifdef KEYBOARD_massdrop_ctrl
- // CTRL keyboards released with bootloader version below must use RAM method. Otherwise use WDT method.
- uint8_t ver_ram_method[] = "v2.18Jun 22 2018 17:28:08"; // The version to match (NULL terminated by compiler)
- uint8_t *ver_check = ver_ram_method; // Pointer to version match string for traversal
- uint8_t *ver_rom = (uint8_t *)0x21A0; // Pointer to address in ROM where this specific bootloader version would exist
-
- while (*ver_check && *ver_rom == *ver_check) { // While there are check version characters to match and bootloader's version matches check's version
- ver_check++; // Move check version pointer to next character
- ver_rom++; // Move ROM version pointer to next character
- }
-
- if (!*ver_check) { // If check version pointer is NULL, all characters have matched
- *MAGIC_ADDR = BOOTLOADER_MAGIC; // Set magic number into RAM
- NVIC_SystemReset(); // Perform system reset
- while (1) {
- } // Won't get here
- }
-#endif
-
- WDT->CTRLA.bit.ENABLE = 0;
- while (WDT->SYNCBUSY.bit.ENABLE) {
- }
- while (WDT->CTRLA.bit.ENABLE) {
- }
- WDT->CONFIG.bit.WINDOW = 0;
- WDT->CONFIG.bit.PER = 0;
- WDT->EWCTRL.bit.EWOFFSET = 0;
- WDT->CTRLA.bit.ENABLE = 1;
- while (WDT->SYNCBUSY.bit.ENABLE) {
- }
- while (!WDT->CTRLA.bit.ENABLE) {
- }
- while (1) {
- } // Wait on timeout
-}
diff --git a/platforms/arm_atsam/bootloaders/md_boot.c b/platforms/arm_atsam/bootloaders/md_boot.c
new file mode 100644
index 0000000000..32cf850448
--- /dev/null
+++ b/platforms/arm_atsam/bootloaders/md_boot.c
@@ -0,0 +1,65 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include "samd51j18a.h"
+
+// WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support
+extern uint32_t _eram;
+#define BOOTLOADER_MAGIC 0x3B9ACA00
+#define MAGIC_ADDR (uint32_t *)((intptr_t)(&_eram) - 4)
+
+// CTRL keyboards released with bootloader version below must use RAM method. Otherwise use WDT method.
+void bootloader_jump(void) {
+#ifdef KEYBOARD_massdrop_ctrl
+ uint8_t ver_ram_method[] = "v2.18Jun 22 2018 17:28:08"; // The version to match (NULL terminated by compiler)
+ uint8_t *ver_check = ver_ram_method; // Pointer to version match string for traversal
+ uint8_t *ver_rom = (uint8_t *)0x21A0; // Pointer to address in ROM where this specific bootloader version would exist
+
+ while (*ver_check && *ver_rom == *ver_check) { // While there are check version characters to match and bootloader's version matches check's version
+ ver_check++; // Move check version pointer to next character
+ ver_rom++; // Move ROM version pointer to next character
+ }
+
+ if (!*ver_check) { // If check version pointer is NULL, all characters have matched
+ *MAGIC_ADDR = BOOTLOADER_MAGIC; // Set magic number into RAM
+ NVIC_SystemReset(); // Perform system reset
+ while (1)
+ ; // Won't get here
+ }
+#endif
+
+ // Set watchdog timer to reset. Directs the bootloader to stay in programming mode.
+ WDT->CTRLA.bit.ENABLE = 0;
+
+ while (WDT->SYNCBUSY.bit.ENABLE)
+ ;
+ while (WDT->CTRLA.bit.ENABLE)
+ ;
+
+ WDT->CONFIG.bit.WINDOW = 0;
+ WDT->CONFIG.bit.PER = 0;
+ WDT->EWCTRL.bit.EWOFFSET = 0;
+ WDT->CTRLA.bit.ENABLE = 1;
+
+ while (WDT->SYNCBUSY.bit.ENABLE)
+ ;
+ while (!WDT->CTRLA.bit.ENABLE)
+ ;
+ while (1)
+ ; // Wait on timeout
+}
diff --git a/platforms/arm_atsam/eeprom.c b/platforms/arm_atsam/eeprom.c
deleted file mode 100644
index ff1a692623..0000000000
--- a/platforms/arm_atsam/eeprom.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright 2017 Fred Sundvik
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include "eeprom.h"
-#include "debug.h"
-#include "samd51j18a.h"
-#include "core_cm4.h"
-#include "component/nvmctrl.h"
-
-#ifndef EEPROM_SIZE
-# include "eeconfig.h"
-# define EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
-#endif
-
-#ifndef MAX
-# define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
-#endif
-
-#ifndef BUSY_RETRIES
-# define BUSY_RETRIES 10000
-#endif
-
-// #define DEBUG_EEPROM_OUTPUT
-
-/*
- * Debug print utils
- */
-#if defined(DEBUG_EEPROM_OUTPUT)
-# define eeprom_printf(fmt, ...) xprintf(fmt, ##__VA_ARGS__);
-#else /* NO_DEBUG */
-# define eeprom_printf(fmt, ...)
-#endif /* NO_DEBUG */
-
-__attribute__((aligned(4))) static uint8_t buffer[EEPROM_SIZE] = {0};
-volatile uint8_t * SmartEEPROM8 = (uint8_t *)SEEPROM_ADDR;
-
-static inline bool eeprom_is_busy(void) {
- int timeout = BUSY_RETRIES;
- while (NVMCTRL->SEESTAT.bit.BUSY && timeout-- > 0)
- ;
-
- return NVMCTRL->SEESTAT.bit.BUSY;
-}
-
-static uint32_t get_virtual_eeprom_size(void) {
- // clang-format off
- static const uint32_t VIRTUAL_EEPROM_MAP[11][8] = {
- /* 4 8 16 32 64 128 256 512 */
- /* 0*/ { 0, 0, 0, 0, 0, 0, 0, 0 },
- /* 1*/ { 512, 1024, 2048, 4096, 4096, 4096, 4096, 4096 },
- /* 2*/ { 512, 1024, 2048, 4096, 8192, 8192, 8192, 8192 },
- /* 3*/ { 512, 1024, 2048, 4096, 8192, 16384, 16384, 16384 },
- /* 4*/ { 512, 1024, 2048, 4096, 8192, 16384, 16384, 16384 },
- /* 5*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
- /* 6*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
- /* 7*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
- /* 8*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
- /* 9*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 },
- /*10*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 },
- };
- // clang-format on
-
- static uint32_t virtual_eeprom_size = UINT32_MAX;
- if (virtual_eeprom_size == UINT32_MAX) {
- virtual_eeprom_size = VIRTUAL_EEPROM_MAP[NVMCTRL->SEESTAT.bit.PSZ][NVMCTRL->SEESTAT.bit.SBLK];
- }
- // eeprom_printf("get_virtual_eeprom_size:: %d:%d:%d\n", NVMCTRL->SEESTAT.bit.PSZ, NVMCTRL->SEESTAT.bit.SBLK, virtual_eeprom_size);
- return virtual_eeprom_size;
-}
-
-uint8_t eeprom_read_byte(const uint8_t *addr) {
- uintptr_t offset = (uintptr_t)addr;
- if (offset >= MAX(EEPROM_SIZE, get_virtual_eeprom_size())) {
- eeprom_printf("eeprom_read_byte:: out of bounds\n");
- return 0x0;
- }
-
- if (get_virtual_eeprom_size() == 0) {
- return buffer[offset];
- }
-
- if (eeprom_is_busy()) {
- eeprom_printf("eeprom_write_byte:: timeout\n");
- return 0x0;
- }
-
- return SmartEEPROM8[offset];
-}
-
-void eeprom_write_byte(uint8_t *addr, uint8_t value) {
- uintptr_t offset = (uintptr_t)addr;
- if (offset >= MAX(EEPROM_SIZE, get_virtual_eeprom_size())) {
- eeprom_printf("eeprom_write_byte:: out of bounds\n");
- return;
- }
-
- if (get_virtual_eeprom_size() == 0) {
- buffer[offset] = value;
- return;
- }
-
- if (eeprom_is_busy()) {
- eeprom_printf("eeprom_write_byte:: timeout\n");
- return;
- }
-
- SmartEEPROM8[offset] = value;
-}
-
-uint16_t eeprom_read_word(const uint16_t *addr) {
- const uint8_t *p = (const uint8_t *)addr;
- return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8);
-}
-
-uint32_t eeprom_read_dword(const uint32_t *addr) {
- const uint8_t *p = (const uint8_t *)addr;
- return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8) | (eeprom_read_byte(p + 2) << 16) | (eeprom_read_byte(p + 3) << 24);
-}
-
-void eeprom_read_block(void *buf, const void *addr, size_t len) {
- const uint8_t *p = (const uint8_t *)addr;
- uint8_t * dest = (uint8_t *)buf;
- while (len--) {
- *dest++ = eeprom_read_byte(p++);
- }
-}
-
-void eeprom_write_word(uint16_t *addr, uint16_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p, value >> 8);
-}
-
-void eeprom_write_dword(uint32_t *addr, uint32_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p++, value >> 8);
- eeprom_write_byte(p++, value >> 16);
- eeprom_write_byte(p, value >> 24);
-}
-
-void eeprom_write_block(const void *buf, void *addr, size_t len) {
- uint8_t * p = (uint8_t *)addr;
- const uint8_t *src = (const uint8_t *)buf;
- while (len--) {
- eeprom_write_byte(p++, *src++);
- }
-}
-
-void eeprom_update_byte(uint8_t *addr, uint8_t value) { eeprom_write_byte(addr, value); }
-
-void eeprom_update_word(uint16_t *addr, uint16_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p, value >> 8);
-}
-
-void eeprom_update_dword(uint32_t *addr, uint32_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p++, value >> 8);
- eeprom_write_byte(p++, value >> 16);
- eeprom_write_byte(p, value >> 24);
-}
-
-void eeprom_update_block(const void *buf, void *addr, size_t len) {
- uint8_t * p = (uint8_t *)addr;
- const uint8_t *src = (const uint8_t *)buf;
- while (len--) {
- eeprom_write_byte(p++, *src++);
- }
-}
diff --git a/platforms/arm_atsam/eeprom_samd.c b/platforms/arm_atsam/eeprom_samd.c
new file mode 100644
index 0000000000..1c1e031e5d
--- /dev/null
+++ b/platforms/arm_atsam/eeprom_samd.c
@@ -0,0 +1,182 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "eeprom.h"
+#include "debug.h"
+#include "samd51j18a.h"
+#include "core_cm4.h"
+#include "component/nvmctrl.h"
+#include "eeprom_samd.h"
+
+#ifndef MAX
+# define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+#endif
+
+#ifndef BUSY_RETRIES
+# define BUSY_RETRIES 10000
+#endif
+
+// #define DEBUG_EEPROM_OUTPUT
+
+/*
+ * Debug print utils
+ */
+#if defined(DEBUG_EEPROM_OUTPUT)
+# define eeprom_printf(fmt, ...) xprintf(fmt, ##__VA_ARGS__);
+#else /* NO_DEBUG */
+# define eeprom_printf(fmt, ...)
+#endif /* NO_DEBUG */
+
+__attribute__((aligned(4))) static uint8_t buffer[EEPROM_SIZE] = {0};
+volatile uint8_t * SmartEEPROM8 = (uint8_t *)SEEPROM_ADDR;
+
+static inline bool eeprom_is_busy(void) {
+ int timeout = BUSY_RETRIES;
+ while (NVMCTRL->SEESTAT.bit.BUSY && timeout-- > 0)
+ ;
+
+ return NVMCTRL->SEESTAT.bit.BUSY;
+}
+
+static uint32_t get_virtual_eeprom_size(void) {
+ // clang-format off
+ static const uint32_t VIRTUAL_EEPROM_MAP[11][8] = {
+ /* 4 8 16 32 64 128 256 512 */
+ /* 0*/ { 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* 1*/ { 512, 1024, 2048, 4096, 4096, 4096, 4096, 4096 },
+ /* 2*/ { 512, 1024, 2048, 4096, 8192, 8192, 8192, 8192 },
+ /* 3*/ { 512, 1024, 2048, 4096, 8192, 16384, 16384, 16384 },
+ /* 4*/ { 512, 1024, 2048, 4096, 8192, 16384, 16384, 16384 },
+ /* 5*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
+ /* 6*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
+ /* 7*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
+ /* 8*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 32768 },
+ /* 9*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 },
+ /*10*/ { 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 },
+ };
+ // clang-format on
+
+ static uint32_t virtual_eeprom_size = UINT32_MAX;
+ if (virtual_eeprom_size == UINT32_MAX) {
+ virtual_eeprom_size = VIRTUAL_EEPROM_MAP[NVMCTRL->SEESTAT.bit.PSZ][NVMCTRL->SEESTAT.bit.SBLK];
+ }
+ // eeprom_printf("get_virtual_eeprom_size:: %d:%d:%d\n", NVMCTRL->SEESTAT.bit.PSZ, NVMCTRL->SEESTAT.bit.SBLK, virtual_eeprom_size);
+ return virtual_eeprom_size;
+}
+
+uint8_t eeprom_read_byte(const uint8_t *addr) {
+ uintptr_t offset = (uintptr_t)addr;
+ if (offset >= MAX(EEPROM_SIZE, get_virtual_eeprom_size())) {
+ eeprom_printf("eeprom_read_byte:: out of bounds\n");
+ return 0x0;
+ }
+
+ if (get_virtual_eeprom_size() == 0) {
+ return buffer[offset];
+ }
+
+ if (eeprom_is_busy()) {
+ eeprom_printf("eeprom_write_byte:: timeout\n");
+ return 0x0;
+ }
+
+ return SmartEEPROM8[offset];
+}
+
+void eeprom_write_byte(uint8_t *addr, uint8_t value) {
+ uintptr_t offset = (uintptr_t)addr;
+ if (offset >= MAX(EEPROM_SIZE, get_virtual_eeprom_size())) {
+ eeprom_printf("eeprom_write_byte:: out of bounds\n");
+ return;
+ }
+
+ if (get_virtual_eeprom_size() == 0) {
+ buffer[offset] = value;
+ return;
+ }
+
+ if (eeprom_is_busy()) {
+ eeprom_printf("eeprom_write_byte:: timeout\n");
+ return;
+ }
+
+ SmartEEPROM8[offset] = value;
+}
+
+uint16_t eeprom_read_word(const uint16_t *addr) {
+ const uint8_t *p = (const uint8_t *)addr;
+ return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8);
+}
+
+uint32_t eeprom_read_dword(const uint32_t *addr) {
+ const uint8_t *p = (const uint8_t *)addr;
+ return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8) | (eeprom_read_byte(p + 2) << 16) | (eeprom_read_byte(p + 3) << 24);
+}
+
+void eeprom_read_block(void *buf, const void *addr, size_t len) {
+ const uint8_t *p = (const uint8_t *)addr;
+ uint8_t * dest = (uint8_t *)buf;
+ while (len--) {
+ *dest++ = eeprom_read_byte(p++);
+ }
+}
+
+void eeprom_write_word(uint16_t *addr, uint16_t value) {
+ uint8_t *p = (uint8_t *)addr;
+ eeprom_write_byte(p++, value);
+ eeprom_write_byte(p, value >> 8);
+}
+
+void eeprom_write_dword(uint32_t *addr, uint32_t value) {
+ uint8_t *p = (uint8_t *)addr;
+ eeprom_write_byte(p++, value);
+ eeprom_write_byte(p++, value >> 8);
+ eeprom_write_byte(p++, value >> 16);
+ eeprom_write_byte(p, value >> 24);
+}
+
+void eeprom_write_block(const void *buf, void *addr, size_t len) {
+ uint8_t * p = (uint8_t *)addr;
+ const uint8_t *src = (const uint8_t *)buf;
+ while (len--) {
+ eeprom_write_byte(p++, *src++);
+ }
+}
+
+void eeprom_update_byte(uint8_t *addr, uint8_t value) {
+ eeprom_write_byte(addr, value);
+}
+
+void eeprom_update_word(uint16_t *addr, uint16_t value) {
+ uint8_t *p = (uint8_t *)addr;
+ eeprom_write_byte(p++, value);
+ eeprom_write_byte(p, value >> 8);
+}
+
+void eeprom_update_dword(uint32_t *addr, uint32_t value) {
+ uint8_t *p = (uint8_t *)addr;
+ eeprom_write_byte(p++, value);
+ eeprom_write_byte(p++, value >> 8);
+ eeprom_write_byte(p++, value >> 16);
+ eeprom_write_byte(p, value >> 24);
+}
+
+void eeprom_update_block(const void *buf, void *addr, size_t len) {
+ uint8_t * p = (uint8_t *)addr;
+ const uint8_t *src = (const uint8_t *)buf;
+ while (len--) {
+ eeprom_write_byte(p++, *src++);
+ }
+}
diff --git a/platforms/arm_atsam/eeprom_samd.h b/platforms/arm_atsam/eeprom_samd.h
new file mode 100644
index 0000000000..878e72865c
--- /dev/null
+++ b/platforms/arm_atsam/eeprom_samd.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#ifndef EEPROM_SIZE
+# include "eeconfig.h"
+# define EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
+#endif
diff --git a/platforms/arm_atsam/gpio.h b/platforms/arm_atsam/gpio.h
index 915ed0ef4f..a42aaff54d 100644
--- a/platforms/arm_atsam/gpio.h
+++ b/platforms/arm_atsam/gpio.h
@@ -22,9 +22,9 @@
typedef uint8_t pin_t;
-#define SAMD_PORT(pin) ((pin & 0x20) >> 5)
-#define SAMD_PIN(pin) (pin & 0x1f)
-#define SAMD_PIN_MASK(pin) (1 << (pin & 0x1f))
+#define SAMD_PORT(pin) (((pin)&0x20) >> 5)
+#define SAMD_PIN(pin) ((pin)&0x1f)
+#define SAMD_PIN_MASK(pin) (1 << ((pin)&0x1f))
#define setPinInput(pin) \
do { \
@@ -48,12 +48,16 @@ typedef uint8_t pin_t;
PORT->Group[SAMD_PORT(pin)].PINCFG[SAMD_PIN(pin)].bit.PULLEN = 1; \
} while (0)
-#define setPinOutput(pin) \
+#define setPinOutputPushPull(pin) \
do { \
PORT->Group[SAMD_PORT(pin)].DIRSET.reg = SAMD_PIN_MASK(pin); \
PORT->Group[SAMD_PORT(pin)].OUTCLR.reg = SAMD_PIN_MASK(pin); \
} while (0)
+#define setPinOutputOpenDrain(pin) _Static_assert(0, "arm_atsam platform does not implement an open-drain output")
+
+#define setPinOutput(pin) setPinOutputPushPull(pin)
+
#define writePinHigh(pin) \
do { \
PORT->Group[SAMD_PORT(pin)].OUTSET.reg = SAMD_PIN_MASK(pin); \
diff --git a/platforms/arm_atsam/suspend.c b/platforms/arm_atsam/suspend.c
index e51426128d..242e9c91a2 100644
--- a/platforms/arm_atsam/suspend.c
+++ b/platforms/arm_atsam/suspend.c
@@ -3,61 +3,18 @@
#include "md_rgb_matrix.h"
#include "suspend.h"
-/** \brief Suspend idle
- *
- * FIXME: needs doc
- */
-void suspend_idle(uint8_t time) { /* Note: Not used anywhere currently */
-}
-
-/** \brief Run user level Power down
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_power_down_user(void) {}
-
-/** \brief Run keyboard level Power down
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_power_down_kb(void) { suspend_power_down_user(); }
-
/** \brief Suspend power down
*
* FIXME: needs doc
*/
void suspend_power_down(void) {
#ifdef RGB_MATRIX_ENABLE
- I2C3733_Control_Set(0); // Disable LED driver
+ I2C3733_Control_Set(0); // Disable LED driver
#endif
suspend_power_down_kb();
}
-__attribute__((weak)) void matrix_power_up(void) {}
-__attribute__((weak)) void matrix_power_down(void) {}
-bool suspend_wakeup_condition(void) {
- matrix_power_up();
- matrix_scan();
- matrix_power_down();
- for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
- if (matrix_get_row(r)) return true;
- }
- return false;
-}
-
-/** \brief run user level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_user(void) {}
-
-/** \brief run keyboard level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); }
-
/** \brief run immediately after wakeup
*
* FIXME: needs doc
diff --git a/platforms/arm_atsam/timer.c b/platforms/arm_atsam/timer.c
index b835dd5e75..cf01e3625e 100644
--- a/platforms/arm_atsam/timer.c
+++ b/platforms/arm_atsam/timer.c
@@ -2,18 +2,34 @@
#include "timer.h"
#include "tmk_core/protocol/arm_atsam/clks.h"
-void set_time(uint64_t tset) { ms_clk = tset; }
+void set_time(uint64_t tset) {
+ ms_clk = tset;
+}
-void timer_init(void) { timer_clear(); }
+void timer_init(void) {
+ timer_clear();
+}
-uint16_t timer_read(void) { return (uint16_t)ms_clk; }
+uint16_t timer_read(void) {
+ return (uint16_t)ms_clk;
+}
-uint32_t timer_read32(void) { return (uint32_t)ms_clk; }
+uint32_t timer_read32(void) {
+ return (uint32_t)ms_clk;
+}
-uint64_t timer_read64(void) { return ms_clk; }
+uint64_t timer_read64(void) {
+ return ms_clk;
+}
-uint16_t timer_elapsed(uint16_t tlast) { return TIMER_DIFF_16(timer_read(), tlast); }
+uint16_t timer_elapsed(uint16_t tlast) {
+ return TIMER_DIFF_16(timer_read(), tlast);
+}
-uint32_t timer_elapsed32(uint32_t tlast) { return TIMER_DIFF_32(timer_read32(), tlast); }
+uint32_t timer_elapsed32(uint32_t tlast) {
+ return TIMER_DIFF_32(timer_read32(), tlast);
+}
-void timer_clear(void) { set_time(0); }
+void timer_clear(void) {
+ set_time(0);
+}
diff --git a/platforms/avr/bootloader.c b/platforms/avr/bootloader.c
deleted file mode 100644
index c0272903b8..0000000000
--- a/platforms/avr/bootloader.c
+++ /dev/null
@@ -1,293 +0,0 @@
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <avr/eeprom.h>
-#include <avr/interrupt.h>
-#include <avr/wdt.h>
-#include <util/delay.h>
-#include "bootloader.h"
-#include <avr/boot.h>
-
-#ifdef PROTOCOL_LUFA
-# include <LUFA/Drivers/USB/USB.h>
-#endif
-
-/** \brief Bootloader Size in *bytes*
- *
- * AVR Boot section size are defined by setting BOOTSZ fuse in fact. Consult with your MCU datasheet.
- * Note that 'Word'(2 bytes) size and address are used in datasheet while TMK uses 'Byte'.
- *
- * Size of Bootloaders in bytes:
- * Atmel DFU loader(ATmega32U4) 4096
- * Atmel DFU loader(AT90USB128) 8192
- * LUFA bootloader(ATmega32U4) 4096
- * Arduino Caterina(ATmega32U4) 4096
- * USBaspLoader(ATmega***) 2048
- * Teensy halfKay(ATmega32U4) 512
- * Teensy++ halfKay(AT90USB128) 1024
- *
- * AVR Boot section is located at the end of Flash memory like the followings.
- *
- * byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB128)
- * 0x0000 +---------------+ 0x00000 +---------------+
- * | | | |
- * | | | |
- * | Application | | Application |
- * | | | |
- * = = = =
- * | | 32KB-4KB | | 128KB-8KB
- * 0x7000 +---------------+ 0x1E000 +---------------+
- * | Bootloader | 4KB | Bootloader | 8KB
- * 0x7FFF +---------------+ 0x1FFFF +---------------+
- *
- *
- * byte Teensy(ATMega32u4) byte Teensy++(AT90SUB128)
- * 0x0000 +---------------+ 0x00000 +---------------+
- * | | | |
- * | | | |
- * | Application | | Application |
- * | | | |
- * = = = =
- * | | 32KB-512B | | 128KB-1KB
- * 0x7E00 +---------------+ 0x1FC00 +---------------+
- * | Bootloader | 512B | Bootloader | 1KB
- * 0x7FFF +---------------+ 0x1FFFF +---------------+
- */
-#define FLASH_SIZE (FLASHEND + 1L)
-
-#if !defined(BOOTLOADER_SIZE)
-uint16_t bootloader_start;
-#endif
-
-// compatibility between ATMega8 and ATMega88
-#if !defined(MCUCSR)
-# if defined(MCUSR)
-# define MCUCSR MCUSR
-# endif
-#endif
-
-/** \brief Entering the Bootloader via Software
- *
- * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
- */
-#define BOOTLOADER_RESET_KEY 0xB007B007
-uint32_t reset_key __attribute__((section(".noinit,\"aw\",@nobits;")));
-
-/** \brief initialize MCU status by watchdog reset
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void bootloader_jump(void) {
-#if !defined(BOOTLOADER_SIZE)
- uint8_t high_fuse = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
-
- if (high_fuse & ~(FUSE_BOOTSZ0 & FUSE_BOOTSZ1)) {
- bootloader_start = (FLASH_SIZE - 512) >> 1;
- } else if (high_fuse & ~(FUSE_BOOTSZ1)) {
- bootloader_start = (FLASH_SIZE - 1024) >> 1;
- } else if (high_fuse & ~(FUSE_BOOTSZ0)) {
- bootloader_start = (FLASH_SIZE - 2048) >> 1;
- } else {
- bootloader_start = (FLASH_SIZE - 4096) >> 1;
- }
-#endif
-
- // Something like this might work, but it compiled larger than the block above
- // bootloader_start = FLASH_SIZE - (256 << (~high_fuse & 0b110 >> 1));
-
-#if defined(BOOTLOADER_HALFKAY)
- // http://www.pjrc.com/teensy/jump_to_bootloader.html
- cli();
- // disable watchdog, if enabled (it's not)
- // disable all peripherals
- // a shutdown call might make sense here
- UDCON = 1;
- USBCON = (1 << FRZCLK); // disable USB
- UCSR1B = 0;
- _delay_ms(5);
-# if defined(__AVR_AT90USB162__) // Teensy 1.0
- EIMSK = 0;
- PCICR = 0;
- SPCR = 0;
- ACSR = 0;
- EECR = 0;
- TIMSK0 = 0;
- TIMSK1 = 0;
- UCSR1B = 0;
- DDRB = 0;
- DDRC = 0;
- DDRD = 0;
- PORTB = 0;
- PORTC = 0;
- PORTD = 0;
- asm volatile("jmp 0x3E00");
-# elif defined(__AVR_ATmega32U4__) // Teensy 2.0
- EIMSK = 0;
- PCICR = 0;
- SPCR = 0;
- ACSR = 0;
- EECR = 0;
- ADCSRA = 0;
- TIMSK0 = 0;
- TIMSK1 = 0;
- TIMSK3 = 0;
- TIMSK4 = 0;
- UCSR1B = 0;
- TWCR = 0;
- DDRB = 0;
- DDRC = 0;
- DDRD = 0;
- DDRE = 0;
- DDRF = 0;
- TWCR = 0;
- PORTB = 0;
- PORTC = 0;
- PORTD = 0;
- PORTE = 0;
- PORTF = 0;
- asm volatile("jmp 0x7E00");
-# elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
- EIMSK = 0;
- PCICR = 0;
- SPCR = 0;
- ACSR = 0;
- EECR = 0;
- ADCSRA = 0;
- TIMSK0 = 0;
- TIMSK1 = 0;
- TIMSK2 = 0;
- TIMSK3 = 0;
- UCSR1B = 0;
- TWCR = 0;
- DDRA = 0;
- DDRB = 0;
- DDRC = 0;
- DDRD = 0;
- DDRE = 0;
- DDRF = 0;
- PORTA = 0;
- PORTB = 0;
- PORTC = 0;
- PORTD = 0;
- PORTE = 0;
- PORTF = 0;
- asm volatile("jmp 0xFC00");
-# elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
- EIMSK = 0;
- PCICR = 0;
- SPCR = 0;
- ACSR = 0;
- EECR = 0;
- ADCSRA = 0;
- TIMSK0 = 0;
- TIMSK1 = 0;
- TIMSK2 = 0;
- TIMSK3 = 0;
- UCSR1B = 0;
- TWCR = 0;
- DDRA = 0;
- DDRB = 0;
- DDRC = 0;
- DDRD = 0;
- DDRE = 0;
- DDRF = 0;
- PORTA = 0;
- PORTB = 0;
- PORTC = 0;
- PORTD = 0;
- PORTE = 0;
- PORTF = 0;
- asm volatile("jmp 0x1FC00");
-# endif
-
-#elif defined(BOOTLOADER_CATERINA)
- // this block may be optional
- // TODO: figure it out
-
- uint16_t *const bootKeyPtr = (uint16_t *)0x0800;
-
- // Value used by Caterina bootloader use to determine whether to run the
- // sketch or the bootloader programmer.
- uint16_t bootKey = 0x7777;
-
- *bootKeyPtr = bootKey;
-
- // setup watchdog timeout
- wdt_enable(WDTO_60MS);
-
- while (1) {
- } // wait for watchdog timer to trigger
-
-#elif defined(BOOTLOADER_USBASP)
- // Taken with permission of Stephan Baerwolf from https://github.com/tinyusbboard/API/blob/master/apipage.c
- wdt_enable(WDTO_15MS);
- wdt_reset();
- asm volatile("cli \n\t"
- "ldi r29 , %[ramendhi] \n\t"
- "ldi r28 , %[ramendlo] \n\t"
-# if (FLASHEND > 131071)
- "ldi r18 , %[bootaddrhi] \n\t"
- "st Y+, r18 \n\t"
-# endif
- "ldi r18 , %[bootaddrme] \n\t"
- "st Y+, r18 \n\t"
- "ldi r18 , %[bootaddrlo] \n\t"
- "st Y+, r18 \n\t"
- "out %[mcucsrio], __zero_reg__ \n\t"
- "bootloader_startup_loop%=: \n\t"
- "rjmp bootloader_startup_loop%= \n\t"
- :
- : [mcucsrio] "I"(_SFR_IO_ADDR(MCUCSR)),
-# if (FLASHEND > 131071)
- [ramendhi] "M"(((RAMEND - 2) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 2) >> 0) & 0xff), [bootaddrhi] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 16) & 0xff),
-# else
- [ramendhi] "M"(((RAMEND - 1) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 1) >> 0) & 0xff),
-# endif
- [bootaddrme] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff), [bootaddrlo] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff));
-
-#else // Assume remaining boards are DFU, even if the flag isn't set
-
-# if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATtiny85__)) // no USB - maybe BOOTLOADER_BOOTLOADHID instead though?
- UDCON = 1;
- USBCON = (1 << FRZCLK); // disable USB
- UCSR1B = 0;
- _delay_ms(5); // 5 seems to work fine
-# endif
-
-# ifdef BOOTLOADER_BOOTLOADHID
- // force bootloadHID to stay in bootloader mode, so that it waits
- // for a new firmware to be flashed
- eeprom_write_byte((uint8_t *)1, 0x00);
-# endif
-
- // watchdog reset
- reset_key = BOOTLOADER_RESET_KEY;
- wdt_enable(WDTO_250MS);
- for (;;)
- ;
-#endif
-}
-
-/* this runs before main() */
-void bootloader_jump_after_watchdog_reset(void) __attribute__((used, naked, section(".init3")));
-void bootloader_jump_after_watchdog_reset(void) {
-#ifndef BOOTLOADER_HALFKAY
- if ((MCUCSR & (1 << WDRF)) && reset_key == BOOTLOADER_RESET_KEY) {
- reset_key = 0;
-
- // My custom USBasploader requires this to come up.
- MCUCSR = 0;
-
- // Seems like Teensy halfkay loader requires clearing WDRF and disabling watchdog.
- MCUCSR &= ~(1 << WDRF);
- wdt_disable();
-
-// This is compled into 'icall', address should be in word unit, not byte.
-# ifdef BOOTLOADER_SIZE
- ((void (*)(void))((FLASH_SIZE - BOOTLOADER_SIZE) >> 1))();
-# else
- asm("ijmp" ::"z"(bootloader_start));
-# endif
- }
-#endif
-}
diff --git a/platforms/avr/bootloaders/bootloadhid.c b/platforms/avr/bootloaders/bootloadhid.c
new file mode 100644
index 0000000000..ae58760d7d
--- /dev/null
+++ b/platforms/avr/bootloaders/bootloadhid.c
@@ -0,0 +1,33 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <avr/eeprom.h>
+#include <avr/wdt.h>
+
+__attribute__((weak)) void bootloader_jump(void) {
+ // force bootloadHID to stay in bootloader mode, so that it waits
+ // for a new firmware to be flashed
+ // NOTE: this byte is part of QMK's "magic number" - changing it causes the EEPROM to be re-initialized
+ // thus every time the device is flashed the EEPROM will be wiped
+ eeprom_write_byte((uint8_t *)1, 0x00);
+
+ // watchdog reset
+ wdt_enable(WDTO_250MS);
+ for (;;)
+ ;
+}
diff --git a/platforms/avr/bootloaders/caterina.c b/platforms/avr/bootloaders/caterina.c
new file mode 100644
index 0000000000..82a16a3765
--- /dev/null
+++ b/platforms/avr/bootloaders/caterina.c
@@ -0,0 +1,39 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <avr/wdt.h>
+
+__attribute__((weak)) void bootloader_jump(void) {
+ // this block may be optional
+ // TODO: figure it out
+
+ uint16_t *const bootKeyPtr = (uint16_t *)0x0800;
+
+ // Value used by Caterina bootloader use to determine whether to run the
+ // sketch or the bootloader programmer.
+ uint16_t bootKey = 0x7777;
+
+ *bootKeyPtr = bootKey;
+
+ // setup watchdog timeout
+ wdt_enable(WDTO_60MS);
+
+ // wait for watchdog timer to trigger
+ while (1) {
+ }
+}
diff --git a/platforms/avr/bootloaders/custom.c b/platforms/avr/bootloaders/custom.c
new file mode 100644
index 0000000000..624fbe242a
--- /dev/null
+++ b/platforms/avr/bootloaders/custom.c
@@ -0,0 +1,19 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+__attribute__((weak)) void bootloader_jump(void) {}
diff --git a/platforms/avr/bootloaders/dfu.c b/platforms/avr/bootloaders/dfu.c
new file mode 100644
index 0000000000..06b2c8963a
--- /dev/null
+++ b/platforms/avr/bootloaders/dfu.c
@@ -0,0 +1,52 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <avr/wdt.h>
+#include <util/delay.h>
+
+#define FLASH_SIZE (FLASHEND + 1L)
+
+/** \brief Entering the Bootloader via Software
+ *
+ * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
+ */
+#define BOOTLOADER_RESET_KEY 0xB007B007
+uint32_t reset_key __attribute__((section(".noinit,\"aw\",@nobits;")));
+
+__attribute__((weak)) void bootloader_jump(void) {
+ UDCON = 1;
+ USBCON = (1 << FRZCLK); // disable USB
+ UCSR1B = 0;
+ _delay_ms(5); // 5 seems to work fine
+
+ // watchdog reset
+ reset_key = BOOTLOADER_RESET_KEY;
+ wdt_enable(WDTO_250MS);
+ for (;;)
+ ;
+}
+
+/* this runs before main() */
+void bootloader_jump_after_watchdog_reset(void) __attribute__((used, naked, section(".init3")));
+void bootloader_jump_after_watchdog_reset(void) {
+ if ((MCUSR & (1 << WDRF)) && reset_key == BOOTLOADER_RESET_KEY) {
+ reset_key = 0;
+
+ ((void (*)(void))((FLASH_SIZE - BOOTLOADER_SIZE) >> 1))();
+ }
+}
diff --git a/platforms/avr/bootloaders/halfkay.c b/platforms/avr/bootloaders/halfkay.c
new file mode 100644
index 0000000000..651696f988
--- /dev/null
+++ b/platforms/avr/bootloaders/halfkay.c
@@ -0,0 +1,128 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <avr/interrupt.h>
+#include <util/delay.h>
+
+__attribute__((weak)) void bootloader_jump(void) {
+ // http://www.pjrc.com/teensy/jump_to_bootloader.html
+
+ cli();
+ // disable watchdog, if enabled (it's not)
+ // disable all peripherals
+ // a shutdown call might make sense here
+ UDCON = 1;
+ USBCON = (1 << FRZCLK); // disable USB
+ UCSR1B = 0;
+ _delay_ms(5);
+
+#if defined(__AVR_AT90USB162__) // Teensy 1.0
+ EIMSK = 0;
+ PCICR = 0;
+ SPCR = 0;
+ ACSR = 0;
+ EECR = 0;
+ TIMSK0 = 0;
+ TIMSK1 = 0;
+ UCSR1B = 0;
+ DDRB = 0;
+ DDRC = 0;
+ DDRD = 0;
+ PORTB = 0;
+ PORTC = 0;
+ PORTD = 0;
+ asm volatile("jmp 0x3E00");
+#elif defined(__AVR_ATmega32U4__) // Teensy 2.0
+ EIMSK = 0;
+ PCICR = 0;
+ SPCR = 0;
+ ACSR = 0;
+ EECR = 0;
+ ADCSRA = 0;
+ TIMSK0 = 0;
+ TIMSK1 = 0;
+ TIMSK3 = 0;
+ TIMSK4 = 0;
+ UCSR1B = 0;
+ TWCR = 0;
+ DDRB = 0;
+ DDRC = 0;
+ DDRD = 0;
+ DDRE = 0;
+ DDRF = 0;
+ TWCR = 0;
+ PORTB = 0;
+ PORTC = 0;
+ PORTD = 0;
+ PORTE = 0;
+ PORTF = 0;
+ asm volatile("jmp 0x7E00");
+#elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
+ EIMSK = 0;
+ PCICR = 0;
+ SPCR = 0;
+ ACSR = 0;
+ EECR = 0;
+ ADCSRA = 0;
+ TIMSK0 = 0;
+ TIMSK1 = 0;
+ TIMSK2 = 0;
+ TIMSK3 = 0;
+ UCSR1B = 0;
+ TWCR = 0;
+ DDRA = 0;
+ DDRB = 0;
+ DDRC = 0;
+ DDRD = 0;
+ DDRE = 0;
+ DDRF = 0;
+ PORTA = 0;
+ PORTB = 0;
+ PORTC = 0;
+ PORTD = 0;
+ PORTE = 0;
+ PORTF = 0;
+ asm volatile("jmp 0xFC00");
+#elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
+ EIMSK = 0;
+ PCICR = 0;
+ SPCR = 0;
+ ACSR = 0;
+ EECR = 0;
+ ADCSRA = 0;
+ TIMSK0 = 0;
+ TIMSK1 = 0;
+ TIMSK2 = 0;
+ TIMSK3 = 0;
+ UCSR1B = 0;
+ TWCR = 0;
+ DDRA = 0;
+ DDRB = 0;
+ DDRC = 0;
+ DDRD = 0;
+ DDRE = 0;
+ DDRF = 0;
+ PORTA = 0;
+ PORTB = 0;
+ PORTC = 0;
+ PORTD = 0;
+ PORTE = 0;
+ PORTF = 0;
+ asm volatile("jmp 0x1FC00");
+#endif
+}
diff --git a/platforms/avr/bootloaders/usbasploader.c b/platforms/avr/bootloaders/usbasploader.c
new file mode 100644
index 0000000000..008bd16069
--- /dev/null
+++ b/platforms/avr/bootloaders/usbasploader.c
@@ -0,0 +1,56 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <avr/wdt.h>
+
+#define FLASH_SIZE (FLASHEND + 1L)
+
+#if !defined(MCUCSR)
+# if defined(MCUSR)
+# define MCUCSR MCUSR
+# endif
+#endif
+
+__attribute__((weak)) void bootloader_jump(void) {
+ // Taken with permission of Stephan Baerwolf from https://github.com/tinyusbboard/API/blob/master/apipage.c
+
+ wdt_enable(WDTO_15MS);
+ wdt_reset();
+ asm volatile("cli \n\t"
+ "ldi r29 , %[ramendhi] \n\t"
+ "ldi r28 , %[ramendlo] \n\t"
+#if (FLASHEND > 131071)
+ "ldi r18 , %[bootaddrhi] \n\t"
+ "st Y+, r18 \n\t"
+#endif
+ "ldi r18 , %[bootaddrme] \n\t"
+ "st Y+, r18 \n\t"
+ "ldi r18 , %[bootaddrlo] \n\t"
+ "st Y+, r18 \n\t"
+ "out %[mcucsrio], __zero_reg__ \n\t"
+ "bootloader_startup_loop%=: \n\t"
+ "rjmp bootloader_startup_loop%= \n\t"
+ :
+ : [mcucsrio] "I"(_SFR_IO_ADDR(MCUCSR)),
+#if (FLASHEND > 131071)
+ [ramendhi] "M"(((RAMEND - 2) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 2) >> 0) & 0xff), [bootaddrhi] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 16) & 0xff),
+#else
+ [ramendhi] "M"(((RAMEND - 1) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 1) >> 0) & 0xff),
+#endif
+ [bootaddrme] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff), [bootaddrlo] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff));
+}
diff --git a/platforms/avr/drivers/analog.c b/platforms/avr/drivers/analog.c
index 628835ccef..ed4d563609 100644
--- a/platforms/avr/drivers/analog.c
+++ b/platforms/avr/drivers/analog.c
@@ -21,9 +21,13 @@
static uint8_t aref = ADC_REF_POWER;
-void analogReference(uint8_t mode) { aref = mode & (_BV(REFS1) | _BV(REFS0)); }
+void analogReference(uint8_t mode) {
+ aref = mode & (_BV(REFS1) | _BV(REFS0));
+}
-int16_t analogReadPin(pin_t pin) { return adc_read(pinToMux(pin)); }
+int16_t analogReadPin(pin_t pin) {
+ return adc_read(pinToMux(pin));
+}
uint8_t pinToMux(pin_t pin) {
switch (pin) {
diff --git a/platforms/avr/drivers/analog.h b/platforms/avr/drivers/analog.h
index fa2fb0d89b..fb13e106ff 100644
--- a/platforms/avr/drivers/analog.h
+++ b/platforms/avr/drivers/analog.h
@@ -32,21 +32,21 @@ int16_t adc_read(uint8_t mux);
}
#endif
-#define ADC_REF_EXTERNAL 0 // AREF, Internal Vref turned off
-#define ADC_REF_POWER _BV(REFS0) // AVCC with external capacitor on AREF pin
-#define ADC_REF_INTERNAL (_BV(REFS1) | _BV(REFS0)) // Internal 2.56V Voltage Reference with external capacitor on AREF pin (1.1V for 328P)
+#define ADC_REF_EXTERNAL 0 // AREF, Internal Vref turned off
+#define ADC_REF_POWER _BV(REFS0) // AVCC with external capacitor on AREF pin
+#define ADC_REF_INTERNAL (_BV(REFS1) | _BV(REFS0)) // Internal 2.56V Voltage Reference with external capacitor on AREF pin (1.1V for 328P)
// These prescaler values are for high speed mode, ADHSM = 1
#if F_CPU == 16000000L || F_CPU == 12000000L
-# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS1)) // /64
+# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS1)) // /64
#elif F_CPU == 8000000L
-# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS0)) // /32
+# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS0)) // /32
#elif F_CPU == 4000000L
-# define ADC_PRESCALER (_BV(ADPS2)) // /16
+# define ADC_PRESCALER (_BV(ADPS2)) // /16
#elif F_CPU == 2000000L
-# define ADC_PRESCALER (_BV(ADPS1) | _BV(ADPS0)) // /8
+# define ADC_PRESCALER (_BV(ADPS1) | _BV(ADPS0)) // /8
#elif F_CPU == 1000000L
-# define ADC_PRESCALER _BV(ADPS1) // /4
+# define ADC_PRESCALER _BV(ADPS1) // /4
#else
-# define ADC_PRESCALER _BV(ADPS0) // /2
+# define ADC_PRESCALER _BV(ADPS0) // /2
#endif
diff --git a/platforms/avr/drivers/audio_pwm_hardware.c b/platforms/avr/drivers/audio_pwm_hardware.c
index df03a4558c..78776ee48a 100644
--- a/platforms/avr/drivers/audio_pwm_hardware.c
+++ b/platforms/avr/drivers/audio_pwm_hardware.c
@@ -152,7 +152,7 @@ extern uint8_t note_timbre;
#ifdef AUDIO1_PIN_SET
static float channel_1_frequency = 0.0f;
void channel_1_set_frequency(float freq) {
- if (freq == 0.0f) // a pause/rest is a valid "note" with freq=0
+ if (freq == 0.0f) // a pause/rest is a valid "note" with freq=0
{
// disable the output, but keep the pwm-ISR going (with the previous
// frequency) so the audio-state keeps getting updated
@@ -160,7 +160,7 @@ void channel_1_set_frequency(float freq) {
AUDIO1_TCCRxA &= ~(_BV(AUDIO1_COMxy1) | _BV(AUDIO1_COMxy0));
return;
} else {
- AUDIO1_TCCRxA |= _BV(AUDIO1_COMxy1); // enable output, PWM mode
+ AUDIO1_TCCRxA |= _BV(AUDIO1_COMxy1); // enable output, PWM mode
}
channel_1_frequency = freq;
@@ -202,7 +202,9 @@ void channel_2_set_frequency(float freq) {
AUDIO2_OCRxy = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre / 100);
}
-float channel_2_get_frequency(void) { return channel_2_frequency; }
+float channel_2_get_frequency(void) {
+ return channel_2_frequency;
+}
void channel_2_start(void) {
AUDIO2_TIMSKx |= _BV(AUDIO2_OCIExy);
diff --git a/platforms/avr/drivers/glcdfont.c b/platforms/avr/drivers/glcdfont.c
index 5e763b054f..57a21965de 100644
--- a/platforms/avr/drivers/glcdfont.c
+++ b/platforms/avr/drivers/glcdfont.c
@@ -10,14 +10,14 @@ static const unsigned char font[] PROGMEM = {
0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49, 0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41, 0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x03, 0x04, 0x78, 0x04, 0x03,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
- 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
- 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, 0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
- 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
- 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, 0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code
- 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
- 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
+ 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
+ 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, 0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
+ 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
+ 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, 0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code
+ 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
+ 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F,
- 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, 0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
- 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
+ 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, 0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
+ 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
};
diff --git a/platforms/avr/drivers/hd44780.c b/platforms/avr/drivers/hd44780.c
index f71069dece..f15d7d0da8 100644
--- a/platforms/avr/drivers/hd44780.c
+++ b/platforms/avr/drivers/hd44780.c
@@ -262,7 +262,7 @@ static uint8_t lcd_waitbusy(void)
delay(LCD_DELAY_BUSY_FLAG);
/* now read the address counter */
- return (lcd_read(0)); // return address counter
+ return (lcd_read(0)); // return address counter
} /* lcd_waitbusy */
@@ -362,17 +362,23 @@ void lcd_gotoxy(uint8_t x, uint8_t y) {
/*************************************************************************
*************************************************************************/
-int lcd_getxy(void) { return lcd_waitbusy(); }
+int lcd_getxy(void) {
+ return lcd_waitbusy();
+}
/*************************************************************************
Clear display and set cursor to home position
*************************************************************************/
-void lcd_clrscr(void) { lcd_command(1 << LCD_CLR); }
+void lcd_clrscr(void) {
+ lcd_command(1 << LCD_CLR);
+}
/*************************************************************************
Set cursor to home position
*************************************************************************/
-void lcd_home(void) { lcd_command(1 << LCD_HOME); }
+void lcd_home(void) {
+ lcd_command(1 << LCD_HOME);
+}
/*************************************************************************
Display character at current cursor position
@@ -382,7 +388,7 @@ Returns: none
void lcd_putc(char c) {
uint8_t pos;
- pos = lcd_waitbusy(); // read busy-flag and address counter
+ pos = lcd_waitbusy(); // read busy-flag and address counter
if (c == '\n') {
lcd_newline(pos);
} else {
@@ -483,8 +489,8 @@ void lcd_init(uint8_t dispAttr) {
delay(LCD_DELAY_BOOTUP); /* wait 16ms or more after power-on */
/* initial write to lcd is 8bit */
- LCD_DATA1_PORT |= _BV(LCD_DATA1_PIN); // LCD_FUNCTION>>4;
- LCD_DATA0_PORT |= _BV(LCD_DATA0_PIN); // LCD_FUNCTION_8BIT>>4;
+ LCD_DATA1_PORT |= _BV(LCD_DATA1_PIN); // LCD_FUNCTION>>4;
+ LCD_DATA0_PORT |= _BV(LCD_DATA0_PIN); // LCD_FUNCTION_8BIT>>4;
lcd_e_toggle();
delay(LCD_DELAY_INIT); /* delay, busy flag can't be checked here */
@@ -497,7 +503,7 @@ void lcd_init(uint8_t dispAttr) {
delay(LCD_DELAY_INIT_REP); /* delay, busy flag can't be checked here */
/* now configure for 4bit mode */
- LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN); // LCD_FUNCTION_4BIT_1LINE>>4
+ LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN); // LCD_FUNCTION_4BIT_1LINE>>4
lcd_e_toggle();
delay(LCD_DELAY_INIT_4BIT); /* some displays need this additional delay */
diff --git a/platforms/avr/drivers/i2c_master.c b/platforms/avr/drivers/i2c_master.c
index 111b55d6b0..c1a7b5f72d 100644
--- a/platforms/avr/drivers/i2c_master.c
+++ b/platforms/avr/drivers/i2c_master.c
@@ -25,12 +25,15 @@
#include "wait.h"
#ifndef F_SCL
-# define F_SCL 400000UL // SCL frequency
+# define F_SCL 400000UL // SCL frequency
#endif
#ifndef I2C_START_RETRY_COUNT
# define I2C_START_RETRY_COUNT 20
-#endif // I2C_START_RETRY_COUNT
+#endif // I2C_START_RETRY_COUNT
+
+#define I2C_ACTION_READ 0x01
+#define I2C_ACTION_WRITE 0x00
#define TWBR_val (((F_CPU / F_SCL) - 16) / 2)
@@ -95,7 +98,7 @@ static i2c_status_t i2c_start_impl(uint8_t address, uint16_t timeout) {
i2c_status_t i2c_start(uint8_t address, uint16_t timeout) {
// Retry i2c_start_impl a bunch times in case the remote side has interrupts disabled.
uint16_t timeout_timer = timer_read();
- uint16_t time_slice = MAX(1, (timeout == (I2C_TIMEOUT_INFINITE)) ? 5 : (timeout / (I2C_START_RETRY_COUNT))); // if it's infinite, wait 1ms between attempts, otherwise split up the entire timeout into the number of retries
+ uint16_t time_slice = MAX(1, (timeout == (I2C_TIMEOUT_INFINITE)) ? 5 : (timeout / (I2C_START_RETRY_COUNT))); // if it's infinite, wait 1ms between attempts, otherwise split up the entire timeout into the number of retries
i2c_status_t status;
do {
status = i2c_start_impl(address, time_slice);
@@ -154,7 +157,7 @@ int16_t i2c_read_nack(uint16_t timeout) {
}
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) {
- i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
+ i2c_status_t status = i2c_start(address | I2C_ACTION_WRITE, timeout);
for (uint16_t i = 0; i < length && status >= 0; i++) {
status = i2c_write(data[i], timeout);
@@ -166,7 +169,7 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,
}
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
- i2c_status_t status = i2c_start(address | I2C_READ, timeout);
+ i2c_status_t status = i2c_start(address | I2C_ACTION_READ, timeout);
for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
status = i2c_read_ack(timeout);
diff --git a/platforms/avr/drivers/i2c_slave.c b/platforms/avr/drivers/i2c_slave.c
index 2907f164c0..660d271be2 100644
--- a/platforms/avr/drivers/i2c_slave.c
+++ b/platforms/avr/drivers/i2c_slave.c
@@ -29,7 +29,7 @@
# include "transactions.h"
static volatile bool is_callback_executor = false;
-#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
@@ -57,7 +57,7 @@ ISR(TWI_vect) {
slave_has_register_set = false;
#if defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
is_callback_executor = false;
-#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
break;
case TW_SR_DATA_ACK:
@@ -66,16 +66,16 @@ ISR(TWI_vect) {
if (!slave_has_register_set) {
buffer_address = TWDR;
- if (buffer_address >= I2C_SLAVE_REG_COUNT) { // address out of bounds dont ack
+ if (buffer_address >= I2C_SLAVE_REG_COUNT) { // address out of bounds dont ack
ack = 0;
buffer_address = 0;
}
- slave_has_register_set = true; // address has been received now fill in buffer
+ slave_has_register_set = true; // address has been received now fill in buffer
#if defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
// Work out if we're attempting to execute a callback
is_callback_executor = buffer_address == split_transaction_table[I2C_EXECUTE_CALLBACK].initiator2target_offset;
-#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
} else {
i2c_slave_reg[buffer_address] = TWDR;
buffer_address++;
@@ -88,7 +88,7 @@ ISR(TWI_vect) {
trans->slave_callback(trans->initiator2target_buffer_size, split_trans_initiator2target_buffer(trans), trans->target2initiator_buffer_size, split_trans_target2initiator_buffer(trans));
}
}
-#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+#endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
}
break;
diff --git a/platforms/avr/drivers/i2c_slave.h b/platforms/avr/drivers/i2c_slave.h
index a8647c9da3..178b6a29df 100644
--- a/platforms/avr/drivers/i2c_slave.h
+++ b/platforms/avr/drivers/i2c_slave.h
@@ -27,11 +27,11 @@
# if defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
# include "transport.h"
# define I2C_SLAVE_REG_COUNT sizeof(split_shared_memory_t)
-# else // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+# else // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
# define I2C_SLAVE_REG_COUNT 30
-# endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
+# endif // defined(USE_I2C) && defined(SPLIT_COMMON_TRANSACTIONS)
-#endif // I2C_SLAVE_REG_COUNT
+#endif // I2C_SLAVE_REG_COUNT
_Static_assert(I2C_SLAVE_REG_COUNT < 256, "I2C target registers must be single byte");
diff --git a/platforms/avr/drivers/ps2/ps2_io.c b/platforms/avr/drivers/ps2/ps2_io.c
index 7c826fbf1a..b75a1ab0be 100644
--- a/platforms/avr/drivers/ps2/ps2_io.c
+++ b/platforms/avr/drivers/ps2/ps2_io.c
@@ -23,7 +23,9 @@ void clock_lo(void) {
setPinOutput(PS2_CLOCK_PIN);
}
-void clock_hi(void) { setPinInputHigh(PS2_CLOCK_PIN); }
+void clock_hi(void) {
+ setPinInputHigh(PS2_CLOCK_PIN);
+}
bool clock_in(void) {
setPinInputHigh(PS2_CLOCK_PIN);
@@ -42,7 +44,9 @@ void data_lo(void) {
setPinOutput(PS2_DATA_PIN);
}
-void data_hi(void) { setPinInputHigh(PS2_DATA_PIN); }
+void data_hi(void) {
+ setPinInputHigh(PS2_DATA_PIN);
+}
bool data_in(void) {
setPinInputHigh(PS2_DATA_PIN);
diff --git a/platforms/avr/drivers/ps2/ps2_usart.c b/platforms/avr/drivers/ps2/ps2_usart.c
index 151cfcd68f..39ec930d4a 100644
--- a/platforms/avr/drivers/ps2/ps2_usart.c
+++ b/platforms/avr/drivers/ps2/ps2_usart.c
@@ -76,7 +76,7 @@ static inline bool pbuf_has_data(void);
static inline void pbuf_clear(void);
void ps2_host_init(void) {
- idle(); // without this many USART errors occur when cable is disconnected
+ idle(); // without this many USART errors occur when cable is disconnected
PS2_USART_INIT();
PS2_USART_RX_INT_ON();
// POR(150-2000ms) plus BAT(300-500ms) may take 2.5sec([3]p.20)
@@ -91,12 +91,12 @@ uint8_t ps2_host_send(uint8_t data) {
/* terminate a transmission if we have */
inhibit();
- _delay_us(100); // [4]p.13
+ _delay_us(100); // [4]p.13
/* 'Request to Send' and Start bit */
data_lo();
clock_hi();
- WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
+ WAIT(clock_lo, 10000, 10); // 10ms [5]p.50
/* Data bit[2-9] */
for (uint8_t i = 0; i < 8; i++) {
@@ -165,7 +165,7 @@ uint8_t ps2_host_recv(void) {
ISR(PS2_USART_RX_VECT) {
// TODO: request RESEND when error occurs?
- uint8_t error = PS2_USART_ERROR; // USART error should be read before data
+ uint8_t error = PS2_USART_ERROR; // USART error should be read before data
uint8_t data = PS2_USART_RX_DATA;
if (!error) {
pbuf_enqueue(data);
diff --git a/platforms/avr/drivers/serial.c b/platforms/avr/drivers/serial.c
index 9a7345a53d..6a36aa5f7f 100644
--- a/platforms/avr/drivers/serial.c
+++ b/platforms/avr/drivers/serial.c
@@ -16,6 +16,7 @@
#include <util/delay.h>
#include <stddef.h>
#include <stdbool.h>
+#include "gpio.h"
#include "serial.h"
#ifdef SOFT_SERIAL_PIN
@@ -119,12 +120,6 @@
# error invalid SOFT_SERIAL_PIN value
# endif
-# define setPinInputHigh(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF))
-# define setPinOutput(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF))
-# define writePinHigh(pin) (PORTx_ADDRESS(pin) |= _BV((pin)&0xF))
-# define writePinLow(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF))
-# define readPin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF)))
-
# define ALWAYS_INLINE __attribute__((always_inline))
# define NO_INLINE __attribute__((noinline))
# define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
@@ -161,59 +156,59 @@
# if SELECT_SOFT_SERIAL_SPEED == 0
// Very High speed
-# define SERIAL_DELAY 4 // micro sec
+# define SERIAL_DELAY 4 // micro sec
# if __GNUC__ < 6
-# define READ_WRITE_START_ADJUST 33 // cycles
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_START_ADJUST 33 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_START_ADJUST 34 // cycles
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_START_ADJUST 34 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# elif SELECT_SOFT_SERIAL_SPEED == 1
// High speed
-# define SERIAL_DELAY 6 // micro sec
+# define SERIAL_DELAY 6 // micro sec
# if __GNUC__ < 6
-# define READ_WRITE_START_ADJUST 30 // cycles
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_START_ADJUST 30 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_START_ADJUST 33 // cycles
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_START_ADJUST 33 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# elif SELECT_SOFT_SERIAL_SPEED == 2
// Middle speed
-# define SERIAL_DELAY 12 // micro sec
-# define READ_WRITE_START_ADJUST 30 // cycles
+# define SERIAL_DELAY 12 // micro sec
+# define READ_WRITE_START_ADJUST 30 // cycles
# if __GNUC__ < 6
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# elif SELECT_SOFT_SERIAL_SPEED == 3
// Low speed
-# define SERIAL_DELAY 24 // micro sec
-# define READ_WRITE_START_ADJUST 30 // cycles
+# define SERIAL_DELAY 24 // micro sec
+# define READ_WRITE_START_ADJUST 30 // cycles
# if __GNUC__ < 6
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# elif SELECT_SOFT_SERIAL_SPEED == 4
// Very Low speed
-# define SERIAL_DELAY 36 // micro sec
-# define READ_WRITE_START_ADJUST 30 // cycles
+# define SERIAL_DELAY 36 // micro sec
+# define READ_WRITE_START_ADJUST 30 // cycles
# if __GNUC__ < 6
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# elif SELECT_SOFT_SERIAL_SPEED == 5
// Ultra Low speed
-# define SERIAL_DELAY 48 // micro sec
-# define READ_WRITE_START_ADJUST 30 // cycles
+# define SERIAL_DELAY 48 // micro sec
+# define READ_WRITE_START_ADJUST 30 // cycles
# if __GNUC__ < 6
-# define READ_WRITE_WIDTH_ADJUST 3 // cycles
+# define READ_WRITE_WIDTH_ADJUST 3 // cycles
# else
-# define READ_WRITE_WIDTH_ADJUST 7 // cycles
+# define READ_WRITE_WIDTH_ADJUST 7 // cycles
# endif
# else
# error invalid SELECT_SOFT_SERIAL_SPEED value
@@ -228,29 +223,45 @@
# define SLAVE_INT_ACK_WIDTH 4
inline static void serial_delay(void) ALWAYS_INLINE;
-inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); }
+inline static void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
inline static void serial_delay_half1(void) ALWAYS_INLINE;
-inline static void serial_delay_half1(void) { _delay_us(SERIAL_DELAY_HALF1); }
+inline static void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
inline static void serial_delay_half2(void) ALWAYS_INLINE;
-inline static void serial_delay_half2(void) { _delay_us(SERIAL_DELAY_HALF2); }
+inline static void serial_delay_half2(void) {
+ _delay_us(SERIAL_DELAY_HALF2);
+}
inline static void serial_output(void) ALWAYS_INLINE;
-inline static void serial_output(void) { setPinOutput(SOFT_SERIAL_PIN); }
+inline static void serial_output(void) {
+ setPinOutput(SOFT_SERIAL_PIN);
+}
// make the serial pin an input with pull-up resistor
inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
-inline static void serial_input_with_pullup(void) { setPinInputHigh(SOFT_SERIAL_PIN); }
+inline static void serial_input_with_pullup(void) {
+ setPinInputHigh(SOFT_SERIAL_PIN);
+}
inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
-inline static uint8_t serial_read_pin(void) { return !!readPin(SOFT_SERIAL_PIN); }
+inline static uint8_t serial_read_pin(void) {
+ return !!readPin(SOFT_SERIAL_PIN);
+}
inline static void serial_low(void) ALWAYS_INLINE;
-inline static void serial_low(void) { writePinLow(SOFT_SERIAL_PIN); }
+inline static void serial_low(void) {
+ writePinLow(SOFT_SERIAL_PIN);
+}
inline static void serial_high(void) ALWAYS_INLINE;
-inline static void serial_high(void) { writePinHigh(SOFT_SERIAL_PIN); }
+inline static void serial_high(void) {
+ writePinHigh(SOFT_SERIAL_PIN);
+}
void soft_serial_initiator_init(void) {
serial_output();
@@ -291,7 +302,7 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
_delay_sub_us(READ_WRITE_START_ADJUST);
for (i = 0, byte = 0, p = PARITY; i < bit; i++) {
- serial_delay_half1(); // read the middle of pulses
+ serial_delay_half1(); // read the middle of pulses
if (serial_read_pin()) {
byte = (byte << 1) | 1;
p ^= 1;
@@ -303,7 +314,7 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
serial_delay_half2();
}
/* recive parity bit */
- serial_delay_half1(); // read the middle of pulses
+ serial_delay_half1(); // read the middle of pulses
pb = serial_read_pin();
_delay_sub_us(READ_WRITE_WIDTH_ADJUST);
serial_delay_half2();
@@ -335,7 +346,7 @@ void serial_write_chunk(uint8_t data, uint8_t bit) {
}
serial_delay();
- serial_low(); // sync_send() / senc_recv() need raise edge
+ serial_low(); // sync_send() / senc_recv() need raise edge
}
static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
@@ -361,19 +372,19 @@ static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
}
inline static void change_sender2reciver(void) {
- sync_send(); // 0
- serial_delay_half1(); // 1
- serial_low(); // 2
- serial_input_with_pullup(); // 2
- serial_delay_half1(); // 3
+ sync_send(); // 0
+ serial_delay_half1(); // 1
+ serial_low(); // 2
+ serial_input_with_pullup(); // 2
+ serial_delay_half1(); // 3
}
inline static void change_reciver2sender(void) {
- sync_recv(); // 0
- serial_delay(); // 1
- serial_low(); // 3
- serial_output(); // 3
- serial_delay_half1(); // 4
+ sync_recv(); // 0
+ serial_delay(); // 1
+ serial_low(); // 3
+ serial_output(); // 3
+ serial_delay_half1(); // 4
}
static inline uint8_t nibble_bits_count(uint8_t bits) {
@@ -396,11 +407,11 @@ ISR(SERIAL_PIN_INTERRUPT) {
}
serial_delay_half1();
- serial_high(); // response step1 low->high
+ serial_high(); // response step1 low->high
serial_output();
_delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT * SLAVE_INT_ACK_WIDTH);
split_transaction_desc_t *trans = &split_transaction_table[tid];
- serial_low(); // response step2 ack high->low
+ serial_low(); // response step2 ack high->low
// If the transaction has a callback, we can execute it now
if (trans->slave_callback) {
@@ -414,34 +425,22 @@ ISR(SERIAL_PIN_INTERRUPT) {
// target recive phase
if (trans->initiator2target_buffer_size > 0) {
- if (serial_recive_packet((uint8_t *)split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size)) {
- *trans->status = TRANSACTION_ACCEPTED;
- } else {
- *trans->status = TRANSACTION_DATA_ERROR;
- }
- } else {
- *trans->status = TRANSACTION_ACCEPTED;
+ serial_recive_packet((uint8_t *)split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size);
}
- sync_recv(); // weit initiator output to high
+ sync_recv(); // weit initiator output to high
}
/////////
// start transaction by initiator
//
-// int soft_serial_transaction(int sstd_index)
+// bool soft_serial_transaction(int sstd_index)
//
-// Returns:
-// TRANSACTION_END
-// TRANSACTION_NO_RESPONSE
-// TRANSACTION_DATA_ERROR
// this code is very time dependent, so we need to disable interrupts
-int soft_serial_transaction(int sstd_index) {
- if (sstd_index > NUM_TOTAL_TRANSACTIONS) return TRANSACTION_TYPE_ERROR;
+bool soft_serial_transaction(int sstd_index) {
+ if (sstd_index > NUM_TOTAL_TRANSACTIONS) return false;
split_transaction_desc_t *trans = &split_transaction_table[sstd_index];
- if (!trans->status) return TRANSACTION_TYPE_ERROR; // not registered
-
cli();
// signal to the target that we want to start a transaction
@@ -468,9 +467,8 @@ int soft_serial_transaction(int sstd_index) {
// slave failed to pull the line low, assume not present
serial_output();
serial_high();
- *trans->status = TRANSACTION_NO_RESPONSE;
sei();
- return TRANSACTION_NO_RESPONSE;
+ return false;
}
_delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
}
@@ -481,9 +479,8 @@ int soft_serial_transaction(int sstd_index) {
if (!serial_recive_packet((uint8_t *)split_trans_target2initiator_buffer(trans), trans->target2initiator_buffer_size)) {
serial_output();
serial_high();
- *trans->status = TRANSACTION_DATA_ERROR;
sei();
- return TRANSACTION_DATA_ERROR;
+ return false;
}
}
@@ -498,19 +495,8 @@ int soft_serial_transaction(int sstd_index) {
// always, release the line when not in use
sync_send();
- *trans->status = TRANSACTION_END;
- sei();
- return TRANSACTION_END;
-}
-
-int soft_serial_get_and_clean_status(int sstd_index) {
- split_transaction_desc_t *trans = &split_transaction_table[sstd_index];
- cli();
- int retval = *trans->status;
- *trans->status = 0;
- ;
sei();
- return retval;
+ return true;
}
#endif
diff --git a/platforms/avr/drivers/spi_master.c b/platforms/avr/drivers/spi_master.c
index 4e8fd3bcdf..ae9df03c02 100644
--- a/platforms/avr/drivers/spi_master.c
+++ b/platforms/avr/drivers/spi_master.c
@@ -125,7 +125,7 @@ spi_status_t spi_write(uint8_t data) {
}
spi_status_t spi_read() {
- SPDR = 0x00; // Dummy
+ SPDR = 0x00; // Dummy
uint16_t timeout_timer = timer_read();
while (!(SPSR & _BV(SPIF))) {
diff --git a/platforms/avr/drivers/ssd1306.c b/platforms/avr/drivers/ssd1306.c
index 1a09a2bcb7..7afbc09f00 100644
--- a/platforms/avr/drivers/ssd1306.c
+++ b/platforms/avr/drivers/ssd1306.c
@@ -161,7 +161,7 @@ bool iota_gfx_init(void) {
send_cmd1(DeActivateScroll);
send_cmd1(DisplayOn);
- send_cmd2(SetContrast, 0); // Dim
+ send_cmd2(SetContrast, 0); // Dim
clear_display();
@@ -226,7 +226,9 @@ void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
matrix_write_char_inner(matrix, c);
}
-void iota_gfx_write_char(uint8_t c) { matrix_write_char(&display, c); }
+void iota_gfx_write_char(uint8_t c) {
+ matrix_write_char(&display, c);
+}
void matrix_write(struct CharacterMatrix *matrix, const char *data) {
const char *end = data + strlen(data);
@@ -236,7 +238,9 @@ void matrix_write(struct CharacterMatrix *matrix, const char *data) {
}
}
-void iota_gfx_write(const char *data) { matrix_write(&display, data); }
+void iota_gfx_write(const char *data) {
+ matrix_write(&display, data);
+}
void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
while (true) {
@@ -249,7 +253,9 @@ void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
}
}
-void iota_gfx_write_P(const char *data) { matrix_write_P(&display, data); }
+void iota_gfx_write_P(const char *data) {
+ matrix_write_P(&display, data);
+}
void matrix_clear(struct CharacterMatrix *matrix) {
memset(matrix->display, ' ', sizeof(matrix->display));
@@ -257,7 +263,9 @@ void matrix_clear(struct CharacterMatrix *matrix) {
matrix->dirty = true;
}
-void iota_gfx_clear_screen(void) { matrix_clear(&display); }
+void iota_gfx_clear_screen(void) {
+ matrix_clear(&display);
+}
void matrix_render(struct CharacterMatrix *matrix) {
last_flush = timer_read();
@@ -301,7 +309,9 @@ done:
# endif
}
-void iota_gfx_flush(void) { matrix_render(&display); }
+void iota_gfx_flush(void) {
+ matrix_render(&display);
+}
__attribute__((weak)) void iota_gfx_task_user(void) {}
diff --git a/platforms/avr/drivers/uart.c b/platforms/avr/drivers/uart.c
index 01cf6b1fb8..fd5caf9a78 100644
--- a/platforms/avr/drivers/uart.c
+++ b/platforms/avr/drivers/uart.c
@@ -108,7 +108,7 @@ void uart_write(uint8_t data) {
// return immediately to avoid deadlock when interrupt is disabled(called from ISR)
if (tx_buffer_tail == i && (SREG & (1 << SREG_I)) == 0) return;
while (tx_buffer_tail == i)
- ; // wait until space in buffer
+ ; // wait until space in buffer
// cli();
tx_buffer[i] = data;
tx_buffer_head = i;
@@ -121,7 +121,7 @@ uint8_t uart_read(void) {
uint8_t data, i;
while (rx_buffer_head == rx_buffer_tail)
- ; // wait for character
+ ; // wait for character
i = rx_buffer_tail + 1;
if (i >= RX_BUFFER_SIZE) i = 0;
data = rx_buffer[i];
diff --git a/platforms/avr/drivers/ws2812.c b/platforms/avr/drivers/ws2812.c
index 9150b3c520..c461ab3ba7 100644
--- a/platforms/avr/drivers/ws2812.c
+++ b/platforms/avr/drivers/ws2812.c
@@ -110,7 +110,7 @@ static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t
asm volatile(" ldi %0,8 \n\t"
"loop%=: \n\t"
- " out %2,%3 \n\t" // '1' [01] '0' [01] - re
+ " out %2,%3 \n\t" // '1' [01] '0' [01] - re
#if (w1_nops & 1)
w_nop1
#endif
@@ -126,9 +126,9 @@ static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t
#if (w1_nops & 16)
w_nop16
#endif
- " sbrs %1,7 \n\t" // '1' [03] '0' [02]
- " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low
- " lsl %1 \n\t" // '1' [04] '0' [04]
+ " sbrs %1,7 \n\t" // '1' [03] '0' [02]
+ " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low
+ " lsl %1 \n\t" // '1' [04] '0' [04]
#if (w2_nops & 1)
w_nop1
#endif
@@ -144,7 +144,7 @@ static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t
#if (w2_nops & 16)
w_nop16
#endif
- " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high
+ " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high
#if (w3_nops & 1)
w_nop1
#endif
@@ -161,8 +161,8 @@ static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t
w_nop16
#endif
- " dec %0 \n\t" // '1' [+2] '0' [+2]
- " brne loop%=\n\t" // '1' [+3] '0' [+4]
+ " dec %0 \n\t" // '1' [+2] '0' [+2]
+ " brne loop%=\n\t" // '1' [+3] '0' [+4]
: "=&d"(ctr)
: "r"(curbyte), "I"(_SFR_IO_ADDR(PORTx_ADDRESS(RGB_DI_PIN))), "r"(maskhi), "r"(masklo));
}
diff --git a/platforms/avr/drivers/ws2812_i2c.c b/platforms/avr/drivers/ws2812_i2c.c
index 1c332e24b6..709f382254 100644
--- a/platforms/avr/drivers/ws2812_i2c.c
+++ b/platforms/avr/drivers/ws2812_i2c.c
@@ -13,7 +13,9 @@
# define WS2812_TIMEOUT 100
#endif
-void ws2812_init(void) { i2c_init(); }
+void ws2812_init(void) {
+ i2c_init();
+}
// Setleds for standard RGB
void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
diff --git a/platforms/avr/gpio.h b/platforms/avr/gpio.h
index e9be68491d..95f15c28dc 100644
--- a/platforms/avr/gpio.h
+++ b/platforms/avr/gpio.h
@@ -25,7 +25,9 @@ typedef uint8_t pin_t;
#define setPinInput(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF))
#define setPinInputHigh(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF))
#define setPinInputLow(pin) _Static_assert(0, "AVR processors cannot implement an input as pull low")
-#define setPinOutput(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF))
+#define setPinOutputPushPull(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF))
+#define setPinOutputOpenDrain(pin) _Static_assert(0, "AVR platform does not implement an open-drain output")
+#define setPinOutput(pin) setPinOutputPushPull(pin)
#define writePinHigh(pin) (PORTx_ADDRESS(pin) |= _BV((pin)&0xF))
#define writePinLow(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF))
@@ -34,16 +36,3 @@ typedef uint8_t pin_t;
#define readPin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF)))
#define togglePin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF))
-
-/* Operation of GPIO by port. */
-
-typedef uint8_t port_data_t;
-
-#define readPort(port) PINx_ADDRESS(port)
-
-#define setPortBitInput(port, bit) (DDRx_ADDRESS(port) &= ~_BV((bit)&0xF), PORTx_ADDRESS(port) &= ~_BV((bit)&0xF))
-#define setPortBitInputHigh(port, bit) (DDRx_ADDRESS(port) &= ~_BV((bit)&0xF), PORTx_ADDRESS(port) |= _BV((bit)&0xF))
-#define setPortBitOutput(port, bit) (DDRx_ADDRESS(port) |= _BV((bit)&0xF))
-
-#define writePortBitLow(port, bit) (PORTx_ADDRESS(port) &= ~_BV((bit)&0xF))
-#define writePortBitHigh(port, bit) (PORTx_ADDRESS(port) |= _BV((bit)&0xF))
diff --git a/platforms/avr/pin_defs.h b/platforms/avr/pin_defs.h
index 23d948041d..3889704a87 100644
--- a/platforms/avr/pin_defs.h
+++ b/platforms/avr/pin_defs.h
@@ -17,7 +17,7 @@
#include <avr/io.h>
-#define PORT_SHIFTER 4 // this may be 4 for all AVR chips
+#define PORT_SHIFTER 4 // this may be 4 for all AVR chips
// If you want to add more to this list, reference the PINx definitions in these header
// files: https://github.com/vancegroup-mirrors/avr-libc/tree/master/avr-libc/include/avr
diff --git a/platforms/avr/platform.mk b/platforms/avr/platform.mk
index b45108736f..4d9cafaeef 100644
--- a/platforms/avr/platform.mk
+++ b/platforms/avr/platform.mk
@@ -159,7 +159,7 @@ endif
bootloader:
ifeq ($(strip $(QMK_BOOTLOADER_TYPE)),)
- $(error Please set BOOTLOADER to "qmk-dfu" or "qmk-hid" first!)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,Please set BOOTLOADER to "qmk-dfu" or "qmk-hid" first!)
else
make -C lib/lufa/Bootloaders/$(QMK_BOOTLOADER_TYPE)/ clean
$(QMK_BIN) generate-dfu-header --quiet --keyboard $(KEYBOARD) --output lib/lufa/Bootloaders/$(QMK_BOOTLOADER_TYPE)/Keyboard.h
diff --git a/platforms/avr/printf.c b/platforms/avr/printf.c
index 9ad7a38693..062f70fa0b 100644
--- a/platforms/avr/printf.c
+++ b/platforms/avr/printf.c
@@ -17,4 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "xprintf.h"
#include "sendchar.h"
-void print_set_sendchar(sendchar_func_t func) { xdev_out(func); }
+void print_set_sendchar(sendchar_func_t func) {
+ xdev_out(func);
+}
diff --git a/platforms/avr/sleep_led.c b/platforms/avr/sleep_led.c
index 9a3b52abe5..b05431633b 100644
--- a/platforms/avr/sleep_led.c
+++ b/platforms/avr/sleep_led.c
@@ -12,7 +12,7 @@
#if SLEEP_LED_TIMER == 1
# define TCCRxB TCCR1B
# define TIMERx_COMPA_vect TIMER1_COMPA_vect
-# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
+# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
# define TIMSKx TIMSK
# else
# define TIMSKx TIMSK1
diff --git a/platforms/avr/suspend.c b/platforms/avr/suspend.c
index b614746e6c..1a7cd3b4ab 100644
--- a/platforms/avr/suspend.c
+++ b/platforms/avr/suspend.c
@@ -2,12 +2,9 @@
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
-#include "matrix.h"
-#include "action.h"
#include "suspend.h"
+#include "action.h"
#include "timer.h"
-#include "led.h"
-#include "host.h"
#ifdef PROTOCOL_LUFA
# include "lufa.h"
@@ -16,19 +13,6 @@
# include "vusb.h"
#endif
-/** \brief Suspend idle
- *
- * FIXME: needs doc
- */
-void suspend_idle(uint8_t time) {
- cli();
- set_sleep_mode(SLEEP_MODE_IDLE);
- sleep_enable();
- sei();
- sleep_cpu();
- sleep_disable();
-}
-
// TODO: This needs some cleanup
#if !defined(NO_SUSPEND_POWER_DOWN) && defined(WDT_vect)
@@ -91,6 +75,18 @@ static void power_down(uint8_t wdto) {
// Disable watchdog after sleep
wdt_disable();
}
+
+/* watchdog timeout */
+ISR(WDT_vect) {
+ // compensate timer for sleep
+ switch (wdt_timeout) {
+ case WDTO_15MS:
+ timer_count += 15 + 2; // WDTO_15MS + 2(from observation)
+ break;
+ default:;
+ }
+}
+
#endif
/** \brief Suspend power down
@@ -115,18 +111,6 @@ void suspend_power_down(void) {
#endif
}
-__attribute__((weak)) void matrix_power_up(void) {}
-__attribute__((weak)) void matrix_power_down(void) {}
-bool suspend_wakeup_condition(void) {
- matrix_power_up();
- matrix_scan();
- matrix_power_down();
- for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
- if (matrix_get_row(r)) return true;
- }
- return false;
-}
-
/** \brief run immediately after wakeup
*
* FIXME: needs doc
@@ -137,16 +121,3 @@ void suspend_wakeup_init(void) {
suspend_wakeup_init_quantum();
}
-
-#if !defined(NO_SUSPEND_POWER_DOWN) && defined(WDT_vect)
-/* watchdog timeout */
-ISR(WDT_vect) {
- // compensate timer for sleep
- switch (wdt_timeout) {
- case WDTO_15MS:
- timer_count += 15 + 2; // WDTO_15MS + 2(from observation)
- break;
- default:;
- }
-}
-#endif
diff --git a/platforms/avr/timer.c b/platforms/avr/timer.c
index c2e6c6e081..9fb671ae8d 100644
--- a/platforms/avr/timer.c
+++ b/platforms/avr/timer.c
@@ -73,7 +73,9 @@ void timer_init(void) {
* FIXME: needs doc
*/
inline void timer_clear(void) {
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { timer_count = 0; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ timer_count = 0;
+ }
}
/** \brief timer read
@@ -83,7 +85,9 @@ inline void timer_clear(void) {
inline uint16_t timer_read(void) {
uint32_t t;
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { t = timer_count; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return (t & 0xFFFF);
}
@@ -95,7 +99,9 @@ inline uint16_t timer_read(void) {
inline uint32_t timer_read32(void) {
uint32_t t;
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { t = timer_count; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return t;
}
@@ -107,7 +113,9 @@ inline uint32_t timer_read32(void) {
inline uint16_t timer_elapsed(uint16_t last) {
uint32_t t;
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { t = timer_count; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return TIMER_DIFF_16((t & 0xFFFF), last);
}
@@ -119,7 +127,9 @@ inline uint16_t timer_elapsed(uint16_t last) {
inline uint32_t timer_elapsed32(uint32_t last) {
uint32_t t;
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { t = timer_count; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return TIMER_DIFF_32(t, last);
}
@@ -130,4 +140,6 @@ inline uint32_t timer_elapsed32(uint32_t last) {
#else
# define TIMER_INTERRUPT_VECTOR TIMER0_COMP_vect
#endif
-ISR(TIMER_INTERRUPT_VECTOR, ISR_NOBLOCK) { timer_count++; }
+ISR(TIMER_INTERRUPT_VECTOR, ISR_NOBLOCK) {
+ timer_count++;
+}
diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/bootloader_defs.h b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/bootloader_defs.h
deleted file mode 100644
index 4da3d39a32..0000000000
--- a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/bootloader_defs.h b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/bootloader_defs.h
deleted file mode 100644
index 4da3d39a32..0000000000
--- a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/platforms/chibios/boards/GENERIC_STM32_F042X6/configs/bootloader_defs.h b/platforms/chibios/boards/GENERIC_STM32_F042X6/configs/bootloader_defs.h
deleted file mode 100644
index 25113425a6..0000000000
--- a/platforms/chibios/boards/GENERIC_STM32_F042X6/configs/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFC400
diff --git a/platforms/chibios/boards/GENERIC_STM32_F072XB/configs/bootloader_defs.h b/platforms/chibios/boards/GENERIC_STM32_F072XB/configs/bootloader_defs.h
deleted file mode 100644
index dccd0fa5d1..0000000000
--- a/platforms/chibios/boards/GENERIC_STM32_F072XB/configs/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here (page 175):
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/bootloader_defs.h b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/bootloader_defs.h
deleted file mode 100644
index 87ac7b10dc..0000000000
--- a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/bootloader_defs.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/config.h
index cc52a953ed..90a41326a1 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/config.h
@@ -17,7 +17,7 @@
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up by checking against ST's application note AN2606.
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
+
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#endif
diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/config.h
index cc52a953ed..90a41326a1 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/config.h
@@ -17,7 +17,7 @@
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up by checking against ST's application note AN2606.
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
+
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#endif
diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h
index cc52a953ed..90a41326a1 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h
@@ -17,7 +17,7 @@
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up by checking against ST's application note AN2606.
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
+
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#endif
diff --git a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/config.h
deleted file mode 100644
index 39ce627e77..0000000000
--- a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2018-2020 Nick Brassel (@tzarc)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here (page 175):
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
diff --git a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/config.h
index c27c61b19a..fc9055ccfb 100644
--- a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/config.h
@@ -17,7 +17,6 @@
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up by checking against ST's application note AN2606.
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
#define PAL_STM32_OSPEED_HIGHEST PAL_STM32_OSPEED_HIGH
diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/board/board.mk b/platforms/chibios/boards/GENERIC_STM32_L432XC/board/board.mk
new file mode 100644
index 0000000000..1250385eb8
--- /dev/null
+++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/board/board.mk
@@ -0,0 +1,9 @@
+# List of all the board related files.
+BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO32_L432KC/board.c
+
+# Required include directories
+BOARDINC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO32_L432KC
+
+# Shared variables
+ALLCSRC += $(BOARDSRC)
+ALLINC += $(BOARDINC)
diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/config.h
new file mode 100644
index 0000000000..b1838b30a8
--- /dev/null
+++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/config.h
@@ -0,0 +1,10 @@
+// Copyright 2021 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+// Fixup equivalent usages within QMK as the base board definitions only go up to high
+#define PAL_STM32_OSPEED_HIGHEST PAL_STM32_OSPEED_HIGH
+
+#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
+# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
+#endif
diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h
new file mode 100644
index 0000000000..707134d49e
--- /dev/null
+++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h
@@ -0,0 +1,267 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * STM32L4xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+#define STM32L4xx_MCUCONF
+#define STM32L432_MCUCONF
+#define STM32L433_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_VOS STM32_VOS_RANGE1
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI16_ENABLED TRUE
+#define STM32_HSI48_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_MSIPLL_ENABLED FALSE
+#define STM32_MSIRANGE STM32_MSIRANGE_4M
+#define STM32_MSISRANGE STM32_MSISRANGE_4M
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI16
+#define STM32_PLLM_VALUE 1
+#define STM32_PLLN_VALUE 10
+#define STM32_PLLPDIV_VALUE 0
+#define STM32_PLLP_VALUE 7
+#define STM32_PLLQ_VALUE 2
+#define STM32_PLLR_VALUE 2
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV1
+#define STM32_PPRE2 STM32_PPRE2_DIV1
+#define STM32_STOPWUCK STM32_STOPWUCK_MSI
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_MCOPRE STM32_MCOPRE_DIV1
+#define STM32_LSCOSEL STM32_LSCOSEL_NOCLOCK
+#define STM32_PLLSAI1N_VALUE 24
+#define STM32_PLLSAI1PDIV_VALUE 0
+#define STM32_PLLSAI1P_VALUE 7
+#define STM32_PLLSAI1Q_VALUE 2
+#define STM32_PLLSAI1R_VALUE 2
+
+/*
+ * Peripherals clock sources.
+ */
+#define STM32_USART1SEL STM32_USART1SEL_SYSCLK
+#define STM32_USART2SEL STM32_USART2SEL_SYSCLK
+#define STM32_LPUART1SEL STM32_LPUART1SEL_SYSCLK
+#define STM32_I2C1SEL STM32_I2C1SEL_SYSCLK
+#define STM32_I2C3SEL STM32_I2C3SEL_SYSCLK
+#define STM32_LPTIM1SEL STM32_LPTIM1SEL_PCLK1
+#define STM32_LPTIM2SEL STM32_LPTIM2SEL_PCLK1
+#define STM32_SAI1SEL STM32_SAI1SEL_OFF
+#define STM32_CLK48SEL STM32_CLK48SEL_HSI48
+#define STM32_ADCSEL STM32_ADCSEL_SYSCLK
+#define STM32_SWPMI1SEL STM32_SWPMI1SEL_PCLK1
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * IRQ system settings.
+ */
+#define STM32_IRQ_EXTI0_PRIORITY 6
+#define STM32_IRQ_EXTI1_PRIORITY 6
+#define STM32_IRQ_EXTI2_PRIORITY 6
+#define STM32_IRQ_EXTI3_PRIORITY 6
+#define STM32_IRQ_EXTI4_PRIORITY 6
+#define STM32_IRQ_EXTI5_9_PRIORITY 6
+#define STM32_IRQ_EXTI10_15_PRIORITY 6
+#define STM32_IRQ_EXTI1635_38_PRIORITY 6
+#define STM32_IRQ_EXTI18_PRIORITY 6
+#define STM32_IRQ_EXTI19_PRIORITY 6
+#define STM32_IRQ_EXTI20_PRIORITY 6
+#define STM32_IRQ_EXTI21_22_PRIORITY 15
+
+#define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7
+#define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7
+#define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7
+#define STM32_IRQ_TIM1_CC_PRIORITY 7
+#define STM32_IRQ_TIM2_PRIORITY 7
+#define STM32_IRQ_TIM6_PRIORITY 7
+#define STM32_IRQ_TIM7_PRIORITY 7
+
+#define STM32_IRQ_USART1_PRIORITY 12
+#define STM32_IRQ_USART2_PRIORITY 12
+#define STM32_IRQ_LPUART1_PRIORITY 12
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_COMPACT_SAMPLES FALSE
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC12_IRQ_PRIORITY 5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC123_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC123_PRESC ADC_CCR_PRESC_DIV2
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE FALSE
+#define STM32_DAC_USE_DAC1_CH1 FALSE
+#define STM32_DAC_USE_DAC1_CH2 FALSE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_DAC_DAC1_CH2_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM6 FALSE
+#define STM32_GPT_USE_TIM7 FALSE
+#define STM32_GPT_USE_TIM15 FALSE
+#define STM32_GPT_USE_TIM16 FALSE
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C3 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM15 FALSE
+#define STM32_ICU_USE_TIM16 FALSE
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM15 FALSE
+#define STM32_PWM_USE_TIM16 FALSE
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_PRESA_VALUE 32
+#define STM32_RTC_PRESS_VALUE 1024
+#define STM32_RTC_CR_INIT 0
+#define STM32_RTC_TAMPCR_INIT 0
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_LPUART1 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_LPUART1_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * TRNG driver system settings.
+ */
+#define STM32_TRNG_USE_RNG1 FALSE
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 6)
+#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+/*
+ * WSPI driver system settings.
+ */
+#define STM32_WSPI_USE_QUADSPI1 FALSE
+#define STM32_WSPI_QUADSPI1_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_WSPI_QUADSPI1_PRESCALER_VALUE 1
+
+#endif /* MCUCONF_H */
diff --git a/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/config.h
index c27c61b19a..fc9055ccfb 100644
--- a/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/config.h
@@ -17,7 +17,6 @@
/* Address for jumping to bootloader on STM32 chips. */
/* It is chip dependent, the correct number can be looked up by checking against ST's application note AN2606.
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFF0000
#define PAL_STM32_OSPEED_HIGHEST PAL_STM32_OSPEED_HIGH
diff --git a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/bootloader_defs.h b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/bootloader_defs.h
deleted file mode 100644
index c929d2ad03..0000000000
--- a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/bootloader_defs.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Address for jumping to bootloader on WB32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.westberrytech.com/down/mcu/data/WB32F3G71xx_rm.pdf
- */
-#ifndef WB32_BOOTLOADER_ADDRESS
-# undef STM32_BOOTLOADER_ADDRESS
-# define WB32_BOOTLOADER_ADDRESS 0x1FFFE000
-# define STM32_BOOTLOADER_ADDRESS WB32_BOOTLOADER_ADDRESS
-#else
-# undef STM32_BOOTLOADER_ADDRESS
-# define STM32_BOOTLOADER_ADDRESS WB32_BOOTLOADER_ADDRESS
-#endif
diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/bootloader_defs.h b/platforms/chibios/boards/QMK_PROTON_C/configs/bootloader_defs.h
deleted file mode 100644
index 3b0e9d20a6..0000000000
--- a/platforms/chibios/boards/QMK_PROTON_C/configs/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/platforms/chibios/bootloader.c b/platforms/chibios/bootloader.c
deleted file mode 100644
index 58212948b0..0000000000
--- a/platforms/chibios/bootloader.c
+++ /dev/null
@@ -1,145 +0,0 @@
-#include "bootloader.h"
-
-#include <ch.h>
-#include <hal.h>
-#include "wait.h"
-
-/* This code should be checked whether it runs correctly on platforms */
-#define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0))
-#define BOOTLOADER_MAGIC 0xDEADBEEF
-#define MAGIC_ADDR (unsigned long *)(SYMVAL(__ram0_end__) - 4)
-
-#ifndef STM32_BOOTLOADER_DUAL_BANK
-# define STM32_BOOTLOADER_DUAL_BANK FALSE
-#endif
-
-#ifdef BOOTLOADER_TINYUF2
-
-# define DBL_TAP_MAGIC 0xf01669ef // From tinyuf2's board_api.h
-
-// defined by linker script
-extern uint32_t _board_dfu_dbl_tap[];
-# define DBL_TAP_REG _board_dfu_dbl_tap[0]
-
-void bootloader_jump(void) {
- DBL_TAP_REG = DBL_TAP_MAGIC;
- NVIC_SystemReset();
-}
-
-void enter_bootloader_mode_if_requested(void) { /* not needed, no two-stage reset */
-}
-
-#elif STM32_BOOTLOADER_DUAL_BANK
-
-// Need pin definitions
-# include "config_common.h"
-
-# ifndef STM32_BOOTLOADER_DUAL_BANK_GPIO
-# error "No STM32_BOOTLOADER_DUAL_BANK_GPIO defined, don't know which pin to toggle"
-# endif
-
-# ifndef STM32_BOOTLOADER_DUAL_BANK_POLARITY
-# define STM32_BOOTLOADER_DUAL_BANK_POLARITY 0
-# endif
-
-# ifndef STM32_BOOTLOADER_DUAL_BANK_DELAY
-# define STM32_BOOTLOADER_DUAL_BANK_DELAY 100000
-# endif
-
-extern uint32_t __ram0_end__;
-
-__attribute__((weak)) void bootloader_jump(void) {
- // For STM32 MCUs with dual-bank flash, and we're incapable of jumping to the bootloader. The first valid flash
- // bank is executed unconditionally after a reset, so it doesn't enter DFU unless BOOT0 is high. Instead, we do
- // it with hardware...in this case, we pull a GPIO high/low depending on the configuration, connects 3.3V to
- // BOOT0's RC charging circuit, lets it charge the capacitor, and issue a system reset. See the QMK discord
- // #hardware channel pins for an example circuit.
- palSetPadMode(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_MODE_OUTPUT_PUSHPULL);
-# if STM32_BOOTLOADER_DUAL_BANK_POLARITY
- palSetPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO));
-# else
- palClearPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO));
-# endif
-
- // Wait for a while for the capacitor to charge
- wait_ms(100);
-
- // Issue a system reset to get the ROM bootloader to execute, with BOOT0 high
- NVIC_SystemReset();
-}
-
-void enter_bootloader_mode_if_requested(void) {} // not needed at all, but if anybody attempts to invoke it....
-
-#elif defined(STM32_BOOTLOADER_ADDRESS) // STM32_BOOTLOADER_DUAL_BANK
-
-extern uint32_t __ram0_end__;
-
-__attribute__((weak)) void bootloader_jump(void) {
- *MAGIC_ADDR = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader
- NVIC_SystemReset();
-}
-
-void enter_bootloader_mode_if_requested(void) {
- unsigned long *check = MAGIC_ADDR;
- if (*check == BOOTLOADER_MAGIC) {
- *check = 0;
- __set_CONTROL(0);
- __set_MSP(*(__IO uint32_t *)STM32_BOOTLOADER_ADDRESS);
- __enable_irq();
-
- typedef void (*BootJump_t)(void);
- BootJump_t boot_jump = *(BootJump_t *)(STM32_BOOTLOADER_ADDRESS + 4);
- boot_jump();
- while (1)
- ;
- }
-}
-
-#elif defined(GD32VF103)
-
-# define DBGMCU_KEY_UNLOCK 0x4B5A6978
-# define DBGMCU_CMD_RESET 0x1
-
-__IO uint32_t *DBGMCU_KEY = (uint32_t *)DBGMCU_BASE + 0x0CU;
-__IO uint32_t *DBGMCU_CMD = (uint32_t *)DBGMCU_BASE + 0x08U;
-
-__attribute__((weak)) void bootloader_jump(void) {
- /* The MTIMER unit of the GD32VF103 doesn't have the MSFRST
- * register to generate a software reset request.
- * BUT instead two undocumented registers in the debug peripheral
- * that allow issueing a software reset. WHO would need the MSFRST
- * register anyway? Source:
- * https://github.com/esmil/gd32vf103inator/blob/master/include/gd32vf103/dbg.h */
- *DBGMCU_KEY = DBGMCU_KEY_UNLOCK;
- *DBGMCU_CMD = DBGMCU_CMD_RESET;
-}
-
-void enter_bootloader_mode_if_requested(void) { /* Jumping to bootloader is not possible from user code. */
-}
-
-#elif defined(KL2x) || defined(K20x) || defined(MK66F18) || defined(MIMXRT1062) // STM32_BOOTLOADER_DUAL_BANK // STM32_BOOTLOADER_ADDRESS
-/* Kinetis */
-
-# if defined(BOOTLOADER_KIIBOHD)
-/* Kiibohd Bootloader (MCHCK and Infinity KB) */
-# define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000
-const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
-__attribute__((weak)) void bootloader_jump(void) {
- void *volatile vbat = (void *)VBAT;
- __builtin_memcpy(vbat, (const void *)sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic));
- // request reset
- SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk;
-}
-
-# else /* defined(BOOTLOADER_KIIBOHD) */
-/* Default for Kinetis - expecting an ARM Teensy */
-# include "wait.h"
-__attribute__((weak)) void bootloader_jump(void) {
- wait_ms(100);
- __BKPT(0);
-}
-# endif /* defined(BOOTLOADER_KIIBOHD) */
-
-#else /* neither STM32 nor KINETIS */
-__attribute__((weak)) void bootloader_jump(void) {}
-#endif
diff --git a/platforms/chibios/bootloaders/custom.c b/platforms/chibios/bootloaders/custom.c
new file mode 100644
index 0000000000..bba9fc4637
--- /dev/null
+++ b/platforms/chibios/bootloaders/custom.c
@@ -0,0 +1,21 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+__attribute__((weak)) void bootloader_jump(void) {}
+
+__attribute__((weak)) void enter_bootloader_mode_if_requested(void) {}
diff --git a/platforms/chibios/bootloaders/gd32v_dfu.c b/platforms/chibios/bootloaders/gd32v_dfu.c
new file mode 100644
index 0000000000..baa7d1f882
--- /dev/null
+++ b/platforms/chibios/bootloaders/gd32v_dfu.c
@@ -0,0 +1,40 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+#include <hal.h>
+
+#define DBGMCU_KEY_UNLOCK 0x4B5A6978
+#define DBGMCU_CMD_RESET 0x1
+
+__IO uint32_t *DBGMCU_KEY = (uint32_t *)DBGMCU_BASE + 0x0CU;
+__IO uint32_t *DBGMCU_CMD = (uint32_t *)DBGMCU_BASE + 0x08U;
+
+__attribute__((weak)) void bootloader_jump(void) {
+ /* The MTIMER unit of the GD32VF103 doesn't have the MSFRST
+ * register to generate a software reset request.
+ * BUT instead two undocumented registers in the debug peripheral
+ * that allow issueing a software reset. WHO would need the MSFRST
+ * register anyway? Source:
+ * https://github.com/esmil/gd32vf103inator/blob/master/include/gd32vf103/dbg.h */
+ *DBGMCU_KEY = DBGMCU_KEY_UNLOCK;
+ *DBGMCU_CMD = DBGMCU_CMD_RESET;
+}
+
+/* Jumping to bootloader is not possible from user code. */
+void enter_bootloader_mode_if_requested(void) {}
diff --git a/platforms/chibios/bootloaders/halfkay.c b/platforms/chibios/bootloaders/halfkay.c
new file mode 100644
index 0000000000..168c2abc23
--- /dev/null
+++ b/platforms/chibios/bootloaders/halfkay.c
@@ -0,0 +1,25 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+#include "wait.h"
+
+__attribute__((weak)) void bootloader_jump(void) {
+ wait_ms(100);
+ __BKPT(0);
+}
diff --git a/platforms/chibios/bootloaders/kiibohd.c b/platforms/chibios/bootloaders/kiibohd.c
new file mode 100644
index 0000000000..911e807092
--- /dev/null
+++ b/platforms/chibios/bootloaders/kiibohd.c
@@ -0,0 +1,32 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+
+/* Kiibohd Bootloader (MCHCK and Infinity KB) */
+#define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000
+
+const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+__attribute__((weak)) void bootloader_jump(void) {
+ void *volatile vbat = (void *)VBAT;
+ __builtin_memcpy(vbat, (const void *)sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic));
+
+ // request reset
+ SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk;
+}
diff --git a/platforms/chibios/bootloaders/stm32_dfu.c b/platforms/chibios/bootloaders/stm32_dfu.c
new file mode 100644
index 0000000000..0e74111367
--- /dev/null
+++ b/platforms/chibios/bootloaders/stm32_dfu.c
@@ -0,0 +1,94 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+#include <hal.h>
+#include "wait.h"
+
+extern uint32_t __ram0_end__;
+
+#ifndef STM32_BOOTLOADER_DUAL_BANK
+# define STM32_BOOTLOADER_DUAL_BANK FALSE
+#endif
+
+#if STM32_BOOTLOADER_DUAL_BANK
+# include "config_common.h"
+
+# ifndef STM32_BOOTLOADER_DUAL_BANK_GPIO
+# error "No STM32_BOOTLOADER_DUAL_BANK_GPIO defined, don't know which pin to toggle"
+# endif
+
+# ifndef STM32_BOOTLOADER_DUAL_BANK_POLARITY
+# define STM32_BOOTLOADER_DUAL_BANK_POLARITY 0
+# endif
+
+# ifndef STM32_BOOTLOADER_DUAL_BANK_DELAY
+# define STM32_BOOTLOADER_DUAL_BANK_DELAY 100000
+# endif
+
+__attribute__((weak)) void bootloader_jump(void) {
+ // For STM32 MCUs with dual-bank flash, and we're incapable of jumping to the bootloader. The first valid flash
+ // bank is executed unconditionally after a reset, so it doesn't enter DFU unless BOOT0 is high. Instead, we do
+ // it with hardware...in this case, we pull a GPIO high/low depending on the configuration, connects 3.3V to
+ // BOOT0's RC charging circuit, lets it charge the capacitor, and issue a system reset. See the QMK discord
+ // #hardware channel pins for an example circuit.
+ palSetPadMode(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_MODE_OUTPUT_PUSHPULL);
+# if STM32_BOOTLOADER_DUAL_BANK_POLARITY
+ palSetPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO));
+# else
+ palClearPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO));
+# endif
+
+ // Wait for a while for the capacitor to charge
+ wait_ms(100);
+
+ // Issue a system reset to get the ROM bootloader to execute, with BOOT0 high
+ NVIC_SystemReset();
+}
+
+// not needed at all, but if anybody attempts to invoke it....
+void enter_bootloader_mode_if_requested(void) {}
+
+#else
+
+/* This code should be checked whether it runs correctly on platforms */
+# define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0))
+# define BOOTLOADER_MAGIC 0xDEADBEEF
+# define MAGIC_ADDR (unsigned long *)(SYMVAL(__ram0_end__) - 4)
+
+__attribute__((weak)) void bootloader_jump(void) {
+ *MAGIC_ADDR = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader
+ NVIC_SystemReset();
+}
+
+void enter_bootloader_mode_if_requested(void) {
+ unsigned long *check = MAGIC_ADDR;
+ if (*check == BOOTLOADER_MAGIC) {
+ *check = 0;
+ __set_CONTROL(0);
+ __set_MSP(*(__IO uint32_t *)STM32_BOOTLOADER_ADDRESS);
+ __enable_irq();
+
+ typedef void (*BootJump_t)(void);
+ BootJump_t boot_jump = *(BootJump_t *)(STM32_BOOTLOADER_ADDRESS + 4);
+ boot_jump();
+ while (1)
+ ;
+ }
+}
+#endif
diff --git a/platforms/chibios/bootloaders/stm32duino.c b/platforms/chibios/bootloaders/stm32duino.c
new file mode 100644
index 0000000000..53d3ba0adb
--- /dev/null
+++ b/platforms/chibios/bootloaders/stm32duino.c
@@ -0,0 +1,23 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+
+__attribute__((weak)) void bootloader_jump(void) {
+ NVIC_SystemReset();
+}
diff --git a/platforms/chibios/bootloaders/tinyuf2.c b/platforms/chibios/bootloaders/tinyuf2.c
new file mode 100644
index 0000000000..9ffca5dec8
--- /dev/null
+++ b/platforms/chibios/bootloaders/tinyuf2.c
@@ -0,0 +1,34 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "bootloader.h"
+
+#include <ch.h>
+
+// From tinyuf2's board_api.h
+#define DBL_TAP_MAGIC 0xF01669EF
+
+// defined by linker script
+extern uint32_t _board_dfu_dbl_tap[];
+#define DBL_TAP_REG _board_dfu_dbl_tap[0]
+
+__attribute__((weak)) void bootloader_jump(void) {
+ DBL_TAP_REG = DBL_TAP_MAGIC;
+ NVIC_SystemReset();
+}
+
+/* not needed, no two-stage reset */
+void enter_bootloader_mode_if_requested(void) {}
diff --git a/platforms/chibios/chibios_config.h b/platforms/chibios/chibios_config.h
index 4e35736606..67d7541ba2 100644
--- a/platforms/chibios/chibios_config.h
+++ b/platforms/chibios/chibios_config.h
@@ -16,7 +16,7 @@
#pragma once
#ifndef USB_VBUS_PIN
-# define SPLIT_USB_DETECT // Force this on when dedicated pin is not used
+# define SPLIT_USB_DETECT // Force this on when dedicated pin is not used
#endif
// STM32 compatibility
@@ -76,7 +76,7 @@
# if defined(K20x) || defined(KL2x)
# define USE_I2CV1
-# define USE_I2CV1_CONTRIB // for some reason a bunch of ChibiOS-Contrib boards only have clock_speed
+# define USE_I2CV1_CONTRIB // for some reason a bunch of ChibiOS-Contrib boards only have clock_speed
# define USE_GPIOV1
# endif
#endif
diff --git a/platforms/chibios/drivers/analog.c b/platforms/chibios/drivers/analog.c
index eb437665f1..48a59fd290 100644
--- a/platforms/chibios/drivers/analog.c
+++ b/platforms/chibios/drivers/analog.c
@@ -101,9 +101,9 @@
// Options are 12, 10, 8, and 6 bit.
#ifndef ADC_RESOLUTION
-# ifdef ADC_CFGR_RES_10BITS // ADCv3, ADCv4
+# ifdef ADC_CFGR_RES_10BITS // ADCv3, ADCv4
# define ADC_RESOLUTION ADC_CFGR_RES_10BITS
-# else // ADCv1, ADCv5, or the bodge for ADCv2 above
+# else // ADCv1, ADCv5, or the bodge for ADCv2 above
# define ADC_RESOLUTION ADC_CFGR1_RES_10BIT
# endif
#endif
@@ -123,7 +123,7 @@ static ADCConversionGroup adcConversionGroup = {
.smpr = ADC_SAMPLING_RATE,
#elif defined(USE_ADCV2)
# if !defined(STM32F1XX) && !defined(GD32VF103)
- .cr2 = ADC_CR2_SWSTART, // F103 seem very unhappy with, F401 seems very unhappy without...
+ .cr2 = ADC_CR2_SWSTART, // F103 seem very unhappy with, F401 seems very unhappy without...
# endif
.smpr2 = ADC_SMPR2_SMP_AN0(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN1(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN3(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN4(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN5(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN6(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN7(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN8(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN9(ADC_SAMPLING_RATE),
.smpr1 = ADC_SMPR1_SMP_AN10(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN11(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN12(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN13(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN14(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN15(ADC_SAMPLING_RATE),
diff --git a/platforms/chibios/drivers/analog.h b/platforms/chibios/drivers/analog.h
index e61c394265..8a821719e3 100644
--- a/platforms/chibios/drivers/analog.h
+++ b/platforms/chibios/drivers/analog.h
@@ -28,7 +28,9 @@ typedef struct {
uint8_t adc;
} adc_mux;
#define TO_MUX(i, a) \
- (adc_mux) { i, a }
+ (adc_mux) { \
+ i, a \
+ }
int16_t analogReadPin(pin_t pin);
int16_t analogReadPinAdc(pin_t pin, uint8_t adc);
diff --git a/platforms/chibios/drivers/audio_dac_additive.c b/platforms/chibios/drivers/audio_dac_additive.c
index db304adb87..db07c4b393 100644
--- a/platforms/chibios/drivers/audio_dac_additive.c
+++ b/platforms/chibios/drivers/audio_dac_additive.c
@@ -52,19 +52,19 @@ static const dacsample_t dac_buffer_sine[AUDIO_DAC_BUFFER_SIZE] = {
// 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};
-#endif // AUDIO_DAC_SAMPLE_WAVEFORM_SINE
+#endif // AUDIO_DAC_SAMPLE_WAVEFORM_SINE
#ifdef AUDIO_DAC_SAMPLE_WAVEFORM_TRIANGLE
static const dacsample_t dac_buffer_triangle[AUDIO_DAC_BUFFER_SIZE] = {
// 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};
-#endif // AUDIO_DAC_SAMPLE_WAVEFORM_TRIANGLE
+#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] = 0, // first and
- [AUDIO_DAC_BUFFER_SIZE / 2 ... AUDIO_DAC_BUFFER_SIZE - 1] = AUDIO_DAC_SAMPLE_MAX, // second half
+ [0 ... AUDIO_DAC_BUFFER_SIZE / 2 - 1] = 0, // first and
+ [AUDIO_DAC_BUFFER_SIZE / 2 ... AUDIO_DAC_BUFFER_SIZE - 1] = AUDIO_DAC_SAMPLE_MAX, // second half
};
-#endif // AUDIO_DAC_SAMPLE_WAVEFORM_SQUARE
+#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] = {
@@ -77,7 +77,7 @@ static const dacsample_t dac_buffer_staircase[AUDIO_DAC_BUFFER_SIZE] = {
#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};
-#endif // AUDIO_DAC_SAMPLE_WAVEFORM_TRAPEZOID
+#endif // AUDIO_DAC_SAMPLE_WAVEFORM_TRAPEZOID
static dacsample_t dac_buffer_empty[AUDIO_DAC_BUFFER_SIZE] = {AUDIO_DAC_OFF_VALUE};
@@ -98,7 +98,7 @@ typedef enum {
OUTPUT_REACHED_ZERO_BEFORE_OFF,
OUTPUT_OFF,
OUTPUT_OFF_1,
- OUTPUT_OFF_2, // trailing off: giving the DAC two more conversion cycles until the AUDIO_DAC_OFF_VALUE reaches the output, then turn the timer off, which leaves the output at that level
+ OUTPUT_OFF_2, // trailing off: giving the DAC two more conversion cycles until the AUDIO_DAC_OFF_VALUE reaches the output, then turn the timer off, which leaves the output at that level
number_of_output_states
} output_states_t;
output_states_t state = OUTPUT_OFF_2;
@@ -171,7 +171,7 @@ static void dac_end(DACDriver *dacp) {
// work on the other half of the buffer
if (dacIsBufferComplete(dacp)) {
- sample_p += AUDIO_DAC_BUFFER_SIZE / 2; // 'half_index'
+ sample_p += AUDIO_DAC_BUFFER_SIZE / 2; // 'half_index'
}
for (uint8_t s = 0; s < AUDIO_DAC_BUFFER_SIZE / 2; s++) {
@@ -196,8 +196,8 @@ static void dac_end(DACDriver *dacp) {
* * *
* =====*=*================================================= 0x0
*/
- if (((sample_p[s] + (AUDIO_DAC_SAMPLE_MAX / 100)) > AUDIO_DAC_OFF_VALUE) && // value approaches from below
- (sample_p[s] < (AUDIO_DAC_OFF_VALUE + (AUDIO_DAC_SAMPLE_MAX / 100))) // or above
+ if (((sample_p[s] + (AUDIO_DAC_SAMPLE_MAX / 100)) > AUDIO_DAC_OFF_VALUE) && // value approaches from below
+ (sample_p[s] < (AUDIO_DAC_OFF_VALUE + (AUDIO_DAC_SAMPLE_MAX / 100))) // or above
) {
if ((OUTPUT_SHOULD_START == state) && (active_tones_snapshot_length > 0)) {
state = OUTPUT_RUN_NORMALLY;
@@ -220,7 +220,7 @@ static void dac_end(DACDriver *dacp) {
// -> saves cpu cycles (?)
for (uint8_t i = 0; i < active_tones; i++) {
float freq = audio_get_processed_frequency(i);
- if (freq > 0) { // disregard 'rest' notes, with valid frequency 0.0f; which would only lower the resulting waveform volume during the additive synthesis step
+ if (freq > 0) { // disregard 'rest' notes, with valid frequency 0.0f; which would only lower the resulting waveform volume during the additive synthesis step
active_tones_snapshot[active_tones_snapshot_length++] = freq;
}
}
@@ -321,7 +321,9 @@ void audio_driver_initialize() {
gptStart(&GPTD6, &gpt6cfg1);
}
-void audio_driver_stop(void) { state = OUTPUT_SHOULD_STOP; }
+void audio_driver_stop(void) {
+ state = OUTPUT_SHOULD_STOP;
+}
void audio_driver_start(void) {
gptStartContinuous(&GPTD6, 2U);
diff --git a/platforms/chibios/drivers/audio_dac_basic.c b/platforms/chibios/drivers/audio_dac_basic.c
index fac6513506..64439a1e3c 100644
--- a/platforms/chibios/drivers/audio_dac_basic.c
+++ b/platforms/chibios/drivers/audio_dac_basic.c
@@ -115,13 +115,15 @@ void channel_1_set_frequency(float freq) {
channel_1_frequency = freq;
channel_1_stop();
- if (freq <= 0.0) // a pause/rest has freq=0
+ if (freq <= 0.0) // a pause/rest has freq=0
return;
gpt6cfg1.frequency = 2 * freq * AUDIO_DAC_BUFFER_SIZE;
channel_1_start();
}
-float channel_1_get_frequency(void) { return channel_1_frequency; }
+float channel_1_get_frequency(void) {
+ return channel_1_frequency;
+}
void channel_2_start(void) {
gptStart(&GPTD7, &gpt7cfg1);
@@ -140,13 +142,15 @@ void channel_2_set_frequency(float freq) {
channel_2_frequency = freq;
channel_2_stop();
- if (freq <= 0.0) // a pause/rest has freq=0
+ if (freq <= 0.0) // a pause/rest has freq=0
return;
gpt7cfg1.frequency = 2 * freq * AUDIO_DAC_BUFFER_SIZE;
channel_2_start();
}
-float channel_2_get_frequency(void) { return channel_2_frequency; }
+float channel_2_get_frequency(void) {
+ return channel_2_frequency;
+}
static void gpt_audio_state_cb(GPTDriver *gptp) {
if (audio_update_state()) {
@@ -155,8 +159,8 @@ static void gpt_audio_state_cb(GPTDriver *gptp) {
channel_1_set_frequency(audio_get_processed_frequency(0));
channel_2_set_frequency(audio_get_processed_frequency(0));
-#else // two separate audio outputs/speakers
- // primary speaker on A4, optional secondary on A5
+#else // two separate audio outputs/speakers
+ // primary speaker on A4, optional secondary on A5
if (AUDIO_PIN == A4) {
channel_1_set_frequency(audio_get_processed_frequency(0));
if (AUDIO_PIN_ALT == A5) {
diff --git a/platforms/chibios/drivers/audio_pwm_hardware.c b/platforms/chibios/drivers/audio_pwm_hardware.c
index cd40019ee7..710f397609 100644
--- a/platforms/chibios/drivers/audio_pwm_hardware.c
+++ b/platforms/chibios/drivers/audio_pwm_hardware.c
@@ -72,7 +72,7 @@ static float channel_1_frequency = 0.0f;
void channel_1_set_frequency(float freq) {
channel_1_frequency = freq;
- if (freq <= 0.0) // a pause/rest has freq=0
+ if (freq <= 0.0) // a pause/rest has freq=0
return;
pwmcnt_t period = (pwmCFG.frequency / freq);
@@ -82,14 +82,18 @@ void channel_1_set_frequency(float freq) {
PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100));
}
-float channel_1_get_frequency(void) { return channel_1_frequency; }
+float channel_1_get_frequency(void) {
+ return channel_1_frequency;
+}
void channel_1_start(void) {
pwmStop(&AUDIO_PWM_DRIVER);
pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG);
}
-void channel_1_stop(void) { pwmStop(&AUDIO_PWM_DRIVER); }
+void channel_1_stop(void) {
+ pwmStop(&AUDIO_PWM_DRIVER);
+}
static void gpt_callback(GPTDriver *gptp);
GPTConfig gptCFG = {
@@ -108,9 +112,9 @@ void audio_driver_initialize(void) {
pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG);
// connect the AUDIO_PIN to the PWM hardware
-#if defined(USE_GPIOV1) // STM32F103C8
+#if defined(USE_GPIOV1) // STM32F103C8
palSetLineMode(AUDIO_PIN, PAL_MODE_ALTERNATE_PUSHPULL);
-#else // GPIOv2 (or GPIOv3 for f4xx, which is the same/compatible at this command)
+#else // GPIOv2 (or GPIOv3 for f4xx, which is the same/compatible at this command)
palSetLineMode(AUDIO_PIN, PAL_MODE_ALTERNATE(AUDIO_PWM_PAL_MODE));
#endif
@@ -135,10 +139,10 @@ void audio_driver_stop(void) {
* and updates the pwm to output that frequency
*/
static void gpt_callback(GPTDriver *gptp) {
- float freq; // TODO: freq_alt
+ float freq; // TODO: freq_alt
if (audio_update_state()) {
- freq = audio_get_processed_frequency(0); // freq_alt would be index=1
+ freq = audio_get_processed_frequency(0); // freq_alt would be index=1
channel_1_set_frequency(freq);
}
}
diff --git a/platforms/chibios/drivers/audio_pwm_software.c b/platforms/chibios/drivers/audio_pwm_software.c
index 15c3e98b6a..e01f86ea52 100644
--- a/platforms/chibios/drivers/audio_pwm_software.c
+++ b/platforms/chibios/drivers/audio_pwm_software.c
@@ -57,7 +57,7 @@ static float channel_1_frequency = 0.0f;
void channel_1_set_frequency(float freq) {
channel_1_frequency = freq;
- if (freq <= 0.0) // a pause/rest has freq=0
+ if (freq <= 0.0) // a pause/rest has freq=0
return;
pwmcnt_t period = (pwmCFG.frequency / freq);
@@ -68,7 +68,9 @@ void channel_1_set_frequency(float freq) {
PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100));
}
-float channel_1_get_frequency(void) { return channel_1_frequency; }
+float channel_1_get_frequency(void) {
+ return channel_1_frequency;
+}
void channel_1_start(void) {
pwmStop(&AUDIO_PWM_DRIVER);
@@ -81,10 +83,10 @@ void channel_1_start(void) {
void channel_1_stop(void) {
pwmStop(&AUDIO_PWM_DRIVER);
- palClearLine(AUDIO_PIN); // leave the line low, after last note was played
+ palClearLine(AUDIO_PIN); // leave the line low, after last note was played
#if defined(AUDIO_PIN_ALT) && defined(AUDIO_PIN_ALT_AS_NEGATIVE)
- palClearLine(AUDIO_PIN_ALT); // leave the line low, after last note was played
+ palClearLine(AUDIO_PIN_ALT); // leave the line low, after last note was played
#endif
}
@@ -100,7 +102,7 @@ static void pwm_audio_period_callback(PWMDriver *pwmp) {
static void pwm_audio_channel_interrupt_callback(PWMDriver *pwmp) {
(void)pwmp;
if (channel_1_frequency > 0) {
- palSetLine(AUDIO_PIN); // generate a PWM signal on any pin, not necessarily the one connected to the timer
+ palSetLine(AUDIO_PIN); // generate a PWM signal on any pin, not necessarily the one connected to the timer
#if defined(AUDIO_PIN_ALT) && defined(AUDIO_PIN_ALT_AS_NEGATIVE)
palClearLine(AUDIO_PIN_ALT);
#endif
@@ -131,7 +133,7 @@ void audio_driver_initialize(void) {
palClearLine(AUDIO_PIN_ALT);
#endif
- pwmEnablePeriodicNotification(&AUDIO_PWM_DRIVER); // enable pwm callbacks
+ pwmEnablePeriodicNotification(&AUDIO_PWM_DRIVER); // enable pwm callbacks
pwmEnableChannelNotification(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1);
gptStart(&AUDIO_STATE_TIMER, &gptCFG);
@@ -155,10 +157,10 @@ void audio_driver_stop(void) {
* and updates the pwm to output that frequency
*/
static void gpt_callback(GPTDriver *gptp) {
- float freq; // TODO: freq_alt
+ float freq; // TODO: freq_alt
if (audio_update_state()) {
- freq = audio_get_processed_frequency(0); // freq_alt would be index=1
+ freq = audio_get_processed_frequency(0); // freq_alt would be index=1
channel_1_set_frequency(freq);
}
}
diff --git a/platforms/chibios/drivers/eeprom/eeprom_stm32_L0_L1.h b/platforms/chibios/drivers/eeprom/eeprom_stm32_L0_L1.h
index a35defca8b..616d7ccbee 100644
--- a/platforms/chibios/drivers/eeprom/eeprom_stm32_L0_L1.h
+++ b/platforms/chibios/drivers/eeprom/eeprom_stm32_L0_L1.h
@@ -24,7 +24,7 @@
# define STM32_ONBOARD_EEPROM_SIZE 1024
# else
# include "eeconfig.h"
-# define STM32_ONBOARD_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO and EEPROM page sizing
+# define STM32_ONBOARD_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO and EEPROM page sizing
# endif
#endif
diff --git a/platforms/chibios/drivers/i2c_master.c b/platforms/chibios/drivers/i2c_master.c
index 43591d56f8..d10bdbabc1 100644
--- a/platforms/chibios/drivers/i2c_master.c
+++ b/platforms/chibios/drivers/i2c_master.c
@@ -27,8 +27,67 @@
#include "quantum.h"
#include "i2c_master.h"
#include <string.h>
+#include <ch.h>
#include <hal.h>
+#ifndef I2C1_SCL_PIN
+# define I2C1_SCL_PIN B6
+#endif
+#ifndef I2C1_SDA_PIN
+# define I2C1_SDA_PIN B7
+#endif
+
+#ifdef USE_I2CV1
+# ifndef I2C1_OPMODE
+# define I2C1_OPMODE OPMODE_I2C
+# endif
+# ifndef I2C1_CLOCK_SPEED
+# define I2C1_CLOCK_SPEED 100000 /* 400000 */
+# endif
+# ifndef I2C1_DUTY_CYCLE
+# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
+# endif
+#else
+// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
+// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
+# ifndef I2C1_TIMINGR_PRESC
+# define I2C1_TIMINGR_PRESC 0U
+# endif
+# ifndef I2C1_TIMINGR_SCLDEL
+# define I2C1_TIMINGR_SCLDEL 7U
+# endif
+# ifndef I2C1_TIMINGR_SDADEL
+# define I2C1_TIMINGR_SDADEL 0U
+# endif
+# ifndef I2C1_TIMINGR_SCLH
+# define I2C1_TIMINGR_SCLH 38U
+# endif
+# ifndef I2C1_TIMINGR_SCLL
+# define I2C1_TIMINGR_SCLL 129U
+# endif
+#endif
+
+#ifndef I2C_DRIVER
+# define I2C_DRIVER I2CD1
+#endif
+
+#ifdef USE_GPIOV1
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN
+# endif
+#else
+// The default PAL alternate modes are used to signal that the pins are used for I2C
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE 4
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE 4
+# endif
+#endif
+
static uint8_t i2c_address;
static const I2CConfig i2cconfig = {
@@ -144,4 +203,6 @@ i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uin
return chibios_to_qmk(&status);
}
-void i2c_stop(void) { i2cStop(&I2C_DRIVER); }
+void i2c_stop(void) {
+ i2cStop(&I2C_DRIVER);
+}
diff --git a/platforms/chibios/drivers/i2c_master.h b/platforms/chibios/drivers/i2c_master.h
index 5f082e9d1e..deee7ecc08 100644
--- a/platforms/chibios/drivers/i2c_master.h
+++ b/platforms/chibios/drivers/i2c_master.h
@@ -24,66 +24,7 @@
*/
#pragma once
-#include <ch.h>
-#include <hal.h>
-
-#ifndef I2C1_SCL_PIN
-# define I2C1_SCL_PIN B6
-#endif
-#ifndef I2C1_SDA_PIN
-# define I2C1_SDA_PIN B7
-#endif
-
-#ifdef USE_I2CV1
-# ifndef I2C1_OPMODE
-# define I2C1_OPMODE OPMODE_I2C
-# endif
-# ifndef I2C1_CLOCK_SPEED
-# define I2C1_CLOCK_SPEED 100000 /* 400000 */
-# endif
-# ifndef I2C1_DUTY_CYCLE
-# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
-# endif
-#else
-// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
-// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
-# ifndef I2C1_TIMINGR_PRESC
-# define I2C1_TIMINGR_PRESC 0U
-# endif
-# ifndef I2C1_TIMINGR_SCLDEL
-# define I2C1_TIMINGR_SCLDEL 7U
-# endif
-# ifndef I2C1_TIMINGR_SDADEL
-# define I2C1_TIMINGR_SDADEL 0U
-# endif
-# ifndef I2C1_TIMINGR_SCLH
-# define I2C1_TIMINGR_SCLH 38U
-# endif
-# ifndef I2C1_TIMINGR_SCLL
-# define I2C1_TIMINGR_SCLL 129U
-# endif
-#endif
-
-#ifndef I2C_DRIVER
-# define I2C_DRIVER I2CD1
-#endif
-
-#ifdef USE_GPIOV1
-# ifndef I2C1_SCL_PAL_MODE
-# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN
-# endif
-# ifndef I2C1_SDA_PAL_MODE
-# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN
-# endif
-#else
-// The default PAL alternate modes are used to signal that the pins are used for I2C
-# ifndef I2C1_SCL_PAL_MODE
-# define I2C1_SCL_PAL_MODE 4
-# endif
-# ifndef I2C1_SDA_PAL_MODE
-# define I2C1_SDA_PAL_MODE 4
-# endif
-#endif
+#include <stdint.h>
typedef int16_t i2c_status_t;
diff --git a/platforms/chibios/drivers/serial.c b/platforms/chibios/drivers/serial.c
index ef6f0aa8d5..6db5d85250 100644
--- a/platforms/chibios/drivers/serial.c
+++ b/platforms/chibios/drivers/serial.c
@@ -50,14 +50,30 @@
# error invalid SELECT_SOFT_SERIAL_SPEED value
#endif
-inline static void serial_delay(void) { wait_us(SERIAL_DELAY); }
-inline static void serial_delay_half(void) { wait_us(SERIAL_DELAY / 2); }
-inline static void serial_delay_blip(void) { wait_us(1); }
-inline static void serial_output(void) { setPinOutput(SOFT_SERIAL_PIN); }
-inline static void serial_input(void) { setPinInputHigh(SOFT_SERIAL_PIN); }
-inline static bool serial_read_pin(void) { return !!readPin(SOFT_SERIAL_PIN); }
-inline static void serial_low(void) { writePinLow(SOFT_SERIAL_PIN); }
-inline static void serial_high(void) { writePinHigh(SOFT_SERIAL_PIN); }
+inline static void serial_delay(void) {
+ wait_us(SERIAL_DELAY);
+}
+inline static void serial_delay_half(void) {
+ wait_us(SERIAL_DELAY / 2);
+}
+inline static void serial_delay_blip(void) {
+ wait_us(1);
+}
+inline static void serial_output(void) {
+ setPinOutput(SOFT_SERIAL_PIN);
+}
+inline static void serial_input(void) {
+ setPinInputHigh(SOFT_SERIAL_PIN);
+}
+inline static bool serial_read_pin(void) {
+ return !!readPin(SOFT_SERIAL_PIN);
+}
+inline static void serial_low(void) {
+ writePinLow(SOFT_SERIAL_PIN);
+}
+inline static void serial_high(void) {
+ writePinHigh(SOFT_SERIAL_PIN);
+}
void interrupt_handler(void *arg);
@@ -179,8 +195,6 @@ void interrupt_handler(void *arg) {
// wait for the sync to finish sending
serial_delay();
- *trans->status = (checksum_computed == checksum_received) ? TRANSACTION_ACCEPTED : TRANSACTION_DATA_ERROR;
-
// end transaction
serial_input();
@@ -193,17 +207,12 @@ void interrupt_handler(void *arg) {
/////////
// start transaction by initiator
//
-// int soft_serial_transaction(int sstd_index)
+// bool soft_serial_transaction(int sstd_index)
//
-// Returns:
-// TRANSACTION_END
-// TRANSACTION_NO_RESPONSE
-// TRANSACTION_DATA_ERROR
// this code is very time dependent, so we need to disable interrupts
-int soft_serial_transaction(int sstd_index) {
- if (sstd_index > NUM_TOTAL_TRANSACTIONS) return TRANSACTION_TYPE_ERROR;
+bool soft_serial_transaction(int sstd_index) {
+ if (sstd_index > NUM_TOTAL_TRANSACTIONS) return false;
split_transaction_desc_t *trans = &split_transaction_table[sstd_index];
- if (!trans->status) return TRANSACTION_TYPE_ERROR; // not registered
// TODO: remove extra delay between transactions
serial_delay();
@@ -226,14 +235,14 @@ int soft_serial_transaction(int sstd_index) {
// slave failed to pull the line low, assume not present
dprintf("serial::NO_RESPONSE\n");
chSysUnlock();
- return TRANSACTION_NO_RESPONSE;
+ return false;
}
// if the slave is present syncronize with it
uint8_t checksum = 0;
// send data to the slave
- serial_write_byte(sstd_index); // first chunk is transaction id
+ serial_write_byte(sstd_index); // first chunk is transaction id
sync_recv();
for (int i = 0; i < trans->initiator2target_buffer_size; ++i) {
@@ -245,7 +254,7 @@ int soft_serial_transaction(int sstd_index) {
sync_recv();
serial_delay();
- serial_delay(); // read mid pulses
+ serial_delay(); // read mid pulses
// receive data from the slave
uint8_t checksum_computed = 0;
@@ -266,7 +275,7 @@ int soft_serial_transaction(int sstd_index) {
serial_high();
chSysUnlock();
- return TRANSACTION_DATA_ERROR;
+ return false;
}
// always, release the line when not in use
@@ -274,5 +283,5 @@ int soft_serial_transaction(int sstd_index) {
serial_output();
chSysUnlock();
- return TRANSACTION_END;
+ return true;
}
diff --git a/platforms/chibios/drivers/serial_usart.c b/platforms/chibios/drivers/serial_usart.c
index 124e4be685..85c64214d1 100644
--- a/platforms/chibios/drivers/serial_usart.c
+++ b/platforms/chibios/drivers/serial_usart.c
@@ -36,7 +36,7 @@ static SerialDriver* serial_driver = &SERIAL_USART_DRIVER;
static inline bool react_to_transactions(void);
static inline bool __attribute__((nonnull)) receive(uint8_t* destination, const size_t size);
static inline bool __attribute__((nonnull)) send(const uint8_t* source, const size_t size);
-static inline int initiate_transaction(uint8_t sstd_index);
+static inline bool initiate_transaction(uint8_t sstd_index);
static inline void usart_clear(void);
/**
@@ -206,14 +206,12 @@ static inline bool react_to_transactions(void) {
to signal that the slave is ready to receive possible transaction buffers */
sstd_index ^= HANDSHAKE_MAGIC;
if (!send(&sstd_index, sizeof(sstd_index))) {
- *trans->status = TRANSACTION_DATA_ERROR;
return false;
}
/* Receive transaction buffer from the master. If this transaction requires it.*/
if (trans->initiator2target_buffer_size) {
if (!receive(split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size)) {
- *trans->status = TRANSACTION_DATA_ERROR;
return false;
}
}
@@ -226,12 +224,10 @@ static inline bool react_to_transactions(void) {
/* Send transaction buffer to the master. If this transaction requires it. */
if (trans->target2initiator_buffer_size) {
if (!send(split_trans_target2initiator_buffer(trans), trans->target2initiator_buffer_size)) {
- *trans->status = TRANSACTION_DATA_ERROR;
return false;
}
}
- *trans->status = TRANSACTION_ACCEPTED;
return true;
}
@@ -242,7 +238,7 @@ void soft_serial_initiator_init(void) {
usart_master_init(&serial_driver);
#if defined(MCU_STM32) && defined(SERIAL_USART_PIN_SWAP)
- serial_config.cr2 |= USART_CR2_SWAP; // master has swapped TX/RX pins
+ serial_config.cr2 |= USART_CR2_SWAP; // master has swapped TX/RX pins
#endif
sdStart(serial_driver, &serial_config);
@@ -252,11 +248,9 @@ void soft_serial_initiator_init(void) {
* @brief Start transaction from the master half to the slave half.
*
* @param index Transaction Table index of the transaction to start.
- * @return int TRANSACTION_NO_RESPONSE in case of Timeout.
- * TRANSACTION_TYPE_ERROR in case of invalid transaction index.
- * TRANSACTION_END in case of success.
+ * @return bool Indicates success of transaction.
*/
-int soft_serial_transaction(int index) {
+bool soft_serial_transaction(int index) {
/* Clear the receive queue, to start with a clean slate.
* Parts of failed transactions or spurious bytes could still be in it. */
usart_clear();
@@ -266,25 +260,19 @@ int soft_serial_transaction(int index) {
/**
* @brief Initiate transaction to slave half.
*/
-static inline int initiate_transaction(uint8_t sstd_index) {
+static inline bool initiate_transaction(uint8_t sstd_index) {
/* Sanity check that we are actually starting a valid transaction. */
if (sstd_index >= NUM_TOTAL_TRANSACTIONS) {
dprintln("USART: Illegal transaction Id.");
- return TRANSACTION_TYPE_ERROR;
+ return false;
}
split_transaction_desc_t* trans = &split_transaction_table[sstd_index];
- /* Transaction is not registered. Abort. */
- if (!trans->status) {
- dprintln("USART: Transaction not registered.");
- return TRANSACTION_TYPE_ERROR;
- }
-
/* Send transaction table index to the slave, which doubles as basic handshake token. */
if (!send(&sstd_index, sizeof(sstd_index))) {
dprintln("USART: Send Handshake failed.");
- return TRANSACTION_TYPE_ERROR;
+ return false;
}
uint8_t sstd_index_shake = 0xFF;
@@ -295,14 +283,14 @@ static inline int initiate_transaction(uint8_t sstd_index) {
*/
if (!receive(&sstd_index_shake, sizeof(sstd_index_shake)) || (sstd_index_shake != (sstd_index ^ HANDSHAKE_MAGIC))) {
dprintln("USART: Handshake failed.");
- return TRANSACTION_NO_RESPONSE;
+ return false;
}
/* Send transaction buffer to the slave. If this transaction requires it. */
if (trans->initiator2target_buffer_size) {
if (!send(split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size)) {
dprintln("USART: Send failed.");
- return TRANSACTION_NO_RESPONSE;
+ return false;
}
}
@@ -310,9 +298,9 @@ static inline int initiate_transaction(uint8_t sstd_index) {
if (trans->target2initiator_buffer_size) {
if (!receive(split_trans_target2initiator_buffer(trans), trans->target2initiator_buffer_size)) {
dprintln("USART: Receive failed.");
- return TRANSACTION_NO_RESPONSE;
+ return false;
}
}
- return TRANSACTION_END;
+ return true;
}
diff --git a/platforms/chibios/drivers/serial_usart.h b/platforms/chibios/drivers/serial_usart.h
index 7b135b31e0..81fe9e0113 100644
--- a/platforms/chibios/drivers/serial_usart.h
+++ b/platforms/chibios/drivers/serial_usart.h
@@ -50,15 +50,15 @@
#endif
#if !defined(USART_CR1_M0)
-# define USART_CR1_M0 USART_CR1_M // some platforms (f1xx) dont have this so
+# define USART_CR1_M0 USART_CR1_M // some platforms (f1xx) dont have this so
#endif
#if !defined(SERIAL_USART_CR1)
-# define SERIAL_USART_CR1 (USART_CR1_PCE | USART_CR1_PS | USART_CR1_M0) // parity enable, odd parity, 9 bit length
+# define SERIAL_USART_CR1 (USART_CR1_PCE | USART_CR1_PS | USART_CR1_M0) // parity enable, odd parity, 9 bit length
#endif
#if !defined(SERIAL_USART_CR2)
-# define SERIAL_USART_CR2 (USART_CR2_STOP_1) // 2 stop bits
+# define SERIAL_USART_CR2 (USART_CR2_STOP_1) // 2 stop bits
#endif
#if !defined(SERIAL_USART_CR3)
diff --git a/platforms/chibios/drivers/spi_master.c b/platforms/chibios/drivers/spi_master.c
index dde0bb0597..998bace550 100644
--- a/platforms/chibios/drivers/spi_master.c
+++ b/platforms/chibios/drivers/spi_master.c
@@ -115,7 +115,7 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) {
#elif defined(HT32)
spiConfig.cr0 = SPI_CR0_SELOEN;
- spiConfig.cr1 = SPI_CR1_MODE | 8; // 8 bits and in master mode
+ spiConfig.cr1 = SPI_CR1_MODE | 8; // 8 bits and in master mode
if (lsbFirst) {
spiConfig.cr1 |= SPI_CR1_FIRSTBIT;
diff --git a/platforms/chibios/drivers/uart.c b/platforms/chibios/drivers/uart.c
index d2ea5d6415..4884d7024f 100644
--- a/platforms/chibios/drivers/uart.c
+++ b/platforms/chibios/drivers/uart.c
@@ -43,7 +43,9 @@ void uart_init(uint32_t baud) {
}
}
-void uart_write(uint8_t data) { sdPut(&SERIAL_DRIVER, c); }
+void uart_write(uint8_t data) {
+ sdPut(&SERIAL_DRIVER, data);
+}
uint8_t uart_read(void) {
msg_t res = sdGet(&SERIAL_DRIVER);
@@ -51,8 +53,14 @@ uint8_t uart_read(void) {
return (uint8_t)res;
}
-void uart_transmit(const uint8_t *data, uint16_t length) { sdWrite(&SERIAL_DRIVER, data, length); }
+void uart_transmit(const uint8_t *data, uint16_t length) {
+ sdWrite(&SERIAL_DRIVER, data, length);
+}
-void uart_receive(uint8_t *data, uint16_t length) { sdRead(&SERIAL_DRIVER, data, length); }
+void uart_receive(uint8_t *data, uint16_t length) {
+ sdRead(&SERIAL_DRIVER, data, length);
+}
-bool uart_available(void) { return !sdGetWouldBlock(&SERIAL_DRIVER); }
+bool uart_available(void) {
+ return !sdGetWouldBlock(&SERIAL_DRIVER);
+}
diff --git a/platforms/chibios/drivers/usbpd_stm32g4.c b/platforms/chibios/drivers/usbpd_stm32g4.c
index f16ca8aeae..0096f22f07 100644
--- a/platforms/chibios/drivers/usbpd_stm32g4.c
+++ b/platforms/chibios/drivers/usbpd_stm32g4.c
@@ -18,7 +18,7 @@
#ifndef USBPD_UCPD1_CFG1
# define USBPD_UCPD1_CFG1 (UCPD_CFG1_PSC_UCPDCLK_0 | UCPD_CFG1_TRANSWIN_3 | UCPD_CFG1_IFRGAP_4 | UCPD_CFG1_HBITCLKDIV_4)
-#endif // USBPD_UCPD1_CFG1
+#endif // USBPD_UCPD1_CFG1
// Initialises the USBPD subsystem
__attribute__((weak)) void usbpd_init(void) {
@@ -64,7 +64,7 @@ __attribute__((weak)) usbpd_allowance_t usbpd_get_allowance(void) {
switch (vstate_max) {
case 0:
case 1:
- return USBPD_500MA; // Note that this is 500mA (i.e. max USB 2.0), not 900mA, as we're not using USB 3.1 as a sink device.
+ return USBPD_500MA; // Note that this is 500mA (i.e. max USB 2.0), not 900mA, as we're not using USB 3.1 as a sink device.
case 2:
return USBPD_1500MA;
case 3:
diff --git a/platforms/chibios/drivers/ws2812.c b/platforms/chibios/drivers/ws2812.c
index 7e870661de..1b3bb59842 100644
--- a/platforms/chibios/drivers/ws2812.c
+++ b/platforms/chibios/drivers/ws2812.c
@@ -10,7 +10,7 @@
# define NOP_FUDGE 0.4
# else
# error("NOP_FUDGE configuration required")
-# define NOP_FUDGE 1 // this just pleases the compile so the above error is easier to spot
+# define NOP_FUDGE 1 // this just pleases the compile so the above error is easier to spot
# endif
#endif
@@ -25,12 +25,12 @@
// The reset gap can be 6000 ns, but depending on the LED strip it may have to be increased
// to values like 600000 ns. If it is too small, the pixels will show nothing most of the time.
#ifndef WS2812_RES
-# define WS2812_RES (1000 * WS2812_TRST_US) // Width of the low gap between bits to cause a frame to latch
+# define WS2812_RES (1000 * WS2812_TRST_US) // Width of the low gap between bits to cause a frame to latch
#endif
#define NUMBER_NOPS 6
#define CYCLES_PER_SEC (CPU_CLOCK / NUMBER_NOPS * NOP_FUDGE)
-#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
+#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
#define NS_PER_CYCLE (NS_PER_SEC / CYCLES_PER_SEC)
#define NS_TO_CYCLES(n) ((n) / NS_PER_CYCLE)
@@ -67,7 +67,9 @@ void sendByte(uint8_t byte) {
}
}
-void ws2812_init(void) { palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE); }
+void ws2812_init(void) {
+ palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
+}
// Setleds for standard RGB
void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c
index 19ea3cfe8a..57187676d7 100644
--- a/platforms/chibios/drivers/ws2812_pwm.c
+++ b/platforms/chibios/drivers/ws2812_pwm.c
@@ -11,19 +11,19 @@
#endif
#ifndef WS2812_PWM_DRIVER
-# define WS2812_PWM_DRIVER PWMD2 // TIMx
+# define WS2812_PWM_DRIVER PWMD2 // TIMx
#endif
#ifndef WS2812_PWM_CHANNEL
-# define WS2812_PWM_CHANNEL 2 // Channel
+# define WS2812_PWM_CHANNEL 2 // Channel
#endif
#ifndef WS2812_PWM_PAL_MODE
-# define WS2812_PWM_PAL_MODE 2 // DI Pin's alternate function value
+# define WS2812_PWM_PAL_MODE 2 // DI Pin's alternate function value
#endif
#ifndef WS2812_DMA_STREAM
-# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA Stream for TIMx_UP
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA Stream for TIMx_UP
#endif
#ifndef WS2812_DMA_CHANNEL
-# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
+# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
#endif
#if (STM32_DMA_SUPPORTS_DMAMUX == TRUE) && !defined(WS2812_DMAMUX_ID)
# error "please consult your MCU's datasheet and specify in your config.h: #define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM?_UP"
@@ -56,7 +56,7 @@
#ifndef WS2812_PWM_TARGET_PERIOD
//# define WS2812_PWM_TARGET_PERIOD 800000 // Original code is 800k...?
-# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
+# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
#endif
/* --- PRIVATE CONSTANTS ---------------------------------------------------- */
@@ -259,8 +259,10 @@ write/read to/from the other buffer).
void ws2812_init(void) {
// Initialize led frame buffer
uint32_t i;
- for (i = 0; i < WS2812_COLOR_BIT_N; i++) ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
- for (i = 0; i < WS2812_RESET_BIT_N; i++) ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
+ for (i = 0; i < WS2812_COLOR_BIT_N; i++)
+ ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
+ for (i = 0; i < WS2812_RESET_BIT_N; i++)
+ ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
@@ -268,22 +270,22 @@ void ws2812_init(void) {
//#pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config
static const PWMConfig ws2812_pwm_config = {
.frequency = WS2812_PWM_FREQUENCY,
- .period = WS2812_PWM_PERIOD, // Mit dieser Periode wird UDE-Event erzeugt und ein neuer Wert (Länge WS2812_BIT_N) vom DMA ins CCR geschrieben
+ .period = WS2812_PWM_PERIOD, // Mit dieser Periode wird UDE-Event erzeugt und ein neuer Wert (Länge WS2812_BIT_N) vom DMA ins CCR geschrieben
.callback = NULL,
.channels =
{
- [0 ... 3] = {.mode = PWM_OUTPUT_DISABLED, .callback = NULL}, // Channels default to disabled
- [WS2812_PWM_CHANNEL - 1] = {.mode = WS2812_PWM_OUTPUT_MODE, .callback = NULL}, // Turn on the channel we care about
+ [0 ... 3] = {.mode = PWM_OUTPUT_DISABLED, .callback = NULL}, // Channels default to disabled
+ [WS2812_PWM_CHANNEL - 1] = {.mode = WS2812_PWM_OUTPUT_MODE, .callback = NULL}, // Turn on the channel we care about
},
.cr2 = 0,
- .dier = TIM_DIER_UDE, // DMA on update event for next period
+ .dier = TIM_DIER_UDE, // DMA on update event for next period
};
//#pragma GCC diagnostic pop // Restore command-line warning options
// Configure DMA
// dmaInit(); // Joe added this
dmaStreamAlloc(WS2812_DMA_STREAM - STM32_DMA_STREAM(0), 10, NULL, NULL);
- dmaStreamSetPeripheral(WS2812_DMA_STREAM, &(WS2812_PWM_DRIVER.tim->CCR[WS2812_PWM_CHANNEL - 1])); // Ziel ist der An-Zeit im Cap-Comp-Register
+ dmaStreamSetPeripheral(WS2812_DMA_STREAM, &(WS2812_PWM_DRIVER.tim->CCR[WS2812_PWM_CHANNEL - 1])); // Ziel ist der An-Zeit im Cap-Comp-Register
dmaStreamSetMemory0(WS2812_DMA_STREAM, ws2812_frame_buffer);
dmaStreamSetTransactionSize(WS2812_DMA_STREAM, WS2812_BIT_N);
dmaStreamSetMode(WS2812_DMA_STREAM, STM32_DMA_CR_CHSEL(WS2812_DMA_CHANNEL) | STM32_DMA_CR_DIR_M2P | STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_MINC | STM32_DMA_CR_CIRC | STM32_DMA_CR_PL(3));
@@ -302,7 +304,7 @@ void ws2812_init(void) {
// ChibiOS driver code, so we don't have to do anything special to the timer. If we did, we'd have to start the timer,
// disable counting, enable the channel, and then make whatever configuration changes we need.
pwmStart(&WS2812_PWM_DRIVER, &ws2812_pwm_config);
- pwmEnableChannel(&WS2812_PWM_DRIVER, WS2812_PWM_CHANNEL - 1, 0); // Initial period is 0; output will be low until first duty cycle is DMA'd in
+ pwmEnableChannel(&WS2812_PWM_DRIVER, WS2812_PWM_CHANNEL - 1, 0); // Initial period is 0; output will be low until first duty cycle is DMA'd in
}
void ws2812_write_led(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b) {
diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c
index ba471e0b8e..76191db165 100644
--- a/platforms/chibios/drivers/ws2812_spi.c
+++ b/platforms/chibios/drivers/ws2812_spi.c
@@ -42,7 +42,7 @@
# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_0)
#elif WS2812_SPI_DIVISOR == 8
# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_1)
-#elif WS2812_SPI_DIVISOR == 16 // same as default
+#elif WS2812_SPI_DIVISOR == 16 // same as default
# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_1 | SPI_CR1_BR_0)
#elif WS2812_SPI_DIVISOR == 32
# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_2)
@@ -53,14 +53,14 @@
#elif WS2812_SPI_DIVISOR == 256
# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)
#else
-# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_1 | SPI_CR1_BR_0) // default
+# define WS2812_SPI_DIVISOR_CR1_BR_X (SPI_CR1_BR_1 | SPI_CR1_BR_0) // default
#endif
// Use SPI circular buffer
#ifdef WS2812_SPI_USE_CIRCULAR_BUFFER
-# define WS2812_SPI_BUFFER_MODE 1 // circular buffer
+# define WS2812_SPI_BUFFER_MODE 1 // circular buffer
#else
-# define WS2812_SPI_BUFFER_MODE 0 // normal buffer
+# define WS2812_SPI_BUFFER_MODE 0 // normal buffer
#endif
#if defined(USE_GPIOV1)
@@ -104,20 +104,30 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
uint8_t* tx_start = &txbuf[PREAMBLE_SIZE];
#if (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_GRB)
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.g, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.r, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.g, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.r, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB)
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.r, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.r, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_BGR)
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.b, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.b, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j);
#endif
#ifdef RGBW
- for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j);
+ for (int j = 0; j < 4; j++)
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j);
#endif
}
@@ -126,7 +136,7 @@ void ws2812_init(void) {
#ifdef WS2812_SPI_SCK_PIN
palSetLineMode(WS2812_SPI_SCK_PIN, WS2812_SCK_OUTPUT_MODE);
-#endif // WS2812_SPI_SCK_PIN
+#endif // WS2812_SPI_SCK_PIN
// TODO: more dynamic baudrate
static const SPIConfig spicfg = {WS2812_SPI_BUFFER_MODE, NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN), WS2812_SPI_DIVISOR_CR1_BR_X};
diff --git a/platforms/chibios/eeprom_stm32.c b/platforms/chibios/eeprom_stm32.c
index acc6a48516..a15bfe09ed 100644
--- a/platforms/chibios/eeprom_stm32.c
+++ b/platforms/chibios/eeprom_stm32.c
@@ -133,10 +133,6 @@
*/
#include "eeprom_stm32_defs.h"
-#if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) || !defined(FEE_MCU_FLASH_SIZE) || !defined(FEE_PAGE_BASE_ADDRESS)
-# error "not implemented."
-#endif
-
/* These bits are used for optimizing encoding of bytes, 0 and 1 */
#define FEE_WORD_ENCODING 0x8000
#define FEE_VALUE_NEXT 0x6000
@@ -144,69 +140,11 @@
#define FEE_VALUE_ENCODED 0x2000
#define FEE_BYTE_RANGE 0x80
-/* Addressable range 16KByte: 0 <-> (0x1FFF << 1) */
-#define FEE_ADDRESS_MAX_SIZE 0x4000
-
/* Flash word value after erase */
#define FEE_EMPTY_WORD ((uint16_t)0xFFFF)
-/* Size of combined compacted eeprom and write log pages */
-#define FEE_DENSITY_MAX_SIZE (FEE_PAGE_COUNT * FEE_PAGE_SIZE)
-
-#ifndef FEE_MCU_FLASH_SIZE_IGNORE_CHECK /* *TODO: Get rid of this check */
-# if FEE_DENSITY_MAX_SIZE > (FEE_MCU_FLASH_SIZE * 1024)
-# pragma message STR(FEE_DENSITY_MAX_SIZE) " > " STR(FEE_MCU_FLASH_SIZE * 1024)
-# error emulated eeprom: FEE_DENSITY_MAX_SIZE is greater than available flash size
-# endif
-#endif
-
-/* Size of emulated eeprom */
-#ifdef FEE_DENSITY_BYTES
-# if (FEE_DENSITY_BYTES > FEE_DENSITY_MAX_SIZE)
-# pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE)
-# error emulated eeprom: FEE_DENSITY_BYTES exceeds FEE_DENSITY_MAX_SIZE
-# endif
-# if (FEE_DENSITY_BYTES == FEE_DENSITY_MAX_SIZE)
-# pragma message STR(FEE_DENSITY_BYTES) " == " STR(FEE_DENSITY_MAX_SIZE)
-# warning emulated eeprom: FEE_DENSITY_BYTES leaves no room for a write log. This will greatly increase the flash wear rate!
-# endif
-# if FEE_DENSITY_BYTES > FEE_ADDRESS_MAX_SIZE
-# pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_ADDRESS_MAX_SIZE)
-# error emulated eeprom: FEE_DENSITY_BYTES is greater than FEE_ADDRESS_MAX_SIZE allows
-# endif
-# if ((FEE_DENSITY_BYTES) % 2) == 1
-# error emulated eeprom: FEE_DENSITY_BYTES must be even
-# endif
-#else
-/* Default to half of allocated space used for emulated eeprom, half for write log */
-# define FEE_DENSITY_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE / 2)
-#endif
-
-/* Size of write log */
-#ifdef FEE_WRITE_LOG_BYTES
-# if ((FEE_DENSITY_BYTES + FEE_WRITE_LOG_BYTES) > FEE_DENSITY_MAX_SIZE)
-# pragma message STR(FEE_DENSITY_BYTES) " + " STR(FEE_WRITE_LOG_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE)
-# error emulated eeprom: FEE_WRITE_LOG_BYTES exceeds remaining FEE_DENSITY_MAX_SIZE
-# endif
-# if ((FEE_WRITE_LOG_BYTES) % 2) == 1
-# error emulated eeprom: FEE_WRITE_LOG_BYTES must be even
-# endif
-#else
-/* Default to use all remaining space */
-# define FEE_WRITE_LOG_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE - FEE_DENSITY_BYTES)
-#endif
-
-/* Start of the emulated eeprom compacted flash area */
-#define FEE_COMPACTED_BASE_ADDRESS FEE_PAGE_BASE_ADDRESS
-/* End of the emulated eeprom compacted flash area */
-#define FEE_COMPACTED_LAST_ADDRESS (FEE_COMPACTED_BASE_ADDRESS + FEE_DENSITY_BYTES)
-/* Start of the emulated eeprom write log */
-#define FEE_WRITE_LOG_BASE_ADDRESS FEE_COMPACTED_LAST_ADDRESS
-/* End of the emulated eeprom write log */
-#define FEE_WRITE_LOG_LAST_ADDRESS (FEE_WRITE_LOG_BASE_ADDRESS + FEE_WRITE_LOG_BYTES)
-
-#if defined(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) && (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR >= FEE_DENSITY_BYTES)
-# error emulated eeprom: DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is greater than the FEE_DENSITY_BYTES available
+#if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) || !defined(FEE_MCU_FLASH_SIZE) || !defined(FEE_PAGE_BASE_ADDRESS)
+# error "not implemented."
#endif
/* In-memory contents of emulated eeprom for faster access */
@@ -622,9 +560,13 @@ uint16_t EEPROM_ReadDataWord(uint16_t Address) {
/*****************************************************************************
* Bind to eeprom_driver.c
*******************************************************************************/
-void eeprom_driver_init(void) { EEPROM_Init(); }
+void eeprom_driver_init(void) {
+ EEPROM_Init();
+}
-void eeprom_driver_erase(void) { EEPROM_Erase(); }
+void eeprom_driver_erase(void) {
+ EEPROM_Erase();
+}
void eeprom_read_block(void *buf, const void *addr, size_t len) {
const uint8_t *src = (const uint8_t *)addr;
diff --git a/platforms/chibios/eeprom_stm32_defs.h b/platforms/chibios/eeprom_stm32_defs.h
index 66904f247f..a6ceb41355 100644
--- a/platforms/chibios/eeprom_stm32_defs.h
+++ b/platforms/chibios/eeprom_stm32_defs.h
@@ -20,41 +20,41 @@
#if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT)
# if defined(STM32F103xB) || defined(STM32F042x6) || defined(GD32VF103C8) || defined(GD32VF103CB)
# ifndef FEE_PAGE_SIZE
-# define FEE_PAGE_SIZE 0x400 // Page size = 1KByte
+# define FEE_PAGE_SIZE 0x400 // Page size = 1KByte
# endif
# ifndef FEE_PAGE_COUNT
-# define FEE_PAGE_COUNT 2 // How many pages are used
+# define FEE_PAGE_COUNT 2 // How many pages are used
# endif
# elif defined(STM32F103xE) || defined(STM32F303xC) || defined(STM32F072xB) || defined(STM32F070xB)
# ifndef FEE_PAGE_SIZE
-# define FEE_PAGE_SIZE 0x800 // Page size = 2KByte
+# define FEE_PAGE_SIZE 0x800 // Page size = 2KByte
# endif
# ifndef FEE_PAGE_COUNT
-# define FEE_PAGE_COUNT 4 // How many pages are used
+# define FEE_PAGE_COUNT 4 // How many pages are used
# endif
# elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xG) || defined(STM32F411xE)
# ifndef FEE_PAGE_SIZE
-# define FEE_PAGE_SIZE 0x4000 // Page size = 16KByte
+# define FEE_PAGE_SIZE 0x4000 // Page size = 16KByte
# endif
# ifndef FEE_PAGE_COUNT
-# define FEE_PAGE_COUNT 1 // How many pages are used
+# define FEE_PAGE_COUNT 1 // How many pages are used
# endif
# endif
#endif
#if !defined(FEE_MCU_FLASH_SIZE)
# if defined(STM32F042x6)
-# define FEE_MCU_FLASH_SIZE 32 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 32 // Size in Kb
# elif defined(GD32VF103C8)
-# define FEE_MCU_FLASH_SIZE 64 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 64 // Size in Kb
# elif defined(STM32F103xB) || defined(STM32F072xB) || defined(STM32F070xB) || defined(GD32VF103CB)
-# define FEE_MCU_FLASH_SIZE 128 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 128 // Size in Kb
# elif defined(STM32F303xC) || defined(STM32F401xC)
-# define FEE_MCU_FLASH_SIZE 256 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 256 // Size in Kb
# elif defined(STM32F103xE) || defined(STM32F401xE) || defined(STM32F411xE)
-# define FEE_MCU_FLASH_SIZE 512 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 512 // Size in Kb
# elif defined(STM32F405xG)
-# define FEE_MCU_FLASH_SIZE 1024 // Size in Kb
+# define FEE_MCU_FLASH_SIZE 1024 // Size in Kb
# endif
#endif
@@ -62,7 +62,7 @@
#if !defined(FEE_PAGE_BASE_ADDRESS)
# if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xG) || defined(STM32F411xE)
# ifndef FEE_PAGE_BASE_ADDRESS
-# define FEE_PAGE_BASE_ADDRESS 0x08004000 // bodge to force 2nd 16k page
+# define FEE_PAGE_BASE_ADDRESS 0x08004000 // bodge to force 2nd 16k page
# endif
# else
# ifndef FEE_FLASH_BASE
@@ -72,3 +72,65 @@
# define FEE_PAGE_BASE_ADDRESS ((uintptr_t)(FEE_FLASH_BASE) + FEE_MCU_FLASH_SIZE * 1024 - (FEE_PAGE_COUNT * FEE_PAGE_SIZE))
# endif
#endif
+
+/* Addressable range 16KByte: 0 <-> (0x1FFF << 1) */
+#define FEE_ADDRESS_MAX_SIZE 0x4000
+
+/* Size of combined compacted eeprom and write log pages */
+#define FEE_DENSITY_MAX_SIZE (FEE_PAGE_COUNT * FEE_PAGE_SIZE)
+
+#ifndef FEE_MCU_FLASH_SIZE_IGNORE_CHECK /* *TODO: Get rid of this check */
+# if FEE_DENSITY_MAX_SIZE > (FEE_MCU_FLASH_SIZE * 1024)
+# pragma message STR(FEE_DENSITY_MAX_SIZE) " > " STR(FEE_MCU_FLASH_SIZE * 1024)
+# error emulated eeprom: FEE_DENSITY_MAX_SIZE is greater than available flash size
+# endif
+#endif
+
+/* Size of emulated eeprom */
+#ifdef FEE_DENSITY_BYTES
+# if (FEE_DENSITY_BYTES > FEE_DENSITY_MAX_SIZE)
+# pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE)
+# error emulated eeprom: FEE_DENSITY_BYTES exceeds FEE_DENSITY_MAX_SIZE
+# endif
+# if (FEE_DENSITY_BYTES == FEE_DENSITY_MAX_SIZE)
+# pragma message STR(FEE_DENSITY_BYTES) " == " STR(FEE_DENSITY_MAX_SIZE)
+# warning emulated eeprom: FEE_DENSITY_BYTES leaves no room for a write log. This will greatly increase the flash wear rate!
+# endif
+# if FEE_DENSITY_BYTES > FEE_ADDRESS_MAX_SIZE
+# pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_ADDRESS_MAX_SIZE)
+# error emulated eeprom: FEE_DENSITY_BYTES is greater than FEE_ADDRESS_MAX_SIZE allows
+# endif
+# if ((FEE_DENSITY_BYTES) % 2) == 1
+# error emulated eeprom: FEE_DENSITY_BYTES must be even
+# endif
+#else
+/* Default to half of allocated space used for emulated eeprom, half for write log */
+# define FEE_DENSITY_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE / 2)
+#endif
+
+/* Size of write log */
+#ifdef FEE_WRITE_LOG_BYTES
+# if ((FEE_DENSITY_BYTES + FEE_WRITE_LOG_BYTES) > FEE_DENSITY_MAX_SIZE)
+# pragma message STR(FEE_DENSITY_BYTES) " + " STR(FEE_WRITE_LOG_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE)
+# error emulated eeprom: FEE_WRITE_LOG_BYTES exceeds remaining FEE_DENSITY_MAX_SIZE
+# endif
+# if ((FEE_WRITE_LOG_BYTES) % 2) == 1
+# error emulated eeprom: FEE_WRITE_LOG_BYTES must be even
+# endif
+#else
+/* Default to use all remaining space */
+# define FEE_WRITE_LOG_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE - FEE_DENSITY_BYTES)
+#endif
+
+/* Start of the emulated eeprom compacted flash area */
+#define FEE_COMPACTED_BASE_ADDRESS FEE_PAGE_BASE_ADDRESS
+/* End of the emulated eeprom compacted flash area */
+#define FEE_COMPACTED_LAST_ADDRESS (FEE_COMPACTED_BASE_ADDRESS + FEE_DENSITY_BYTES)
+/* Start of the emulated eeprom write log */
+#define FEE_WRITE_LOG_BASE_ADDRESS FEE_COMPACTED_LAST_ADDRESS
+/* End of the emulated eeprom write log */
+#define FEE_WRITE_LOG_LAST_ADDRESS (FEE_WRITE_LOG_BASE_ADDRESS + FEE_WRITE_LOG_BYTES)
+
+#if defined(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) && (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR >= FEE_DENSITY_BYTES)
+# error emulated eeprom: DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is greater than the FEE_DENSITY_BYTES available
+#endif
diff --git a/platforms/chibios/eeprom_teensy.c b/platforms/chibios/eeprom_teensy.c
index 4aaf665269..c8777febde 100644
--- a/platforms/chibios/eeprom_teensy.c
+++ b/platforms/chibios/eeprom_teensy.c
@@ -1,6 +1,7 @@
#include <ch.h>
#include <hal.h>
+#include "eeprom_teensy.h"
#include "eeconfig.h"
/*************************************/
@@ -42,18 +43,6 @@
#if defined(K20x) /* chip selection */
/* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */
-// The EEPROM is really RAM with a hardware-based backup system to
-// flash memory. Selecting a smaller size EEPROM allows more wear
-// leveling, for higher write endurance. If you edit this file,
-// set this to the smallest size your application can use. Also,
-// due to Freescale's implementation, writing 16 or 32 bit words
-// (aligned to 2 or 4 byte boundaries) has twice the endurance
-// compared to writing 8 bit bytes.
-//
-# ifndef EEPROM_SIZE
-# define EEPROM_SIZE 32
-# endif
-
/*
^^^ Here be dragons:
NXP AppNote AN4282 section 3.1 states that partitioning must only be done once.
@@ -71,19 +60,19 @@
// Minimum EEPROM Endurance
// ------------------------
-# if (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
+# if (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
# define EEESIZE 0x33
-# elif (EEPROM_SIZE == 1024) // 75000 writes/byte or 150000 writes/word
+# elif (EEPROM_SIZE == 1024) // 75000 writes/byte or 150000 writes/word
# define EEESIZE 0x34
-# elif (EEPROM_SIZE == 512) // 155000 writes/byte or 310000 writes/word
+# elif (EEPROM_SIZE == 512) // 155000 writes/byte or 310000 writes/word
# define EEESIZE 0x35
-# elif (EEPROM_SIZE == 256) // 315000 writes/byte or 630000 writes/word
+# elif (EEPROM_SIZE == 256) // 315000 writes/byte or 630000 writes/word
# define EEESIZE 0x36
-# elif (EEPROM_SIZE == 128) // 635000 writes/byte or 1270000 writes/word
+# elif (EEPROM_SIZE == 128) // 635000 writes/byte or 1270000 writes/word
# define EEESIZE 0x37
-# elif (EEPROM_SIZE == 64) // 1275000 writes/byte or 2550000 writes/word
+# elif (EEPROM_SIZE == 64) // 1275000 writes/byte or 2550000 writes/word
# define EEESIZE 0x38
-# elif (EEPROM_SIZE == 32) // 2555000 writes/byte or 5110000 writes/word
+# elif (EEPROM_SIZE == 32) // 2555000 writes/byte or 5110000 writes/word
# define EEESIZE 0x39
# endif
@@ -99,9 +88,9 @@ void eeprom_initialize(void) {
if (FTFL->FCNFG & FTFL_FCNFG_RAMRDY) {
// FlexRAM is configured as traditional RAM
// We need to reconfigure for EEPROM usage
- FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command
- FTFL->FCCOB4 = EEESIZE; // EEPROM Size
- FTFL->FCCOB5 = 0x03; // 0K for Dataflash, 32K for EEPROM backup
+ FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command
+ FTFL->FCCOB4 = EEESIZE; // EEPROM Size
+ FTFL->FCCOB5 = 0x03; // 0K for Dataflash, 32K for EEPROM backup
__disable_irq();
// do_flash_cmd() must execute from RAM. Luckily the C syntax is simple...
(*((void (*)(volatile uint8_t *))((uint32_t)do_flash_cmd | 1)))(&(FTFL->FSTAT));
@@ -109,7 +98,7 @@ void eeprom_initialize(void) {
status = FTFL->FSTAT;
if (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL)) {
FTFL->FSTAT = (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL));
- return; // error
+ return; // error
}
}
// wait for eeprom to become ready (is this really necessary?)
@@ -173,7 +162,9 @@ void eeprom_read_block(void *buf, const void *addr, uint32_t len) {
*
* FIXME: needs doc
*/
-int eeprom_is_ready(void) { return (FTFL->FCNFG & FTFL_FCNFG_EEERDY) ? 1 : 0; }
+int eeprom_is_ready(void) {
+ return (FTFL->FCNFG & FTFL_FCNFG_EEERDY) ? 1 : 0;
+}
/** \brief flexram wait
*
@@ -350,8 +341,6 @@ void do_flash_cmd(volatile uint8_t *fstat)
extern uint32_t __eeprom_workarea_start__;
extern uint32_t __eeprom_workarea_end__;
-# define EEPROM_SIZE 128
-
static uint32_t flashend = 0;
void eeprom_initialize(void) {
@@ -499,7 +488,9 @@ void eeprom_read_block(void *buf, const void *addr, uint32_t len) {
}
}
-int eeprom_is_ready(void) { return 1; }
+int eeprom_is_ready(void) {
+ return 1;
+}
void eeprom_write_word(uint16_t *addr, uint16_t value) {
uint8_t *p = (uint8_t *)addr;
@@ -524,68 +515,13 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
}
#else
-// No EEPROM supported, so emulate it
-
-# ifndef EEPROM_SIZE
-# include "eeconfig.h"
-# define EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
-# endif
-__attribute__((aligned(4))) static uint8_t buffer[EEPROM_SIZE];
-
-uint8_t eeprom_read_byte(const uint8_t *addr) {
- uint32_t offset = (uint32_t)addr;
- return buffer[offset];
-}
-
-void eeprom_write_byte(uint8_t *addr, uint8_t value) {
- uint32_t offset = (uint32_t)addr;
- buffer[offset] = value;
-}
-
-uint16_t eeprom_read_word(const uint16_t *addr) {
- const uint8_t *p = (const uint8_t *)addr;
- return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8);
-}
-
-uint32_t eeprom_read_dword(const uint32_t *addr) {
- const uint8_t *p = (const uint8_t *)addr;
- return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8) | (eeprom_read_byte(p + 2) << 16) | (eeprom_read_byte(p + 3) << 24);
-}
-
-void eeprom_read_block(void *buf, const void *addr, size_t len) {
- const uint8_t *p = (const uint8_t *)addr;
- uint8_t * dest = (uint8_t *)buf;
- while (len--) {
- *dest++ = eeprom_read_byte(p++);
- }
-}
-
-void eeprom_write_word(uint16_t *addr, uint16_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p, value >> 8);
-}
-
-void eeprom_write_dword(uint32_t *addr, uint32_t value) {
- uint8_t *p = (uint8_t *)addr;
- eeprom_write_byte(p++, value);
- eeprom_write_byte(p++, value >> 8);
- eeprom_write_byte(p++, value >> 16);
- eeprom_write_byte(p, value >> 24);
-}
-
-void eeprom_write_block(const void *buf, void *addr, size_t len) {
- uint8_t * p = (uint8_t *)addr;
- const uint8_t *src = (const uint8_t *)buf;
- while (len--) {
- eeprom_write_byte(p++, *src++);
- }
-}
-
+# error Unsupported Teensy EEPROM.
#endif /* chip selection */
// The update functions just calls write for now, but could probably be optimized
-void eeprom_update_byte(uint8_t *addr, uint8_t value) { eeprom_write_byte(addr, value); }
+void eeprom_update_byte(uint8_t *addr, uint8_t value) {
+ eeprom_write_byte(addr, value);
+}
void eeprom_update_word(uint16_t *addr, uint16_t value) {
uint8_t *p = (uint8_t *)addr;
diff --git a/platforms/chibios/eeprom_teensy.h b/platforms/chibios/eeprom_teensy.h
new file mode 100755
index 0000000000..9a14a1fa79
--- /dev/null
+++ b/platforms/chibios/eeprom_teensy.h
@@ -0,0 +1,25 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <ch.h>
+#include <hal.h>
+
+#if defined(K20x)
+/* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */
+// The EEPROM is really RAM with a hardware-based backup system to
+// flash memory. Selecting a smaller size EEPROM allows more wear
+// leveling, for higher write endurance. If you edit this file,
+// set this to the smallest size your application can use. Also,
+// due to Freescale's implementation, writing 16 or 32 bit words
+// (aligned to 2 or 4 byte boundaries) has twice the endurance
+// compared to writing 8 bit bytes.
+//
+# ifndef EEPROM_SIZE
+# define EEPROM_SIZE 32
+# endif
+#elif defined(KL2x) /* Teensy LC (emulated) */
+# define EEPROM_SIZE 128
+#else
+# error Unsupported Teensy EEPROM.
+#endif
diff --git a/platforms/chibios/gd32v_compatibility.h b/platforms/chibios/gd32v_compatibility.h
index f4dcfd8c55..a3148fb6d2 100644
--- a/platforms/chibios/gd32v_compatibility.h
+++ b/platforms/chibios/gd32v_compatibility.h
@@ -97,10 +97,10 @@
/* Serial USART redefines. */
#if HAL_USE_SERIAL
# if !defined(SERIAL_USART_CR1)
-# define SERIAL_USART_CR1 (USART_CTL0_PCEN | USART_CTL0_PM | USART_CTL0_WL) // parity enable, odd parity, 9 bit length
+# define SERIAL_USART_CR1 (USART_CTL0_PCEN | USART_CTL0_PM | USART_CTL0_WL) // parity enable, odd parity, 9 bit length
# endif
# if !defined(SERIAL_USART_CR2)
-# define SERIAL_USART_CR2 (USART_CTL1_STB_1) // 2 stop bits
+# define SERIAL_USART_CR2 (USART_CTL1_STB_1) // 2 stop bits
# endif
# if !defined(SERIAL_USART_CR3)
# define SERIAL_USART_CR3 0x0
diff --git a/platforms/chibios/gpio.h b/platforms/chibios/gpio.h
index 4d057f1cab..eb44a18f9c 100644
--- a/platforms/chibios/gpio.h
+++ b/platforms/chibios/gpio.h
@@ -22,10 +22,12 @@ typedef ioline_t pin_t;
/* Operation of GPIO by pin. */
-#define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT)
-#define setPinInputHigh(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)
-#define setPinInputLow(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)
-#define setPinOutput(pin) palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)
+#define setPinInput(pin) palSetLineMode((pin), PAL_MODE_INPUT)
+#define setPinInputHigh(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLUP)
+#define setPinInputLow(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLDOWN)
+#define setPinOutputPushPull(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_PUSHPULL)
+#define setPinOutputOpenDrain(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_OPENDRAIN)
+#define setPinOutput(pin) setPinOutputPushPull(pin)
#define writePinHigh(pin) palSetLine(pin)
#define writePinLow(pin) palClearLine(pin)
@@ -34,17 +36,3 @@ typedef ioline_t pin_t;
#define readPin(pin) palReadLine(pin)
#define togglePin(pin) palToggleLine(pin)
-
-/* Operation of GPIO by port. */
-
-typedef uint16_t port_data_t;
-
-#define readPort(pin) palReadPort(PAL_PORT(pin))
-
-#define setPortBitInput(pin, bit) palSetPadMode(PAL_PORT(pin), bit, PAL_MODE_INPUT)
-#define setPortBitInputHigh(pin, bit) palSetPadMode(PAL_PORT(pin), bit, PAL_MODE_INPUT_PULLUP)
-#define setPortBitInputLow(pin, bit) palSetPadMode(PAL_PORT(pin), bit, PAL_MODE_INPUT_PULLDOWN)
-#define setPortBitOutput(pin, bit) palSetPadMode(PAL_PORT(pin), bit, PAL_MODE_OUTPUT_PUSHPULL)
-
-#define writePortBitLow(pin, bit) palClearLine(PAL_LINE(PAL_PORT(pin), bit))
-#define writePortBitHigh(pin, bit) palSetLine(PAL_LINE(PAL_PORT(pin), bit))
diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk
index 45e3377882..6fd1fd83f5 100644
--- a/platforms/chibios/platform.mk
+++ b/platforms/chibios/platform.mk
@@ -344,7 +344,7 @@ ifeq ($(strip $(MCU)), risc-v)
ifneq ($(shell which riscv64-unknown-elf-gcc 2>/dev/null),)
TOOLCHAIN = riscv64-unknown-elf-
else
- $(error "No RISC-V toolchain found. Can't find riscv32-unknown-elf-gcc or riscv64-unknown-elf-gcc found in your systems PATH variable. Please install a valid toolchain and make it accessible!")
+ $(call CATASTROPHIC_ERROR,Missing toolchain,No RISC-V toolchain found. Can't find riscv32-unknown-elf-gcc or riscv64-unknown-elf-gcc found in your systems PATH variable. Please install a valid toolchain and make it accessible!)
endif
endif
endif
diff --git a/platforms/chibios/sleep_led.c b/platforms/chibios/sleep_led.c
index 477056a454..a777d60468 100644
--- a/platforms/chibios/sleep_led.c
+++ b/platforms/chibios/sleep_led.c
@@ -93,7 +93,7 @@ void sleep_led_init(void) {
/* Reset LPTMR settings */
LPTMR0->CSR = 0;
/* Set the compare value */
- LPTMR0->CMR = 0; // trigger on counter value (i.e. every time)
+ LPTMR0->CMR = 0; // trigger on counter value (i.e. every time)
/* Set up clock source and prescaler */
/* Software PWM
@@ -118,11 +118,11 @@ void sleep_led_init(void) {
/* === OPTION 2 === */
# if 1
// nMHz IRC (n=4 on KL25Z, KL26Z and K20x; n=2 or 8 on KL27Z)
- MCG->C2 |= MCG_C2_IRCS; // fast (4MHz) internal ref clock
-# if defined(KL27) // divide the 8MHz IRC by 2, to have the same MCGIRCLK speed as others
+ MCG->C2 |= MCG_C2_IRCS; // fast (4MHz) internal ref clock
+# if defined(KL27) // divide the 8MHz IRC by 2, to have the same MCGIRCLK speed as others
MCG->MC |= MCG_MC_LIRC_DIV2_DIV2;
-# endif /* KL27 */
- MCG->C1 |= MCG_C1_IRCLKEN; // enable internal ref clock
+# endif /* KL27 */
+ MCG->C1 |= MCG_C1_IRCLKEN; // enable internal ref clock
// to work in stop mode, also MCG_C1_IREFSTEN
// Divide 4MHz by 2^N (N=6) => 62500 irqs/sec =>
// => approx F=61, R=256, duration = 4
@@ -140,7 +140,7 @@ void sleep_led_init(void) {
/* === END OPTIONS === */
/* Interrupt on TCF set (compare flag) */
- nvicEnableVector(LPTMR0_IRQn, 2); // vector, priority
+ nvicEnableVector(LPTMR0_IRQn, 2); // vector, priority
LPTMR0->CSR |= LPTMRx_CSR_TIE;
}
@@ -169,21 +169,33 @@ static void gptTimerCallback(GPTDriver *gptp) {
static const GPTConfig gptcfg = {1000000, gptTimerCallback, 0, 0};
/* Initialise the timer */
-void sleep_led_init(void) { gptStart(&SLEEP_LED_GPT_DRIVER, &gptcfg); }
+void sleep_led_init(void) {
+ gptStart(&SLEEP_LED_GPT_DRIVER, &gptcfg);
+}
-void sleep_led_enable(void) { gptStartContinuous(&SLEEP_LED_GPT_DRIVER, gptcfg.frequency / 0xFFFF); }
+void sleep_led_enable(void) {
+ gptStartContinuous(&SLEEP_LED_GPT_DRIVER, gptcfg.frequency / 0xFFFF);
+}
-void sleep_led_disable(void) { gptStopTimer(&SLEEP_LED_GPT_DRIVER); }
+void sleep_led_disable(void) {
+ gptStopTimer(&SLEEP_LED_GPT_DRIVER);
+}
-void sleep_led_toggle(void) { (SLEEP_LED_GPT_DRIVER.state == GPT_READY) ? sleep_led_enable() : sleep_led_disable(); }
+void sleep_led_toggle(void) {
+ (SLEEP_LED_GPT_DRIVER.state == GPT_READY) ? sleep_led_enable() : sleep_led_disable();
+}
#else /* platform selection: not on familiar chips */
void sleep_led_init(void) {}
-void sleep_led_enable(void) { led_set(1 << USB_LED_CAPS_LOCK); }
+void sleep_led_enable(void) {
+ led_set(1 << USB_LED_CAPS_LOCK);
+}
-void sleep_led_disable(void) { led_set(0); }
+void sleep_led_disable(void) {
+ led_set(0);
+}
void sleep_led_toggle(void) {
// not implemented
diff --git a/platforms/chibios/suspend.c b/platforms/chibios/suspend.c
index 9310a99920..ce03433e3a 100644
--- a/platforms/chibios/suspend.c
+++ b/platforms/chibios/suspend.c
@@ -13,15 +13,6 @@
#include "led.h"
#include "wait.h"
-/** \brief suspend idle
- *
- * FIXME: needs doc
- */
-void suspend_idle(uint8_t time) {
- // TODO: this is not used anywhere - what units is 'time' in?
- wait_ms(time);
-}
-
/** \brief suspend power down
*
* FIXME: needs doc
@@ -36,34 +27,6 @@ void suspend_power_down(void) {
/** \brief suspend wakeup condition
*
- * FIXME: needs doc
- */
-__attribute__((weak)) void matrix_power_up(void) {}
-__attribute__((weak)) void matrix_power_down(void) {}
-bool suspend_wakeup_condition(void) {
- matrix_power_up();
- matrix_scan();
- matrix_power_down();
- for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
- if (matrix_get_row(r)) return true;
- }
- return false;
-}
-
-/** \brief run user level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_user(void) {}
-
-/** \brief run keyboard level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); }
-
-/** \brief suspend wakeup condition
- *
* run immediately after wakeup
* FIXME: needs doc
*/
diff --git a/platforms/chibios/syscall-fallbacks.c b/platforms/chibios/syscall-fallbacks.c
index 7150a46326..86f7907bfc 100644
--- a/platforms/chibios/syscall-fallbacks.c
+++ b/platforms/chibios/syscall-fallbacks.c
@@ -87,9 +87,13 @@ __attribute__((weak, used)) int _kill(int pid, int sig) {
return -1;
}
-__attribute__((weak, used)) pid_t _getpid(void) { return 1; }
+__attribute__((weak, used)) pid_t _getpid(void) {
+ return 1;
+}
-__attribute__((weak, used)) void _fini(void) { return; }
+__attribute__((weak, used)) void _fini(void) {
+ return;
+}
__attribute__((weak, used, noreturn)) void _exit(int i) {
while (1)
diff --git a/platforms/chibios/timer.c b/platforms/chibios/timer.c
index 9f664e1f79..e3bdfdcc37 100644
--- a/platforms/chibios/timer.c
+++ b/platforms/chibios/timer.c
@@ -2,46 +2,106 @@
#include "timer.h"
-static uint32_t reset_point = 0;
+static uint32_t ticks_offset = 0;
+static uint32_t last_ticks = 0;
+static uint32_t ms_offset = 0;
#if CH_CFG_ST_RESOLUTION < 32
static uint32_t last_systime = 0;
static uint32_t overflow = 0;
#endif
-void timer_init(void) { timer_clear(); }
+// Get the current system time in ticks as a 32-bit number.
+// This function must be called from within a system lock zone (so that it can safely use and update the static data).
+static inline uint32_t get_system_time_ticks(void) {
+ uint32_t systime = (uint32_t)chVTGetSystemTimeX();
-void timer_clear(void) {
- reset_point = (uint32_t)chVTGetSystemTime();
#if CH_CFG_ST_RESOLUTION < 32
- last_systime = reset_point;
- overflow = 0;
-#endif
-}
-
-uint16_t timer_read(void) { return (uint16_t)timer_read32(); }
-
-uint32_t timer_read32(void) {
- uint32_t systime = (uint32_t)chVTGetSystemTime();
-
-#if CH_CFG_ST_RESOLUTION < 32
- // If/when we need to support 64-bit chips, this may need to be modified to match the native bit-ness of the MCU.
- // At this point, the only SysTick resolution allowed other than 32 is 16 bit.
- // In the 16-bit case, at:
+ // If the real system timer resolution is less than 32 bits, provide the missing bits by checking for the counter
+ // overflow. For this to work, this function must be called at least once for every overflow of the system timer.
+ // In the 16-bit case, the corresponding times are:
// - CH_CFG_ST_FREQUENCY = 100000, overflow will occur every ~0.65 seconds
// - CH_CFG_ST_FREQUENCY = 10000, overflow will occur every ~6.5 seconds
// - CH_CFG_ST_FREQUENCY = 1000, overflow will occur every ~65 seconds
- // With this implementation, as long as we ensure a timer read happens at least once during the overflow period, timing should be accurate.
if (systime < last_systime) {
overflow += ((uint32_t)1) << CH_CFG_ST_RESOLUTION;
}
-
last_systime = systime;
- return (uint32_t)TIME_I2MS(systime - reset_point + overflow);
-#else
- return (uint32_t)TIME_I2MS(systime - reset_point);
+ systime += overflow;
+#endif
+
+ return systime;
+}
+
+#if CH_CFG_ST_RESOLUTION < 32
+static virtual_timer_t update_timer;
+
+// Update the system tick counter every half of the timer overflow period; this should keep the tick counter correct
+// even if something blocks timer interrupts for 1/2 of the timer overflow period.
+# define UPDATE_INTERVAL (((sysinterval_t)1) << (CH_CFG_ST_RESOLUTION - 1))
+
+// VT callback function to keep the overflow bits of the system tick counter updated.
+static void update_fn(void *arg) {
+ (void)arg;
+ chSysLockFromISR();
+ get_system_time_ticks();
+ chVTSetI(&update_timer, UPDATE_INTERVAL, update_fn, NULL);
+ chSysUnlockFromISR();
+}
+#endif
+
+// The highest multiple of CH_CFG_ST_FREQUENCY that fits into uint32_t. This number of ticks will necessarily
+// correspond to some integer number of seconds.
+#define OVERFLOW_ADJUST_TICKS ((uint32_t)((UINT32_MAX / CH_CFG_ST_FREQUENCY) * CH_CFG_ST_FREQUENCY))
+
+// The time in milliseconds which corresponds to OVERFLOW_ADJUST_TICKS ticks (this is a precise conversion, because
+// OVERFLOW_ADJUST_TICKS corresponds to an integer number of seconds).
+#define OVERFLOW_ADJUST_MS (TIME_I2MS(OVERFLOW_ADJUST_TICKS))
+
+void timer_init(void) {
+ timer_clear();
+#if CH_CFG_ST_RESOLUTION < 32
+ chVTObjectInit(&update_timer);
+ chVTSet(&update_timer, UPDATE_INTERVAL, update_fn, NULL);
#endif
}
-uint16_t timer_elapsed(uint16_t last) { return TIMER_DIFF_16(timer_read(), last); }
+void timer_clear(void) {
+ chSysLock();
+ ticks_offset = get_system_time_ticks();
+ last_ticks = 0;
+ ms_offset = 0;
+ chSysUnlock();
+}
+
+uint16_t timer_read(void) {
+ return (uint16_t)timer_read32();
+}
-uint32_t timer_elapsed32(uint32_t last) { return TIMER_DIFF_32(timer_read32(), last); }
+uint32_t timer_read32(void) {
+ chSysLock();
+ uint32_t ticks = get_system_time_ticks() - ticks_offset;
+ if (ticks < last_ticks) {
+ // The 32-bit tick counter overflowed and wrapped around. We cannot just extend the counter to 64 bits here,
+ // because TIME_I2MS() may encounter overflows when handling a 64-bit argument; therefore the solution here is
+ // to subtract a reasonably large number of ticks from the tick counter to bring its value below the 32-bit
+ // limit again, and then add the equivalent number of milliseconds to the converted value. (Adjusting just the
+ // converted value to account for 2**32 ticks is not possible in general, because 2**32 ticks may not correspond
+ // to an integer number of milliseconds).
+ ticks -= OVERFLOW_ADJUST_TICKS;
+ ticks_offset += OVERFLOW_ADJUST_TICKS;
+ ms_offset += OVERFLOW_ADJUST_MS;
+ }
+ last_ticks = ticks;
+ uint32_t ms_offset_copy = ms_offset; // read while still holding the lock to ensure a consistent value
+ chSysUnlock();
+
+ return (uint32_t)TIME_I2MS(ticks) + ms_offset_copy;
+}
+
+uint16_t timer_elapsed(uint16_t last) {
+ return TIMER_DIFF_16(timer_read(), last);
+}
+
+uint32_t timer_elapsed32(uint32_t last) {
+ return TIMER_DIFF_32(timer_read32(), last);
+}
diff --git a/platforms/common.mk b/platforms/common.mk
index f7a0fc7028..2a1fc8d377 100644
--- a/platforms/common.mk
+++ b/platforms/common.mk
@@ -1,10 +1,11 @@
PLATFORM_COMMON_DIR = $(PLATFORM_PATH)/$(PLATFORM_KEY)
TMK_COMMON_SRC += \
+ $(PLATFORM_PATH)/suspend.c \
$(PLATFORM_COMMON_DIR)/platform.c \
$(PLATFORM_COMMON_DIR)/suspend.c \
$(PLATFORM_COMMON_DIR)/timer.c \
- $(PLATFORM_COMMON_DIR)/bootloader.c \
+ $(PLATFORM_COMMON_DIR)/bootloaders/$(BOOTLOADER_TYPE).c
# Search Path
VPATH += $(PLATFORM_PATH)
diff --git a/platforms/eeprom.h b/platforms/eeprom.h
index f5b3f0ad53..091e6e4400 100644
--- a/platforms/eeprom.h
+++ b/platforms/eeprom.h
@@ -1,3 +1,5 @@
+// Copyright 2018-2022 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#if defined(__AVR__) && !defined(EEPROM_DRIVER)
@@ -19,3 +21,50 @@ void eeprom_update_word(uint16_t *__p, uint16_t __value);
void eeprom_update_dword(uint32_t *__p, uint32_t __value);
void eeprom_update_block(const void *__src, void *__dst, size_t __n);
#endif
+
+#if defined(EEPROM_CUSTOM)
+# ifndef EEPROM_SIZE
+# error EEPROM_SIZE has not been defined for custom driver.
+# endif
+# define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE)
+#elif defined(EEPROM_TRANSIENT)
+# include "eeprom_transient.h"
+# define TOTAL_EEPROM_BYTE_COUNT (TRANSIENT_EEPROM_SIZE)
+#elif defined(EEPROM_I2C)
+# include "eeprom_i2c.h"
+# define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT)
+#elif defined(EEPROM_SPI)
+# include "eeprom_spi.h"
+# define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT)
+#elif defined(EEPROM_STM32_L0_L1)
+# include "eeprom_stm32_L0_L1.h"
+# define TOTAL_EEPROM_BYTE_COUNT (STM32_ONBOARD_EEPROM_SIZE)
+#elif defined(EEPROM_TEENSY)
+# include "eeprom_teensy.h"
+# define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE)
+#elif defined(EEPROM_STM32_FLASH_EMULATED)
+# include "eeprom_stm32_defs.h"
+# define TOTAL_EEPROM_BYTE_COUNT (FEE_DENSITY_BYTES)
+#elif defined(EEPROM_SAMD)
+# include "eeprom_samd.h"
+# define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE)
+#elif defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny85__)
+# define TOTAL_EEPROM_BYTE_COUNT 512
+#elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32A__)
+# define TOTAL_EEPROM_BYTE_COUNT 1024
+#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__)
+# define TOTAL_EEPROM_BYTE_COUNT 2048
+#elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
+# define TOTAL_EEPROM_BYTE_COUNT 4096
+#elif defined(EEPROM_TEST_HARNESS)
+# ifndef FLASH_STM32_MOCKED
+// Normal tests
+# define TOTAL_EEPROM_BYTE_COUNT 32
+# else
+// Flash wear-leveling testing
+# include "eeprom_stm32_tests.h"
+# define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE)
+# endif
+#else
+# error Unknown EEPROM driver.
+#endif
diff --git a/platforms/suspend.c b/platforms/suspend.c
new file mode 100644
index 0000000000..fea23cbd02
--- /dev/null
+++ b/platforms/suspend.c
@@ -0,0 +1,51 @@
+// Copyright 2022 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "suspend.h"
+#include "matrix.h"
+
+// TODO: Move to more correct location
+__attribute__((weak)) void matrix_power_up(void) {}
+__attribute__((weak)) void matrix_power_down(void) {}
+
+/** \brief Run user level Power down
+ *
+ * FIXME: needs doc
+ */
+__attribute__((weak)) void suspend_power_down_user(void) {}
+
+/** \brief Run keyboard level Power down
+ *
+ * FIXME: needs doc
+ */
+__attribute__((weak)) void suspend_power_down_kb(void) {
+ suspend_power_down_user();
+}
+
+/** \brief run user level code immediately after wakeup
+ *
+ * FIXME: needs doc
+ */
+__attribute__((weak)) void suspend_wakeup_init_user(void) {}
+
+/** \brief run keyboard level code immediately after wakeup
+ *
+ * FIXME: needs doc
+ */
+__attribute__((weak)) void suspend_wakeup_init_kb(void) {
+ suspend_wakeup_init_user();
+}
+
+/** \brief suspend wakeup condition
+ *
+ * FIXME: needs doc
+ */
+bool suspend_wakeup_condition(void) {
+ matrix_power_up();
+ matrix_scan();
+ matrix_power_down();
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
+ if (matrix_get_row(r)) return true;
+ }
+ return false;
+}
diff --git a/platforms/suspend.h b/platforms/suspend.h
index 081735f90e..e4f7f39ddb 100644
--- a/platforms/suspend.h
+++ b/platforms/suspend.h
@@ -3,7 +3,6 @@
#include <stdint.h>
#include <stdbool.h>
-void suspend_idle(uint8_t timeout);
void suspend_power_down(void);
bool suspend_wakeup_condition(void);
void suspend_wakeup_init(void);
diff --git a/platforms/test/bootloader.c b/platforms/test/bootloaders/none.c
index 5155d9ff04..5155d9ff04 100644
--- a/platforms/test/bootloader.c
+++ b/platforms/test/bootloaders/none.c
diff --git a/platforms/test/eeprom.c b/platforms/test/eeprom.c
index 5c8e69dae3..d501745e55 100644
--- a/platforms/test/eeprom.c
+++ b/platforms/test/eeprom.c
@@ -16,9 +16,7 @@
#include "eeprom.h"
-#define EEPROM_SIZE 32
-
-static uint8_t buffer[EEPROM_SIZE];
+static uint8_t buffer[TOTAL_EEPROM_BYTE_COUNT];
uint8_t eeprom_read_byte(const uint8_t *addr) {
uintptr_t offset = (uintptr_t)addr;
@@ -70,7 +68,9 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
}
}
-void eeprom_update_byte(uint8_t *addr, uint8_t value) { eeprom_write_byte(addr, value); }
+void eeprom_update_byte(uint8_t *addr, uint8_t value) {
+ eeprom_write_byte(addr, value);
+}
void eeprom_update_word(uint16_t *addr, uint16_t value) {
uint8_t *p = (uint8_t *)addr;
diff --git a/platforms/test/eeprom_stm32_tests.cpp b/platforms/test/eeprom_stm32_tests.cpp
index 5bc8d87900..d2c41fb77d 100644
--- a/platforms/test/eeprom_stm32_tests.cpp
+++ b/platforms/test/eeprom_stm32_tests.cpp
@@ -17,8 +17,6 @@
#include "gtest/gtest.h"
extern "C" {
-#include "flash_stm32.h"
-#include "eeprom_stm32.h"
#include "eeprom.h"
}
@@ -46,7 +44,6 @@ extern "C" {
*
*/
-#define EEPROM_SIZE (FEE_PAGE_SIZE * FEE_PAGE_COUNT / 2)
#define LOG_SIZE EEPROM_SIZE
#define LOG_BASE (MOCK_FLASH_SIZE - LOG_SIZE)
#define EEPROM_BASE (LOG_BASE - EEPROM_SIZE)
@@ -63,7 +60,9 @@ class EepromStm32Test : public testing::Test {
~EepromStm32Test() {}
protected:
- void SetUp() override { EEPROM_Erase(); }
+ void SetUp() override {
+ EEPROM_Erase();
+ }
void TearDown() override {
#ifdef EEPROM_DEBUG
@@ -86,7 +85,7 @@ TEST_F(EepromStm32Test, TestReadGarbage) {
garbage += i;
FlashBuf[i] = garbage;
}
- EEPROM_Init(); // Just verify we don't crash
+ EEPROM_Init(); // Just verify we don't crash
}
TEST_F(EepromStm32Test, TestWriteBadAddress) {
@@ -209,11 +208,11 @@ TEST_F(EepromStm32Test, TestReadWord) {
TEST_F(EepromStm32Test, TestWriteWord) {
/* Direct compacted-area: Address < 0x80 */
- EEPROM_WriteDataWord(0, 0xdead); // Aligned
- EEPROM_WriteDataWord(3, 0xbeef); // Unaligned
+ EEPROM_WriteDataWord(0, 0xdead); // Aligned
+ EEPROM_WriteDataWord(3, 0xbeef); // Unaligned
/* Direct compacted-area: Address >= 0x80 */
- EEPROM_WriteDataWord(200, 0xabcd); // Aligned
- EEPROM_WriteDataWord(203, 0x9876); // Unaligned
+ EEPROM_WriteDataWord(200, 0xabcd); // Aligned
+ EEPROM_WriteDataWord(203, 0x9876); // Unaligned
EEPROM_WriteDataWord(EEPROM_SIZE - 4, 0x1234);
EEPROM_WriteDataWord(EEPROM_SIZE - 2, 0x5678);
/* Write Log word zero-encoded */
@@ -221,10 +220,10 @@ TEST_F(EepromStm32Test, TestWriteWord) {
/* Write Log word one-encoded */
EEPROM_WriteDataWord(EEPROM_SIZE - 2, 1);
/* Write Log word value aligned */
- EEPROM_WriteDataWord(200, 0x4321); // Aligned
+ EEPROM_WriteDataWord(200, 0x4321); // Aligned
/* Write Log word value unaligned */
- EEPROM_WriteDataByte(202, 0x3c); // Set neighboring byte
- EEPROM_WriteDataWord(203, 0xcdef); // Unaligned
+ EEPROM_WriteDataByte(202, 0x3c); // Set neighboring byte
+ EEPROM_WriteDataWord(203, 0xcdef); // Unaligned
/* Check values */
/* Direct compacted-area */
EXPECT_EQ(*(uint16_t*)&FlashBuf[EEPROM_BASE], (uint16_t)~0xdead);
@@ -252,11 +251,11 @@ TEST_F(EepromStm32Test, TestWriteWord) {
TEST_F(EepromStm32Test, TestWordRoundTrip) {
/* Direct compacted-area: Address < 0x80 */
- EEPROM_WriteDataWord(0, 0xdead); // Aligned
- EEPROM_WriteDataWord(3, 0xbeef); // Unaligned
+ EEPROM_WriteDataWord(0, 0xdead); // Aligned
+ EEPROM_WriteDataWord(3, 0xbeef); // Unaligned
/* Direct compacted-area: Address >= 0x80 */
- EEPROM_WriteDataWord(200, 0xabcd); // Aligned
- EEPROM_WriteDataWord(203, 0x9876); // Unaligned
+ EEPROM_WriteDataWord(200, 0xabcd); // Aligned
+ EEPROM_WriteDataWord(203, 0x9876); // Unaligned
EEPROM_WriteDataWord(EEPROM_SIZE - 4, 0x1234);
EEPROM_WriteDataWord(EEPROM_SIZE - 2, 0x5678);
/* Check values */
@@ -273,10 +272,10 @@ TEST_F(EepromStm32Test, TestWordRoundTrip) {
/* Write Log word one-encoded */
EEPROM_WriteDataWord(EEPROM_SIZE - 2, 1);
/* Write Log word value aligned */
- EEPROM_WriteDataWord(200, 0x4321); // Aligned
+ EEPROM_WriteDataWord(200, 0x4321); // Aligned
/* Write Log word value unaligned */
- EEPROM_WriteDataByte(202, 0x3c); // Set neighboring byte
- EEPROM_WriteDataWord(203, 0xcdef); // Unaligned
+ EEPROM_WriteDataByte(202, 0x3c); // Set neighboring byte
+ EEPROM_WriteDataWord(203, 0xcdef); // Unaligned
/* Check values */
EEPROM_Init();
EXPECT_EQ(EEPROM_ReadDataWord(200), 0x4321);
@@ -327,34 +326,34 @@ TEST_F(EepromStm32Test, TestByteWordBoundary) {
TEST_F(EepromStm32Test, TestDWordRoundTrip) {
/* Direct compacted-area: Address < 0x80 */
- eeprom_write_dword((uint32_t*)0, 0xdeadbeef); // Aligned
- eeprom_write_dword((uint32_t*)9, 0x12345678); // Unaligned
+ eeprom_write_dword((uint32_t*)0, 0xdeadbeef); // Aligned
+ eeprom_write_dword((uint32_t*)9, 0x12345678); // Unaligned
/* Direct compacted-area: Address >= 0x80 */
eeprom_write_dword((uint32_t*)200, 0xfacef00d);
- eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 4), 0xba5eba11); // Aligned
- eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 9), 0xcafed00d); // Unaligned
+ eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 4), 0xba5eba11); // Aligned
+ eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 9), 0xcafed00d); // Unaligned
/* Check direct values */
EEPROM_Init();
EXPECT_EQ(eeprom_read_dword((uint32_t*)0), 0xdeadbeef);
EXPECT_EQ(eeprom_read_dword((uint32_t*)9), 0x12345678);
EXPECT_EQ(eeprom_read_dword((uint32_t*)200), 0xfacef00d);
- EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 4)), 0xba5eba11); // Aligned
- EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 9)), 0xcafed00d); // Unaligned
+ EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 4)), 0xba5eba11); // Aligned
+ EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 9)), 0xcafed00d); // Unaligned
/* Write Log byte encoded */
eeprom_write_dword((uint32_t*)0, 0xdecafbad);
eeprom_write_dword((uint32_t*)9, 0x87654321);
/* Write Log word encoded */
eeprom_write_dword((uint32_t*)200, 1);
/* Write Log word value aligned */
- eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 4), 0xdeadc0de); // Aligned
- eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 9), 0x6789abcd); // Unaligned
+ eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 4), 0xdeadc0de); // Aligned
+ eeprom_write_dword((uint32_t*)(EEPROM_SIZE - 9), 0x6789abcd); // Unaligned
/* Check log values */
EEPROM_Init();
EXPECT_EQ(eeprom_read_dword((uint32_t*)0), 0xdecafbad);
EXPECT_EQ(eeprom_read_dword((uint32_t*)9), 0x87654321);
EXPECT_EQ(eeprom_read_dword((uint32_t*)200), 1);
- EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 4)), 0xdeadc0de); // Aligned
- EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 9)), 0x6789abcd); // Unaligned
+ EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 4)), 0xdeadc0de); // Aligned
+ EXPECT_EQ(eeprom_read_dword((uint32_t*)(EEPROM_SIZE - 9)), 0x6789abcd); // Unaligned
}
TEST_F(EepromStm32Test, TestBlockRoundTrip) {
diff --git a/platforms/test/eeprom_stm32_tests.h b/platforms/test/eeprom_stm32_tests.h
new file mode 100644
index 0000000000..35ed885e52
--- /dev/null
+++ b/platforms/test/eeprom_stm32_tests.h
@@ -0,0 +1,8 @@
+// Copyright 2018-2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "flash_stm32.h"
+#include "eeprom_stm32.h"
+
+#define EEPROM_SIZE (FEE_PAGE_SIZE * FEE_PAGE_COUNT / 2)
diff --git a/platforms/test/flash_stm32_mock.c b/platforms/test/flash_stm32_mock.c
index 222a004bc7..b6ab170f95 100644
--- a/platforms/test/flash_stm32_mock.c
+++ b/platforms/test/flash_stm32_mock.c
@@ -44,6 +44,12 @@ FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) {
}
}
-FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) { return FLASH_COMPLETE; }
-void FLASH_Unlock(void) { flash_locked = false; }
-void FLASH_Lock(void) { flash_locked = true; }
+FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) {
+ return FLASH_COMPLETE;
+}
+void FLASH_Unlock(void) {
+ flash_locked = false;
+}
+void FLASH_Lock(void) {
+ flash_locked = true;
+}
diff --git a/platforms/test/rules.mk b/platforms/test/rules.mk
index 66b853d8ee..55512c7392 100644
--- a/platforms/test/rules.mk
+++ b/platforms/test/rules.mk
@@ -1,4 +1,4 @@
-eeprom_stm32_DEFS := -DFLASH_STM32_MOCKED -DNO_PRINT -DFEE_FLASH_BASE=FlashBuf
+eeprom_stm32_DEFS := -DEEPROM_TEST_HARNESS -DFLASH_STM32_MOCKED -DNO_PRINT -DFEE_FLASH_BASE=FlashBuf
eeprom_stm32_tiny_DEFS := $(eeprom_stm32_DEFS) \
-DFEE_MCU_FLASH_SIZE=1 \
-DMOCK_FLASH_SIZE=1024 \
diff --git a/platforms/test/timer.c b/platforms/test/timer.c
index 61c3a00201..e0acd1b16d 100644
--- a/platforms/test/timer.c
+++ b/platforms/test/timer.c
@@ -18,16 +18,34 @@
static uint32_t current_time = 0;
-void timer_init(void) { current_time = 0; }
+void timer_init(void) {
+ current_time = 0;
+}
-void timer_clear(void) { current_time = 0; }
+void timer_clear(void) {
+ current_time = 0;
+}
-uint16_t timer_read(void) { return current_time & 0xFFFF; }
-uint32_t timer_read32(void) { return current_time; }
-uint16_t timer_elapsed(uint16_t last) { return TIMER_DIFF_16(timer_read(), last); }
-uint32_t timer_elapsed32(uint32_t last) { return TIMER_DIFF_32(timer_read32(), last); }
+uint16_t timer_read(void) {
+ return current_time & 0xFFFF;
+}
+uint32_t timer_read32(void) {
+ return current_time;
+}
+uint16_t timer_elapsed(uint16_t last) {
+ return TIMER_DIFF_16(timer_read(), last);
+}
+uint32_t timer_elapsed32(uint32_t last) {
+ return TIMER_DIFF_32(timer_read32(), last);
+}
-void set_time(uint32_t t) { current_time = t; }
-void advance_time(uint32_t ms) { current_time += ms; }
+void set_time(uint32_t t) {
+ current_time = t;
+}
+void advance_time(uint32_t ms) {
+ current_time += ms;
+}
-void wait_ms(uint32_t ms) { advance_time(ms); }
+void wait_ms(uint32_t ms) {
+ advance_time(ms);
+}
diff --git a/platforms/timer.h b/platforms/timer.h
index 02e39e79e7..d55f40f0b0 100644
--- a/platforms/timer.h
+++ b/platforms/timer.h
@@ -52,14 +52,22 @@ uint32_t timer_elapsed32(uint32_t last);
# define TIMER_DIFF_FAST(a, b) TIMER_DIFF_16(a, b)
# define timer_expired_fast(current, future) timer_expired(current, future)
typedef uint16_t fast_timer_t;
-fast_timer_t inline timer_read_fast(void) { return timer_read(); }
-fast_timer_t inline timer_elapsed_fast(fast_timer_t last) { return timer_elapsed(last); }
+fast_timer_t inline timer_read_fast(void) {
+ return timer_read();
+}
+fast_timer_t inline timer_elapsed_fast(fast_timer_t last) {
+ return timer_elapsed(last);
+}
#else
# define TIMER_DIFF_FAST(a, b) TIMER_DIFF_32(a, b)
# define timer_expired_fast(current, future) timer_expired32(current, future)
typedef uint32_t fast_timer_t;
-fast_timer_t inline timer_read_fast(void) { return timer_read32(); }
-fast_timer_t inline timer_elapsed_fast(fast_timer_t last) { return timer_elapsed32(last); }
+fast_timer_t inline timer_read_fast(void) {
+ return timer_read32();
+}
+fast_timer_t inline timer_elapsed_fast(fast_timer_t last) {
+ return timer_elapsed32(last);
+}
#endif
#ifdef __cplusplus
diff --git a/quantum/action.c b/quantum/action.c
index 5e81efb671..2bb1c34985 100644
--- a/quantum/action.c
+++ b/quantum/action.c
@@ -23,7 +23,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "led.h"
#include "action_layer.h"
#include "action_tapping.h"
-#include "action_macro.h"
#include "action_util.h"
#include "action.h"
#include "wait.h"
@@ -54,14 +53,20 @@ int retro_tapping_counter = 0;
#endif
#ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-__attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
#endif
#ifdef RETRO_TAPPING_PER_KEY
-__attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
#endif
-__attribute__((weak)) bool pre_process_record_quantum(keyrecord_t *record) { return true; }
+__attribute__((weak)) bool pre_process_record_quantum(keyrecord_t *record) {
+ return true;
+}
/** \brief Called to execute an action.
*
@@ -164,10 +169,14 @@ void process_record_nocache(keyrecord_t *record) {
disable_action_cache = false;
}
#else
-void process_record_nocache(keyrecord_t *record) { process_record(record); }
+void process_record_nocache(keyrecord_t *record) {
+ process_record(record);
+}
#endif
-__attribute__((weak)) bool process_record_quantum(keyrecord_t *record) { return true; }
+__attribute__((weak)) bool process_record_quantum(keyrecord_t *record) {
+ return true;
+}
__attribute__((weak)) void post_process_record_quantum(keyrecord_t *record) {}
@@ -634,12 +643,7 @@ void process_action(keyrecord_t *record, action_t action) {
break;
# endif
#endif
- /* Extentions */
-#ifndef NO_ACTION_MACRO
- case ACT_MACRO:
- action_macro_play(action_get_macro(record, action.func.id, action.func.opt));
- break;
-#endif
+
#ifdef SWAP_HANDS_ENABLE
case ACT_SWAP_HANDS:
switch (action.swap.code) {
@@ -694,7 +698,7 @@ void process_action(keyrecord_t *record, action_t action) {
/* tap key */
if (tap_count > 0) {
if (swap_held) {
- swap_hands = !swap_hands; // undo hold set up in _tap_hint
+ swap_hands = !swap_hands; // undo hold set up in _tap_hint
swap_held = false;
}
if (event.pressed) {
@@ -702,22 +706,17 @@ void process_action(keyrecord_t *record, action_t action) {
} else {
wait_ms(TAP_CODE_DELAY);
unregister_code(action.swap.code);
- *record = (keyrecord_t){}; // hack: reset tap mode
+ *record = (keyrecord_t){}; // hack: reset tap mode
}
} else {
if (swap_held && !event.pressed) {
- swap_hands = !swap_hands; // undo hold set up in _tap_hint
+ swap_hands = !swap_hands; // undo hold set up in _tap_hint
swap_held = false;
}
}
# endif
}
#endif
-#ifndef NO_ACTION_FUNCTION
- case ACT_FUNCTION:
- action_function(record, action.func.id, action.func.opt);
- break;
-#endif
default:
break;
}
@@ -794,7 +793,7 @@ void process_action(keyrecord_t *record, action_t action) {
*
* FIXME: Needs documentation.
*/
-void register_code(uint8_t code) {
+__attribute__((weak)) void register_code(uint8_t code) {
if (code == KC_NO) {
return;
}
@@ -873,9 +872,13 @@ void register_code(uint8_t code) {
}
#ifdef EXTRAKEY_ENABLE
else if
- IS_SYSTEM(code) { host_system_send(KEYCODE2SYSTEM(code)); }
+ IS_SYSTEM(code) {
+ host_system_send(KEYCODE2SYSTEM(code));
+ }
else if
- IS_CONSUMER(code) { host_consumer_send(KEYCODE2CONSUMER(code)); }
+ IS_CONSUMER(code) {
+ host_consumer_send(KEYCODE2CONSUMER(code));
+ }
#endif
#ifdef MOUSEKEY_ENABLE
else if
@@ -890,7 +893,7 @@ void register_code(uint8_t code) {
*
* FIXME: Needs documentation.
*/
-void unregister_code(uint8_t code) {
+__attribute__((weak)) void unregister_code(uint8_t code) {
if (code == KC_NO) {
return;
}
@@ -938,9 +941,13 @@ void unregister_code(uint8_t code) {
send_keyboard_report();
}
else if
- IS_SYSTEM(code) { host_system_send(0); }
+ IS_SYSTEM(code) {
+ host_system_send(0);
+ }
else if
- IS_CONSUMER(code) { host_consumer_send(0); }
+ IS_CONSUMER(code) {
+ host_consumer_send(0);
+ }
#ifdef MOUSEKEY_ENABLE
else if
IS_MOUSEKEY(code) {
@@ -955,7 +962,7 @@ void unregister_code(uint8_t code) {
* \param code The basic keycode to tap.
* \param delay The amount of time in milliseconds to leave the keycode registered, before unregistering it.
*/
-void tap_code_delay(uint8_t code, uint16_t delay) {
+__attribute__((weak)) void tap_code_delay(uint8_t code, uint16_t delay) {
register_code(code);
for (uint16_t i = delay; i > 0; i--) {
wait_ms(1);
@@ -967,13 +974,15 @@ void tap_code_delay(uint8_t code, uint16_t delay) {
*
* \param code The basic keycode to tap. If `code` is `KC_CAPS_LOCK`, the delay will be `TAP_HOLD_CAPS_DELAY`, otherwise `TAP_CODE_DELAY`, if defined.
*/
-void tap_code(uint8_t code) { tap_code_delay(code, code == KC_CAPS_LOCK ? TAP_HOLD_CAPS_DELAY : TAP_CODE_DELAY); }
+__attribute__((weak)) void tap_code(uint8_t code) {
+ tap_code_delay(code, code == KC_CAPS_LOCK ? TAP_HOLD_CAPS_DELAY : TAP_CODE_DELAY);
+}
/** \brief Adds the given physically pressed modifiers and sends a keyboard report immediately.
*
* \param mods A bitfield of modifiers to register.
*/
-void register_mods(uint8_t mods) {
+__attribute__((weak)) void register_mods(uint8_t mods) {
if (mods) {
add_mods(mods);
send_keyboard_report();
@@ -984,7 +993,7 @@ void register_mods(uint8_t mods) {
*
* \param mods A bitfield of modifiers to unregister.
*/
-void unregister_mods(uint8_t mods) {
+__attribute__((weak)) void unregister_mods(uint8_t mods) {
if (mods) {
del_mods(mods);
send_keyboard_report();
@@ -995,7 +1004,7 @@ void unregister_mods(uint8_t mods) {
*
* \param mods A bitfield of modifiers to register.
*/
-void register_weak_mods(uint8_t mods) {
+__attribute__((weak)) void register_weak_mods(uint8_t mods) {
if (mods) {
add_weak_mods(mods);
send_keyboard_report();
@@ -1006,7 +1015,7 @@ void register_weak_mods(uint8_t mods) {
*
* \param mods A bitfield of modifiers to unregister.
*/
-void unregister_weak_mods(uint8_t mods) {
+__attribute__((weak)) void unregister_weak_mods(uint8_t mods) {
if (mods) {
del_weak_mods(mods);
send_keyboard_report();
@@ -1041,7 +1050,6 @@ void clear_keyboard_but_mods_and_keys() {
host_consumer_send(0);
#endif
clear_weak_mods();
- clear_macro_mods();
send_keyboard_report();
#ifdef MOUSEKEY_ENABLE
mousekey_clear();
@@ -1104,12 +1112,6 @@ bool is_tap_action(action_t action) {
return true;
}
return false;
- case ACT_MACRO:
- case ACT_FUNCTION:
- if (action.func.opt & FUNC_TAP) {
- return true;
- }
- return false;
}
return false;
}
@@ -1118,7 +1120,9 @@ bool is_tap_action(action_t action) {
*
* FIXME: Needs documentation.
*/
-void debug_event(keyevent_t event) { dprintf("%04X%c(%u)", (event.key.row << 8 | event.key.col), (event.pressed ? 'd' : 'u'), event.time); }
+void debug_event(keyevent_t event) {
+ dprintf("%04X%c(%u)", (event.key.row << 8 | event.key.col), (event.pressed ? 'd' : 'u'), event.time);
+}
/** \brief Debug print (FIXME: Needs better description)
*
* FIXME: Needs documentation.
@@ -1166,12 +1170,6 @@ void debug_action(action_t action) {
case ACT_LAYER_TAP_EXT:
dprint("ACT_LAYER_TAP_EXT");
break;
- case ACT_MACRO:
- dprint("ACT_MACRO");
- break;
- case ACT_FUNCTION:
- dprint("ACT_FUNCTION");
- break;
case ACT_SWAP_HANDS:
dprint("ACT_SWAP_HANDS");
break;
diff --git a/quantum/action.h b/quantum/action.h
index b562f18c5b..39b5da63b8 100644
--- a/quantum/action.h
+++ b/quantum/action.h
@@ -19,25 +19,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
+#include "progmem.h"
#include "keyboard.h"
#include "keycode.h"
#include "action_code.h"
-#include "action_macro.h"
#ifdef __cplusplus
extern "C" {
#endif
-/* Disable macro and function features when LTO is enabled, since they break */
-#ifdef LTO_ENABLE
-# ifndef NO_ACTION_MACRO
-# define NO_ACTION_MACRO
-# endif
-# ifndef NO_ACTION_FUNCTION
-# define NO_ACTION_FUNCTION
-# endif
-#endif
-
#ifndef TAP_CODE_DELAY
# define TAP_CODE_DELAY 0
#endif
@@ -72,12 +62,6 @@ void action_exec(keyevent_t event);
action_t action_for_key(uint8_t layer, keypos_t key);
action_t action_for_keycode(uint16_t keycode);
-/* macro */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
-
-/* user defined special function */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);
-
/* keyboard-specific key event (pre)processing */
bool process_record_quantum(keyrecord_t *record);
diff --git a/quantum/action_code.h b/quantum/action_code.h
index eb18c36ae8..20b3e459d2 100644
--- a/quantum/action_code.h
+++ b/quantum/action_code.h
@@ -79,19 +79,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* 101E|LLLL|1111 0100 One Shot Layer (0xF4) [TAP]
* 101E|LLLL|1111 xxxx Reserved (0xF5-FF)
* ELLLL: layer 0-31(E: extra bit for layer 16-31)
- *
- * Extensions(11xx)
- * ----------------
- * ACT_MACRO(1100):
- * 1100|opt | id(8) Macro play?
- * 1100|1111| id(8) Macro record?
- *
- * 1101|xxxx xxxx xxxx (reserved)
- * 1110|xxxx xxxx xxxx (reserved)
- *
- * ACT_FUNCTION(1111):
- * 1111| address(12) Function?
- * 1111|opt | id(8) Function?
*/
enum action_kind_id {
/* Key Actions */
@@ -111,9 +98,6 @@ enum action_kind_id {
ACT_LAYER_MODS = 0b1001,
ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */
ACT_LAYER_TAP_EXT = 0b1011, /* Layer 16-31 */
- /* Extensions */
- ACT_MACRO = 0b1100,
- ACT_FUNCTION = 0b1111
};
/** \brief Action Code Struct
@@ -164,11 +148,6 @@ typedef union {
uint8_t page : 2;
uint8_t kind : 4;
} usage;
- struct action_function {
- uint8_t id : 8;
- uint8_t opt : 4;
- uint8_t kind : 4;
- } func;
struct action_swap {
uint8_t code : 8;
uint8_t opt : 4;
@@ -275,17 +254,6 @@ enum layer_param_tap_op {
#define ACTION_DEFAULT_LAYER_BIT_XOR(part, bits) ACTION_LAYER_BITOP(OP_BIT_XOR, (part), (bits), 0)
#define ACTION_DEFAULT_LAYER_BIT_SET(part, bits) ACTION_LAYER_BITOP(OP_BIT_SET, (part), (bits), 0)
-/* Macro */
-#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id))
-#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP << 8 | (id))
-#define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt) << 8 | (id))
-/* Function */
-enum function_opts {
- FUNC_TAP = 0x8, /* indciates function is tappable */
-};
-#define ACTION_FUNCTION(id) ACTION(ACT_FUNCTION, (id))
-#define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP << 8 | (id))
-#define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt) << 8 | (id))
/* OneHand Support */
enum swap_hands_param_tap_op {
OP_SH_TOGGLE = 0xF0,
diff --git a/quantum/action_layer.c b/quantum/action_layer.c
index ed1a4bd20d..e20eedee40 100644
--- a/quantum/action_layer.c
+++ b/quantum/action_layer.c
@@ -18,13 +18,17 @@ layer_state_t default_layer_state = 0;
*
* Run user code on default layer state change
*/
-__attribute__((weak)) layer_state_t default_layer_state_set_user(layer_state_t state) { return state; }
+__attribute__((weak)) layer_state_t default_layer_state_set_user(layer_state_t state) {
+ return state;
+}
/** \brief Default Layer State Set At Keyboard Level
*
* Run keyboard code on default layer state change
*/
-__attribute__((weak)) layer_state_t default_layer_state_set_kb(layer_state_t state) { return default_layer_state_set_user(state); }
+__attribute__((weak)) layer_state_t default_layer_state_set_kb(layer_state_t state) {
+ return default_layer_state_set_user(state);
+}
/** \brief Default Layer State Set
*
@@ -39,9 +43,9 @@ static void default_layer_state_set(layer_state_t state) {
default_layer_debug();
debug("\n");
#ifdef STRICT_LAYER_RELEASE
- clear_keyboard_but_mods(); // To avoid stuck keys
+ clear_keyboard_but_mods(); // To avoid stuck keys
#else
- clear_keyboard_but_mods_and_keys(); // Don't reset held keys
+ clear_keyboard_but_mods_and_keys(); // Don't reset held keys
#endif
}
@@ -49,30 +53,40 @@ static void default_layer_state_set(layer_state_t state) {
*
* Print out the hex value of the 32-bit default layer state, as well as the value of the highest bit.
*/
-void default_layer_debug(void) { dprintf("%08lX(%u)", default_layer_state, get_highest_layer(default_layer_state)); }
+void default_layer_debug(void) {
+ dprintf("%08lX(%u)", default_layer_state, get_highest_layer(default_layer_state));
+}
/** \brief Default Layer Set
*
* Sets the default layer state.
*/
-void default_layer_set(layer_state_t state) { default_layer_state_set(state); }
+void default_layer_set(layer_state_t state) {
+ default_layer_state_set(state);
+}
#ifndef NO_ACTION_LAYER
/** \brief Default Layer Or
*
* Turns on the default layer based on matching bits between specifed layer and existing layer state
*/
-void default_layer_or(layer_state_t state) { default_layer_state_set(default_layer_state | state); }
+void default_layer_or(layer_state_t state) {
+ default_layer_state_set(default_layer_state | state);
+}
/** \brief Default Layer And
*
* Turns on default layer based on matching enabled bits between specifed layer and existing layer state
*/
-void default_layer_and(layer_state_t state) { default_layer_state_set(default_layer_state & state); }
+void default_layer_and(layer_state_t state) {
+ default_layer_state_set(default_layer_state & state);
+}
/** \brief Default Layer Xor
*
* Turns on default layer based on non-matching bits between specifed layer and existing layer state
*/
-void default_layer_xor(layer_state_t state) { default_layer_state_set(default_layer_state ^ state); }
+void default_layer_xor(layer_state_t state) {
+ default_layer_state_set(default_layer_state ^ state);
+}
#endif
#ifndef NO_ACTION_LAYER
@@ -84,13 +98,17 @@ layer_state_t layer_state = 0;
*
* Runs user code on layer state change
*/
-__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) { return state; }
+__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
+ return state;
+}
/** \brief Layer state set keyboard
*
* Runs keyboard code on layer state change
*/
-__attribute__((weak)) layer_state_t layer_state_set_kb(layer_state_t state) { return layer_state_set_user(state); }
+__attribute__((weak)) layer_state_t layer_state_set_kb(layer_state_t state) {
+ return layer_state_set_user(state);
+}
/** \brief Layer state set
*
@@ -105,9 +123,9 @@ void layer_state_set(layer_state_t state) {
layer_debug();
dprintln();
# ifdef STRICT_LAYER_RELEASE
- clear_keyboard_but_mods(); // To avoid stuck keys
+ clear_keyboard_but_mods(); // To avoid stuck keys
# else
- clear_keyboard_but_mods_and_keys(); // Don't reset held keys
+ clear_keyboard_but_mods_and_keys(); // Don't reset held keys
# endif
}
@@ -115,13 +133,17 @@ void layer_state_set(layer_state_t state) {
*
* Turn off all layers
*/
-void layer_clear(void) { layer_state_set(0); }
+void layer_clear(void) {
+ layer_state_set(0);
+}
/** \brief Layer state is
*
* Return whether the given state is on (it might still be shadowed by a higher state, though)
*/
-bool layer_state_is(uint8_t layer) { return layer_state_cmp(layer_state, layer); }
+bool layer_state_is(uint8_t layer) {
+ return layer_state_cmp(layer_state, layer);
+}
/** \brief Layer state compare
*
@@ -138,47 +160,63 @@ bool layer_state_cmp(layer_state_t cmp_layer_state, uint8_t layer) {
*
* Turns on the given layer and turn off all other layers
*/
-void layer_move(uint8_t layer) { layer_state_set((layer_state_t)1 << layer); }
+void layer_move(uint8_t layer) {
+ layer_state_set((layer_state_t)1 << layer);
+}
/** \brief Layer on
*
* Turns on given layer
*/
-void layer_on(uint8_t layer) { layer_state_set(layer_state | ((layer_state_t)1 << layer)); }
+void layer_on(uint8_t layer) {
+ layer_state_set(layer_state | ((layer_state_t)1 << layer));
+}
/** \brief Layer off
*
* Turns off given layer
*/
-void layer_off(uint8_t layer) { layer_state_set(layer_state & ~((layer_state_t)1 << layer)); }
+void layer_off(uint8_t layer) {
+ layer_state_set(layer_state & ~((layer_state_t)1 << layer));
+}
/** \brief Layer invert
*
* Toggle the given layer (set it if it's unset, or unset it if it's set)
*/
-void layer_invert(uint8_t layer) { layer_state_set(layer_state ^ ((layer_state_t)1 << layer)); }
+void layer_invert(uint8_t layer) {
+ layer_state_set(layer_state ^ ((layer_state_t)1 << layer));
+}
/** \brief Layer or
*
* Turns on layers based on matching bits between specifed layer and existing layer state
*/
-void layer_or(layer_state_t state) { layer_state_set(layer_state | state); }
+void layer_or(layer_state_t state) {
+ layer_state_set(layer_state | state);
+}
/** \brief Layer and
*
* Turns on layers based on matching enabled bits between specifed layer and existing layer state
*/
-void layer_and(layer_state_t state) { layer_state_set(layer_state & state); }
+void layer_and(layer_state_t state) {
+ layer_state_set(layer_state & state);
+}
/** \brief Layer xor
*
* Turns on layers based on non-matching bits between specifed layer and existing layer state
*/
-void layer_xor(layer_state_t state) { layer_state_set(layer_state ^ state); }
+void layer_xor(layer_state_t state) {
+ layer_state_set(layer_state ^ state);
+}
/** \brief Layer debug printing
*
* Print out the hex value of the 32-bit layer state, as well as the value of the highest bit.
*/
-void layer_debug(void) { dprintf("%08lX(%u)", layer_state, get_highest_layer(layer_state)); }
+void layer_debug(void) {
+ dprintf("%08lX(%u)", layer_state, get_highest_layer(layer_state));
+}
#endif
#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
@@ -276,4 +314,6 @@ uint8_t layer_switch_get_layer(keypos_t key) {
*
* Gets action code based on key position
*/
-action_t layer_switch_get_action(keypos_t key) { return action_for_key(layer_switch_get_layer(key), key); }
+action_t layer_switch_get_action(keypos_t key) {
+ return action_for_key(layer_switch_get_layer(key), key);
+}
diff --git a/quantum/action_macro.c b/quantum/action_macro.c
deleted file mode 100644
index 92228c0ba8..0000000000
--- a/quantum/action_macro.c
+++ /dev/null
@@ -1,93 +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/>.
-*/
-#include "action.h"
-#include "action_util.h"
-#include "action_macro.h"
-#include "wait.h"
-
-#ifdef DEBUG_ACTION
-# include "debug.h"
-#else
-# include "nodebug.h"
-#endif
-
-#ifndef NO_ACTION_MACRO
-
-# define MACRO_READ() (macro = MACRO_GET(macro_p++))
-/** \brief Action Macro Play
- *
- * FIXME: Needs doc
- */
-void action_macro_play(const macro_t *macro_p) {
- macro_t macro = END;
- uint8_t interval = 0;
-
- if (!macro_p) return;
- while (true) {
- switch (MACRO_READ()) {
- case KEY_DOWN:
- MACRO_READ();
- dprintf("KEY_DOWN(%02X)\n", macro);
- if (IS_MOD(macro)) {
- add_macro_mods(MOD_BIT(macro));
- send_keyboard_report();
- } else {
- register_code(macro);
- }
- break;
- case KEY_UP:
- MACRO_READ();
- dprintf("KEY_UP(%02X)\n", macro);
- if (IS_MOD(macro)) {
- del_macro_mods(MOD_BIT(macro));
- send_keyboard_report();
- } else {
- unregister_code(macro);
- }
- break;
- case WAIT:
- MACRO_READ();
- dprintf("WAIT(%u)\n", macro);
- {
- uint8_t ms = macro;
- while (ms--) wait_ms(1);
- }
- break;
- case INTERVAL:
- interval = MACRO_READ();
- dprintf("INTERVAL(%u)\n", interval);
- break;
- case 0x04 ... 0x73:
- dprintf("DOWN(%02X)\n", macro);
- register_code(macro);
- break;
- case 0x84 ... 0xF3:
- dprintf("UP(%02X)\n", macro);
- unregister_code(macro & 0x7F);
- break;
- case END:
- default:
- return;
- }
- // interval
- {
- uint8_t ms = interval;
- while (ms--) wait_ms(1);
- }
- }
-}
-#endif
diff --git a/quantum/action_macro.h b/quantum/action_macro.h
deleted file mode 100644
index 685e2c6ffc..0000000000
--- a/quantum/action_macro.h
+++ /dev/null
@@ -1,123 +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/>.
-*/
-
-#pragma once
-
-#include <stdint.h>
-#include "progmem.h"
-
-typedef uint8_t macro_t;
-
-#define MACRO_NONE (macro_t *)0
-#define MACRO(...) \
- ({ \
- static const macro_t __m[] PROGMEM = {__VA_ARGS__}; \
- &__m[0]; \
- })
-#define MACRO_GET(p) pgm_read_byte(p)
-
-// Sends press when the macro key is pressed, release when release, or tap_macro when the key has been tapped
-#define MACRO_TAP_HOLD(record, press, release, tap_macro) (((record)->event.pressed) ? (((record)->tap.count <= 0 || (record)->tap.interrupted) ? (press) : MACRO_NONE) : (((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (tap_macro) : (release)))
-
-// Holds down the modifier mod when the macro key is held, or sends macro instead when tapped
-#define MACRO_TAP_HOLD_MOD(record, macro, mod) MACRO_TAP_HOLD(record, (MACRO(D(mod), END)), MACRO(U(mod), END), macro)
-
-// Holds down the modifier mod when the macro key is held, or pressed a shifted key when tapped (eg: shift+3 for #)
-#define MACRO_TAP_SHFT_KEY_HOLD_MOD(record, key, mod) MACRO_TAP_HOLD_MOD(record, (MACRO(I(10), D(LSFT), T(key), U(LSFT), END)), mod)
-
-// Momentary switch layer when held, sends macro if tapped
-#define MACRO_TAP_HOLD_LAYER(record, macro, layer) \
- (((record)->event.pressed) ? (((record)->tap.count <= 0 || (record)->tap.interrupted) ? ({ \
- layer_on((layer)); \
- MACRO_NONE; \
- }) \
- : MACRO_NONE) \
- : (((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (macro) : ({ \
- layer_off((layer)); \
- MACRO_NONE; \
- })))
-
-// Momentary switch layer when held, presses a shifted key when tapped (eg: shift+3 for #)
-#define MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, key, layer) MACRO_TAP_HOLD_LAYER(record, MACRO(I(10), D(LSFT), T(key), U(LSFT), END), layer)
-
-#ifndef NO_ACTION_MACRO
-void action_macro_play(const macro_t *macro_p);
-#else
-# define action_macro_play(macro)
-#endif
-
-/* Macro commands
- * code(0x04-73) // key down(1byte)
- * code(0x04-73) | 0x80 // key up(1byte)
- * { KEY_DOWN, code(0x04-0xff) } // key down(2bytes)
- * { KEY_UP, code(0x04-0xff) } // key up(2bytes)
- * WAIT // wait milli-seconds
- * INTERVAL // set interval between macro commands
- * END // stop macro execution
- *
- * Ideas(Not implemented):
- * modifiers
- * system usage
- * consumer usage
- * unicode usage
- * function call
- * conditionals
- * loop
- */
-enum macro_command_id {
- /* 0x00 - 0x03 */
- END = 0x00,
- KEY_DOWN,
- KEY_UP,
-
- /* 0x04 - 0x73 (reserved for keycode down) */
-
- /* 0x74 - 0x83 */
- WAIT = 0x74,
- INTERVAL,
-
- /* 0x84 - 0xf3 (reserved for keycode up) */
-
- /* 0xf4 - 0xff */
-};
-
-/* TODO: keycode:0x04-0x73 can be handled by 1byte command else 2bytes are needed
- * if keycode between 0x04 and 0x73
- * keycode / (keycode|0x80)
- * else
- * {KEY_DOWN, keycode} / {KEY_UP, keycode}
- */
-#define DOWN(key) KEY_DOWN, (key)
-#define UP(key) KEY_UP, (key)
-#define TYPE(key) DOWN(key), UP(key)
-#define WAIT(ms) WAIT, (ms)
-#define INTERVAL(ms) INTERVAL, (ms)
-
-/* key down */
-#define D(key) DOWN(KC_##key)
-/* key up */
-#define U(key) UP(KC_##key)
-/* key type */
-#define T(key) TYPE(KC_##key)
-/* wait */
-#define W(ms) WAIT(ms)
-/* interval */
-#define I(ms) INTERVAL(ms)
-
-/* for backward comaptibility */
-#define MD(key) DOWN(KC_##key)
-#define MU(key) UP(KC_##key)
diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c
index d2c93f85e3..6f8b4f8c56 100644
--- a/quantum/action_tapping.c
+++ b/quantum/action_tapping.c
@@ -26,7 +26,9 @@
uint16_t g_tapping_term = TAPPING_TERM;
-__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return g_tapping_term; }
+__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ return g_tapping_term;
+}
# ifdef TAPPING_TERM_PER_KEY
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < get_tapping_term(get_record_keycode(&tapping_key, false), &tapping_key))
@@ -35,15 +37,21 @@ __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *r
# endif
# ifdef TAPPING_FORCE_HOLD_PER_KEY
-__attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
# endif
# ifdef PERMISSIVE_HOLD_PER_KEY
-__attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
# endif
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-__attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
# endif
# if defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)
@@ -124,7 +132,7 @@ bool process_tapping(keyrecord_t *keyp) {
# if defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)
|| (
# ifdef RETRO_TAPPING_PER_KEY
- get_retro_tapping(tapping_keycode, keyp) &&
+ get_retro_tapping(tapping_keycode, &tapping_key) &&
# endif
(RETRO_SHIFT + 0) != 0 && TIMER_DIFF_16(event.time, tapping_key.event.time) < (RETRO_SHIFT + 0)
)
@@ -158,7 +166,7 @@ bool process_tapping(keyrecord_t *keyp) {
(
(
# ifdef TAPPING_TERM_PER_KEY
- get_tapping_term(tapping_keycode, keyp)
+ get_tapping_term(tapping_keycode, &tapping_key)
# else
g_tapping_term
# endif
@@ -166,7 +174,7 @@ bool process_tapping(keyrecord_t *keyp) {
)
# ifdef PERMISSIVE_HOLD_PER_KEY
- || get_permissive_hold(tapping_keycode, keyp)
+ || get_permissive_hold(tapping_keycode, &tapping_key)
# elif defined(PERMISSIVE_HOLD)
|| true
# endif
@@ -177,7 +185,7 @@ bool process_tapping(keyrecord_t *keyp) {
# if defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)
|| (
# ifdef RETRO_TAPPING_PER_KEY
- get_retro_tapping(tapping_keycode, keyp) &&
+ get_retro_tapping(tapping_keycode, &tapping_key) &&
# endif
(
// Rolled over the two keys.
@@ -188,7 +196,7 @@ bool process_tapping(keyrecord_t *keyp) {
|| (
IS_LT(tapping_keycode)
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
- && get_hold_on_other_key_press(tapping_keycode, keyp)
+ && get_hold_on_other_key_press(tapping_keycode, &tapping_key)
# endif
)
# endif
@@ -196,7 +204,7 @@ bool process_tapping(keyrecord_t *keyp) {
|| (
IS_MT(tapping_keycode)
# ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
- && !get_ignore_mod_tap_interrupt(tapping_keycode, keyp)
+ && !get_ignore_mod_tap_interrupt(tapping_keycode, &tapping_key)
# endif
)
# endif
@@ -252,7 +260,7 @@ bool process_tapping(keyrecord_t *keyp) {
tapping_key.tap.interrupted = true;
# if defined(HOLD_ON_OTHER_KEY_PRESS) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
# if defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
- if (get_hold_on_other_key_press(tapping_keycode, keyp))
+ if (get_hold_on_other_key_press(tapping_keycode, &tapping_key))
# endif
{
debug("Tapping: End. No tap. Interfered by pressed key\n");
@@ -360,7 +368,7 @@ bool process_tapping(keyrecord_t *keyp) {
# if defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)
|| (
# ifdef RETRO_TAPPING_PER_KEY
- get_retro_tapping(tapping_keycode, keyp) &&
+ get_retro_tapping(tapping_keycode, &tapping_key) &&
# endif
(RETRO_SHIFT + 0) != 0 && TIMER_DIFF_16(event.time, tapping_key.event.time) < (RETRO_SHIFT + 0)
)
@@ -373,7 +381,7 @@ bool process_tapping(keyrecord_t *keyp) {
# if !defined(TAPPING_FORCE_HOLD) || defined(TAPPING_FORCE_HOLD_PER_KEY)
if (
# ifdef TAPPING_FORCE_HOLD_PER_KEY
- !get_tapping_force_hold(tapping_keycode, keyp) &&
+ !get_tapping_force_hold(tapping_keycode, &tapping_key) &&
# endif
!tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
// sequential tap.
diff --git a/quantum/action_util.c b/quantum/action_util.c
index 78e02aec18..64a1b6b30d 100644
--- a/quantum/action_util.c
+++ b/quantum/action_util.c
@@ -21,12 +21,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "action_layer.h"
#include "timer.h"
#include "keycode_config.h"
+#include <string.h>
extern keymap_config_t keymap_config;
-static uint8_t real_mods = 0;
-static uint8_t weak_mods = 0;
-static uint8_t macro_mods = 0;
+static uint8_t real_mods = 0;
+static uint8_t weak_mods = 0;
#ifdef KEY_OVERRIDE_ENABLE
static uint8_t weak_override_mods = 0;
static uint8_t suppressed_mods = 0;
@@ -43,8 +43,10 @@ extern inline void clear_keys(void);
#ifndef NO_ACTION_ONESHOT
static uint8_t oneshot_mods = 0;
static uint8_t oneshot_locked_mods = 0;
-uint8_t get_oneshot_locked_mods(void) { return oneshot_locked_mods; }
-void set_oneshot_locked_mods(uint8_t mods) {
+uint8_t get_oneshot_locked_mods(void) {
+ return oneshot_locked_mods;
+}
+void set_oneshot_locked_mods(uint8_t mods) {
if (mods != oneshot_locked_mods) {
oneshot_locked_mods = mods;
oneshot_locked_mods_changed_kb(oneshot_locked_mods);
@@ -58,9 +60,13 @@ void clear_oneshot_locked_mods(void) {
}
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
static uint16_t oneshot_time = 0;
-bool has_oneshot_mods_timed_out(void) { return TIMER_DIFF_16(timer_read(), oneshot_time) >= ONESHOT_TIMEOUT; }
+bool has_oneshot_mods_timed_out(void) {
+ return TIMER_DIFF_16(timer_read(), oneshot_time) >= ONESHOT_TIMEOUT;
+}
# else
-bool has_oneshot_mods_timed_out(void) { return false; }
+bool has_oneshot_mods_timed_out(void) {
+ return false;
+}
# endif
#endif
@@ -74,24 +80,32 @@ bool has_oneshot_mods_timed_out(void) { return false; }
*/
static int8_t oneshot_layer_data = 0;
-inline uint8_t get_oneshot_layer(void) { return oneshot_layer_data >> 3; }
-inline uint8_t get_oneshot_layer_state(void) { return oneshot_layer_data & 0b111; }
+inline uint8_t get_oneshot_layer(void) {
+ return oneshot_layer_data >> 3;
+}
+inline uint8_t get_oneshot_layer_state(void) {
+ return oneshot_layer_data & 0b111;
+}
# ifdef SWAP_HANDS_ENABLE
enum {
SHO_OFF,
- SHO_ACTIVE, // Swap hands button was pressed, and we didn't send any swapped keys yet
- SHO_PRESSED, // Swap hands button is currently pressed
- SHO_USED, // Swap hands button is still pressed, and we already sent swapped keys
+ SHO_ACTIVE, // Swap hands button was pressed, and we didn't send any swapped keys yet
+ SHO_PRESSED, // Swap hands button is currently pressed
+ SHO_USED, // Swap hands button is still pressed, and we already sent swapped keys
} swap_hands_oneshot = SHO_OFF;
# endif
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
static uint16_t oneshot_layer_time = 0;
-inline bool has_oneshot_layer_timed_out() { return TIMER_DIFF_16(timer_read(), oneshot_layer_time) >= ONESHOT_TIMEOUT && !(get_oneshot_layer_state() & ONESHOT_TOGGLED); }
+inline bool has_oneshot_layer_timed_out() {
+ return TIMER_DIFF_16(timer_read(), oneshot_layer_time) >= ONESHOT_TIMEOUT && !(get_oneshot_layer_state() & ONESHOT_TOGGLED);
+}
# ifdef SWAP_HANDS_ENABLE
static uint16_t oneshot_swaphands_time = 0;
-inline bool has_oneshot_swaphands_timed_out() { return TIMER_DIFF_16(timer_read(), oneshot_swaphands_time) >= ONESHOT_TIMEOUT && (swap_hands_oneshot == SHO_ACTIVE); }
+inline bool has_oneshot_swaphands_timed_out() {
+ return TIMER_DIFF_16(timer_read(), oneshot_swaphands_time) >= ONESHOT_TIMEOUT && (swap_hands_oneshot == SHO_ACTIVE);
+}
# endif
# endif
@@ -179,7 +193,9 @@ void clear_oneshot_layer_state(oneshot_fullfillment_t state) {
*
* FIXME: needs doc
*/
-bool is_oneshot_layer_active(void) { return get_oneshot_layer_state(); }
+bool is_oneshot_layer_active(void) {
+ return get_oneshot_layer_state();
+}
/** \brief set oneshot
*
@@ -198,21 +214,29 @@ void oneshot_set(bool active) {
*
* FIXME: needs doc
*/
-void oneshot_toggle(void) { oneshot_set(!keymap_config.oneshot_disable); }
+void oneshot_toggle(void) {
+ oneshot_set(!keymap_config.oneshot_disable);
+}
/** \brief enable oneshot
*
* FIXME: needs doc
*/
-void oneshot_enable(void) { oneshot_set(true); }
+void oneshot_enable(void) {
+ oneshot_set(true);
+}
/** \brief disable oneshot
*
* FIXME: needs doc
*/
-void oneshot_disable(void) { oneshot_set(false); }
+void oneshot_disable(void) {
+ oneshot_set(false);
+}
-bool is_oneshot_enabled(void) { return keymap_config.oneshot_disable; }
+bool is_oneshot_enabled(void) {
+ return keymap_config.oneshot_disable;
+}
#endif
@@ -223,7 +247,6 @@ bool is_oneshot_enabled(void) { return keymap_config.oneshot_disable; }
void send_keyboard_report(void) {
keyboard_report->mods = real_mods;
keyboard_report->mods |= weak_mods;
- keyboard_report->mods |= macro_mods;
#ifndef NO_ACTION_ONESHOT
if (oneshot_mods) {
@@ -247,110 +270,119 @@ void send_keyboard_report(void) {
keyboard_report->mods |= weak_override_mods;
#endif
- host_keyboard_send(keyboard_report);
+ static report_keyboard_t last_report;
+
+ /* Only send the report if there are changes to propagate to the host. */
+ if (memcmp(keyboard_report, &last_report, sizeof(report_keyboard_t)) != 0) {
+ memcpy(&last_report, keyboard_report, sizeof(report_keyboard_t));
+ host_keyboard_send(keyboard_report);
+ }
}
/** \brief Get mods
*
* FIXME: needs doc
*/
-uint8_t get_mods(void) { return real_mods; }
+uint8_t get_mods(void) {
+ return real_mods;
+}
/** \brief add mods
*
* FIXME: needs doc
*/
-void add_mods(uint8_t mods) { real_mods |= mods; }
+void add_mods(uint8_t mods) {
+ real_mods |= mods;
+}
/** \brief del mods
*
* FIXME: needs doc
*/
-void del_mods(uint8_t mods) { real_mods &= ~mods; }
+void del_mods(uint8_t mods) {
+ real_mods &= ~mods;
+}
/** \brief set mods
*
* FIXME: needs doc
*/
-void set_mods(uint8_t mods) { real_mods = mods; }
+void set_mods(uint8_t mods) {
+ real_mods = mods;
+}
/** \brief clear mods
*
* FIXME: needs doc
*/
-void clear_mods(void) { real_mods = 0; }
+void clear_mods(void) {
+ real_mods = 0;
+}
/** \brief get weak mods
*
* FIXME: needs doc
*/
-uint8_t get_weak_mods(void) { return weak_mods; }
+uint8_t get_weak_mods(void) {
+ return weak_mods;
+}
/** \brief add weak mods
*
* FIXME: needs doc
*/
-void add_weak_mods(uint8_t mods) { weak_mods |= mods; }
+void add_weak_mods(uint8_t mods) {
+ weak_mods |= mods;
+}
/** \brief del weak mods
*
* FIXME: needs doc
*/
-void del_weak_mods(uint8_t mods) { weak_mods &= ~mods; }
+void del_weak_mods(uint8_t mods) {
+ weak_mods &= ~mods;
+}
/** \brief set weak mods
*
* FIXME: needs doc
*/
-void set_weak_mods(uint8_t mods) { weak_mods = mods; }
+void set_weak_mods(uint8_t mods) {
+ weak_mods = mods;
+}
/** \brief clear weak mods
*
* FIXME: needs doc
*/
-void clear_weak_mods(void) { weak_mods = 0; }
+void clear_weak_mods(void) {
+ weak_mods = 0;
+}
#ifdef KEY_OVERRIDE_ENABLE
/** \brief set weak mods used by key overrides. DO not call this manually
*/
-void set_weak_override_mods(uint8_t mods) { weak_override_mods = mods; }
+void set_weak_override_mods(uint8_t mods) {
+ weak_override_mods = mods;
+}
/** \brief clear weak mods used by key overrides. DO not call this manually
*/
-void clear_weak_override_mods(void) { weak_override_mods = 0; }
+void clear_weak_override_mods(void) {
+ weak_override_mods = 0;
+}
/** \brief set suppressed mods used by key overrides. DO not call this manually
*/
-void set_suppressed_override_mods(uint8_t mods) { suppressed_mods = mods; }
+void set_suppressed_override_mods(uint8_t mods) {
+ suppressed_mods = mods;
+}
/** \brief clear suppressed mods used by key overrides. DO not call this manually
*/
-void clear_suppressed_override_mods(void) { suppressed_mods = 0; }
+void clear_suppressed_override_mods(void) {
+ suppressed_mods = 0;
+}
#endif
-/* macro modifier */
-/** \brief get macro mods
- *
- * FIXME: needs doc
- */
-uint8_t get_macro_mods(void) { return macro_mods; }
-/** \brief add macro mods
- *
- * FIXME: needs doc
- */
-void add_macro_mods(uint8_t mods) { macro_mods |= mods; }
-/** \brief del macro mods
- *
- * FIXME: needs doc
- */
-void del_macro_mods(uint8_t mods) { macro_mods &= ~mods; }
-/** \brief set macro mods
- *
- * FIXME: needs doc
- */
-void set_macro_mods(uint8_t mods) { macro_mods = mods; }
-/** \brief clear macro mods
- *
- * FIXME: needs doc
- */
-void clear_macro_mods(void) { macro_mods = 0; }
-
#ifndef NO_ACTION_ONESHOT
/** \brief get oneshot mods
*
* FIXME: needs doc
*/
-uint8_t get_oneshot_mods(void) { return oneshot_mods; }
+uint8_t get_oneshot_mods(void) {
+ return oneshot_mods;
+}
void add_oneshot_mods(uint8_t mods) {
if ((oneshot_mods & mods) != mods) {
@@ -413,7 +445,9 @@ __attribute__((weak)) void oneshot_locked_mods_changed_user(uint8_t mods) {}
*
* \param mods Contains the active modifiers active after the change.
*/
-__attribute__((weak)) void oneshot_locked_mods_changed_kb(uint8_t mods) { oneshot_locked_mods_changed_user(mods); }
+__attribute__((weak)) void oneshot_locked_mods_changed_kb(uint8_t mods) {
+ oneshot_locked_mods_changed_user(mods);
+}
/** \brief Called when the one shot modifiers have been changed.
*
@@ -425,7 +459,9 @@ __attribute__((weak)) void oneshot_mods_changed_user(uint8_t mods) {}
*
* \param mods Contains the active modifiers active after the change.
*/
-__attribute__((weak)) void oneshot_mods_changed_kb(uint8_t mods) { oneshot_mods_changed_user(mods); }
+__attribute__((weak)) void oneshot_mods_changed_kb(uint8_t mods) {
+ oneshot_mods_changed_user(mods);
+}
/** \brief Called when the one shot layers have been changed.
*
@@ -437,10 +473,14 @@ __attribute__((weak)) void oneshot_layer_changed_user(uint8_t layer) {}
*
* \param layer Contains the layer that is toggled on, or zero when toggled off.
*/
-__attribute__((weak)) void oneshot_layer_changed_kb(uint8_t layer) { oneshot_layer_changed_user(layer); }
+__attribute__((weak)) void oneshot_layer_changed_kb(uint8_t layer) {
+ oneshot_layer_changed_user(layer);
+}
/** \brief inspect keyboard state
*
* FIXME: needs doc
*/
-uint8_t has_anymod(void) { return bitpop(real_mods); }
+uint8_t has_anymod(void) {
+ return bitpop(real_mods);
+}
diff --git a/quantum/action_util.h b/quantum/action_util.h
index f2b3897ae5..6f1f09c4bd 100644
--- a/quantum/action_util.h
+++ b/quantum/action_util.h
@@ -29,11 +29,17 @@ extern report_keyboard_t *keyboard_report;
void send_keyboard_report(void);
/* key */
-inline void add_key(uint8_t key) { add_key_to_report(keyboard_report, key); }
+inline void add_key(uint8_t key) {
+ add_key_to_report(keyboard_report, key);
+}
-inline void del_key(uint8_t key) { del_key_from_report(keyboard_report, key); }
+inline void del_key(uint8_t key) {
+ del_key_from_report(keyboard_report, key);
+}
-inline void clear_keys(void) { clear_keys_from_report(keyboard_report); }
+inline void clear_keys(void) {
+ clear_keys_from_report(keyboard_report);
+}
/* modifier */
uint8_t get_mods(void);
@@ -49,13 +55,6 @@ void del_weak_mods(uint8_t mods);
void set_weak_mods(uint8_t mods);
void clear_weak_mods(void);
-/* macro modifier */
-uint8_t get_macro_mods(void);
-void add_macro_mods(uint8_t mods);
-void del_macro_mods(uint8_t mods);
-void set_macro_mods(uint8_t mods);
-void clear_macro_mods(void);
-
/* oneshot modifier */
uint8_t get_oneshot_mods(void);
void add_oneshot_mods(uint8_t mods);
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index 49bb309e80..c6523b908c 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -64,21 +64,21 @@
#ifndef AUDIO_TONE_STACKSIZE
# define AUDIO_TONE_STACKSIZE 8
#endif
-uint8_t active_tones = 0; // number of tones pushed onto the stack by audio_play_tone - might be more than the hardware is able to reproduce at any single time
-musical_tone_t tones[AUDIO_TONE_STACKSIZE]; // stack of currently active tones
+uint8_t active_tones = 0; // number of tones pushed onto the stack by audio_play_tone - might be more than the hardware is able to reproduce at any single time
+musical_tone_t tones[AUDIO_TONE_STACKSIZE]; // stack of currently active tones
-bool playing_melody = false; // playing a SONG?
-bool playing_note = false; // or (possibly multiple simultaneous) tones
-bool state_changed = false; // global flag, which is set if anything changes with the active_tones
+bool playing_melody = false; // playing a SONG?
+bool playing_note = false; // or (possibly multiple simultaneous) tones
+bool state_changed = false; // global flag, which is set if anything changes with the active_tones
// melody/SONG related state variables
-float (*notes_pointer)[][2]; // SONG, an array of MUSICAL_NOTEs
-uint16_t notes_count; // length of the notes_pointer array
-bool notes_repeat; // PLAY_SONG or PLAY_LOOP?
-uint16_t melody_current_note_duration = 0; // duration of the currently playing note from the active melody, in ms
-uint8_t note_tempo = TEMPO_DEFAULT; // beats-per-minute
-uint16_t current_note = 0; // index into the array at notes_pointer
-bool note_resting = false; // if a short pause was introduced between two notes with the same frequency while playing a melody
+float (*notes_pointer)[][2]; // SONG, an array of MUSICAL_NOTEs
+uint16_t notes_count; // length of the notes_pointer array
+bool notes_repeat; // PLAY_SONG or PLAY_LOOP?
+uint16_t melody_current_note_duration = 0; // duration of the currently playing note from the active melody, in ms
+uint8_t note_tempo = TEMPO_DEFAULT; // beats-per-minute
+uint16_t current_note = 0; // index into the array at notes_pointer
+bool note_resting = false; // if a short pause was introduced between two notes with the same frequency while playing a melody
uint16_t last_timestamp = 0;
#ifdef AUDIO_ENABLE_TONE_MULTIPLEXING
@@ -86,7 +86,7 @@ uint16_t last_timestamp = 0;
# define AUDIO_MAX_SIMULTANEOUS_TONES 3
# endif
uint16_t tone_multiplexing_rate = AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT;
-uint8_t tone_multiplexing_index_shift = 0; // offset used on active-tone array access
+uint8_t tone_multiplexing_index_shift = 0; // offset used on active-tone array access
#endif
// provided and used by voices.c
@@ -123,12 +123,12 @@ void audio_init() {
eeconfig_init();
}
audio_config.raw = eeconfig_read_audio();
-#else // EEPROM settings
+#else // EEPROM settings
audio_config.enable = true;
# ifdef AUDIO_CLICKY_ON
audio_config.clicky_enable = true;
# endif
-#endif // EEPROM settings
+#endif // EEPROM settings
for (uint8_t i = 0; i < AUDIO_TONE_STACKSIZE; i++) {
tones[i] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
@@ -160,6 +160,8 @@ void audio_toggle(void) {
eeconfig_update_audio(audio_config.raw);
if (audio_config.enable) {
audio_on_user();
+ } else {
+ audio_off_user();
}
}
@@ -172,13 +174,16 @@ void audio_on(void) {
void audio_off(void) {
PLAY_SONG(audio_off_song);
+ audio_off_user();
wait_ms(100);
audio_stop_all();
audio_config.enable = 0;
eeconfig_update_audio(audio_config.raw);
}
-bool audio_is_on(void) { return (audio_config.enable != 0); }
+bool audio_is_on(void) {
+ return (audio_config.enable != 0);
+}
void audio_stop_all() {
if (audio_driver_stopped) {
@@ -265,7 +270,7 @@ void audio_play_note(float pitch, uint16_t duration) {
tones[j] = tones[j + 1];
tones[j + 1] = (musical_tone_t){.time_started = timer_read(), .pitch = pitch, .duration = duration};
}
- return; // since this frequency played already, the hardware was already started
+ return; // since this frequency played already, the hardware was already started
}
}
@@ -283,7 +288,7 @@ void audio_play_note(float pitch, uint16_t duration) {
tones[active_tones - 1] = (musical_tone_t){.time_started = timer_read(), .pitch = pitch, .duration = duration};
// TODO: needs to be handled per note/tone -> use its timestamp instead?
- voices_timer = timer_read(); // reset to zero, for the effects added by voices.c
+ voices_timer = timer_read(); // reset to zero, for the effects added by voices.c
if (audio_driver_stopped) {
audio_driver_start();
@@ -291,7 +296,9 @@ void audio_play_note(float pitch, uint16_t duration) {
}
}
-void audio_play_tone(float pitch) { audio_play_note(pitch, 0xffff); }
+void audio_play_tone(float pitch) {
+ audio_play_note(pitch, 0xffff);
+}
void audio_play_melody(float (*np)[][2], uint16_t n_count, bool n_repeat) {
if (!audio_config.enable) {
@@ -313,7 +320,7 @@ void audio_play_melody(float (*np)[][2], uint16_t n_count, bool n_repeat) {
notes_count = n_count;
notes_repeat = n_repeat;
- current_note = 0; // note in the melody-array/list at note_pointer
+ current_note = 0; // note in the melody-array/list at note_pointer
// start first note manually, which also starts the audio_driver
// all following/remaining notes are played by 'audio_update_state'
@@ -344,11 +351,17 @@ void audio_play_click(uint16_t delay, float pitch, uint16_t duration) {
}
}
-bool audio_is_playing_note(void) { return playing_note; }
+bool audio_is_playing_note(void) {
+ return playing_note;
+}
-bool audio_is_playing_melody(void) { return playing_melody; }
+bool audio_is_playing_melody(void) {
+ return playing_melody;
+}
-uint8_t audio_get_number_of_active_tones(void) { return active_tones; }
+uint8_t audio_get_number_of_active_tones(void) {
+ return active_tones;
+}
float audio_get_frequency(uint8_t tone_index) {
if (tone_index >= active_tones) {
@@ -367,7 +380,7 @@ float audio_get_processed_frequency(uint8_t tone_index) {
#ifdef AUDIO_ENABLE_TONE_MULTIPLEXING
index = index - tone_multiplexing_index_shift;
- if (index < 0) // wrap around
+ if (index < 0) // wrap around
index += active_tones;
#endif
@@ -393,7 +406,7 @@ bool audio_update_state(void) {
last_timestamp = current_time;
uint16_t previous_note = current_note;
current_note++;
- voices_timer = timer_read(); // reset to zero, for the effects added by voices.c
+ voices_timer = timer_read(); // reset to zero, for the effects added by voices.c
if (current_note >= notes_count) {
if (notes_repeat) {
@@ -463,11 +476,11 @@ bool audio_update_state(void) {
// housekeeping: stop notes that have no playtime left
for (int i = 0; i < active_tones; i++) {
- if ((tones[i].duration != 0xffff) // indefinitely playing notes, started by 'audio_play_tone'
- && (tones[i].duration != 0) // 'uninitialized'
+ if ((tones[i].duration != 0xffff) // indefinitely playing notes, started by 'audio_play_tone'
+ && (tones[i].duration != 0) // 'uninitialized'
) {
if (timer_elapsed(tones[i].time_started) >= tones[i].duration) {
- audio_stop_tone(tones[i].pitch); // also sets 'state_changed=true'
+ audio_stop_tone(tones[i].pitch); // also sets 'state_changed=true'
}
}
}
@@ -484,9 +497,15 @@ bool audio_update_state(void) {
// Tone-multiplexing functions
#ifdef AUDIO_ENABLE_TONE_MULTIPLEXING
-void audio_set_tone_multiplexing_rate(uint16_t rate) { tone_multiplexing_rate = rate; }
-void audio_enable_tone_multiplexing(void) { tone_multiplexing_rate = AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT; }
-void audio_disable_tone_multiplexing(void) { tone_multiplexing_rate = 0; }
+void audio_set_tone_multiplexing_rate(uint16_t rate) {
+ tone_multiplexing_rate = rate;
+}
+void audio_enable_tone_multiplexing(void) {
+ tone_multiplexing_rate = AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT;
+}
+void audio_disable_tone_multiplexing(void) {
+ tone_multiplexing_rate = 0;
+}
void audio_increase_tone_multiplexing_rate(uint16_t change) {
if ((0xffff - change) > tone_multiplexing_rate) {
tone_multiplexing_rate += change;
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
index 290d461f5a..fe23cf3ed1 100644
--- a/quantum/audio/audio.h
+++ b/quantum/audio/audio.h
@@ -54,9 +54,9 @@ typedef union {
* "A musical tone is characterized by its duration, pitch, intensity (or loudness), and timbre (or quality)"
*/
typedef struct {
- uint16_t time_started; // timestamp the tone/note was started, system time runs with 1ms resolution -> 16bit timer overflows every ~64 seconds, long enough under normal circumstances; but might be too soon for long-duration notes when the note_tempo is set to a very low value
- float pitch; // aka frequency, in Hz
- uint16_t duration; // in ms, converted from the musical_notes.h unit which has 64parts to a beat, factoring in the current tempo in beats-per-minute
+ uint16_t time_started; // timestamp the tone/note was started, system time runs with 1ms resolution -> 16bit timer overflows every ~64 seconds, long enough under normal circumstances; but might be too soon for long-duration notes when the note_tempo is set to a very low value
+ float pitch; // aka frequency, in Hz
+ uint16_t duration; // in ms, converted from the musical_notes.h unit which has 64parts to a beat, factoring in the current tempo in beats-per-minute
// float intensity; // aka volume [0,1] TODO: not used at the moment; pwm drivers can't handle it
// uint8_t timbre; // range: [0,100] TODO: this currently kept track of globally, should we do this per tone instead?
} musical_tone_t;
diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h
index 8e80a016aa..3e425abb47 100644
--- a/quantum/audio/song_list.h
+++ b/quantum/audio/song_list.h
@@ -22,7 +22,7 @@
#if __has_include("user_song_list.h")
# include "user_song_list.h"
-#endif // if file exists
+#endif // if file exists
#define NO_SOUND
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c
index 8988d827e9..1c08a3af36 100644
--- a/quantum/audio/voices.c
+++ b/quantum/audio/voices.c
@@ -32,11 +32,17 @@ voice_type voice = AUDIO_VOICE_DEFAULT;
voice_type voice = default_voice;
#endif
-void set_voice(voice_type v) { voice = v; }
+void set_voice(voice_type v) {
+ voice = v;
+}
-void voice_iterate() { voice = (voice + 1) % number_of_voices; }
+void voice_iterate() {
+ voice = (voice + 1) % number_of_voices;
+}
-void voice_deiterate() { voice = (voice - 1 + number_of_voices) % number_of_voices; }
+void voice_deiterate() {
+ voice = (voice - 1 + number_of_voices) % number_of_voices;
+}
#ifdef AUDIO_VOICES
float mod(float a, int b) {
@@ -67,8 +73,8 @@ float voice_envelope(float frequency) {
// envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz
// __attribute__((unused)) uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency));
#ifdef AUDIO_VOICES
- uint16_t envelope_index = timer_elapsed(voices_timer); // TODO: multiply in some factor?
- uint16_t compensated_index = envelope_index / 100; // TODO: correct factor would be?
+ uint16_t envelope_index = timer_elapsed(voices_timer); // TODO: multiply in some factor?
+ uint16_t compensated_index = envelope_index / 100; // TODO: correct factor would be?
#endif
switch (voice) {
@@ -303,7 +309,7 @@ float voice_envelope(float frequency) {
// note_timbre = TIMBRE_25;
// break;
-#endif // AUDIO_VOICES
+#endif // AUDIO_VOICES
default:
break;
@@ -318,19 +324,31 @@ float voice_envelope(float frequency) {
// TODO: where to keep track of the start-frequency?
// frequency = voice_add_glissando(??, frequency);
}
-#endif // AUDIO_VOICES
+#endif // AUDIO_VOICES
return frequency;
}
// Vibrato functions
-void voice_set_vibrato_rate(float rate) { vibrato_rate = rate; }
-void voice_increase_vibrato_rate(float change) { vibrato_rate *= change; }
-void voice_decrease_vibrato_rate(float change) { vibrato_rate /= change; }
-void voice_set_vibrato_strength(float strength) { vibrato_strength = strength; }
-void voice_increase_vibrato_strength(float change) { vibrato_strength *= change; }
-void voice_decrease_vibrato_strength(float change) { vibrato_strength /= change; }
+void voice_set_vibrato_rate(float rate) {
+ vibrato_rate = rate;
+}
+void voice_increase_vibrato_rate(float change) {
+ vibrato_rate *= change;
+}
+void voice_decrease_vibrato_rate(float change) {
+ vibrato_rate /= change;
+}
+void voice_set_vibrato_strength(float strength) {
+ vibrato_strength = strength;
+}
+void voice_increase_vibrato_strength(float change) {
+ vibrato_strength *= change;
+}
+void voice_decrease_vibrato_strength(float change) {
+ vibrato_strength /= change;
+}
// Timbre functions
@@ -339,4 +357,6 @@ void voice_set_timbre(uint8_t timbre) {
note_timbre = timbre;
}
}
-uint8_t voice_get_timbre(void) { return note_timbre; }
+uint8_t voice_get_timbre(void) {
+ return note_timbre;
+}
diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h
index 1f402e7e12..fcab9db556 100644
--- a/quantum/audio/voices.h
+++ b/quantum/audio/voices.h
@@ -40,7 +40,7 @@ typedef enum {
// duty_third_down,
// duty_fifth_third_down,
#endif
- number_of_voices // important that this is last
+ number_of_voices // important that this is last
} voice_type;
void set_voice(voice_type v);
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index dfb98419e6..52ec086bb0 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -95,10 +95,10 @@ void backlight_toggle(void) {
* FIXME: needs doc
*/
void backlight_enable(void) {
- if (backlight_config.enable) return; // do nothing if backlight is already on
+ if (backlight_config.enable) return; // do nothing if backlight is already on
backlight_config.enable = true;
- if (backlight_config.raw == 1) // enabled but level == 0
+ if (backlight_config.raw == 1) // enabled but level == 0
backlight_config.level = 1;
eeconfig_update_backlight(backlight_config.raw);
dprintf("backlight enable\n");
@@ -110,7 +110,7 @@ void backlight_enable(void) {
* FIXME: needs doc
*/
void backlight_disable(void) {
- if (!backlight_config.enable) return; // do nothing if backlight is already off
+ if (!backlight_config.enable) return; // do nothing if backlight is already off
backlight_config.enable = false;
eeconfig_update_backlight(backlight_config.raw);
@@ -122,7 +122,9 @@ void backlight_disable(void) {
*
* FIXME: needs doc
*/
-bool is_backlight_enabled(void) { return backlight_config.enable; }
+bool is_backlight_enabled(void) {
+ return backlight_config.enable;
+}
/** \brief Backlight step through levels
*
@@ -158,11 +160,17 @@ void backlight_level(uint8_t level) {
eeconfig_update_backlight(backlight_config.raw);
}
-uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
+uint8_t eeconfig_read_backlight(void) {
+ return eeprom_read_byte(EECONFIG_BACKLIGHT);
+}
-void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); }
+void eeconfig_update_backlight(uint8_t val) {
+ eeprom_update_byte(EECONFIG_BACKLIGHT, val);
+}
-void eeconfig_update_backlight_current(void) { eeconfig_update_backlight(backlight_config.raw); }
+void eeconfig_update_backlight_current(void) {
+ eeconfig_update_backlight(backlight_config.raw);
+}
void eeconfig_update_backlight_default(void) {
backlight_config.enable = 1;
@@ -179,7 +187,9 @@ void eeconfig_update_backlight_default(void) {
*
* FIXME: needs doc
*/
-uint8_t get_backlight_level(void) { return backlight_config.level; }
+uint8_t get_backlight_level(void) {
+ return backlight_config.level;
+}
#ifdef BACKLIGHT_BREATHING
/** \brief Backlight breathing toggle
@@ -200,7 +210,7 @@ void backlight_toggle_breathing(void) {
* FIXME: needs doc
*/
void backlight_enable_breathing(void) {
- if (backlight_config.breathing) return; // do nothing if breathing is already on
+ if (backlight_config.breathing) return; // do nothing if breathing is already on
backlight_config.breathing = true;
eeconfig_update_backlight(backlight_config.raw);
@@ -213,7 +223,7 @@ void backlight_enable_breathing(void) {
* FIXME: needs doc
*/
void backlight_disable_breathing(void) {
- if (!backlight_config.breathing) return; // do nothing if breathing is already off
+ if (!backlight_config.breathing) return; // do nothing if breathing is already off
backlight_config.breathing = false;
eeconfig_update_backlight(backlight_config.raw);
@@ -225,18 +235,30 @@ void backlight_disable_breathing(void) {
*
* FIXME: needs doc
*/
-bool is_backlight_breathing(void) { return backlight_config.breathing; }
+bool is_backlight_breathing(void) {
+ return backlight_config.breathing;
+}
// following are marked as weak purely for backwards compatibility
-__attribute__((weak)) void breathing_period_set(uint8_t value) { breathing_period = value ? value : 1; }
+__attribute__((weak)) void breathing_period_set(uint8_t value) {
+ breathing_period = value ? value : 1;
+}
-__attribute__((weak)) uint8_t get_breathing_period(void) { return breathing_period; }
+__attribute__((weak)) uint8_t get_breathing_period(void) {
+ return breathing_period;
+}
-__attribute__((weak)) void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
+__attribute__((weak)) void breathing_period_default(void) {
+ breathing_period_set(BREATHING_PERIOD);
+}
-__attribute__((weak)) void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
+__attribute__((weak)) void breathing_period_inc(void) {
+ breathing_period_set(breathing_period + 1);
+}
-__attribute__((weak)) void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
+__attribute__((weak)) void breathing_period_dec(void) {
+ breathing_period_set(breathing_period - 1);
+}
__attribute__((weak)) void breathing_toggle(void) {
if (is_breathing())
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
index c30c70fd62..ff9c8de420 100644
--- a/quantum/backlight/backlight.h
+++ b/quantum/backlight/backlight.h
@@ -39,7 +39,7 @@ typedef union {
struct {
bool enable : 1;
bool breathing : 1;
- uint8_t reserved : 1; // Reserved for possible future backlight modes
+ uint8_t reserved : 1; // Reserved for possible future backlight modes
uint8_t level : 5;
};
} backlight_config_t;
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index 9c972ae02e..f3a0252270 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -136,7 +136,7 @@
# define TCCRxB TCCR1B
# define TIMERx_COMPA_vect TIMER1_COMPA_vect
# define TIMERx_OVF_vect TIMER1_OVF_vect
-# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
+# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
# define TIMSKx TIMSK
# else
# define TIMSKx TIMSK1
@@ -166,7 +166,7 @@ error("Please set 'BACKLIGHT_DRIVER = custom' within rules.mk")
error("Please set 'BACKLIGHT_DRIVER = software' within rules.mk")
#endif
-#ifndef BACKLIGHT_PWM_TIMER // pwm through software
+#ifndef BACKLIGHT_PWM_TIMER // pwm through software
static inline void enable_pwm(void) {
# if BACKLIGHT_ON_STATE == 1
@@ -203,7 +203,9 @@ static inline void disable_pwm(void) {
// or F_CPU/BACKLIGHT_CUSTOM_RESOLUTION if used.
// Triggered when the counter reaches the OCRx value
-ISR(TIMERx_COMPA_vect) { backlight_pins_off(); }
+ISR(TIMERx_COMPA_vect) {
+ backlight_pins_off();
+}
// Triggered when the counter reaches the TOP value
// this one triggers at F_CPU/ICRx = 16MHz/65536 =~ 244 Hz
@@ -232,15 +234,15 @@ ISR(TIMERx_OVF_vect) {
// See http://jared.geek.nz/2013/feb/linear-led-pwm
static uint16_t cie_lightness(uint16_t v) {
- if (v <= (uint32_t)ICRx / 12) // If the value is less than or equal to ~8% of max
+ if (v <= (uint32_t)ICRx / 12) // If the value is less than or equal to ~8% of max
{
- return v / 9; // Same as dividing by 900%
+ return v / 9; // Same as dividing by 900%
} else {
// In the next two lines values are bit-shifted. This is to avoid loosing decimals in integer math.
- uint32_t y = (((uint32_t)v + (uint32_t)ICRx / 6) << 5) / ((uint32_t)ICRx / 6 + ICRx); // If above 8%, add ~16% of max, and normalize with (max + ~16% max)
- uint32_t out = (y * y * y * ICRx) >> 15; // Cube it and undo the bit-shifting. (which is now three times as much due to the cubing)
+ uint32_t y = (((uint32_t)v + (uint32_t)ICRx / 6) << 5) / ((uint32_t)ICRx / 6 + ICRx); // If above 8%, add ~16% of max, and normalize with (max + ~16% max)
+ uint32_t out = (y * y * y * ICRx) >> 15; // Cube it and undo the bit-shifting. (which is now three times as much due to the cubing)
- if (out > ICRx) // Avoid overflows
+ if (out > ICRx) // Avoid overflows
{
out = ICRx;
}
@@ -249,10 +251,14 @@ static uint16_t cie_lightness(uint16_t v) {
}
// rescale the supplied backlight value to be in terms of the value limit // range for val is [0..ICRx]. PWM pin is high while the timer count is below val.
-static uint32_t rescale_limit_val(uint32_t val) { return (val * (BACKLIGHT_LIMIT_VAL + 1)) / 256; }
+static uint32_t rescale_limit_val(uint32_t val) {
+ return (val * (BACKLIGHT_LIMIT_VAL + 1)) / 256;
+}
// range for val is [0..ICRx]. PWM pin is high while the timer count is below val.
-static inline void set_pwm(uint16_t val) { OCRxx = val; }
+static inline void set_pwm(uint16_t val) {
+ OCRxx = val;
+}
void backlight_set(uint8_t level) {
if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS;
@@ -303,7 +309,9 @@ static uint16_t breathing_freq_scale_factor = 2;
# ifdef BACKLIGHT_PWM_TIMER
static bool breathing = false;
-bool is_breathing(void) { return breathing; }
+bool is_breathing(void) {
+ return breathing;
+}
# define breathing_interrupt_enable() \
do { \
@@ -315,7 +323,9 @@ bool is_breathing(void) { return breathing; }
} while (0)
# else
-bool is_breathing(void) { return !!(TIMSKx & _BV(TOIEx)); }
+bool is_breathing(void) {
+ return !!(TIMSKx & _BV(TOIEx));
+}
# define breathing_interrupt_enable() \
do { \
@@ -370,7 +380,9 @@ void breathing_self_disable(void) {
static const uint8_t breathing_table[BREATHING_STEPS] PROGMEM = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS * get_backlight_level(); }
+static inline uint16_t scale_backlight(uint16_t v) {
+ return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
# ifdef BACKLIGHT_PWM_TIMER
void breathing_task(void)
@@ -403,7 +415,7 @@ ISR(TIMERx_OVF_vect)
set_pwm(cie_lightness(rescale_limit_val(scale_backlight((uint16_t)pgm_read_byte(&breathing_table[index]) * ICRx / 255))));
}
-#endif // BACKLIGHT_BREATHING
+#endif // BACKLIGHT_BREATHING
void backlight_init_ports(void) {
// Setup backlight pin as output and output to on state.
@@ -415,10 +427,10 @@ void backlight_init_ports(void) {
#ifdef BACKLIGHT_PWM_TIMER
// TimerX setup, Fast PWM mode count to TOP set in ICRx
- TCCRxA = _BV(WGM11); // = 0b00000010;
+ TCCRxA = _BV(WGM11); // = 0b00000010;
// clock select clk/1
- TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
-#else // hardware PWM
+ TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+#else // hardware PWM
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
@@ -430,8 +442,8 @@ void backlight_init_ports(void) {
"In fast PWM mode, the compare units allow generation of PWM waveforms on the OCnx pins. Setting the COMnx1:0 bits to two will produce a non-inverted PWM [..]."
"In fast PWM mode the counter is incremented until the counter value matches either one of the fixed values 0x00FF, 0x01FF, or 0x03FF (WGMn3:0 = 5, 6, or 7), the value in ICRn (WGMn3:0 = 14), or the value in OCRnA (WGMn3:0 = 15)."
*/
- TCCRxA = _BV(COMxx1) | _BV(WGM11); // = 0b00001010;
- TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+ TCCRxA = _BV(COMxx1) | _BV(WGM11); // = 0b00001010;
+ TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
#endif
#ifdef BACKLIGHT_CUSTOM_RESOLUTION
diff --git a/quantum/backlight/backlight_chibios.c b/quantum/backlight/backlight_chibios.c
index 7c6edd10d6..e8f9e70f78 100644
--- a/quantum/backlight/backlight_chibios.c
+++ b/quantum/backlight/backlight_chibios.c
@@ -53,14 +53,14 @@ static PWMConfig pwmCFG = {0xFFFF, /* PWM clock frequency */
// See http://jared.geek.nz/2013/feb/linear-led-pwm
static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
+ if (v <= 5243) // if below 8% of max
+ return v / 9; // same as dividing by 900%
else {
- uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+ uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
// to get a useful result with integer division, we shift left in the expression above
// and revert what we've done again after squaring.
y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
+ if (y > 0xFFFFUL) // prevent overflow
return 0xFFFFU;
else
return (uint16_t)y;
@@ -117,7 +117,9 @@ static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0,
void breathing_callback(PWMDriver *pwmp);
-bool is_breathing(void) { return pwmCFG.callback != NULL; }
+bool is_breathing(void) {
+ return pwmCFG.callback != NULL;
+}
void breathing_enable(void) {
pwmCFG.callback = breathing_callback;
@@ -133,7 +135,9 @@ void breathing_disable(void) {
}
// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS * get_backlight_level(); }
+static inline uint16_t scale_backlight(uint16_t v) {
+ return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
void breathing_callback(PWMDriver *pwmp) {
uint8_t breathing_period = get_breathing_period();
diff --git a/quantum/backlight/backlight_driver_common.c b/quantum/backlight/backlight_driver_common.c
index 270a43c67e..e4c2e90b5f 100644
--- a/quantum/backlight/backlight_driver_common.c
+++ b/quantum/backlight/backlight_driver_common.c
@@ -44,6 +44,10 @@ void backlight_pins_init(void) {
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_off(backlight_pin);)
}
-void backlight_pins_on(void) { FOR_EACH_LED(backlight_on(backlight_pin);) }
+void backlight_pins_on(void) {
+ FOR_EACH_LED(backlight_on(backlight_pin);)
+}
-void backlight_pins_off(void) { FOR_EACH_LED(backlight_off(backlight_pin);) }
+void backlight_pins_off(void) {
+ FOR_EACH_LED(backlight_off(backlight_pin);)
+}
diff --git a/quantum/backlight/backlight_software.c b/quantum/backlight/backlight_software.c
index 709304f559..3d412cab52 100644
--- a/quantum/backlight/backlight_software.c
+++ b/quantum/backlight/backlight_software.c
@@ -30,11 +30,17 @@ static const uint16_t backlight_duty_table[] = {
// clang-format on
-static uint8_t scale_backlight(uint8_t v) { return v * (backlight_duty_table_size - 1) / BACKLIGHT_LEVELS; }
+static uint8_t scale_backlight(uint8_t v) {
+ return v * (backlight_duty_table_size - 1) / BACKLIGHT_LEVELS;
+}
-void backlight_init_ports(void) { backlight_pins_init(); }
+void backlight_init_ports(void) {
+ backlight_pins_init();
+}
-void backlight_set(uint8_t level) { s_duty_pattern = backlight_duty_table[scale_backlight(level)]; }
+void backlight_set(uint8_t level) {
+ s_duty_pattern = backlight_duty_table[scale_backlight(level)];
+}
void backlight_task(void) {
static uint8_t backlight_tick = 0;
diff --git a/quantum/backlight/backlight_timer.c b/quantum/backlight/backlight_timer.c
index c32c35c154..82fb6a6a83 100644
--- a/quantum/backlight/backlight_timer.c
+++ b/quantum/backlight/backlight_timer.c
@@ -14,14 +14,14 @@ static uint16_t backlight_timer_get_duty(void);
// See http://jared.geek.nz/2013/feb/linear-led-pwm
static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
+ if (v <= 5243) // if below 8% of max
+ return v / 9; // same as dividing by 900%
else {
- uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+ uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
// to get a useful result with integer division, we shift left in the expression above
// and revert what we've done again after squaring.
y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
+ if (y > 0xFFFFUL) // prevent overflow
return 0xFFFFU;
else
return (uint16_t)y;
@@ -61,7 +61,9 @@ static void backlight_timer_top(void) {
}
}
-static void backlight_timer_cmp(void) { backlight_pins_off(); }
+static void backlight_timer_cmp(void) {
+ backlight_pins_off();
+}
void backlight_task(void) {}
@@ -77,7 +79,9 @@ static uint16_t breathing_counter = 0;
static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS * get_backlight_level(); }
+static inline uint16_t scale_backlight(uint16_t v) {
+ return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
void breathing_task(void) {
uint8_t breathing_period = get_breathing_period();
@@ -91,13 +95,17 @@ void breathing_task(void) {
backlight_timer_set_duty(cie_lightness(scale_backlight((uint16_t)breathing_table[index] * 256)));
}
-bool is_breathing(void) { return breathing; }
+bool is_breathing(void) {
+ return breathing;
+}
void breathing_enable(void) {
breathing_counter = 0;
breathing = true;
}
-void breathing_disable(void) { breathing = false; }
+void breathing_disable(void) {
+ breathing = false;
+}
void breathing_pulse(void) {
backlight_set(is_backlight_enabled() ? 0 : BACKLIGHT_LEVELS);
@@ -140,8 +148,12 @@ static void timerCallback(void) {
}
}
-static void backlight_timer_set_duty(uint16_t duty) { s_duty = duty; }
-static uint16_t backlight_timer_get_duty(void) { return s_duty; }
+static void backlight_timer_set_duty(uint16_t duty) {
+ s_duty = duty;
+}
+static uint16_t backlight_timer_get_duty(void) {
+ return s_duty;
+}
// ChibiOS - Map GPT timer onto Software PWM
static void gptTimerCallback(GPTDriver *gptp) {
diff --git a/quantum/bitwise.c b/quantum/bitwise.c
index 861cca0054..1868e14932 100644
--- a/quantum/bitwise.c
+++ b/quantum/bitwise.c
@@ -20,7 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// bit population - return number of on-bit
__attribute__((noinline)) uint8_t bitpop(uint8_t bits) {
uint8_t c;
- for (c = 0; bits; c++) bits &= bits - 1;
+ for (c = 0; bits; c++)
+ bits &= bits - 1;
return c;
/*
const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
@@ -30,13 +31,15 @@ __attribute__((noinline)) uint8_t bitpop(uint8_t bits) {
uint8_t bitpop16(uint16_t bits) {
uint8_t c;
- for (c = 0; bits; c++) bits &= bits - 1;
+ for (c = 0; bits; c++)
+ bits &= bits - 1;
return c;
}
uint8_t bitpop32(uint32_t bits) {
uint8_t c;
- for (c = 0; bits; c++) bits &= bits - 1;
+ for (c = 0; bits; c++)
+ bits &= bits - 1;
return c;
}
diff --git a/quantum/bootmagic/bootmagic_lite.c b/quantum/bootmagic/bootmagic_lite.c
index 54bbf5a2ee..f63c71fc6b 100644
--- a/quantum/bootmagic/bootmagic_lite.c
+++ b/quantum/bootmagic/bootmagic_lite.c
@@ -19,7 +19,9 @@
*
* ...just incase someone wants to only change the eeprom behaviour
*/
-__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) { eeconfig_disable(); }
+__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) {
+ eeconfig_disable();
+}
/** \brief The lite version of TMK's bootmagic based on Wilba.
*
@@ -57,4 +59,6 @@ __attribute__((weak)) void bootmagic_lite(void) {
}
}
-void bootmagic(void) { bootmagic_lite(); }
+void bootmagic(void) {
+ bootmagic_lite();
+}
diff --git a/quantum/color.c b/quantum/color.c
index 1c5128e4a2..c80078dbf2 100644
--- a/quantum/color.c
+++ b/quantum/color.c
@@ -104,7 +104,9 @@ RGB hsv_to_rgb(HSV hsv) {
#endif
}
-RGB hsv_to_rgb_nocie(HSV hsv) { return hsv_to_rgb_impl(hsv, false); }
+RGB hsv_to_rgb_nocie(HSV hsv) {
+ return hsv_to_rgb_impl(hsv, false);
+}
#ifdef RGBW
# ifndef MIN
diff --git a/quantum/color.h b/quantum/color.h
index e2cfc46927..135ad623b5 100644
--- a/quantum/color.h
+++ b/quantum/color.h
@@ -60,7 +60,7 @@
#define HSV_GOLDENROD 30, 218, 218
#define HSV_GREEN 85, 255, 255
#define HSV_MAGENTA 213, 255, 255
-#define HSV_ORANGE 28, 255, 255
+#define HSV_ORANGE 21, 255, 255
#define HSV_PINK 234, 128, 255
#define HSV_PURPLE 191, 255, 255
#define HSV_RED 0, 255, 255
diff --git a/quantum/command.c b/quantum/command.c
index 6d56a25ea1..f90d73207c 100644
--- a/quantum/command.c
+++ b/quantum/command.c
@@ -446,7 +446,7 @@ static bool command_common(uint8_t code) {
// NKRO toggle
case MAGIC_KC(MAGIC_KEY_NKRO):
- clear_keyboard(); // clear to prevent stuck keys
+ clear_keyboard(); // clear to prevent stuck keys
keymap_config.nkro = !keymap_config.nkro;
if (keymap_config.nkro) {
print("NKRO: on\n");
diff --git a/quantum/debounce.h b/quantum/debounce.h
index 5043868289..3532d9cd7b 100644
--- a/quantum/debounce.h
+++ b/quantum/debounce.h
@@ -6,8 +6,6 @@
// changed is true if raw has changed since the last call
void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed);
-bool debounce_active(void);
-
void debounce_init(uint8_t num_rows);
void debounce_free(void);
diff --git a/quantum/debounce/asym_eager_defer_pk.c b/quantum/debounce/asym_eager_defer_pk.c
index 81f39383c4..b1eb4a2b7b 100644
--- a/quantum/debounce/asym_eager_defer_pk.c
+++ b/quantum/debounce/asym_eager_defer_pk.c
@@ -165,7 +165,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui
}
}
-bool debounce_active(void) { return true; }
#else
# include "none.c"
#endif
diff --git a/quantum/debounce/none.c b/quantum/debounce/none.c
index b03892bc5b..8a85cc04a8 100644
--- a/quantum/debounce/none.c
+++ b/quantum/debounce/none.c
@@ -26,6 +26,4 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool
}
}
-bool debounce_active(void) { return false; }
-
void debounce_free(void) {}
diff --git a/quantum/debounce/sym_defer_g.c b/quantum/debounce/sym_defer_g.c
index 9155eb914c..47450992a4 100644
--- a/quantum/debounce/sym_defer_g.c
+++ b/quantum/debounce/sym_defer_g.c
@@ -44,9 +44,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool
}
}
-bool debounce_active(void) { return debouncing; }
-
void debounce_free(void) {}
-#else // no debouncing.
+#else // no debouncing.
# include "none.c"
#endif
diff --git a/quantum/debounce/sym_defer_pk.c b/quantum/debounce/sym_defer_pk.c
index 1b698ba347..9dee29e28e 100644
--- a/quantum/debounce/sym_defer_pk.c
+++ b/quantum/debounce/sym_defer_pk.c
@@ -134,7 +134,6 @@ static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], u
}
}
-bool debounce_active(void) { return true; }
#else
# include "none.c"
#endif
diff --git a/quantum/debounce/sym_defer_pr.c b/quantum/debounce/sym_defer_pr.c
new file mode 100644
index 0000000000..ce24f0922f
--- /dev/null
+++ b/quantum/debounce/sym_defer_pr.c
@@ -0,0 +1,74 @@
+/*
+Copyright 2021 Chad Austin <chad@chadaustin.me>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+Symmetric per-row debounce algorithm. Changes only apply when
+DEBOUNCE milliseconds have elapsed since the last change.
+*/
+
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+#include <stdlib.h>
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+static uint16_t last_time;
+// [row] milliseconds until key's state is considered debounced.
+static uint8_t* countdowns;
+// [row]
+static matrix_row_t* last_raw;
+
+void debounce_init(uint8_t num_rows) {
+ countdowns = (uint8_t*)calloc(num_rows, sizeof(uint8_t));
+ last_raw = (matrix_row_t*)calloc(num_rows, sizeof(matrix_row_t));
+
+ last_time = timer_read();
+}
+
+void debounce_free(void) {
+ free(countdowns);
+ countdowns = NULL;
+ free(last_raw);
+ last_raw = NULL;
+}
+
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) {
+ uint16_t now = timer_read();
+ uint16_t elapsed16 = TIMER_DIFF_16(now, last_time);
+ last_time = now;
+ uint8_t elapsed = (elapsed16 > 255) ? 255 : elapsed16;
+
+ uint8_t* countdown = countdowns;
+
+ for (uint8_t row = 0; row < num_rows; ++row, ++countdown) {
+ matrix_row_t raw_row = raw[row];
+
+ if (raw_row != last_raw[row]) {
+ *countdown = DEBOUNCE;
+ last_raw[row] = raw_row;
+ } else if (*countdown > elapsed) {
+ *countdown -= elapsed;
+ } else if (*countdown) {
+ cooked[row] = raw_row;
+ *countdown = 0;
+ }
+ }
+}
+
+bool debounce_active(void) {
+ return true;
+}
diff --git a/quantum/debounce/sym_eager_pk.c b/quantum/debounce/sym_eager_pk.c
index 9da000ea9a..fe3e88bb06 100644
--- a/quantum/debounce/sym_eager_pk.c
+++ b/quantum/debounce/sym_eager_pk.c
@@ -131,7 +131,7 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui
if (*debounce_pointer == DEBOUNCE_ELAPSED) {
*debounce_pointer = DEBOUNCE;
counters_need_update = true;
- existing_row ^= col_mask; // flip the bit.
+ existing_row ^= col_mask; // flip the bit.
}
}
debounce_pointer++;
@@ -140,7 +140,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui
}
}
-bool debounce_active(void) { return true; }
#else
# include "none.c"
#endif
diff --git a/quantum/debounce/sym_eager_pr.c b/quantum/debounce/sym_eager_pr.c
index eda92a263b..29b0cabefb 100644
--- a/quantum/debounce/sym_eager_pr.c
+++ b/quantum/debounce/sym_eager_pr.c
@@ -132,7 +132,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui
}
}
-bool debounce_active(void) { return true; }
#else
# include "none.c"
#endif
diff --git a/quantum/debounce/tests/debounce_test_common.cpp b/quantum/debounce/tests/debounce_test_common.cpp
index f9414e571d..0d5a7bb766 100644
--- a/quantum/debounce/tests/debounce_test_common.cpp
+++ b/quantum/debounce/tests/debounce_test_common.cpp
@@ -31,7 +31,9 @@ void set_time(uint32_t t);
void advance_time(uint32_t ms);
}
-void DebounceTest::addEvents(std::initializer_list<DebounceTestEvent> events) { events_.insert(events_.end(), events.begin(), events.end()); }
+void DebounceTest::addEvents(std::initializer_list<DebounceTestEvent> events) {
+ events_.insert(events_.end(), events.begin(), events.end());
+}
void DebounceTest::runEvents() {
/* Run the test multiple times, from 1kHz to 10kHz scan rate */
diff --git a/quantum/debounce/tests/rules.mk b/quantum/debounce/tests/rules.mk
index e908dd6f67..8318b1c668 100644
--- a/quantum/debounce/tests/rules.mk
+++ b/quantum/debounce/tests/rules.mk
@@ -28,6 +28,11 @@ debounce_sym_defer_pk_SRC := $(DEBOUNCE_COMMON_SRC) \
$(QUANTUM_PATH)/debounce/sym_defer_pk.c \
$(QUANTUM_PATH)/debounce/tests/sym_defer_pk_tests.cpp
+debounce_sym_defer_pr_DEFS := $(DEBOUNCE_COMMON_DEFS)
+debounce_sym_defer_pr_SRC := $(DEBOUNCE_COMMON_SRC) \
+ $(QUANTUM_PATH)/debounce/sym_defer_pr.c \
+ $(QUANTUM_PATH)/debounce/tests/sym_defer_pr_tests.cpp
+
debounce_sym_eager_pk_DEFS := $(DEBOUNCE_COMMON_DEFS)
debounce_sym_eager_pk_SRC := $(DEBOUNCE_COMMON_SRC) \
$(QUANTUM_PATH)/debounce/sym_eager_pk.c \
diff --git a/quantum/debounce/tests/sym_defer_pr_tests.cpp b/quantum/debounce/tests/sym_defer_pr_tests.cpp
new file mode 100644
index 0000000000..417e1f4ca2
--- /dev/null
+++ b/quantum/debounce/tests/sym_defer_pr_tests.cpp
@@ -0,0 +1,238 @@
+/* Copyright 2021 Simon Arlott
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gtest/gtest.h"
+
+#include "debounce_test_common.h"
+
+TEST_F(DebounceTest, OneKeyShort1) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}}},
+ /* 0ms delay (fast scan rate) */
+ {5, {{0, 1, UP}}, {}},
+
+ {10, {}, {{0, 1, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyShort2) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}}},
+ /* 1ms delay */
+ {6, {{0, 1, UP}}, {}},
+
+ {11, {}, {{0, 1, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyShort3) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}}},
+ /* 2ms delay */
+ {7, {{0, 1, UP}}, {}},
+
+ {12, {}, {{0, 1, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyTooQuick1) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+ /* Release key exactly on the debounce time */
+ {5, {{0, 1, UP}}, {}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyTooQuick2) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}}},
+ {6, {{0, 1, UP}}, {}},
+
+ /* Press key exactly on the debounce time */
+ {11, {{0, 1, DOWN}}, {}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyBouncing1) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+ {1, {{0, 1, UP}}, {}},
+ {2, {{0, 1, DOWN}}, {}},
+ {3, {{0, 1, UP}}, {}},
+ {4, {{0, 1, DOWN}}, {}},
+ {5, {{0, 1, UP}}, {}},
+ {6, {{0, 1, DOWN}}, {}},
+ {11, {}, {{0, 1, DOWN}}}, /* 5ms after DOWN at time 7 */
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyBouncing2) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+ {5, {}, {{0, 1, DOWN}}},
+ {6, {{0, 1, UP}}, {}},
+ {7, {{0, 1, DOWN}}, {}},
+ {8, {{0, 1, UP}}, {}},
+ {9, {{0, 1, DOWN}}, {}},
+ {10, {{0, 1, UP}}, {}},
+ {15, {}, {{0, 1, UP}}}, /* 5ms after UP at time 10 */
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyLong) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}}},
+
+ {25, {{0, 1, UP}}, {}},
+
+ {30, {}, {{0, 1, UP}}},
+
+ {50, {{0, 1, DOWN}}, {}},
+
+ {55, {}, {{0, 1, DOWN}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, TwoKeysShort) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+ {1, {{0, 2, DOWN}}, {}},
+
+ {6, {}, {{0, 1, DOWN}, {0, 2, DOWN}}},
+
+ {7, {{0, 1, UP}}, {}},
+ {8, {{0, 2, UP}}, {}},
+
+ {13, {}, {{0, 1, UP}, {0, 2, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, TwoKeysSimultaneous1) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {}},
+
+ {5, {}, {{0, 1, DOWN}, {0, 2, DOWN}}},
+ {6, {{0, 1, UP}, {0, 2, UP}}, {}},
+
+ {11, {}, {{0, 1, UP}, {0, 2, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, TwoKeysSimultaneous2) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+ {1, {{0, 2, DOWN}}, {}},
+
+ {6, {}, {{0, 1, DOWN}, {0, 2, DOWN}}},
+ {7, {{0, 2, UP}}, {}},
+ {9, {{0, 1, UP}}, {}},
+
+ // Debouncing loses the specific ordering -- both events report simultaneously.
+ {14, {}, {{0, 1, UP}, {0, 2, UP}}},
+ });
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyDelayedScan1) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ /* Processing is very late */
+ {300, {}, {{0, 1, DOWN}}},
+ /* Immediately release key */
+ {300, {{0, 1, UP}}, {}},
+
+ {305, {}, {{0, 1, UP}}},
+ });
+ time_jumps_ = true;
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyDelayedScan2) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ /* Processing is very late */
+ {300, {}, {{0, 1, DOWN}}},
+ /* Release key after 1ms */
+ {301, {{0, 1, UP}}, {}},
+
+ {306, {}, {{0, 1, UP}}},
+ });
+ time_jumps_ = true;
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyDelayedScan3) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ /* Release key before debounce expires */
+ {300, {{0, 1, UP}}, {}},
+ });
+ time_jumps_ = true;
+ runEvents();
+}
+
+TEST_F(DebounceTest, OneKeyDelayedScan4) {
+ addEvents({
+ /* Time, Inputs, Outputs */
+ {0, {{0, 1, DOWN}}, {}},
+
+ /* Processing is a bit late */
+ {50, {}, {{0, 1, DOWN}}},
+ /* Release key after 1ms */
+ {51, {{0, 1, UP}}, {}},
+
+ {56, {}, {{0, 1, UP}}},
+ });
+ time_jumps_ = true;
+ runEvents();
+}
diff --git a/quantum/debounce/tests/testlist.mk b/quantum/debounce/tests/testlist.mk
index c54c45aa63..f7bd520698 100644
--- a/quantum/debounce/tests/testlist.mk
+++ b/quantum/debounce/tests/testlist.mk
@@ -1,6 +1,7 @@
TEST_LIST += \
debounce_sym_defer_g \
debounce_sym_defer_pk \
+ debounce_sym_defer_pr \
debounce_sym_eager_pk \
debounce_sym_eager_pr \
debounce_asym_eager_defer_pk
diff --git a/quantum/deferred_exec.c b/quantum/deferred_exec.c
index 5b0a5b1425..a0046a9648 100644
--- a/quantum/deferred_exec.c
+++ b/quantum/deferred_exec.c
@@ -9,32 +9,27 @@
# define MAX_DEFERRED_EXECUTORS 8
#endif
-typedef struct deferred_executor_t {
- deferred_token token;
- uint32_t trigger_time;
- deferred_exec_callback callback;
- void * cb_arg;
-} deferred_executor_t;
-
-static deferred_token current_token = 0;
-static uint32_t last_deferred_exec_check = 0;
-static deferred_executor_t executors[MAX_DEFERRED_EXECUTORS] = {0};
-
-static inline bool token_can_be_used(deferred_token token) {
+//------------------------------------
+// Helpers
+//
+
+static deferred_token current_token = 0;
+
+static inline bool token_can_be_used(deferred_executor_t *table, size_t table_count, deferred_token token) {
if (token == INVALID_DEFERRED_TOKEN) {
return false;
}
- for (int i = 0; i < MAX_DEFERRED_EXECUTORS; ++i) {
- if (executors[i].token == token) {
+ for (int i = 0; i < table_count; ++i) {
+ if (table[i].token == token) {
return false;
}
}
return true;
}
-static inline deferred_token allocate_token(void) {
+static inline deferred_token allocate_token(deferred_executor_t *table, size_t table_count) {
deferred_token first = ++current_token;
- while (!token_can_be_used(current_token)) {
+ while (!token_can_be_used(table, table_count, current_token)) {
++current_token;
if (current_token == first) {
// If we've looped back around to the first, everything is already allocated (yikes!). Need to exit with a failure.
@@ -44,18 +39,22 @@ static inline deferred_token allocate_token(void) {
return current_token;
}
-deferred_token defer_exec(uint32_t delay_ms, deferred_exec_callback callback, void *cb_arg) {
- // Ignore queueing if it's a zero-time delay, or invalid callback
- if (delay_ms == 0 || !callback) {
+//------------------------------------
+// Advanced API: used when a custom-allocated table is used, primarily for core code.
+//
+
+deferred_token defer_exec_advanced(deferred_executor_t *table, size_t table_count, uint32_t delay_ms, deferred_exec_callback callback, void *cb_arg) {
+ // Ignore queueing if the table isn't valid, it's a zero-time delay, or the token is not valid
+ if (!table || table_count == 0 || delay_ms == 0 || !callback) {
return INVALID_DEFERRED_TOKEN;
}
// Find an unused slot and claim it
- for (int i = 0; i < MAX_DEFERRED_EXECUTORS; ++i) {
- deferred_executor_t *entry = &executors[i];
+ for (int i = 0; i < table_count; ++i) {
+ deferred_executor_t *entry = &table[i];
if (entry->token == INVALID_DEFERRED_TOKEN) {
// Work out the new token value, dropping out if none were available
- deferred_token token = allocate_token();
+ deferred_token token = allocate_token(table, table_count);
if (token == INVALID_DEFERRED_TOKEN) {
return false;
}
@@ -73,15 +72,15 @@ deferred_token defer_exec(uint32_t delay_ms, deferred_exec_callback callback, vo
return INVALID_DEFERRED_TOKEN;
}
-bool extend_deferred_exec(deferred_token token, uint32_t delay_ms) {
- // Ignore queueing if it's a zero-time delay, or the token is not valid
- if (delay_ms == 0 || token == INVALID_DEFERRED_TOKEN) {
+bool extend_deferred_exec_advanced(deferred_executor_t *table, size_t table_count, deferred_token token, uint32_t delay_ms) {
+ // Ignore queueing if the table isn't valid, it's a zero-time delay, or the token is not valid
+ if (!table || table_count == 0 || delay_ms == 0 || token == INVALID_DEFERRED_TOKEN) {
return false;
}
// Find the entry corresponding to the token
- for (int i = 0; i < MAX_DEFERRED_EXECUTORS; ++i) {
- deferred_executor_t *entry = &executors[i];
+ for (int i = 0; i < table_count; ++i) {
+ deferred_executor_t *entry = &table[i];
if (entry->token == token) {
// Found it, extend the delay
entry->trigger_time = timer_read32() + delay_ms;
@@ -93,15 +92,15 @@ bool extend_deferred_exec(deferred_token token, uint32_t delay_ms) {
return false;
}
-bool cancel_deferred_exec(deferred_token token) {
- // Ignore request if the token is not valid
- if (token == INVALID_DEFERRED_TOKEN) {
+bool cancel_deferred_exec_advanced(deferred_executor_t *table, size_t table_count, deferred_token token) {
+ // Ignore request if the table/token are not valid
+ if (!table || table_count == 0 || token == INVALID_DEFERRED_TOKEN) {
return false;
}
// Find the entry corresponding to the token
- for (int i = 0; i < MAX_DEFERRED_EXECUTORS; ++i) {
- deferred_executor_t *entry = &executors[i];
+ for (int i = 0; i < table_count; ++i) {
+ deferred_executor_t *entry = &table[i];
if (entry->token == token) {
// Found it, cancel and clear the table entry
entry->token = INVALID_DEFERRED_TOKEN;
@@ -116,16 +115,16 @@ bool cancel_deferred_exec(deferred_token token) {
return false;
}
-void deferred_exec_task(void) {
+void deferred_exec_advanced_task(deferred_executor_t *table, size_t table_count, uint32_t *last_execution_time) {
uint32_t now = timer_read32();
// Throttle only once per millisecond
- if (((int32_t)TIMER_DIFF_32(now, last_deferred_exec_check)) > 0) {
- last_deferred_exec_check = now;
+ if (((int32_t)TIMER_DIFF_32(now, (*last_execution_time))) > 0) {
+ *last_execution_time = now;
// Run through each of the executors
- for (int i = 0; i < MAX_DEFERRED_EXECUTORS; ++i) {
- deferred_executor_t *entry = &executors[i];
+ for (int i = 0; i < table_count; ++i) {
+ deferred_executor_t *entry = &table[i];
// Check if we're supposed to execute this entry
if (entry->token != INVALID_DEFERRED_TOKEN && ((int32_t)TIMER_DIFF_32(entry->trigger_time, now)) <= 0) {
@@ -150,3 +149,23 @@ void deferred_exec_task(void) {
}
}
}
+
+//------------------------------------
+// Basic API: used by user-mode code, guaranteed to not collide with core deferred execution
+//
+
+static uint32_t last_deferred_exec_check = 0;
+static deferred_executor_t basic_executors[MAX_DEFERRED_EXECUTORS] = {0};
+
+deferred_token defer_exec(uint32_t delay_ms, deferred_exec_callback callback, void *cb_arg) {
+ return defer_exec_advanced(basic_executors, MAX_DEFERRED_EXECUTORS, delay_ms, callback, cb_arg);
+}
+bool extend_deferred_exec(deferred_token token, uint32_t delay_ms) {
+ return extend_deferred_exec_advanced(basic_executors, MAX_DEFERRED_EXECUTORS, token, delay_ms);
+}
+bool cancel_deferred_exec(deferred_token token) {
+ return cancel_deferred_exec_advanced(basic_executors, MAX_DEFERRED_EXECUTORS, token);
+}
+void deferred_exec_task(void) {
+ deferred_exec_advanced_task(basic_executors, MAX_DEFERRED_EXECUTORS, &last_deferred_exec_check);
+}
diff --git a/quantum/deferred_exec.h b/quantum/deferred_exec.h
index f80d353169..97ef0f6c0e 100644
--- a/quantum/deferred_exec.h
+++ b/quantum/deferred_exec.h
@@ -5,34 +5,117 @@
#include <stdbool.h>
#include <stdint.h>
+#include <stdlib.h>
-// A token that can be used to cancel an existing deferred execution.
+//------------------------------------
+// Common
+//------------------------------------
+
+/**
+ * @typedef A token that can be used to cancel or extend an existing deferred execution.
+ */
typedef uint8_t deferred_token;
+
+/**
+ * @def The constant used to denote an invalid deferred execution token.
+ */
#define INVALID_DEFERRED_TOKEN 0
-// Callback to execute.
-// -- Parameter trigger_time: the intended trigger time to execute the callback -- equivalent time-space as timer_read32()
-// cb_arg: the callback argument specified when enqueueing the deferred executor
-// -- Return value: Non-zero re-queues the callback to execute after the returned number of milliseconds. Zero cancels repeated execution.
+/**
+ * @typedef Callback to execute.
+ * @param trigger_time[in] the intended trigger time to execute the callback -- equivalent time-space as timer_read32()
+ * @param cb_arg[in] the callback argument specified when enqueueing the deferred executor
+ * @return non-zero re-queues the callback to execute after the returned number of milliseconds. Zero cancels repeated execution.
+ */
typedef uint32_t (*deferred_exec_callback)(uint32_t trigger_time, void *cb_arg);
-// Configures the supplied deferred executor to be executed after the required number of milliseconds.
-// -- Parameter delay_ms: the number of milliseconds before executing the callback
-// -- callback: the executor to invoke
-// -- cb_arg: the argument to pass to the executor, may be NULL if unused by the executor
-// -- Return value: a token usable for cancellation, or INVALID_DEFERRED_TOKEN if an error occurred
+//------------------------------------
+// Basic API: used by user-mode code, guaranteed to not collide with core deferred execution
+//------------------------------------
+
+/**
+ * Configures the supplied deferred executor to be executed after the required number of milliseconds.
+ *
+ * @param delay_ms[in] the number of milliseconds before executing the callback
+ * @param callback[in] the executor to invoke
+ * @param cb_arg[in] the argument to pass to the executor, may be NULL if unused by the executor
+ * @return a token usable for extension/cancellation, or INVALID_DEFERRED_TOKEN if an error occurred
+ */
deferred_token defer_exec(uint32_t delay_ms, deferred_exec_callback callback, void *cb_arg);
-// Allows for extending the timeframe before an existing deferred execution is invoked.
-// -- Parameter token: the returned value from defer_exec for the deferred execution you wish to extend.
-// -- delay_ms: the new delay (with respect to the current time)
-// -- Return value: if the token was found, and the delay was extended
+/**
+ * Allows for extending the timeframe before an existing deferred execution is invoked.
+ *
+ * @param token[in] the returned value from defer_exec for the deferred execution you wish to extend
+ * @param delay_ms[in] the number of milliseconds before executing the callback
+ * @return true if the token was extended successfully, otherwise false
+ */
bool extend_deferred_exec(deferred_token token, uint32_t delay_ms);
-// Allows for cancellation of an existing deferred execution.
-// -- Parameter token: the returned value from defer_exec for the deferred execution you wish to cancel.
-// -- Return value: if the token was found, and the executor was cancelled
+/**
+ * Allows for cancellation of an existing deferred execution.
+ *
+ * @param token[in] the returned value from defer_exec for the deferred execution you wish to cancel
+ * @return true if the token was cancelled successfully, otherwise false
+ */
bool cancel_deferred_exec(deferred_token token);
-// Forward declaration for the main loop in order to execute any deferred executors. Should not be invoked by keyboard/user code.
+/**
+ * Forward declaration for the main loop in order to execute any deferred executors. Should not be invoked by keyboard/user code.
+ */
void deferred_exec_task(void);
+
+//------------------------------------
+// Advanced API: used when a custom-allocated table is used, primarily for core code.
+//------------------------------------
+
+/**
+ * @struct Structure for containing self-hosted deferred executor tables.
+ * @brief Core-side code can use this to create their own tables without impacting on the use of users' ability to add deferred execution.
+ * Code outside deferred_exec.c should not worry about internals of this struct, and should just allocate the required number in an array.
+ */
+typedef struct deferred_executor_t {
+ deferred_token token;
+ uint32_t trigger_time;
+ deferred_exec_callback callback;
+ void * cb_arg;
+} deferred_executor_t;
+
+/**
+ * Configures the supplied deferred executor to be executed after the required number of milliseconds.
+ *
+ * @param table[in] the custom table used for storage
+ * @param table_count[in] the number of available items in the table
+ * @param delay_ms[in] the number of milliseconds before executing the callback
+ * @param callback[in] the executor to invoke
+ * @param cb_arg[in] the argument to pass to the executor, may be NULL if unused by the executor
+ * @return a token usable for extension/cancellation, or INVALID_DEFERRED_TOKEN if an error occurred
+ */
+deferred_token defer_exec_advanced(deferred_executor_t *table, size_t table_count, uint32_t delay_ms, deferred_exec_callback callback, void *cb_arg);
+
+/**
+ * Allows for extending the timeframe before an existing deferred execution is invoked.
+ *
+ * @param token[in] the returned value from defer_exec for the deferred execution you wish to extend
+ * @param delay_ms[in] the number of milliseconds before executing the callback
+ * @return true if the token was extended successfully, otherwise false
+ */
+bool extend_deferred_exec_advanced(deferred_executor_t *table, size_t table_count, deferred_token token, uint32_t delay_ms);
+
+/**
+ * Allows for cancellation of an existing deferred execution.
+ *
+ * @param token[in] the returned value from defer_exec for the deferred execution you wish to cancel
+ * @return true if the token was cancelled successfully, otherwise false
+ */
+bool cancel_deferred_exec_advanced(deferred_executor_t *table, size_t table_count, deferred_token token);
+
+/**
+ * Forward declaration for the main loop in order to execute any custom table deferred executors. Should not be invoked by keyboard/user code.
+ * Needed for any custom-allocated deferred execution tables. Any core tasks should add appropriate invocation to quantum/main.c.
+ *
+ * @param table[in] the custom table used for storage
+ * @param table_count[in] the number of available items in the table
+ * @param last_execution_time[in,out] the last execution time -- this will be checked first to determine if execution is needed, and updated if execution occurred
+ */
+void deferred_exec_advanced_task(deferred_executor_t *table, size_t table_count, uint32_t *last_execution_time);
diff --git a/quantum/digitizer.c b/quantum/digitizer.c
index e299867429..7925129d0c 100644
--- a/quantum/digitizer.c
+++ b/quantum/digitizer.c
@@ -24,9 +24,13 @@ __attribute__((weak)) void digitizer_send(void) {
}
}
-__attribute__((weak)) void digitizer_task(void) { digitizer_send(); }
+__attribute__((weak)) void digitizer_task(void) {
+ digitizer_send();
+}
-digitizer_t digitizer_get_report(void) { return digitizerReport; }
+digitizer_t digitizer_get_report(void) {
+ return digitizerReport;
+}
void digitizer_set_report(digitizer_t newDigitizerReport) {
digitizerReport = newDigitizerReport;
diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c
index 133ec85027..eee29aaf91 100644
--- a/quantum/dip_switch.c
+++ b/quantum/dip_switch.c
@@ -52,13 +52,21 @@ static uint16_t scan_count;
static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
-__attribute__((weak)) bool dip_switch_update_user(uint8_t index, bool active) { return true; }
+__attribute__((weak)) bool dip_switch_update_user(uint8_t index, bool active) {
+ return true;
+}
-__attribute__((weak)) bool dip_switch_update_kb(uint8_t index, bool active) { return dip_switch_update_user(index, active); }
+__attribute__((weak)) bool dip_switch_update_kb(uint8_t index, bool active) {
+ return dip_switch_update_user(index, active);
+}
-__attribute__((weak)) bool dip_switch_update_mask_user(uint32_t state) { return true; }
+__attribute__((weak)) bool dip_switch_update_mask_user(uint32_t state) {
+ return true;
+}
-__attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) { return dip_switch_update_mask_user(state); }
+__attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) {
+ return dip_switch_update_mask_user(state);
+}
void dip_switch_init(void) {
#ifdef DIP_SWITCH_PINS
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 19a6bea59a..f070375ff3 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -14,12 +14,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "keymap.h" // to get keymaps[][][]
+#include "keymap.h" // to get keymaps[][][]
#include "eeprom.h"
-#include "progmem.h" // to read default from flash
-#include "quantum.h" // for send_string()
+#include "progmem.h" // to read default from flash
+#include "quantum.h" // for send_string()
#include "dynamic_keymap.h"
-#include "via.h" // for default VIA_EEPROM_ADDR_END
+#include "via.h" // for default VIA_EEPROM_ADDR_END
#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
# define DYNAMIC_KEYMAP_LAYER_COUNT 4
@@ -29,24 +29,22 @@
# define DYNAMIC_KEYMAP_MACRO_COUNT 16
#endif
-// This is the default EEPROM max address to use for dynamic keymaps.
-// The default is the ATmega32u4 EEPROM max address.
-// Explicitly override it if the keyboard uses a microcontroller with
-// more EEPROM *and* it makes sense to increase it.
+#ifndef TOTAL_EEPROM_BYTE_COUNT
+# error Unknown total EEPROM size. Cannot derive maximum for dynamic keymaps.
+#endif
+
#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
-# if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__)
-# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-# elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
-# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 4095
-# elif defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny85__)
-# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 511
-# else
-# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023
-# endif
+# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR (TOTAL_EEPROM_BYTE_COUNT - 1)
+#endif
+
+#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > (TOTAL_EEPROM_BYTE_COUNT - 1)
+# pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > " STR((TOTAL_EEPROM_BYTE_COUNT - 1))
+# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is configured to use more space than what is available for the selected EEPROM driver
#endif
// Due to usage of uint16_t check for max 65535
#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535
+# pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > 65535"
# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536
#endif
@@ -71,6 +69,7 @@
// or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has
// more than the default.
#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR < 100
+# pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR) " < 100"
# error Dynamic keymaps are configured to use more EEPROM than is available.
#endif
@@ -80,7 +79,9 @@
# define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1)
#endif
-uint8_t dynamic_keymap_get_layer_count(void) { return DYNAMIC_KEYMAP_LAYER_COUNT; }
+uint8_t dynamic_keymap_get_layer_count(void) {
+ return DYNAMIC_KEYMAP_LAYER_COUNT;
+}
void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column) {
// TODO: optimize this with some left shifts
@@ -152,9 +153,13 @@ uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
}
}
-uint8_t dynamic_keymap_macro_get_count(void) { return DYNAMIC_KEYMAP_MACRO_COUNT; }
+uint8_t dynamic_keymap_macro_get_count(void) {
+ return DYNAMIC_KEYMAP_MACRO_COUNT;
+}
-uint16_t dynamic_keymap_macro_get_buffer_size(void) { return DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE; }
+uint16_t dynamic_keymap_macro_get_buffer_size(void) {
+ return DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE;
+}
void dynamic_keymap_macro_get_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
void * source = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
index 4c2ad2490c..14cd5887f4 100644
--- a/quantum/eeconfig.c
+++ b/quantum/eeconfig.c
@@ -49,7 +49,7 @@ void eeconfig_init_quantum(void) {
eeprom_update_byte(EECONFIG_KEYMAP_UPPER_BYTE, 0);
eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
- eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default
+ eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default
eeprom_update_dword(EECONFIG_RGBLIGHT, 0);
eeprom_update_byte(EECONFIG_STENOMODE, 0);
eeprom_update_dword(EECONFIG_HAPTIC, 0);
@@ -90,13 +90,17 @@ void eeconfig_init_quantum(void) {
*
* FIXME: needs doc
*/
-void eeconfig_init(void) { eeconfig_init_quantum(); }
+void eeconfig_init(void) {
+ eeconfig_init_quantum();
+}
/** \brief eeconfig enable
*
* FIXME: needs doc
*/
-void eeconfig_enable(void) { eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); }
+void eeconfig_enable(void) {
+ eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
+}
/** \brief eeconfig disable
*
@@ -141,29 +145,39 @@ bool eeconfig_is_disabled(void) {
*
* FIXME: needs doc
*/
-uint8_t eeconfig_read_debug(void) { return eeprom_read_byte(EECONFIG_DEBUG); }
+uint8_t eeconfig_read_debug(void) {
+ return eeprom_read_byte(EECONFIG_DEBUG);
+}
/** \brief eeconfig update debug
*
* FIXME: needs doc
*/
-void eeconfig_update_debug(uint8_t val) { eeprom_update_byte(EECONFIG_DEBUG, val); }
+void eeconfig_update_debug(uint8_t val) {
+ eeprom_update_byte(EECONFIG_DEBUG, val);
+}
/** \brief eeconfig read default layer
*
* FIXME: needs doc
*/
-uint8_t eeconfig_read_default_layer(void) { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); }
+uint8_t eeconfig_read_default_layer(void) {
+ return eeprom_read_byte(EECONFIG_DEFAULT_LAYER);
+}
/** \brief eeconfig update default layer
*
* FIXME: needs doc
*/
-void eeconfig_update_default_layer(uint8_t val) { eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val); }
+void eeconfig_update_default_layer(uint8_t val) {
+ eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val);
+}
/** \brief eeconfig read keymap
*
* FIXME: needs doc
*/
-uint16_t eeconfig_read_keymap(void) { return (eeprom_read_byte(EECONFIG_KEYMAP_LOWER_BYTE) | (eeprom_read_byte(EECONFIG_KEYMAP_UPPER_BYTE) << 8)); }
+uint16_t eeconfig_read_keymap(void) {
+ return (eeprom_read_byte(EECONFIG_KEYMAP_LOWER_BYTE) | (eeprom_read_byte(EECONFIG_KEYMAP_UPPER_BYTE) << 8));
+}
/** \brief eeconfig update keymap
*
* FIXME: needs doc
@@ -177,53 +191,73 @@ void eeconfig_update_keymap(uint16_t val) {
*
* FIXME: needs doc
*/
-uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO); }
+uint8_t eeconfig_read_audio(void) {
+ return eeprom_read_byte(EECONFIG_AUDIO);
+}
/** \brief eeconfig update audio
*
* FIXME: needs doc
*/
-void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); }
+void eeconfig_update_audio(uint8_t val) {
+ eeprom_update_byte(EECONFIG_AUDIO, val);
+}
/** \brief eeconfig read kb
*
* FIXME: needs doc
*/
-uint32_t eeconfig_read_kb(void) { return eeprom_read_dword(EECONFIG_KEYBOARD); }
+uint32_t eeconfig_read_kb(void) {
+ return eeprom_read_dword(EECONFIG_KEYBOARD);
+}
/** \brief eeconfig update kb
*
* FIXME: needs doc
*/
-void eeconfig_update_kb(uint32_t val) { eeprom_update_dword(EECONFIG_KEYBOARD, val); }
+void eeconfig_update_kb(uint32_t val) {
+ eeprom_update_dword(EECONFIG_KEYBOARD, val);
+}
/** \brief eeconfig read user
*
* FIXME: needs doc
*/
-uint32_t eeconfig_read_user(void) { return eeprom_read_dword(EECONFIG_USER); }
+uint32_t eeconfig_read_user(void) {
+ return eeprom_read_dword(EECONFIG_USER);
+}
/** \brief eeconfig update user
*
* FIXME: needs doc
*/
-void eeconfig_update_user(uint32_t val) { eeprom_update_dword(EECONFIG_USER, val); }
+void eeconfig_update_user(uint32_t val) {
+ eeprom_update_dword(EECONFIG_USER, val);
+}
/** \brief eeconfig read haptic
*
* FIXME: needs doc
*/
-uint32_t eeconfig_read_haptic(void) { return eeprom_read_dword(EECONFIG_HAPTIC); }
+uint32_t eeconfig_read_haptic(void) {
+ return eeprom_read_dword(EECONFIG_HAPTIC);
+}
/** \brief eeconfig update haptic
*
* FIXME: needs doc
*/
-void eeconfig_update_haptic(uint32_t val) { eeprom_update_dword(EECONFIG_HAPTIC, val); }
+void eeconfig_update_haptic(uint32_t val) {
+ eeprom_update_dword(EECONFIG_HAPTIC, val);
+}
/** \brief eeconfig read split handedness
*
* FIXME: needs doc
*/
-bool eeconfig_read_handedness(void) { return !!eeprom_read_byte(EECONFIG_HANDEDNESS); }
+bool eeconfig_read_handedness(void) {
+ return !!eeprom_read_byte(EECONFIG_HANDEDNESS);
+}
/** \brief eeconfig update split handedness
*
* FIXME: needs doc
*/
-void eeconfig_update_handedness(bool val) { eeprom_update_byte(EECONFIG_HANDEDNESS, !!val); }
+void eeconfig_update_handedness(bool val) {
+ eeprom_update_byte(EECONFIG_HANDEDNESS, !!val);
+}
diff --git a/quantum/eeconfig.h b/quantum/eeconfig.h
index 22d874273c..f3cd1867ab 100644
--- a/quantum/eeconfig.h
+++ b/quantum/eeconfig.h
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdbool.h>
#ifndef EECONFIG_MAGIC_NUMBER
-# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE9 // When changing, decrement this value to avoid future re-init issues
+# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE9 // When changing, decrement this value to avoid future re-init issues
#endif
#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF
@@ -112,28 +112,30 @@ void eeconfig_update_haptic(uint32_t val);
bool eeconfig_read_handedness(void);
void eeconfig_update_handedness(bool val);
-#define EECONFIG_DEBOUNCE_HELPER(name, offset, config) \
- static uint8_t dirty_##name = false; \
- \
- static inline void eeconfig_init_##name(void) { \
- eeprom_read_block(&config, offset, sizeof(config)); \
- dirty_##name = false; \
- } \
- static inline void eeconfig_flush_##name(bool force) { \
- if (force || dirty_##name) { \
- eeprom_update_block(&config, offset, sizeof(config)); \
- dirty_##name = false; \
- } \
- } \
- static inline void eeconfig_flush_##name##_task(uint16_t timeout) { \
- static uint16_t flush_timer = 0; \
- if (timer_elapsed(flush_timer) > timeout) { \
- eeconfig_flush_##name(false); \
- flush_timer = timer_read(); \
- } \
- } \
- static inline void eeconfig_flag_##name(bool v) { dirty_##name |= v; } \
- static inline void eeconfig_write_##name(typeof(config) conf) { \
- memcpy(&config, &conf, sizeof(config)); \
- eeconfig_flag_##name(true); \
+#define EECONFIG_DEBOUNCE_HELPER(name, offset, config) \
+ static uint8_t dirty_##name = false; \
+ \
+ static inline void eeconfig_init_##name(void) { \
+ eeprom_read_block(&config, offset, sizeof(config)); \
+ dirty_##name = false; \
+ } \
+ static inline void eeconfig_flush_##name(bool force) { \
+ if (force || dirty_##name) { \
+ eeprom_update_block(&config, offset, sizeof(config)); \
+ dirty_##name = false; \
+ } \
+ } \
+ static inline void eeconfig_flush_##name##_task(uint16_t timeout) { \
+ static uint16_t flush_timer = 0; \
+ if (timer_elapsed(flush_timer) > timeout) { \
+ eeconfig_flush_##name(false); \
+ flush_timer = timer_read(); \
+ } \
+ } \
+ static inline void eeconfig_flag_##name(bool v) { \
+ dirty_##name |= v; \
+ } \
+ static inline void eeconfig_write_##name(typeof(config) conf) { \
+ memcpy(&config, &conf, sizeof(config)); \
+ eeconfig_flag_##name(true); \
}
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 8fb87281c2..59133f872a 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -59,9 +59,13 @@ static uint8_t thisHand, thatHand;
static uint8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
#endif
-__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; }
+__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) {
+ return true;
+}
-__attribute__((weak)) bool encoder_update_kb(uint8_t index, bool clockwise) { return encoder_update_user(index, clockwise); }
+__attribute__((weak)) bool encoder_update_kb(uint8_t index, bool clockwise) {
+ return encoder_update_user(index, clockwise);
+}
void encoder_init(void) {
#if defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT)
@@ -113,7 +117,7 @@ static bool encoder_update(uint8_t index, uint8_t state) {
changed = true;
encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE);
}
- if (encoder_pulses[i] <= -resolution) { // direction is arbitrary here, but this clockwise
+ if (encoder_pulses[i] <= -resolution) { // direction is arbitrary here, but this clockwise
encoder_value[index]--;
changed = true;
encoder_update_kb(index, ENCODER_CLOCKWISE);
@@ -140,7 +144,9 @@ bool encoder_read(void) {
#ifdef SPLIT_KEYBOARD
void last_encoder_activity_trigger(void);
-void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, &encoder_value[thisHand], sizeof(uint8_t) * NUMBER_OF_ENCODERS); }
+void encoder_state_raw(uint8_t* slave_state) {
+ memcpy(slave_state, &encoder_value[thisHand], sizeof(uint8_t) * NUMBER_OF_ENCODERS);
+}
void encoder_update_raw(uint8_t* slave_state) {
bool changed = false;
diff --git a/quantum/encoder/tests/mock.c b/quantum/encoder/tests/mock.c
index d0506a938f..10a00cb8f2 100644
--- a/quantum/encoder/tests/mock.c
+++ b/quantum/encoder/tests/mock.c
@@ -26,7 +26,9 @@ uint8_t mockSetPinInputHigh(pin_t pin) {
return 0;
}
-bool mockReadPin(pin_t pin) { return pins[pin]; }
+bool mockReadPin(pin_t pin) {
+ return pins[pin];
+}
bool setPin(pin_t pin, bool val) {
pins[pin] = val;
diff --git a/quantum/encoder/tests/mock_split.c b/quantum/encoder/tests/mock_split.c
index 68bf3af599..dd3c26d958 100644
--- a/quantum/encoder/tests/mock_split.c
+++ b/quantum/encoder/tests/mock_split.c
@@ -26,7 +26,9 @@ uint8_t mockSetPinInputHigh(pin_t pin) {
return 0;
}
-bool mockReadPin(pin_t pin) { return pins[pin]; }
+bool mockReadPin(pin_t pin) {
+ return pins[pin];
+}
bool setPin(pin_t pin, bool val) {
pins[pin] = val;
diff --git a/quantum/haptic.c b/quantum/haptic.c
index f915acf946..31d1114806 100644
--- a/quantum/haptic.c
+++ b/quantum/haptic.c
@@ -247,7 +247,9 @@ void haptic_set_dwell(uint8_t dwell) {
xprintf("haptic_config.dwell = %u\n", haptic_config.dwell);
}
-uint8_t haptic_get_enable(void) { return haptic_config.enable; }
+uint8_t haptic_get_enable(void) {
+ return haptic_config.enable;
+}
uint8_t haptic_get_mode(void) {
if (!haptic_config.enable) {
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index 3bca05aab7..ba5609f0aa 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -16,9 +16,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
+#include "quantum.h"
#include "keyboard.h"
#include "matrix.h"
#include "keymap.h"
+#include "magic.h"
#include "host.h"
#include "led.h"
#include "keycode.h"
@@ -100,20 +102,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef SLEEP_LED_ENABLE
# include "sleep_led.h"
#endif
+#ifdef SPLIT_KEYBOARD
+# include "split_util.h"
+#endif
+#ifdef BLUETOOTH_ENABLE
+# include "outputselect.h"
+#endif
static uint32_t last_input_modification_time = 0;
-uint32_t last_input_activity_time(void) { return last_input_modification_time; }
-uint32_t last_input_activity_elapsed(void) { return timer_elapsed32(last_input_modification_time); }
+uint32_t last_input_activity_time(void) {
+ return last_input_modification_time;
+}
+uint32_t last_input_activity_elapsed(void) {
+ return timer_elapsed32(last_input_modification_time);
+}
static uint32_t last_matrix_modification_time = 0;
-uint32_t last_matrix_activity_time(void) { return last_matrix_modification_time; }
-uint32_t last_matrix_activity_elapsed(void) { return timer_elapsed32(last_matrix_modification_time); }
-void last_matrix_activity_trigger(void) { last_matrix_modification_time = last_input_modification_time = timer_read32(); }
+uint32_t last_matrix_activity_time(void) {
+ return last_matrix_modification_time;
+}
+uint32_t last_matrix_activity_elapsed(void) {
+ return timer_elapsed32(last_matrix_modification_time);
+}
+void last_matrix_activity_trigger(void) {
+ last_matrix_modification_time = last_input_modification_time = timer_read32();
+}
static uint32_t last_encoder_modification_time = 0;
-uint32_t last_encoder_activity_time(void) { return last_encoder_modification_time; }
-uint32_t last_encoder_activity_elapsed(void) { return timer_elapsed32(last_encoder_modification_time); }
-void last_encoder_activity_trigger(void) { last_encoder_modification_time = last_input_modification_time = timer_read32(); }
+uint32_t last_encoder_activity_time(void) {
+ return last_encoder_modification_time;
+}
+uint32_t last_encoder_activity_elapsed(void) {
+ return timer_elapsed32(last_encoder_modification_time);
+}
+void last_encoder_activity_trigger(void) {
+ last_encoder_modification_time = last_input_modification_time = timer_read32();
+}
// Only enable this if console is enabled to print to
#if defined(DEBUG_MATRIX_SCAN_RATE)
@@ -135,7 +159,9 @@ void matrix_scan_perf_task(void) {
}
}
-uint32_t get_matrix_scan_rate(void) { return last_matrix_scan_count; }
+uint32_t get_matrix_scan_rate(void) {
+ return last_matrix_scan_count;
+}
#else
# define matrix_scan_perf_task()
#endif
@@ -155,7 +181,7 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata) {
}
static inline bool popcount_more_than_one(matrix_row_t rowdata) {
- rowdata &= rowdata - 1; // if there are less than two bits (keys) set, rowdata will become zero
+ rowdata &= rowdata - 1; // if there are less than two bits (keys) set, rowdata will become zero
return rowdata;
}
@@ -212,7 +238,9 @@ __attribute__((weak)) void keyboard_pre_init_user(void) {}
*
* FIXME: needs doc
*/
-__attribute__((weak)) void keyboard_pre_init_kb(void) { keyboard_pre_init_user(); }
+__attribute__((weak)) void keyboard_pre_init_kb(void) {
+ keyboard_pre_init_user();
+}
/** \brief keyboard_post_init_user
*
@@ -226,7 +254,9 @@ __attribute__((weak)) void keyboard_post_init_user() {}
* FIXME: needs doc
*/
-__attribute__((weak)) void keyboard_post_init_kb(void) { keyboard_post_init_user(); }
+__attribute__((weak)) void keyboard_post_init_kb(void) {
+ keyboard_post_init_user();
+}
/** \brief keyboard_setup
*
@@ -250,13 +280,17 @@ void keyboard_setup(void) {
*
* FIXME: needs doc
*/
-__attribute__((weak)) bool is_keyboard_master(void) { return true; }
+__attribute__((weak)) bool is_keyboard_master(void) {
+ return true;
+}
/** \brief is_keyboard_left
*
* FIXME: needs doc
*/
-__attribute__((weak)) bool is_keyboard_left(void) { return true; }
+__attribute__((weak)) bool is_keyboard_left(void) {
+ return true;
+}
#endif
@@ -265,7 +299,9 @@ __attribute__((weak)) bool is_keyboard_left(void) { return true; }
* Override this function if you have a condition where keypresses processing should change:
* - splits where the slave side needs to process for rgb/oled functionality
*/
-__attribute__((weak)) bool should_process_keypress(void) { return is_keyboard_master(); }
+__attribute__((weak)) bool should_process_keypress(void) {
+ return is_keyboard_master();
+}
/** \brief housekeeping_task_kb
*
@@ -290,6 +326,36 @@ void housekeeping_task(void) {
housekeeping_task_user();
}
+/** \brief Init tasks previously located in matrix_init_quantum
+ *
+ * TODO: rationalise against keyboard_init and current split role
+ */
+void quantum_init(void) {
+ magic();
+ led_init_ports();
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
+#ifdef AUDIO_ENABLE
+ audio_init();
+#endif
+#ifdef LED_MATRIX_ENABLE
+ led_matrix_init();
+#endif
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_init();
+#endif
+#if defined(UNICODE_COMMON_ENABLE)
+ unicode_input_mode_init();
+#endif
+#ifdef HAPTIC_ENABLE
+ haptic_init();
+#endif
+#if defined(BLUETOOTH_ENABLE) && defined(OUTPUT_AUTO_ENABLE)
+ set_output(OUTPUT_AUTO);
+#endif
+}
+
/** \brief keyboard_init
*
* FIXME: needs doc
@@ -300,7 +366,11 @@ void keyboard_init(void) {
#ifdef VIA_ENABLE
via_init();
#endif
+#ifdef SPLIT_KEYBOARD
+ split_pre_init();
+#endif
matrix_init();
+ quantum_init();
#if defined(CRC_ENABLE)
crc_init();
#endif
@@ -341,6 +411,9 @@ void keyboard_init(void) {
#ifdef VIRTSER_ENABLE
virtser_init();
#endif
+#ifdef SPLIT_KEYBOARD
+ split_post_init();
+#endif
#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
debug_enable = true;
@@ -363,28 +436,17 @@ void switch_events(uint8_t row, uint8_t col, bool pressed) {
#endif
}
-/** \brief Keyboard task: Do keyboard routine jobs
- *
- * Do routine keyboard jobs:
+/** \brief Perform scan of keyboard matrix
*
- * * scan matrix
- * * handle mouse movements
- * * handle midi commands
- * * light LEDs
- *
- * This is repeatedly called as fast as possible.
+ * Any detected changes in state are sent out as part of the processing
*/
-void keyboard_task(void) {
+bool matrix_scan_task(void) {
static matrix_row_t matrix_prev[MATRIX_ROWS];
- static uint8_t led_status = 0;
matrix_row_t matrix_row = 0;
matrix_row_t matrix_change = 0;
#ifdef QMK_KEYS_PER_SCAN
uint8_t keys_processed = 0;
#endif
-#ifdef ENCODER_ENABLE
- bool encoders_changed = false;
-#endif
uint8_t matrix_changed = matrix_scan();
if (matrix_changed) last_matrix_activity_trigger();
@@ -431,10 +493,94 @@ void keyboard_task(void) {
MATRIX_LOOP_END:
-#ifdef DEBUG_MATRIX_SCAN_RATE
matrix_scan_perf_task();
+ return matrix_changed;
+}
+
+/** \brief Tasks previously located in matrix_scan_quantum
+ *
+ * TODO: rationalise against keyboard_task and current split role
+ */
+void quantum_task(void) {
+#ifdef SPLIT_KEYBOARD
+ // some tasks should only run on master
+ if (!is_keyboard_master()) return;
+#endif
+
+#if defined(AUDIO_ENABLE) && defined(AUDIO_INIT_DELAY)
+ // There are some tasks that need to be run a little bit
+ // after keyboard startup, or else they will not work correctly
+ // because of interaction with the USB device state, which
+ // may still be in flux...
+ //
+ // At the moment the only feature that needs this is the
+ // startup song.
+ static bool delayed_tasks_run = false;
+ static uint16_t delayed_task_timer = 0;
+ if (!delayed_tasks_run) {
+ if (!delayed_task_timer) {
+ delayed_task_timer = timer_read();
+ } else if (timer_elapsed(delayed_task_timer) > 300) {
+ audio_startup();
+ delayed_tasks_run = true;
+ }
+ }
+#endif
+
+#if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
+ music_task();
+#endif
+
+#ifdef KEY_OVERRIDE_ENABLE
+ key_override_task();
+#endif
+
+#ifdef SEQUENCER_ENABLE
+ sequencer_task();
+#endif
+
+#ifdef TAP_DANCE_ENABLE
+ tap_dance_task();
#endif
+#ifdef COMBO_ENABLE
+ combo_task();
+#endif
+
+#ifdef WPM_ENABLE
+ decay_wpm();
+#endif
+
+#ifdef HAPTIC_ENABLE
+ haptic_task();
+#endif
+
+#ifdef DIP_SWITCH_ENABLE
+ dip_switch_read(false);
+#endif
+
+#ifdef AUTO_SHIFT_ENABLE
+ autoshift_matrix_scan();
+#endif
+}
+
+/** \brief Keyboard task: Do keyboard routine jobs
+ *
+ * Do routine keyboard jobs:
+ *
+ * * scan matrix
+ * * handle mouse movements
+ * * handle midi commands
+ * * light LEDs
+ *
+ * This is repeatedly called as fast as possible.
+ */
+void keyboard_task(void) {
+ bool matrix_changed = matrix_scan_task();
+ (void)matrix_changed;
+
+ quantum_task();
+
#if defined(RGBLIGHT_ENABLE)
rgblight_task();
#endif
@@ -453,7 +599,7 @@ MATRIX_LOOP_END:
#endif
#ifdef ENCODER_ENABLE
- encoders_changed = encoder_read();
+ bool encoders_changed = encoder_read();
if (encoders_changed) last_encoder_activity_trigger();
#endif
@@ -516,22 +662,5 @@ MATRIX_LOOP_END:
programmable_button_send();
#endif
- // update LED
- if (led_status != host_keyboard_leds()) {
- led_status = host_keyboard_leds();
- keyboard_set_leds(led_status);
- }
-}
-
-/** \brief keyboard set leds
- *
- * FIXME: needs doc
- */
-void keyboard_set_leds(uint8_t leds) {
- if (debug_keyboard) {
- debug("keyboard_set_led: ");
- debug_hex8(leds);
- debug("\n");
- }
- led_set(leds);
+ led_task();
}
diff --git a/quantum/keyboard.h b/quantum/keyboard.h
index 08f4e84f94..e122b38264 100644
--- a/quantum/keyboard.h
+++ b/quantum/keyboard.h
@@ -44,13 +44,21 @@ typedef struct {
* 1) (time == 0) to handle (keyevent_t){} as empty event
* 2) Matrix(255, 255) to make TICK event available
*/
-static inline bool IS_NOEVENT(keyevent_t event) { return event.time == 0 || (event.key.row == 255 && event.key.col == 255); }
-static inline bool IS_PRESSED(keyevent_t event) { return (!IS_NOEVENT(event) && event.pressed); }
-static inline bool IS_RELEASED(keyevent_t event) { return (!IS_NOEVENT(event) && !event.pressed); }
+static inline bool IS_NOEVENT(keyevent_t event) {
+ return event.time == 0 || (event.key.row == 255 && event.key.col == 255);
+}
+static inline bool IS_PRESSED(keyevent_t event) {
+ return (!IS_NOEVENT(event) && event.pressed);
+}
+static inline bool IS_RELEASED(keyevent_t event) {
+ return (!IS_NOEVENT(event) && !event.pressed);
+}
/* Tick event */
-#define TICK \
- (keyevent_t) { .key = (keypos_t){.row = 255, .col = 255}, .pressed = false, .time = (timer_read() | 1) }
+#define TICK \
+ (keyevent_t) { \
+ .key = (keypos_t){.row = 255, .col = 255}, .pressed = false, .time = (timer_read() | 1) \
+ }
/* it runs once at early stage of startup before keyboard_init. */
void keyboard_setup(void);
@@ -58,8 +66,6 @@ void keyboard_setup(void);
void keyboard_init(void);
/* it runs repeatedly in main loop */
void keyboard_task(void);
-/* it runs when host LED status is updated */
-void keyboard_set_leds(uint8_t leds);
/* it runs whenever code has to behave differently on a slave */
bool is_keyboard_master(void);
/* it runs whenever code has to behave differently on left vs right split */
@@ -70,18 +76,18 @@ void keyboard_pre_init_user(void);
void keyboard_post_init_kb(void);
void keyboard_post_init_user(void);
-void housekeeping_task(void); // To be executed by the main loop in each backend TMK protocol
-void housekeeping_task_kb(void); // To be overridden by keyboard-level code
-void housekeeping_task_user(void); // To be overridden by user/keymap-level code
+void housekeeping_task(void); // To be executed by the main loop in each backend TMK protocol
+void housekeeping_task_kb(void); // To be overridden by keyboard-level code
+void housekeeping_task_user(void); // To be overridden by user/keymap-level code
-uint32_t last_input_activity_time(void); // Timestamp of the last matrix or encoder activity
-uint32_t last_input_activity_elapsed(void); // Number of milliseconds since the last matrix or encoder activity
+uint32_t last_input_activity_time(void); // Timestamp of the last matrix or encoder activity
+uint32_t last_input_activity_elapsed(void); // Number of milliseconds since the last matrix or encoder activity
-uint32_t last_matrix_activity_time(void); // Timestamp of the last matrix activity
-uint32_t last_matrix_activity_elapsed(void); // Number of milliseconds since the last matrix activity
+uint32_t last_matrix_activity_time(void); // Timestamp of the last matrix activity
+uint32_t last_matrix_activity_elapsed(void); // Number of milliseconds since the last matrix activity
-uint32_t last_encoder_activity_time(void); // Timestamp of the last encoder activity
-uint32_t last_encoder_activity_elapsed(void); // Number of milliseconds since the last encoder activity
+uint32_t last_encoder_activity_time(void); // Timestamp of the last encoder activity
+uint32_t last_encoder_activity_elapsed(void); // Number of milliseconds since the last encoder activity
uint32_t get_matrix_scan_rate(void);
diff --git a/quantum/keycode.h b/quantum/keycode.h
index 38a29b439b..3c80a386d1 100644
--- a/quantum/keycode.h
+++ b/quantum/keycode.h
@@ -35,8 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define IS_SYSTEM(code) (KC_PWR <= (code) && (code) <= KC_WAKE)
#define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_BRID)
-#define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN31)
-
#define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2)
#define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT)
#define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN8)
@@ -62,11 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOD_MASK_SAG (MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI)
#define MOD_MASK_CSAG (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI)
-#define FN_BIT(code) (1 << FN_INDEX(code))
-#define FN_INDEX(code) ((code)-KC_FN0)
-#define FN_MIN KC_FN0
-#define FN_MAX KC_FN31
-
// clang-format off
/*
@@ -258,7 +251,7 @@ enum hid_keyboard_keypad_usage {
KC_J,
KC_K,
KC_L,
- KC_M, // 0x10
+ KC_M, // 0x10
KC_N,
KC_O,
KC_P,
@@ -274,7 +267,7 @@ enum hid_keyboard_keypad_usage {
KC_Z,
KC_1,
KC_2,
- KC_3, // 0x20
+ KC_3, // 0x20
KC_4,
KC_5,
KC_6,
@@ -290,7 +283,7 @@ enum hid_keyboard_keypad_usage {
KC_MINUS,
KC_EQUAL,
KC_LEFT_BRACKET,
- KC_RIGHT_BRACKET, // 0x30
+ KC_RIGHT_BRACKET, // 0x30
KC_BACKSLASH,
KC_NONUS_HASH,
KC_SEMICOLON,
@@ -306,7 +299,7 @@ enum hid_keyboard_keypad_usage {
KC_F4,
KC_F5,
KC_F6,
- KC_F7, // 0x40
+ KC_F7, // 0x40
KC_F8,
KC_F9,
KC_F10,
@@ -322,7 +315,7 @@ enum hid_keyboard_keypad_usage {
KC_END,
KC_PAGE_DOWN,
KC_RIGHT,
- KC_LEFT, // 0x50
+ KC_LEFT, // 0x50
KC_DOWN,
KC_UP,
KC_NUM_LOCK,
@@ -338,7 +331,7 @@ enum hid_keyboard_keypad_usage {
KC_KP_5,
KC_KP_6,
KC_KP_7,
- KC_KP_8, // 0x60
+ KC_KP_8, // 0x60
KC_KP_9,
KC_KP_0,
KC_KP_DOT,
@@ -354,7 +347,7 @@ enum hid_keyboard_keypad_usage {
KC_F18,
KC_F19,
KC_F20,
- KC_F21, // 0x70
+ KC_F21, // 0x70
KC_F22,
KC_F23,
KC_F24,
@@ -370,7 +363,7 @@ enum hid_keyboard_keypad_usage {
KC_PASTE,
KC_FIND,
KC_KB_MUTE,
- KC_KB_VOLUME_UP, // 0x80
+ KC_KB_VOLUME_UP, // 0x80
KC_KB_VOLUME_DOWN,
KC_LOCKING_CAPS_LOCK,
KC_LOCKING_NUM_LOCK,
@@ -386,7 +379,7 @@ enum hid_keyboard_keypad_usage {
KC_INTERNATIONAL_7,
KC_INTERNATIONAL_8,
KC_INTERNATIONAL_9,
- KC_LANGUAGE_1, // 0x90
+ KC_LANGUAGE_1, // 0x90
KC_LANGUAGE_2,
KC_LANGUAGE_3,
KC_LANGUAGE_4,
@@ -402,7 +395,7 @@ enum hid_keyboard_keypad_usage {
KC_PRIOR,
KC_RETURN,
KC_SEPARATOR,
- KC_OUT, // 0xA0
+ KC_OUT, // 0xA0
KC_OPER,
KC_CLEAR_AGAIN,
KC_CRSEL,
@@ -495,7 +488,7 @@ enum internal_special_keycodes {
KC_MEDIA_STOP,
KC_MEDIA_PLAY_PAUSE,
KC_MEDIA_SELECT,
- KC_MEDIA_EJECT, // 0xB0
+ KC_MEDIA_EJECT, // 0xB0
KC_MAIL,
KC_CALCULATOR,
KC_MY_COMPUTER,
@@ -509,41 +502,7 @@ enum internal_special_keycodes {
KC_MEDIA_FAST_FORWARD,
KC_MEDIA_REWIND,
KC_BRIGHTNESS_UP,
- KC_BRIGHTNESS_DOWN,
-
- /* Fn keys */
- KC_FN0 = 0xC0,
- KC_FN1,
- KC_FN2,
- KC_FN3,
- KC_FN4,
- KC_FN5,
- KC_FN6,
- KC_FN7,
- KC_FN8,
- KC_FN9,
- KC_FN10,
- KC_FN11,
- KC_FN12,
- KC_FN13,
- KC_FN14,
- KC_FN15,
- KC_FN16, // 0xD0
- KC_FN17,
- KC_FN18,
- KC_FN19,
- KC_FN20,
- KC_FN21,
- KC_FN22,
- KC_FN23,
- KC_FN24,
- KC_FN25,
- KC_FN26,
- KC_FN27,
- KC_FN28,
- KC_FN29,
- KC_FN30,
- KC_FN31
+ KC_BRIGHTNESS_DOWN
};
enum mouse_keys {
@@ -555,7 +514,7 @@ enum mouse_keys {
#endif
KC_MS_DOWN,
KC_MS_LEFT,
- KC_MS_RIGHT, // 0xF0
+ KC_MS_RIGHT, // 0xF0
KC_MS_BTN1,
KC_MS_BTN2,
KC_MS_BTN3,
@@ -580,7 +539,7 @@ enum mouse_keys {
/* Acceleration */
KC_MS_ACCEL0,
KC_MS_ACCEL1,
- KC_MS_ACCEL2 // 0xFF
+ KC_MS_ACCEL2 // 0xFF
};
#include "keycode_legacy.h"
diff --git a/quantum/keymap.h b/quantum/keymap.h
index 191e813977..2ee2e1b576 100644
--- a/quantum/keymap.h
+++ b/quantum/keymap.h
@@ -27,7 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include <ch.h>
#endif
#include "keycode.h"
-#include "action_macro.h"
#include "report.h"
#include "host.h"
// #include "print.h"
@@ -35,9 +34,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "keycode_config.h"
// ChibiOS uses RESET in its FlagStatus enumeration
-// Therefore define it as QK_RESET here, to avoid name collision
+// Therefore define it as QK_BOOTLOADER here, to avoid name collision
#if defined(PROTOCOL_CHIBIOS)
-# define RESET QK_RESET
+# define RESET QK_BOOTLOADER
#endif
// Gross hack, remove me and change RESET keycode to QK_BOOT
#if defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__)
@@ -49,8 +48,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// translates key to keycode
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
-// translates function id to action
-uint16_t keymap_function_id_to_action(uint16_t function_id);
-
extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 5007f15f11..a91b2a0b36 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "keycode.h"
#include "action_layer.h"
#include "action.h"
-#include "action_macro.h"
#include "debug.h"
#include "quantum.h"
@@ -78,26 +77,8 @@ action_t action_for_keycode(uint16_t keycode) {
case QK_MODS ... QK_MODS_MAX:;
// Has a modifier
// Split it up
- action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
+ action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
break;
-#ifndef NO_ACTION_FUNCTION
- case KC_FN0 ... KC_FN31:
- action.code = keymap_function_id_to_action(FN_INDEX(keycode));
- break;
- case QK_FUNCTION ... QK_FUNCTION_MAX:;
- // Is a shortcut for function action_layer, pull last 12bits
- // This means we have 4,096 FN macros at our disposal
- action.code = keymap_function_id_to_action((int)keycode & 0xFFF);
- break;
-#endif
-#ifndef NO_ACTION_MACRO
- case QK_MACRO ... QK_MACRO_MAX:
- if (keycode & 0x800) // tap macros have upper bit set
- action.code = ACTION_MACRO_TAP(keycode & 0xFF);
- else
- action.code = ACTION_MACRO(keycode & 0xFF);
- break;
-#endif
#ifndef NO_ACTION_LAYER
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
@@ -165,30 +146,8 @@ action_t action_for_keycode(uint16_t keycode) {
return action;
}
-__attribute__((weak)) const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-/* Macro */
-__attribute__((weak)) const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; }
-
-/* Function */
-__attribute__((weak)) void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {}
-
// translates key to keycode
__attribute__((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
// Read entire word (16bits)
return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
}
-
-// translates function id to action
-__attribute__((weak)) uint16_t keymap_function_id_to_action(uint16_t function_id) {
-// The compiler sees the empty (weak) fn_actions and generates a warning
-// This function should not be called in that case, so the warning is too strict
-// If this function is called however, the keymap should have overridden fn_actions, and then the compile
-// is comparing against the wrong array
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Warray-bounds"
- return pgm_read_word(&fn_actions[function_id]);
-#pragma GCC diagnostic pop
-}
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 76d2f4f6b0..55a58a25b0 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -24,7 +24,7 @@
#define NO_ACUT KC_EQL
#define NO_AM KC_LBRC
-#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
+#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
#define NO_AE KC_SCLN
#define NO_OSLH KC_QUOT
#define NO_APOS KC_NUHS
diff --git a/quantum/keymap_extras/keymap_steno.h b/quantum/keymap_extras/keymap_steno.h
index 310aa07409..e888ccd643 100644
--- a/quantum/keymap_extras/keymap_steno.h
+++ b/quantum/keymap_extras/keymap_steno.h
@@ -70,7 +70,7 @@ enum steno_keycodes {
STN_NB,
STN_NC,
STN_ZR,
- STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
+ STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
};
#ifdef STENO_COMBINEDMAP
diff --git a/quantum/led.c b/quantum/led.c
index 8f0eccf55d..c5ddbc22c5 100644
--- a/quantum/led.c
+++ b/quantum/led.c
@@ -13,21 +13,26 @@
* You 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 "led.h"
+#include "host.h"
+#include "debug.h"
+#include "gpio.h"
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
+#ifdef BACKLIGHT_CAPS_LOCK
+# ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
extern backlight_config_t backlight_config;
-#else
-// Cannot use BACKLIGHT_CAPS_LOCK without backlight being enabled
-# undef BACKLIGHT_CAPS_LOCK
+# else
+# pragma message "Cannot use BACKLIGHT_CAPS_LOCK without backlight being enabled"
+# undef BACKLIGHT_CAPS_LOCK
+# endif
#endif
#ifndef LED_PIN_ON_STATE
# define LED_PIN_ON_STATE 1
#endif
-#if defined(BACKLIGHT_CAPS_LOCK)
+#ifdef BACKLIGHT_CAPS_LOCK
/** \brief Caps Lock indicator using backlight (for keyboards without dedicated LED)
*/
static void handle_backlight_caps_lock(led_t led_state) {
@@ -59,13 +64,17 @@ __attribute__((weak)) void led_set_user(uint8_t usb_led) {}
*
* \deprecated Use led_update_kb() instead.
*/
-__attribute__((weak)) void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); }
+__attribute__((weak)) void led_set_kb(uint8_t usb_led) {
+ led_set_user(usb_led);
+}
/** \brief Lock LED update callback - keymap/user level
*
* \return True if led_update_kb() should run its own code, false otherwise.
*/
-__attribute__((weak)) bool led_update_user(led_t led_state) { return true; }
+__attribute__((weak)) bool led_update_user(led_t led_state) {
+ return true;
+}
/** \brief Lock LED update callback - keyboard level
*
@@ -135,3 +144,43 @@ __attribute__((weak)) void led_set(uint8_t usb_led) {
led_set_kb(usb_led);
led_update_kb((led_t)usb_led);
}
+
+/** \brief Trigger behaviour on transition to suspend
+ */
+void led_suspend(void) {
+ uint8_t leds_off = 0;
+#ifdef BACKLIGHT_CAPS_LOCK
+ if (is_backlight_enabled()) {
+ // Don't try to turn off Caps Lock indicator as it is backlight and backlight is already off
+ leds_off |= (1 << USB_LED_CAPS_LOCK);
+ }
+#endif
+ led_set(leds_off);
+}
+
+/** \brief Trigger behaviour on transition from suspend
+ */
+void led_wakeup(void) {
+ led_set(host_keyboard_leds());
+}
+
+/** \brief set host led state
+ *
+ * Only sets state if change detected
+ */
+void led_task(void) {
+ static uint8_t last_led_status = 0;
+
+ // update LED
+ uint8_t led_status = host_keyboard_leds();
+ if (last_led_status != led_status) {
+ last_led_status = led_status;
+
+ if (debug_keyboard) {
+ debug("led_task: ");
+ debug_hex8(led_status);
+ debug("\n");
+ }
+ led_set(led_status);
+ }
+}
diff --git a/quantum/led.h b/quantum/led.h
index 0fe38ea035..934d25312c 100644
--- a/quantum/led.h
+++ b/quantum/led.h
@@ -49,6 +49,18 @@ void led_set(uint8_t usb_led);
void led_init_ports(void);
+void led_suspend(void);
+
+void led_wakeup(void);
+
+void led_task(void);
+
+/* Callbacks */
+void led_set_user(uint8_t usb_led);
+void led_set_kb(uint8_t usb_led);
+bool led_update_user(led_t led_state);
+bool led_update_kb(led_t led_state);
+
#ifdef __cplusplus
}
#endif
diff --git a/quantum/led_matrix/animations/alpha_mods_anim.h b/quantum/led_matrix/animations/alpha_mods_anim.h
index 4d017894a1..01acb3f933 100644
--- a/quantum/led_matrix/animations/alpha_mods_anim.h
+++ b/quantum/led_matrix/animations/alpha_mods_anim.h
@@ -20,5 +20,5 @@ bool ALPHAS_MODS(effect_params_t* params) {
return led_matrix_check_finished_leds(led_max);
}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_ALPHAS_MODS
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_ALPHAS_MODS
diff --git a/quantum/led_matrix/animations/band_anim.h b/quantum/led_matrix/animations/band_anim.h
index 293be4f67a..d9491849ea 100644
--- a/quantum/led_matrix/animations/band_anim.h
+++ b/quantum/led_matrix/animations/band_anim.h
@@ -7,7 +7,9 @@ static uint8_t BAND_math(uint8_t val, uint8_t i, uint8_t time) {
return scale8(v < 0 ? 0 : v, val);
}
-bool BAND(effect_params_t* params) { return effect_runner_i(params, &BAND_math); }
+bool BAND(effect_params_t* params) {
+ return effect_runner_i(params, &BAND_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_BAND
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_BAND
diff --git a/quantum/led_matrix/animations/band_pinwheel_anim.h b/quantum/led_matrix/animations/band_pinwheel_anim.h
index f47a3869ce..482d183eb6 100644
--- a/quantum/led_matrix/animations/band_pinwheel_anim.h
+++ b/quantum/led_matrix/animations/band_pinwheel_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(BAND_PINWHEEL)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t BAND_PINWHEEL_math(uint8_t val, int16_t dx, int16_t dy, uint8_t time) { return scale8(val - time - atan2_8(dy, dx) * 3, val); }
+static uint8_t BAND_PINWHEEL_math(uint8_t val, int16_t dx, int16_t dy, uint8_t time) {
+ return scale8(val - time - atan2_8(dy, dx) * 3, val);
+}
-bool BAND_PINWHEEL(effect_params_t* params) { return effect_runner_dx_dy(params, &BAND_PINWHEEL_math); }
+bool BAND_PINWHEEL(effect_params_t* params) {
+ return effect_runner_dx_dy(params, &BAND_PINWHEEL_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_BAND_PINWHEEL
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_BAND_PINWHEEL
diff --git a/quantum/led_matrix/animations/band_spiral_anim.h b/quantum/led_matrix/animations/band_spiral_anim.h
index a4bd382181..ef93d19270 100644
--- a/quantum/led_matrix/animations/band_spiral_anim.h
+++ b/quantum/led_matrix/animations/band_spiral_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(BAND_SPIRAL)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t BAND_SPIRAL_math(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) { return scale8(val + dist - time - atan2_8(dy, dx), val); }
+static uint8_t BAND_SPIRAL_math(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ return scale8(val + dist - time - atan2_8(dy, dx), val);
+}
-bool BAND_SPIRAL(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_math); }
+bool BAND_SPIRAL(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_BAND_SPIRAL
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_BAND_SPIRAL
diff --git a/quantum/led_matrix/animations/breathing_anim.h b/quantum/led_matrix/animations/breathing_anim.h
index 899925f516..0bd4cb0cc3 100644
--- a/quantum/led_matrix/animations/breathing_anim.h
+++ b/quantum/led_matrix/animations/breathing_anim.h
@@ -15,5 +15,5 @@ bool BREATHING(effect_params_t* params) {
return led_matrix_check_finished_leds(led_max);
}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_BREATHING
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_BREATHING
diff --git a/quantum/led_matrix/animations/cycle_left_right_anim.h b/quantum/led_matrix/animations/cycle_left_right_anim.h
index 1a8999b831..0a339e6d62 100644
--- a/quantum/led_matrix/animations/cycle_left_right_anim.h
+++ b/quantum/led_matrix/animations/cycle_left_right_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(CYCLE_LEFT_RIGHT)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t CYCLE_LEFT_RIGHT_math(uint8_t val, uint8_t i, uint8_t time) { return scale8(g_led_config.point[i].x - time, val); }
+static uint8_t CYCLE_LEFT_RIGHT_math(uint8_t val, uint8_t i, uint8_t time) {
+ return scale8(g_led_config.point[i].x - time, val);
+}
-bool CYCLE_LEFT_RIGHT(effect_params_t* params) { return effect_runner_i(params, &CYCLE_LEFT_RIGHT_math); }
+bool CYCLE_LEFT_RIGHT(effect_params_t* params) {
+ return effect_runner_i(params, &CYCLE_LEFT_RIGHT_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
diff --git a/quantum/led_matrix/animations/cycle_out_in_anim.h b/quantum/led_matrix/animations/cycle_out_in_anim.h
index 77d3a14b6f..8311d97fe8 100644
--- a/quantum/led_matrix/animations/cycle_out_in_anim.h
+++ b/quantum/led_matrix/animations/cycle_out_in_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(CYCLE_OUT_IN)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t CYCLE_OUT_IN_math(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) { return scale8(3 * dist / 2 + time, val); }
+static uint8_t CYCLE_OUT_IN_math(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ return scale8(3 * dist / 2 + time, val);
+}
-bool CYCLE_OUT_IN(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &CYCLE_OUT_IN_math); }
+bool CYCLE_OUT_IN(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &CYCLE_OUT_IN_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_CYCLE_OUT_IN
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_CYCLE_OUT_IN
diff --git a/quantum/led_matrix/animations/cycle_up_down_anim.h b/quantum/led_matrix/animations/cycle_up_down_anim.h
index b25947199c..7e2d71a0f1 100644
--- a/quantum/led_matrix/animations/cycle_up_down_anim.h
+++ b/quantum/led_matrix/animations/cycle_up_down_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(CYCLE_UP_DOWN)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t CYCLE_UP_DOWN_math(uint8_t val, uint8_t i, uint8_t time) { return scale8(g_led_config.point[i].y - time, val); }
+static uint8_t CYCLE_UP_DOWN_math(uint8_t val, uint8_t i, uint8_t time) {
+ return scale8(g_led_config.point[i].y - time, val);
+}
-bool CYCLE_UP_DOWN(effect_params_t* params) { return effect_runner_i(params, &CYCLE_UP_DOWN_math); }
+bool CYCLE_UP_DOWN(effect_params_t* params) {
+ return effect_runner_i(params, &CYCLE_UP_DOWN_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_CYCLE_UP_DOWN
diff --git a/quantum/led_matrix/animations/dual_beacon_anim.h b/quantum/led_matrix/animations/dual_beacon_anim.h
index 81735e323c..1dfb5ffe52 100644
--- a/quantum/led_matrix/animations/dual_beacon_anim.h
+++ b/quantum/led_matrix/animations/dual_beacon_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(DUAL_BEACON)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t DUAL_BEACON_math(uint8_t val, int8_t sin, int8_t cos, uint8_t i, uint8_t time) { return scale8(((g_led_config.point[i].y - k_led_matrix_center.y) * cos + (g_led_config.point[i].x - k_led_matrix_center.x) * sin) / 128, val); }
+static uint8_t DUAL_BEACON_math(uint8_t val, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
+ return scale8(((g_led_config.point[i].y - k_led_matrix_center.y) * cos + (g_led_config.point[i].x - k_led_matrix_center.x) * sin) / 128, val);
+}
-bool DUAL_BEACON(effect_params_t* params) { return effect_runner_sin_cos_i(params, &DUAL_BEACON_math); }
+bool DUAL_BEACON(effect_params_t* params) {
+ return effect_runner_sin_cos_i(params, &DUAL_BEACON_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_DUAL_BEACON
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_DUAL_BEACON
diff --git a/quantum/led_matrix/animations/runners/effect_runner_reactive.h b/quantum/led_matrix/animations/runners/effect_runner_reactive.h
index be3090aa53..8468458744 100644
--- a/quantum/led_matrix/animations/runners/effect_runner_reactive.h
+++ b/quantum/led_matrix/animations/runners/effect_runner_reactive.h
@@ -25,4 +25,4 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
return led_matrix_check_finished_leds(led_max);
}
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h
index f6ffc825a1..aec4a6ffda 100644
--- a/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h
+++ b/quantum/led_matrix/animations/runners/effect_runner_reactive_splash.h
@@ -23,4 +23,4 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react
return led_matrix_check_finished_leds(led_max);
}
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/solid_anim.h b/quantum/led_matrix/animations/solid_anim.h
index c728dbcc98..895542e152 100644
--- a/quantum/led_matrix/animations/solid_anim.h
+++ b/quantum/led_matrix/animations/solid_anim.h
@@ -12,4 +12,4 @@ bool SOLID(effect_params_t* params) {
return led_matrix_check_finished_leds(led_max);
}
-#endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/led_matrix/animations/solid_reactive_cross.h b/quantum/led_matrix/animations/solid_reactive_cross.h
index a149e9a929..55a2556996 100644
--- a/quantum/led_matrix/animations/solid_reactive_cross.h
+++ b/quantum/led_matrix/animations/solid_reactive_cross.h
@@ -23,13 +23,17 @@ static uint8_t SOLID_REACTIVE_CROSS_math(uint8_t val, int16_t dx, int16_t dy, ui
}
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
-bool SOLID_REACTIVE_CROSS(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_CROSS_math); }
+bool SOLID_REACTIVE_CROSS(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_CROSS_math);
+}
# endif
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
-bool SOLID_REACTIVE_MULTICROSS(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_CROSS_math); }
+bool SOLID_REACTIVE_MULTICROSS(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_CROSS_math);
+}
# endif
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS) || defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS)
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS) || defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS)
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/solid_reactive_nexus.h b/quantum/led_matrix/animations/solid_reactive_nexus.h
index 5a86e48c6c..b1ec54e3b1 100644
--- a/quantum/led_matrix/animations/solid_reactive_nexus.h
+++ b/quantum/led_matrix/animations/solid_reactive_nexus.h
@@ -20,13 +20,17 @@ static uint8_t SOLID_REACTIVE_NEXUS_math(uint8_t val, int16_t dx, int16_t dy, ui
}
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
-bool SOLID_REACTIVE_NEXUS(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_NEXUS_math); }
+bool SOLID_REACTIVE_NEXUS(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_NEXUS_math);
+}
# endif
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
-bool SOLID_REACTIVE_MULTINEXUS(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_NEXUS_math); }
+bool SOLID_REACTIVE_MULTINEXUS(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_NEXUS_math);
+}
# endif
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS) || defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS)
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS) || defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS)
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/solid_reactive_simple_anim.h b/quantum/led_matrix/animations/solid_reactive_simple_anim.h
index 14f5e90730..3b289c78dd 100644
--- a/quantum/led_matrix/animations/solid_reactive_simple_anim.h
+++ b/quantum/led_matrix/animations/solid_reactive_simple_anim.h
@@ -3,10 +3,14 @@
LED_MATRIX_EFFECT(SOLID_REACTIVE_SIMPLE)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t SOLID_REACTIVE_SIMPLE_math(uint8_t val, uint16_t offset) { return scale8(255 - offset, val); }
+static uint8_t SOLID_REACTIVE_SIMPLE_math(uint8_t val, uint16_t offset) {
+ return scale8(255 - offset, val);
+}
-bool SOLID_REACTIVE_SIMPLE(effect_params_t* params) { return effect_runner_reactive(params, &SOLID_REACTIVE_SIMPLE_math); }
+bool SOLID_REACTIVE_SIMPLE(effect_params_t* params) {
+ return effect_runner_reactive(params, &SOLID_REACTIVE_SIMPLE_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/solid_reactive_wide.h b/quantum/led_matrix/animations/solid_reactive_wide.h
index 3aa88063a7..96338113f1 100644
--- a/quantum/led_matrix/animations/solid_reactive_wide.h
+++ b/quantum/led_matrix/animations/solid_reactive_wide.h
@@ -18,13 +18,17 @@ static uint8_t SOLID_REACTIVE_WIDE_math(uint8_t val, int16_t dx, int16_t dy, uin
}
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
-bool SOLID_REACTIVE_WIDE(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_WIDE_math); }
+bool SOLID_REACTIVE_WIDE(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_WIDE_math);
+}
# endif
# ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
-bool SOLID_REACTIVE_MULTIWIDE(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_WIDE_math); }
+bool SOLID_REACTIVE_MULTIWIDE(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_WIDE_math);
+}
# endif
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE) || !defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE)
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE) || !defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE)
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/solid_splash_anim.h b/quantum/led_matrix/animations/solid_splash_anim.h
index 17b692a09a..b8b6e8ea5e 100644
--- a/quantum/led_matrix/animations/solid_splash_anim.h
+++ b/quantum/led_matrix/animations/solid_splash_anim.h
@@ -18,13 +18,17 @@ uint8_t SOLID_SPLASH_math(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uin
}
# ifdef ENABLE_LED_MATRIX_SOLID_SPLASH
-bool SOLID_SPLASH(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_SPLASH_math); }
+bool SOLID_SPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_SPLASH_math);
+}
# endif
# ifdef ENABLE_LED_MATRIX_SOLID_MULTISPLASH
-bool SOLID_MULTISPLASH(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_SPLASH_math); }
+bool SOLID_MULTISPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_SPLASH_math);
+}
# endif
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // defined(ENABLE_LED_MATRIX_SPLASH) || defined(ENABLE_LED_MATRIX_MULTISPLASH)
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // defined(ENABLE_LED_MATRIX_SPLASH) || defined(ENABLE_LED_MATRIX_MULTISPLASH)
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/led_matrix/animations/wave_left_right_anim.h b/quantum/led_matrix/animations/wave_left_right_anim.h
index 76487f8515..8dedd64738 100644
--- a/quantum/led_matrix/animations/wave_left_right_anim.h
+++ b/quantum/led_matrix/animations/wave_left_right_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(WAVE_LEFT_RIGHT)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t WAVE_LEFT_RIGHT_math(uint8_t val, uint8_t i, uint8_t time) { return scale8(sin8(g_led_config.point[i].x - time), val); }
+static uint8_t WAVE_LEFT_RIGHT_math(uint8_t val, uint8_t i, uint8_t time) {
+ return scale8(sin8(g_led_config.point[i].x - time), val);
+}
-bool WAVE_LEFT_RIGHT(effect_params_t* params) { return effect_runner_i(params, &WAVE_LEFT_RIGHT_math); }
+bool WAVE_LEFT_RIGHT(effect_params_t* params) {
+ return effect_runner_i(params, &WAVE_LEFT_RIGHT_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
diff --git a/quantum/led_matrix/animations/wave_up_down_anim.h b/quantum/led_matrix/animations/wave_up_down_anim.h
index 94710f5c6e..4564f3e493 100644
--- a/quantum/led_matrix/animations/wave_up_down_anim.h
+++ b/quantum/led_matrix/animations/wave_up_down_anim.h
@@ -2,9 +2,13 @@
LED_MATRIX_EFFECT(WAVE_UP_DOWN)
# ifdef LED_MATRIX_CUSTOM_EFFECT_IMPLS
-static uint8_t WAVE_UP_DOWN_math(uint8_t val, uint8_t i, uint8_t time) { return scale8(sin8(g_led_config.point[i].y - time), val); }
+static uint8_t WAVE_UP_DOWN_math(uint8_t val, uint8_t i, uint8_t time) {
+ return scale8(sin8(g_led_config.point[i].y - time), val);
+}
-bool WAVE_UP_DOWN(effect_params_t* params) { return effect_runner_i(params, &WAVE_UP_DOWN_math); }
+bool WAVE_UP_DOWN(effect_params_t* params) {
+ return effect_runner_i(params, &WAVE_UP_DOWN_math);
+}
-# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_LED_MATRIX_WAVE_UP_DOWN
+# endif // LED_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_LED_MATRIX_WAVE_UP_DOWN
diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c
index be1494e884..38ed79bed0 100644
--- a/quantum/led_matrix/led_matrix.c
+++ b/quantum/led_matrix/led_matrix.c
@@ -88,14 +88,14 @@ const led_point_t k_led_matrix_center = LED_MATRIX_CENTER;
#endif
// globals
-led_eeconfig_t led_matrix_eeconfig; // TODO: would like to prefix this with g_ for global consistancy, do this in another pr
+led_eeconfig_t led_matrix_eeconfig; // TODO: would like to prefix this with g_ for global consistancy, do this in another pr
uint32_t g_led_timer;
#ifdef LED_MATRIX_FRAMEBUFFER_EFFECTS
uint8_t g_led_frame_buffer[MATRIX_ROWS][MATRIX_COLS] = {{0}};
-#endif // LED_MATRIX_FRAMEBUFFER_EFFECTS
+#endif // LED_MATRIX_FRAMEBUFFER_EFFECTS
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
last_hit_t g_last_hit_tracker;
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
// internals
static bool suspend_state = false;
@@ -105,13 +105,13 @@ static effect_params_t led_effect_params = {0, LED_FLAG_ALL, false};
static led_task_states led_task_state = SYNCING;
#if LED_DISABLE_TIMEOUT > 0
static uint32_t led_anykey_timer;
-#endif // LED_DISABLE_TIMEOUT > 0
+#endif // LED_DISABLE_TIMEOUT > 0
// double buffers
static uint32_t led_timer_buffer;
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
static last_hit_t last_hit_buffer;
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
// split led matrix
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
@@ -120,7 +120,9 @@ const uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT;
EECONFIG_DEBOUNCE_HELPER(led_matrix, EECONFIG_LED_MATRIX, led_matrix_eeconfig);
-void eeconfig_update_led_matrix(void) { eeconfig_flush_led_matrix(true); }
+void eeconfig_update_led_matrix(void) {
+ eeconfig_flush_led_matrix(true);
+}
void eeconfig_update_led_matrix_default(void) {
dprintf("eeconfig_update_led_matrix_default\n");
@@ -141,7 +143,9 @@ void eeconfig_debug_led_matrix(void) {
dprintf("led_matrix_eeconfig.flags = %d\n", led_matrix_eeconfig.flags);
}
-__attribute__((weak)) uint8_t led_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) { return 0; }
+__attribute__((weak)) uint8_t led_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) {
+ return 0;
+}
uint8_t led_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *led_i) {
uint8_t led_count = led_matrix_map_row_column_to_led_kb(row, column, led_i);
@@ -153,7 +157,9 @@ uint8_t led_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l
return led_count;
}
-void led_matrix_update_pwm_buffers(void) { led_matrix_driver.flush(); }
+void led_matrix_update_pwm_buffers(void) {
+ led_matrix_driver.flush();
+}
void led_matrix_set_value(int index, uint8_t value) {
#ifdef USE_CIE1931_CURVE
@@ -164,7 +170,8 @@ void led_matrix_set_value(int index, uint8_t value) {
void led_matrix_set_value_all(uint8_t value) {
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
- for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) led_matrix_set_value(i, value);
+ for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++)
+ led_matrix_set_value(i, value);
#else
# ifdef USE_CIE1931_CURVE
led_matrix_driver.set_value_all(pgm_read_byte(&CIE1931_CURVE[value]));
@@ -180,7 +187,7 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) {
#endif
#if LED_DISABLE_TIMEOUT > 0
led_anykey_timer = 0;
-#endif // LED_DISABLE_TIMEOUT > 0
+#endif // LED_DISABLE_TIMEOUT > 0
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
uint8_t led[LED_HITS_TO_REMEMBER];
@@ -190,7 +197,7 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) {
if (!pressed)
# elif defined(LED_MATRIX_KEYPRESSES)
if (pressed)
-# endif // defined(LED_MATRIX_KEYRELEASES)
+# endif // defined(LED_MATRIX_KEYRELEASES)
{
led_count = led_matrix_map_row_column_to_led(row, col, led);
}
@@ -198,7 +205,7 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) {
if (last_hit_buffer.count + led_count > LED_HITS_TO_REMEMBER) {
memcpy(&last_hit_buffer.x[0], &last_hit_buffer.x[led_count], LED_HITS_TO_REMEMBER - led_count);
memcpy(&last_hit_buffer.y[0], &last_hit_buffer.y[led_count], LED_HITS_TO_REMEMBER - led_count);
- memcpy(&last_hit_buffer.tick[0], &last_hit_buffer.tick[led_count], (LED_HITS_TO_REMEMBER - led_count) * 2); // 16 bit
+ memcpy(&last_hit_buffer.tick[0], &last_hit_buffer.tick[led_count], (LED_HITS_TO_REMEMBER - led_count) * 2); // 16 bit
memcpy(&last_hit_buffer.index[0], &last_hit_buffer.index[led_count], LED_HITS_TO_REMEMBER - led_count);
last_hit_buffer.count = LED_HITS_TO_REMEMBER - led_count;
}
@@ -211,13 +218,13 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) {
last_hit_buffer.tick[index] = 0;
last_hit_buffer.count++;
}
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
#if defined(LED_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_LED_MATRIX_TYPING_HEATMAP)
if (led_matrix_eeconfig.mode == LED_MATRIX_TYPING_HEATMAP) {
process_led_matrix_typing_heatmap(row, col);
}
-#endif // defined(LED_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_LED_MATRIX_TYPING_HEATMAP)
+#endif // defined(LED_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_LED_MATRIX_TYPING_HEATMAP)
}
static bool led_matrix_none(effect_params_t *params) {
@@ -232,7 +239,7 @@ static bool led_matrix_none(effect_params_t *params) {
static void led_task_timers(void) {
#if defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_DISABLE_TIMEOUT > 0
uint32_t deltaTime = sync_timer_elapsed32(led_timer_buffer);
-#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_DISABLE_TIMEOUT > 0
+#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_DISABLE_TIMEOUT > 0
led_timer_buffer = sync_timer_read32();
// Update double buffer timers
@@ -244,7 +251,7 @@ static void led_task_timers(void) {
led_anykey_timer += deltaTime;
}
}
-#endif // LED_DISABLE_TIMEOUT > 0
+#endif // LED_DISABLE_TIMEOUT > 0
// Update double buffer last hit timers
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
@@ -256,7 +263,7 @@ static void led_task_timers(void) {
}
last_hit_buffer.tick[i] += deltaTime;
}
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
}
static void led_task_sync(void) {
@@ -273,7 +280,7 @@ static void led_task_start(void) {
g_led_timer = led_timer_buffer;
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
g_last_hit_tracker = last_hit_buffer;
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
// next task
led_task_state = RENDERING;
@@ -352,7 +359,7 @@ void led_matrix_task(void) {
bool suspend_backlight = suspend_state ||
#if LED_DISABLE_TIMEOUT > 0
(led_anykey_timer > (uint32_t)LED_DISABLE_TIMEOUT) ||
-#endif // LED_DISABLE_TIMEOUT > 0
+#endif // LED_DISABLE_TIMEOUT > 0
false;
uint8_t effect = suspend_backlight || !led_matrix_eeconfig.enable ? 0 : led_matrix_eeconfig.mode;
@@ -421,7 +428,7 @@ void led_matrix_init(void) {
for (uint8_t i = 0; i < LED_HITS_TO_REMEMBER; ++i) {
last_hit_buffer.tick[i] = UINT16_MAX;
}
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
if (!eeconfig_is_enabled()) {
dprintf("led_matrix_init_drivers eeconfig is not enabled.\n");
@@ -434,20 +441,22 @@ void led_matrix_init(void) {
dprintf("led_matrix_init_drivers led_matrix_eeconfig.mode = 0. Write default values to EEPROM.\n");
eeconfig_update_led_matrix_default();
}
- eeconfig_debug_led_matrix(); // display current eeprom values
+ eeconfig_debug_led_matrix(); // display current eeprom values
}
void led_matrix_set_suspend_state(bool state) {
#ifdef LED_DISABLE_WHEN_USB_SUSPENDED
- if (state && !suspend_state && is_keyboard_master()) { // only run if turning off, and only once
- led_task_render(0); // turn off all LEDs when suspending
- led_task_flush(0); // and actually flash led state to LEDs
+ if (state && !suspend_state && is_keyboard_master()) { // only run if turning off, and only once
+ led_task_render(0); // turn off all LEDs when suspending
+ led_task_flush(0); // and actually flash led state to LEDs
}
suspend_state = state;
#endif
}
-bool led_matrix_get_suspend_state(void) { return suspend_state; }
+bool led_matrix_get_suspend_state(void) {
+ return suspend_state;
+}
void led_matrix_toggle_eeprom_helper(bool write_to_eeprom) {
led_matrix_eeconfig.enable ^= 1;
@@ -455,8 +464,12 @@ void led_matrix_toggle_eeprom_helper(bool write_to_eeprom) {
eeconfig_flag_led_matrix(write_to_eeprom);
dprintf("led matrix toggle [%s]: led_matrix_eeconfig.enable = %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", led_matrix_eeconfig.enable);
}
-void led_matrix_toggle_noeeprom(void) { led_matrix_toggle_eeprom_helper(false); }
-void led_matrix_toggle(void) { led_matrix_toggle_eeprom_helper(true); }
+void led_matrix_toggle_noeeprom(void) {
+ led_matrix_toggle_eeprom_helper(false);
+}
+void led_matrix_toggle(void) {
+ led_matrix_toggle_eeprom_helper(true);
+}
void led_matrix_enable(void) {
led_matrix_enable_noeeprom();
@@ -478,7 +491,9 @@ void led_matrix_disable_noeeprom(void) {
led_matrix_eeconfig.enable = 0;
}
-uint8_t led_matrix_is_enabled(void) { return led_matrix_eeconfig.enable; }
+uint8_t led_matrix_is_enabled(void) {
+ return led_matrix_eeconfig.enable;
+}
void led_matrix_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
if (!led_matrix_eeconfig.enable) {
@@ -495,24 +510,38 @@ void led_matrix_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
eeconfig_flag_led_matrix(write_to_eeprom);
dprintf("led matrix mode [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", led_matrix_eeconfig.mode);
}
-void led_matrix_mode_noeeprom(uint8_t mode) { led_matrix_mode_eeprom_helper(mode, false); }
-void led_matrix_mode(uint8_t mode) { led_matrix_mode_eeprom_helper(mode, true); }
+void led_matrix_mode_noeeprom(uint8_t mode) {
+ led_matrix_mode_eeprom_helper(mode, false);
+}
+void led_matrix_mode(uint8_t mode) {
+ led_matrix_mode_eeprom_helper(mode, true);
+}
-uint8_t led_matrix_get_mode(void) { return led_matrix_eeconfig.mode; }
+uint8_t led_matrix_get_mode(void) {
+ return led_matrix_eeconfig.mode;
+}
void led_matrix_step_helper(bool write_to_eeprom) {
uint8_t mode = led_matrix_eeconfig.mode + 1;
led_matrix_mode_eeprom_helper((mode < LED_MATRIX_EFFECT_MAX) ? mode : 1, write_to_eeprom);
}
-void led_matrix_step_noeeprom(void) { led_matrix_step_helper(false); }
-void led_matrix_step(void) { led_matrix_step_helper(true); }
+void led_matrix_step_noeeprom(void) {
+ led_matrix_step_helper(false);
+}
+void led_matrix_step(void) {
+ led_matrix_step_helper(true);
+}
void led_matrix_step_reverse_helper(bool write_to_eeprom) {
uint8_t mode = led_matrix_eeconfig.mode - 1;
led_matrix_mode_eeprom_helper((mode < 1) ? LED_MATRIX_EFFECT_MAX - 1 : mode, write_to_eeprom);
}
-void led_matrix_step_reverse_noeeprom(void) { led_matrix_step_reverse_helper(false); }
-void led_matrix_step_reverse(void) { led_matrix_step_reverse_helper(true); }
+void led_matrix_step_reverse_noeeprom(void) {
+ led_matrix_step_reverse_helper(false);
+}
+void led_matrix_step_reverse(void) {
+ led_matrix_step_reverse_helper(true);
+}
void led_matrix_set_val_eeprom_helper(uint8_t val, bool write_to_eeprom) {
if (!led_matrix_eeconfig.enable) {
@@ -522,37 +551,77 @@ void led_matrix_set_val_eeprom_helper(uint8_t val, bool write_to_eeprom) {
eeconfig_flag_led_matrix(write_to_eeprom);
dprintf("led matrix set val [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", led_matrix_eeconfig.val);
}
-void led_matrix_set_val_noeeprom(uint8_t val) { led_matrix_set_val_eeprom_helper(val, false); }
-void led_matrix_set_val(uint8_t val) { led_matrix_set_val_eeprom_helper(val, true); }
+void led_matrix_set_val_noeeprom(uint8_t val) {
+ led_matrix_set_val_eeprom_helper(val, false);
+}
+void led_matrix_set_val(uint8_t val) {
+ led_matrix_set_val_eeprom_helper(val, true);
+}
-uint8_t led_matrix_get_val(void) { return led_matrix_eeconfig.val; }
+uint8_t led_matrix_get_val(void) {
+ return led_matrix_eeconfig.val;
+}
-void led_matrix_increase_val_helper(bool write_to_eeprom) { led_matrix_set_val_eeprom_helper(qadd8(led_matrix_eeconfig.val, LED_MATRIX_VAL_STEP), write_to_eeprom); }
-void led_matrix_increase_val_noeeprom(void) { led_matrix_increase_val_helper(false); }
-void led_matrix_increase_val(void) { led_matrix_increase_val_helper(true); }
+void led_matrix_increase_val_helper(bool write_to_eeprom) {
+ led_matrix_set_val_eeprom_helper(qadd8(led_matrix_eeconfig.val, LED_MATRIX_VAL_STEP), write_to_eeprom);
+}
+void led_matrix_increase_val_noeeprom(void) {
+ led_matrix_increase_val_helper(false);
+}
+void led_matrix_increase_val(void) {
+ led_matrix_increase_val_helper(true);
+}
-void led_matrix_decrease_val_helper(bool write_to_eeprom) { led_matrix_set_val_eeprom_helper(qsub8(led_matrix_eeconfig.val, LED_MATRIX_VAL_STEP), write_to_eeprom); }
-void led_matrix_decrease_val_noeeprom(void) { led_matrix_decrease_val_helper(false); }
-void led_matrix_decrease_val(void) { led_matrix_decrease_val_helper(true); }
+void led_matrix_decrease_val_helper(bool write_to_eeprom) {
+ led_matrix_set_val_eeprom_helper(qsub8(led_matrix_eeconfig.val, LED_MATRIX_VAL_STEP), write_to_eeprom);
+}
+void led_matrix_decrease_val_noeeprom(void) {
+ led_matrix_decrease_val_helper(false);
+}
+void led_matrix_decrease_val(void) {
+ led_matrix_decrease_val_helper(true);
+}
void led_matrix_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) {
led_matrix_eeconfig.speed = speed;
eeconfig_flag_led_matrix(write_to_eeprom);
dprintf("led matrix set speed [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", led_matrix_eeconfig.speed);
}
-void led_matrix_set_speed_noeeprom(uint8_t speed) { led_matrix_set_speed_eeprom_helper(speed, false); }
-void led_matrix_set_speed(uint8_t speed) { led_matrix_set_speed_eeprom_helper(speed, true); }
+void led_matrix_set_speed_noeeprom(uint8_t speed) {
+ led_matrix_set_speed_eeprom_helper(speed, false);
+}
+void led_matrix_set_speed(uint8_t speed) {
+ led_matrix_set_speed_eeprom_helper(speed, true);
+}
-uint8_t led_matrix_get_speed(void) { return led_matrix_eeconfig.speed; }
+uint8_t led_matrix_get_speed(void) {
+ return led_matrix_eeconfig.speed;
+}
-void led_matrix_increase_speed_helper(bool write_to_eeprom) { led_matrix_set_speed_eeprom_helper(qadd8(led_matrix_eeconfig.speed, LED_MATRIX_SPD_STEP), write_to_eeprom); }
-void led_matrix_increase_speed_noeeprom(void) { led_matrix_increase_speed_helper(false); }
-void led_matrix_increase_speed(void) { led_matrix_increase_speed_helper(true); }
+void led_matrix_increase_speed_helper(bool write_to_eeprom) {
+ led_matrix_set_speed_eeprom_helper(qadd8(led_matrix_eeconfig.speed, LED_MATRIX_SPD_STEP), write_to_eeprom);
+}
+void led_matrix_increase_speed_noeeprom(void) {
+ led_matrix_increase_speed_helper(false);
+}
+void led_matrix_increase_speed(void) {
+ led_matrix_increase_speed_helper(true);
+}
-void led_matrix_decrease_speed_helper(bool write_to_eeprom) { led_matrix_set_speed_eeprom_helper(qsub8(led_matrix_eeconfig.speed, LED_MATRIX_SPD_STEP), write_to_eeprom); }
-void led_matrix_decrease_speed_noeeprom(void) { led_matrix_decrease_speed_helper(false); }
-void led_matrix_decrease_speed(void) { led_matrix_decrease_speed_helper(true); }
+void led_matrix_decrease_speed_helper(bool write_to_eeprom) {
+ led_matrix_set_speed_eeprom_helper(qsub8(led_matrix_eeconfig.speed, LED_MATRIX_SPD_STEP), write_to_eeprom);
+}
+void led_matrix_decrease_speed_noeeprom(void) {
+ led_matrix_decrease_speed_helper(false);
+}
+void led_matrix_decrease_speed(void) {
+ led_matrix_decrease_speed_helper(true);
+}
-led_flags_t led_matrix_get_flags(void) { return led_matrix_eeconfig.flags; }
+led_flags_t led_matrix_get_flags(void) {
+ return led_matrix_eeconfig.flags;
+}
-void led_matrix_set_flags(led_flags_t flags) { led_matrix_eeconfig.flags = flags; }
+void led_matrix_set_flags(led_flags_t flags) {
+ led_matrix_eeconfig.flags = flags;
+}
diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h
index e42be64661..d21f36e295 100644
--- a/quantum/led_matrix/led_matrix.h
+++ b/quantum/led_matrix/led_matrix.h
@@ -2,6 +2,7 @@
* Copyright 2017 Jack Humbert
* Copyright 2018 Yiancar
* Copyright 2019 Clueboard
+ * Copyright 2021 Leo Deng
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,6 +27,11 @@
#ifdef IS31FL3731
# include "is31fl3731-simple.h"
+#elif defined(IS31FLCOMMON)
+# include "is31flcommon.h"
+#endif
+#ifdef IS31FL3733
+# include "is31fl3733-simple.h"
#endif
#ifndef LED_MATRIX_LED_FLUSH_LIMIT
diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c
index 2157619a0b..847ca1c310 100644
--- a/quantum/led_matrix/led_matrix_drivers.c
+++ b/quantum/led_matrix/led_matrix_drivers.c
@@ -25,7 +25,7 @@
* in their own files.
*/
-#if defined(IS31FL3731) || defined(IS31FL3733)
+#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FLCOMMON)
# include "i2c_master.h"
static void init(void) {
@@ -66,6 +66,18 @@ static void init(void) {
# endif
# endif
# endif
+
+# elif defined(IS31FLCOMMON)
+ IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1);
+# if defined(LED_DRIVER_ADDR_2)
+ IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2);
+# if defined(LED_DRIVER_ADDR_3)
+ IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3);
+# if defined(LED_DRIVER_ADDR_4)
+ IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4);
+# endif
+# endif
+# endif
# endif
for (int index = 0; index < DRIVER_LED_TOTAL; index++) {
@@ -73,6 +85,8 @@ static void init(void) {
IS31FL3731_set_led_control_register(index, true);
# elif defined(IS31FL3733)
IS31FL3733_set_led_control_register(index, true);
+# elif defined(IS31FLCOMMON)
+ IS31FL_simple_set_scaling_buffer(index, true);
# endif
}
@@ -100,6 +114,21 @@ static void init(void) {
# endif
# endif
# endif
+
+# elif defined(IS31FLCOMMON)
+# ifdef ISSI_MANUAL_SCALING
+ IS31FL_set_manual_scaling_buffer();
+# endif
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0);
+# if defined(LED_DRIVER_ADDR_2)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1);
+# if defined(LED_DRIVER_ADDR_3)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2);
+# if defined(LED_DRIVER_ADDR_4)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
# endif
}
@@ -144,5 +173,26 @@ const led_matrix_driver_t led_matrix_driver = {
.set_value = IS31FL3733_set_value,
.set_value_all = IS31FL3733_set_value_all,
};
+
+# elif defined(IS31FLCOMMON)
+static void flush(void) {
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_1, 0);
+# if defined(LED_DRIVER_ADDR_2)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_2, 1);
+# if defined(LED_DRIVER_ADDR_3)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_3, 2);
+# if defined(LED_DRIVER_ADDR_4)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
+}
+
+const led_matrix_driver_t led_matrix_driver = {
+ .init = init,
+ .flush = flush,
+ .set_value = IS31FL_simple_set_brightness,
+ .set_value_all = IS31FL_simple_set_brigntness_all,
+};
# endif
#endif
diff --git a/quantum/led_matrix/led_matrix_types.h b/quantum/led_matrix/led_matrix_types.h
index 61cdbd9b8e..3dc533100f 100644
--- a/quantum/led_matrix/led_matrix_types.h
+++ b/quantum/led_matrix/led_matrix_types.h
@@ -36,7 +36,7 @@
// Last led hit
#ifndef LED_HITS_TO_REMEMBER
# define LED_HITS_TO_REMEMBER 8
-#endif // LED_HITS_TO_REMEMBER
+#endif // LED_HITS_TO_REMEMBER
#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
typedef struct PACKED {
@@ -46,7 +46,7 @@ typedef struct PACKED {
uint8_t index[LED_HITS_TO_REMEMBER];
uint16_t tick[LED_HITS_TO_REMEMBER];
} last_hit_t;
-#endif // LED_MATRIX_KEYREACTIVE_ENABLED
+#endif // LED_MATRIX_KEYREACTIVE_ENABLED
typedef enum led_task_states { STARTING, RENDERING, FLUSHING, SYNCING } led_task_states;
@@ -87,7 +87,7 @@ typedef union {
uint8_t mode : 6;
uint16_t reserved;
uint8_t val;
- uint8_t speed; // EECONFIG needs to be increased to support this
+ uint8_t speed; // EECONFIG needs to be increased to support this
led_flags_t flags;
};
} led_eeconfig_t;
diff --git a/quantum/logging/debug.c b/quantum/logging/debug.c
index ea62deaa8c..ca7654eda2 100644
--- a/quantum/logging/debug.c
+++ b/quantum/logging/debug.c
@@ -17,9 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
debug_config_t debug_config = {
- .enable = false, //
- .matrix = false, //
- .keyboard = false, //
- .mouse = false, //
- .reserved = 0 //
+ .enable = false, //
+ .matrix = false, //
+ .keyboard = false, //
+ .mouse = false, //
+ .reserved = 0 //
};
diff --git a/quantum/logging/print.c b/quantum/logging/print.c
index e8440e55ee..50a6b826ee 100644
--- a/quantum/logging/print.c
+++ b/quantum/logging/print.c
@@ -19,9 +19,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// bind lib/printf to console interface - sendchar
-static int8_t null_sendchar_func(uint8_t c) { return 0; }
+static int8_t null_sendchar_func(uint8_t c) {
+ return 0;
+}
static sendchar_func_t func = null_sendchar_func;
-void print_set_sendchar(sendchar_func_t send) { func = send; }
+void print_set_sendchar(sendchar_func_t send) {
+ func = send;
+}
-void _putchar(char character) { func(character); }
+void _putchar(char character) {
+ func(character);
+}
diff --git a/quantum/logging/print.h b/quantum/logging/print.h
index 8c055f549e..aa72fc7074 100644
--- a/quantum/logging/print.h
+++ b/quantum/logging/print.h
@@ -37,7 +37,7 @@ void print_set_sendchar(sendchar_func_t func);
# include_next "_print.h" /* Include the platforms print.h */
# else
// Fall back to lib/printf
-# include "printf.h" // lib/printf/printf.h
+# include "printf.h" // lib/printf/printf.h
// Create user & normal print defines
# define print(s) printf(s)
diff --git a/quantum/logging/sendchar.c b/quantum/logging/sendchar.c
index 9422382f6f..5bc744b743 100644
--- a/quantum/logging/sendchar.c
+++ b/quantum/logging/sendchar.c
@@ -17,4 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "sendchar.h"
/* default noop "null" implementation */
-__attribute__((weak)) int8_t sendchar(uint8_t c) { return 0; }
+__attribute__((weak)) int8_t sendchar(uint8_t c) {
+ return 0;
+}
diff --git a/quantum/main.c b/quantum/main.c
index 6ed6b95741..faba668056 100644
--- a/quantum/main.c
+++ b/quantum/main.c
@@ -45,7 +45,7 @@ void protocol_task(void) {
#ifdef DEFERRED_EXEC_ENABLE
void deferred_exec_task(void);
-#endif // DEFERRED_EXEC_ENABLE
+#endif // DEFERRED_EXEC_ENABLE
/** \brief Main
*
@@ -66,7 +66,7 @@ int main(void) {
#ifdef DEFERRED_EXEC_ENABLE
// Run deferred executions
deferred_exec_task();
-#endif // DEFERRED_EXEC_ENABLE
+#endif // DEFERRED_EXEC_ENABLE
housekeeping_task();
}
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 8596c2eabd..db59b73754 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -47,33 +47,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
#ifdef DIRECT_PINS
-static SPLIT_MUTABLE pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
+static SPLIT_MUTABLE pin_t direct_pins[ROWS_PER_HAND][MATRIX_COLS] = DIRECT_PINS;
#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
# ifdef MATRIX_ROW_PINS
-static SPLIT_MUTABLE_ROW pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-# endif // MATRIX_ROW_PINS
+static SPLIT_MUTABLE_ROW pin_t row_pins[ROWS_PER_HAND] = MATRIX_ROW_PINS;
+# endif // MATRIX_ROW_PINS
# ifdef MATRIX_COL_PINS
-static SPLIT_MUTABLE_COL pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-# endif // MATRIX_COL_PINS
+static SPLIT_MUTABLE_COL pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+# endif // MATRIX_COL_PINS
#endif
/* matrix state(1:on, 0:off) */
-extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
-extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
#ifdef SPLIT_KEYBOARD
// row offsets for each hand
-uint8_t thisHand, thatHand;
+extern uint8_t thisHand, thatHand;
#endif
// user-defined overridable functions
__attribute__((weak)) void matrix_init_pins(void);
__attribute__((weak)) void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
__attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter);
-#ifdef SPLIT_KEYBOARD
-__attribute__((weak)) void matrix_slave_scan_kb(void) { matrix_slave_scan_user(); }
-__attribute__((weak)) void matrix_slave_scan_user(void) {}
-#endif
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
@@ -90,7 +86,9 @@ static inline void setPinOutput_writeHigh(pin_t pin) {
}
static inline void setPinInputHigh_atomic(pin_t pin) {
- ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); }
+ ATOMIC_BLOCK_FORCEON {
+ setPinInputHigh(pin);
+ }
}
static inline uint8_t readMatrixPin(pin_t pin) {
@@ -106,7 +104,7 @@ static inline uint8_t readMatrixPin(pin_t pin) {
#ifdef DIRECT_PINS
__attribute__((weak)) void matrix_init_pins(void) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
+ for (int row = 0; row < ROWS_PER_HAND; row++) {
for (int col = 0; col < MATRIX_COLS; col++) {
pin_t pin = direct_pins[row][col];
if (pin != NO_PIN) {
@@ -175,8 +173,8 @@ __attribute__((weak)) void matrix_read_cols_on_row(matrix_row_t current_matrix[]
// Start with a clear matrix row
matrix_row_t current_row_value = 0;
- if (!select_row(current_row)) { // Select row
- return; // skip NO_PIN row
+ if (!select_row(current_row)) { // Select row
+ return; // skip NO_PIN row
}
matrix_output_select_delay();
@@ -191,7 +189,7 @@ __attribute__((weak)) void matrix_read_cols_on_row(matrix_row_t current_matrix[]
// Unselect row
unselect_row(current_row);
- matrix_output_unselect_delay(current_row, current_row_value != 0); // wait for all Col signals to go HIGH
+ matrix_output_unselect_delay(current_row, current_row_value != 0); // wait for all Col signals to go HIGH
// Update the matrix
current_matrix[current_row] = current_row_value;
@@ -238,8 +236,8 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
bool key_pressed = false;
// Select col
- if (!select_col(current_col)) { // select col
- return; // skip NO_PIN col
+ if (!select_col(current_col)) { // select col
+ return; // skip NO_PIN col
}
matrix_output_select_delay();
@@ -258,34 +256,32 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
// Unselect col
unselect_col(current_col);
- matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
# else
# error DIODE_DIRECTION must be one of COL2ROW or ROW2COL!
# endif
-# endif // defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
+# endif // defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
#else
# error DIODE_DIRECTION is not defined!
#endif
void matrix_init(void) {
#ifdef SPLIT_KEYBOARD
- split_pre_init();
-
// Set pinout for right half if pinout for that half is defined
if (!isLeftHand) {
# ifdef DIRECT_PINS_RIGHT
- const pin_t direct_pins_right[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ const pin_t direct_pins_right[ROWS_PER_HAND][MATRIX_COLS] = DIRECT_PINS_RIGHT;
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
for (uint8_t j = 0; j < MATRIX_COLS; j++) {
direct_pins[i][j] = direct_pins_right[i][j];
}
}
# endif
# ifdef MATRIX_ROW_PINS_RIGHT
- const pin_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ const pin_t row_pins_right[ROWS_PER_HAND] = MATRIX_ROW_PINS_RIGHT;
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
row_pins[i] = row_pins_right[i];
}
# endif
@@ -311,46 +307,13 @@ void matrix_init(void) {
debounce_init(ROWS_PER_HAND);
matrix_init_quantum();
-
-#ifdef SPLIT_KEYBOARD
- split_post_init();
-#endif
}
#ifdef SPLIT_KEYBOARD
// Fallback implementation for keyboards not using the standard split_util.c
__attribute__((weak)) bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
transport_master(master_matrix, slave_matrix);
- return true; // Treat the transport as always connected
-}
-
-bool matrix_post_scan(void) {
- bool changed = false;
- if (is_keyboard_master()) {
- static bool last_connected = false;
- matrix_row_t slave_matrix[ROWS_PER_HAND] = {0};
- if (transport_master_if_connected(matrix + thisHand, slave_matrix)) {
- changed = memcmp(matrix + thatHand, slave_matrix, sizeof(slave_matrix)) != 0;
-
- last_connected = true;
- } else if (last_connected) {
- // reset other half when disconnected
- memset(slave_matrix, 0, sizeof(slave_matrix));
- changed = true;
-
- last_connected = false;
- }
-
- if (changed) memcpy(matrix + thatHand, slave_matrix, sizeof(slave_matrix));
-
- matrix_scan_quantum();
- } else {
- transport_slave(matrix + thatHand, matrix + thisHand);
-
- matrix_slave_scan_kb();
- }
-
- return changed;
+ return true; // Treat the transport as always connected
}
#endif
diff --git a/quantum/matrix.h b/quantum/matrix.h
index 5c696622fc..d968efeb0f 100644
--- a/quantum/matrix.h
+++ b/quantum/matrix.h
@@ -46,8 +46,6 @@ void matrix_setup(void);
void matrix_init(void);
/* scan all key states on matrix */
uint8_t matrix_scan(void);
-/* whether modified from previous scan. used after matrix_scan. */
-bool matrix_is_modified(void) __attribute__((deprecated));
/* whether a switch is on */
bool matrix_is_on(uint8_t row, uint8_t col);
/* matrix state on row */
@@ -75,6 +73,7 @@ void matrix_init_user(void);
void matrix_scan_user(void);
#ifdef SPLIT_KEYBOARD
+bool matrix_post_scan(void);
void matrix_slave_scan_kb(void);
void matrix_slave_scan_user(void);
#endif
diff --git a/quantum/matrix_common.c b/quantum/matrix_common.c
index 66c89970b1..1497ceae71 100644
--- a/quantum/matrix_common.c
+++ b/quantum/matrix_common.c
@@ -4,6 +4,15 @@
#include "wait.h"
#include "print.h"
#include "debug.h"
+#ifdef SPLIT_KEYBOARD
+# include "split_common/split_util.h"
+# include "split_common/transactions.h"
+# include <string.h>
+
+# define ROWS_PER_HAND (MATRIX_ROWS / 2)
+#else
+# define ROWS_PER_HAND (MATRIX_ROWS)
+#endif
#ifndef MATRIX_IO_DELAY
# define MATRIX_IO_DELAY 30
@@ -13,15 +22,24 @@
matrix_row_t raw_matrix[MATRIX_ROWS];
matrix_row_t matrix[MATRIX_ROWS];
+#ifdef SPLIT_KEYBOARD
+// row offsets for each hand
+uint8_t thisHand, thatHand;
+#endif
+
#ifdef MATRIX_MASKED
extern const matrix_row_t matrix_mask[];
#endif
// user-defined overridable functions
-__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
+__attribute__((weak)) void matrix_init_kb(void) {
+ matrix_init_user();
+}
-__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
+__attribute__((weak)) void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
__attribute__((weak)) void matrix_init_user(void) {}
@@ -29,11 +47,17 @@ __attribute__((weak)) void matrix_scan_user(void) {}
// helper functions
-inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
+inline uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
-inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
+inline uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
-inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
+inline bool matrix_is_on(uint8_t row, uint8_t col) {
+ return (matrix[row] & ((matrix_row_t)1 << col));
+}
inline matrix_row_t matrix_get_row(uint8_t row) {
// Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
@@ -45,12 +69,6 @@ inline matrix_row_t matrix_get_row(uint8_t row) {
#endif
}
-// Deprecated.
-bool matrix_is_modified(void) {
- if (debounce_active()) return false;
- return true;
-}
-
#if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n")
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
@@ -84,18 +102,67 @@ uint8_t matrix_key_count(void) {
return count;
}
-/* `matrix_io_delay ()` exists for backwards compatibility. From now on, use matrix_output_unselect_delay(). */
-__attribute__((weak)) void matrix_io_delay(void) { wait_us(MATRIX_IO_DELAY); }
+#ifdef SPLIT_KEYBOARD
+bool matrix_post_scan(void) {
+ bool changed = false;
+ if (is_keyboard_master()) {
+ static bool last_connected = false;
+ matrix_row_t slave_matrix[ROWS_PER_HAND] = {0};
+ if (transport_master_if_connected(matrix + thisHand, slave_matrix)) {
+ changed = memcmp(matrix + thatHand, slave_matrix, sizeof(slave_matrix)) != 0;
+
+ last_connected = true;
+ } else if (last_connected) {
+ // reset other half when disconnected
+ memset(slave_matrix, 0, sizeof(slave_matrix));
+ changed = true;
-__attribute__((weak)) void matrix_output_select_delay(void) { waitInputPinDelay(); }
-__attribute__((weak)) void matrix_output_unselect_delay(uint8_t line, bool key_pressed) { matrix_io_delay(); }
+ last_connected = false;
+ }
+
+ if (changed) memcpy(matrix + thatHand, slave_matrix, sizeof(slave_matrix));
+
+ matrix_scan_quantum();
+ } else {
+ transport_slave(matrix + thatHand, matrix + thisHand);
+
+ matrix_slave_scan_kb();
+ }
+
+ return changed;
+}
+#endif
+
+/* `matrix_io_delay ()` exists for backwards compatibility. From now on, use matrix_output_unselect_delay(). */
+__attribute__((weak)) void matrix_io_delay(void) {
+ wait_us(MATRIX_IO_DELAY);
+}
+__attribute__((weak)) void matrix_output_select_delay(void) {
+ waitInputPinDelay();
+}
+__attribute__((weak)) void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
+ matrix_io_delay();
+}
// CUSTOM MATRIX 'LITE'
__attribute__((weak)) void matrix_init_custom(void) {}
+__attribute__((weak)) bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ return true;
+}
-__attribute__((weak)) bool matrix_scan_custom(matrix_row_t current_matrix[]) { return true; }
+#ifdef SPLIT_KEYBOARD
+__attribute__((weak)) void matrix_slave_scan_kb(void) {
+ matrix_slave_scan_user();
+}
+__attribute__((weak)) void matrix_slave_scan_user(void) {}
+#endif
__attribute__((weak)) void matrix_init(void) {
+#ifdef SPLIT_KEYBOARD
+ thisHand = isLeftHand ? 0 : (ROWS_PER_HAND);
+ thatHand = ROWS_PER_HAND - thisHand;
+#endif
+
matrix_init_custom();
// initialize matrix state: all keys off
@@ -104,7 +171,7 @@ __attribute__((weak)) void matrix_init(void) {
matrix[i] = 0;
}
- debounce_init(MATRIX_ROWS);
+ debounce_init(ROWS_PER_HAND);
matrix_init_quantum();
}
@@ -112,10 +179,17 @@ __attribute__((weak)) void matrix_init(void) {
__attribute__((weak)) uint8_t matrix_scan(void) {
bool changed = matrix_scan_custom(raw_matrix);
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
+#ifdef SPLIT_KEYBOARD
+ debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
+ changed = (changed || matrix_post_scan());
+#else
+ debounce(raw_matrix, matrix, ROWS_PER_HAND, changed);
matrix_scan_quantum();
+#endif
+
return changed;
}
-__attribute__((weak)) bool peek_matrix(uint8_t row_index, uint8_t col_index, bool raw) { return 0 != ((raw ? raw_matrix[row_index] : matrix[row_index]) & (MATRIX_ROW_SHIFTER << col_index)); }
+__attribute__((weak)) bool peek_matrix(uint8_t row_index, uint8_t col_index, bool raw) {
+ return 0 != ((raw ? raw_matrix[row_index] : matrix[row_index]) & (MATRIX_ROW_SHIFTER << col_index));
+}
diff --git a/quantum/mousekey.c b/quantum/mousekey.c
index c2291fb397..8bafbf977a 100644
--- a/quantum/mousekey.c
+++ b/quantum/mousekey.c
@@ -487,4 +487,6 @@ static void mousekey_debug(void) {
print(")\n");
}
-report_mouse_t mousekey_get_report(void) { return mouse_report; }
+report_mouse_t mousekey_get_report(void) {
+ return mouse_report;
+}
diff --git a/quantum/mousekey.h b/quantum/mousekey.h
index 56c91b5f1b..03da5f282a 100644
--- a/quantum/mousekey.h
+++ b/quantum/mousekey.h
@@ -37,9 +37,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# ifndef MOUSEKEY_MOVE_DELTA
# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_MOVE_DELTA 5
+# define MOUSEKEY_MOVE_DELTA 8
# else
-# define MOUSEKEY_MOVE_DELTA 25
+# define MOUSEKEY_MOVE_DELTA 5
# endif
# endif
# ifndef MOUSEKEY_WHEEL_DELTA
@@ -47,29 +47,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# endif
# ifndef MOUSEKEY_DELAY
# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_DELAY 300
+# define MOUSEKEY_DELAY 10
# else
-# define MOUSEKEY_DELAY 8
+# define MOUSEKEY_DELAY 5
# endif
# endif
# ifndef MOUSEKEY_INTERVAL
# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_INTERVAL 50
+# define MOUSEKEY_INTERVAL 20
# else
-# define MOUSEKEY_INTERVAL 8
+# define MOUSEKEY_INTERVAL 10
# endif
# endif
# ifndef MOUSEKEY_MAX_SPEED
# define MOUSEKEY_MAX_SPEED 10
# endif
# ifndef MOUSEKEY_TIME_TO_MAX
-# define MOUSEKEY_TIME_TO_MAX 20
+# define MOUSEKEY_TIME_TO_MAX 30
# endif
# ifndef MOUSEKEY_WHEEL_DELAY
-# define MOUSEKEY_WHEEL_DELAY 300
+# define MOUSEKEY_WHEEL_DELAY 10
# endif
# ifndef MOUSEKEY_WHEEL_INTERVAL
-# define MOUSEKEY_WHEEL_INTERVAL 100
+# define MOUSEKEY_WHEEL_INTERVAL 80
# endif
# ifndef MOUSEKEY_WHEEL_MAX_SPEED
# define MOUSEKEY_WHEEL_MAX_SPEED 8
diff --git a/quantum/pointing_device.c b/quantum/pointing_device.c
index 2fefdb67b6..9627cab4b8 100644
--- a/quantum/pointing_device.c
+++ b/quantum/pointing_device.c
@@ -18,24 +18,115 @@
#include "pointing_device.h"
#include <string.h>
+#include "timer.h"
#ifdef MOUSEKEY_ENABLE
# include "mousekey.h"
#endif
#if (defined(POINTING_DEVICE_ROTATION_90) + defined(POINTING_DEVICE_ROTATION_180) + defined(POINTING_DEVICE_ROTATION_270)) > 1
# error More than one rotation selected. This is not supported.
#endif
+#if defined(SPLIT_POINTING_ENABLE)
+# include "transactions.h"
+# include "keyboard.h"
-static report_mouse_t mouseReport = {};
+report_mouse_t shared_mouse_report = {};
+uint16_t shared_cpi = 0;
+
+/**
+ * @brief Sets the shared mouse report used be pointing device task
+ *
+ * NOTE : Only available when using SPLIT_POINTING_ENABLE
+ *
+ * @param[in] new_mouse_report report_mouse_t
+ */
+void pointing_device_set_shared_report(report_mouse_t new_mouse_report) {
+ shared_mouse_report = new_mouse_report;
+}
+
+/**
+ * @brief Gets current pointing device CPI if supported
+ *
+ * Gets current cpi of the shared report and returns it as uint16_t
+ *
+ * NOTE : Only available when using SPLIT_POINTING_ENABLE
+ *
+ * @return cpi value as uint16_t
+ */
+uint16_t pointing_device_get_shared_cpi(void) {
+ return shared_cpi;
+}
+
+# if defined(POINTING_DEVICE_LEFT)
+# define POINTING_DEVICE_THIS_SIDE is_keyboard_left()
+# elif defined(POINTING_DEVICE_RIGHT)
+# define POINTING_DEVICE_THIS_SIDE !is_keyboard_left()
+# elif defined(POINTING_DEVICE_COMBINED)
+# define POINTING_DEVICE_THIS_SIDE true
+# endif
+
+#endif // defined(SPLIT_POINTING_ENABLE)
+
+static report_mouse_t local_mouse_report = {};
extern const pointing_device_driver_t pointing_device_driver;
-__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old) { return memcmp(&new, &old, sizeof(new)); }
+/**
+ * @brief Compares 2 mouse reports for difference and returns result
+ *
+ * @param[in] new report_mouse_t
+ * @param[in] old report_mouse_t
+ * @return bool result
+ */
+__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old) {
+ return memcmp(&new, &old, sizeof(new));
+}
+
+/**
+ * @brief Keyboard level code pointing device initialisation
+ *
+ */
+__attribute__((weak)) void pointing_device_init_kb(void) {}
-__attribute__((weak)) void pointing_device_init_kb(void) {}
-__attribute__((weak)) void pointing_device_init_user(void) {}
-__attribute__((weak)) report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { return pointing_device_task_user(mouse_report); }
-__attribute__((weak)) report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { return mouse_report; }
+/**
+ * @brief User level code pointing device initialisation
+ *
+ */
+__attribute__((weak)) void pointing_device_init_user(void) {}
+/**
+ * @brief Weak function allowing for keyboard level mouse report modification
+ *
+ * Takes report_mouse_t struct allowing modification at keyboard level then returns report_mouse_t.
+ *
+ * @param[in] mouse_report report_mouse_t
+ * @return report_mouse_t
+ */
+__attribute__((weak)) report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) {
+ return pointing_device_task_user(mouse_report);
+}
+
+/**
+ * @brief Weak function allowing for user level mouse report modification
+ *
+ * Takes report_mouse_t struct allowing modification at user level then returns report_mouse_t.
+ *
+ * @param[in] mouse_report report_mouse_t
+ * @return report_mouse_t
+ */
+__attribute__((weak)) report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
+ return mouse_report;
+}
+
+/**
+ * @brief Handles pointing device buttons
+ *
+ * Returns modified button bitmask using bool pressed and selected pointing_device_buttons_t button in uint8_t buttons bitmask.
+ *
+ * @param buttons[in] uint8_t bitmask
+ * @param pressed[in] bool
+ * @param button[in] pointing_device_buttons_t value
+ * @return Modified uint8_t bitmask buttons
+ */
__attribute__((weak)) uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button) {
if (pressed) {
buttons |= 1 << (button);
@@ -45,7 +136,17 @@ __attribute__((weak)) uint8_t pointing_device_handle_buttons(uint8_t buttons, bo
return buttons;
}
+/**
+ * @brief Initialises pointing device
+ *
+ * Initialises pointing device, perform driver init and optional keyboard/user level code.
+ */
__attribute__((weak)) void pointing_device_init(void) {
+#if defined(SPLIT_POINTING_ENABLE)
+ if (!(POINTING_DEVICE_THIS_SIDE)) {
+ return;
+ }
+#endif
pointing_device_driver.init();
#ifdef POINTING_DEVICE_MOTION_PIN
setPinInputHigh(POINTING_DEVICE_MOTION_PIN);
@@ -54,67 +155,303 @@ __attribute__((weak)) void pointing_device_init(void) {
pointing_device_init_user();
}
+/**
+ * @brief Sends processed mouse report to host
+ *
+ * This sends the mouse report generated by pointing_device_task if changed since the last report. Once send zeros mouse report except buttons.
+ *
+ */
__attribute__((weak)) void pointing_device_send(void) {
static report_mouse_t old_report = {};
// If you need to do other things, like debugging, this is the place to do it.
- if (has_mouse_report_changed(mouseReport, old_report)) {
- host_mouse_send(&mouseReport);
+ if (has_mouse_report_changed(local_mouse_report, old_report)) {
+ host_mouse_send(&local_mouse_report);
}
// send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device
- mouseReport.x = 0;
- mouseReport.y = 0;
- mouseReport.v = 0;
- mouseReport.h = 0;
+ local_mouse_report.x = 0;
+ local_mouse_report.y = 0;
+ local_mouse_report.v = 0;
+ local_mouse_report.h = 0;
- memcpy(&old_report, &mouseReport, sizeof(mouseReport));
+ memcpy(&old_report, &local_mouse_report, sizeof(local_mouse_report));
}
-__attribute__((weak)) void pointing_device_task(void) {
- // Gather report info
-#ifdef POINTING_DEVICE_MOTION_PIN
- if (!readPin(POINTING_DEVICE_MOTION_PIN))
-#endif
- mouseReport = pointing_device_driver.get_report(mouseReport);
-
- // Support rotation of the sensor data
+/**
+ * @brief Adjust mouse report by any optional common pointing configuration defines
+ *
+ * This applies rotation or inversion to the mouse report as selected by the pointing device common configuration defines.
+ *
+ * @param mouse_report[in] takes a report_mouse_t to be adjusted
+ * @return report_mouse_t with adjusted values
+ */
+report_mouse_t pointing_device_adjust_by_defines(report_mouse_t mouse_report) {
+ // Support rotation of the sensor data
#if defined(POINTING_DEVICE_ROTATION_90) || defined(POINTING_DEVICE_ROTATION_180) || defined(POINTING_DEVICE_ROTATION_270)
- int8_t x = mouseReport.x, y = mouseReport.y;
+ int8_t x = mouse_report.x, y = mouse_report.y;
# if defined(POINTING_DEVICE_ROTATION_90)
- mouseReport.x = y;
- mouseReport.y = -x;
+ mouse_report.x = y;
+ mouse_report.y = -x;
# elif defined(POINTING_DEVICE_ROTATION_180)
- mouseReport.x = -x;
- mouseReport.y = -y;
+ mouse_report.x = -x;
+ mouse_report.y = -y;
# elif defined(POINTING_DEVICE_ROTATION_270)
- mouseReport.x = -y;
- mouseReport.y = x;
+ mouse_report.x = -y;
+ mouse_report.y = x;
# else
# error "How the heck did you get here?!"
# endif
#endif
// Support Inverting the X and Y Axises
#if defined(POINTING_DEVICE_INVERT_X)
- mouseReport.x = -mouseReport.x;
+ mouse_report.x = -mouse_report.x;
#endif
#if defined(POINTING_DEVICE_INVERT_Y)
- mouseReport.y = -mouseReport.y;
+ mouse_report.y = -mouse_report.y;
+#endif
+ return mouse_report;
+}
+
+/**
+ * @brief Retrieves and processes pointing device data.
+ *
+ * This function is part of the keyboard loop and retrieves the mouse report from the pointing device driver.
+ * It applies any optional configuration e.g. rotation or axis inversion and then initiates a send.
+ *
+ */
+__attribute__((weak)) void pointing_device_task(void) {
+#if defined(SPLIT_POINTING_ENABLE)
+ // Don't poll the target side pointing device.
+ if (!is_keyboard_master()) {
+ return;
+ };
+#endif
+
+#if (POINTING_DEVICE_TASK_THROTTLE_MS > 0)
+ static uint32_t last_exec = 0;
+ if (timer_elapsed32(last_exec) < POINTING_DEVICE_TASK_THROTTLE_MS) {
+ return;
+ }
+ last_exec = timer_read32();
+#endif
+
+ // Gather report info
+#ifdef POINTING_DEVICE_MOTION_PIN
+# if defined(SPLIT_POINTING_ENABLE)
+# error POINTING_DEVICE_MOTION_PIN not supported when sharing the pointing device report between sides.
+# endif
+ if (!readPin(POINTING_DEVICE_MOTION_PIN))
#endif
+#if defined(SPLIT_POINTING_ENABLE)
+# if defined(POINTING_DEVICE_COMBINED)
+ static uint8_t old_buttons = 0;
+ local_mouse_report.buttons = old_buttons;
+ local_mouse_report = pointing_device_driver.get_report(local_mouse_report);
+ old_buttons = local_mouse_report.buttons;
+# elif defined(POINTING_DEVICE_LEFT) || defined(POINTING_DEVICE_RIGHT)
+ local_mouse_report = POINTING_DEVICE_THIS_SIDE ? pointing_device_driver.get_report(local_mouse_report) : shared_mouse_report;
+# else
+# error "You need to define the side(s) the pointing device is on. POINTING_DEVICE_COMBINED / POINTING_DEVICE_LEFT / POINTING_DEVICE_RIGHT"
+# endif
+#else
+ local_mouse_report = pointing_device_driver.get_report(local_mouse_report);
+#endif // defined(SPLIT_POINTING_ENABLE)
+
// allow kb to intercept and modify report
- mouseReport = pointing_device_task_kb(mouseReport);
+#if defined(SPLIT_POINTING_ENABLE) && defined(POINTING_DEVICE_COMBINED)
+ if (is_keyboard_left()) {
+ local_mouse_report = pointing_device_adjust_by_defines(local_mouse_report);
+ shared_mouse_report = pointing_device_adjust_by_defines_right(shared_mouse_report);
+ } else {
+ local_mouse_report = pointing_device_adjust_by_defines_right(local_mouse_report);
+ shared_mouse_report = pointing_device_adjust_by_defines(shared_mouse_report);
+ }
+ local_mouse_report = is_keyboard_left() ? pointing_device_task_combined_kb(local_mouse_report, shared_mouse_report) : pointing_device_task_combined_kb(shared_mouse_report, local_mouse_report);
+#else
+ local_mouse_report = pointing_device_adjust_by_defines(local_mouse_report);
+ local_mouse_report = pointing_device_task_kb(local_mouse_report);
+#endif
// combine with mouse report to ensure that the combined is sent correctly
#ifdef MOUSEKEY_ENABLE
report_mouse_t mousekey_report = mousekey_get_report();
- mouseReport.buttons = mouseReport.buttons | mousekey_report.buttons;
+ local_mouse_report.buttons = local_mouse_report.buttons | mousekey_report.buttons;
#endif
pointing_device_send();
}
-report_mouse_t pointing_device_get_report(void) { return mouseReport; }
+/**
+ * @brief Gets current mouse report used by pointing device task
+ *
+ * @return report_mouse_t
+ */
+report_mouse_t pointing_device_get_report(void) {
+ return local_mouse_report;
+}
+
+/**
+ * @brief Sets mouse report used be pointing device task
+ *
+ * @param[in] new_mouse_report
+ */
+void pointing_device_set_report(report_mouse_t new_mouse_report) {
+ local_mouse_report = new_mouse_report;
+}
+
+/**
+ * @brief Gets current pointing device CPI if supported
+ *
+ * Gets current cpi from pointing device driver if supported and returns it as uint16_t
+ *
+ * @return cpi value as uint16_t
+ */
+uint16_t pointing_device_get_cpi(void) {
+#if defined(SPLIT_POINTING_ENABLE)
+ return POINTING_DEVICE_THIS_SIDE ? pointing_device_driver.get_cpi() : shared_cpi;
+#else
+ return pointing_device_driver.get_cpi();
+#endif
+}
-void pointing_device_set_report(report_mouse_t newMouseReport) { mouseReport = newMouseReport; }
+/**
+ * @brief Set pointing device CPI if supported
+ *
+ * Takes a uint16_t value to set pointing device cpi if supported by driver.
+ *
+ * @param[in] cpi uint16_t value.
+ */
+void pointing_device_set_cpi(uint16_t cpi) {
+#if defined(SPLIT_POINTING_ENABLE)
+ if (POINTING_DEVICE_THIS_SIDE) {
+ pointing_device_driver.set_cpi(cpi);
+ } else {
+ shared_cpi = cpi;
+ }
+#else
+ pointing_device_driver.set_cpi(cpi);
+#endif
+}
-uint16_t pointing_device_get_cpi(void) { return pointing_device_driver.get_cpi(); }
+#if defined(SPLIT_POINTING_ENABLE) && defined(POINTING_DEVICE_COMBINED)
+/**
+ * @brief Set pointing device CPI if supported
+ *
+ * Takes a bool and uint16_t and allows setting cpi for a single side when using 2 pointing devices with a split keyboard.
+ *
+ * NOTE: Only available when using SPLIT_POINTING_ENABLE and POINTING_DEVICE_COMBINED
+ *
+ * @param[in] left true = left, false = right.
+ * @param[in] cpi uint16_t value.
+ */
+void pointing_device_set_cpi_on_side(bool left, uint16_t cpi) {
+ bool local = (is_keyboard_left() & left) ? true : false;
+ if (local) {
+ pointing_device_driver.set_cpi(cpi);
+ } else {
+ shared_cpi = cpi;
+ }
+}
-void pointing_device_set_cpi(uint16_t cpi) { pointing_device_driver.set_cpi(cpi); }
+/**
+ * @brief clamps int16_t to int8_t
+ *
+ * @param[in] int16_t value
+ * @return int8_t clamped value
+ */
+static inline int8_t pointing_device_movement_clamp(int16_t value) {
+ if (value < INT8_MIN) {
+ return INT8_MIN;
+ } else if (value > INT8_MAX) {
+ return INT8_MAX;
+ } else {
+ return value;
+ }
+}
+
+/**
+ * @brief combines 2 mouse reports and returns 2
+ *
+ * Combines 2 report_mouse_t structs, clamping movement values to int8_t and ignores report_id then returns the resulting report_mouse_t struct.
+ *
+ * NOTE: Only available when using SPLIT_POINTING_ENABLE and POINTING_DEVICE_COMBINED
+ *
+ * @param[in] left_report left report_mouse_t
+ * @param[in] right_report right report_mouse_t
+ * @return combined report_mouse_t of left_report and right_report
+ */
+report_mouse_t pointing_device_combine_reports(report_mouse_t left_report, report_mouse_t right_report) {
+ left_report.x = pointing_device_movement_clamp((int16_t)left_report.x + right_report.x);
+ left_report.y = pointing_device_movement_clamp((int16_t)left_report.y + right_report.y);
+ left_report.h = pointing_device_movement_clamp((int16_t)left_report.h + right_report.h);
+ left_report.v = pointing_device_movement_clamp((int16_t)left_report.v + right_report.v);
+ left_report.buttons |= right_report.buttons;
+ return left_report;
+}
+
+/**
+ * @brief Adjust mouse report by any optional right pointing configuration defines
+ *
+ * This applies rotation or inversion to the mouse report as selected by the pointing device common configuration defines.
+ *
+ * NOTE: Only available when using SPLIT_POINTING_ENABLE and POINTING_DEVICE_COMBINED
+ *
+ * @param[in] mouse_report report_mouse_t to be adjusted
+ * @return report_mouse_t with adjusted values
+ */
+report_mouse_t pointing_device_adjust_by_defines_right(report_mouse_t mouse_report) {
+ // Support rotation of the sensor data
+# if defined(POINTING_DEVICE_ROTATION_90_RIGHT) || defined(POINTING_DEVICE_ROTATION_RIGHT) || defined(POINTING_DEVICE_ROTATION_RIGHT)
+ int8_t x = mouse_report.x, y = mouse_report.y;
+# if defined(POINTING_DEVICE_ROTATION_90_RIGHT)
+ mouse_report.x = y;
+ mouse_report.y = -x;
+# elif defined(POINTING_DEVICE_ROTATION_180_RIGHT)
+ mouse_report.x = -x;
+ mouse_report.y = -y;
+# elif defined(POINTING_DEVICE_ROTATION_270_RIGHT)
+ mouse_report.x = -y;
+ mouse_report.y = x;
+# else
+# error "How the heck did you get here?!"
+# endif
+# endif
+ // Support Inverting the X and Y Axises
+# if defined(POINTING_DEVICE_INVERT_X_RIGHT)
+ mouse_report.x = -mouse_report.x;
+# endif
+# if defined(POINTING_DEVICE_INVERT_Y_RIGHT)
+ mouse_report.y = -mouse_report.y;
+# endif
+ return mouse_report;
+}
+
+/**
+ * @brief Weak function allowing for keyboard level mouse report modification
+ *
+ * Takes 2 report_mouse_t structs allowing individual modification of sides at keyboard level then returns pointing_device_task_combined_user.
+ *
+ * NOTE: Only available when using SPLIT_POINTING_ENABLE and POINTING_DEVICE_COMBINED
+ *
+ * @param[in] left_report report_mouse_t
+ * @param[in] right_report report_mouse_t
+ * @return pointing_device_task_combined_user(left_report, right_report) by default
+ */
+__attribute__((weak)) report_mouse_t pointing_device_task_combined_kb(report_mouse_t left_report, report_mouse_t right_report) {
+ return pointing_device_task_combined_user(left_report, right_report);
+}
+
+/**
+ * @brief Weak function allowing for user level mouse report modification
+ *
+ * Takes 2 report_mouse_t structs allowing individual modification of sides at user level then returns pointing_device_combine_reports.
+ *
+ * NOTE: Only available when using SPLIT_POINTING_ENABLE and POINTING_DEVICE_COMBINED
+ *
+ * @param[in] left_report report_mouse_t
+ * @param[in] right_report report_mouse_t
+ * @return pointing_device_combine_reports(left_report, right_report) by default
+ */
+__attribute__((weak)) report_mouse_t pointing_device_task_combined_user(report_mouse_t left_report, report_mouse_t right_report) {
+ return pointing_device_combine_reports(left_report, right_report);
+}
+#endif
diff --git a/quantum/pointing_device.h b/quantum/pointing_device.h
index 5106c26660..5f3845227a 100644
--- a/quantum/pointing_device.h
+++ b/quantum/pointing_device.h
@@ -47,6 +47,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#elif defined(POINTING_DEVICE_DRIVER_pmw3360)
# include "spi_master.h"
# include "drivers/sensors/pmw3360.h"
+#elif defined(POINTING_DEVICE_DRIVER_pmw3389)
+# include "spi_master.h"
+# include "drivers/sensors/pmw3389.h"
#else
void pointing_device_driver_init(void);
report_mouse_t pointing_device_driver_get_report(report_mouse_t mouse_report);
@@ -86,3 +89,19 @@ void pointing_device_init_user(void);
report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report);
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report);
uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button);
+report_mouse_t pointing_device_adjust_by_defines(report_mouse_t mouse_report);
+
+#if defined(SPLIT_POINTING_ENABLE)
+void pointing_device_set_shared_report(report_mouse_t report);
+uint16_t pointing_device_get_shared_cpi(void);
+# if !defined(POINTING_DEVICE_TASK_THROTTLE_MS)
+# define POINTING_DEVICE_TASK_THROTTLE_MS 1
+# endif
+# if defined(POINTING_DEVICE_COMBINED)
+void pointing_device_set_cpi_on_side(bool left, uint16_t cpi);
+report_mouse_t pointing_device_combine_reports(report_mouse_t left_report, report_mouse_t right_report);
+report_mouse_t pointing_device_task_combined_kb(report_mouse_t left_report, report_mouse_t right_report);
+report_mouse_t pointing_device_task_combined_user(report_mouse_t left_report, report_mouse_t right_report);
+report_mouse_t pointing_device_adjust_by_defines_right(report_mouse_t mouse_report);
+# endif // defined(POINTING_DEVICE_COMBINED)
+#endif // defined(SPLIT_POINTING_ENABLE)
diff --git a/quantum/pointing_device_drivers.c b/quantum/pointing_device_drivers.c
index 9ad5e76ba6..b8ef6e67e5 100644
--- a/quantum/pointing_device_drivers.c
+++ b/quantum/pointing_device_drivers.c
@@ -101,7 +101,7 @@ const pointing_device_driver_t pointing_device_driver = {
# ifdef TAPPING_TERM_PER_KEY
# include "action.h"
# include "action_tapping.h"
-# define CIRQUE_PINNACLE_TAPPING_TERM get_tapping_term(KC_BTN1, NULL)
+# define CIRQUE_PINNACLE_TAPPING_TERM get_tapping_term(KC_BTN1, &(keyrecord_t){})
# else
# ifdef TAPPING_TERM
# define CIRQUE_PINNACLE_TAPPING_TERM TAPPING_TERM
@@ -120,7 +120,7 @@ report_mouse_t cirque_pinnacle_get_report(report_mouse_t mouse_report) {
int8_t report_x = 0, report_y = 0;
static bool is_z_down = false;
- cirque_pinnacle_scale_data(&touchData, cirque_pinnacle_get_scale(), cirque_pinnacle_get_scale()); // Scale coordinates to arbitrary X, Y resolution
+ cirque_pinnacle_scale_data(&touchData, cirque_pinnacle_get_scale(), cirque_pinnacle_get_scale()); // Scale coordinates to arbitrary X, Y resolution
if (x && y && touchData.xValue && touchData.yValue) {
report_x = (int8_t)(touchData.xValue - x);
@@ -165,14 +165,13 @@ const pointing_device_driver_t pointing_device_driver = {
// clang-format on
#elif defined(POINTING_DEVICE_DRIVER_pimoroni_trackball)
-report_mouse_t pimorono_trackball_get_report(report_mouse_t mouse_report) {
- static fast_timer_t throttle = 0;
- static uint16_t debounce = 0;
- static uint8_t error_count = 0;
- pimoroni_data_t pimoroni_data = {0};
- static int16_t x_offset = 0, y_offset = 0;
-
- if (error_count < PIMORONI_TRACKBALL_ERROR_COUNT && timer_elapsed_fast(throttle) >= PIMORONI_TRACKBALL_INTERVAL_MS) {
+report_mouse_t pimoroni_trackball_get_report(report_mouse_t mouse_report) {
+ static uint16_t debounce = 0;
+ static uint8_t error_count = 0;
+ pimoroni_data_t pimoroni_data = {0};
+ static int16_t x_offset = 0, y_offset = 0;
+
+ if (error_count < PIMORONI_TRACKBALL_ERROR_COUNT) {
i2c_status_t status = read_pimoroni_trackball(&pimoroni_data);
if (status == I2C_STATUS_SUCCESS) {
@@ -195,26 +194,26 @@ report_mouse_t pimorono_trackball_get_report(report_mouse_t mouse_report) {
} else {
error_count++;
}
- throttle = timer_read_fast();
}
return mouse_report;
}
// clang-format off
const pointing_device_driver_t pointing_device_driver = {
- .init = pimironi_trackball_device_init,
- .get_report = pimorono_trackball_get_report,
- .set_cpi = NULL,
- .get_cpi = NULL
+ .init = pimoroni_trackball_device_init,
+ .get_report = pimoroni_trackball_get_report,
+ .set_cpi = pimoroni_trackball_set_cpi,
+ .get_cpi = pimoroni_trackball_get_cpi
};
// clang-format on
#elif defined(POINTING_DEVICE_DRIVER_pmw3360)
-
-static void init(void) { pmw3360_init(); }
+static void pmw3360_device_init(void) {
+ pmw3360_init();
+}
report_mouse_t pmw3360_get_report(report_mouse_t mouse_report) {
report_pmw3360_t data = pmw3360_read_burst();
- static uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
+ static uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
if (data.isOnSurface && data.isMotion) {
// Reset timer if stopped moving
@@ -239,17 +238,59 @@ report_mouse_t pmw3360_get_report(report_mouse_t mouse_report) {
// clang-format off
const pointing_device_driver_t pointing_device_driver = {
- .init = init,
+ .init = pmw3360_device_init,
.get_report = pmw3360_get_report,
.set_cpi = pmw3360_set_cpi,
.get_cpi = pmw3360_get_cpi
};
// clang-format on
+#elif defined(POINTING_DEVICE_DRIVER_pmw3389)
+static void pmw3389_device_init(void) {
+ pmw3389_init();
+}
+
+report_mouse_t pmw3389_get_report(report_mouse_t mouse_report) {
+ report_pmw3389_t data = pmw3389_read_burst();
+ static uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
+
+ if (data.isOnSurface && data.isMotion) {
+ // Reset timer if stopped moving
+ if (!data.isMotion) {
+ if (MotionStart != 0) MotionStart = 0;
+ return mouse_report;
+ }
+
+ // Set timer if new motion
+ if ((MotionStart == 0) && data.isMotion) {
+# ifdef CONSOLE_ENABLE
+ if (debug_mouse) dprintf("Starting motion.\n");
+# endif
+ MotionStart = timer_read();
+ }
+ mouse_report.x = constrain_hid(data.dx);
+ mouse_report.y = constrain_hid(data.dy);
+ }
+
+ return mouse_report;
+}
+
+// clang-format off
+const pointing_device_driver_t pointing_device_driver = {
+ .init = pmw3389_device_init,
+ .get_report = pmw3389_get_report,
+ .set_cpi = pmw3389_set_cpi,
+ .get_cpi = pmw3389_get_cpi
+};
+// clang-format on
#else
__attribute__((weak)) void pointing_device_driver_init(void) {}
-__attribute__((weak)) report_mouse_t pointing_device_driver_get_report(report_mouse_t mouse_report) { return mouse_report; }
-__attribute__((weak)) uint16_t pointing_device_driver_get_cpi(void) { return 0; }
-__attribute__((weak)) void pointing_device_driver_set_cpi(uint16_t cpi) {}
+__attribute__((weak)) report_mouse_t pointing_device_driver_get_report(report_mouse_t mouse_report) {
+ return mouse_report;
+}
+__attribute__((weak)) uint16_t pointing_device_driver_get_cpi(void) {
+ return 0;
+}
+__attribute__((weak)) void pointing_device_driver_set_cpi(uint16_t cpi) {}
// clang-format off
const pointing_device_driver_t pointing_device_driver = {
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c
index 3b5fa8490b..e7fe453308 100644
--- a/quantum/process_keycode/process_audio.c
+++ b/quantum/process_keycode/process_audio.c
@@ -50,10 +50,17 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) {
return true;
}
-void process_audio_noteon(uint8_t note) { play_note(compute_freq_for_midi_note(note), 0xF); }
+void process_audio_noteon(uint8_t note) {
+ play_note(compute_freq_for_midi_note(note), 0xF);
+}
-void process_audio_noteoff(uint8_t note) { stop_note(compute_freq_for_midi_note(note)); }
+void process_audio_noteoff(uint8_t note) {
+ stop_note(compute_freq_for_midi_note(note));
+}
-void process_audio_all_notes_off(void) { stop_all_notes(); }
+void process_audio_all_notes_off(void) {
+ stop_all_notes();
+}
__attribute__((weak)) void audio_on_user() {}
+__attribute__((weak)) void audio_off_user() {}
diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h
index d89a834ea8..42cfab4af2 100644
--- a/quantum/process_keycode/process_audio.h
+++ b/quantum/process_keycode/process_audio.h
@@ -8,3 +8,4 @@ void process_audio_noteoff(uint8_t note);
void process_audio_all_notes_off(void);
void audio_on_user(void);
+void audio_off_user(void);
diff --git a/quantum/process_keycode/process_auto_shift.c b/quantum/process_keycode/process_auto_shift.c
index bbc6367ff1..2150edd7b2 100644
--- a/quantum/process_keycode/process_auto_shift.c
+++ b/quantum/process_keycode/process_auto_shift.c
@@ -62,7 +62,9 @@ static struct {
// clang-format on
/** \brief Called on physical press, returns whether key should be added to Auto Shift */
-__attribute__((weak)) bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) { return false; }
+__attribute__((weak)) bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
+ return false;
+}
/** \brief Called on physical press, returns whether is Auto Shift key */
__attribute__((weak)) bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
@@ -82,8 +84,12 @@ __attribute__((weak)) bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *r
}
/** \brief Called to check whether defines should apply if PER_KEY is set for it */
-__attribute__((weak)) bool get_auto_shift_repeat(uint16_t keycode, keyrecord_t *record) { return true; }
-__attribute__((weak)) bool get_auto_shift_no_auto_repeat(uint16_t keycode, keyrecord_t *record) { return true; }
+__attribute__((weak)) bool get_auto_shift_repeat(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+__attribute__((weak)) bool get_auto_shift_no_auto_repeat(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
/** \brief Called when an Auto Shift key needs to be pressed */
__attribute__((weak)) void autoshift_press_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
@@ -94,7 +100,9 @@ __attribute__((weak)) void autoshift_press_user(uint16_t keycode, bool shifted,
}
/** \brief Called when an Auto Shift key needs to be released */
-__attribute__((weak)) void autoshift_release_user(uint16_t keycode, bool shifted, keyrecord_t *record) { unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode); }
+__attribute__((weak)) void autoshift_release_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
+ unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+}
/** \brief Sets the shift state to use when keyrepeating, required by custom shifts */
void set_autoshift_shift_state(uint16_t keycode, bool shifted) {
@@ -311,7 +319,9 @@ void autoshift_toggle(void) {
autoshift_flush_shift();
}
-void autoshift_enable(void) { autoshift_flags.enabled = true; }
+void autoshift_enable(void) {
+ autoshift_flags.enabled = true;
+}
void autoshift_disable(void) {
autoshift_flags.enabled = false;
@@ -328,12 +338,20 @@ void autoshift_timer_report(void) {
}
# endif
-bool get_autoshift_state(void) { return autoshift_flags.enabled; }
+bool get_autoshift_state(void) {
+ return autoshift_flags.enabled;
+}
-uint16_t get_generic_autoshift_timeout() { return autoshift_timeout; }
-__attribute__((weak)) uint16_t get_autoshift_timeout(uint16_t keycode, keyrecord_t *record) { return autoshift_timeout; }
+uint16_t get_generic_autoshift_timeout() {
+ return autoshift_timeout;
+}
+__attribute__((weak)) uint16_t get_autoshift_timeout(uint16_t keycode, keyrecord_t *record) {
+ return autoshift_timeout;
+}
-void set_autoshift_timeout(uint16_t timeout) { autoshift_timeout = timeout; }
+void set_autoshift_timeout(uint16_t timeout) {
+ autoshift_timeout = timeout;
+}
bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
// Note that record->event.time isn't reliable, see:
diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c
index 6ab382d4aa..9795734984 100644
--- a/quantum/process_keycode/process_clicky.c
+++ b/quantum/process_keycode/process_clicky.c
@@ -5,40 +5,40 @@
# ifndef AUDIO_CLICKY_DELAY_DURATION
# define AUDIO_CLICKY_DELAY_DURATION 1
-# endif // !AUDIO_CLICKY_DELAY_DURATION
+# endif // !AUDIO_CLICKY_DELAY_DURATION
# ifndef AUDIO_CLICKY_FREQ_DEFAULT
# define AUDIO_CLICKY_FREQ_DEFAULT 440.0f
-# endif // !AUDIO_CLICKY_FREQ_DEFAULT
+# endif // !AUDIO_CLICKY_FREQ_DEFAULT
# ifndef AUDIO_CLICKY_FREQ_MIN
# define AUDIO_CLICKY_FREQ_MIN 65.0f
-# endif // !AUDIO_CLICKY_FREQ_MIN
+# endif // !AUDIO_CLICKY_FREQ_MIN
# ifndef AUDIO_CLICKY_FREQ_MAX
# define AUDIO_CLICKY_FREQ_MAX 1500.0f
-# endif // !AUDIO_CLICKY_FREQ_MAX
+# endif // !AUDIO_CLICKY_FREQ_MAX
# ifndef AUDIO_CLICKY_FREQ_FACTOR
# define AUDIO_CLICKY_FREQ_FACTOR 1.18921f
-# endif // !AUDIO_CLICKY_FREQ_FACTOR
+# endif // !AUDIO_CLICKY_FREQ_FACTOR
# ifndef AUDIO_CLICKY_FREQ_RANDOMNESS
# define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f
-# endif // !AUDIO_CLICKY_FREQ_RANDOMNESS
+# endif // !AUDIO_CLICKY_FREQ_RANDOMNESS
float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT;
float clicky_rand = AUDIO_CLICKY_FREQ_RANDOMNESS;
// the first "note" is an intentional delay; the 2nd and 3rd notes are the "clicky"
-float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_MIN, AUDIO_CLICKY_DELAY_DURATION}, {AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations
+float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_MIN, AUDIO_CLICKY_DELAY_DURATION}, {AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations
extern audio_config_t audio_config;
# ifndef NO_MUSIC_MODE
extern bool music_activated;
extern bool midi_activated;
-# endif // !NO_MUSIC_MODE
+# endif // !NO_MUSIC_MODE
void clicky_play(void) {
# ifndef NO_MUSIC_MODE
if (music_activated || midi_activated || !audio_config.enable) return;
-# endif // !NO_MUSIC_MODE
+# endif // !NO_MUSIC_MODE
clicky_song[1][0] = 2.0f * clicky_freq * (1.0f + clicky_rand * (((float)rand()) / ((float)(RAND_MAX))));
clicky_song[2][0] = clicky_freq * (1.0f + clicky_rand * (((float)rand()) / ((float)(RAND_MAX))));
PLAY_SONG(clicky_song);
@@ -58,7 +58,9 @@ void clicky_freq_down(void) {
}
}
-void clicky_freq_reset(void) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; }
+void clicky_freq_reset(void) {
+ clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT;
+}
void clicky_toggle(void) {
audio_config.clicky_enable ^= 1;
@@ -75,7 +77,9 @@ void clicky_off(void) {
eeconfig_update_audio(audio_config.raw);
}
-bool is_clicky_on(void) { return (audio_config.clicky_enable != 0); }
+bool is_clicky_on(void) {
+ return (audio_config.clicky_enable != 0);
+}
bool process_clicky(uint16_t keycode, keyrecord_t *record) {
if (keycode == CLICKY_TOGGLE && record->event.pressed) {
@@ -101,8 +105,8 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) {
}
if (audio_config.enable && audio_config.clicky_enable) {
- if (record->event.pressed) { // Leave this separate so it's easier to add upstroke sound
- if (keycode != AU_OFF && keycode != AU_TOG) { // DO NOT PLAY if audio will be disabled, and causes issuse on ARM
+ if (record->event.pressed) { // Leave this separate so it's easier to add upstroke sound
+ if (keycode != AU_OFF && keycode != AU_TOG) { // DO NOT PLAY if audio will be disabled, and causes issuse on ARM
clicky_play();
}
}
@@ -110,4 +114,4 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) {
return true;
}
-#endif // AUDIO_CLICKY
+#endif // AUDIO_CLICKY
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c
index a050161edf..efaf8fe0e9 100644
--- a/quantum/process_keycode/process_combo.c
+++ b/quantum/process_keycode/process_combo.c
@@ -17,6 +17,7 @@
#include "print.h"
#include "process_combo.h"
#include "action_tapping.h"
+#include "action.h"
#ifdef COMBO_COUNT
__attribute__((weak)) combo_t key_combos[COMBO_COUNT];
@@ -29,25 +30,45 @@ extern uint16_t COMBO_LEN;
__attribute__((weak)) void process_combo_event(uint16_t combo_index, bool pressed) {}
#ifdef COMBO_MUST_HOLD_PER_COMBO
-__attribute__((weak)) bool get_combo_must_hold(uint16_t index, combo_t *combo) { return false; }
+__attribute__((weak)) bool get_combo_must_hold(uint16_t index, combo_t *combo) {
+ return false;
+}
#endif
#ifdef COMBO_MUST_TAP_PER_COMBO
-__attribute__((weak)) bool get_combo_must_tap(uint16_t index, combo_t *combo) { return false; }
+__attribute__((weak)) bool get_combo_must_tap(uint16_t index, combo_t *combo) {
+ return false;
+}
#endif
#ifdef COMBO_TERM_PER_COMBO
-__attribute__((weak)) uint16_t get_combo_term(uint16_t index, combo_t *combo) { return COMBO_TERM; }
+__attribute__((weak)) uint16_t get_combo_term(uint16_t index, combo_t *combo) {
+ return COMBO_TERM;
+}
+#endif
+
+#ifdef COMBO_MUST_PRESS_IN_ORDER_PER_COMBO
+__attribute__((weak)) bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) {
+ return true;
+}
#endif
#ifdef COMBO_PROCESS_KEY_RELEASE
-__attribute__((weak)) bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key_index, uint16_t keycode) { return false; }
+__attribute__((weak)) bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key_index, uint16_t keycode) {
+ return false;
+}
+#endif
+
+#ifdef COMBO_SHOULD_TRIGGER
+__attribute__((weak)) bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
#endif
#ifndef COMBO_NO_TIMER
static uint16_t timer = 0;
#endif
-static bool b_combo_enable = true; // defaults to enabled
+static bool b_combo_enable = true; // defaults to enabled
static uint16_t longest_term = 0;
typedef struct {
@@ -185,6 +206,9 @@ void clear_combos(void) {
static inline void dump_key_buffer(void) {
/* First call start from 0 index; recursive calls need to start from i+1 index */
static uint8_t key_buffer_next = 0;
+#if TAP_CODE_DELAY > 0
+ bool delay_done = false;
+#endif
if (key_buffer_size == 0) {
return;
@@ -210,6 +234,15 @@ static inline void dump_key_buffer(void) {
#endif
}
record->event.time = 0;
+ clear_weak_mods();
+
+#if TAP_CODE_DELAY > 0
+ // only delay once and for a non-tapping key
+ if (!delay_done && !is_tap_record(record)) {
+ delay_done = true;
+ wait_ms(TAP_CODE_DELAY);
+ }
+#endif
}
key_buffer_next = key_buffer_size = 0;
@@ -350,6 +383,28 @@ combo_t *overlaps(combo_t *combo1, combo_t *combo2) {
return combo1;
}
+#if defined(COMBO_MUST_PRESS_IN_ORDER) || defined(COMBO_MUST_PRESS_IN_ORDER_PER_COMBO)
+static bool keys_pressed_in_order(uint16_t combo_index, combo_t *combo, uint16_t key_index, uint16_t keycode, keyrecord_t *record) {
+# ifdef COMBO_MUST_PRESS_IN_ORDER_PER_COMBO
+ if (!get_combo_must_press_in_order(combo_index, combo)) {
+ return true;
+ }
+# endif
+ if (
+ // The `state` bit for the key being pressed.
+ (1 << key_index) ==
+ // The *next* combo key's bit.
+ (COMBO_STATE(combo) + 1)
+ // E.g. two keys already pressed: `state == 11`.
+ // Next possible `state` is `111`.
+ // So the needed bit is `100` which we get with `11 + 1`.
+ ) {
+ return true;
+ }
+ return false;
+}
+#endif
+
static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *record, uint16_t combo_index) {
uint8_t key_count = 0;
uint16_t key_index = -1;
@@ -360,7 +415,14 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
return false;
}
- bool key_is_part_of_combo = !COMBO_DISABLED(combo) && is_combo_enabled();
+ bool key_is_part_of_combo = (!COMBO_DISABLED(combo) && is_combo_enabled()
+#if defined(COMBO_MUST_PRESS_IN_ORDER) || defined(COMBO_MUST_PRESS_IN_ORDER_PER_COMBO)
+ && keys_pressed_in_order(combo_index, combo, key_index, keycode, record)
+#endif
+#ifdef COMBO_SHOULD_TRIGGER
+ && combo_should_trigger(combo_index, combo, keycode, record)
+#endif
+ );
if (record->event.pressed && key_is_part_of_combo) {
uint16_t time = _get_combo_term(combo_index, combo);
@@ -412,7 +474,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
// get possible longer waiting time for tap-/hold-only combos.
longest_term = _get_wait_time(combo_index, combo);
}
- } // if timer elapsed end
+ } // if timer elapsed end
}
} else {
// chord releases
@@ -427,7 +489,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
else if (get_combo_must_tap(combo_index, combo)) {
// immediately apply tap-only combo
apply_combo(combo_index, combo);
- apply_combos(); // also apply other prepared combos and dump key buffer
+ apply_combos(); // also apply other prepared combos and dump key buffer
# ifdef COMBO_PROCESS_KEY_RELEASE
if (process_combo_key_release(combo_index, combo, key_index, keycode)) {
release_combo(combo_index, combo);
@@ -509,7 +571,7 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) {
key_buffer[key_buffer_size++] = (queued_record_t){
.record = *record,
.keycode = keycode,
- .combo_index = -1, // this will be set when applying combos
+ .combo_index = -1, // this will be set when applying combos
};
}
} else {
@@ -548,7 +610,9 @@ void combo_task(void) {
#endif
}
-void combo_enable(void) { b_combo_enable = true; }
+void combo_enable(void) {
+ b_combo_enable = true;
+}
void combo_disable(void) {
#ifndef COMBO_NO_TIMER
@@ -568,4 +632,6 @@ void combo_toggle(void) {
}
}
-bool is_combo_enabled(void) { return b_combo_enable; }
+bool is_combo_enabled(void) {
+ return b_combo_enable;
+}
diff --git a/quantum/process_keycode/process_dynamic_macro.c b/quantum/process_keycode/process_dynamic_macro.c
index 18c8d7ca2e..a1ada2d5a2 100644
--- a/quantum/process_keycode/process_dynamic_macro.c
+++ b/quantum/process_keycode/process_dynamic_macro.c
@@ -29,13 +29,21 @@ void dynamic_macro_led_blink(void) {
/* User hooks for Dynamic Macros */
-__attribute__((weak)) void dynamic_macro_record_start_user(void) { dynamic_macro_led_blink(); }
+__attribute__((weak)) void dynamic_macro_record_start_user(void) {
+ dynamic_macro_led_blink();
+}
-__attribute__((weak)) void dynamic_macro_play_user(int8_t direction) { dynamic_macro_led_blink(); }
+__attribute__((weak)) void dynamic_macro_play_user(int8_t direction) {
+ dynamic_macro_led_blink();
+}
-__attribute__((weak)) void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) { dynamic_macro_led_blink(); }
+__attribute__((weak)) void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) {
+ dynamic_macro_led_blink();
+}
-__attribute__((weak)) void dynamic_macro_record_end_user(int8_t direction) { dynamic_macro_led_blink(); }
+__attribute__((weak)) void dynamic_macro_record_end_user(int8_t direction) {
+ dynamic_macro_led_blink();
+}
/* Convenience macros used for retrieving the debug info. All of them
* need a `direction` variable accessible at the call site.
@@ -82,7 +90,7 @@ void dynamic_macro_play(keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_
clear_keyboard();
- layer_state = saved_layer_state;
+ layer_state_set(saved_layer_state);
dynamic_macro_play_user(direction);
}
diff --git a/quantum/process_keycode/process_grave_esc.c b/quantum/process_keycode/process_grave_esc.c
index 41c50f5cb8..ddf027391d 100644
--- a/quantum/process_keycode/process_grave_esc.c
+++ b/quantum/process_keycode/process_grave_esc.c
@@ -15,13 +15,13 @@
*/
#include "process_grave_esc.h"
-/* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
+/* true if the last press of QK_GRAVE_ESCAPE was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
* Used to ensure that the correct keycode is released if the key is released.
*/
static bool grave_esc_was_shifted = false;
bool process_grave_esc(uint16_t keycode, keyrecord_t *record) {
- if (keycode == GRAVE_ESC) {
+ if (keycode == QK_GRAVE_ESCAPE) {
const uint8_t mods = get_mods();
uint8_t shifted = mods & MOD_MASK_SG;
diff --git a/quantum/process_keycode/process_haptic.c b/quantum/process_keycode/process_haptic.c
index 85b2ffcddd..0f07f9ac75 100644
--- a/quantum/process_keycode/process_haptic.c
+++ b/quantum/process_keycode/process_haptic.c
@@ -35,9 +35,6 @@ __attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t
case QK_MOMENTARY ... QK_MOMENTARY_MAX:
case QK_LAYER_MOD ... QK_LAYER_MOD_MAX:
#endif
-#ifdef NO_HAPTIC_FN
- case KC_FN0 ... KC_FN31:
-#endif
#ifdef NO_HAPTIC_ALPHA
case KC_A ... KC_Z:
#endif
diff --git a/quantum/process_keycode/process_joystick.c b/quantum/process_keycode/process_joystick.c
index fa9c2c1dbc..2fb092c573 100644
--- a/quantum/process_keycode/process_joystick.c
+++ b/quantum/process_keycode/process_joystick.c
@@ -74,7 +74,9 @@ void restorePinState(pin_t pin, uint16_t restoreState) {
#endif
}
-__attribute__((weak)) bool process_joystick_analogread() { return process_joystick_analogread_quantum(); }
+__attribute__((weak)) bool process_joystick_analogread() {
+ return process_joystick_analogread_quantum();
+}
bool process_joystick_analogread_quantum() {
#if JOYSTICK_AXES_COUNT > 0
diff --git a/quantum/process_keycode/process_key_lock.c b/quantum/process_keycode/process_key_lock.c
index 4bd58f0c1e..941a2c5780 100644
--- a/quantum/process_keycode/process_key_lock.c
+++ b/quantum/process_keycode/process_key_lock.c
@@ -56,6 +56,11 @@ static inline uint16_t translate_keycode(uint16_t keycode) {
}
}
+void cancel_key_lock(void) {
+ watching = false;
+ UNSET_KEY_STATE(0x0);
+}
+
bool process_key_lock(uint16_t *keycode, keyrecord_t *record) {
// We start by categorizing the keypress event. In the event of a down
// event, there are several possibilities:
diff --git a/quantum/process_keycode/process_key_lock.h b/quantum/process_keycode/process_key_lock.h
index baa0b39077..5159b0ba02 100644
--- a/quantum/process_keycode/process_key_lock.h
+++ b/quantum/process_keycode/process_key_lock.h
@@ -18,4 +18,5 @@
#include "quantum.h"
+void cancel_key_lock(void);
bool process_key_lock(uint16_t *keycode, keyrecord_t *record);
diff --git a/quantum/process_keycode/process_key_override.c b/quantum/process_keycode/process_key_override.c
index 09b2725079..ad9683d106 100644
--- a/quantum/process_keycode/process_key_override.c
+++ b/quantum/process_keycode/process_key_override.c
@@ -106,7 +106,9 @@ void key_override_toggle(void) {
}
}
-bool key_override_is_enabled(void) { return enabled; }
+bool key_override_is_enabled(void) {
+ return enabled;
+}
// Returns whether the modifiers that are pressed are such that the override should activate
static bool key_override_matches_active_modifiers(const key_override_t *override, const uint8_t mods) {
@@ -150,7 +152,7 @@ static void schedule_deferred_register(const uint16_t keycode) {
} else {
// Wait a very short time when a modifier event triggers the override to avoid false activations when e.g. a modifier is pressed just before a key is released (with the intention of pairing the modifier with a different key), or a modifier is lifted shortly before the trigger key is lifted. Operating systems by default reject modifier-events that happen very close to a non-modifier event.
defer_reference_time = timer_read32();
- defer_delay = 50; // 50ms
+ defer_delay = 50; // 50ms
}
deferred_register = keycode;
}
@@ -174,8 +176,8 @@ const key_override_t *clear_active_override(const bool allow_reregister) {
const uint8_t mod_free_replacement = clear_mods_from(active_override->replacement);
- bool unregister_replacement = mod_free_replacement != KC_NO && // KC_NO is never registered
- mod_free_replacement < SAFE_RANGE; // Custom keycodes are never registered
+ bool unregister_replacement = mod_free_replacement != KC_NO && // KC_NO is never registered
+ mod_free_replacement < SAFE_RANGE; // Custom keycodes are never registered
// Try firing the custom handler
if (active_override->custom_action != NULL) {
@@ -195,11 +197,11 @@ const key_override_t *clear_active_override(const bool allow_reregister) {
const uint16_t trigger = active_override->trigger;
- const bool reregister_trigger = allow_reregister && // Check if allowed from caller
- (active_override->options & ko_option_no_reregister_trigger) == 0 && // Check if override allows
- active_override_trigger_is_down && // Check if trigger is even down
- trigger != KC_NO && // KC_NO is never registered
- trigger < SAFE_RANGE; // A custom keycode should not be registered
+ const bool reregister_trigger = allow_reregister && // Check if allowed from caller
+ (active_override->options & ko_option_no_reregister_trigger) == 0 && // Check if override allows
+ active_override_trigger_is_down && // Check if trigger is even down
+ trigger != KC_NO && // KC_NO is never registered
+ trigger < SAFE_RANGE; // A custom keycode should not be registered
// Optionally re-register the trigger if it is still down
if (reregister_trigger) {
@@ -336,8 +338,8 @@ static bool try_activating_override(const uint16_t keycode, const uint8_t layer,
const uint16_t mod_free_replacement = clear_mods_from(override->replacement);
- bool register_replacement = mod_free_replacement != KC_NO && // KC_NO is never registered
- mod_free_replacement < SAFE_RANGE; // Custom keycodes are never registered
+ bool register_replacement = mod_free_replacement != KC_NO && // KC_NO is never registered
+ mod_free_replacement < SAFE_RANGE; // Custom keycodes are never registered
// Try firing the custom handler
if (override->custom_action != NULL) {
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index cf63f25141..c2fd02e5c7 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -51,13 +51,13 @@ bool process_leader(uint16_t keycode, keyrecord_t *record) {
if (leading) {
# ifndef LEADER_NO_TIMEOUT
if (timer_elapsed(leader_time) < LEADER_TIMEOUT)
-# endif // LEADER_NO_TIMEOUT
+# endif // LEADER_NO_TIMEOUT
{
# ifndef LEADER_KEY_STRICT_KEY_PROCESSING
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
keycode = keycode & 0xFF;
}
-# endif // LEADER_KEY_STRICT_KEY_PROCESSING
+# endif // LEADER_KEY_STRICT_KEY_PROCESSING
if (leader_sequence_size < (sizeof(leader_sequence) / sizeof(leader_sequence[0]))) {
leader_sequence[leader_sequence_size] = keycode;
leader_sequence_size++;
diff --git a/quantum/process_keycode/process_magic.c b/quantum/process_keycode/process_magic.c
index d5cff4f12a..10161adda3 100644
--- a/quantum/process_keycode/process_magic.c
+++ b/quantum/process_keycode/process_magic.c
@@ -44,6 +44,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:
case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:
case MAGIC_TOGGLE_GUI:
+ case MAGIC_TOGGLE_CONTROL_CAPSLOCK:
/* keymap config */
keymap_config.raw = eeconfig_read_keymap();
switch (keycode) {
@@ -75,7 +76,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
keymap_config.swap_backslash_backspace = true;
break;
case MAGIC_HOST_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
+ clear_keyboard(); // clear first buffer to prevent stuck keys
keymap_config.nkro = true;
break;
case MAGIC_SWAP_ALT_GUI:
@@ -118,7 +119,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
keymap_config.swap_backslash_backspace = false;
break;
case MAGIC_UNHOST_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
+ clear_keyboard(); // clear first buffer to prevent stuck keys
keymap_config.nkro = false;
break;
case MAGIC_UNSWAP_ALT_GUI:
@@ -156,7 +157,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
#endif
break;
case MAGIC_TOGGLE_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
+ clear_keyboard(); // clear first buffer to prevent stuck keys
keymap_config.nkro = !keymap_config.nkro;
break;
case MAGIC_EE_HANDS_LEFT:
@@ -168,10 +169,13 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
case MAGIC_TOGGLE_GUI:
keymap_config.no_gui = !keymap_config.no_gui;
break;
+ case MAGIC_TOGGLE_CONTROL_CAPSLOCK:
+ keymap_config.swap_control_capslock = !keymap_config.swap_control_capslock;
+ break;
}
eeconfig_update_keymap(keymap_config.raw);
- clear_keyboard(); // clear to prevent stuck keys
+ clear_keyboard(); // clear to prevent stuck keys
return false;
}
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 9632d2b757..c49c31a525 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -22,13 +22,19 @@
# ifdef MIDI_BASIC
-void process_midi_basic_noteon(uint8_t note) { midi_send_noteon(&midi_device, 0, note, 127); }
+void process_midi_basic_noteon(uint8_t note) {
+ midi_send_noteon(&midi_device, 0, note, 127);
+}
-void process_midi_basic_noteoff(uint8_t note) { midi_send_noteoff(&midi_device, 0, note, 0); }
+void process_midi_basic_noteoff(uint8_t note) {
+ midi_send_noteoff(&midi_device, 0, note, 0);
+}
-void process_midi_all_notes_off(void) { midi_send_cc(&midi_device, 0, 0x7B, 0); }
+void process_midi_all_notes_off(void) {
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+}
-# endif // MIDI_BASIC
+# endif // MIDI_BASIC
# ifdef MIDI_ADVANCED
@@ -41,7 +47,9 @@ static int8_t midi_modulation_step;
static uint16_t midi_modulation_timer;
midi_config_t midi_config;
-inline uint8_t compute_velocity(uint8_t setting) { return setting * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN)); }
+inline uint8_t compute_velocity(uint8_t setting) {
+ return setting * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN));
+}
void midi_init(void) {
midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN;
@@ -60,7 +68,9 @@ void midi_init(void) {
midi_modulation_timer = 0;
}
-uint8_t midi_compute_note(uint16_t keycode) { return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose; }
+uint8_t midi_compute_note(uint16_t keycode) {
+ return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose;
+}
bool process_midi(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
@@ -238,7 +248,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
return true;
}
-# endif // MIDI_ADVANCED
+# endif // MIDI_ADVANCED
void midi_task(void) {
midi_device_process(&midi_device);
@@ -263,4 +273,4 @@ void midi_task(void) {
# endif
}
-#endif // MIDI_ENABLE
+#endif // MIDI_ENABLE
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index 68c6eda666..e528c6ec0c 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -49,6 +49,6 @@ bool process_midi(uint16_t keycode, keyrecord_t *record);
# define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
uint8_t midi_compute_note(uint16_t keycode);
-# endif // MIDI_ADVANCED
+# endif // MIDI_ADVANCED
-#endif // MIDI_ENABLE
+#endif // MIDI_ENABLE
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c
index 6822c5e289..eeec0c28a4 100644
--- a/quantum/process_keycode/process_music.c
+++ b/quantum/process_keycode/process_music.c
@@ -146,7 +146,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
if (music_activated || midi_activated) {
if (record->event.pressed) {
- if (keycode == KC_LEFT_CTRL) { // Start recording
+ if (keycode == KC_LEFT_CTRL) { // Start recording
music_all_notes_off();
music_sequence_recording = true;
music_sequence_recorded = false;
@@ -155,9 +155,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
return false;
}
- if (keycode == KC_LEFT_ALT) { // Stop recording/playing
+ if (keycode == KC_LEFT_ALT) { // Stop recording/playing
music_all_notes_off();
- if (music_sequence_recording) { // was recording
+ if (music_sequence_recording) { // was recording
music_sequence_recorded = true;
}
music_sequence_recording = false;
@@ -165,7 +165,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
return false;
}
- if (keycode == KC_LEFT_GUI && music_sequence_recorded) { // Start playing
+ if (keycode == KC_LEFT_GUI && music_sequence_recorded) { // Start playing
music_all_notes_off();
music_sequence_recording = false;
music_sequence_playing = true;
@@ -230,11 +230,17 @@ bool music_mask(uint16_t keycode) {
# endif
}
-__attribute__((weak)) bool music_mask_kb(uint16_t keycode) { return music_mask_user(keycode); }
+__attribute__((weak)) bool music_mask_kb(uint16_t keycode) {
+ return music_mask_user(keycode);
+}
-__attribute__((weak)) bool music_mask_user(uint16_t keycode) { return keycode < 0xFF; }
+__attribute__((weak)) bool music_mask_user(uint16_t keycode) {
+ return keycode < 0xFF;
+}
-bool is_music_on(void) { return (music_activated != 0); }
+bool is_music_on(void) {
+ return (music_activated != 0);
+}
void music_toggle(void) {
if (!music_activated) {
@@ -260,7 +266,9 @@ void music_off(void) {
# endif
}
-bool is_midi_on(void) { return (midi_activated != 0); }
+bool is_midi_on(void) {
+ return (midi_activated != 0);
+}
void midi_toggle(void) {
if (!midi_activated) {
@@ -315,4 +323,4 @@ __attribute__((weak)) void midi_on_user() {}
__attribute__((weak)) void music_scale_user() {}
-#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
+#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h
index e275cd9d26..83726a05ba 100644
--- a/quantum/process_keycode/process_music.h
+++ b/quantum/process_keycode/process_music.h
@@ -51,8 +51,10 @@ bool music_mask_kb(uint16_t keycode);
bool music_mask_user(uint16_t keycode);
# ifndef SCALE
-# define SCALE \
- (int8_t[]) { 0 + (12 * 0), 2 + (12 * 0), 4 + (12 * 0), 5 + (12 * 0), 7 + (12 * 0), 9 + (12 * 0), 11 + (12 * 0), 0 + (12 * 1), 2 + (12 * 1), 4 + (12 * 1), 5 + (12 * 1), 7 + (12 * 1), 9 + (12 * 1), 11 + (12 * 1), 0 + (12 * 2), 2 + (12 * 2), 4 + (12 * 2), 5 + (12 * 2), 7 + (12 * 2), 9 + (12 * 2), 11 + (12 * 2), 0 + (12 * 3), 2 + (12 * 3), 4 + (12 * 3), 5 + (12 * 3), 7 + (12 * 3), 9 + (12 * 3), 11 + (12 * 3), 0 + (12 * 4), 2 + (12 * 4), 4 + (12 * 4), 5 + (12 * 4), 7 + (12 * 4), 9 + (12 * 4), 11 + (12 * 4), }
+# define SCALE \
+ (int8_t[]) { \
+ 0 + (12 * 0), 2 + (12 * 0), 4 + (12 * 0), 5 + (12 * 0), 7 + (12 * 0), 9 + (12 * 0), 11 + (12 * 0), 0 + (12 * 1), 2 + (12 * 1), 4 + (12 * 1), 5 + (12 * 1), 7 + (12 * 1), 9 + (12 * 1), 11 + (12 * 1), 0 + (12 * 2), 2 + (12 * 2), 4 + (12 * 2), 5 + (12 * 2), 7 + (12 * 2), 9 + (12 * 2), 11 + (12 * 2), 0 + (12 * 3), 2 + (12 * 3), 4 + (12 * 3), 5 + (12 * 3), 7 + (12 * 3), 9 + (12 * 3), 11 + (12 * 3), 0 + (12 * 4), 2 + (12 * 4), 4 + (12 * 4), 5 + (12 * 4), 7 + (12 * 4), 9 + (12 * 4), 11 + (12 * 4), \
+ }
# endif
-#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
+#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c
index 82528cc680..6dd1f28c9b 100644
--- a/quantum/process_keycode/process_printer.c
+++ b/quantum/process_keycode/process_printer.c
@@ -16,16 +16,19 @@
#include "process_printer.h"
#include "action_util.h"
+#include "uart.h"
bool printing_enabled = false;
uint8_t character_shift = 0;
void enable_printing(void) {
printing_enabled = true;
- serial_init();
+ uart_init(19200);
}
-void disable_printing(void) { printing_enabled = false; }
+void disable_printing(void) {
+ printing_enabled = false;
+}
uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
@@ -35,12 +38,13 @@ uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0
void print_char(char c) {
USB_Disable();
- serial_send(c);
+ uart_write(c);
USB_Init();
}
void print_string(char c[]) {
- for (uint8_t i = 0; i < strlen(c); i++) print_char(c[i]);
+ for (uint8_t i = 0; i < strlen(c); i++)
+ print_char(c[i]);
}
void print_box_string(const char text[]) {
diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h
index 3c6d06ff94..6f4d09f333 100644
--- a/quantum/process_keycode/process_printer.h
+++ b/quantum/process_keycode/process_printer.h
@@ -18,6 +18,4 @@
#include "quantum.h"
-#include "protocol/serial.h"
-
bool process_printer(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/process_keycode/process_printer_bb.c b/quantum/process_keycode/process_printer_bb.c
index 6c91bd27ef..88a9f33994 100644
--- a/quantum/process_keycode/process_printer_bb.c
+++ b/quantum/process_keycode/process_printer_bb.c
@@ -25,13 +25,21 @@ uint8_t character_shift = 0;
#define SERIAL_PIN_MASK _BV(PD3)
#define SERIAL_DELAY 52
-inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); }
+inline static void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
-inline static void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; }
+inline static void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
-inline static void serial_low(void) { SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; }
+inline static void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
-inline static void serial_output(void) { SERIAL_PIN_DDR |= SERIAL_PIN_MASK; }
+inline static void serial_output(void) {
+ SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
+}
void enable_printing() {
printing_enabled = true;
@@ -39,7 +47,9 @@ void enable_printing() {
serial_high();
}
-void disable_printing() { printing_enabled = false; }
+void disable_printing() {
+ printing_enabled = false;
+}
uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
@@ -61,7 +71,8 @@ void print_char(char c) {
}
void print_string(char c[]) {
- for (uint8_t i = 0; i < strlen(c); i++) print_char(c[i]);
+ for (uint8_t i = 0; i < strlen(c); i++)
+ print_char(c[i]);
}
bool process_printer(uint16_t keycode, keyrecord_t *record) {
diff --git a/quantum/process_keycode/process_rgb.c b/quantum/process_keycode/process_rgb.c
index 69853cd5c4..c805bd615d 100644
--- a/quantum/process_keycode/process_rgb.c
+++ b/quantum/process_keycode/process_rgb.c
@@ -51,12 +51,8 @@ static void __attribute__((noinline, unused)) handleKeycodeRGBMode(const uint8_t
* Handle keycodes for both rgblight and rgbmatrix
*/
bool process_rgb(const uint16_t keycode, const keyrecord_t *record) {
-#ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-#else
- // Split keyboards need to trigger on key-up for edge-case issue
+ // need to trigger on key-up for edge-case issue
if (!record->event.pressed) {
-#endif
#if (defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)) || (defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES))
uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
#endif
diff --git a/quantum/process_keycode/process_steno.c b/quantum/process_keycode/process_steno.c
index 5d0bb313b4..12ee898212 100644
--- a/quantum/process_keycode/process_steno.c
+++ b/quantum/process_keycode/process_steno.c
@@ -102,11 +102,17 @@ void steno_set_mode(steno_mode_t new_mode) {
/* override to intercept chords right before they get sent.
* return zero to suppress normal sending behavior.
*/
-__attribute__((weak)) bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]) { return true; }
+__attribute__((weak)) bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]) {
+ return true;
+}
-__attribute__((weak)) bool postprocess_steno_user(uint16_t keycode, keyrecord_t *record, steno_mode_t mode, uint8_t chord[6], int8_t pressed) { return true; }
+__attribute__((weak)) bool postprocess_steno_user(uint16_t keycode, keyrecord_t *record, steno_mode_t mode, uint8_t chord[6], int8_t pressed) {
+ return true;
+}
-__attribute__((weak)) bool process_steno_user(uint16_t keycode, keyrecord_t *record) { return true; }
+__attribute__((weak)) bool process_steno_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
static void send_steno_chord(void) {
if (send_steno_chord_user(mode, chord)) {
@@ -114,11 +120,11 @@ static void send_steno_chord(void) {
case STENO_MODE_BOLT:
send_steno_state(BOLT_STATE_SIZE, false);
#ifdef VIRTSER_ENABLE
- virtser_send(0); // terminating byte
+ virtser_send(0); // terminating byte
#endif
break;
case STENO_MODE_GEMINI:
- chord[0] |= 0x80; // Indicate start of packet
+ chord[0] |= 0x80; // Indicate start of packet
send_steno_state(GEMINI_STATE_SIZE, true);
break;
}
@@ -126,9 +132,13 @@ static void send_steno_chord(void) {
steno_clear_state();
}
-uint8_t *steno_get_state(void) { return &state[0]; }
+uint8_t *steno_get_state(void) {
+ return &state[0];
+}
-uint8_t *steno_get_chord(void) { return &chord[0]; }
+uint8_t *steno_get_chord(void) {
+ return &chord[0];
+}
static bool update_state_bolt(uint8_t key, bool press) {
uint8_t boltcode = pgm_read_byte(boltmap + key);
diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c
index c707fdea30..e99119b2ae 100644
--- a/quantum/process_keycode/process_tap_dance.c
+++ b/quantum/process_keycode/process_tap_dance.c
@@ -86,7 +86,9 @@ static inline void _process_tap_dance_action_fn(qk_tap_dance_state_t *state, voi
}
}
-static inline void process_tap_dance_action_on_each_tap(qk_tap_dance_action_t *action) { _process_tap_dance_action_fn(&action->state, action->user_data, action->fn.on_each_tap); }
+static inline void process_tap_dance_action_on_each_tap(qk_tap_dance_action_t *action) {
+ _process_tap_dance_action_fn(&action->state, action->user_data, action->fn.on_each_tap);
+}
static inline void process_tap_dance_action_on_dance_finished(qk_tap_dance_action_t *action) {
if (action->state.finished) return;
@@ -173,7 +175,7 @@ void tap_dance_task() {
tap_user_defined = action->custom_tapping_term;
} else {
#ifdef TAPPING_TERM_PER_KEY
- tap_user_defined = get_tapping_term(action->state.keycode, NULL);
+ tap_user_defined = get_tapping_term(action->state.keycode, &(keyrecord_t){});
#else
tap_user_defined = TAPPING_TERM;
#endif
diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c
index a059f3a521..da1c4d506f 100644
--- a/quantum/process_keycode/process_terminal.c
+++ b/quantum/process_keycode/process_terminal.c
@@ -27,12 +27,12 @@
bool terminal_enabled = false;
char buffer[80] = "";
char cmd_buffer[CMD_BUFF_SIZE][80];
-bool cmd_buffer_enabled = true; // replace with ifdef?
+bool cmd_buffer_enabled = true; // replace with ifdef?
char newline[2] = "\n";
char arguments[6][20];
bool firstTime = true;
-short int current_cmd_buffer_pos = 0; // used for up/down arrows - keeps track of where you are in the command buffer
+short int current_cmd_buffer_pos = 0; // used for up/down arrows - keeps track of where you are in the command buffer
__attribute__((weak)) const char terminal_prompt[8] = "> ";
@@ -59,7 +59,8 @@ void enable_terminal(void) {
terminal_enabled = true;
strcpy(buffer, "");
memset(cmd_buffer, 0, CMD_BUFF_SIZE * 80);
- for (int i = 0; i < 6; i++) strcpy(arguments[i], "");
+ for (int i = 0; i < 6; i++)
+ strcpy(arguments[i], "");
// select all text to start over
// SEND_STRING(SS_LCTL("a"));
send_string(terminal_prompt);
@@ -160,7 +161,7 @@ void print_cmd_buff(void) {
for (int i = 0; i < CMD_BUFF_SIZE; i++) {
char tmpChar = ' ';
itoa(i, &tmpChar, 10);
- const char *tmpCnstCharStr = &tmpChar; // because sned_string wont take a normal char *
+ const char *tmpCnstCharStr = &tmpChar; // because sned_string wont take a normal char *
send_string(tmpCnstCharStr);
SEND_STRING(". ");
send_string(cmd_buffer[i]);
@@ -185,7 +186,7 @@ void terminal_help(void) {
}
void command_not_found(void) {
- wait_ms(50); // sometimes buffer isnt grabbed quick enough
+ wait_ms(50); // sometimes buffer isnt grabbed quick enough
SEND_STRING("command \"");
send_string(buffer);
SEND_STRING("\" not found\n");
@@ -217,15 +218,16 @@ void process_terminal_command(void) {
if (terminal_enabled) {
strcpy(buffer, "");
- for (int i = 0; i < 6; i++) strcpy(arguments[i], "");
+ for (int i = 0; i < 6; i++)
+ strcpy(arguments[i], "");
SEND_STRING(SS_TAP(X_HOME));
send_string(terminal_prompt);
}
}
void check_pos(void) {
- if (current_cmd_buffer_pos >= CMD_BUFF_SIZE) { // if over the top, move it back down to the top of the buffer so you can climb back down...
+ if (current_cmd_buffer_pos >= CMD_BUFF_SIZE) { // if over the top, move it back down to the top of the buffer so you can climb back down...
current_cmd_buffer_pos = CMD_BUFF_SIZE - 1;
- } else if (current_cmd_buffer_pos < 0) { //...and if you fall under the bottom of the buffer, reset back to 0 so you can climb back up
+ } else if (current_cmd_buffer_pos < 0) { //...and if you fall under the bottom of the buffer, reset back to 0 so you can climb back up
current_cmd_buffer_pos = 0;
}
}
@@ -278,33 +280,33 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) {
case KC_RIGHT:
return false;
break;
- case KC_UP: // 0 = recent
- check_pos(); // check our current buffer position is valid
- if (current_cmd_buffer_pos <= CMD_BUFF_SIZE - 1) { // once we get to the top, dont do anything
+ case KC_UP: // 0 = recent
+ check_pos(); // check our current buffer position is valid
+ if (current_cmd_buffer_pos <= CMD_BUFF_SIZE - 1) { // once we get to the top, dont do anything
str_len = strlen(buffer);
for (int i = 0; i < str_len; ++i) {
- send_string(SS_TAP(X_BSPACE)); // clear w/e is on the line already
+ send_string(SS_TAP(X_BSPACE)); // clear w/e is on the line already
// process_terminal(KC_BACKSPACE,record);
}
strncpy(buffer, cmd_buffer[current_cmd_buffer_pos], 80);
send_string(buffer);
- ++current_cmd_buffer_pos; // get ready to access the above cmd if up/down is pressed again
+ ++current_cmd_buffer_pos; // get ready to access the above cmd if up/down is pressed again
}
return false;
break;
case KC_DOWN:
check_pos();
- if (current_cmd_buffer_pos >= 0) { // once we get to the bottom, dont do anything
+ if (current_cmd_buffer_pos >= 0) { // once we get to the bottom, dont do anything
str_len = strlen(buffer);
for (int i = 0; i < str_len; ++i) {
- send_string(SS_TAP(X_BSPACE)); // clear w/e is on the line already
+ send_string(SS_TAP(X_BSPACE)); // clear w/e is on the line already
// process_terminal(KC_BACKSPACE,record);
}
strncpy(buffer, cmd_buffer[current_cmd_buffer_pos], 79);
send_string(buffer);
- --current_cmd_buffer_pos; // get ready to access the above cmd if down/up is pressed again
+ --current_cmd_buffer_pos; // get ready to access the above cmd if down/up is pressed again
}
return false;
break;
diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c
index d084d2b66c..6a8d8f0ff6 100644
--- a/quantum/process_keycode/process_ucis.c
+++ b/quantum/process_keycode/process_ucis.c
@@ -27,7 +27,7 @@ void qk_ucis_start(void) {
__attribute__((weak)) void qk_ucis_start_user(void) {
unicode_input_start();
- register_hex(0x2328); // ⌨
+ register_hex(0x2328); // ⌨
unicode_input_finish();
}
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c
index 7685bb1c99..46b77e14ba 100644
--- a/quantum/process_keycode/process_unicode_common.c
+++ b/quantum/process_keycode/process_unicode_common.c
@@ -54,7 +54,9 @@ void unicode_input_mode_init(void) {
dprintf("Unicode input mode init to: %u\n", unicode_config.input_mode);
}
-uint8_t get_unicode_input_mode(void) { return unicode_config.input_mode; }
+uint8_t get_unicode_input_mode(void) {
+ return unicode_config.input_mode;
+}
void set_unicode_input_mode(uint8_t mode) {
unicode_config.input_mode = mode;
@@ -76,7 +78,9 @@ void cycle_unicode_input_mode(int8_t offset) {
#endif
}
-void persist_unicode_input_mode(void) { eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode); }
+void persist_unicode_input_mode(void) {
+ eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode);
+}
__attribute__((weak)) void unicode_input_start(void) {
unicode_saved_caps_lock = host_keyboard_led_state().caps_lock;
@@ -90,8 +94,8 @@ __attribute__((weak)) void unicode_input_start(void) {
tap_code(KC_CAPS_LOCK);
}
- unicode_saved_mods = get_mods(); // Save current mods
- clear_mods(); // Unregister mods to start from a clean state
+ unicode_saved_mods = get_mods(); // Save current mods
+ clear_mods(); // Unregister mods to start from a clean state
switch (unicode_config.input_mode) {
case UC_MAC:
@@ -140,7 +144,7 @@ __attribute__((weak)) void unicode_input_finish(void) {
break;
}
- set_mods(unicode_saved_mods); // Reregister previously set mods
+ set_mods(unicode_saved_mods); // Reregister previously set mods
}
__attribute__((weak)) void unicode_input_cancel(void) {
@@ -165,7 +169,7 @@ __attribute__((weak)) void unicode_input_cancel(void) {
break;
}
- set_mods(unicode_saved_mods); // Reregister previously set mods
+ set_mods(unicode_saved_mods); // Reregister previously set mods
}
// clang-format off
@@ -262,16 +266,16 @@ void send_unicode_hex_string(const char *str) {
static const char *decode_utf8(const char *str, int32_t *code_point) {
const char *next;
- if (str[0] < 0x80) { // U+0000-007F
+ if (str[0] < 0x80) { // U+0000-007F
*code_point = str[0];
next = str + 1;
- } else if ((str[0] & 0xE0) == 0xC0) { // U+0080-07FF
+ } else if ((str[0] & 0xE0) == 0xC0) { // U+0080-07FF
*code_point = ((int32_t)(str[0] & 0x1F) << 6) | ((int32_t)(str[1] & 0x3F) << 0);
next = str + 2;
- } else if ((str[0] & 0xF0) == 0xE0) { // U+0800-FFFF
+ } else if ((str[0] & 0xF0) == 0xE0) { // U+0800-FFFF
*code_point = ((int32_t)(str[0] & 0x0F) << 12) | ((int32_t)(str[1] & 0x3F) << 6) | ((int32_t)(str[2] & 0x3F) << 0);
next = str + 3;
- } else if ((str[0] & 0xF8) == 0xF0 && (str[0] <= 0xF4)) { // U+10000-10FFFF
+ } else if ((str[0] & 0xF8) == 0xF0 && (str[0] <= 0xF4)) { // U+10000-10FFFF
*code_point = ((int32_t)(str[0] & 0x07) << 18) | ((int32_t)(str[1] & 0x3F) << 12) | ((int32_t)(str[2] & 0x3F) << 6) | ((int32_t)(str[3] & 0x3F) << 0);
next = str + 4;
} else {
diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h
index 72defb445e..1a6607c757 100644
--- a/quantum/process_keycode/process_unicode_common.h
+++ b/quantum/process_keycode/process_unicode_common.h
@@ -59,12 +59,12 @@
#define UC_OSX UC_MAC
enum unicode_input_modes {
- UC_MAC, // macOS using Unicode Hex Input
- UC_LNX, // Linux using IBus
- UC_WIN, // Windows using EnableHexNumpad
- UC_BSD, // BSD (not implemented)
- UC_WINC, // Windows using WinCompose (https://github.com/samhocevar/wincompose)
- UC__COUNT // Number of available input modes (always leave at the end)
+ UC_MAC, // macOS using Unicode Hex Input
+ UC_LNX, // Linux using IBus
+ UC_WIN, // Windows using EnableHexNumpad
+ UC_BSD, // BSD (not implemented)
+ UC_WINC, // Windows using WinCompose (https://github.com/samhocevar/wincompose)
+ UC__COUNT // Number of available input modes (always leave at the end)
};
typedef union {
diff --git a/quantum/programmable_button.c b/quantum/programmable_button.c
index be828fd17c..a3ef42d82b 100644
--- a/quantum/programmable_button.c
+++ b/quantum/programmable_button.c
@@ -22,16 +22,30 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static uint32_t programmable_button_report = 0;
-void programmable_button_clear(void) { programmable_button_report = 0; }
+void programmable_button_clear(void) {
+ programmable_button_report = 0;
+}
-void programmable_button_send(void) { host_programmable_button_send(programmable_button_report); }
+void programmable_button_send(void) {
+ host_programmable_button_send(programmable_button_report);
+}
-void programmable_button_on(uint8_t index) { programmable_button_report |= REPORT_BIT(index); }
+void programmable_button_on(uint8_t index) {
+ programmable_button_report |= REPORT_BIT(index);
+}
-void programmable_button_off(uint8_t index) { programmable_button_report &= ~REPORT_BIT(index); }
+void programmable_button_off(uint8_t index) {
+ programmable_button_report &= ~REPORT_BIT(index);
+}
-bool programmable_button_is_on(uint8_t index) { return !!(programmable_button_report & REPORT_BIT(index)); };
+bool programmable_button_is_on(uint8_t index) {
+ return !!(programmable_button_report & REPORT_BIT(index));
+};
-uint32_t programmable_button_get_report(void) { return programmable_button_report; };
+uint32_t programmable_button_get_report(void) {
+ return programmable_button_report;
+};
-void programmable_button_set_report(uint32_t report) { programmable_button_report = report; }
+void programmable_button_set_report(uint32_t report) {
+ programmable_button_report = report;
+}
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 35b6351e9d..dce41c08ae 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -15,7 +15,6 @@
*/
#include "quantum.h"
-#include "magic.h"
#ifdef BLUETOOTH_ENABLE
# include "outputselect.h"
@@ -47,10 +46,6 @@ float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
# endif
#endif
-#ifdef AUTO_SHIFT_ENABLE
-# include "process_auto_shift.h"
-#endif
-
uint8_t extract_mod_bits(uint16_t code) {
switch (code) {
case QK_MODS ... QK_MODS_MAX:
@@ -61,7 +56,7 @@ uint8_t extract_mod_bits(uint16_t code) {
uint8_t mods_to_send = 0;
- if (code & QK_RMODS_MIN) { // Right mod flag is set
+ if (code & QK_RMODS_MIN) { // Right mod flag is set
if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_RIGHT_CTRL);
if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_RIGHT_SHIFT);
if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_RIGHT_ALT);
@@ -76,9 +71,11 @@ uint8_t extract_mod_bits(uint16_t code) {
return mods_to_send;
}
-static void do_code16(uint16_t code, void (*f)(uint8_t)) { f(extract_mod_bits(code)); }
+void do_code16(uint16_t code, void (*f)(uint8_t)) {
+ f(extract_mod_bits(code));
+}
-void register_code16(uint16_t code) {
+__attribute__((weak)) void register_code16(uint16_t code) {
if (IS_MOD(code) || code == KC_NO) {
do_code16(code, register_mods);
} else {
@@ -87,7 +84,7 @@ void register_code16(uint16_t code) {
register_code(code);
}
-void unregister_code16(uint16_t code) {
+__attribute__((weak)) void unregister_code16(uint16_t code) {
unregister_code(code);
if (IS_MOD(code) || code == KC_NO) {
do_code16(code, unregister_mods);
@@ -96,21 +93,31 @@ void unregister_code16(uint16_t code) {
}
}
-void tap_code16(uint16_t code) {
+__attribute__((weak)) void tap_code16(uint16_t code) {
register_code16(code);
-#if TAP_CODE_DELAY > 0
- wait_ms(TAP_CODE_DELAY);
-#endif
+ if (code == KC_CAPS_LOCK) {
+ wait_ms(TAP_HOLD_CAPS_DELAY);
+ } else if (TAP_CODE_DELAY > 0) {
+ wait_ms(TAP_CODE_DELAY);
+ }
unregister_code16(code);
}
-__attribute__((weak)) bool process_action_kb(keyrecord_t *record) { return true; }
+__attribute__((weak)) bool process_action_kb(keyrecord_t *record) {
+ return true;
+}
-__attribute__((weak)) bool process_record_kb(uint16_t keycode, keyrecord_t *record) { return process_record_user(keycode, record); }
+__attribute__((weak)) bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_user(keycode, record);
+}
-__attribute__((weak)) bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }
+__attribute__((weak)) bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
-__attribute__((weak)) void post_process_record_kb(uint16_t keycode, keyrecord_t *record) { post_process_record_user(keycode, record); }
+__attribute__((weak)) void post_process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ post_process_record_user(keycode, record);
+}
__attribute__((weak)) void post_process_record_user(uint16_t keycode, keyrecord_t *record) {}
@@ -126,7 +133,8 @@ void reset_keyboard(void) {
uint16_t timer_start = timer_read();
PLAY_SONG(goodbye_song);
shutdown_user();
- while (timer_elapsed(timer_start) < 250) wait_ms(1);
+ while (timer_elapsed(timer_start) < 250)
+ wait_ms(1);
stop_all_notes();
#else
shutdown_user();
@@ -181,7 +189,7 @@ bool pre_process_record_quantum(keyrecord_t *record) {
true)) {
return false;
}
- return true; // continue processing
+ return true; // continue processing
}
/* Get keycode, and then call keyboard function */
@@ -263,7 +271,7 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef TAP_DANCE_ENABLE
process_tap_dance(keycode, record) &&
#endif
-#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
+#if defined(UNICODE_COMMON_ENABLE)
process_unicode_common(keycode, record) &&
#endif
#ifdef LEADER_ENABLE
@@ -306,12 +314,12 @@ bool process_record_quantum(keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
#ifndef NO_RESET
- case RESET:
+ case QK_BOOTLOADER:
reset_keyboard();
return false;
#endif
#ifndef NO_DEBUG
- case DEBUG:
+ case QK_DEBUG_TOGGLE:
debug_enable ^= 1;
if (debug_enable) {
print("DEBUG: enabled.\n");
@@ -320,7 +328,7 @@ bool process_record_quantum(keyrecord_t *record) {
}
#endif
return false;
- case EEPROM_RESET:
+ case QK_CLEAR_EEPROM:
eeconfig_init();
return false;
#ifdef VELOCIKEY_ENABLE
@@ -370,104 +378,18 @@ layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_
return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3);
}
-void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3)); }
+void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3));
+}
+// TODO: remove legacy api
void matrix_init_quantum() {
- magic();
- led_init_ports();
-#ifdef BACKLIGHT_ENABLE
- backlight_init_ports();
-#endif
-#ifdef AUDIO_ENABLE
- audio_init();
-#endif
-#ifdef LED_MATRIX_ENABLE
- led_matrix_init();
-#endif
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_init();
-#endif
-#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
- unicode_input_mode_init();
-#endif
-#ifdef HAPTIC_ENABLE
- haptic_init();
-#endif
-#if defined(BLUETOOTH_ENABLE) && defined(OUTPUT_AUTO_ENABLE)
- set_output(OUTPUT_AUTO);
-#endif
-
matrix_init_kb();
}
-
void matrix_scan_quantum() {
-#if defined(AUDIO_ENABLE) && defined(AUDIO_INIT_DELAY)
- // There are some tasks that need to be run a little bit
- // after keyboard startup, or else they will not work correctly
- // because of interaction with the USB device state, which
- // may still be in flux...
- //
- // At the moment the only feature that needs this is the
- // startup song.
- static bool delayed_tasks_run = false;
- static uint16_t delayed_task_timer = 0;
- if (!delayed_tasks_run) {
- if (!delayed_task_timer) {
- delayed_task_timer = timer_read();
- } else if (timer_elapsed(delayed_task_timer) > 300) {
- audio_startup();
- delayed_tasks_run = true;
- }
- }
-#endif
-
-#if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
- music_task();
-#endif
-
-#ifdef KEY_OVERRIDE_ENABLE
- key_override_task();
-#endif
-
-#ifdef SEQUENCER_ENABLE
- sequencer_task();
-#endif
-
-#ifdef TAP_DANCE_ENABLE
- tap_dance_task();
-#endif
-
-#ifdef COMBO_ENABLE
- combo_task();
-#endif
-
-#ifdef LED_MATRIX_ENABLE
- led_matrix_task();
-#endif
-
-#ifdef WPM_ENABLE
- decay_wpm();
-#endif
-
-#ifdef HAPTIC_ENABLE
- haptic_task();
-#endif
-
-#ifdef DIP_SWITCH_ENABLE
- dip_switch_read(false);
-#endif
-
-#ifdef AUTO_SHIFT_ENABLE
- autoshift_matrix_scan();
-#endif
-
matrix_scan_kb();
}
-#ifdef HD44780_ENABLED
-# include "hd44780.h"
-#endif
-
//------------------------------------------------------------------------------
// Override these functions in your keymap file to play different tunes on
// different events such as startup and bootloader jump
@@ -476,17 +398,6 @@ __attribute__((weak)) void startup_user() {}
__attribute__((weak)) void shutdown_user() {}
-/** \brief Run keyboard level Power down
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_power_down_user(void) {}
-/** \brief Run keyboard level Power down
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_power_down_kb(void) { suspend_power_down_user(); }
-
void suspend_power_down_quantum(void) {
#ifndef NO_SUSPEND_POWER_DOWN
// Turn off backlight
@@ -502,14 +413,7 @@ void suspend_power_down_quantum(void) {
# endif
// Turn off LED indicators
- uint8_t leds_off = 0;
-# if defined(BACKLIGHT_CAPS_LOCK) && defined(BACKLIGHT_ENABLE)
- if (is_backlight_enabled()) {
- // Don't try to turn off Caps Lock indicator as it is backlight and backlight is already off
- leds_off |= (1 << USB_LED_CAPS_LOCK);
- }
-# endif
- led_set(leds_off);
+ led_suspend();
// Turn off audio
# ifdef AUDIO_ENABLE
@@ -541,18 +445,6 @@ void suspend_power_down_quantum(void) {
#endif
}
-/** \brief run user level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_user(void) {}
-
-/** \brief run keyboard level code immediately after wakeup
- *
- * FIXME: needs doc
- */
-__attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); }
-
__attribute__((weak)) void suspend_wakeup_init_quantum(void) {
// Turn on backlight
#ifdef BACKLIGHT_ENABLE
@@ -560,7 +452,7 @@ __attribute__((weak)) void suspend_wakeup_init_quantum(void) {
#endif
// Restore LED indicators
- led_set(host_keyboard_leds());
+ led_wakeup();
// Wake up underglow
#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 6927884e2f..020e455941 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -109,6 +109,10 @@ extern layer_state_t layer_state;
# include "process_unicodemap.h"
#endif
+#ifdef UNICODE_COMMON_ENABLE
+# include "process_unicode_common.h"
+#endif
+
#ifdef KEY_OVERRIDE_ENABLE
# include "process_key_override.h"
#endif
@@ -245,11 +249,6 @@ void register_code16(uint16_t code);
void unregister_code16(uint16_t code);
void tap_code16(uint16_t code);
-void led_set_user(uint8_t usb_led);
-void led_set_kb(uint8_t usb_led);
-bool led_update_user(led_t led_state);
-bool led_update_kb(led_t led_state);
-
const char *get_numeric_str(char *buf, size_t buf_len, uint32_t curr_num, char curr_pad);
const char *get_u8_str(uint8_t curr_num, char curr_pad);
const char *get_u16_str(uint16_t curr_num, char curr_pad);
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index e4d0167aac..2552c48165 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -37,10 +37,6 @@ enum quantum_keycodes {
QK_RALT = 0x1400,
QK_RGUI = 0x1800,
QK_MODS_MAX = 0x1FFF,
- QK_FUNCTION = 0x2000,
- QK_FUNCTION_MAX = 0x2FFF,
- QK_MACRO = 0x3000,
- QK_MACRO_MAX = 0x3FFF,
QK_LAYER_TAP = 0x4000,
QK_LAYER_TAP_MAX = 0x4FFF,
QK_TO = 0x5000,
@@ -80,422 +76,422 @@ enum quantum_keycodes {
QK_UNICODEMAP_PAIR_MAX = 0xFFFF,
// Loose keycodes - to be used directly
- RESET = 0x5C00,
- DEBUG, // 5C01
+ QK_BOOTLOADER = 0x5C00,
+ QK_DEBUG_TOGGLE, // 5C01
// Magic
- MAGIC_SWAP_CONTROL_CAPSLOCK, // 5C02
- MAGIC_CAPSLOCK_TO_CONTROL, // 5C03
- MAGIC_SWAP_LALT_LGUI, // 5C04
- MAGIC_SWAP_RALT_RGUI, // 5C05
- MAGIC_NO_GUI, // 5C06
- MAGIC_SWAP_GRAVE_ESC, // 5C07
- MAGIC_SWAP_BACKSLASH_BACKSPACE, // 5C08
- MAGIC_HOST_NKRO, // 5C09
- MAGIC_SWAP_ALT_GUI, // 5C0A
- MAGIC_UNSWAP_CONTROL_CAPSLOCK, // 5C0B
- MAGIC_UNCAPSLOCK_TO_CONTROL, // 5C0C
- MAGIC_UNSWAP_LALT_LGUI, // 5C0D
- MAGIC_UNSWAP_RALT_RGUI, // 5C0E
- MAGIC_UNNO_GUI, // 5C0F
- MAGIC_UNSWAP_GRAVE_ESC, // 5C10
- MAGIC_UNSWAP_BACKSLASH_BACKSPACE, // 5C11
- MAGIC_UNHOST_NKRO, // 5C12
- MAGIC_UNSWAP_ALT_GUI, // 5C13
- MAGIC_TOGGLE_NKRO, // 5C14
- MAGIC_TOGGLE_ALT_GUI, // 5C15
+ MAGIC_SWAP_CONTROL_CAPSLOCK, // 5C02
+ MAGIC_CAPSLOCK_TO_CONTROL, // 5C03
+ MAGIC_SWAP_LALT_LGUI, // 5C04
+ MAGIC_SWAP_RALT_RGUI, // 5C05
+ MAGIC_NO_GUI, // 5C06
+ MAGIC_SWAP_GRAVE_ESC, // 5C07
+ MAGIC_SWAP_BACKSLASH_BACKSPACE, // 5C08
+ MAGIC_HOST_NKRO, // 5C09
+ MAGIC_SWAP_ALT_GUI, // 5C0A
+ MAGIC_UNSWAP_CONTROL_CAPSLOCK, // 5C0B
+ MAGIC_UNCAPSLOCK_TO_CONTROL, // 5C0C
+ MAGIC_UNSWAP_LALT_LGUI, // 5C0D
+ MAGIC_UNSWAP_RALT_RGUI, // 5C0E
+ MAGIC_UNNO_GUI, // 5C0F
+ MAGIC_UNSWAP_GRAVE_ESC, // 5C10
+ MAGIC_UNSWAP_BACKSLASH_BACKSPACE, // 5C11
+ MAGIC_UNHOST_NKRO, // 5C12
+ MAGIC_UNSWAP_ALT_GUI, // 5C13
+ MAGIC_TOGGLE_NKRO, // 5C14
+ MAGIC_TOGGLE_ALT_GUI, // 5C15
// Grave Escape
- GRAVE_ESC, // 5C16
+ QK_GRAVE_ESCAPE, // 5C16
// Auto Shift
- KC_ASUP, // 5C17
- KC_ASDN, // 5C18
- KC_ASRP, // 5C19
- KC_ASTG, // 5C1A
- KC_ASON, // 5C1B
- KC_ASOFF, // 5C1C
+ KC_ASUP, // 5C17
+ KC_ASDN, // 5C18
+ KC_ASRP, // 5C19
+ KC_ASTG, // 5C1A
+ KC_ASON, // 5C1B
+ KC_ASOFF, // 5C1C
// Audio
- AU_ON, // 5C1D
- AU_OFF, // 5C1E
- AU_TOG, // 5C1F
+ AU_ON, // 5C1D
+ AU_OFF, // 5C1E
+ AU_TOG, // 5C1F
// Audio Clicky
- CLICKY_TOGGLE, // 5C20
- CLICKY_ENABLE, // 5C21
- CLICKY_DISABLE, // 5C22
- CLICKY_UP, // 5C23
- CLICKY_DOWN, // 5C24
- CLICKY_RESET, // 5C25
+ CLICKY_TOGGLE, // 5C20
+ CLICKY_ENABLE, // 5C21
+ CLICKY_DISABLE, // 5C22
+ CLICKY_UP, // 5C23
+ CLICKY_DOWN, // 5C24
+ CLICKY_RESET, // 5C25
// Music mode
- MU_ON, // 5C26
- MU_OFF, // 5C27
- MU_TOG, // 5C28
- MU_MOD, // 5C29
- MUV_IN, // 5C2A
- MUV_DE, // 5C2B
+ MU_ON, // 5C26
+ MU_OFF, // 5C27
+ MU_TOG, // 5C28
+ MU_MOD, // 5C29
+ MUV_IN, // 5C2A
+ MUV_DE, // 5C2B
// MIDI
- MI_ON, // 5C2C
- MI_OFF, // 5C2D
- MI_TOG, // 5C2E
+ MI_ON, // 5C2C
+ MI_OFF, // 5C2D
+ MI_TOG, // 5C2E
- MI_C, // 5C2F
- MI_Cs, // 5C30
+ MI_C, // 5C2F
+ MI_Cs, // 5C30
MI_Db = MI_Cs,
- MI_D, // 5C31
- MI_Ds, // 5C32
+ MI_D, // 5C31
+ MI_Ds, // 5C32
MI_Eb = MI_Ds,
- MI_E, // 5C33
- MI_F, // 5C34
- MI_Fs, // 5C35
+ MI_E, // 5C33
+ MI_F, // 5C34
+ MI_Fs, // 5C35
MI_Gb = MI_Fs,
- MI_G, // 5C36
- MI_Gs, // 5C37
+ MI_G, // 5C36
+ MI_Gs, // 5C37
MI_Ab = MI_Gs,
- MI_A, // 5C38
- MI_As, // 5C39
+ MI_A, // 5C38
+ MI_As, // 5C39
MI_Bb = MI_As,
- MI_B, // 5C3A
+ MI_B, // 5C3A
- MI_C_1, // 5C3B
- MI_Cs_1, // 5C3C
+ MI_C_1, // 5C3B
+ MI_Cs_1, // 5C3C
MI_Db_1 = MI_Cs_1,
- MI_D_1, // 5C3D
- MI_Ds_1, // 5C3E
+ MI_D_1, // 5C3D
+ MI_Ds_1, // 5C3E
MI_Eb_1 = MI_Ds_1,
- MI_E_1, // 5C3F
- MI_F_1, // 5C40
- MI_Fs_1, // 5C41
+ MI_E_1, // 5C3F
+ MI_F_1, // 5C40
+ MI_Fs_1, // 5C41
MI_Gb_1 = MI_Fs_1,
- MI_G_1, // 5C42
- MI_Gs_1, // 5C43
+ MI_G_1, // 5C42
+ MI_Gs_1, // 5C43
MI_Ab_1 = MI_Gs_1,
- MI_A_1, // 5C44
- MI_As_1, // 5C45
+ MI_A_1, // 5C44
+ MI_As_1, // 5C45
MI_Bb_1 = MI_As_1,
- MI_B_1, // 5C46
+ MI_B_1, // 5C46
- MI_C_2, // 5C47
- MI_Cs_2, // 5C48
+ MI_C_2, // 5C47
+ MI_Cs_2, // 5C48
MI_Db_2 = MI_Cs_2,
- MI_D_2, // 5C49
- MI_Ds_2, // 5C4A
+ MI_D_2, // 5C49
+ MI_Ds_2, // 5C4A
MI_Eb_2 = MI_Ds_2,
- MI_E_2, // 5C4B
- MI_F_2, // 5C4C
- MI_Fs_2, // 5C4D
+ MI_E_2, // 5C4B
+ MI_F_2, // 5C4C
+ MI_Fs_2, // 5C4D
MI_Gb_2 = MI_Fs_2,
- MI_G_2, // 5C4E
- MI_Gs_2, // 5C4F
+ MI_G_2, // 5C4E
+ MI_Gs_2, // 5C4F
MI_Ab_2 = MI_Gs_2,
- MI_A_2, // 5C50
- MI_As_2, // 5C51
+ MI_A_2, // 5C50
+ MI_As_2, // 5C51
MI_Bb_2 = MI_As_2,
- MI_B_2, // 5C52
+ MI_B_2, // 5C52
- MI_C_3, // 5C53
- MI_Cs_3, // 5C54
+ MI_C_3, // 5C53
+ MI_Cs_3, // 5C54
MI_Db_3 = MI_Cs_3,
- MI_D_3, // 5C55
- MI_Ds_3, // 5C56
+ MI_D_3, // 5C55
+ MI_Ds_3, // 5C56
MI_Eb_3 = MI_Ds_3,
- MI_E_3, // 5C57
- MI_F_3, // 5C58
- MI_Fs_3, // 5C59
+ MI_E_3, // 5C57
+ MI_F_3, // 5C58
+ MI_Fs_3, // 5C59
MI_Gb_3 = MI_Fs_3,
- MI_G_3, // 5C5A
- MI_Gs_3, // 5C5B
+ MI_G_3, // 5C5A
+ MI_Gs_3, // 5C5B
MI_Ab_3 = MI_Gs_3,
- MI_A_3, // 5C5C
- MI_As_3, // 5C5D
+ MI_A_3, // 5C5C
+ MI_As_3, // 5C5D
MI_Bb_3 = MI_As_3,
- MI_B_3, // 5C5E
+ MI_B_3, // 5C5E
- MI_C_4, // 5C5F
- MI_Cs_4, // 5C60
+ MI_C_4, // 5C5F
+ MI_Cs_4, // 5C60
MI_Db_4 = MI_Cs_4,
- MI_D_4, // 5C61
- MI_Ds_4, // 5C62
+ MI_D_4, // 5C61
+ MI_Ds_4, // 5C62
MI_Eb_4 = MI_Ds_4,
- MI_E_4, // 5C63
- MI_F_4, // 5C64
- MI_Fs_4, // 5C65
+ MI_E_4, // 5C63
+ MI_F_4, // 5C64
+ MI_Fs_4, // 5C65
MI_Gb_4 = MI_Fs_4,
- MI_G_4, // 5C66
- MI_Gs_4, // 5C67
+ MI_G_4, // 5C66
+ MI_Gs_4, // 5C67
MI_Ab_4 = MI_Gs_4,
- MI_A_4, // 5C68
- MI_As_4, // 5C69
+ MI_A_4, // 5C68
+ MI_As_4, // 5C69
MI_Bb_4 = MI_As_4,
- MI_B_4, // 5C6A
+ MI_B_4, // 5C6A
- MI_C_5, // 5C6B
- MI_Cs_5, // 5C6C
+ MI_C_5, // 5C6B
+ MI_Cs_5, // 5C6C
MI_Db_5 = MI_Cs_5,
- MI_D_5, // 5C6D
- MI_Ds_5, // 5C6E
+ MI_D_5, // 5C6D
+ MI_Ds_5, // 5C6E
MI_Eb_5 = MI_Ds_5,
- MI_E_5, // 5C6F
- MI_F_5, // 5C70
- MI_Fs_5, // 5C71
+ MI_E_5, // 5C6F
+ MI_F_5, // 5C70
+ MI_Fs_5, // 5C71
MI_Gb_5 = MI_Fs_5,
- MI_G_5, // 5C72
- MI_Gs_5, // 5C73
+ MI_G_5, // 5C72
+ MI_Gs_5, // 5C73
MI_Ab_5 = MI_Gs_5,
- MI_A_5, // 5C74
- MI_As_5, // 5C75
+ MI_A_5, // 5C74
+ MI_As_5, // 5C75
MI_Bb_5 = MI_As_5,
- MI_B_5, // 5C76
-
- MI_OCT_N2, // 5C77
- MI_OCT_N1, // 5C78
- MI_OCT_0, // 5C79
- MI_OCT_1, // 5C7A
- MI_OCT_2, // 5C7B
- MI_OCT_3, // 5C7C
- MI_OCT_4, // 5C7D
- MI_OCT_5, // 5C7E
- MI_OCT_6, // 5C7F
- MI_OCT_7, // 5C80
- MI_OCTD, // 5C81
- MI_OCTU, // 5C82
-
- MI_TRNS_N6, // 5C83
- MI_TRNS_N5, // 5C84
- MI_TRNS_N4, // 5C85
- MI_TRNS_N3, // 5C86
- MI_TRNS_N2, // 5C87
- MI_TRNS_N1, // 5C88
- MI_TRNS_0, // 5C89
- MI_TRNS_1, // 5C8A
- MI_TRNS_2, // 5C8B
- MI_TRNS_3, // 5C8C
- MI_TRNS_4, // 5C8D
- MI_TRNS_5, // 5C8E
- MI_TRNS_6, // 5C8F
- MI_TRNSD, // 5C90
- MI_TRNSU, // 5C91
-
- MI_VEL_0, // 5C92
+ MI_B_5, // 5C76
+
+ MI_OCT_N2, // 5C77
+ MI_OCT_N1, // 5C78
+ MI_OCT_0, // 5C79
+ MI_OCT_1, // 5C7A
+ MI_OCT_2, // 5C7B
+ MI_OCT_3, // 5C7C
+ MI_OCT_4, // 5C7D
+ MI_OCT_5, // 5C7E
+ MI_OCT_6, // 5C7F
+ MI_OCT_7, // 5C80
+ MI_OCTD, // 5C81
+ MI_OCTU, // 5C82
+
+ MI_TRNS_N6, // 5C83
+ MI_TRNS_N5, // 5C84
+ MI_TRNS_N4, // 5C85
+ MI_TRNS_N3, // 5C86
+ MI_TRNS_N2, // 5C87
+ MI_TRNS_N1, // 5C88
+ MI_TRNS_0, // 5C89
+ MI_TRNS_1, // 5C8A
+ MI_TRNS_2, // 5C8B
+ MI_TRNS_3, // 5C8C
+ MI_TRNS_4, // 5C8D
+ MI_TRNS_5, // 5C8E
+ MI_TRNS_6, // 5C8F
+ MI_TRNSD, // 5C90
+ MI_TRNSU, // 5C91
+
+ MI_VEL_0, // 5C92
#ifdef VIA_ENABLE
MI_VEL_1 = MI_VEL_0,
#else
- MI_VEL_1, // 5C93
+ MI_VEL_1, // 5C93
#endif
- MI_VEL_2, // 5C94
- MI_VEL_3, // 5C95
- MI_VEL_4, // 5C96
- MI_VEL_5, // 5C97
- MI_VEL_6, // 5C98
- MI_VEL_7, // 5C99
- MI_VEL_8, // 5C9A
- MI_VEL_9, // 5C9B
- MI_VEL_10, // 5C9C
- MI_VELD, // 5C9D
- MI_VELU, // 5C9E
-
- MI_CH1, // 5C9F
- MI_CH2, // 5CA0
- MI_CH3, // 5CA1
- MI_CH4, // 5CA2
- MI_CH5, // 5CA3
- MI_CH6, // 5CA4
- MI_CH7, // 5CA5
- MI_CH8, // 5CA6
- MI_CH9, // 5CA7
- MI_CH10, // 5CA8
- MI_CH11, // 5CA9
- MI_CH12, // 5CAA
- MI_CH13, // 5CAB
- MI_CH14, // 5CAC
- MI_CH15, // 5CAD
- MI_CH16, // 5CAE
- MI_CHD, // 5CAF
- MI_CHU, // 5CB0
-
- MI_ALLOFF, // 5CB1
-
- MI_SUS, // 5CB2
- MI_PORT, // 5CB3
- MI_SOST, // 5CB4
- MI_SOFT, // 5CB5
- MI_LEG, // 5CB6
-
- MI_MOD, // 5CB7
- MI_MODSD, // 5CB8
- MI_MODSU, // 5CB9
-
- MI_BENDD, // 5CBA
- MI_BENDU, // 5CBB
+ MI_VEL_2, // 5C94
+ MI_VEL_3, // 5C95
+ MI_VEL_4, // 5C96
+ MI_VEL_5, // 5C97
+ MI_VEL_6, // 5C98
+ MI_VEL_7, // 5C99
+ MI_VEL_8, // 5C9A
+ MI_VEL_9, // 5C9B
+ MI_VEL_10, // 5C9C
+ MI_VELD, // 5C9D
+ MI_VELU, // 5C9E
+
+ MI_CH1, // 5C9F
+ MI_CH2, // 5CA0
+ MI_CH3, // 5CA1
+ MI_CH4, // 5CA2
+ MI_CH5, // 5CA3
+ MI_CH6, // 5CA4
+ MI_CH7, // 5CA5
+ MI_CH8, // 5CA6
+ MI_CH9, // 5CA7
+ MI_CH10, // 5CA8
+ MI_CH11, // 5CA9
+ MI_CH12, // 5CAA
+ MI_CH13, // 5CAB
+ MI_CH14, // 5CAC
+ MI_CH15, // 5CAD
+ MI_CH16, // 5CAE
+ MI_CHD, // 5CAF
+ MI_CHU, // 5CB0
+
+ MI_ALLOFF, // 5CB1
+
+ MI_SUS, // 5CB2
+ MI_PORT, // 5CB3
+ MI_SOST, // 5CB4
+ MI_SOFT, // 5CB5
+ MI_LEG, // 5CB6
+
+ MI_MOD, // 5CB7
+ MI_MODSD, // 5CB8
+ MI_MODSU, // 5CB9
+
+ MI_BENDD, // 5CBA
+ MI_BENDU, // 5CBB
// Backlight
- BL_ON, // 5CBC
- BL_OFF, // 5CBD
- BL_DEC, // 5CBE
- BL_INC, // 5CBF
- BL_TOGG, // 5CC0
- BL_STEP, // 5CC1
- BL_BRTG, // 5CC2
+ BL_ON, // 5CBC
+ BL_OFF, // 5CBD
+ BL_DEC, // 5CBE
+ BL_INC, // 5CBF
+ BL_TOGG, // 5CC0
+ BL_STEP, // 5CC1
+ BL_BRTG, // 5CC2
// RGB underglow/matrix
- RGB_TOG, // 5CC3
- RGB_MODE_FORWARD, // 5CC4
- RGB_MODE_REVERSE, // 5CC5
- RGB_HUI, // 5CC6
- RGB_HUD, // 5CC7
- RGB_SAI, // 5CC8
- RGB_SAD, // 5CC9
- RGB_VAI, // 5CCA
- RGB_VAD, // 5CCB
- RGB_SPI, // 5CCC
- RGB_SPD, // 5CCD
- RGB_MODE_PLAIN, // 5CCE
- RGB_MODE_BREATHE, // 5CCF
- RGB_MODE_RAINBOW, // 5CD0
- RGB_MODE_SWIRL, // 5CD1
- RGB_MODE_SNAKE, // 5CD2
- RGB_MODE_KNIGHT, // 5CD3
- RGB_MODE_XMAS, // 5CD4
- RGB_MODE_GRADIENT, // 5CD5
- RGB_MODE_RGBTEST, // 5CD6
+ RGB_TOG, // 5CC3
+ RGB_MODE_FORWARD, // 5CC4
+ RGB_MODE_REVERSE, // 5CC5
+ RGB_HUI, // 5CC6
+ RGB_HUD, // 5CC7
+ RGB_SAI, // 5CC8
+ RGB_SAD, // 5CC9
+ RGB_VAI, // 5CCA
+ RGB_VAD, // 5CCB
+ RGB_SPI, // 5CCC
+ RGB_SPD, // 5CCD
+ RGB_MODE_PLAIN, // 5CCE
+ RGB_MODE_BREATHE, // 5CCF
+ RGB_MODE_RAINBOW, // 5CD0
+ RGB_MODE_SWIRL, // 5CD1
+ RGB_MODE_SNAKE, // 5CD2
+ RGB_MODE_KNIGHT, // 5CD3
+ RGB_MODE_XMAS, // 5CD4
+ RGB_MODE_GRADIENT, // 5CD5
+ RGB_MODE_RGBTEST, // 5CD6
// Velocikey
- VLK_TOG, // 5CD7
+ VLK_TOG, // 5CD7
// Space Cadet
- KC_LSPO, // 5CD8
- KC_RSPC, // 5CD9
- KC_SFTENT, // 5CDA
+ KC_LSPO, // 5CD8
+ KC_RSPC, // 5CD9
+ KC_SFTENT, // 5CDA
// Thermal Printer
- PRINT_ON, // 5CDB
- PRINT_OFF, // 5CDC
+ PRINT_ON, // 5CDB
+ PRINT_OFF, // 5CDC
// Bluetooth: output selection
- OUT_AUTO, // 5CDD
- OUT_USB, // 5CDE
+ OUT_AUTO, // 5CDD
+ OUT_USB, // 5CDE
// Clear EEPROM
- EEPROM_RESET, // 5CDF
+ QK_CLEAR_EEPROM, // 5CDF
// Unicode
- UNICODE_MODE_FORWARD, // 5CE0
- UNICODE_MODE_REVERSE, // 5CE1
- UNICODE_MODE_MAC, // 5CE2
- UNICODE_MODE_LNX, // 5CE3
- UNICODE_MODE_WIN, // 5CE4
- UNICODE_MODE_BSD, // 5CE5
- UNICODE_MODE_WINC, // 5CE6
+ UNICODE_MODE_FORWARD, // 5CE0
+ UNICODE_MODE_REVERSE, // 5CE1
+ UNICODE_MODE_MAC, // 5CE2
+ UNICODE_MODE_LNX, // 5CE3
+ UNICODE_MODE_WIN, // 5CE4
+ UNICODE_MODE_BSD, // 5CE5
+ UNICODE_MODE_WINC, // 5CE6
// Haptic
- HPT_ON, // 5CE7
- HPT_OFF, // 5CE8
- HPT_TOG, // 5CE9
- HPT_RST, // 5CEA
- HPT_FBK, // 5CEB
- HPT_BUZ, // 5CEC
- HPT_MODI, // 5CED
- HPT_MODD, // 5CEE
- HPT_CONT, // 5CEF
- HPT_CONI, // 5CF0
- HPT_COND, // 5CF1
- HPT_DWLI, // 5CF2
- HPT_DWLD, // 5CF3
+ HPT_ON, // 5CE7
+ HPT_OFF, // 5CE8
+ HPT_TOG, // 5CE9
+ HPT_RST, // 5CEA
+ HPT_FBK, // 5CEB
+ HPT_BUZ, // 5CEC
+ HPT_MODI, // 5CED
+ HPT_MODD, // 5CEE
+ HPT_CONT, // 5CEF
+ HPT_CONI, // 5CF0
+ HPT_COND, // 5CF1
+ HPT_DWLI, // 5CF2
+ HPT_DWLD, // 5CF3
// Space Cadet (continued)
- KC_LCPO, // 5CF4
- KC_RCPC, // 5CF5
- KC_LAPO, // 5CF6
- KC_RAPC, // 5CF7
+ KC_LCPO, // 5CF4
+ KC_RCPC, // 5CF5
+ KC_LAPO, // 5CF6
+ KC_RAPC, // 5CF7
// Combos
- CMB_ON, // 5CF8
- CMB_OFF, // 5CF9
- CMB_TOG, // 5CFA
+ CMB_ON, // 5CF8
+ CMB_OFF, // 5CF9
+ CMB_TOG, // 5CFA
// Magic (continued)
- MAGIC_SWAP_LCTL_LGUI, // 5CFB
- MAGIC_SWAP_RCTL_RGUI, // 5CFC
- MAGIC_UNSWAP_LCTL_LGUI, // 5CFD
- MAGIC_UNSWAP_RCTL_RGUI, // 5CFE
- MAGIC_SWAP_CTL_GUI, // 5CFF
- MAGIC_UNSWAP_CTL_GUI, // 5D00
- MAGIC_TOGGLE_CTL_GUI, // 5D01
- MAGIC_EE_HANDS_LEFT, // 5D02
- MAGIC_EE_HANDS_RIGHT, // 5D03
+ MAGIC_SWAP_LCTL_LGUI, // 5CFB
+ MAGIC_SWAP_RCTL_RGUI, // 5CFC
+ MAGIC_UNSWAP_LCTL_LGUI, // 5CFD
+ MAGIC_UNSWAP_RCTL_RGUI, // 5CFE
+ MAGIC_SWAP_CTL_GUI, // 5CFF
+ MAGIC_UNSWAP_CTL_GUI, // 5D00
+ MAGIC_TOGGLE_CTL_GUI, // 5D01
+ MAGIC_EE_HANDS_LEFT, // 5D02
+ MAGIC_EE_HANDS_RIGHT, // 5D03
// Dynamic Macros
- DYN_REC_START1, // 5D04
- DYN_REC_START2, // 5D05
- DYN_REC_STOP, // 5D06
- DYN_MACRO_PLAY1, // 5D07
- DYN_MACRO_PLAY2, // 5D08
+ DYN_REC_START1, // 5D04
+ DYN_REC_START2, // 5D05
+ DYN_REC_STOP, // 5D06
+ DYN_MACRO_PLAY1, // 5D07
+ DYN_MACRO_PLAY2, // 5D08
// Joystick
- JS_BUTTON0, // 5D09
- JS_BUTTON1, // 5D0A
- JS_BUTTON2, // 5D0B
- JS_BUTTON3, // 5D0C
- JS_BUTTON4, // 5D0D
- JS_BUTTON5, // 5D0E
- JS_BUTTON6, // 5D0F
- JS_BUTTON7, // 5D10
- JS_BUTTON8, // 5D11
- JS_BUTTON9, // 5D12
- JS_BUTTON10, // 5D13
- JS_BUTTON11, // 5D14
- JS_BUTTON12, // 5D15
- JS_BUTTON13, // 5D16
- JS_BUTTON14, // 5D17
- JS_BUTTON15, // 5D18
- JS_BUTTON16, // 5D19
- JS_BUTTON17, // 5D1A
- JS_BUTTON18, // 5D1B
- JS_BUTTON19, // 5D1C
- JS_BUTTON20, // 5D1D
- JS_BUTTON21, // 5D1E
- JS_BUTTON22, // 5D1F
- JS_BUTTON23, // 5D20
- JS_BUTTON24, // 5D21
- JS_BUTTON25, // 5D22
- JS_BUTTON26, // 5D23
- JS_BUTTON27, // 5D24
- JS_BUTTON28, // 5D25
- JS_BUTTON29, // 5D26
- JS_BUTTON30, // 5D27
- JS_BUTTON31, // 5D28
+ JS_BUTTON0, // 5D09
+ JS_BUTTON1, // 5D0A
+ JS_BUTTON2, // 5D0B
+ JS_BUTTON3, // 5D0C
+ JS_BUTTON4, // 5D0D
+ JS_BUTTON5, // 5D0E
+ JS_BUTTON6, // 5D0F
+ JS_BUTTON7, // 5D10
+ JS_BUTTON8, // 5D11
+ JS_BUTTON9, // 5D12
+ JS_BUTTON10, // 5D13
+ JS_BUTTON11, // 5D14
+ JS_BUTTON12, // 5D15
+ JS_BUTTON13, // 5D16
+ JS_BUTTON14, // 5D17
+ JS_BUTTON15, // 5D18
+ JS_BUTTON16, // 5D19
+ JS_BUTTON17, // 5D1A
+ JS_BUTTON18, // 5D1B
+ JS_BUTTON19, // 5D1C
+ JS_BUTTON20, // 5D1D
+ JS_BUTTON21, // 5D1E
+ JS_BUTTON22, // 5D1F
+ JS_BUTTON23, // 5D20
+ JS_BUTTON24, // 5D21
+ JS_BUTTON25, // 5D22
+ JS_BUTTON26, // 5D23
+ JS_BUTTON27, // 5D24
+ JS_BUTTON28, // 5D25
+ JS_BUTTON29, // 5D26
+ JS_BUTTON30, // 5D27
+ JS_BUTTON31, // 5D28
// Leader Key
- KC_LEAD, // 5D29
+ KC_LEAD, // 5D29
// Bluetooth: output selection (continued)
- OUT_BT, // 5D2A
+ OUT_BT, // 5D2A
// Lock Key
- KC_LOCK, // 5D2B
+ KC_LOCK, // 5D2B
// Terminal
- TERM_ON, // 5D2C
- TERM_OFF, // 5D2D
+ TERM_ON, // 5D2C
+ TERM_OFF, // 5D2D
// Sequencer
- SQ_ON, // 5D2E
- SQ_OFF, // 5D2F
- SQ_TOG, // 5D30
+ SQ_ON, // 5D2E
+ SQ_OFF, // 5D2F
+ SQ_TOG, // 5D30
- SQ_TMPD, // 5D31
- SQ_TMPU, // 5D32
+ SQ_TMPD, // 5D31
+ SQ_TMPU, // 5D32
- SQ_RESD, // 5D33
- SQ_RESU, // 5D34
+ SQ_RESD, // 5D33
+ SQ_RESU, // 5D34
- SQ_SALL, // 5D35
- SQ_SCLR, // 5D36
+ SQ_SALL, // 5D35
+ SQ_SCLR, // 5D36
- SEQUENCER_STEP_MIN, // 5D37
+ SEQUENCER_STEP_MIN, // 5D37
SEQUENCER_STEP_MAX = SEQUENCER_STEP_MIN + SEQUENCER_STEPS,
SEQUENCER_RESOLUTION_MIN,
@@ -597,6 +593,8 @@ enum quantum_keycodes {
MACRO_30,
MACRO_31,
+ MAGIC_TOGGLE_CONTROL_CAPSLOCK,
+
// Start of custom keycode range for keyboards and keymaps - always leave at the end
SAFE_RANGE
};
@@ -638,69 +636,69 @@ enum quantum_keycodes {
#define MOD_MEH 0x7
// US ANSI shifted keycode aliases
-#define KC_TILDE LSFT(KC_GRAVE) // ~
+#define KC_TILDE LSFT(KC_GRAVE) // ~
#define KC_TILD KC_TILDE
-#define KC_EXCLAIM LSFT(KC_1) // !
+#define KC_EXCLAIM LSFT(KC_1) // !
#define KC_EXLM KC_EXCLAIM
-#define KC_AT LSFT(KC_2) // @
+#define KC_AT LSFT(KC_2) // @
-#define KC_HASH LSFT(KC_3) // #
+#define KC_HASH LSFT(KC_3) // #
-#define KC_DOLLAR LSFT(KC_4) // $
+#define KC_DOLLAR LSFT(KC_4) // $
#define KC_DLR KC_DOLLAR
-#define KC_PERCENT LSFT(KC_5) // %
+#define KC_PERCENT LSFT(KC_5) // %
#define KC_PERC KC_PERCENT
-#define KC_CIRCUMFLEX LSFT(KC_6) // ^
+#define KC_CIRCUMFLEX LSFT(KC_6) // ^
#define KC_CIRC KC_CIRCUMFLEX
-#define KC_AMPERSAND LSFT(KC_7) // &
+#define KC_AMPERSAND LSFT(KC_7) // &
#define KC_AMPR KC_AMPERSAND
-#define KC_ASTERISK LSFT(KC_8) // *
+#define KC_ASTERISK LSFT(KC_8) // *
#define KC_ASTR KC_ASTERISK
-#define KC_LEFT_PAREN LSFT(KC_9) // (
+#define KC_LEFT_PAREN LSFT(KC_9) // (
#define KC_LPRN KC_LEFT_PAREN
-#define KC_RIGHT_PAREN LSFT(KC_0) // )
+#define KC_RIGHT_PAREN LSFT(KC_0) // )
#define KC_RPRN KC_RIGHT_PAREN
-#define KC_UNDERSCORE LSFT(KC_MINUS) // _
+#define KC_UNDERSCORE LSFT(KC_MINUS) // _
#define KC_UNDS KC_UNDERSCORE
-#define KC_PLUS LSFT(KC_EQUAL) // +
+#define KC_PLUS LSFT(KC_EQUAL) // +
-#define KC_LEFT_CURLY_BRACE LSFT(KC_LEFT_BRACKET) // {
+#define KC_LEFT_CURLY_BRACE LSFT(KC_LEFT_BRACKET) // {
#define KC_LCBR KC_LEFT_CURLY_BRACE
-#define KC_RIGHT_CURLY_BRACE LSFT(KC_RIGHT_BRACKET) // }
+#define KC_RIGHT_CURLY_BRACE LSFT(KC_RIGHT_BRACKET) // }
#define KC_RCBR KC_RIGHT_CURLY_BRACE
-#define KC_LEFT_ANGLE_BRACKET LSFT(KC_COMMA) // <
+#define KC_LEFT_ANGLE_BRACKET LSFT(KC_COMMA) // <
#define KC_LABK KC_LEFT_ANGLE_BRACKET
#define KC_LT KC_LEFT_ANGLE_BRACKET
-#define KC_RIGHT_ANGLE_BRACKET LSFT(KC_DOT) // >
+#define KC_RIGHT_ANGLE_BRACKET LSFT(KC_DOT) // >
#define KC_RABK KC_RIGHT_ANGLE_BRACKET
#define KC_GT KC_RIGHT_ANGLE_BRACKET
-#define KC_COLON LSFT(KC_SEMICOLON) // :
+#define KC_COLON LSFT(KC_SEMICOLON) // :
#define KC_COLN KC_COLON
-#define KC_PIPE LSFT(KC_BACKSLASH) // |
+#define KC_PIPE LSFT(KC_BACKSLASH) // |
-#define KC_QUESTION LSFT(KC_SLASH) // ?
+#define KC_QUESTION LSFT(KC_SLASH) // ?
#define KC_QUES KC_QUESTION
-#define KC_DOUBLE_QUOTE LSFT(KC_QUOTE) // "
+#define KC_DOUBLE_QUOTE LSFT(KC_QUOTE) // "
#define KC_DQUO KC_DOUBLE_QUOTE
#define KC_DQT KC_DOUBLE_QUOTE
-#define KC_DELT KC_DELETE // Del key (four letter code)
+#define KC_DELT KC_DELETE // Del key (four letter code)
// Modified keycode aliases
#define C(kc) LCTL(kc)
@@ -708,15 +706,11 @@ enum quantum_keycodes {
#define A(kc) LALT(kc)
#define G(kc) LGUI(kc)
-// Deprecated - do not use
-#define F(kc) (QK_FUNCTION | (kc))
-#define M(kc) (QK_MACRO | (kc))
-#define MACROTAP(kc) (QK_MACRO | (FUNC_TAP << 8) | (kc))
-#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
-
-#define KC_GESC GRAVE_ESC
+#define QK_GESC QK_GRAVE_ESCAPE
-#define EEP_RST EEPROM_RESET
+#define QK_BOOT QK_BOOTLOADER
+#define DB_TOGG QK_DEBUG_TOGGLE
+#define EE_CLR QK_CLEAR_EEPROM
// Audio Clicky aliases
#define CK_TOGG CLICKY_TOGGLE
@@ -749,6 +743,7 @@ enum quantum_keycodes {
#define CL_NORM MAGIC_UNSWAP_CONTROL_CAPSLOCK
#define CL_CTRL MAGIC_CAPSLOCK_TO_CONTROL
#define CL_CAPS MAGIC_UNCAPSLOCK_TO_CONTROL
+#define CL_TOGG MAGIC_TOGGLE_CONTROL_CAPSLOCK
#define LCG_SWP MAGIC_SWAP_LCTL_LGUI
#define LCG_NRM MAGIC_UNSWAP_LCTL_LGUI
@@ -846,22 +841,22 @@ enum quantum_keycodes {
#define CMD_T(kc) LCMD_T(kc)
#define WIN_T(kc) LWIN_T(kc)
-#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal
-#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt
-#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI
-#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI
-#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
-#define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI
+#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal
+#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt
+#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI
+#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI
+#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
+#define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI
#define SGUI_T(kc) LSG_T(kc)
#define SCMD_T(kc) LSG_T(kc)
#define SWIN_T(kc) LSG_T(kc)
-#define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc) // Left Alt + GUI
-#define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc) // Right Shift + GUI
-#define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc) // Right Alt + GUI
-#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt
-#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) // Left Shift + Alt
-#define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc) // Right Shift + Alt
-#define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc) // Right Control + Shift
+#define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc) // Left Alt + GUI
+#define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc) // Right Shift + GUI
+#define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc) // Right Alt + GUI
+#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt
+#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) // Left Shift + Alt
+#define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc) // Right Shift + Alt
+#define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc) // Right Control + Shift
#define SAGR_T(kc) RSA_T(kc)
#define ALL_T(kc) HYPR_T(kc)
@@ -875,14 +870,14 @@ enum quantum_keycodes {
#define UC(c) (QK_UNICODE | (c))
// UNICODEMAP_ENABLE - Allows Unicode input up to 0x10FFFF, requires unicode_map
#define X(i) (QK_UNICODEMAP | (i))
-#define XP(i, j) (QK_UNICODEMAP_PAIR | ((i)&0x7F) | (((j)&0x7F) << 7)) // 127 max i and j
+#define XP(i, j) (QK_UNICODEMAP_PAIR | ((i)&0x7F) | (((j)&0x7F) << 7)) // 127 max i and j
#define UC_MOD UNICODE_MODE_FORWARD
#define UC_RMOD UNICODE_MODE_REVERSE
#define UC_M_MA UNICODE_MODE_MAC
-#define UNICODE_MODE_OSX UNICODE_MODE_MAC // Deprecated alias
-#define UC_M_OS UNICODE_MODE_MAC // Deprecated alias
+#define UNICODE_MODE_OSX UNICODE_MODE_MAC // Deprecated alias
+#define UC_M_OS UNICODE_MODE_MAC // Deprecated alias
#define UC_M_LN UNICODE_MODE_LNX
#define UC_M_WI UNICODE_MODE_WIN
#define UC_M_BS UNICODE_MODE_BSD
@@ -961,3 +956,5 @@ enum quantum_keycodes {
#define PB_32 PROGRAMMABLE_BUTTON_32
#define PROGRAMMABLE_BUTTON_MIN PROGRAMMABLE_BUTTON_1
#define PROGRAMMABLE_BUTTON_MAX PROGRAMMABLE_BUTTON_32
+
+#include "quantum_keycodes_legacy.h"
diff --git a/quantum/quantum_keycodes_legacy.h b/quantum/quantum_keycodes_legacy.h
new file mode 100644
index 0000000000..ed9455ee74
--- /dev/null
+++ b/quantum/quantum_keycodes_legacy.h
@@ -0,0 +1,13 @@
+#pragma once
+
+// clang-format off
+
+// Deprecated Quantum keycodes
+
+#define RESET QK_BOOTLOADER
+#define DEBUG QK_DEBUG_TOGGLE
+#define GRAVE_ESC QK_GRAVE_ESCAPE
+#define EEPROM_RESET QK_CLEAR_EEPROM
+
+#define KC_GESC QK_GRAVE_ESCAPE
+#define EEP_RST QK_CLEAR_EEPROM
diff --git a/quantum/rgb_matrix/animations/alpha_mods_anim.h b/quantum/rgb_matrix/animations/alpha_mods_anim.h
index d6136f1ba4..59b8381d69 100644
--- a/quantum/rgb_matrix/animations/alpha_mods_anim.h
+++ b/quantum/rgb_matrix/animations/alpha_mods_anim.h
@@ -22,5 +22,5 @@ bool ALPHAS_MODS(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_ALPHAS_MODS
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_ALPHAS_MODS
diff --git a/quantum/rgb_matrix/animations/breathing_anim.h b/quantum/rgb_matrix/animations/breathing_anim.h
index 29187e1543..e9a3c96e1b 100644
--- a/quantum/rgb_matrix/animations/breathing_anim.h
+++ b/quantum/rgb_matrix/animations/breathing_anim.h
@@ -16,5 +16,5 @@ bool BREATHING(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BREATHING
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BREATHING
diff --git a/quantum/rgb_matrix/animations/colorband_pinwheel_sat_anim.h b/quantum/rgb_matrix/animations/colorband_pinwheel_sat_anim.h
index 0375d4937d..06aa8b5ed5 100644
--- a/quantum/rgb_matrix/animations/colorband_pinwheel_sat_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_pinwheel_sat_anim.h
@@ -7,7 +7,9 @@ static HSV BAND_PINWHEEL_SAT_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time)
return hsv;
}
-bool BAND_PINWHEEL_SAT(effect_params_t* params) { return effect_runner_dx_dy(params, &BAND_PINWHEEL_SAT_math); }
+bool BAND_PINWHEEL_SAT(effect_params_t* params) {
+ return effect_runner_dx_dy(params, &BAND_PINWHEEL_SAT_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
diff --git a/quantum/rgb_matrix/animations/colorband_pinwheel_val_anim.h b/quantum/rgb_matrix/animations/colorband_pinwheel_val_anim.h
index e40bf4cd1f..bcbc319498 100644
--- a/quantum/rgb_matrix/animations/colorband_pinwheel_val_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_pinwheel_val_anim.h
@@ -7,7 +7,9 @@ static HSV BAND_PINWHEEL_VAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time)
return hsv;
}
-bool BAND_PINWHEEL_VAL(effect_params_t* params) { return effect_runner_dx_dy(params, &BAND_PINWHEEL_VAL_math); }
+bool BAND_PINWHEEL_VAL(effect_params_t* params) {
+ return effect_runner_dx_dy(params, &BAND_PINWHEEL_VAL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
diff --git a/quantum/rgb_matrix/animations/colorband_sat_anim.h b/quantum/rgb_matrix/animations/colorband_sat_anim.h
index 1c4f7de575..cb0897ad3e 100644
--- a/quantum/rgb_matrix/animations/colorband_sat_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_sat_anim.h
@@ -8,7 +8,9 @@ static HSV BAND_SAT_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool BAND_SAT(effect_params_t* params) { return effect_runner_i(params, &BAND_SAT_math); }
+bool BAND_SAT(effect_params_t* params) {
+ return effect_runner_i(params, &BAND_SAT_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_SAT
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_SAT
diff --git a/quantum/rgb_matrix/animations/colorband_spiral_sat_anim.h b/quantum/rgb_matrix/animations/colorband_spiral_sat_anim.h
index cdd02b3797..d26eb37855 100644
--- a/quantum/rgb_matrix/animations/colorband_spiral_sat_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_spiral_sat_anim.h
@@ -7,7 +7,9 @@ static HSV BAND_SPIRAL_SAT_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, u
return hsv;
}
-bool BAND_SPIRAL_SAT(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_SAT_math); }
+bool BAND_SPIRAL_SAT(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_SAT_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
diff --git a/quantum/rgb_matrix/animations/colorband_spiral_val_anim.h b/quantum/rgb_matrix/animations/colorband_spiral_val_anim.h
index e1331eaebe..3ae34bb6f0 100644
--- a/quantum/rgb_matrix/animations/colorband_spiral_val_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_spiral_val_anim.h
@@ -7,7 +7,9 @@ static HSV BAND_SPIRAL_VAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, u
return hsv;
}
-bool BAND_SPIRAL_VAL(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_VAL_math); }
+bool BAND_SPIRAL_VAL(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &BAND_SPIRAL_VAL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
diff --git a/quantum/rgb_matrix/animations/colorband_val_anim.h b/quantum/rgb_matrix/animations/colorband_val_anim.h
index 02ee4add67..69c29f53a3 100644
--- a/quantum/rgb_matrix/animations/colorband_val_anim.h
+++ b/quantum/rgb_matrix/animations/colorband_val_anim.h
@@ -8,7 +8,9 @@ static HSV BAND_VAL_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool BAND_VAL(effect_params_t* params) { return effect_runner_i(params, &BAND_VAL_math); }
+bool BAND_VAL(effect_params_t* params) {
+ return effect_runner_i(params, &BAND_VAL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_BAND_VAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_BAND_VAL
diff --git a/quantum/rgb_matrix/animations/cycle_all_anim.h b/quantum/rgb_matrix/animations/cycle_all_anim.h
index 3b73b9d385..d8c7220d95 100644
--- a/quantum/rgb_matrix/animations/cycle_all_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_all_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_ALL_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool CYCLE_ALL(effect_params_t* params) { return effect_runner_i(params, &CYCLE_ALL_math); }
+bool CYCLE_ALL(effect_params_t* params) {
+ return effect_runner_i(params, &CYCLE_ALL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_ALL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_ALL
diff --git a/quantum/rgb_matrix/animations/cycle_left_right_anim.h b/quantum/rgb_matrix/animations/cycle_left_right_anim.h
index bf6a574069..84c2127aff 100644
--- a/quantum/rgb_matrix/animations/cycle_left_right_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_left_right_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_LEFT_RIGHT_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool CYCLE_LEFT_RIGHT(effect_params_t* params) { return effect_runner_i(params, &CYCLE_LEFT_RIGHT_math); }
+bool CYCLE_LEFT_RIGHT(effect_params_t* params) {
+ return effect_runner_i(params, &CYCLE_LEFT_RIGHT_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
diff --git a/quantum/rgb_matrix/animations/cycle_out_in_anim.h b/quantum/rgb_matrix/animations/cycle_out_in_anim.h
index 2bdb9d9375..9513fe9593 100644
--- a/quantum/rgb_matrix/animations/cycle_out_in_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_out_in_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_OUT_IN_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint
return hsv;
}
-bool CYCLE_OUT_IN(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &CYCLE_OUT_IN_math); }
+bool CYCLE_OUT_IN(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &CYCLE_OUT_IN_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_OUT_IN
diff --git a/quantum/rgb_matrix/animations/cycle_out_in_dual_anim.h b/quantum/rgb_matrix/animations/cycle_out_in_dual_anim.h
index 51979c44fe..3cca45f27a 100644
--- a/quantum/rgb_matrix/animations/cycle_out_in_dual_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_out_in_dual_anim.h
@@ -9,7 +9,9 @@ static HSV CYCLE_OUT_IN_DUAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time)
return hsv;
}
-bool CYCLE_OUT_IN_DUAL(effect_params_t* params) { return effect_runner_dx_dy(params, &CYCLE_OUT_IN_DUAL_math); }
+bool CYCLE_OUT_IN_DUAL(effect_params_t* params) {
+ return effect_runner_dx_dy(params, &CYCLE_OUT_IN_DUAL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
diff --git a/quantum/rgb_matrix/animations/cycle_pinwheel_anim.h b/quantum/rgb_matrix/animations/cycle_pinwheel_anim.h
index 10ba2b7c2c..de5993992c 100644
--- a/quantum/rgb_matrix/animations/cycle_pinwheel_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_pinwheel_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_PINWHEEL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time) {
return hsv;
}
-bool CYCLE_PINWHEEL(effect_params_t* params) { return effect_runner_dx_dy(params, &CYCLE_PINWHEEL_math); }
+bool CYCLE_PINWHEEL(effect_params_t* params) {
+ return effect_runner_dx_dy(params, &CYCLE_PINWHEEL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
diff --git a/quantum/rgb_matrix/animations/cycle_spiral_anim.h b/quantum/rgb_matrix/animations/cycle_spiral_anim.h
index 482c7e7da6..904450179e 100644
--- a/quantum/rgb_matrix/animations/cycle_spiral_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_spiral_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_SPIRAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint
return hsv;
}
-bool CYCLE_SPIRAL(effect_params_t* params) { return effect_runner_dx_dy_dist(params, &CYCLE_SPIRAL_math); }
+bool CYCLE_SPIRAL(effect_params_t* params) {
+ return effect_runner_dx_dy_dist(params, &CYCLE_SPIRAL_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_SPIRAL
diff --git a/quantum/rgb_matrix/animations/cycle_up_down_anim.h b/quantum/rgb_matrix/animations/cycle_up_down_anim.h
index 277edccb2f..dce05fecff 100644
--- a/quantum/rgb_matrix/animations/cycle_up_down_anim.h
+++ b/quantum/rgb_matrix/animations/cycle_up_down_anim.h
@@ -7,7 +7,9 @@ static HSV CYCLE_UP_DOWN_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool CYCLE_UP_DOWN(effect_params_t* params) { return effect_runner_i(params, &CYCLE_UP_DOWN_math); }
+bool CYCLE_UP_DOWN(effect_params_t* params) {
+ return effect_runner_i(params, &CYCLE_UP_DOWN_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
diff --git a/quantum/rgb_matrix/animations/digital_rain_anim.h b/quantum/rgb_matrix/animations/digital_rain_anim.h
index 8ce8fd7039..4633145ff6 100644
--- a/quantum/rgb_matrix/animations/digital_rain_anim.h
+++ b/quantum/rgb_matrix/animations/digital_rain_anim.h
@@ -71,5 +71,5 @@ bool DIGITAL_RAIN(effect_params_t* params) {
return false;
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && !defined(ENABLE_RGB_MATRIX_DIGITAL_RAIN)
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && !defined(ENABLE_RGB_MATRIX_DIGITAL_RAIN)
diff --git a/quantum/rgb_matrix/animations/dual_beacon_anim.h b/quantum/rgb_matrix/animations/dual_beacon_anim.h
index dbe9b3ecf1..5585015b86 100644
--- a/quantum/rgb_matrix/animations/dual_beacon_anim.h
+++ b/quantum/rgb_matrix/animations/dual_beacon_anim.h
@@ -7,7 +7,9 @@ static HSV DUAL_BEACON_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t
return hsv;
}
-bool DUAL_BEACON(effect_params_t* params) { return effect_runner_sin_cos_i(params, &DUAL_BEACON_math); }
+bool DUAL_BEACON(effect_params_t* params) {
+ return effect_runner_sin_cos_i(params, &DUAL_BEACON_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_DUAL_BEACON
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_DUAL_BEACON
diff --git a/quantum/rgb_matrix/animations/gradient_left_right_anim.h b/quantum/rgb_matrix/animations/gradient_left_right_anim.h
index 8bb5e570bd..ebb06f59f2 100644
--- a/quantum/rgb_matrix/animations/gradient_left_right_anim.h
+++ b/quantum/rgb_matrix/animations/gradient_left_right_anim.h
@@ -18,5 +18,5 @@ bool GRADIENT_LEFT_RIGHT(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
diff --git a/quantum/rgb_matrix/animations/gradient_up_down_anim.h b/quantum/rgb_matrix/animations/gradient_up_down_anim.h
index a5674583e3..febc3919a8 100644
--- a/quantum/rgb_matrix/animations/gradient_up_down_anim.h
+++ b/quantum/rgb_matrix/animations/gradient_up_down_anim.h
@@ -18,5 +18,5 @@ bool GRADIENT_UP_DOWN(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
diff --git a/quantum/rgb_matrix/animations/hue_breathing_anim.h b/quantum/rgb_matrix/animations/hue_breathing_anim.h
index 82be1a4424..8537762832 100644
--- a/quantum/rgb_matrix/animations/hue_breathing_anim.h
+++ b/quantum/rgb_matrix/animations/hue_breathing_anim.h
@@ -18,5 +18,5 @@ bool HUE_BREATHING(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // DISABLE_RGB_HUE_BREATHING
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // DISABLE_RGB_HUE_BREATHING
diff --git a/quantum/rgb_matrix/animations/hue_pendulum_anim.h b/quantum/rgb_matrix/animations/hue_pendulum_anim.h
index a6e1c1074d..7d8cbcdfb2 100644
--- a/quantum/rgb_matrix/animations/hue_pendulum_anim.h
+++ b/quantum/rgb_matrix/animations/hue_pendulum_anim.h
@@ -11,7 +11,9 @@ static HSV HUE_PENDULUM_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool HUE_PENDULUM(effect_params_t* params) { return effect_runner_i(params, &HUE_PENDULUM_math); }
+bool HUE_PENDULUM(effect_params_t* params) {
+ return effect_runner_i(params, &HUE_PENDULUM_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // DISABLE_RGB_HUE_PENDULUM
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // DISABLE_RGB_HUE_PENDULUM
diff --git a/quantum/rgb_matrix/animations/hue_wave_anim.h b/quantum/rgb_matrix/animations/hue_wave_anim.h
index b1c72b7336..81aa7e139e 100644
--- a/quantum/rgb_matrix/animations/hue_wave_anim.h
+++ b/quantum/rgb_matrix/animations/hue_wave_anim.h
@@ -11,7 +11,9 @@ static HSV HUE_WAVE_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool HUE_WAVE(effect_params_t* params) { return effect_runner_i(params, &HUE_WAVE_math); }
+bool HUE_WAVE(effect_params_t* params) {
+ return effect_runner_i(params, &HUE_WAVE_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // DISABLE_RGB_HUE_WAVE
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // DISABLE_RGB_HUE_WAVE
diff --git a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
index 3ffb57eb35..31dffcbc5a 100644
--- a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
+++ b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
@@ -25,5 +25,5 @@ bool JELLYBEAN_RAINDROPS(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
diff --git a/quantum/rgb_matrix/animations/pixel_flow_anim.h b/quantum/rgb_matrix/animations/pixel_flow_anim.h
new file mode 100644
index 0000000000..714f5d174e
--- /dev/null
+++ b/quantum/rgb_matrix/animations/pixel_flow_anim.h
@@ -0,0 +1,51 @@
+// Copyright 2022 @filterpaper
+// SPDX-License-Identifier: GPL-2.0+
+
+#ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW
+RGB_MATRIX_EFFECT(PIXEL_FLOW)
+# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+static bool PIXEL_FLOW(effect_params_t* params) {
+ // LED state array
+ static RGB led[DRIVER_LED_TOTAL];
+
+ static uint32_t wait_timer = 0;
+ if (wait_timer > g_rgb_timer) {
+ return false;
+ }
+
+ inline uint32_t interval(void) {
+ return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16);
+ }
+
+ if (params->init) {
+ // Clear LEDs and fill the state array
+ rgb_matrix_set_color_all(0, 0, 0);
+ for (uint8_t j = 0; j < DRIVER_LED_TOTAL; ++j) {
+ led[j] = (random8() & 2) ? (RGB){0, 0, 0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v});
+ }
+ }
+
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ // Light LEDs based on state array
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ rgb_matrix_set_color(i, led[i].r, led[i].g, led[i].b);
+ }
+
+ if (!rgb_matrix_check_finished_leds(led_max)) {
+ // Shift LED state forward
+ for (uint8_t j = 0; j < led_max - 1; ++j) {
+ led[j] = led[j + 1];
+ }
+ // Fill last LED
+ led[led_max - 1] = (random8() & 2) ? (RGB){0, 0, 0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v});
+ // Set pulse timer
+ wait_timer = g_rgb_timer + interval();
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_PIXEL_FLOW
diff --git a/quantum/rgb_matrix/animations/pixel_fractal_anim.h b/quantum/rgb_matrix/animations/pixel_fractal_anim.h
index 8e25ec402c..906da1a48e 100644
--- a/quantum/rgb_matrix/animations/pixel_fractal_anim.h
+++ b/quantum/rgb_matrix/animations/pixel_fractal_anim.h
@@ -29,11 +29,17 @@ static bool PIXEL_FRACTAL(effect_params_t* params) {
return false;
}
- inline uint32_t interval(void) { return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); }
+ inline uint32_t interval(void) {
+ return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16);
+ }
+
+ if (params->init) {
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv);
for (uint8_t h = 0; h < MATRIX_ROWS; ++h) {
- for (uint8_t l = 0; l < MID_COL - 1; ++l) { // Light and move left columns outwards
+ for (uint8_t l = 0; l < MID_COL - 1; ++l) { // Light and move left columns outwards
if (led[h][l]) {
rgb_matrix_set_color(g_led_config.matrix_co[h][l], rgb.r, rgb.g, rgb.b);
} else {
@@ -42,7 +48,7 @@ static bool PIXEL_FRACTAL(effect_params_t* params) {
led[h][l] = led[h][l + 1];
}
- for (uint8_t r = MATRIX_COLS - 1; r > MID_COL; --r) { // Light and move right columns outwards
+ for (uint8_t r = MATRIX_COLS - 1; r > MID_COL; --r) { // Light and move right columns outwards
if (led[h][r]) {
rgb_matrix_set_color(g_led_config.matrix_co[h][r], rgb.r, rgb.g, rgb.b);
} else {
@@ -70,5 +76,5 @@ static bool PIXEL_FRACTAL(effect_params_t* params) {
wait_timer = g_rgb_timer + interval();
return false;
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_PIXEL_FRACTAL
diff --git a/quantum/rgb_matrix/animations/pixel_rain_anim.h b/quantum/rgb_matrix/animations/pixel_rain_anim.h
index 001649aa6e..03488b43df 100644
--- a/quantum/rgb_matrix/animations/pixel_rain_anim.h
+++ b/quantum/rgb_matrix/animations/pixel_rain_anim.h
@@ -24,7 +24,9 @@ static bool PIXEL_RAIN(effect_params_t* params) {
return false;
}
- inline uint32_t interval(void) { return 500 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); }
+ inline uint32_t interval(void) {
+ return 500 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16);
+ }
bool rain_pixel(uint8_t i, effect_params_t * params, bool off) {
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) {
@@ -44,5 +46,5 @@ static bool PIXEL_RAIN(effect_params_t* params) {
return rain_pixel(mod8(random8(), DRIVER_LED_TOTAL), params, random8() & 2);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_PIXEL_RAIN
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_PIXEL_RAIN
diff --git a/quantum/rgb_matrix/animations/rainbow_beacon_anim.h b/quantum/rgb_matrix/animations/rainbow_beacon_anim.h
index cd529958db..bdcca5530f 100644
--- a/quantum/rgb_matrix/animations/rainbow_beacon_anim.h
+++ b/quantum/rgb_matrix/animations/rainbow_beacon_anim.h
@@ -7,7 +7,9 @@ static HSV RAINBOW_BEACON_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8
return hsv;
}
-bool RAINBOW_BEACON(effect_params_t* params) { return effect_runner_sin_cos_i(params, &RAINBOW_BEACON_math); }
+bool RAINBOW_BEACON(effect_params_t* params) {
+ return effect_runner_sin_cos_i(params, &RAINBOW_BEACON_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_RAINBOW_BEACON
diff --git a/quantum/rgb_matrix/animations/rainbow_moving_chevron_anim.h b/quantum/rgb_matrix/animations/rainbow_moving_chevron_anim.h
index 2f3de64e9d..f7b8f6c2f3 100644
--- a/quantum/rgb_matrix/animations/rainbow_moving_chevron_anim.h
+++ b/quantum/rgb_matrix/animations/rainbow_moving_chevron_anim.h
@@ -7,7 +7,9 @@ static HSV RAINBOW_MOVING_CHEVRON_math(HSV hsv, uint8_t i, uint8_t time) {
return hsv;
}
-bool RAINBOW_MOVING_CHEVRON(effect_params_t* params) { return effect_runner_i(params, &RAINBOW_MOVING_CHEVRON_math); }
+bool RAINBOW_MOVING_CHEVRON(effect_params_t* params) {
+ return effect_runner_i(params, &RAINBOW_MOVING_CHEVRON_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
diff --git a/quantum/rgb_matrix/animations/rainbow_pinwheels_anim.h b/quantum/rgb_matrix/animations/rainbow_pinwheels_anim.h
index dae2b5d190..91e31ea8cc 100644
--- a/quantum/rgb_matrix/animations/rainbow_pinwheels_anim.h
+++ b/quantum/rgb_matrix/animations/rainbow_pinwheels_anim.h
@@ -7,7 +7,9 @@ static HSV RAINBOW_PINWHEELS_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, ui
return hsv;
}
-bool RAINBOW_PINWHEELS(effect_params_t* params) { return effect_runner_sin_cos_i(params, &RAINBOW_PINWHEELS_math); }
+bool RAINBOW_PINWHEELS(effect_params_t* params) {
+ return effect_runner_sin_cos_i(params, &RAINBOW_PINWHEELS_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h
index 4b1b9dd9ec..2d4b53b7b0 100644
--- a/quantum/rgb_matrix/animations/raindrops_anim.h
+++ b/quantum/rgb_matrix/animations/raindrops_anim.h
@@ -35,5 +35,5 @@ bool RAINDROPS(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // ENABLE_RGB_MATRIX_RAINDROPS
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // ENABLE_RGB_MATRIX_RAINDROPS
diff --git a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
index 27ce347235..ac7bac428d 100644
--- a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
+++ b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
@@ -27,6 +27,7 @@
#include "hue_pendulum_anim.h"
#include "hue_wave_anim.h"
#include "pixel_rain_anim.h"
+#include "pixel_flow_anim.h"
#include "pixel_fractal_anim.h"
#include "typing_heatmap_anim.h"
#include "digital_rain_anim.h"
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
index d5c1a26cef..f9584d7071 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
@@ -26,4 +26,4 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
return rgb_matrix_check_finished_leds(led_max);
}
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
index d3a6e4e72f..41020eb47f 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
@@ -26,4 +26,4 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react
return rgb_matrix_check_finished_leds(led_max);
}
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_color_anim.h b/quantum/rgb_matrix/animations/solid_color_anim.h
index 4209959468..c8762dcbc2 100644
--- a/quantum/rgb_matrix/animations/solid_color_anim.h
+++ b/quantum/rgb_matrix/animations/solid_color_anim.h
@@ -12,4 +12,4 @@ bool SOLID_COLOR(effect_params_t* params) {
return rgb_matrix_check_finished_leds(led_max);
}
-#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/solid_reactive_anim.h b/quantum/rgb_matrix/animations/solid_reactive_anim.h
index 360d05a67a..d3a7ebbdf7 100644
--- a/quantum/rgb_matrix/animations/solid_reactive_anim.h
+++ b/quantum/rgb_matrix/animations/solid_reactive_anim.h
@@ -8,8 +8,10 @@ static HSV SOLID_REACTIVE_math(HSV hsv, uint16_t offset) {
return hsv;
}
-bool SOLID_REACTIVE(effect_params_t* params) { return effect_runner_reactive(params, &SOLID_REACTIVE_math); }
+bool SOLID_REACTIVE(effect_params_t* params) {
+ return effect_runner_reactive(params, &SOLID_REACTIVE_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // ENABLE_RGB_MATRIX_SOLID_REACTIVE
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_reactive_cross.h b/quantum/rgb_matrix/animations/solid_reactive_cross.h
index 496651f8a5..043a369b73 100644
--- a/quantum/rgb_matrix/animations/solid_reactive_cross.h
+++ b/quantum/rgb_matrix/animations/solid_reactive_cross.h
@@ -24,13 +24,17 @@ static HSV SOLID_REACTIVE_CROSS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t di
}
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-bool SOLID_REACTIVE_CROSS(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_CROSS_math); }
+bool SOLID_REACTIVE_CROSS(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_CROSS_math);
+}
# endif
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-bool SOLID_REACTIVE_MULTICROSS(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_CROSS_math); }
+bool SOLID_REACTIVE_MULTICROSS(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_CROSS_math);
+}
# endif
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS) || defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS)
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS) || defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS)
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_reactive_nexus.h b/quantum/rgb_matrix/animations/solid_reactive_nexus.h
index 3562e74a72..8d62a49fea 100644
--- a/quantum/rgb_matrix/animations/solid_reactive_nexus.h
+++ b/quantum/rgb_matrix/animations/solid_reactive_nexus.h
@@ -22,13 +22,17 @@ static HSV SOLID_REACTIVE_NEXUS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t di
}
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-bool SOLID_REACTIVE_NEXUS(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_NEXUS_math); }
+bool SOLID_REACTIVE_NEXUS(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_NEXUS_math);
+}
# endif
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-bool SOLID_REACTIVE_MULTINEXUS(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_NEXUS_math); }
+bool SOLID_REACTIVE_MULTINEXUS(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_NEXUS_math);
+}
# endif
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS) || !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS)
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS) || !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS)
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_reactive_simple_anim.h b/quantum/rgb_matrix/animations/solid_reactive_simple_anim.h
index 69189f636b..0d0a424cf3 100644
--- a/quantum/rgb_matrix/animations/solid_reactive_simple_anim.h
+++ b/quantum/rgb_matrix/animations/solid_reactive_simple_anim.h
@@ -8,8 +8,10 @@ static HSV SOLID_REACTIVE_SIMPLE_math(HSV hsv, uint16_t offset) {
return hsv;
}
-bool SOLID_REACTIVE_SIMPLE(effect_params_t* params) { return effect_runner_reactive(params, &SOLID_REACTIVE_SIMPLE_math); }
+bool SOLID_REACTIVE_SIMPLE(effect_params_t* params) {
+ return effect_runner_reactive(params, &SOLID_REACTIVE_SIMPLE_math);
+}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_reactive_wide.h b/quantum/rgb_matrix/animations/solid_reactive_wide.h
index a613c7ff5f..7598796316 100644
--- a/quantum/rgb_matrix/animations/solid_reactive_wide.h
+++ b/quantum/rgb_matrix/animations/solid_reactive_wide.h
@@ -19,13 +19,17 @@ static HSV SOLID_REACTIVE_WIDE_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dis
}
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-bool SOLID_REACTIVE_WIDE(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_WIDE_math); }
+bool SOLID_REACTIVE_WIDE(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_REACTIVE_WIDE_math);
+}
# endif
# ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-bool SOLID_REACTIVE_MULTIWIDE(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_WIDE_math); }
+bool SOLID_REACTIVE_MULTIWIDE(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_REACTIVE_WIDE_math);
+}
# endif
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE) || !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE)
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE) || !defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE)
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/solid_splash_anim.h b/quantum/rgb_matrix/animations/solid_splash_anim.h
index bd9c1cfe2b..77d6f8c5eb 100644
--- a/quantum/rgb_matrix/animations/solid_splash_anim.h
+++ b/quantum/rgb_matrix/animations/solid_splash_anim.h
@@ -19,13 +19,17 @@ HSV SOLID_SPLASH_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t ti
}
# ifdef ENABLE_RGB_MATRIX_SOLID_SPLASH
-bool SOLID_SPLASH(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_SPLASH_math); }
+bool SOLID_SPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SOLID_SPLASH_math);
+}
# endif
# ifdef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-bool SOLID_MULTISPLASH(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SOLID_SPLASH_math); }
+bool SOLID_MULTISPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SOLID_SPLASH_math);
+}
# endif
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_RGB_MATRIX_SPLASH) && !defined(ENABLE_RGB_MATRIX_MULTISPLASH)
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_RGB_MATRIX_SPLASH) && !defined(ENABLE_RGB_MATRIX_MULTISPLASH)
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/splash_anim.h b/quantum/rgb_matrix/animations/splash_anim.h
index 382355e9ed..06459e1b0a 100644
--- a/quantum/rgb_matrix/animations/splash_anim.h
+++ b/quantum/rgb_matrix/animations/splash_anim.h
@@ -20,13 +20,17 @@ HSV SPLASH_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
}
# ifdef ENABLE_RGB_MATRIX_SPLASH
-bool SPLASH(effect_params_t* params) { return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SPLASH_math); }
+bool SPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SPLASH_math);
+}
# endif
# ifdef ENABLE_RGB_MATRIX_MULTISPLASH
-bool MULTISPLASH(effect_params_t* params) { return effect_runner_reactive_splash(0, params, &SPLASH_math); }
+bool MULTISPLASH(effect_params_t* params) {
+ return effect_runner_reactive_splash(0, params, &SPLASH_math);
+}
# endif
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-# endif // !defined(ENABLE_RGB_MATRIX_SPLASH) || !defined(ENABLE_RGB_MATRIX_MULTISPLASH)
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+# endif // !defined(ENABLE_RGB_MATRIX_SPLASH) || !defined(ENABLE_RGB_MATRIX_MULTISPLASH)
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/typing_heatmap_anim.h b/quantum/rgb_matrix/animations/typing_heatmap_anim.h
index b66667b9b8..f3a94280c0 100644
--- a/quantum/rgb_matrix/animations/typing_heatmap_anim.h
+++ b/quantum/rgb_matrix/animations/typing_heatmap_anim.h
@@ -82,5 +82,5 @@ bool TYPING_HEATMAP(effect_params_t* params) {
return led_max < sizeof(g_rgb_frame_buffer);
}
-# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index 51e9554e2d..f721dfc7f2 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -31,7 +31,9 @@ const led_point_t k_rgb_matrix_center = {112, 32};
const led_point_t k_rgb_matrix_center = RGB_MATRIX_CENTER;
#endif
-__attribute__((weak)) RGB rgb_matrix_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv); }
+__attribute__((weak)) RGB rgb_matrix_hsv_to_rgb(HSV hsv) {
+ return hsv_to_rgb(hsv);
+}
// Generic effect runners
#include "rgb_matrix_runners.inc"
@@ -109,14 +111,14 @@ __attribute__((weak)) RGB rgb_matrix_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv
#endif
// globals
-rgb_config_t rgb_matrix_config; // TODO: would like to prefix this with g_ for global consistancy, do this in another pr
+rgb_config_t rgb_matrix_config; // TODO: would like to prefix this with g_ for global consistancy, do this in another pr
uint32_t g_rgb_timer;
#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS
uint8_t g_rgb_frame_buffer[MATRIX_ROWS][MATRIX_COLS] = {{0}};
-#endif // RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#endif // RGB_MATRIX_FRAMEBUFFER_EFFECTS
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
last_hit_t g_last_hit_tracker;
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
// internals
static bool suspend_state = false;
@@ -126,13 +128,13 @@ static effect_params_t rgb_effect_params = {0, LED_FLAG_ALL, false};
static rgb_task_states rgb_task_state = SYNCING;
#if RGB_DISABLE_TIMEOUT > 0
static uint32_t rgb_anykey_timer;
-#endif // RGB_DISABLE_TIMEOUT > 0
+#endif // RGB_DISABLE_TIMEOUT > 0
// double buffers
static uint32_t rgb_timer_buffer;
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
static last_hit_t last_hit_buffer;
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
// split rgb matrix
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
@@ -141,7 +143,9 @@ const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT;
EECONFIG_DEBOUNCE_HELPER(rgb_matrix, EECONFIG_RGB_MATRIX, rgb_matrix_config);
-void eeconfig_update_rgb_matrix(void) { eeconfig_flush_rgb_matrix(true); }
+void eeconfig_update_rgb_matrix(void) {
+ eeconfig_flush_rgb_matrix(true);
+}
void eeconfig_update_rgb_matrix_default(void) {
dprintf("eeconfig_update_rgb_matrix_default\n");
@@ -164,7 +168,19 @@ void eeconfig_debug_rgb_matrix(void) {
dprintf("rgb_matrix_config.flags = %d\n", rgb_matrix_config.flags);
}
-__attribute__((weak)) uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) { return 0; }
+void rgb_matrix_reload_from_eeprom(void) {
+ rgb_matrix_disable_noeeprom();
+ /* Reset back to what we have in eeprom */
+ eeconfig_init_rgb_matrix();
+ eeconfig_debug_rgb_matrix(); // display current eeprom values
+ if (rgb_matrix_config.enable) {
+ rgb_matrix_mode_noeeprom(rgb_matrix_config.mode);
+ }
+}
+
+__attribute__((weak)) uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) {
+ return 0;
+}
uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *led_i) {
uint8_t led_count = rgb_matrix_map_row_column_to_led_kb(row, column, led_i);
@@ -176,13 +192,18 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l
return led_count;
}
-void rgb_matrix_update_pwm_buffers(void) { rgb_matrix_driver.flush(); }
+void rgb_matrix_update_pwm_buffers(void) {
+ rgb_matrix_driver.flush();
+}
-void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { rgb_matrix_driver.set_color(index, red, green, blue); }
+void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ rgb_matrix_driver.set_color(index, red, green, blue);
+}
void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
- for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) rgb_matrix_set_color(i, red, green, blue);
+ for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++)
+ rgb_matrix_set_color(i, red, green, blue);
#else
rgb_matrix_driver.set_color_all(red, green, blue);
#endif
@@ -194,7 +215,7 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) {
#endif
#if RGB_DISABLE_TIMEOUT > 0
rgb_anykey_timer = 0;
-#endif // RGB_DISABLE_TIMEOUT > 0
+#endif // RGB_DISABLE_TIMEOUT > 0
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
uint8_t led[LED_HITS_TO_REMEMBER];
@@ -204,7 +225,7 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) {
if (!pressed)
# elif defined(RGB_MATRIX_KEYPRESSES)
if (pressed)
-# endif // defined(RGB_MATRIX_KEYRELEASES)
+# endif // defined(RGB_MATRIX_KEYRELEASES)
{
led_count = rgb_matrix_map_row_column_to_led(row, col, led);
}
@@ -212,7 +233,7 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) {
if (last_hit_buffer.count + led_count > LED_HITS_TO_REMEMBER) {
memcpy(&last_hit_buffer.x[0], &last_hit_buffer.x[led_count], LED_HITS_TO_REMEMBER - led_count);
memcpy(&last_hit_buffer.y[0], &last_hit_buffer.y[led_count], LED_HITS_TO_REMEMBER - led_count);
- memcpy(&last_hit_buffer.tick[0], &last_hit_buffer.tick[led_count], (LED_HITS_TO_REMEMBER - led_count) * 2); // 16 bit
+ memcpy(&last_hit_buffer.tick[0], &last_hit_buffer.tick[led_count], (LED_HITS_TO_REMEMBER - led_count) * 2); // 16 bit
memcpy(&last_hit_buffer.index[0], &last_hit_buffer.index[led_count], LED_HITS_TO_REMEMBER - led_count);
last_hit_buffer.count = LED_HITS_TO_REMEMBER - led_count;
}
@@ -225,13 +246,13 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) {
last_hit_buffer.tick[index] = 0;
last_hit_buffer.count++;
}
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
if (rgb_matrix_config.mode == RGB_MATRIX_TYPING_HEATMAP) {
process_rgb_matrix_typing_heatmap(row, col);
}
-#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
+#endif // defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) && defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
}
void rgb_matrix_test(void) {
@@ -270,7 +291,7 @@ static bool rgb_matrix_none(effect_params_t *params) {
static void rgb_task_timers(void) {
#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0
uint32_t deltaTime = sync_timer_elapsed32(rgb_timer_buffer);
-#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0
+#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0
rgb_timer_buffer = sync_timer_read32();
// Update double buffer timers
@@ -278,7 +299,7 @@ static void rgb_task_timers(void) {
if (rgb_anykey_timer + deltaTime <= UINT32_MAX) {
rgb_anykey_timer += deltaTime;
}
-#endif // RGB_DISABLE_TIMEOUT > 0
+#endif // RGB_DISABLE_TIMEOUT > 0
// Update double buffer last hit timers
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
@@ -290,7 +311,7 @@ static void rgb_task_timers(void) {
}
last_hit_buffer.tick[i] += deltaTime;
}
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
}
static void rgb_task_sync(void) {
@@ -307,7 +328,7 @@ static void rgb_task_start(void) {
g_rgb_timer = rgb_timer_buffer;
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
g_last_hit_tracker = last_hit_buffer;
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
// next task
rgb_task_state = RENDERING;
@@ -393,7 +414,7 @@ void rgb_matrix_task(void) {
bool suspend_backlight = suspend_state ||
#if RGB_DISABLE_TIMEOUT > 0
(rgb_anykey_timer > (uint32_t)RGB_DISABLE_TIMEOUT) ||
-#endif // RGB_DISABLE_TIMEOUT > 0
+#endif // RGB_DISABLE_TIMEOUT > 0
false;
uint8_t effect = suspend_backlight || !rgb_matrix_config.enable ? 0 : rgb_matrix_config.mode;
@@ -462,7 +483,7 @@ void rgb_matrix_init(void) {
for (uint8_t i = 0; i < LED_HITS_TO_REMEMBER; ++i) {
last_hit_buffer.tick[i] = UINT16_MAX;
}
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
if (!eeconfig_is_enabled()) {
dprintf("rgb_matrix_init_drivers eeconfig is not enabled.\n");
@@ -475,20 +496,22 @@ void rgb_matrix_init(void) {
dprintf("rgb_matrix_init_drivers rgb_matrix_config.mode = 0. Write default values to EEPROM.\n");
eeconfig_update_rgb_matrix_default();
}
- eeconfig_debug_rgb_matrix(); // display current eeprom values
+ eeconfig_debug_rgb_matrix(); // display current eeprom values
}
void rgb_matrix_set_suspend_state(bool state) {
#ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
- if (state && !suspend_state) { // only run if turning off, and only once
- rgb_task_render(0); // turn off all LEDs when suspending
- rgb_task_flush(0); // and actually flash led state to LEDs
+ if (state && !suspend_state) { // only run if turning off, and only once
+ rgb_task_render(0); // turn off all LEDs when suspending
+ rgb_task_flush(0); // and actually flash led state to LEDs
}
suspend_state = state;
#endif
}
-bool rgb_matrix_get_suspend_state(void) { return suspend_state; }
+bool rgb_matrix_get_suspend_state(void) {
+ return suspend_state;
+}
void rgb_matrix_toggle_eeprom_helper(bool write_to_eeprom) {
rgb_matrix_config.enable ^= 1;
@@ -496,8 +519,12 @@ void rgb_matrix_toggle_eeprom_helper(bool write_to_eeprom) {
eeconfig_flag_rgb_matrix(write_to_eeprom);
dprintf("rgb matrix toggle [%s]: rgb_matrix_config.enable = %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", rgb_matrix_config.enable);
}
-void rgb_matrix_toggle_noeeprom(void) { rgb_matrix_toggle_eeprom_helper(false); }
-void rgb_matrix_toggle(void) { rgb_matrix_toggle_eeprom_helper(true); }
+void rgb_matrix_toggle_noeeprom(void) {
+ rgb_matrix_toggle_eeprom_helper(false);
+}
+void rgb_matrix_toggle(void) {
+ rgb_matrix_toggle_eeprom_helper(true);
+}
void rgb_matrix_enable(void) {
rgb_matrix_enable_noeeprom();
@@ -519,7 +546,9 @@ void rgb_matrix_disable_noeeprom(void) {
rgb_matrix_config.enable = 0;
}
-uint8_t rgb_matrix_is_enabled(void) { return rgb_matrix_config.enable; }
+uint8_t rgb_matrix_is_enabled(void) {
+ return rgb_matrix_config.enable;
+}
void rgb_matrix_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
if (!rgb_matrix_config.enable) {
@@ -536,24 +565,38 @@ void rgb_matrix_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
eeconfig_flag_rgb_matrix(write_to_eeprom);
dprintf("rgb matrix mode [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", rgb_matrix_config.mode);
}
-void rgb_matrix_mode_noeeprom(uint8_t mode) { rgb_matrix_mode_eeprom_helper(mode, false); }
-void rgb_matrix_mode(uint8_t mode) { rgb_matrix_mode_eeprom_helper(mode, true); }
+void rgb_matrix_mode_noeeprom(uint8_t mode) {
+ rgb_matrix_mode_eeprom_helper(mode, false);
+}
+void rgb_matrix_mode(uint8_t mode) {
+ rgb_matrix_mode_eeprom_helper(mode, true);
+}
-uint8_t rgb_matrix_get_mode(void) { return rgb_matrix_config.mode; }
+uint8_t rgb_matrix_get_mode(void) {
+ return rgb_matrix_config.mode;
+}
void rgb_matrix_step_helper(bool write_to_eeprom) {
uint8_t mode = rgb_matrix_config.mode + 1;
rgb_matrix_mode_eeprom_helper((mode < RGB_MATRIX_EFFECT_MAX) ? mode : 1, write_to_eeprom);
}
-void rgb_matrix_step_noeeprom(void) { rgb_matrix_step_helper(false); }
-void rgb_matrix_step(void) { rgb_matrix_step_helper(true); }
+void rgb_matrix_step_noeeprom(void) {
+ rgb_matrix_step_helper(false);
+}
+void rgb_matrix_step(void) {
+ rgb_matrix_step_helper(true);
+}
void rgb_matrix_step_reverse_helper(bool write_to_eeprom) {
uint8_t mode = rgb_matrix_config.mode - 1;
rgb_matrix_mode_eeprom_helper((mode < 1) ? RGB_MATRIX_EFFECT_MAX - 1 : mode, write_to_eeprom);
}
-void rgb_matrix_step_reverse_noeeprom(void) { rgb_matrix_step_reverse_helper(false); }
-void rgb_matrix_step_reverse(void) { rgb_matrix_step_reverse_helper(true); }
+void rgb_matrix_step_reverse_noeeprom(void) {
+ rgb_matrix_step_reverse_helper(false);
+}
+void rgb_matrix_step_reverse(void) {
+ rgb_matrix_step_reverse_helper(true);
+}
void rgb_matrix_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, bool write_to_eeprom) {
if (!rgb_matrix_config.enable) {
@@ -565,56 +608,126 @@ void rgb_matrix_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, boo
eeconfig_flag_rgb_matrix(write_to_eeprom);
dprintf("rgb matrix set hsv [%s]: %u,%u,%u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v);
}
-void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) { rgb_matrix_sethsv_eeprom_helper(hue, sat, val, false); }
-void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { rgb_matrix_sethsv_eeprom_helper(hue, sat, val, true); }
+void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
+ rgb_matrix_sethsv_eeprom_helper(hue, sat, val, false);
+}
+void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
+ rgb_matrix_sethsv_eeprom_helper(hue, sat, val, true);
+}
-HSV rgb_matrix_get_hsv(void) { return rgb_matrix_config.hsv; }
-uint8_t rgb_matrix_get_hue(void) { return rgb_matrix_config.hsv.h; }
-uint8_t rgb_matrix_get_sat(void) { return rgb_matrix_config.hsv.s; }
-uint8_t rgb_matrix_get_val(void) { return rgb_matrix_config.hsv.v; }
+HSV rgb_matrix_get_hsv(void) {
+ return rgb_matrix_config.hsv;
+}
+uint8_t rgb_matrix_get_hue(void) {
+ return rgb_matrix_config.hsv.h;
+}
+uint8_t rgb_matrix_get_sat(void) {
+ return rgb_matrix_config.hsv.s;
+}
+uint8_t rgb_matrix_get_val(void) {
+ return rgb_matrix_config.hsv.v;
+}
-void rgb_matrix_increase_hue_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h + RGB_MATRIX_HUE_STEP, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, write_to_eeprom); }
-void rgb_matrix_increase_hue_noeeprom(void) { rgb_matrix_increase_hue_helper(false); }
-void rgb_matrix_increase_hue(void) { rgb_matrix_increase_hue_helper(true); }
+void rgb_matrix_increase_hue_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h + RGB_MATRIX_HUE_STEP, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, write_to_eeprom);
+}
+void rgb_matrix_increase_hue_noeeprom(void) {
+ rgb_matrix_increase_hue_helper(false);
+}
+void rgb_matrix_increase_hue(void) {
+ rgb_matrix_increase_hue_helper(true);
+}
-void rgb_matrix_decrease_hue_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h - RGB_MATRIX_HUE_STEP, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, write_to_eeprom); }
-void rgb_matrix_decrease_hue_noeeprom(void) { rgb_matrix_decrease_hue_helper(false); }
-void rgb_matrix_decrease_hue(void) { rgb_matrix_decrease_hue_helper(true); }
+void rgb_matrix_decrease_hue_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h - RGB_MATRIX_HUE_STEP, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, write_to_eeprom);
+}
+void rgb_matrix_decrease_hue_noeeprom(void) {
+ rgb_matrix_decrease_hue_helper(false);
+}
+void rgb_matrix_decrease_hue(void) {
+ rgb_matrix_decrease_hue_helper(true);
+}
-void rgb_matrix_increase_sat_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, qadd8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP), rgb_matrix_config.hsv.v, write_to_eeprom); }
-void rgb_matrix_increase_sat_noeeprom(void) { rgb_matrix_increase_sat_helper(false); }
-void rgb_matrix_increase_sat(void) { rgb_matrix_increase_sat_helper(true); }
+void rgb_matrix_increase_sat_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, qadd8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP), rgb_matrix_config.hsv.v, write_to_eeprom);
+}
+void rgb_matrix_increase_sat_noeeprom(void) {
+ rgb_matrix_increase_sat_helper(false);
+}
+void rgb_matrix_increase_sat(void) {
+ rgb_matrix_increase_sat_helper(true);
+}
-void rgb_matrix_decrease_sat_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, qsub8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP), rgb_matrix_config.hsv.v, write_to_eeprom); }
-void rgb_matrix_decrease_sat_noeeprom(void) { rgb_matrix_decrease_sat_helper(false); }
-void rgb_matrix_decrease_sat(void) { rgb_matrix_decrease_sat_helper(true); }
+void rgb_matrix_decrease_sat_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, qsub8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP), rgb_matrix_config.hsv.v, write_to_eeprom);
+}
+void rgb_matrix_decrease_sat_noeeprom(void) {
+ rgb_matrix_decrease_sat_helper(false);
+}
+void rgb_matrix_decrease_sat(void) {
+ rgb_matrix_decrease_sat_helper(true);
+}
-void rgb_matrix_increase_val_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, qadd8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP), write_to_eeprom); }
-void rgb_matrix_increase_val_noeeprom(void) { rgb_matrix_increase_val_helper(false); }
-void rgb_matrix_increase_val(void) { rgb_matrix_increase_val_helper(true); }
+void rgb_matrix_increase_val_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, qadd8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP), write_to_eeprom);
+}
+void rgb_matrix_increase_val_noeeprom(void) {
+ rgb_matrix_increase_val_helper(false);
+}
+void rgb_matrix_increase_val(void) {
+ rgb_matrix_increase_val_helper(true);
+}
-void rgb_matrix_decrease_val_helper(bool write_to_eeprom) { rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, qsub8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP), write_to_eeprom); }
-void rgb_matrix_decrease_val_noeeprom(void) { rgb_matrix_decrease_val_helper(false); }
-void rgb_matrix_decrease_val(void) { rgb_matrix_decrease_val_helper(true); }
+void rgb_matrix_decrease_val_helper(bool write_to_eeprom) {
+ rgb_matrix_sethsv_eeprom_helper(rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, qsub8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP), write_to_eeprom);
+}
+void rgb_matrix_decrease_val_noeeprom(void) {
+ rgb_matrix_decrease_val_helper(false);
+}
+void rgb_matrix_decrease_val(void) {
+ rgb_matrix_decrease_val_helper(true);
+}
void rgb_matrix_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) {
rgb_matrix_config.speed = speed;
eeconfig_flag_rgb_matrix(write_to_eeprom);
dprintf("rgb matrix set speed [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", rgb_matrix_config.speed);
}
-void rgb_matrix_set_speed_noeeprom(uint8_t speed) { rgb_matrix_set_speed_eeprom_helper(speed, false); }
-void rgb_matrix_set_speed(uint8_t speed) { rgb_matrix_set_speed_eeprom_helper(speed, true); }
+void rgb_matrix_set_speed_noeeprom(uint8_t speed) {
+ rgb_matrix_set_speed_eeprom_helper(speed, false);
+}
+void rgb_matrix_set_speed(uint8_t speed) {
+ rgb_matrix_set_speed_eeprom_helper(speed, true);
+}
-uint8_t rgb_matrix_get_speed(void) { return rgb_matrix_config.speed; }
+uint8_t rgb_matrix_get_speed(void) {
+ return rgb_matrix_config.speed;
+}
-void rgb_matrix_increase_speed_helper(bool write_to_eeprom) { rgb_matrix_set_speed_eeprom_helper(qadd8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP), write_to_eeprom); }
-void rgb_matrix_increase_speed_noeeprom(void) { rgb_matrix_increase_speed_helper(false); }
-void rgb_matrix_increase_speed(void) { rgb_matrix_increase_speed_helper(true); }
+void rgb_matrix_increase_speed_helper(bool write_to_eeprom) {
+ rgb_matrix_set_speed_eeprom_helper(qadd8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP), write_to_eeprom);
+}
+void rgb_matrix_increase_speed_noeeprom(void) {
+ rgb_matrix_increase_speed_helper(false);
+}
+void rgb_matrix_increase_speed(void) {
+ rgb_matrix_increase_speed_helper(true);
+}
-void rgb_matrix_decrease_speed_helper(bool write_to_eeprom) { rgb_matrix_set_speed_eeprom_helper(qsub8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP), write_to_eeprom); }
-void rgb_matrix_decrease_speed_noeeprom(void) { rgb_matrix_decrease_speed_helper(false); }
-void rgb_matrix_decrease_speed(void) { rgb_matrix_decrease_speed_helper(true); }
+void rgb_matrix_decrease_speed_helper(bool write_to_eeprom) {
+ rgb_matrix_set_speed_eeprom_helper(qsub8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP), write_to_eeprom);
+}
+void rgb_matrix_decrease_speed_noeeprom(void) {
+ rgb_matrix_decrease_speed_helper(false);
+}
+void rgb_matrix_decrease_speed(void) {
+ rgb_matrix_decrease_speed_helper(true);
+}
-led_flags_t rgb_matrix_get_flags(void) { return rgb_matrix_config.flags; }
+led_flags_t rgb_matrix_get_flags(void) {
+ return rgb_matrix_config.flags;
+}
-void rgb_matrix_set_flags(led_flags_t flags) { rgb_matrix_config.flags = flags; }
+void rgb_matrix_set_flags(led_flags_t flags) {
+ rgb_matrix_config.flags = flags;
+}
diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h
index a804d99abc..359d507a4d 100644
--- a/quantum/rgb_matrix/rgb_matrix.h
+++ b/quantum/rgb_matrix/rgb_matrix.h
@@ -32,6 +32,8 @@
# include "is31fl3737.h"
#elif defined(IS31FL3741)
# include "is31fl3741.h"
+#elif defined(IS31FLCOMMON)
+# include "is31flcommon.h"
#elif defined(CKLED2001)
# include "ckled2001.h"
#elif defined(AW20216)
@@ -136,6 +138,8 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max);
void rgb_matrix_init(void);
+void rgb_matrix_reload_from_eeprom(void);
+
void rgb_matrix_set_suspend_state(bool state);
bool rgb_matrix_get_suspend_state(void);
void rgb_matrix_toggle(void);
@@ -182,6 +186,7 @@ void rgb_matrix_set_flags(led_flags_t flags);
#ifndef RGBLIGHT_ENABLE
# define eeconfig_update_rgblight_current eeconfig_update_rgb_matrix
+# define rgblight_reload_from_eeprom rgb_matrix_reload_from_eeprom
# define rgblight_toggle rgb_matrix_toggle
# define rgblight_toggle_noeeprom rgb_matrix_toggle_noeeprom
# define rgblight_enable rgb_matrix_enable
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c
index 130ca47a63..27fa7369bf 100644
--- a/quantum/rgb_matrix/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.c
@@ -23,7 +23,7 @@
* be here if shared between boards.
*/
-#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FL3737) || defined(IS31FL3741) || defined(CKLED2001)
+#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FL3737) || defined(IS31FL3741) || defined(IS31FLCOMMON) || defined(CKLED2001)
# include "i2c_master.h"
// TODO: Remove this at some later date
@@ -81,6 +81,18 @@ static void init(void) {
# elif defined(IS31FL3741)
IS31FL3741_init(DRIVER_ADDR_1);
+# elif defined(IS31FLCOMMON)
+ IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4);
+# endif
+# endif
+# endif
+
# elif defined(CKLED2001)
CKLED2001_init(DRIVER_ADDR_1);
# if defined(DRIVER_ADDR_2)
@@ -106,6 +118,8 @@ static void init(void) {
IS31FL3737_set_led_control_register(index, enabled, enabled, enabled);
# elif defined(IS31FL3741)
IS31FL3741_set_led_control_register(index, enabled, enabled, enabled);
+# elif defined(IS31FLCOMMON)
+ IS31FL_RGB_set_scaling_buffer(index, enabled, enabled, enabled);
# elif defined(CKLED2001)
CKLED2001_set_led_control_register(index, enabled, enabled, enabled);
# endif
@@ -145,6 +159,21 @@ static void init(void) {
# elif defined(IS31FL3741)
IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
+# elif defined(IS31FLCOMMON)
+# ifdef ISSI_MANUAL_SCALING
+ IS31FL_set_manual_scaling_buffer();
+# endif
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
+
# elif defined(CKLED2001)
CKLED2001_update_led_control_registers(DRIVER_ADDR_1, 0);
# if defined(DRIVER_ADDR_2)
@@ -231,6 +260,27 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
.set_color_all = IS31FL3741_set_color_all,
};
+# elif defined(IS31FLCOMMON)
+static void flush(void) {
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_1, 0);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_2, 1);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_3, 2);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
+}
+
+const rgb_matrix_driver_t rgb_matrix_driver = {
+ .init = init,
+ .flush = flush,
+ .set_color = IS31FL_RGB_set_color,
+ .set_color_all = IS31FL_RGB_set_color_all,
+};
+
# elif defined(CKLED2001)
static void flush(void) {
CKLED2001_update_pwm_buffers(DRIVER_ADDR_1, 0);
@@ -299,10 +349,15 @@ static void flush(void) {
static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT;
- if (!is_keyboard_left() && (i >= k_rgb_matrix_split[0])) {
- i -= k_rgb_matrix_split[0];
- } else if (is_keyboard_left() && (i >= k_rgb_matrix_split[0]))
+ if (!is_keyboard_left()) {
+ if (i >= k_rgb_matrix_split[0]) {
+ i -= k_rgb_matrix_split[0];
+ } else {
+ return;
+ }
+ } else if (i >= k_rgb_matrix_split[0]) {
return;
+ }
# endif
rgb_matrix_ws2812_array[i].r = r;
diff --git a/quantum/rgb_matrix/rgb_matrix_types.h b/quantum/rgb_matrix/rgb_matrix_types.h
index df575d6577..d0ac4e4466 100644
--- a/quantum/rgb_matrix/rgb_matrix_types.h
+++ b/quantum/rgb_matrix/rgb_matrix_types.h
@@ -37,7 +37,7 @@
// Last led hit
#ifndef LED_HITS_TO_REMEMBER
# define LED_HITS_TO_REMEMBER 8
-#endif // LED_HITS_TO_REMEMBER
+#endif // LED_HITS_TO_REMEMBER
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
typedef struct PACKED {
@@ -47,7 +47,7 @@ typedef struct PACKED {
uint8_t index[LED_HITS_TO_REMEMBER];
uint16_t tick[LED_HITS_TO_REMEMBER];
} last_hit_t;
-#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
typedef enum rgb_task_states { STARTING, RENDERING, FLUSHING, SYNCING } rgb_task_states;
@@ -88,7 +88,7 @@ typedef union {
uint8_t enable : 2;
uint8_t mode : 6;
HSV hsv;
- uint8_t speed; // EECONFIG needs to be increased to support this
+ uint8_t speed; // EECONFIG needs to be increased to support this
led_flags_t flags;
};
} rgb_config_t;
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index 148dae78f4..8f933a6e51 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -72,7 +72,7 @@ static uint8_t static_effect_table[] = {
#define _RGBM_TMP_STATIC(sym, msym) RGBLIGHT_MODE_##msym,
#define _RGBM_TMP_DYNAMIC(sym, msym) RGBLIGHT_MODE_##msym,
static uint8_t mode_base_table[] = {
- 0, // RGBLIGHT_MODE_zero
+ 0, // RGBLIGHT_MODE_zero
#include "rgblight_modes.h"
};
@@ -96,7 +96,9 @@ static uint8_t mode_base_table[] = {
# define RGBLIGHT_DEFAULT_SPD 0
#endif
-static inline int is_static_effect(uint8_t mode) { return memchr(static_effect_table, mode, sizeof(static_effect_table)) != NULL; }
+static inline int is_static_effect(uint8_t mode) {
+ return memchr(static_effect_table, mode, sizeof(static_effect_table)) != NULL;
+}
#ifdef RGBLIGHT_LED_MAP
const uint8_t led_map[] PROGMEM = RGBLIGHT_LED_MAP;
@@ -143,7 +145,9 @@ void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
rgblight_ranges.effect_num_leds = num_leds;
}
-__attribute__((weak)) RGB rgblight_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv); }
+__attribute__((weak)) RGB rgblight_hsv_to_rgb(HSV hsv) {
+ return hsv_to_rgb(hsv);
+}
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
HSV hsv = {hue, sat, val};
@@ -151,7 +155,9 @@ void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
setrgb(rgb.r, rgb.g, rgb.b, led1);
}
-void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
+void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
+ sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1);
+}
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
led1->r = r;
@@ -191,7 +197,9 @@ void eeconfig_update_rgblight(uint32_t val) {
#endif
}
-void eeconfig_update_rgblight_current(void) { eeconfig_update_rgblight(rgblight_config.raw); }
+void eeconfig_update_rgblight_current(void) {
+ eeconfig_update_rgblight(rgblight_config.raw);
+}
void eeconfig_update_rgblight_default(void) {
rgblight_config.enable = 1;
@@ -238,9 +246,9 @@ void rgblight_init(void) {
}
rgblight_check_config();
- eeconfig_debug_rgblight(); // display current eeprom values
+ eeconfig_debug_rgblight(); // display current eeprom values
- rgblight_timer_init(); // setup the timer
+ rgblight_timer_init(); // setup the timer
if (rgblight_config.enable) {
rgblight_mode_noeeprom(rgblight_config.mode);
@@ -254,13 +262,15 @@ void rgblight_reload_from_eeprom(void) {
rgblight_config.raw = eeconfig_read_rgblight();
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
rgblight_check_config();
- eeconfig_debug_rgblight(); // display current eeprom values
+ eeconfig_debug_rgblight(); // display current eeprom values
if (rgblight_config.enable) {
rgblight_mode_noeeprom(rgblight_config.mode);
}
}
-uint32_t rgblight_read_dword(void) { return rgblight_config.raw; }
+uint32_t rgblight_read_dword(void) {
+ return rgblight_config.raw;
+}
void rgblight_update_dword(uint32_t dword) {
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
@@ -296,8 +306,12 @@ void rgblight_step_helper(bool write_to_eeprom) {
}
rgblight_mode_eeprom_helper(mode, write_to_eeprom);
}
-void rgblight_step_noeeprom(void) { rgblight_step_helper(false); }
-void rgblight_step(void) { rgblight_step_helper(true); }
+void rgblight_step_noeeprom(void) {
+ rgblight_step_helper(false);
+}
+void rgblight_step(void) {
+ rgblight_step_helper(true);
+}
void rgblight_step_reverse_helper(bool write_to_eeprom) {
uint8_t mode = 0;
mode = rgblight_config.mode - 1;
@@ -306,8 +320,12 @@ void rgblight_step_reverse_helper(bool write_to_eeprom) {
}
rgblight_mode_eeprom_helper(mode, write_to_eeprom);
}
-void rgblight_step_reverse_noeeprom(void) { rgblight_step_reverse_helper(false); }
-void rgblight_step_reverse(void) { rgblight_step_reverse_helper(true); }
+void rgblight_step_reverse_noeeprom(void) {
+ rgblight_step_reverse_helper(false);
+}
+void rgblight_step_reverse(void) {
+ rgblight_step_reverse_helper(true);
+}
uint8_t rgblight_get_mode(void) {
if (!rgblight_config.enable) {
@@ -346,9 +364,13 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
}
-void rgblight_mode(uint8_t mode) { rgblight_mode_eeprom_helper(mode, true); }
+void rgblight_mode(uint8_t mode) {
+ rgblight_mode_eeprom_helper(mode, true);
+}
-void rgblight_mode_noeeprom(uint8_t mode) { rgblight_mode_eeprom_helper(mode, false); }
+void rgblight_mode_noeeprom(uint8_t mode) {
+ rgblight_mode_eeprom_helper(mode, false);
+}
void rgblight_toggle(void) {
dprintf("rgblight toggle [EEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable);
@@ -401,64 +423,98 @@ void rgblight_disable_noeeprom(void) {
rgblight_set();
}
-bool rgblight_is_enabled(void) { return rgblight_config.enable; }
+bool rgblight_is_enabled(void) {
+ return rgblight_config.enable;
+}
void rgblight_increase_hue_helper(bool write_to_eeprom) {
uint8_t hue = rgblight_config.hue + RGBLIGHT_HUE_STEP;
rgblight_sethsv_eeprom_helper(hue, rgblight_config.sat, rgblight_config.val, write_to_eeprom);
}
-void rgblight_increase_hue_noeeprom(void) { rgblight_increase_hue_helper(false); }
-void rgblight_increase_hue(void) { rgblight_increase_hue_helper(true); }
+void rgblight_increase_hue_noeeprom(void) {
+ rgblight_increase_hue_helper(false);
+}
+void rgblight_increase_hue(void) {
+ rgblight_increase_hue_helper(true);
+}
void rgblight_decrease_hue_helper(bool write_to_eeprom) {
uint8_t hue = rgblight_config.hue - RGBLIGHT_HUE_STEP;
rgblight_sethsv_eeprom_helper(hue, rgblight_config.sat, rgblight_config.val, write_to_eeprom);
}
-void rgblight_decrease_hue_noeeprom(void) { rgblight_decrease_hue_helper(false); }
-void rgblight_decrease_hue(void) { rgblight_decrease_hue_helper(true); }
+void rgblight_decrease_hue_noeeprom(void) {
+ rgblight_decrease_hue_helper(false);
+}
+void rgblight_decrease_hue(void) {
+ rgblight_decrease_hue_helper(true);
+}
void rgblight_increase_sat_helper(bool write_to_eeprom) {
uint8_t sat = qadd8(rgblight_config.sat, RGBLIGHT_SAT_STEP);
rgblight_sethsv_eeprom_helper(rgblight_config.hue, sat, rgblight_config.val, write_to_eeprom);
}
-void rgblight_increase_sat_noeeprom(void) { rgblight_increase_sat_helper(false); }
-void rgblight_increase_sat(void) { rgblight_increase_sat_helper(true); }
+void rgblight_increase_sat_noeeprom(void) {
+ rgblight_increase_sat_helper(false);
+}
+void rgblight_increase_sat(void) {
+ rgblight_increase_sat_helper(true);
+}
void rgblight_decrease_sat_helper(bool write_to_eeprom) {
uint8_t sat = qsub8(rgblight_config.sat, RGBLIGHT_SAT_STEP);
rgblight_sethsv_eeprom_helper(rgblight_config.hue, sat, rgblight_config.val, write_to_eeprom);
}
-void rgblight_decrease_sat_noeeprom(void) { rgblight_decrease_sat_helper(false); }
-void rgblight_decrease_sat(void) { rgblight_decrease_sat_helper(true); }
+void rgblight_decrease_sat_noeeprom(void) {
+ rgblight_decrease_sat_helper(false);
+}
+void rgblight_decrease_sat(void) {
+ rgblight_decrease_sat_helper(true);
+}
void rgblight_increase_val_helper(bool write_to_eeprom) {
uint8_t val = qadd8(rgblight_config.val, RGBLIGHT_VAL_STEP);
rgblight_sethsv_eeprom_helper(rgblight_config.hue, rgblight_config.sat, val, write_to_eeprom);
}
-void rgblight_increase_val_noeeprom(void) { rgblight_increase_val_helper(false); }
-void rgblight_increase_val(void) { rgblight_increase_val_helper(true); }
+void rgblight_increase_val_noeeprom(void) {
+ rgblight_increase_val_helper(false);
+}
+void rgblight_increase_val(void) {
+ rgblight_increase_val_helper(true);
+}
void rgblight_decrease_val_helper(bool write_to_eeprom) {
uint8_t val = qsub8(rgblight_config.val, RGBLIGHT_VAL_STEP);
rgblight_sethsv_eeprom_helper(rgblight_config.hue, rgblight_config.sat, val, write_to_eeprom);
}
-void rgblight_decrease_val_noeeprom(void) { rgblight_decrease_val_helper(false); }
-void rgblight_decrease_val(void) { rgblight_decrease_val_helper(true); }
+void rgblight_decrease_val_noeeprom(void) {
+ rgblight_decrease_val_helper(false);
+}
+void rgblight_decrease_val(void) {
+ rgblight_decrease_val_helper(true);
+}
void rgblight_increase_speed_helper(bool write_to_eeprom) {
if (rgblight_config.speed < 3) rgblight_config.speed++;
// RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED?
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
+ eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
}
}
-void rgblight_increase_speed(void) { rgblight_increase_speed_helper(true); }
-void rgblight_increase_speed_noeeprom(void) { rgblight_increase_speed_helper(false); }
+void rgblight_increase_speed(void) {
+ rgblight_increase_speed_helper(true);
+}
+void rgblight_increase_speed_noeeprom(void) {
+ rgblight_increase_speed_helper(false);
+}
void rgblight_decrease_speed_helper(bool write_to_eeprom) {
if (rgblight_config.speed > 0) rgblight_config.speed--;
// RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED??
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
+ eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
}
}
-void rgblight_decrease_speed(void) { rgblight_decrease_speed_helper(true); }
-void rgblight_decrease_speed_noeeprom(void) { rgblight_decrease_speed_helper(false); }
+void rgblight_decrease_speed(void) {
+ rgblight_decrease_speed_helper(true);
+}
+void rgblight_decrease_speed_noeeprom(void) {
+ rgblight_decrease_speed_helper(false);
+}
void rgblight_sethsv_noeeprom_old(uint8_t hue, uint8_t sat, uint8_t val) {
if (rgblight_config.enable) {
@@ -478,7 +534,7 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b);
} else {
// all LEDs in same color
- if (1 == 0) { // dummy
+ if (1 == 0) { // dummy
}
#ifdef RGBLIGHT_EFFECT_BREATHING
else if (rgblight_status.base_mode == RGBLIGHT_MODE_BREATHING) {
@@ -540,33 +596,51 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
}
}
-void rgblight_sethsv(uint8_t hue, uint8_t sat, uint8_t val) { rgblight_sethsv_eeprom_helper(hue, sat, val, true); }
+void rgblight_sethsv(uint8_t hue, uint8_t sat, uint8_t val) {
+ rgblight_sethsv_eeprom_helper(hue, sat, val, true);
+}
-void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val) { rgblight_sethsv_eeprom_helper(hue, sat, val, false); }
+void rgblight_sethsv_noeeprom(uint8_t hue, uint8_t sat, uint8_t val) {
+ rgblight_sethsv_eeprom_helper(hue, sat, val, false);
+}
-uint8_t rgblight_get_speed(void) { return rgblight_config.speed; }
+uint8_t rgblight_get_speed(void) {
+ return rgblight_config.speed;
+}
void rgblight_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) {
rgblight_config.speed = speed;
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
+ eeconfig_update_rgblight(rgblight_config.raw); // EECONFIG needs to be increased to support this
dprintf("rgblight set speed [EEPROM]: %u\n", rgblight_config.speed);
} else {
dprintf("rgblight set speed [NOEEPROM]: %u\n", rgblight_config.speed);
}
}
-void rgblight_set_speed(uint8_t speed) { rgblight_set_speed_eeprom_helper(speed, true); }
+void rgblight_set_speed(uint8_t speed) {
+ rgblight_set_speed_eeprom_helper(speed, true);
+}
-void rgblight_set_speed_noeeprom(uint8_t speed) { rgblight_set_speed_eeprom_helper(speed, false); }
+void rgblight_set_speed_noeeprom(uint8_t speed) {
+ rgblight_set_speed_eeprom_helper(speed, false);
+}
-uint8_t rgblight_get_hue(void) { return rgblight_config.hue; }
+uint8_t rgblight_get_hue(void) {
+ return rgblight_config.hue;
+}
-uint8_t rgblight_get_sat(void) { return rgblight_config.sat; }
+uint8_t rgblight_get_sat(void) {
+ return rgblight_config.sat;
+}
-uint8_t rgblight_get_val(void) { return rgblight_config.val; }
+uint8_t rgblight_get_val(void) {
+ return rgblight_config.val;
+}
-HSV rgblight_get_hsv(void) { return (HSV){rgblight_config.hue, rgblight_config.sat, rgblight_config.val}; }
+HSV rgblight_get_hsv(void) {
+ return (HSV){rgblight_config.hue, rgblight_config.sat, rgblight_config.val};
+}
void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
if (!rgblight_config.enable) {
@@ -648,14 +722,22 @@ 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); }
+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);
+}
-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); }
+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);
+}
-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); }
+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);
+}
-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); }
-#endif // ifndef RGBLIGHT_SPLIT
+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);
+}
+#endif // ifndef RGBLIGHT_SPLIT
#ifdef RGBLIGHT_LAYERS
void rgblight_set_layer_state(uint8_t layer, bool enabled) {
@@ -693,18 +775,18 @@ static void rgblight_layers_write(void) {
// For each layer
for (const rgblight_segment_t *const *layer_ptr = rgblight_layers; i < RGBLIGHT_MAX_LAYERS; layer_ptr++, i++) {
if (!rgblight_get_layer_state(i)) {
- continue; // Layer is disabled
+ continue; // Layer is disabled
}
const rgblight_segment_t *segment_ptr = pgm_read_ptr(layer_ptr);
if (segment_ptr == NULL) {
- break; // No more layers
+ break; // No more layers
}
// For each segment
while (1) {
rgblight_segment_t segment;
memcpy_P(&segment, segment_ptr, sizeof(rgblight_segment_t));
if (segment.index == RGBLIGHT_END_SEGMENT_INDEX) {
- break; // No more segments
+ break; // No more segments
}
// Write segment.count LEDs
LED_TYPE *const limit = &led[MIN(segment.index + segment.count, RGBLED_NUM)];
@@ -726,7 +808,9 @@ static uint16_t _repeat_timer;
static uint8_t _times_remaining;
static uint16_t _dur;
-void rgblight_blink_layer(uint8_t layer, uint16_t duration_ms) { rgblight_blink_layer_repeat(layer, duration_ms, 1); }
+void rgblight_blink_layer(uint8_t layer, uint16_t duration_ms) {
+ rgblight_blink_layer_repeat(layer, duration_ms, 1);
+}
void rgblight_blink_layer_repeat(uint8_t layer, uint16_t duration_ms, uint8_t times) {
_times_remaining = times * 2;
@@ -796,7 +880,9 @@ void rgblight_wakeup(void) {
#endif
-__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); }
+__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) {
+ ws2812_setleds(start_led, num_leds);
+}
#ifndef RGBLIGHT_CUSTOM_DRIVER
@@ -848,9 +934,13 @@ void rgblight_set(void) {
#ifdef RGBLIGHT_SPLIT
/* for split keyboard master side */
-uint8_t rgblight_get_change_flags(void) { return rgblight_status.change_flags; }
+uint8_t rgblight_get_change_flags(void) {
+ return rgblight_status.change_flags;
+}
-void rgblight_clear_change_flags(void) { rgblight_status.change_flags = 0; }
+void rgblight_clear_change_flags(void) {
+ rgblight_status.change_flags = 0;
+}
void rgblight_get_syncinfo(rgblight_syncinfo_t *syncinfo) {
syncinfo->config = rgblight_config;
@@ -866,7 +956,7 @@ void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom) {
# endif
if (syncinfo->status.change_flags & RGBLIGHT_STATUS_CHANGE_MODE) {
if (syncinfo->config.enable) {
- rgblight_config.enable = 1; // == rgblight_enable_noeeprom();
+ rgblight_config.enable = 1; // == rgblight_enable_noeeprom();
rgblight_mode_eeprom_helper(syncinfo->config.mode, write_to_eeprom);
} else {
rgblight_disable_noeeprom();
@@ -945,12 +1035,12 @@ static void rgblight_effect_dummy(animation_status_t *anim) {
void rgblight_task(void) {
if (rgblight_status.timer_enabled) {
effect_func_t effect_func = rgblight_effect_dummy;
- uint16_t interval_time = 2000; // dummy interval
+ uint16_t interval_time = 2000; // dummy interval
uint8_t delta = rgblight_config.mode - rgblight_status.base_mode;
animation_status.delta = delta;
// static light mode, do nothing here
- if (1 == 0) { // dummy
+ if (1 == 0) { // dummy
}
# ifdef RGBLIGHT_EFFECT_BREATHING
else if (rgblight_status.base_mode == RGBLIGHT_MODE_BREATHING) {
@@ -1016,7 +1106,7 @@ void rgblight_task(void) {
if (animation_status.restart) {
animation_status.restart = false;
animation_status.last_timer = sync_timer_read();
- animation_status.pos16 = 0; // restart signal to local each effect
+ animation_status.pos16 = 0; // restart signal to local each effect
}
uint16_t now = sync_timer_read();
if (timer_expired(now, animation_status.last_timer)) {
@@ -1055,7 +1145,7 @@ void rgblight_task(void) {
# ifndef RGBLIGHT_EFFECT_BREATHE_CENTER
# ifndef RGBLIGHT_BREATHE_TABLE_SIZE
-# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256 or 128 or 64
+# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256 or 128 or 64
# endif
# include <rgblight_breathe_table.h>
# endif
@@ -1131,7 +1221,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
}
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
- if (anim->pos == 0) { // restart signal
+ if (anim->pos == 0) { // restart signal
if (increment == 1) {
pos = rgblight_ranges.effect_num_leds - 1;
} else {
@@ -1194,7 +1284,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
uint8_t i, cur;
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
- if (anim->pos == 0) { // restart signal
+ if (anim->pos == 0) { // restart signal
anim->pos = 1;
low_bound = 0;
high_bound = RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1;
@@ -1347,8 +1437,12 @@ void rgblight_effect_twinkle(animation_status_t *anim) {
const uint8_t bottom = breathe_calc(0);
const uint8_t top = breathe_calc(127);
- uint8_t frac(uint8_t n, uint8_t d) { return (uint16_t)255 * n / d; }
- uint8_t scale(uint16_t v, uint8_t scale) { return (v * scale) >> 8; }
+ uint8_t frac(uint8_t n, uint8_t d) {
+ return (uint16_t)255 * n / d;
+ }
+ uint8_t scale(uint16_t v, uint8_t scale) {
+ return (v * scale) >> 8;
+ }
for (uint8_t i = 0; i < rgblight_ranges.effect_num_leds; i++) {
TwinkleState *t = &(led_twinkle_state[i]);
diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h
index 5b90b8f49e..7076dc41ac 100644
--- a/quantum/rgblight/rgblight.h
+++ b/quantum/rgblight/rgblight.h
@@ -119,7 +119,7 @@ enum RGBLIGHT_EFFECT_MODE {
// sample: #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85
#ifndef RGBLIGHT_EFFECT_BREATHE_MAX
-# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0-255
+# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0-255
#endif
#ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH
@@ -177,8 +177,8 @@ enum RGBLIGHT_EFFECT_MODE {
#ifdef RGBLIGHT_LAYERS
typedef struct {
- uint8_t index; // The first LED to light
- uint8_t count; // The number of LEDs to light
+ uint8_t index; // The first LED to light
+ uint8_t count; // The number of LEDs to light
uint8_t hue;
uint8_t sat;
uint8_t val;
@@ -241,7 +241,7 @@ typedef union {
uint8_t hue : 8;
uint8_t sat : 8;
uint8_t val : 8;
- uint8_t speed : 8; // EECONFIG needs to be increased to support this
+ uint8_t speed : 8; // EECONFIG needs to be increased to support this
};
} rgblight_config_t;
@@ -271,7 +271,7 @@ extern rgblight_ranges_t rgblight_ranges;
/* === Utility Functions ===*/
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
-void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); // without RGBLIGHT_LIMIT_VAL check
+void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); // without RGBLIGHT_LIMIT_VAL check
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1);
/* === Low level Functions === */
diff --git a/quantum/ring_buffer.h b/quantum/ring_buffer.h
index 284745ca8e..85419de11b 100644
--- a/quantum/ring_buffer.h
+++ b/quantum/ring_buffer.h
@@ -36,9 +36,13 @@ static inline uint8_t rbuf_dequeue(void) {
}
static inline bool rbuf_has_data(void) {
bool has_data;
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { has_data = (rbuf_head != rbuf_tail); }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ has_data = (rbuf_head != rbuf_tail);
+ }
return has_data;
}
static inline void rbuf_clear(void) {
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { rbuf_head = rbuf_tail = 0; }
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ rbuf_head = rbuf_tail = 0;
+ }
}
diff --git a/quantum/send_string.c b/quantum/send_string.c
index 1a7f7a1315..0de12ba12d 100644
--- a/quantum/send_string.c
+++ b/quantum/send_string.c
@@ -142,9 +142,13 @@ __attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// Note: we bit-pack in "reverse" order to optimize loading
#define PGM_LOADBIT(mem, pos) ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 0x01)
-void send_string(const char *str) { send_string_with_delay(str, 0); }
+void send_string(const char *str) {
+ send_string_with_delay(str, 0);
+}
-void send_string_P(const char *str) { send_string_with_delay_P(str, 0); }
+void send_string_P(const char *str) {
+ send_string_with_delay_P(str, 0);
+}
void send_string_with_delay(const char *str, uint8_t interval) {
while (1) {
@@ -173,7 +177,8 @@ void send_string_with_delay(const char *str, uint8_t interval) {
ms += keycode - '0';
keycode = *(++str);
}
- while (ms--) wait_ms(1);
+ while (ms--)
+ wait_ms(1);
}
} else {
send_char(ascii_code);
@@ -182,7 +187,8 @@ void send_string_with_delay(const char *str, uint8_t interval) {
// interval
{
uint8_t ms = interval;
- while (ms--) wait_ms(1);
+ while (ms--)
+ wait_ms(1);
}
}
}
@@ -214,7 +220,8 @@ void send_string_with_delay_P(const char *str, uint8_t interval) {
ms += keycode - '0';
keycode = pgm_read_byte(++str);
}
- while (ms--) wait_ms(1);
+ while (ms--)
+ wait_ms(1);
}
} else {
send_char(ascii_code);
@@ -223,14 +230,15 @@ void send_string_with_delay_P(const char *str, uint8_t interval) {
// interval
{
uint8_t ms = interval;
- while (ms--) wait_ms(1);
+ while (ms--)
+ wait_ms(1);
}
}
}
void send_char(char ascii_code) {
#if defined(AUDIO_ENABLE) && defined(SENDSTRING_BELL)
- if (ascii_code == '\a') { // BEL
+ if (ascii_code == '\a') { // BEL
PLAY_SONG(bell_song);
return;
}
diff --git a/quantum/sequencer/sequencer.c b/quantum/sequencer/sequencer.c
index 18a83661ec..2e92f7b3eb 100644
--- a/quantum/sequencer/sequencer.c
+++ b/quantum/sequencer/sequencer.c
@@ -25,16 +25,18 @@
#endif
sequencer_config_t sequencer_config = {
- false, // enabled
- {false}, // steps
- {0}, // track notes
- 60, // tempo
- SQ_RES_4, // resolution
+ false, // enabled
+ {false}, // steps
+ {0}, // track notes
+ 60, // tempo
+ SQ_RES_4, // resolution
};
sequencer_state_t sequencer_internal_state = {0, 0, 0, 0, SEQUENCER_PHASE_ATTACK};
-bool is_sequencer_on(void) { return sequencer_config.enabled; }
+bool is_sequencer_on(void) {
+ return sequencer_config.enabled;
+}
void sequencer_on(void) {
dprintln("sequencer on");
@@ -65,7 +67,9 @@ void sequencer_set_track_notes(const uint16_t track_notes[SEQUENCER_TRACKS]) {
}
}
-bool is_sequencer_track_active(uint8_t track) { return (sequencer_internal_state.active_tracks >> track) & true; }
+bool is_sequencer_track_active(uint8_t track) {
+ return (sequencer_internal_state.active_tracks >> track) & true;
+}
void sequencer_set_track_activation(uint8_t track, bool value) {
if (value) {
@@ -76,7 +80,9 @@ void sequencer_set_track_activation(uint8_t track, bool value) {
dprintf("sequencer: track %d is %s\n", track, value ? "active" : "inactive");
}
-void sequencer_toggle_track_activation(uint8_t track) { sequencer_set_track_activation(track, !is_sequencer_track_active(track)); }
+void sequencer_toggle_track_activation(uint8_t track) {
+ sequencer_set_track_activation(track, !is_sequencer_track_active(track));
+}
void sequencer_toggle_single_active_track(uint8_t track) {
if (is_sequencer_track_active(track)) {
@@ -86,9 +92,13 @@ void sequencer_toggle_single_active_track(uint8_t track) {
}
}
-bool is_sequencer_step_on(uint8_t step) { return step < SEQUENCER_STEPS && (sequencer_config.steps[step] & sequencer_internal_state.active_tracks) > 0; }
+bool is_sequencer_step_on(uint8_t step) {
+ return step < SEQUENCER_STEPS && (sequencer_config.steps[step] & sequencer_internal_state.active_tracks) > 0;
+}
-bool is_sequencer_step_on_for_track(uint8_t step, uint8_t track) { return step < SEQUENCER_STEPS && (sequencer_config.steps[step] >> track) & true; }
+bool is_sequencer_step_on_for_track(uint8_t step, uint8_t track) {
+ return step < SEQUENCER_STEPS && (sequencer_config.steps[step] >> track) & true;
+}
void sequencer_set_step(uint8_t step, bool value) {
if (step < SEQUENCER_STEPS) {
@@ -122,7 +132,9 @@ void sequencer_set_all_steps(bool value) {
dprintf("sequencer: all steps are %s\n", value ? "on" : "off");
}
-uint8_t sequencer_get_tempo(void) { return sequencer_config.tempo; }
+uint8_t sequencer_get_tempo(void) {
+ return sequencer_config.tempo;
+}
void sequencer_set_tempo(uint8_t tempo) {
if (tempo > 0) {
@@ -142,9 +154,13 @@ void sequencer_increase_tempo(void) {
}
}
-void sequencer_decrease_tempo(void) { sequencer_set_tempo(sequencer_config.tempo - 1); }
+void sequencer_decrease_tempo(void) {
+ sequencer_set_tempo(sequencer_config.tempo - 1);
+}
-sequencer_resolution_t sequencer_get_resolution(void) { return sequencer_config.resolution; }
+sequencer_resolution_t sequencer_get_resolution(void) {
+ return sequencer_config.resolution;
+}
void sequencer_set_resolution(sequencer_resolution_t resolution) {
if (resolution >= 0 && resolution < SEQUENCER_RESOLUTIONS) {
@@ -155,11 +171,17 @@ void sequencer_set_resolution(sequencer_resolution_t resolution) {
}
}
-void sequencer_increase_resolution(void) { sequencer_set_resolution(sequencer_config.resolution + 1); }
+void sequencer_increase_resolution(void) {
+ sequencer_set_resolution(sequencer_config.resolution + 1);
+}
-void sequencer_decrease_resolution(void) { sequencer_set_resolution(sequencer_config.resolution - 1); }
+void sequencer_decrease_resolution(void) {
+ sequencer_set_resolution(sequencer_config.resolution - 1);
+}
-uint8_t sequencer_get_current_step(void) { return sequencer_internal_state.current_step; }
+uint8_t sequencer_get_current_step(void) {
+ return sequencer_internal_state.current_step;
+}
void sequencer_phase_attack(void) {
dprintf("sequencer: step %d\n", sequencer_internal_state.current_step);
@@ -229,9 +251,13 @@ void sequencer_task(void) {
}
}
-uint16_t sequencer_get_beat_duration(void) { return get_beat_duration(sequencer_config.tempo); }
+uint16_t sequencer_get_beat_duration(void) {
+ return get_beat_duration(sequencer_config.tempo);
+}
-uint16_t sequencer_get_step_duration(void) { return get_step_duration(sequencer_config.tempo, sequencer_config.resolution); }
+uint16_t sequencer_get_step_duration(void) {
+ return get_step_duration(sequencer_config.tempo, sequencer_config.resolution);
+}
uint16_t get_beat_duration(uint8_t tempo) {
// Don’t crash in the unlikely case where the given tempo is 0
diff --git a/quantum/sequencer/sequencer.h b/quantum/sequencer/sequencer.h
index 4017ae764e..a8ea16eece 100644
--- a/quantum/sequencer/sequencer.h
+++ b/quantum/sequencer/sequencer.h
@@ -48,7 +48,7 @@ typedef struct {
bool enabled;
uint8_t steps[SEQUENCER_STEPS];
uint16_t track_notes[SEQUENCER_TRACKS];
- uint8_t tempo; // Is a maximum tempo of 255 reasonable?
+ uint8_t tempo; // Is a maximum tempo of 255 reasonable?
sequencer_resolution_t resolution;
} sequencer_config_t;
@@ -57,9 +57,9 @@ typedef struct {
* We use a "phase" state machine to delay some of the events.
*/
typedef enum sequencer_phase_t {
- SEQUENCER_PHASE_ATTACK, // t=0ms, send the MIDI note on signal
- SEQUENCER_PHASE_RELEASE, // t=SEQUENCER_PHASE_RELEASE_TIMEOUT ms, send the MIDI note off signal
- SEQUENCER_PHASE_PAUSE // t=step duration ms, loop
+ SEQUENCER_PHASE_ATTACK, // t=0ms, send the MIDI note on signal
+ SEQUENCER_PHASE_RELEASE, // t=SEQUENCER_PHASE_RELEASE_TIMEOUT ms, send the MIDI note off signal
+ SEQUENCER_PHASE_PAUSE // t=step duration ms, loop
} sequencer_phase_t;
typedef struct {
diff --git a/quantum/sequencer/tests/midi_mock.c b/quantum/sequencer/tests/midi_mock.c
index 236e16f9d7..5bd945d615 100644
--- a/quantum/sequencer/tests/midi_mock.c
+++ b/quantum/sequencer/tests/midi_mock.c
@@ -19,8 +19,14 @@
uint16_t last_noteon = 0;
uint16_t last_noteoff = 0;
-uint16_t midi_compute_note(uint16_t keycode) { return keycode; }
+uint16_t midi_compute_note(uint16_t keycode) {
+ return keycode;
+}
-void process_midi_basic_noteon(uint16_t note) { last_noteon = note; }
+void process_midi_basic_noteon(uint16_t note) {
+ last_noteon = note;
+}
-void process_midi_basic_noteoff(uint16_t note) { last_noteoff = note; }
+void process_midi_basic_noteoff(uint16_t note) {
+ last_noteoff = note;
+}
diff --git a/quantum/sequencer/tests/sequencer_tests.cpp b/quantum/sequencer/tests/sequencer_tests.cpp
index 290605a52a..05e58e4111 100644
--- a/quantum/sequencer/tests/sequencer_tests.cpp
+++ b/quantum/sequencer/tests/sequencer_tests.cpp
@@ -78,7 +78,9 @@ class SequencerTest : public ::testing::Test {
sequencer_state_t state_copy;
};
-TEST_F(SequencerTest, TestOffByDefault) { EXPECT_EQ(is_sequencer_on(), false); }
+TEST_F(SequencerTest, TestOffByDefault) {
+ EXPECT_EQ(is_sequencer_on(), false);
+}
TEST_F(SequencerTest, TestOn) {
sequencer_config.enabled = false;
diff --git a/quantum/split_common/post_config.h b/quantum/split_common/post_config.h
index a4c0a1956b..8f79beb6ed 100644
--- a/quantum/split_common/post_config.h
+++ b/quantum/split_common/post_config.h
@@ -5,6 +5,6 @@
# endif
# ifndef F_SCL
-# define F_SCL 100000UL // SCL frequency
+# define F_SCL 100000UL // SCL frequency
# endif
#endif
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c
index 35f0a9d181..7d50adf758 100644
--- a/quantum/split_common/split_util.c
+++ b/quantum/split_common/split_util.c
@@ -43,14 +43,14 @@
// Set to 0 to disable the disconnection check altogether.
#ifndef SPLIT_MAX_CONNECTION_ERRORS
# define SPLIT_MAX_CONNECTION_ERRORS 10
-#endif // SPLIT_MAX_CONNECTION_ERRORS
+#endif // SPLIT_MAX_CONNECTION_ERRORS
// How long (in milliseconds) to block all connection attempts after the communication has been flagged as disconnected.
// One communication attempt will be allowed everytime this amount of time has passed since the last attempt. If that attempt succeeds, the communication is seen as working again.
// Set to 0 to disable communication throttling while disconnected
#ifndef SPLIT_CONNECTION_CHECK_TIMEOUT
# define SPLIT_CONNECTION_CHECK_TIMEOUT 500
-#endif // SPLIT_CONNECTION_CHECK_TIMEOUT
+#endif // SPLIT_CONNECTION_CHECK_TIMEOUT
static uint8_t connection_errors = 0;
@@ -68,7 +68,9 @@ static bool usbIsActive(void) {
return false;
}
#else
-static inline bool usbIsActive(void) { return usb_vbus_state(); }
+static inline bool usbIsActive(void) {
+ return usb_vbus_state();
+}
#endif
#ifdef SPLIT_HAND_MATRIX_GRID
@@ -83,7 +85,7 @@ static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) {
uint8_t pin_state = readPin(in_pin);
// Set out_pin to a setting that is less susceptible to noise.
setPinInputHigh(out_pin);
- matrix_io_delay(); // Wait for the pull-up to go HIGH.
+ matrix_io_delay(); // Wait for the pull-up to go HIGH.
return pin_state;
}
#endif
@@ -158,7 +160,9 @@ void split_post_init(void) {
}
}
-bool is_transport_connected(void) { return connection_errors < SPLIT_MAX_CONNECTION_ERRORS; }
+bool is_transport_connected(void) {
+ return connection_errors < SPLIT_MAX_CONNECTION_ERRORS;
+}
bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
#if SPLIT_MAX_CONNECTION_ERRORS > 0 && SPLIT_CONNECTION_CHECK_TIMEOUT > 0
@@ -169,7 +173,7 @@ bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t sl
if (is_disconnected && timer_elapsed(connection_check_timer) < SPLIT_CONNECTION_CHECK_TIMEOUT) {
return false;
}
-#endif // SPLIT_MAX_CONNECTION_ERRORS > 0 && SPLIT_CONNECTION_CHECK_TIMEOUT > 0
+#endif // SPLIT_MAX_CONNECTION_ERRORS > 0 && SPLIT_CONNECTION_CHECK_TIMEOUT > 0
__attribute__((unused)) bool okay = transport_master(master_matrix, slave_matrix);
#if SPLIT_MAX_CONNECTION_ERRORS > 0
@@ -186,10 +190,10 @@ bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t sl
return connected;
} else if (is_disconnected) {
dprintln("Target connected");
-# endif // SPLIT_CONNECTION_CHECK_TIMEOUT > 0
+# endif // SPLIT_CONNECTION_CHECK_TIMEOUT > 0
}
connection_errors = 0;
-#endif // SPLIT_MAX_CONNECTION_ERRORS > 0
+#endif // SPLIT_MAX_CONNECTION_ERRORS > 0
return true;
}
diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h
index ef72043bb7..c7eabea233 100644
--- a/quantum/split_common/split_util.h
+++ b/quantum/split_common/split_util.h
@@ -2,7 +2,6 @@
#include <stdbool.h>
#include <stdint.h>
-#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
diff --git a/quantum/split_common/transaction_id_define.h b/quantum/split_common/transaction_id_define.h
index 535bc21aea..761a8884f4 100644
--- a/quantum/split_common/transaction_id_define.h
+++ b/quantum/split_common/transaction_id_define.h
@@ -19,81 +19,87 @@
enum serial_transaction_id {
#ifdef USE_I2C
I2C_EXECUTE_CALLBACK,
-#endif // USE_I2C
+#endif // USE_I2C
GET_SLAVE_MATRIX_CHECKSUM,
GET_SLAVE_MATRIX_DATA,
#ifdef SPLIT_TRANSPORT_MIRROR
PUT_MASTER_MATRIX,
-#endif // SPLIT_TRANSPORT_MIRROR
+#endif // SPLIT_TRANSPORT_MIRROR
#ifdef ENCODER_ENABLE
GET_ENCODERS_CHECKSUM,
GET_ENCODERS_DATA,
-#endif // ENCODER_ENABLE
+#endif // ENCODER_ENABLE
#ifndef DISABLE_SYNC_TIMER
PUT_SYNC_TIMER,
-#endif // DISABLE_SYNC_TIMER
+#endif // DISABLE_SYNC_TIMER
#if !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
PUT_LAYER_STATE,
PUT_DEFAULT_LAYER_STATE,
-#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
+#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
#ifdef SPLIT_LED_STATE_ENABLE
PUT_LED_STATE,
-#endif // SPLIT_LED_STATE_ENABLE
+#endif // SPLIT_LED_STATE_ENABLE
#ifdef SPLIT_MODS_ENABLE
PUT_MODS,
-#endif // SPLIT_MODS_ENABLE
+#endif // SPLIT_MODS_ENABLE
#ifdef BACKLIGHT_ENABLE
PUT_BACKLIGHT,
-#endif // BACKLIGHT_ENABLE
+#endif // BACKLIGHT_ENABLE
#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
PUT_RGBLIGHT,
-#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
PUT_LED_MATRIX,
-#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
PUT_RGB_MATRIX,
-#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
#if defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
PUT_WPM,
-#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
+#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
#if defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
PUT_OLED,
-#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
+#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
#if defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
PUT_ST7565,
-#endif // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+#endif // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+
+#if defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
+ GET_POINTING_CHECKSUM,
+ GET_POINTING_DATA,
+ PUT_POINTING_CPI,
+#endif // defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
#if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
PUT_RPC_INFO,
PUT_RPC_REQ_DATA,
EXECUTE_RPC,
GET_RPC_RESP_DATA,
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
// keyboard-specific
#ifdef SPLIT_TRANSACTION_IDS_KB
SPLIT_TRANSACTION_IDS_KB,
-#endif // SPLIT_TRANSACTION_IDS_KB
+#endif // SPLIT_TRANSACTION_IDS_KB
// user/keymap-specific
#ifdef SPLIT_TRANSACTION_IDS_USER
SPLIT_TRANSACTION_IDS_USER,
-#endif // SPLIT_TRANSACTION_IDS_USER
+#endif // SPLIT_TRANSACTION_IDS_USER
NUM_TOTAL_TRANSACTIONS
};
diff --git a/quantum/split_common/transactions.c b/quantum/split_common/transactions.c
index 3ff87710e7..cffbccaeee 100644
--- a/quantum/split_common/transactions.c
+++ b/quantum/split_common/transactions.c
@@ -30,16 +30,16 @@
#ifndef FORCED_SYNC_THROTTLE_MS
# define FORCED_SYNC_THROTTLE_MS 100
-#endif // FORCED_SYNC_THROTTLE_MS
+#endif // FORCED_SYNC_THROTTLE_MS
#define sizeof_member(type, member) sizeof(((type *)NULL)->member)
#define trans_initiator2target_initializer_cb(member, cb) \
- { &dummy, sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), 0, 0, cb }
+ { sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), 0, 0, cb }
#define trans_initiator2target_initializer(member) trans_initiator2target_initializer_cb(member, NULL)
#define trans_target2initiator_initializer_cb(member, cb) \
- { &dummy, 0, 0, sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), cb }
+ { 0, 0, sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), cb }
#define trans_target2initiator_initializer(member) trans_target2initiator_initializer_cb(member, NULL)
#define transport_write(id, data, length) transport_execute_transaction(id, data, length, NULL, 0)
@@ -49,7 +49,7 @@
// Forward-declare the RPC callback handlers
void slave_rpc_info_callback(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer);
void slave_rpc_exec_callback(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer);
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
////////////////////////////////////////////////////
// Helpers
@@ -63,7 +63,9 @@ static bool transaction_handler_master(matrix_row_t master_matrix[], matrix_row_
}
}
bool this_okay = true;
- ATOMIC_BLOCK_FORCEON { this_okay = handler(master_matrix, slave_matrix); };
+ ATOMIC_BLOCK_FORCEON {
+ this_okay = handler(master_matrix, slave_matrix);
+ };
if (this_okay) return true;
}
dprintf("Failed to execute %s\n", prefix);
@@ -75,9 +77,11 @@ static bool transaction_handler_master(matrix_row_t master_matrix[], matrix_row_
if (!transaction_handler_master(master_matrix, slave_matrix, #prefix, &prefix##_handlers_master)) return false; \
} while (0)
-#define TRANSACTION_HANDLER_SLAVE(prefix) \
- do { \
- ATOMIC_BLOCK_FORCEON { prefix##_handlers_slave(master_matrix, slave_matrix); }; \
+#define TRANSACTION_HANDLER_SLAVE(prefix) \
+ do { \
+ ATOMIC_BLOCK_FORCEON { \
+ prefix##_handlers_slave(master_matrix, slave_matrix); \
+ }; \
} while (0)
inline static bool read_if_checksum_mismatch(int8_t trans_id_checksum, int8_t trans_id_retrieve, uint32_t *last_update, void *destination, const void *equiv_shmem, size_t length) {
@@ -116,8 +120,8 @@ inline static bool send_if_data_mismatch(int8_t trans_id, uint32_t *last_update,
static bool slave_matrix_handlers_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
static uint32_t last_update = 0;
- static matrix_row_t last_matrix[(MATRIX_ROWS) / 2] = {0}; // last successfully-read matrix, so we can replicate if there are checksum errors
- matrix_row_t temp_matrix[(MATRIX_ROWS) / 2]; // holding area while we test whether or not checksum is correct
+ static matrix_row_t last_matrix[(MATRIX_ROWS) / 2] = {0}; // last successfully-read matrix, so we can replicate if there are checksum errors
+ matrix_row_t temp_matrix[(MATRIX_ROWS) / 2]; // holding area while we test whether or not checksum is correct
bool okay = read_if_checksum_mismatch(GET_SLAVE_MATRIX_CHECKSUM, GET_SLAVE_MATRIX_DATA, &last_update, temp_matrix, split_shmem->smatrix.matrix, sizeof(split_shmem->smatrix.matrix));
if (okay) {
@@ -161,13 +165,13 @@ static void master_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_ro
# define TRANSACTIONS_MASTER_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(master_matrix)
# define TRANSACTIONS_MASTER_MATRIX_REGISTRATIONS [PUT_MASTER_MATRIX] = trans_initiator2target_initializer(mmatrix.matrix),
-#else // SPLIT_TRANSPORT_MIRROR
+#else // SPLIT_TRANSPORT_MIRROR
# define TRANSACTIONS_MASTER_MATRIX_MASTER()
# define TRANSACTIONS_MASTER_MATRIX_SLAVE()
# define TRANSACTIONS_MASTER_MATRIX_REGISTRATIONS
-#endif // SPLIT_TRANSPORT_MIRROR
+#endif // SPLIT_TRANSPORT_MIRROR
////////////////////////////////////////////////////
// Encoders
@@ -200,13 +204,13 @@ static void encoder_handlers_slave(matrix_row_t master_matrix[], matrix_row_t sl
[GET_ENCODERS_DATA] = trans_target2initiator_initializer(encoders.state),
// clang-format on
-#else // ENCODER_ENABLE
+#else // ENCODER_ENABLE
# define TRANSACTIONS_ENCODERS_MASTER()
# define TRANSACTIONS_ENCODERS_SLAVE()
# define TRANSACTIONS_ENCODERS_REGISTRATIONS
-#endif // ENCODER_ENABLE
+#endif // ENCODER_ENABLE
////////////////////////////////////////////////////
// Sync timer
@@ -239,13 +243,13 @@ static void sync_timer_handlers_slave(matrix_row_t master_matrix[], matrix_row_t
# define TRANSACTIONS_SYNC_TIMER_SLAVE() TRANSACTION_HANDLER_SLAVE(sync_timer)
# define TRANSACTIONS_SYNC_TIMER_REGISTRATIONS [PUT_SYNC_TIMER] = trans_initiator2target_initializer(sync_timer),
-#else // DISABLE_SYNC_TIMER
+#else // DISABLE_SYNC_TIMER
# define TRANSACTIONS_SYNC_TIMER_MASTER()
# define TRANSACTIONS_SYNC_TIMER_SLAVE()
# define TRANSACTIONS_SYNC_TIMER_REGISTRATIONS
-#endif // DISABLE_SYNC_TIMER
+#endif // DISABLE_SYNC_TIMER
////////////////////////////////////////////////////
// Layer state
@@ -276,13 +280,13 @@ static void layer_state_handlers_slave(matrix_row_t master_matrix[], matrix_row_
[PUT_DEFAULT_LAYER_STATE] = trans_initiator2target_initializer(layers.default_layer_state),
// clang-format on
-#else // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
+#else // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
# define TRANSACTIONS_LAYER_STATE_MASTER()
# define TRANSACTIONS_LAYER_STATE_SLAVE()
# define TRANSACTIONS_LAYER_STATE_REGISTRATIONS
-#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
+#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
////////////////////////////////////////////////////
// LED state
@@ -304,13 +308,13 @@ static void led_state_handlers_slave(matrix_row_t master_matrix[], matrix_row_t
# define TRANSACTIONS_LED_STATE_SLAVE() TRANSACTION_HANDLER_SLAVE(led_state)
# define TRANSACTIONS_LED_STATE_REGISTRATIONS [PUT_LED_STATE] = trans_initiator2target_initializer(led_state),
-#else // SPLIT_LED_STATE_ENABLE
+#else // SPLIT_LED_STATE_ENABLE
# define TRANSACTIONS_LED_STATE_MASTER()
# define TRANSACTIONS_LED_STATE_SLAVE()
# define TRANSACTIONS_LED_STATE_REGISTRATIONS
-#endif // SPLIT_LED_STATE_ENABLE
+#endif // SPLIT_LED_STATE_ENABLE
////////////////////////////////////////////////////
// Mods
@@ -336,7 +340,7 @@ static bool mods_handlers_master(matrix_row_t master_matrix[], matrix_row_t slav
if (!mods_need_sync && new_mods.oneshot_mods != split_shmem->mods.oneshot_mods) {
mods_need_sync = true;
}
-# endif // NO_ACTION_ONESHOT
+# endif // NO_ACTION_ONESHOT
bool okay = true;
if (mods_need_sync) {
@@ -361,13 +365,13 @@ static void mods_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave
# define TRANSACTIONS_MODS_SLAVE() TRANSACTION_HANDLER_SLAVE(mods)
# define TRANSACTIONS_MODS_REGISTRATIONS [PUT_MODS] = trans_initiator2target_initializer(mods),
-#else // SPLIT_MODS_ENABLE
+#else // SPLIT_MODS_ENABLE
# define TRANSACTIONS_MODS_MASTER()
# define TRANSACTIONS_MODS_SLAVE()
# define TRANSACTIONS_MODS_REGISTRATIONS
-#endif // SPLIT_MODS_ENABLE
+#endif // SPLIT_MODS_ENABLE
////////////////////////////////////////////////////
// Backlight
@@ -380,19 +384,21 @@ static bool backlight_handlers_master(matrix_row_t master_matrix[], matrix_row_t
return send_if_condition(PUT_BACKLIGHT, &last_update, (level != split_shmem->backlight_level), &level, sizeof(level));
}
-static void backlight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { backlight_set(split_shmem->backlight_level); }
+static void backlight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+ backlight_set(split_shmem->backlight_level);
+}
# define TRANSACTIONS_BACKLIGHT_MASTER() TRANSACTION_HANDLER_MASTER(backlight)
# define TRANSACTIONS_BACKLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(backlight)
# define TRANSACTIONS_BACKLIGHT_REGISTRATIONS [PUT_BACKLIGHT] = trans_initiator2target_initializer(backlight_level),
-#else // BACKLIGHT_ENABLE
+#else // BACKLIGHT_ENABLE
# define TRANSACTIONS_BACKLIGHT_MASTER()
# define TRANSACTIONS_BACKLIGHT_SLAVE()
# define TRANSACTIONS_BACKLIGHT_REGISTRATIONS
-#endif // BACKLIGHT_ENABLE
+#endif // BACKLIGHT_ENABLE
////////////////////////////////////////////////////
// RGBLIGHT
@@ -423,13 +429,13 @@ static void rgblight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t s
# define TRANSACTIONS_RGBLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(rgblight)
# define TRANSACTIONS_RGBLIGHT_REGISTRATIONS [PUT_RGBLIGHT] = trans_initiator2target_initializer(rgblight_sync),
-#else // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+#else // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
# define TRANSACTIONS_RGBLIGHT_MASTER()
# define TRANSACTIONS_RGBLIGHT_SLAVE()
# define TRANSACTIONS_RGBLIGHT_REGISTRATIONS
-#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
////////////////////////////////////////////////////
// LED Matrix
@@ -453,13 +459,13 @@ static void led_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_row_t
# define TRANSACTIONS_LED_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(led_matrix)
# define TRANSACTIONS_LED_MATRIX_REGISTRATIONS [PUT_LED_MATRIX] = trans_initiator2target_initializer(led_matrix_sync),
-#else // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#else // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
# define TRANSACTIONS_LED_MATRIX_MASTER()
# define TRANSACTIONS_LED_MATRIX_SLAVE()
# define TRANSACTIONS_LED_MATRIX_REGISTRATIONS
-#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
////////////////////////////////////////////////////
// RGB Matrix
@@ -483,13 +489,13 @@ static void rgb_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_row_t
# define TRANSACTIONS_RGB_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(rgb_matrix)
# define TRANSACTIONS_RGB_MATRIX_REGISTRATIONS [PUT_RGB_MATRIX] = trans_initiator2target_initializer(rgb_matrix_sync),
-#else // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#else // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
# define TRANSACTIONS_RGB_MATRIX_MASTER()
# define TRANSACTIONS_RGB_MATRIX_SLAVE()
# define TRANSACTIONS_RGB_MATRIX_REGISTRATIONS
-#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
////////////////////////////////////////////////////
// WPM
@@ -502,19 +508,21 @@ static bool wpm_handlers_master(matrix_row_t master_matrix[], matrix_row_t slave
return send_if_condition(PUT_WPM, &last_update, (current_wpm != split_shmem->current_wpm), &current_wpm, sizeof(current_wpm));
}
-static void wpm_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { set_current_wpm(split_shmem->current_wpm); }
+static void wpm_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+ set_current_wpm(split_shmem->current_wpm);
+}
# define TRANSACTIONS_WPM_MASTER() TRANSACTION_HANDLER_MASTER(wpm)
# define TRANSACTIONS_WPM_SLAVE() TRANSACTION_HANDLER_SLAVE(wpm)
# define TRANSACTIONS_WPM_REGISTRATIONS [PUT_WPM] = trans_initiator2target_initializer(current_wpm),
-#else // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
+#else // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
# define TRANSACTIONS_WPM_MASTER()
# define TRANSACTIONS_WPM_SLAVE()
# define TRANSACTIONS_WPM_REGISTRATIONS
-#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
+#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
////////////////////////////////////////////////////
// OLED
@@ -539,13 +547,13 @@ static void oled_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave
# define TRANSACTIONS_OLED_SLAVE() TRANSACTION_HANDLER_SLAVE(oled)
# define TRANSACTIONS_OLED_REGISTRATIONS [PUT_OLED] = trans_initiator2target_initializer(current_oled_state),
-#else // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
+#else // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
# define TRANSACTIONS_OLED_MASTER()
# define TRANSACTIONS_OLED_SLAVE()
# define TRANSACTIONS_OLED_REGISTRATIONS
-#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
+#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
////////////////////////////////////////////////////
// ST7565
@@ -570,24 +578,101 @@ static void st7565_handlers_slave(matrix_row_t master_matrix[], matrix_row_t sla
# define TRANSACTIONS_ST7565_SLAVE() TRANSACTION_HANDLER_SLAVE(st7565)
# define TRANSACTIONS_ST7565_REGISTRATIONS [PUT_ST7565] = trans_initiator2target_initializer(current_st7565_state),
-#else // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+#else // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
# define TRANSACTIONS_ST7565_MASTER()
# define TRANSACTIONS_ST7565_SLAVE()
# define TRANSACTIONS_ST7565_REGISTRATIONS
-#endif // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+#endif // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+
+////////////////////////////////////////////////////
+// POINTING
+
+#if defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
+
+static bool pointing_handlers_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+# if defined(POINTING_DEVICE_LEFT)
+ if (is_keyboard_left()) {
+ return true;
+ }
+# elif defined(POINTING_DEVICE_RIGHT)
+ if (!is_keyboard_left()) {
+ return true;
+ }
+# endif
+ static uint32_t last_update = 0;
+ static uint16_t last_cpi = 0;
+ report_mouse_t temp_state;
+ uint16_t temp_cpi;
+ bool okay = read_if_checksum_mismatch(GET_POINTING_CHECKSUM, GET_POINTING_DATA, &last_update, &temp_state, &split_shmem->pointing.report, sizeof(temp_state));
+ if (okay) pointing_device_set_shared_report(temp_state);
+ temp_cpi = pointing_device_get_shared_cpi();
+ if (temp_cpi && memcmp(&last_cpi, &temp_cpi, sizeof(temp_cpi)) != 0) {
+ memcpy(&split_shmem->pointing.cpi, &temp_cpi, sizeof(temp_cpi));
+ okay = transport_write(PUT_POINTING_CPI, &split_shmem->pointing.cpi, sizeof(split_shmem->pointing.cpi));
+ if (okay) {
+ last_cpi = temp_cpi;
+ }
+ }
+ return okay;
+}
+
+extern const pointing_device_driver_t pointing_device_driver;
+
+static void pointing_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+# if defined(POINTING_DEVICE_LEFT)
+ if (!is_keyboard_left()) {
+ return;
+ }
+# elif defined(POINTING_DEVICE_RIGHT)
+ if (is_keyboard_left()) {
+ return;
+ }
+# endif
+ report_mouse_t temp_report;
+ uint16_t temp_cpi;
+# if (POINTING_DEVICE_TASK_THROTTLE_MS > 0)
+ static uint32_t last_exec = 0;
+ if (timer_elapsed32(last_exec) < POINTING_DEVICE_TASK_THROTTLE_MS) {
+ return;
+ }
+ last_exec = timer_read32();
+# endif
+ temp_cpi = !pointing_device_driver.get_cpi ? 0 : pointing_device_driver.get_cpi(); // check for NULL
+ if (split_shmem->pointing.cpi && memcmp(&split_shmem->pointing.cpi, &temp_cpi, sizeof(temp_cpi)) != 0) {
+ if (pointing_device_driver.set_cpi) {
+ pointing_device_driver.set_cpi(split_shmem->pointing.cpi);
+ }
+ }
+ memset(&temp_report, 0, sizeof(temp_report));
+ temp_report = pointing_device_driver.get_report(temp_report);
+ memcpy(&split_shmem->pointing.report, &temp_report, sizeof(temp_report));
+ // Now update the checksum given that the pointing has been written to
+ split_shmem->pointing.checksum = crc8(&temp_report, sizeof(temp_report));
+}
+
+# define TRANSACTIONS_POINTING_MASTER() TRANSACTION_HANDLER_MASTER(pointing)
+# define TRANSACTIONS_POINTING_SLAVE() TRANSACTION_HANDLER_SLAVE(pointing)
+# define TRANSACTIONS_POINTING_REGISTRATIONS [GET_POINTING_CHECKSUM] = trans_target2initiator_initializer(pointing.checksum), [GET_POINTING_DATA] = trans_target2initiator_initializer(pointing.report), [PUT_POINTING_CPI] = trans_initiator2target_initializer(pointing.cpi),
+
+#else // defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
+
+# define TRANSACTIONS_POINTING_MASTER()
+# define TRANSACTIONS_POINTING_SLAVE()
+# define TRANSACTIONS_POINTING_REGISTRATIONS
+
+#endif // defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
////////////////////////////////////////////////////
-uint8_t dummy;
split_transaction_desc_t split_transaction_table[NUM_TOTAL_TRANSACTIONS] = {
// Set defaults
- [0 ...(NUM_TOTAL_TRANSACTIONS - 1)] = {NULL, 0, 0, 0, 0, 0},
+ [0 ...(NUM_TOTAL_TRANSACTIONS - 1)] = {0, 0, 0, 0, 0},
#ifdef USE_I2C
[I2C_EXECUTE_CALLBACK] = trans_initiator2target_initializer(transaction_id),
-#endif // USE_I2C
+#endif // USE_I2C
// clang-format off
TRANSACTIONS_SLAVE_MATRIX_REGISTRATIONS
@@ -604,6 +689,7 @@ split_transaction_desc_t split_transaction_table[NUM_TOTAL_TRANSACTIONS] = {
TRANSACTIONS_WPM_REGISTRATIONS
TRANSACTIONS_OLED_REGISTRATIONS
TRANSACTIONS_ST7565_REGISTRATIONS
+ TRANSACTIONS_POINTING_REGISTRATIONS
// clang-format on
#if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
@@ -611,7 +697,7 @@ split_transaction_desc_t split_transaction_table[NUM_TOTAL_TRANSACTIONS] = {
[PUT_RPC_REQ_DATA] = trans_initiator2target_initializer(rpc_m2s_buffer),
[EXECUTE_RPC] = trans_initiator2target_initializer_cb(rpc_info.transaction_id, slave_rpc_exec_callback),
[GET_RPC_RESP_DATA] = trans_target2initiator_initializer(rpc_s2m_buffer),
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
};
bool transactions_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
@@ -629,6 +715,7 @@ bool transactions_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix
TRANSACTIONS_WPM_MASTER();
TRANSACTIONS_OLED_MASTER();
TRANSACTIONS_ST7565_MASTER();
+ TRANSACTIONS_POINTING_MASTER();
return true;
}
@@ -647,6 +734,7 @@ void transactions_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[
TRANSACTIONS_WPM_SLAVE();
TRANSACTIONS_OLED_SLAVE();
TRANSACTIONS_ST7565_SLAVE();
+ TRANSACTIONS_POINTING_SLAVE();
}
#if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
@@ -720,4 +808,4 @@ void slave_rpc_exec_callback(uint8_t initiator2target_buffer_size, const void *i
}
}
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
diff --git a/quantum/split_common/transactions.h b/quantum/split_common/transactions.h
index 53610d6f8e..e38ec79ce9 100644
--- a/quantum/split_common/transactions.h
+++ b/quantum/split_common/transactions.h
@@ -27,7 +27,6 @@ typedef void (*slave_callback_t)(uint8_t initiator2target_buffer_size, const voi
// Split transaction Descriptor
typedef struct _split_transaction_desc_t {
- uint8_t * status;
uint8_t initiator2target_buffer_size;
uint16_t initiator2target_offset;
uint8_t target2initiator_buffer_size;
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c
index bcc0261417..aade3c98d7 100644
--- a/quantum/split_common/transport.c
+++ b/quantum/split_common/transport.c
@@ -26,7 +26,7 @@
# ifndef SLAVE_I2C_TIMEOUT
# define SLAVE_I2C_TIMEOUT 100
-# endif // SLAVE_I2C_TIMEOUT
+# endif // SLAVE_I2C_TIMEOUT
# ifndef SLAVE_I2C_ADDRESS
# define SLAVE_I2C_ADDRESS 0x32
@@ -40,8 +40,12 @@ _Static_assert(sizeof(split_shared_memory_t) <= I2C_SLAVE_REG_COUNT, "split_shar
split_shared_memory_t *const split_shmem = (split_shared_memory_t *)i2c_slave_reg;
-void transport_master_init(void) { i2c_init(); }
-void transport_slave_init(void) { i2c_slave_init(SLAVE_I2C_ADDRESS); }
+void transport_master_init(void) {
+ i2c_init();
+}
+void transport_slave_init(void) {
+ i2c_slave_init(SLAVE_I2C_ADDRESS);
+}
i2c_status_t transport_trigger_callback(int8_t id) {
// If there's no callback, indicate that we were successful
@@ -82,15 +86,19 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf,
return true;
}
-#else // USE_I2C
+#else // USE_I2C
# include "serial.h"
static split_shared_memory_t shared_memory;
split_shared_memory_t *const split_shmem = &shared_memory;
-void transport_master_init(void) { soft_serial_initiator_init(); }
-void transport_slave_init(void) { soft_serial_target_init(); }
+void transport_master_init(void) {
+ soft_serial_initiator_init();
+}
+void transport_slave_init(void) {
+ soft_serial_target_init();
+}
bool transport_execute_transaction(int8_t id, const void *initiator2target_buf, uint16_t initiator2target_length, void *target2initiator_buf, uint16_t target2initiator_length) {
split_transaction_desc_t *trans = &split_transaction_table[id];
@@ -99,7 +107,7 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf,
memcpy(split_trans_initiator2target_buffer(trans), initiator2target_buf, len);
}
- if (soft_serial_transaction(id) != TRANSACTION_END) {
+ if (!soft_serial_transaction(id)) {
return false;
}
@@ -111,8 +119,12 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf,
return true;
}
-#endif // USE_I2C
+#endif // USE_I2C
-bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { return transactions_master(master_matrix, slave_matrix); }
+bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+ return transactions_master(master_matrix, slave_matrix);
+}
-void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { transactions_slave(master_matrix, slave_matrix); }
+void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+ transactions_slave(master_matrix, slave_matrix);
+}
diff --git a/quantum/split_common/transport.h b/quantum/split_common/transport.h
index 1d4f6ed0cd..26bd136728 100644
--- a/quantum/split_common/transport.h
+++ b/quantum/split_common/transport.h
@@ -25,11 +25,11 @@
#ifndef RPC_M2S_BUFFER_SIZE
# define RPC_M2S_BUFFER_SIZE 32
-#endif // RPC_M2S_BUFFER_SIZE
+#endif // RPC_M2S_BUFFER_SIZE
#ifndef RPC_S2M_BUFFER_SIZE
# define RPC_S2M_BUFFER_SIZE 32
-#endif // RPC_S2M_BUFFER_SIZE
+#endif // RPC_S2M_BUFFER_SIZE
void transport_master_init(void);
void transport_slave_init(void);
@@ -43,15 +43,15 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf,
#ifdef ENCODER_ENABLE
# include "encoder.h"
# define NUMBER_OF_ENCODERS (sizeof((pin_t[])ENCODERS_PAD_A) / sizeof(pin_t))
-#endif // ENCODER_ENABLE
+#endif // ENCODER_ENABLE
#ifdef BACKLIGHT_ENABLE
# include "backlight.h"
-#endif // BACKLIGHT_ENABLE
+#endif // BACKLIGHT_ENABLE
#ifdef RGBLIGHT_ENABLE
# include "rgblight.h"
-#endif // RGBLIGHT_ENABLE
+#endif // RGBLIGHT_ENABLE
typedef struct _split_slave_matrix_sync_t {
uint8_t checksum;
@@ -62,21 +62,21 @@ typedef struct _split_slave_matrix_sync_t {
typedef struct _split_master_matrix_sync_t {
matrix_row_t matrix[(MATRIX_ROWS) / 2];
} split_master_matrix_sync_t;
-#endif // SPLIT_TRANSPORT_MIRROR
+#endif // SPLIT_TRANSPORT_MIRROR
#ifdef ENCODER_ENABLE
typedef struct _split_slave_encoder_sync_t {
uint8_t checksum;
uint8_t state[NUMBER_OF_ENCODERS];
} split_slave_encoder_sync_t;
-#endif // ENCODER_ENABLE
+#endif // ENCODER_ENABLE
#if !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
typedef struct _split_layers_sync_t {
layer_state_t layer_state;
layer_state_t default_layer_state;
} split_layers_sync_t;
-#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
+#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
# include "led_matrix.h"
@@ -85,7 +85,7 @@ typedef struct _led_matrix_sync_t {
led_eeconfig_t led_matrix;
bool led_suspend_state;
} led_matrix_sync_t;
-#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
# include "rgb_matrix.h"
@@ -94,7 +94,7 @@ typedef struct _rgb_matrix_sync_t {
rgb_config_t rgb_matrix;
bool rgb_suspend_state;
} rgb_matrix_sync_t;
-#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
#ifdef SPLIT_MODS_ENABLE
typedef struct _split_mods_sync_t {
@@ -102,9 +102,18 @@ typedef struct _split_mods_sync_t {
uint8_t weak_mods;
# ifndef NO_ACTION_ONESHOT
uint8_t oneshot_mods;
-# endif // NO_ACTION_ONESHOT
+# endif // NO_ACTION_ONESHOT
} split_mods_sync_t;
-#endif // SPLIT_MODS_ENABLE
+#endif // SPLIT_MODS_ENABLE
+
+#if defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
+# include "pointing_device.h"
+typedef struct _split_slave_pointing_sync_t {
+ uint8_t checksum;
+ report_mouse_t report;
+ uint16_t cpi;
+} split_slave_pointing_sync_t;
+#endif // defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
#if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
typedef struct _rpc_sync_info_t {
@@ -112,72 +121,76 @@ typedef struct _rpc_sync_info_t {
uint8_t m2s_length;
uint8_t s2m_length;
} rpc_sync_info_t;
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
typedef struct _split_shared_memory_t {
#ifdef USE_I2C
int8_t transaction_id;
-#endif // USE_I2C
+#endif // USE_I2C
split_slave_matrix_sync_t smatrix;
#ifdef SPLIT_TRANSPORT_MIRROR
split_master_matrix_sync_t mmatrix;
-#endif // SPLIT_TRANSPORT_MIRROR
+#endif // SPLIT_TRANSPORT_MIRROR
#ifdef ENCODER_ENABLE
split_slave_encoder_sync_t encoders;
-#endif // ENCODER_ENABLE
+#endif // ENCODER_ENABLE
#ifndef DISABLE_SYNC_TIMER
uint32_t sync_timer;
-#endif // DISABLE_SYNC_TIMER
+#endif // DISABLE_SYNC_TIMER
#if !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
split_layers_sync_t layers;
-#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
+#endif // !defined(NO_ACTION_LAYER) && defined(SPLIT_LAYER_STATE_ENABLE)
#ifdef SPLIT_LED_STATE_ENABLE
uint8_t led_state;
-#endif // SPLIT_LED_STATE_ENABLE
+#endif // SPLIT_LED_STATE_ENABLE
#ifdef SPLIT_MODS_ENABLE
split_mods_sync_t mods;
-#endif // SPLIT_MODS_ENABLE
+#endif // SPLIT_MODS_ENABLE
#ifdef BACKLIGHT_ENABLE
uint8_t backlight_level;
-#endif // BACKLIGHT_ENABLE
+#endif // BACKLIGHT_ENABLE
#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
rgblight_syncinfo_t rgblight_sync;
-#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
led_matrix_sync_t led_matrix_sync;
-#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#endif // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_matrix_sync_t rgb_matrix_sync;
-#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#endif // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
#if defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
uint8_t current_wpm;
-#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
+#endif // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE)
#if defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
uint8_t current_oled_state;
-#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
+#endif // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE)
#if defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE)
uint8_t current_st7565_state;
-#endif // ST7565_ENABLE(OLED_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+#endif // ST7565_ENABLE(OLED_ENABLE) && defined(SPLIT_ST7565_ENABLE)
+
+#if defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
+ split_slave_pointing_sync_t pointing;
+#endif // defined(POINTING_DEVICE_ENABLE) && defined(SPLIT_POINTING_ENABLE)
#if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
rpc_sync_info_t rpc_info;
uint8_t rpc_m2s_buffer[RPC_M2S_BUFFER_SIZE];
uint8_t rpc_s2m_buffer[RPC_S2M_BUFFER_SIZE];
-#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
+#endif // defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER)
} split_shared_memory_t;
extern split_shared_memory_t *const split_shmem;
diff --git a/quantum/sync_timer.c b/quantum/sync_timer.c
index de24b463b6..217891233f 100644
--- a/quantum/sync_timer.c
+++ b/quantum/sync_timer.c
@@ -29,7 +29,9 @@ SOFTWARE.
#if defined(SPLIT_KEYBOARD) && !defined(DISABLE_SYNC_TIMER)
volatile int32_t sync_timer_ms;
-void sync_timer_init(void) { sync_timer_ms = 0; }
+void sync_timer_init(void) {
+ sync_timer_ms = 0;
+}
void sync_timer_update(uint32_t time) {
if (is_keyboard_master()) return;
diff --git a/quantum/velocikey.c b/quantum/velocikey.c
index 6b7f82d950..58e14215bb 100644
--- a/quantum/velocikey.c
+++ b/quantum/velocikey.c
@@ -13,7 +13,9 @@
#define TYPING_SPEED_MAX_VALUE 200
uint8_t typing_speed = 0;
-bool velocikey_enabled(void) { return eeprom_read_byte(EECONFIG_VELOCIKEY) == 1; }
+bool velocikey_enabled(void) {
+ return eeprom_read_byte(EECONFIG_VELOCIKEY) == 1;
+}
void velocikey_toggle(void) {
if (velocikey_enabled())
@@ -39,4 +41,6 @@ void velocikey_decelerate(void) {
}
}
-uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue) { return MAX(minValue, maxValue - (maxValue - minValue) * ((float)typing_speed / TYPING_SPEED_MAX_VALUE)); }
+uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue) {
+ return MAX(minValue, maxValue - (maxValue - minValue) * ((float)typing_speed / TYPING_SPEED_MAX_VALUE));
+}
diff --git a/quantum/via.c b/quantum/via.c
index 7c8aa753e7..05ab799cbb 100644
--- a/quantum/via.c
+++ b/quantum/via.c
@@ -45,7 +45,7 @@
#include "raw_hid.h"
#include "dynamic_keymap.h"
#include "eeprom.h"
-#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
+#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
#include "via_ensure_keycode.h"
// Forward declare some helpers.
@@ -62,7 +62,7 @@ void via_qmk_rgblight_get_value(uint8_t *data);
// Can be called in an overriding via_init_kb() to test if keyboard level code usage of
// EEPROM is invalid and use/save defaults.
bool via_eeprom_is_valid(void) {
- char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
uint8_t magic0 = ((p[2] & 0x0F) << 4) | (p[3] & 0x0F);
uint8_t magic1 = ((p[5] & 0x0F) << 4) | (p[6] & 0x0F);
uint8_t magic2 = ((p[8] & 0x0F) << 4) | (p[9] & 0x0F);
@@ -73,7 +73,7 @@ bool via_eeprom_is_valid(void) {
// Sets VIA/keyboard level usage of EEPROM to valid/invalid
// Keyboard level code (eg. via_init_kb()) should not call this
void via_eeprom_set_valid(bool valid) {
- char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
uint8_t magic0 = ((p[2] & 0x0F) << 4) | (p[3] & 0x0F);
uint8_t magic1 = ((p[5] & 0x0F) << 4) | (p[6] & 0x0F);
uint8_t magic2 = ((p[8] & 0x0F) << 4) | (p[9] & 0x0F);
@@ -96,6 +96,7 @@ void via_init(void) {
// Let keyboard level test EEPROM valid state,
// but not set it valid, it is done here.
via_init_kb();
+ via_set_layout_options_kb(via_get_layout_options());
// If the EEPROM has the magic, the data is good.
// OK to load from EEPROM.
@@ -131,7 +132,10 @@ uint32_t via_get_layout_options(void) {
return value;
}
+__attribute__((weak)) void via_set_layout_options_kb(uint32_t value) {}
+
void via_set_layout_options(uint32_t value) {
+ via_set_layout_options_kb(value);
// Start at the least significant byte
void *target = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR + VIA_EEPROM_LAYOUT_OPTIONS_SIZE - 1);
for (uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++) {
@@ -343,13 +347,13 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
}
case id_dynamic_keymap_macro_get_buffer: {
uint16_t offset = (command_data[0] << 8) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
+ uint16_t size = command_data[2]; // size <= 28
dynamic_keymap_macro_get_buffer(offset, size, &command_data[3]);
break;
}
case id_dynamic_keymap_macro_set_buffer: {
uint16_t offset = (command_data[0] << 8) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
+ uint16_t size = command_data[2]; // size <= 28
dynamic_keymap_macro_set_buffer(offset, size, &command_data[3]);
break;
}
@@ -363,13 +367,13 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
}
case id_dynamic_keymap_get_buffer: {
uint16_t offset = (command_data[0] << 8) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
+ uint16_t size = command_data[2]; // size <= 28
dynamic_keymap_get_buffer(offset, size, &command_data[3]);
break;
}
case id_dynamic_keymap_set_buffer: {
uint16_t offset = (command_data[0] << 8) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
+ uint16_t size = command_data[2]; // size <= 28
dynamic_keymap_set_buffer(offset, size, &command_data[3]);
break;
}
@@ -434,7 +438,7 @@ void via_qmk_backlight_set_value(uint8_t *data) {
}
}
-#endif // #if defined(VIA_QMK_BACKLIGHT_ENABLE)
+#endif // #if defined(VIA_QMK_BACKLIGHT_ENABLE)
#if defined(VIA_QMK_RGBLIGHT_ENABLE)
@@ -490,4 +494,4 @@ void via_qmk_rgblight_set_value(uint8_t *data) {
}
}
-#endif // #if defined(VIA_QMK_RGBLIGHT_ENABLE)
+#endif // #if defined(VIA_QMK_RGBLIGHT_ENABLE)
diff --git a/quantum/via.h b/quantum/via.h
index 3db318a454..ac29a58902 100644
--- a/quantum/via.h
+++ b/quantum/via.h
@@ -16,7 +16,7 @@
#pragma once
-#include "eeconfig.h" // for EECONFIG_SIZE
+#include "eeconfig.h" // for EECONFIG_SIZE
// Keyboard level code can change where VIA stores the magic.
// The magic is the build date YYMMDD encoded as BCD in 3 bytes,
@@ -59,7 +59,7 @@
#define VIA_PROTOCOL_VERSION 0x0009
enum via_command_id {
- id_get_protocol_version = 0x01, // always 0x01
+ id_get_protocol_version = 0x01, // always 0x01
id_get_keyboard_value = 0x02,
id_set_keyboard_value = 0x03,
id_dynamic_keymap_get_keycode = 0x04,
@@ -82,7 +82,7 @@ enum via_command_id {
};
enum via_keyboard_value_id {
- id_uptime = 0x01, //
+ id_uptime = 0x01, //
id_layout_options = 0x02,
id_switch_matrix_state = 0x03
};
@@ -159,6 +159,7 @@ void via_init(void);
// Used by VIA to store and retrieve the layout options.
uint32_t via_get_layout_options(void);
void via_set_layout_options(uint32_t value);
+void via_set_layout_options_kb(uint32_t value);
// Called by QMK core to process VIA-specific keycodes.
bool process_record_via(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/via_ensure_keycode.h b/quantum/via_ensure_keycode.h
index 1aba0cdd2a..75f816b560 100644
--- a/quantum/via_ensure_keycode.h
+++ b/quantum/via_ensure_keycode.h
@@ -244,12 +244,12 @@ _Static_assert(KC_LT == 0x0236, "");
_Static_assert(KC_GT == 0x0237, "");
_Static_assert(KC_QUES == 0x0238, "");
-_Static_assert(RESET == 0x5C00, "");
-_Static_assert(DEBUG == 0x5C01, "");
+_Static_assert(QK_BOOTLOADER == 0x5C00, "");
+_Static_assert(QK_DEBUG_TOGGLE == 0x5C01, "");
_Static_assert(MAGIC_TOGGLE_NKRO == 0x5C14, "");
-_Static_assert(KC_GESC == 0x5C16, "");
+_Static_assert(QK_GRAVE_ESCAPE == 0x5C16, "");
_Static_assert(AU_ON == 0x5C1D, "");
_Static_assert(AU_OFF == 0x5C1E, "");
diff --git a/quantum/wpm.c b/quantum/wpm.c
index 925e2c416e..b2e6fe0430 100644
--- a/quantum/wpm.c
+++ b/quantum/wpm.c
@@ -22,41 +22,53 @@
// WPM Stuff
static uint8_t current_wpm = 0;
static uint32_t wpm_timer = 0;
-#ifndef WPM_UNFILTERED
-static uint32_t smoothing_timer = 0;
-#endif
/* The WPM calculation works by specifying a certain number of 'periods' inside
* a ring buffer, and we count the number of keypresses which occur in each of
* those periods. Then to calculate WPM, we add up all of the keypresses in
* the whole ring buffer, divide by the number of keypresses in a 'word', and
- * then adjust for how much time is captured by our ring buffer. Right now
- * the ring buffer is hardcoded below to be six half-second periods, accounting
- * for a total WPM sampling period of up to three seconds of typing.
+ * then adjust for how much time is captured by our ring buffer. The size
+ * of the ring buffer can be configured using the keymap configuration
+ * value `WPM_SAMPLE_PERIODS`.
*
- * Whenever our WPM drops to absolute zero due to no typing occurring within
- * any contiguous three seconds, we reset and start measuring fresh,
- * which lets our WPM immediately reach the correct value even before a full
- * three second sampling buffer has been filled.
*/
#define MAX_PERIODS (WPM_SAMPLE_PERIODS)
#define PERIOD_DURATION (1000 * WPM_SAMPLE_SECONDS / MAX_PERIODS)
-#define LATENCY (100)
-static int8_t period_presses[MAX_PERIODS] = {0};
+
+static int16_t period_presses[MAX_PERIODS] = {0};
static uint8_t current_period = 0;
static uint8_t periods = 1;
#if !defined(WPM_UNFILTERED)
-static uint8_t prev_wpm = 0;
-static uint8_t next_wpm = 0;
+/* LATENCY is used as part of filtering, and controls how quickly the reported
+ * WPM trails behind our actual instantaneous measured WPM value, and is
+ * defined in milliseconds. So for LATENCY == 100, the displayed WPM is
+ * smoothed out over periods of 0.1 seconds. This results in a nice,
+ * smoothly-moving reported WPM value which nevertheless is never more than
+ * 0.1 seconds behind the typist's actual current WPM.
+ *
+ * LATENCY is not used if WPM_UNFILTERED is defined.
+ */
+# define LATENCY (100)
+static uint32_t smoothing_timer = 0;
+static uint8_t prev_wpm = 0;
+static uint8_t next_wpm = 0;
#endif
-void set_current_wpm(uint8_t new_wpm) { current_wpm = new_wpm; }
-uint8_t get_current_wpm(void) { return current_wpm; }
+void set_current_wpm(uint8_t new_wpm) {
+ current_wpm = new_wpm;
+}
+uint8_t get_current_wpm(void) {
+ return current_wpm;
+}
-bool wpm_keycode(uint16_t keycode) { return wpm_keycode_kb(keycode); }
+bool wpm_keycode(uint16_t keycode) {
+ return wpm_keycode_kb(keycode);
+}
-__attribute__((weak)) bool wpm_keycode_kb(uint16_t keycode) { return wpm_keycode_user(keycode); }
+__attribute__((weak)) bool wpm_keycode_kb(uint16_t keycode) {
+ return wpm_keycode_user(keycode);
+}
__attribute__((weak)) bool wpm_keycode_user(uint16_t keycode) {
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
@@ -71,7 +83,7 @@ __attribute__((weak)) bool wpm_keycode_user(uint16_t keycode) {
return false;
}
-#ifdef WPM_ALLOW_COUNT_REGRESSION
+#if defined(WPM_ALLOW_COUNT_REGRESSION)
__attribute__((weak)) uint8_t wpm_regress_count(uint16_t keycode) {
bool weak_modded = (keycode >= QK_LCTL && keycode < QK_LSFT) || (keycode >= QK_RCTL && keycode < QK_RSFT);
@@ -95,12 +107,12 @@ __attribute__((weak)) uint8_t wpm_regress_count(uint16_t keycode) {
// Outside 'raw' mode we smooth results over time.
void update_wpm(uint16_t keycode) {
- if (wpm_keycode(keycode)) {
+ if (wpm_keycode(keycode) && period_presses[current_period] < INT16_MAX) {
period_presses[current_period]++;
}
-#ifdef WPM_ALLOW_COUNT_REGRESSION
+#if defined(WPM_ALLOW_COUNT_REGRESSION)
uint8_t regress = wpm_regress_count(keycode);
- if (regress) {
+ if (regress && period_presses[current_period] > INT16_MIN) {
period_presses[current_period]--;
}
#endif
@@ -116,32 +128,41 @@ void decay_wpm(void) {
}
int32_t elapsed = timer_elapsed32(wpm_timer);
uint32_t duration = (((periods)*PERIOD_DURATION) + elapsed);
- uint32_t wpm_now = (60000 * presses) / (duration * WPM_ESTIMATED_WORD_SIZE);
- wpm_now = (wpm_now > 240) ? 240 : wpm_now;
+ int32_t wpm_now = (60000 * presses) / (duration * WPM_ESTIMATED_WORD_SIZE);
+
+ if (wpm_now < 0) // set some reasonable WPM measurement limits
+ wpm_now = 0;
+ if (wpm_now > 240) wpm_now = 240;
if (elapsed > PERIOD_DURATION) {
current_period = (current_period + 1) % MAX_PERIODS;
period_presses[current_period] = 0;
periods = (periods < MAX_PERIODS - 1) ? periods + 1 : MAX_PERIODS - 1;
elapsed = 0;
- /* if (wpm_timer == 0) { */
- wpm_timer = timer_read32();
- /* } else { */
- /* wpm_timer += PERIOD_DURATION; */
- /* } */
+ wpm_timer = timer_read32();
}
- if (presses < 2) // don't guess high WPM based on a single keypress.
+ if (presses < 2) // don't guess high WPM based on a single keypress.
wpm_now = 0;
-#if defined WPM_LAUNCH_CONTROL
+#if defined(WPM_LAUNCH_CONTROL)
+ /*
+ * If the `WPM_LAUNCH_CONTROL` option is enabled, then whenever our WPM
+ * drops to absolute zero due to no typing occurring within our sample
+ * ring buffer, we reset and start measuring fresh, which lets our WPM
+ * immediately reach the correct value even before a full sampling buffer
+ * has been filled.
+ */
if (presses == 0) {
- current_period = 0;
- periods = 0;
- wpm_now = 0;
+ current_period = 0;
+ periods = 0;
+ wpm_now = 0;
+ period_presses[0] = 0;
}
-#endif // WPM_LAUNCH_CONTROL
+#endif // WPM_LAUNCH_CONTROL
-#ifndef WPM_UNFILTERED
+#if defined(WPM_UNFILTERED)
+ current_wpm = wpm_now;
+#else
int32_t latency = timer_elapsed32(smoothing_timer);
if (latency > LATENCY) {
smoothing_timer = timer_read32();
@@ -150,7 +171,5 @@ void decay_wpm(void) {
}
current_wpm = prev_wpm + (latency * ((int)next_wpm - (int)prev_wpm) / LATENCY);
-#else
- current_wpm = wpm_now;
#endif
}
diff --git a/quantum/wpm.h b/quantum/wpm.h
index c8e7d26684..305d75b450 100644
--- a/quantum/wpm.h
+++ b/quantum/wpm.h
@@ -26,7 +26,7 @@
# define WPM_SAMPLE_SECONDS 5
#endif
#ifndef WPM_SAMPLE_PERIODS
-# define WPM_SAMPLE_PERIODS 50
+# define WPM_SAMPLE_PERIODS 25
#endif
bool wpm_keycode(uint16_t keycode);
diff --git a/readme.md b/readme.md
index 5649ddfa09..63b483c744 100644
--- a/readme.md
+++ b/readme.md
@@ -1,3 +1,7 @@
+# This is the `develop` branch!
+
+See the [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) document 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)
diff --git a/testlist.mk b/testlist.mk
deleted file mode 100644
index 904485c15c..0000000000
--- a/testlist.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-TEST_LIST = $(sort $(patsubst %/test.mk,%, $(shell find $(ROOT_DIR)tests -type f -name test.mk)))
-FULL_TESTS := $(notdir $(TEST_LIST))
-
-include $(QUANTUM_PATH)/debounce/tests/testlist.mk
-include $(QUANTUM_PATH)/sequencer/tests/testlist.mk
-include $(PLATFORM_PATH)/test/testlist.mk
-
-define VALIDATE_TEST_LIST
- ifneq ($1,)
- ifeq ($$(findstring -,$1),-)
- $$(error Test names can't contain '-', but '$1' does)
- else
- $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2)))
- endif
- endif
-endef
-
-
-$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
diff --git a/tests/auto_shift/test_auto_shift.cpp b/tests/auto_shift/test_auto_shift.cpp
index 9c5ed9a832..a19b5dfa82 100644
--- a/tests/auto_shift/test_auto_shift.cpp
+++ b/tests/auto_shift/test_auto_shift.cpp
@@ -42,7 +42,6 @@ TEST_F(AutoShift, key_release_before_timeout) {
/* Release regular key */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
regular_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -65,8 +64,6 @@ TEST_F(AutoShift, key_release_after_timeout) {
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
regular_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
diff --git a/tests/basic/test_action_layer.cpp b/tests/basic/test_action_layer.cpp
index 1b12d13642..fe5c729f7c 100644
--- a/tests/basic/test_action_layer.cpp
+++ b/tests/basic/test_action_layer.cpp
@@ -131,14 +131,12 @@ TEST_F(ActionLayer, MomentaryLayerDoesNothing) {
set_keymap({layer_key});
/* Press and release MO, nothing should happen. */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.press();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -153,8 +151,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});
/* Press MO. */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
@@ -175,8 +172,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release MO */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
@@ -199,8 +195,7 @@ TEST_F(ActionLayer, ToggleLayerDoesNothing) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release TG. */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
@@ -223,8 +218,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) {
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
toggle_layer_1_on_layer_0.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
@@ -237,8 +231,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) {
EXPECT_TRUE(layer_state_is(0));
testing::Mock::VerifyAndClearExpectations(&driver);
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
toggle_layer_0_on_layer_1.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
@@ -254,14 +247,13 @@ TEST_F(ActionLayer, LayerTapToggleDoesNothing) {
set_keymap({layer_key});
/* Press and release TT. */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
@@ -279,7 +271,6 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});
/* Press TT. */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0);
layer_key.press();
run_one_scan_loop();
@@ -298,8 +289,7 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) {
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
@@ -317,8 +307,7 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});
/* Tap TT five times . */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(9);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.press();
run_one_scan_loop();
diff --git a/tests/basic/test_keypress.cpp b/tests/basic/test_keypress.cpp
index 1c175c9d56..044fc29378 100644
--- a/tests/basic/test_keypress.cpp
+++ b/tests/basic/test_keypress.cpp
@@ -85,7 +85,7 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {
TEST_F(KeyPress, LeftShiftIsReportedCorrectly) {
TestDriver driver;
auto key_a = KeymapKey(0, 0, 0, KC_A);
- auto key_lsft = KeymapKey(0, 3, 0, KC_LSFT);
+ auto key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT);
set_keymap({key_a, key_lsft});
@@ -110,8 +110,8 @@ TEST_F(KeyPress, LeftShiftIsReportedCorrectly) {
TEST_F(KeyPress, PressLeftShiftAndControl) {
TestDriver driver;
- auto key_lsft = KeymapKey(0, 3, 0, KC_LSFT);
- auto key_lctrl = KeymapKey(0, 5, 0, KC_LCTRL);
+ auto key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT);
+ auto key_lctrl = KeymapKey(0, 5, 0, KC_LEFT_CTRL);
set_keymap({key_lctrl, key_lsft});
@@ -138,8 +138,8 @@ TEST_F(KeyPress, PressLeftShiftAndControl) {
TEST_F(KeyPress, LeftAndRightShiftCanBePressedAtTheSameTime) {
TestDriver driver;
- auto key_lsft = KeymapKey(0, 3, 0, KC_LSFT);
- auto key_rsft = KeymapKey(0, 4, 0, KC_RSFT);
+ auto key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT);
+ auto key_rsft = KeymapKey(0, 4, 0, KC_RIGHT_SHIFT);
set_keymap({key_rsft, key_lsft});
@@ -175,12 +175,12 @@ TEST_F(KeyPress, RightShiftLeftControlAndCharWithTheSameKey) {
// The underlying cause is that we use only one bit to represent the right hand
// modifiers.
combo_key.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL)));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL, KC_O)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL, KC_O)));
keyboard_task();
combo_key.release();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
keyboard_task();
}
@@ -189,18 +189,18 @@ TEST_F(KeyPress, PressPlusEqualReleaseBeforePress) {
TestDriver driver;
InSequence s;
auto key_plus = KeymapKey(0, 1, 1, KC_PLUS);
- auto key_eql = KeymapKey(0, 0, 1, KC_EQL);
+ auto key_eql = KeymapKey(0, 0, 1, KC_EQUAL);
set_keymap({key_plus, key_eql});
key_plus.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
key_plus.release();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -220,13 +220,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) {
TestDriver driver;
InSequence s;
auto key_plus = KeymapKey(0, 1, 1, KC_PLUS);
- auto key_eql = KeymapKey(0, 0, 1, KC_EQL);
+ auto key_eql = KeymapKey(0, 0, 1, KC_EQUAL);
set_keymap({key_plus, key_eql});
key_plus.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -237,14 +237,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) {
testing::Mock::VerifyAndClearExpectations(&driver);
key_plus.release();
- // BUG: Should really still return KC_EQL, but this is fine too
- // It's also called twice for some reason
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2);
+ // BUG: Should really still return KC_EQUAL, but this is fine too
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
key_eql.release();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
}
@@ -253,12 +252,12 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) {
TestDriver driver;
InSequence s;
auto key_plus = KeymapKey(0, 1, 1, KC_PLUS);
- auto key_eql = KeymapKey(0, 0, 1, KC_EQL);
+ auto key_eql = KeymapKey(0, 0, 1, KC_EQUAL);
set_keymap({key_plus, key_eql});
key_eql.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL)));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -268,13 +267,13 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) {
testing::Mock::VerifyAndClearExpectations(&driver);
key_plus.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
key_plus.release();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -284,12 +283,12 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) {
TestDriver driver;
InSequence s;
auto key_plus = KeymapKey(0, 1, 1, KC_PLUS);
- auto key_eql = KeymapKey(0, 0, 1, KC_EQL);
+ auto key_eql = KeymapKey(0, 0, 1, KC_EQUAL);
set_keymap({key_plus, key_eql});
key_eql.press();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL)));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL)));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
@@ -309,9 +308,7 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) {
testing::Mock::VerifyAndClearExpectations(&driver);
key_plus.release();
- // This report is not needed
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
-} \ No newline at end of file
+}
diff --git a/tests/basic/test_macro.cpp b/tests/basic/test_macro.cpp
deleted file mode 100644
index ae2f3b32e3..0000000000
--- a/tests/basic/test_macro.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright 2017 Fred Sundvik
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "test_common.hpp"
-#include "time.h"
-
-using testing::InSequence;
-using testing::InvokeWithoutArgs;
-
-class Macro : public TestFixture {};
-
-#define AT_TIME(t) WillOnce(InvokeWithoutArgs([current_time]() { EXPECT_EQ(timer_elapsed32(current_time), t); }))
-
-extern "C" const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- if (record->event.pressed) {
- switch (id) {
- case 0:
- return MACRO(D(LSFT), T(H), U(LSFT), T(E), T(L), T(L), T(O), T(SPACE), W(100), D(LSFT), T(W), U(LSFT), I(10), T(O), T(R), T(L), T(D), D(LSFT), T(1), U(LSFT), END);
- }
- }
- return MACRO_NONE;
-};
-
-TEST_F(Macro, PlayASimpleMacro) {
- TestDriver driver;
- InSequence s;
- auto key_macro = KeymapKey(0, 8, 0, M(0));
-
- set_keymap({key_macro});
-
- key_macro.press();
-
- uint32_t current_time = timer_read32();
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_H))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_E))).AT_TIME(0);
- // The macro system could actually skip these empty keyboard reports
- // it should be enough to just send a report with the next key down
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_O))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_SPACE))).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(0);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(100);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_W))).AT_TIME(100);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(100);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(100);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_O)))
- // BUG: The timer should not really have advanced 10 ms here
- // See issue #1477
- .AT_TIME(110);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
- // BUG: The timer should not advance on both keydown and key-up
- // See issue #1477
- .AT_TIME(120);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_R))).AT_TIME(130);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(140);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L))).AT_TIME(150);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(160);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_D))).AT_TIME(170);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(180);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(190);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_1))).AT_TIME(200);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))).AT_TIME(210);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).AT_TIME(220);
- run_one_scan_loop();
-
- key_macro.release();
-}
diff --git a/tests/basic/test_one_shot_keys.cpp b/tests/basic/test_one_shot_keys.cpp
index 98178912e4..43fc3e1ba3 100644
--- a/tests/basic/test_one_shot_keys.cpp
+++ b/tests/basic/test_one_shot_keys.cpp
@@ -175,22 +175,20 @@ TEST_F(OneShot, OSLWithAdditionalKeypress) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release OSL key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
osl_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
/* Press regular key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(2);
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(1);
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
regular_key.press();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release regular key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
regular_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
diff --git a/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp b/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp
index ab9dd1518b..00c2b33cb7 100644
--- a/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp
+++ b/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp
@@ -117,7 +117,6 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release regular key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(layer_key.report_code)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
regular_key.release();
@@ -125,7 +124,7 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release layer-tap-hold key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_tap_hold_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
diff --git a/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp b/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp
index 67f394653f..67706f80dc 100644
--- a/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp
+++ b/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp
@@ -119,7 +119,6 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release regular key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
regular_key.release();
@@ -127,7 +126,7 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key
testing::Mock::VerifyAndClearExpectations(&driver);
/* Release layer-tap-hold key */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_tap_hold_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp b/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp
index 02416eed73..54e7daa22c 100644
--- a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp
+++ b/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp
@@ -31,9 +31,8 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});
/* Tap TT five times . */
- /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */
/* TODO: Tapping Force Hold breaks TT */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(10);
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
layer_key.press();
run_one_scan_loop();
diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp b/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp
index cb68429617..3ae7c4ccfd 100644
--- a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp
+++ b/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp
@@ -60,7 +60,6 @@ TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Idle for tapping term of mod tap hold key. */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
@@ -101,7 +100,6 @@ TEST_F(TappingForceHold, tap_mod_tap_key_while_mod_tap_key_is_held) {
testing::Mock::VerifyAndClearExpectations(&driver);
/* Idle for tapping term of first mod tap hold key. */
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
diff --git a/tests/test_common/keyboard_report_util.cpp b/tests/test_common/keyboard_report_util.cpp
index e148c76beb..7908e64f7f 100644
--- a/tests/test_common/keyboard_report_util.cpp
+++ b/tests/test_common/keyboard_report_util.cpp
@@ -36,7 +36,7 @@ std::vector<uint8_t> get_keys(const report_keyboard_t& report) {
std::sort(result.begin(), result.end());
return result;
}
-} // namespace
+} // namespace
bool operator==(const report_keyboard_t& lhs, const report_keyboard_t& rhs) {
auto lhskeys = get_keys(lhs);
@@ -72,8 +72,14 @@ KeyboardReportMatcher::KeyboardReportMatcher(const std::vector<uint8_t>& keys) {
}
}
-bool KeyboardReportMatcher::MatchAndExplain(report_keyboard_t& report, MatchResultListener* listener) const { return m_report == report; }
+bool KeyboardReportMatcher::MatchAndExplain(report_keyboard_t& report, MatchResultListener* listener) const {
+ return m_report == report;
+}
-void KeyboardReportMatcher::DescribeTo(::std::ostream* os) const { *os << "is equal to " << m_report; }
+void KeyboardReportMatcher::DescribeTo(::std::ostream* os) const {
+ *os << "is equal to " << m_report;
+}
-void KeyboardReportMatcher::DescribeNegationTo(::std::ostream* os) const { *os << "is not equal to " << m_report; }
+void KeyboardReportMatcher::DescribeNegationTo(::std::ostream* os) const {
+ *os << "is not equal to " << m_report;
+}
diff --git a/tests/test_common/matrix.c b/tests/test_common/matrix.c
index 9a92a801c7..7b24d560e3 100644
--- a/tests/test_common/matrix.c
+++ b/tests/test_common/matrix.c
@@ -30,7 +30,9 @@ uint8_t matrix_scan(void) {
return 1;
}
-matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
+matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
void matrix_print(void) {}
@@ -38,10 +40,16 @@ void matrix_init_kb(void) {}
void matrix_scan_kb(void) {}
-void press_key(uint8_t col, uint8_t row) { matrix[row] |= 1 << col; }
+void press_key(uint8_t col, uint8_t row) {
+ matrix[row] |= 1 << col;
+}
-void release_key(uint8_t col, uint8_t row) { matrix[row] &= ~(1 << col); }
+void release_key(uint8_t col, uint8_t row) {
+ matrix[row] &= ~(1 << col);
+}
-void clear_all_keys(void) { memset(matrix, 0, sizeof(matrix)); }
+void clear_all_keys(void) {
+ memset(matrix, 0, sizeof(matrix));
+}
void led_set(uint8_t usb_led) {}
diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp
index 2fa2b6a2e7..68f1dfd17d 100644
--- a/tests/test_common/test_driver.cpp
+++ b/tests/test_common/test_driver.cpp
@@ -23,17 +23,27 @@ TestDriver::TestDriver() : m_driver{&TestDriver::keyboard_leds, &TestDriver::sen
m_this = this;
}
-TestDriver::~TestDriver() { m_this = nullptr; }
+TestDriver::~TestDriver() {
+ m_this = nullptr;
+}
-uint8_t TestDriver::keyboard_leds(void) { return m_this->m_leds; }
+uint8_t TestDriver::keyboard_leds(void) {
+ return m_this->m_leds;
+}
void TestDriver::send_keyboard(report_keyboard_t* report) {
test_logger.trace() << *report;
m_this->send_keyboard_mock(*report);
}
-void TestDriver::send_mouse(report_mouse_t* report) { m_this->send_mouse_mock(*report); }
+void TestDriver::send_mouse(report_mouse_t* report) {
+ m_this->send_mouse_mock(*report);
+}
-void TestDriver::send_system(uint16_t data) { m_this->send_system_mock(data); }
+void TestDriver::send_system(uint16_t data) {
+ m_this->send_system_mock(data);
+}
-void TestDriver::send_consumer(uint16_t data) { m_this->send_consumer(data); }
+void TestDriver::send_consumer(uint16_t data) {
+ m_this->send_consumer(data);
+}
diff --git a/tests/test_common/test_fixture.cpp b/tests/test_common/test_fixture.cpp
index 0601b17191..c98a679554 100644
--- a/tests/test_common/test_fixture.cpp
+++ b/tests/test_common/test_fixture.cpp
@@ -48,7 +48,6 @@ void TestFixture::SetUpTestCase() {
eeconfig_update_debug(debug_config.raw);
TestDriver driver;
- EXPECT_CALL(driver, send_keyboard_mock(_));
keyboard_init();
test_logger.info() << "TestFixture setup-up end." << std::endl;
@@ -56,14 +55,14 @@ void TestFixture::SetUpTestCase() {
void TestFixture::TearDownTestCase() {}
-TestFixture::TestFixture() { m_this = this; }
+TestFixture::TestFixture() {
+ m_this = this;
+}
TestFixture::~TestFixture() {
test_logger.info() << "TestFixture clean-up start." << std::endl;
TestDriver driver;
- EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2);
-
/* Reset keyboard state. */
clear_all_keys();
diff --git a/tests/test_common/test_logger.cpp b/tests/test_common/test_logger.cpp
index 959fdde5ec..efc7719d13 100644
--- a/tests/test_common/test_logger.cpp
+++ b/tests/test_common/test_logger.cpp
@@ -34,6 +34,10 @@ TestLogger& TestLogger::error() {
return *this;
}
-void TestLogger::reset() { this->m_log.str(""); };
+void TestLogger::reset() {
+ this->m_log.str("");
+};
-void TestLogger::print_log() { std::cerr << this->m_log.str(); }
+void TestLogger::print_log() {
+ std::cerr << this->m_log.str();
+}
diff --git a/tmk_core/protocol.mk b/tmk_core/protocol.mk
index 31a6de76f1..19fd7d2425 100644
--- a/tmk_core/protocol.mk
+++ b/tmk_core/protocol.mk
@@ -28,6 +28,11 @@ ifeq ($(strip $(EXTRAKEY_ENABLE)), yes)
SHARED_EP_ENABLE = yes
endif
+ifeq ($(strip $(PROGRAMMABLE_BUTTON_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DPROGRAMMABLE_BUTTON_ENABLE
+ SHARED_EP_ENABLE = yes
+endif
+
ifeq ($(strip $(RAW_ENABLE)), yes)
TMK_COMMON_DEFS += -DRAW_ENABLE
endif
diff --git a/tmk_core/protocol/arm_atsam/adc.c b/tmk_core/protocol/arm_atsam/adc.c
index 1ef1b11d57..3afcbddf10 100644
--- a/tmk_core/protocol/arm_atsam/adc.c
+++ b/tmk_core/protocol/arm_atsam/adc.c
@@ -27,10 +27,10 @@ uint16_t v_con_2_boot;
void ADC0_clock_init(void) {
DBGC(DC_ADC0_CLOCK_INIT_BEGIN);
- MCLK->APBDMASK.bit.ADC0_ = 1; // ADC0 Clock Enable
+ MCLK->APBDMASK.bit.ADC0_ = 1; // ADC0 Clock Enable
- GCLK->PCHCTRL[ADC0_GCLK_ID].bit.GEN = GEN_OSC0; // Select generator clock
- GCLK->PCHCTRL[ADC0_GCLK_ID].bit.CHEN = 1; // Enable peripheral clock
+ GCLK->PCHCTRL[ADC0_GCLK_ID].bit.GEN = GEN_OSC0; // Select generator clock
+ GCLK->PCHCTRL[ADC0_GCLK_ID].bit.CHEN = 1; // Enable peripheral clock
DBGC(DC_ADC0_CLOCK_INIT_COMPLETE);
}
@@ -39,15 +39,15 @@ void ADC0_init(void) {
DBGC(DC_ADC0_INIT_BEGIN);
// MCU
- PORT->Group[1].DIRCLR.reg = 1 << 0; // PB00 as input 5V
- PORT->Group[1].DIRCLR.reg = 1 << 1; // PB01 as input CON2
- PORT->Group[1].DIRCLR.reg = 1 << 2; // PB02 as input CON1
- PORT->Group[1].PMUX[0].bit.PMUXE = 1; // PB00 mux select B ADC 5V
- PORT->Group[1].PMUX[0].bit.PMUXO = 1; // PB01 mux select B ADC CON2
- PORT->Group[1].PMUX[1].bit.PMUXE = 1; // PB02 mux select B ADC CON1
- PORT->Group[1].PINCFG[0].bit.PMUXEN = 1; // PB01 mux ADC Enable 5V
- PORT->Group[1].PINCFG[1].bit.PMUXEN = 1; // PB01 mux ADC Enable CON2
- PORT->Group[1].PINCFG[2].bit.PMUXEN = 1; // PB02 mux ADC Enable CON1
+ PORT->Group[1].DIRCLR.reg = 1 << 0; // PB00 as input 5V
+ PORT->Group[1].DIRCLR.reg = 1 << 1; // PB01 as input CON2
+ PORT->Group[1].DIRCLR.reg = 1 << 2; // PB02 as input CON1
+ PORT->Group[1].PMUX[0].bit.PMUXE = 1; // PB00 mux select B ADC 5V
+ PORT->Group[1].PMUX[0].bit.PMUXO = 1; // PB01 mux select B ADC CON2
+ PORT->Group[1].PMUX[1].bit.PMUXE = 1; // PB02 mux select B ADC CON1
+ PORT->Group[1].PINCFG[0].bit.PMUXEN = 1; // PB01 mux ADC Enable 5V
+ PORT->Group[1].PINCFG[1].bit.PMUXEN = 1; // PB01 mux ADC Enable CON2
+ PORT->Group[1].PINCFG[2].bit.PMUXEN = 1; // PB02 mux ADC Enable CON1
// ADC
ADC0->CTRLA.bit.SWRST = 1;
@@ -81,7 +81,7 @@ void ADC0_init(void) {
}
// Settling
- ADC0->SAMPCTRL.bit.SAMPLEN = 45; // Sampling Time Length: 1-63, 1 ADC CLK per
+ ADC0->SAMPCTRL.bit.SAMPLEN = 45; // Sampling Time Length: 1-63, 1 ADC CLK per
while (ADC0->SYNCBUSY.bit.SAMPCTRL) {
DBGC(DC_ADC0_SAMPCTRL_SYNCING_1);
}
diff --git a/tmk_core/protocol/arm_atsam/adc.h b/tmk_core/protocol/arm_atsam/adc.h
index 9ab653e5a2..74fbb0e66f 100644
--- a/tmk_core/protocol/arm_atsam/adc.h
+++ b/tmk_core/protocol/arm_atsam/adc.h
@@ -34,4 +34,4 @@ extern uint16_t v_con_2_boot;
void ADC0_clock_init(void);
void ADC0_init(void);
-#endif //_ADC_H_
+#endif //_ADC_H_
diff --git a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
index e1749f872d..db9827f6a2 100644
--- a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
+++ b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define _ARM_ATSAM_PROTOCOL_H_
#include "samd51j18a.h"
-#include "md_bootloader.h"
#include "timer.h"
#include "d51_util.h"
@@ -43,6 +42,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "./usb/udc.h"
# include "./usb/udi_cdc.h"
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
-#endif //_ARM_ATSAM_PROTOCOL_H_
+#endif //_ARM_ATSAM_PROTOCOL_H_
diff --git a/tmk_core/protocol/arm_atsam/clks.c b/tmk_core/protocol/arm_atsam/clks.c
index 84ed6d83af..9b9475c616 100644
--- a/tmk_core/protocol/arm_atsam/clks.c
+++ b/tmk_core/protocol/arm_atsam/clks.c
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
volatile clk_t system_clks;
volatile uint64_t ms_clk;
uint32_t usec_delay_mult;
-#define USEC_DELAY_LOOP_CYCLES 3 // Sum of instruction cycles in us delay loop
+#define USEC_DELAY_LOOP_CYCLES 3 // Sum of instruction cycles in us delay loop
const uint32_t sercom_apbbase[] = {(uint32_t)SERCOM0, (uint32_t)SERCOM1, (uint32_t)SERCOM2, (uint32_t)SERCOM3, (uint32_t)SERCOM4, (uint32_t)SERCOM5};
const uint8_t sercom_pchan[] = {7, 8, 23, 24, 34, 35};
@@ -59,9 +59,9 @@ void CLK_oscctrl_init(void) {
while (posctrl->Dpll[USE_DPLL_IND].DPLLSYNCBUSY.bit.ENABLE) {
DBGC(DC_CLK_OSC_INIT_DPLL_SYNC_DISABLE);
}
- posctrl->Dpll[USE_DPLL_IND].DPLLCTRLB.bit.REFCLK = 2; // select XOSC0 (16MHz)
- posctrl->Dpll[USE_DPLL_IND].DPLLCTRLB.bit.DIV = 7; // 16 MHz / (2 * (7 + 1)) = 1 MHz
- posctrl->Dpll[USE_DPLL_IND].DPLLRATIO.bit.LDR = PLL_RATIO; // 1 MHz * (PLL_RATIO(47) + 1) = 48MHz
+ posctrl->Dpll[USE_DPLL_IND].DPLLCTRLB.bit.REFCLK = 2; // select XOSC0 (16MHz)
+ posctrl->Dpll[USE_DPLL_IND].DPLLCTRLB.bit.DIV = 7; // 16 MHz / (2 * (7 + 1)) = 1 MHz
+ posctrl->Dpll[USE_DPLL_IND].DPLLRATIO.bit.LDR = PLL_RATIO; // 1 MHz * (PLL_RATIO(47) + 1) = 48MHz
while (posctrl->Dpll[USE_DPLL_IND].DPLLSYNCBUSY.bit.DPLLRATIO) {
DBGC(DC_CLK_OSC_INIT_DPLL_SYNC_RATIO);
}
@@ -87,7 +87,7 @@ void CLK_oscctrl_init(void) {
system_clks.freq_gclk[0] = system_clks.freq_dpll[0];
usec_delay_mult = system_clks.freq_gclk[0] / (USEC_DELAY_LOOP_CYCLES * 1000000);
- if (usec_delay_mult < 1) usec_delay_mult = 1; // Never allow a multiplier of zero
+ if (usec_delay_mult < 1) usec_delay_mult = 1; // Never allow a multiplier of zero
DBGC(DC_CLK_OSC_INIT_COMPLETE);
}
@@ -240,7 +240,7 @@ uint32_t CLK_enable_timebase(void) {
// ptc4->COUNT16.DBGCTRL.bit.DBGRUN = 1;
// wave mode
- ptc4->COUNT16.WAVE.bit.WAVEGEN = 1; // MFRQ match frequency mode, toggle each CC match
+ ptc4->COUNT16.WAVE.bit.WAVEGEN = 1; // MFRQ match frequency mode, toggle each CC match
// generate event for next stage
ptc4->COUNT16.EVCTRL.bit.MCEO0 = 1;
@@ -272,9 +272,9 @@ uint32_t CLK_enable_timebase(void) {
DBGC(DC_CLK_ENABLE_TIMEBASE_TC0_SYNC_SWRST_2);
}
// CTRLA as default
- ptc0->COUNT32.CTRLA.bit.MODE = 2; // 32 bit mode
- ptc0->COUNT32.EVCTRL.bit.TCEI = 1; // enable incoming events
- ptc0->COUNT32.EVCTRL.bit.EVACT = 2; // count events
+ ptc0->COUNT32.CTRLA.bit.MODE = 2; // 32 bit mode
+ ptc0->COUNT32.EVCTRL.bit.TCEI = 1; // enable incoming events
+ ptc0->COUNT32.EVCTRL.bit.EVACT = 2; // count events
DBGC(DC_CLK_ENABLE_TIMEBASE_TC0_COMPLETE);
@@ -284,10 +284,10 @@ uint32_t CLK_enable_timebase(void) {
pmclk->APBBMASK.bit.EVSYS_ = 1;
pgclk->PCHCTRL[EVSYS_GCLK_ID_0].bit.GEN = GEN_TC45;
pgclk->PCHCTRL[EVSYS_GCLK_ID_0].bit.CHEN = 1;
- pevsys->USER[44].reg = EVSYS_ID_USER_PORT_EV_0; // TC0 will get event channel 0
- pevsys->Channel[0].CHANNEL.bit.EDGSEL = EVSYS_CHANNEL_EDGSEL_RISING_EDGE_Val; // Rising edge
- pevsys->Channel[0].CHANNEL.bit.PATH = EVSYS_CHANNEL_PATH_SYNCHRONOUS_Val; // Synchronous
- pevsys->Channel[0].CHANNEL.bit.EVGEN = EVSYS_ID_GEN_TC4_MCX_0; // TC4 MC0
+ pevsys->USER[44].reg = EVSYS_ID_USER_PORT_EV_0; // TC0 will get event channel 0
+ pevsys->Channel[0].CHANNEL.bit.EDGSEL = EVSYS_CHANNEL_EDGSEL_RISING_EDGE_Val; // Rising edge
+ pevsys->Channel[0].CHANNEL.bit.PATH = EVSYS_CHANNEL_PATH_SYNCHRONOUS_Val; // Synchronous
+ pevsys->Channel[0].CHANNEL.bit.EVGEN = EVSYS_ID_GEN_TC4_MCX_0; // TC4 MC0
DBGC(DC_CLK_ENABLE_TIMEBASE_EVSYS_COMPLETE);
@@ -301,15 +301,15 @@ uint32_t CLK_enable_timebase(void) {
}
void CLK_delay_us(uint32_t usec) {
- asm("CBZ R0, return\n\t" // If usec == 0, branch to return label
+ asm("CBZ R0, return\n\t" // If usec == 0, branch to return label
);
- asm("MULS R0, %0\n\t" // Multiply R0(usec) by usec_delay_mult and store in R0
- ".balign 16\n\t" // Ensure loop is aligned for fastest performance
- "loop: SUBS R0, #1\n\t" // Subtract 1 from R0 and update flags (1 cycle)
- "BNE loop\n\t" // Branch if non-zero to loop label (2 cycles) NOTE: USEC_DELAY_LOOP_CYCLES is the sum of loop cycles
- "return:\n\t" // Return label
- : // No output registers
- : "r"(usec_delay_mult) // For %0
+ asm("MULS R0, %0\n\t" // Multiply R0(usec) by usec_delay_mult and store in R0
+ ".balign 16\n\t" // Ensure loop is aligned for fastest performance
+ "loop: SUBS R0, #1\n\t" // Subtract 1 from R0 and update flags (1 cycle)
+ "BNE loop\n\t" // Branch if non-zero to loop label (2 cycles) NOTE: USEC_DELAY_LOOP_CYCLES is the sum of loop cycles
+ "return:\n\t" // Return label
+ : // No output registers
+ : "r"(usec_delay_mult) // For %0
);
// Note: BX LR generated
}
diff --git a/tmk_core/protocol/arm_atsam/clks.h b/tmk_core/protocol/arm_atsam/clks.h
index 72df3a8e3f..6ee71aff8f 100644
--- a/tmk_core/protocol/arm_atsam/clks.h
+++ b/tmk_core/protocol/arm_atsam/clks.h
@@ -24,14 +24,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "config_led.h"
# include "config.h"
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
-#define PLL_RATIO 47 // mcu frequency ((X+1)MHz)
-#define FREQ_DFLL_DEFAULT 48000000 // DFLL frequency / usb clock
-#define FREQ_SPI_DEFAULT 1000000 // spi to 595 shift regs
-#define FREQ_I2C0_DEFAULT 100000 // i2c to hub
-#define FREQ_I2C1_DEFAULT I2C_HZ // i2c to LED drivers
-#define FREQ_TC45_DEFAULT 1000000 // 1 usec resolution
+#define PLL_RATIO 47 // mcu frequency ((X+1)MHz)
+#define FREQ_DFLL_DEFAULT 48000000 // DFLL frequency / usb clock
+#define FREQ_SPI_DEFAULT 1000000 // spi to 595 shift regs
+#define FREQ_I2C0_DEFAULT 100000 // i2c to hub
+#define FREQ_I2C1_DEFAULT I2C_HZ // i2c to LED drivers
+#define FREQ_TC45_DEFAULT 1000000 // 1 usec resolution
// I2C1 Set ~Result PWM Time (2x Drivers)
// 1000000 1090000
@@ -44,10 +44,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define FREQ_XOSC0 16000000
-#define CHAN_SERCOM_SPI 2 // shift regs
-#define CHAN_SERCOM_I2C0 0 // hub
-#define CHAN_SERCOM_I2C1 1 // led drivers
-#define CHAN_SERCOM_UART 3 // debug util
+#define CHAN_SERCOM_SPI 2 // shift regs
+#define CHAN_SERCOM_I2C0 0 // hub
+#define CHAN_SERCOM_I2C1 1 // led drivers
+#define CHAN_SERCOM_UART 3 // debug util
// Generator clock channels
#define GEN_DPLL0 0
@@ -86,4 +86,4 @@ uint32_t CLK_set_i2c0_freq(uint8_t sercomn, uint32_t freq);
uint32_t CLK_set_i2c1_freq(uint8_t sercomn, uint32_t freq);
void CLK_init(void);
-#endif // _CLKS_H_
+#endif // _CLKS_H_
diff --git a/tmk_core/protocol/arm_atsam/d51_util.c b/tmk_core/protocol/arm_atsam/d51_util.c
index df596f7ba2..5903233085 100644
--- a/tmk_core/protocol/arm_atsam/d51_util.c
+++ b/tmk_core/protocol/arm_atsam/d51_util.c
@@ -34,7 +34,8 @@ void dbg_print(uint32_t x) {
while (t >= 0) {
p2 = t;
p = 1;
- while (p2--) p *= 10;
+ while (p2--)
+ p *= 10;
n = x / p;
x -= n * p;
if (!n) {
@@ -55,7 +56,7 @@ void dbg_print(uint32_t x) {
}
for (w = DBG_PAUSE; w; w--)
- ; // Long pause after number is complete
+ ; // Long pause after number is complete
}
// Display unsigned 32-bit number through debug led
@@ -91,7 +92,8 @@ void dled_print(uint32_t x, uint8_t long_pause) {
while (t >= 0) {
p2 = t;
p = 1;
- while (p2--) p *= 10;
+ while (p2--)
+ p *= 10;
n = x / p;
x -= n * p;
if (!n) {
@@ -188,12 +190,12 @@ void debug_code_init(void) {
DBGC(DC_UNSET);
// Configure Ports for EIC
- PORT->Group[DEBUG_BOOT_TRACING_PORT].DIRCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Input
- PORT->Group[DEBUG_BOOT_TRACING_PORT].OUTSET.reg = 1 << DEBUG_BOOT_TRACING_PIN; // High
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.INEN = 1; // Input Enable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PULLEN = 1; // Pull Enable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PMUXEN = 1; // Mux Enable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PMUX[DEBUG_BOOT_TRACING_PIN / 2].bit.PMUXO = 0; // Mux A
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].DIRCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Input
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].OUTSET.reg = 1 << DEBUG_BOOT_TRACING_PIN; // High
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.INEN = 1; // Input Enable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PULLEN = 1; // Pull Enable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PMUXEN = 1; // Mux Enable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PMUX[DEBUG_BOOT_TRACING_PIN / 2].bit.PMUXO = 0; // Mux A
// Enable CLK_EIC_APB
MCLK->APBAMASK.bit.EIC_ = 1;
@@ -223,12 +225,12 @@ void debug_code_disable(void) {
}
// Default port configuration
- PORT->Group[DEBUG_BOOT_TRACING_PORT].DIRCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Input
- PORT->Group[DEBUG_BOOT_TRACING_PORT].OUTCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Low
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.INEN = 0; // Input Disable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PULLEN = 0; // Pull Disable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PMUXEN = 0; // Mux Disable
- PORT->Group[DEBUG_BOOT_TRACING_PORT].PMUX[DEBUG_BOOT_TRACING_PIN / 2].bit.PMUXO = 0; // Mux A
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].DIRCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Input
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].OUTCLR.reg = 1 << DEBUG_BOOT_TRACING_PIN; // Low
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.INEN = 0; // Input Disable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PULLEN = 0; // Pull Disable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PINCFG[DEBUG_BOOT_TRACING_PIN].bit.PMUXEN = 0; // Mux Disable
+ PORT->Group[DEBUG_BOOT_TRACING_PORT].PMUX[DEBUG_BOOT_TRACING_PIN / 2].bit.PMUXO = 0; // Mux A
// Disable CLK_EIC_APB
MCLK->APBAMASK.bit.EIC_ = 0;
@@ -239,4 +241,4 @@ void debug_code_disable(void) {
void debug_code_init(void) {}
void debug_code_disable(void) {}
-#endif // DEBUG_BOOT_TRACING_ENABLE
+#endif // DEBUG_BOOT_TRACING_ENABLE
diff --git a/tmk_core/protocol/arm_atsam/d51_util.h b/tmk_core/protocol/arm_atsam/d51_util.h
index 89cf338d23..d301e55411 100644
--- a/tmk_core/protocol/arm_atsam/d51_util.h
+++ b/tmk_core/protocol/arm_atsam/d51_util.h
@@ -219,6 +219,6 @@ enum debug_code_list {
# define DBGC(n) \
{}
-#endif // DEBUG_BOOT_TRACING_ENABLE
+#endif // DEBUG_BOOT_TRACING_ENABLE
-#endif //_D51_UTIL_H_
+#endif //_D51_UTIL_H_
diff --git a/tmk_core/protocol/arm_atsam/i2c_master.c b/tmk_core/protocol/arm_atsam/i2c_master.c
index af046625f4..6b0b9a703b 100644
--- a/tmk_core/protocol/arm_atsam/i2c_master.c
+++ b/tmk_core/protocol/arm_atsam/i2c_master.c
@@ -26,21 +26,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "config_led.h"
# include "matrix.h"
-# define I2C_LED_USE_DMA 1 // Set 1 to use background DMA transfers for leds, Set 0 to use inline software transfers
+# define I2C_LED_USE_DMA 1 // Set 1 to use background DMA transfers for leds, Set 0 to use inline software transfers
DmacDescriptor dmac_desc;
DmacDescriptor dmac_desc_wb;
-static uint8_t i2c_led_q[I2C_Q_SIZE]; // I2C queue circular buffer
-static uint8_t i2c_led_q_s; // Start of circular buffer
-static uint8_t i2c_led_q_e; // End of circular buffer
-static uint8_t i2c_led_q_full; // Queue full counter for reset
+static uint8_t i2c_led_q[I2C_Q_SIZE]; // I2C queue circular buffer
+static uint8_t i2c_led_q_s; // Start of circular buffer
+static uint8_t i2c_led_q_e; // End of circular buffer
+static uint8_t i2c_led_q_full; // Queue full counter for reset
-static uint8_t dma_sendbuf[I2C_DMA_MAX_SEND]; // Data being written to I2C
+static uint8_t dma_sendbuf[I2C_DMA_MAX_SEND]; // Data being written to I2C
volatile uint8_t i2c_led_q_running;
-#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
+#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
void i2c0_init(void) {
DBGC(DC_I2C0_INIT_BEGIN);
@@ -56,23 +56,23 @@ void i2c0_init(void) {
// I2C
// Note: SW Reset handled in CLK_set_i2c0_freq clks.c
- SERCOM0->I2CM.CTRLA.bit.MODE = 5; // Set master mode
+ SERCOM0->I2CM.CTRLA.bit.MODE = 5; // Set master mode
- SERCOM0->I2CM.CTRLA.bit.SPEED = 0; // Set to 1 for Fast-mode Plus (FM+) up to 1 MHz
- SERCOM0->I2CM.CTRLA.bit.RUNSTDBY = 1; // Enabled
+ SERCOM0->I2CM.CTRLA.bit.SPEED = 0; // Set to 1 for Fast-mode Plus (FM+) up to 1 MHz
+ SERCOM0->I2CM.CTRLA.bit.RUNSTDBY = 1; // Enabled
- SERCOM0->I2CM.CTRLA.bit.ENABLE = 1; // Enable the device
+ SERCOM0->I2CM.CTRLA.bit.ENABLE = 1; // Enable the device
while (SERCOM0->I2CM.SYNCBUSY.bit.ENABLE) {
DBGC(DC_I2C0_INIT_SYNC_ENABLING);
- } // Wait for SYNCBUSY.ENABLE to clear
+ } // Wait for SYNCBUSY.ENABLE to clear
- SERCOM0->I2CM.STATUS.bit.BUSSTATE = 1; // Force into IDLE state
+ SERCOM0->I2CM.STATUS.bit.BUSSTATE = 1; // Force into IDLE state
while (SERCOM0->I2CM.SYNCBUSY.bit.SYSOP) {
DBGC(DC_I2C0_INIT_SYNC_SYSOP);
}
while (SERCOM0->I2CM.STATUS.bit.BUSSTATE != 1) {
DBGC(DC_I2C0_INIT_WAIT_IDLE);
- } // Wait while not idle
+ } // Wait while not idle
DBGC(DC_I2C0_INIT_COMPLETE);
}
@@ -139,27 +139,27 @@ void i2c1_init(void) {
/* I2C */
// Note: SW Reset handled in CLK_set_i2c1_freq clks.c
- SERCOM1->I2CM.CTRLA.bit.MODE = 5; // MODE: Set master mode (No sync)
- SERCOM1->I2CM.CTRLA.bit.SPEED = 1; // SPEED: Fm+ up to 1MHz (No sync)
- SERCOM1->I2CM.CTRLA.bit.RUNSTDBY = 1; // RUNSTBY: Enabled (No sync)
+ SERCOM1->I2CM.CTRLA.bit.MODE = 5; // MODE: Set master mode (No sync)
+ SERCOM1->I2CM.CTRLA.bit.SPEED = 1; // SPEED: Fm+ up to 1MHz (No sync)
+ SERCOM1->I2CM.CTRLA.bit.RUNSTDBY = 1; // RUNSTBY: Enabled (No sync)
- SERCOM1->I2CM.CTRLB.bit.SMEN = 1; // SMEN: Smart mode enabled (For DMA)(No sync)
+ SERCOM1->I2CM.CTRLB.bit.SMEN = 1; // SMEN: Smart mode enabled (For DMA)(No sync)
NVIC_EnableIRQ(SERCOM1_0_IRQn);
SERCOM1->I2CM.INTENSET.bit.ERROR = 1;
- SERCOM1->I2CM.CTRLA.bit.ENABLE = 1; // ENABLE: Enable the device (sync SYNCBUSY.ENABLE)
+ SERCOM1->I2CM.CTRLA.bit.ENABLE = 1; // ENABLE: Enable the device (sync SYNCBUSY.ENABLE)
while (SERCOM1->I2CM.SYNCBUSY.bit.ENABLE) {
DBGC(DC_I2C1_INIT_SYNC_ENABLING);
- } // Wait for SYNCBUSY.ENABLE to clear
+ } // Wait for SYNCBUSY.ENABLE to clear
- SERCOM1->I2CM.STATUS.bit.BUSSTATE = 1; // BUSSTATE: Force into IDLE state (sync SYNCBUSY.SYSOP)
+ SERCOM1->I2CM.STATUS.bit.BUSSTATE = 1; // BUSSTATE: Force into IDLE state (sync SYNCBUSY.SYSOP)
while (SERCOM1->I2CM.SYNCBUSY.bit.SYSOP) {
DBGC(DC_I2C1_INIT_SYNC_SYSOP);
}
while (SERCOM1->I2CM.STATUS.bit.BUSSTATE != 1) {
DBGC(DC_I2C1_INIT_WAIT_IDLE);
- } // Wait while not idle
+ } // Wait while not idle
DBGC(DC_I2C1_INIT_COMPLETE);
}
@@ -240,7 +240,7 @@ void i2c_led_send_onoff(uint8_t drvid) {
}
# endif
- *issidrv[drvid].onoff = 0; // Force start location offset to zero
+ *issidrv[drvid].onoff = 0; // Force start location offset to zero
i2c1_transmit(issidrv[drvid].addr, issidrv[drvid].onoff, ISSI3733_PG0_BYTES, 0);
}
@@ -265,7 +265,7 @@ void i2c_led_send_pwm(uint8_t drvid) {
}
# endif
- *issidrv[drvid].pwm = 0; // Force start location offset to zero
+ *issidrv[drvid].pwm = 0; // Force start location offset to zero
i2c1_transmit(issidrv[drvid].addr, issidrv[drvid].pwm, ISSI3733_PG1_BYTES, 0);
}
@@ -300,12 +300,12 @@ uint8_t I2C3733_Init_Drivers(void) {
// Set up master device
i2c_led_send_CRWL(0);
i2c_led_select_page(0, 3);
- i2c_led_send_mode_op_gcr(0, 0, ISSI3733_CR_SSD_NORMAL); // No SYNC due to brightness mismatch with second driver
+ i2c_led_send_mode_op_gcr(0, 0, ISSI3733_CR_SSD_NORMAL); // No SYNC due to brightness mismatch with second driver
// Set up slave device
i2c_led_send_CRWL(1);
i2c_led_select_page(1, 3);
- i2c_led_send_mode_op_gcr(1, 0, ISSI3733_CR_SSD_NORMAL); // No SYNC due to brightness mismatch with first driver and slight flicker at rgb values 1,2
+ i2c_led_send_mode_op_gcr(1, 0, ISSI3733_CR_SSD_NORMAL); // No SYNC due to brightness mismatch with first driver and slight flicker at rgb values 1,2
i2c_led_send_CRWL(0);
i2c_led_select_page(0, 3);
@@ -326,41 +326,41 @@ void I2C_DMAC_LED_Init(void) {
DBGC(DC_I2C_DMAC_LED_INIT_BEGIN);
// Disable device
- dmac->CTRL.bit.DMAENABLE = 0; // Disable DMAC
+ dmac->CTRL.bit.DMAENABLE = 0; // Disable DMAC
while (dmac->CTRL.bit.DMAENABLE) {
- } // Wait for disabled state in case of ongoing transfers
- dmac->CTRL.bit.SWRST = 1; // Software Reset DMAC
+ } // Wait for disabled state in case of ongoing transfers
+ dmac->CTRL.bit.SWRST = 1; // Software Reset DMAC
while (dmac->CTRL.bit.SWRST) {
- } // Wait for software reset to complete
+ } // Wait for software reset to complete
// Configure device
- dmac->BASEADDR.reg = (uint32_t)&dmac_desc; // Set descriptor base address
- dmac->WRBADDR.reg = (uint32_t)&dmac_desc_wb; // Set descriptor write back address
- dmac->CTRL.reg |= 0x0f00; // Handle all priorities (LVL0-3)
+ dmac->BASEADDR.reg = (uint32_t)&dmac_desc; // Set descriptor base address
+ dmac->WRBADDR.reg = (uint32_t)&dmac_desc_wb; // Set descriptor write back address
+ dmac->CTRL.reg |= 0x0f00; // Handle all priorities (LVL0-3)
// Disable channel
- dmac->Channel[0].CHCTRLA.bit.ENABLE = 0; // Disable the channel
+ dmac->Channel[0].CHCTRLA.bit.ENABLE = 0; // Disable the channel
while (dmac->Channel[0].CHCTRLA.bit.ENABLE) {
- } // Wait for disabled state in case of ongoing transfers
- dmac->Channel[0].CHCTRLA.bit.SWRST = 1; // Software Reset the channel
+ } // Wait for disabled state in case of ongoing transfers
+ dmac->Channel[0].CHCTRLA.bit.SWRST = 1; // Software Reset the channel
while (dmac->Channel[0].CHCTRLA.bit.SWRST) {
- } // Wait for software reset to complete
+ } // Wait for software reset to complete
// Configure channel
- dmac->Channel[0].CHCTRLA.bit.THRESHOLD = 0; // 1BEAT
- dmac->Channel[0].CHCTRLA.bit.BURSTLEN = 0; // SINGLE
- dmac->Channel[0].CHCTRLA.bit.TRIGACT = 2; // BURST
- dmac->Channel[0].CHCTRLA.bit.TRIGSRC = SERCOM1_DMAC_ID_TX; // Trigger source
- dmac->Channel[0].CHCTRLA.bit.RUNSTDBY = 1; // Run in standby
+ dmac->Channel[0].CHCTRLA.bit.THRESHOLD = 0; // 1BEAT
+ dmac->Channel[0].CHCTRLA.bit.BURSTLEN = 0; // SINGLE
+ dmac->Channel[0].CHCTRLA.bit.TRIGACT = 2; // BURST
+ dmac->Channel[0].CHCTRLA.bit.TRIGSRC = SERCOM1_DMAC_ID_TX; // Trigger source
+ dmac->Channel[0].CHCTRLA.bit.RUNSTDBY = 1; // Run in standby
NVIC_EnableIRQ(DMAC_0_IRQn);
dmac->Channel[0].CHINTENSET.bit.TCMPL = 1;
dmac->Channel[0].CHINTENSET.bit.TERR = 1;
// Enable device
- dmac->CTRL.bit.DMAENABLE = 1; // Enable DMAC
+ dmac->CTRL.bit.DMAENABLE = 1; // Enable DMAC
while (dmac->CTRL.bit.DMAENABLE == 0) {
- } // Wait for enable state
+ } // Wait for enable state
DBGC(DC_I2C_DMAC_LED_INIT_COMPLETE);
}
@@ -377,14 +377,14 @@ void I2C3733_Control_Set(uint8_t state) {
}
void i2c_led_desc_defaults(void) {
- dmac_desc.BTCTRL.bit.STEPSIZE = 0; // SRCINC used in favor for auto 1 inc
- dmac_desc.BTCTRL.bit.STEPSEL = 0; // SRCINC used in favor for auto 1 inc
- dmac_desc.BTCTRL.bit.DSTINC = 0; // The Destination Address Increment is disabled
- dmac_desc.BTCTRL.bit.SRCINC = 1; // The Source Address Increment is enabled (Inc by 1)
- dmac_desc.BTCTRL.bit.BEATSIZE = 0; // 8-bit bus transfer
- dmac_desc.BTCTRL.bit.BLOCKACT = 0; // Channel will be disabled if it is the last block transfer in the transaction
- dmac_desc.BTCTRL.bit.EVOSEL = 0; // Event generation disabled
- dmac_desc.BTCTRL.bit.VALID = 1; // Set dmac valid
+ dmac_desc.BTCTRL.bit.STEPSIZE = 0; // SRCINC used in favor for auto 1 inc
+ dmac_desc.BTCTRL.bit.STEPSEL = 0; // SRCINC used in favor for auto 1 inc
+ dmac_desc.BTCTRL.bit.DSTINC = 0; // The Destination Address Increment is disabled
+ dmac_desc.BTCTRL.bit.SRCINC = 1; // The Source Address Increment is enabled (Inc by 1)
+ dmac_desc.BTCTRL.bit.BEATSIZE = 0; // 8-bit bus transfer
+ dmac_desc.BTCTRL.bit.BLOCKACT = 0; // Channel will be disabled if it is the last block transfer in the transaction
+ dmac_desc.BTCTRL.bit.EVOSEL = 0; // Event generation disabled
+ dmac_desc.BTCTRL.bit.VALID = 1; // Set dmac valid
}
void i2c_led_prepare_send_dma(uint8_t *data, uint8_t len) {
@@ -397,9 +397,9 @@ void i2c_led_prepare_send_dma(uint8_t *data, uint8_t len) {
}
void i2c_led_begin_dma(uint8_t drvid) {
- DMAC->Channel[0].CHCTRLA.bit.ENABLE = 1; // Enable the channel
+ DMAC->Channel[0].CHCTRLA.bit.ENABLE = 1; // Enable the channel
- SERCOM1->I2CM.ADDR.reg = (dmac_desc.BTCNT.reg << 16) | 0x2000 | issidrv[drvid].addr; // Begin transfer
+ SERCOM1->I2CM.ADDR.reg = (dmac_desc.BTCNT.reg << 16) | 0x2000 | issidrv[drvid].addr; // Begin transfer
}
void i2c_led_send_CRWL_dma(uint8_t drvid) {
@@ -429,7 +429,7 @@ void i2c_led_send_GCR_dma(uint8_t drvid) {
void i2c_led_send_pwm_dma(uint8_t drvid) {
// Note: This copies the CURRENT pwm buffer, which may be getting modified
memcpy(dma_sendbuf, issidrv[drvid].pwm, ISSI3733_PG1_BYTES);
- *dma_sendbuf = 0; // Force start location offset to zero
+ *dma_sendbuf = 0; // Force start location offset to zero
i2c_led_prepare_send_dma(dma_sendbuf, ISSI3733_PG1_BYTES);
i2c_led_begin_dma(drvid);
@@ -438,7 +438,7 @@ void i2c_led_send_pwm_dma(uint8_t drvid) {
void i2c_led_send_onoff_dma(uint8_t drvid) {
// Note: This copies the CURRENT onoff buffer, which may be getting modified
memcpy(dma_sendbuf, issidrv[drvid].onoff, ISSI3733_PG0_BYTES);
- *dma_sendbuf = 0; // Force start location offset to zero
+ *dma_sendbuf = 0; // Force start location offset to zero
i2c_led_prepare_send_dma(dma_sendbuf, ISSI3733_PG0_BYTES);
i2c_led_begin_dma(drvid);
@@ -452,12 +452,16 @@ void i2c_led_q_init(void) {
i2c_led_q_full = 0;
}
-uint8_t i2c_led_q_isempty(void) { return i2c_led_q_s == i2c_led_q_e; }
+uint8_t i2c_led_q_isempty(void) {
+ return i2c_led_q_s == i2c_led_q_e;
+}
-uint8_t i2c_led_q_size(void) { return (i2c_led_q_e - i2c_led_q_s) % I2C_Q_SIZE; }
+uint8_t i2c_led_q_size(void) {
+ return (i2c_led_q_e - i2c_led_q_s) % I2C_Q_SIZE;
+}
uint8_t i2c_led_q_available(void) {
- return I2C_Q_SIZE - i2c_led_q_size() - 1; // Never allow end to meet start
+ return I2C_Q_SIZE - i2c_led_q_size() - 1; // Never allow end to meet start
}
void i2c_led_q_add(uint8_t cmd) {
@@ -466,11 +470,11 @@ void i2c_led_q_add(uint8_t cmd) {
// Assign command
i2c_led_q[i2c_led_q_e] = cmd;
- i2c_led_q_e = (i2c_led_q_e + 1) % I2C_Q_SIZE; // Move end up one or wrap
+ i2c_led_q_e = (i2c_led_q_e + 1) % I2C_Q_SIZE; // Move end up one or wrap
}
void i2c_led_q_s_advance(void) {
- i2c_led_q_s = (i2c_led_q_s + 1) % I2C_Q_SIZE; // Move start up one or wrap
+ i2c_led_q_s = (i2c_led_q_s + 1) % I2C_Q_SIZE; // Move start up one or wrap
}
// Always request room before adding commands
@@ -480,7 +484,7 @@ uint8_t i2c_led_q_request_room(uint8_t request_size) {
if (request_size > i2c_led_q_available()) {
i2c_led_q_full++;
- if (i2c_led_q_full >= 100) // Give the queue a chance to clear up
+ if (i2c_led_q_full >= 100) // Give the queue a chance to clear up
{
DBG_LED_ON;
I2C_DMAC_LED_Init();
@@ -554,7 +558,7 @@ uint8_t i2c_led_q_run(void) {
# endif
}
- i2c_led_q_s_advance(); // Advance last run command or if the command byte was not serviced
+ i2c_led_q_s_advance(); // Advance last run command or if the command byte was not serviced
# if I2C_LED_USE_DMA != 1
}
@@ -583,4 +587,4 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t *data, uint16_t length,
return ret ? I2C_STATUS_SUCCESS : I2C_STATUS_ERROR;
}
-#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
+#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
diff --git a/tmk_core/protocol/arm_atsam/i2c_master.h b/tmk_core/protocol/arm_atsam/i2c_master.h
index e11235d447..5459923de4 100644
--- a/tmk_core/protocol/arm_atsam/i2c_master.h
+++ b/tmk_core/protocol/arm_atsam/i2c_master.h
@@ -95,7 +95,7 @@ void i2c1_init(void);
uint8_t i2c1_transmit(uint8_t address, uint8_t *data, uint16_t length, uint16_t timeout);
void i2c1_stop(void);
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
void i2c0_init(void);
uint8_t i2c0_transmit(uint8_t address, uint8_t *data, uint16_t length, uint16_t timeout);
@@ -110,4 +110,4 @@ typedef int16_t i2c_status_t;
void i2c_init(void);
i2c_status_t i2c_transmit(uint8_t address, const uint8_t *data, uint16_t length, uint16_t timeout);
-#endif // _I2C_MASTER_H_
+#endif // _I2C_MASTER_H_
diff --git a/tmk_core/protocol/arm_atsam/issi3733_driver.h b/tmk_core/protocol/arm_atsam/issi3733_driver.h
index bd29fe76b6..c01f147e13 100644
--- a/tmk_core/protocol/arm_atsam/issi3733_driver.h
+++ b/tmk_core/protocol/arm_atsam/issi3733_driver.h
@@ -20,29 +20,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// ISII3733 Registers
-#define ISSI3733_CMDR 0xFD // Command Register (Write Only)
-
-#define ISSI3733_CMDRWL 0xFE // Command Register Write Lock (Read/Write)
-#define ISSI3733_CMDRWL_WRITE_DISABLE 0x00 // Lock register
-#define ISSI3733_CMDRWL_WRITE_ENABLE_ONCE 0xC5 // Enable one write to register then reset to locked
-
-#define ISSI3733_IMR 0xF0 // Interrupt Mask Register (Write Only)
-#define ISSI3733_IMR_IAC_ON 0x08 // Auto Clear Interrupt Bit - Interrupt auto clear when INTB stay low exceeds 8ms
-#define ISSI3733_IMR_IAB_ON 0x04 // Auto Breath Interrupt Bit - Enable auto breath loop finish interrupt
-#define ISSI3733_IMR_IS_ON 0x02 // Dot Short Interrupt Bit - Enable dot short interrupt
-#define ISSI3733_IMR_IO_ON 0x01 // Dot Open Interrupt Bit - Enable dot open interrupt
-
-#define ISSI3733_ISR 0xF1 // Interrupt Status Register (Read Only)
-#define ISSI3733_ISR_ABM3_FINISH 0x10 // Auto Breath Mode 3 Finish Bit - ABM3 finished
-#define ISSI3733_ISR_ABM2_FINISH 0x08 // Auto Breath Mode 2 Finish Bit - ABM2 finished
-#define ISSI3733_ISR_ABM1_FINISH 0x04 // Auto Breath Mode 1 Finish Bit - ABM1 finished
-#define ISSI3733_ISR_SB 0x02 // Short Bit - Shorted
-#define ISSI3733_ISR_OB 0x01 // Open Bit - Opened
-
-#define ISSI3733_PG0 0x00 // LED Control Register
-#define ISSI3733_PG1 0x01 // PWM Register
-#define ISSI3733_PG2 0x02 // Auto Breath Mode Register
-#define ISSI3733_PG3 0x03 // Function Register
+#define ISSI3733_CMDR 0xFD // Command Register (Write Only)
+
+#define ISSI3733_CMDRWL 0xFE // Command Register Write Lock (Read/Write)
+#define ISSI3733_CMDRWL_WRITE_DISABLE 0x00 // Lock register
+#define ISSI3733_CMDRWL_WRITE_ENABLE_ONCE 0xC5 // Enable one write to register then reset to locked
+
+#define ISSI3733_IMR 0xF0 // Interrupt Mask Register (Write Only)
+#define ISSI3733_IMR_IAC_ON 0x08 // Auto Clear Interrupt Bit - Interrupt auto clear when INTB stay low exceeds 8ms
+#define ISSI3733_IMR_IAB_ON 0x04 // Auto Breath Interrupt Bit - Enable auto breath loop finish interrupt
+#define ISSI3733_IMR_IS_ON 0x02 // Dot Short Interrupt Bit - Enable dot short interrupt
+#define ISSI3733_IMR_IO_ON 0x01 // Dot Open Interrupt Bit - Enable dot open interrupt
+
+#define ISSI3733_ISR 0xF1 // Interrupt Status Register (Read Only)
+#define ISSI3733_ISR_ABM3_FINISH 0x10 // Auto Breath Mode 3 Finish Bit - ABM3 finished
+#define ISSI3733_ISR_ABM2_FINISH 0x08 // Auto Breath Mode 2 Finish Bit - ABM2 finished
+#define ISSI3733_ISR_ABM1_FINISH 0x04 // Auto Breath Mode 1 Finish Bit - ABM1 finished
+#define ISSI3733_ISR_SB 0x02 // Short Bit - Shorted
+#define ISSI3733_ISR_OB 0x01 // Open Bit - Opened
+
+#define ISSI3733_PG0 0x00 // LED Control Register
+#define ISSI3733_PG1 0x01 // PWM Register
+#define ISSI3733_PG2 0x02 // Auto Breath Mode Register
+#define ISSI3733_PG3 0x03 // Function Register
#define ISSI3733_PG_ONOFF ISSI3733_PG0
#define ISSI3733_PG_OR ISSI3733_PG0
@@ -51,88 +51,88 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ISSI3733_PG_ABM ISSI3733_PG2
#define ISSI3733_PG_FN ISSI3733_PG3
-#define ISSI3733_CR 0x00 // Configuration Register
+#define ISSI3733_CR 0x00 // Configuration Register
// PG3: Configuration Register: Synchronize Configuration
-#define ISSI3733_CR_SYNC_MASTER 0x40 // Master
-#define ISSI3733_CR_SYNC_SLAVE 0x80 // Slave
-#define ISSI3733_CR_SYNC_HIGH_IMP 0xC0 // High Impedance
+#define ISSI3733_CR_SYNC_MASTER 0x40 // Master
+#define ISSI3733_CR_SYNC_SLAVE 0x80 // Slave
+#define ISSI3733_CR_SYNC_HIGH_IMP 0xC0 // High Impedance
// PG3: Configuration Register: Open/Short Detection Enable Bit
//#define ISSI3733_CR_OSD_DISABLE 0x00 //Disable open/short detection
-#define ISSI3733_CR_OSD_ENABLE 0x04 // Enable open/short detection
+#define ISSI3733_CR_OSD_ENABLE 0x04 // Enable open/short detection
// PG3: Configuration Register: Auto Breath Enable
//#define ISSI3733_CR_B_EN_PWM 0x00 //PWM Mode Enable
-#define ISSI3733_CR_B_EN_AUTO 0x02 // Auto Breath Mode Enable
+#define ISSI3733_CR_B_EN_AUTO 0x02 // Auto Breath Mode Enable
// PG3: Configuration Register: Software Shutdown Control
//#define ISSI3733_CR_SSD_SHUTDOWN 0x00 //Software shutdown
-#define ISSI3733_CR_SSD_NORMAL 0x01 // Normal operation
+#define ISSI3733_CR_SSD_NORMAL 0x01 // Normal operation
-#define ISSI3733_GCCR 0x01 // Global Current Control Register
+#define ISSI3733_GCCR 0x01 // Global Current Control Register
// 1 Byte, Iout = (GCC / 256) * (840 / Rext)
// TODO: Give user define for Rext
// PG3: Auto Breath Control Register 1
-#define ISSI3733_ABCR1_ABM1 0x02 // Auto Breath Control Register 1 of ABM-1
-#define ISSI3733_ABCR1_ABM2 0x06 // Auto Breath Control Register 1 of ABM-2
-#define ISSI3733_ABCR1_ABM3 0x0A // Auto Breath Control Register 1 of ABM-3
+#define ISSI3733_ABCR1_ABM1 0x02 // Auto Breath Control Register 1 of ABM-1
+#define ISSI3733_ABCR1_ABM2 0x06 // Auto Breath Control Register 1 of ABM-2
+#define ISSI3733_ABCR1_ABM3 0x0A // Auto Breath Control Register 1 of ABM-3
// Rise time
-#define ISSI3733_ABCR1_T1_0021 0x00 // 0.21s
-#define ISSI3733_ABCR1_T1_0042 0x20 // 0.42s
-#define ISSI3733_ABCR1_T1_0084 0x40 // 0.84s
-#define ISSI3733_ABCR1_T1_0168 0x60 // 1.68s
-#define ISSI3733_ABCR1_T1_0336 0x80 // 3.36s
-#define ISSI3733_ABCR1_T1_0672 0xA0 // 6.72s
-#define ISSI3733_ABCR1_T1_1344 0xC0 // 13.44s
-#define ISSI3733_ABCR1_T1_2688 0xE0 // 26.88s
+#define ISSI3733_ABCR1_T1_0021 0x00 // 0.21s
+#define ISSI3733_ABCR1_T1_0042 0x20 // 0.42s
+#define ISSI3733_ABCR1_T1_0084 0x40 // 0.84s
+#define ISSI3733_ABCR1_T1_0168 0x60 // 1.68s
+#define ISSI3733_ABCR1_T1_0336 0x80 // 3.36s
+#define ISSI3733_ABCR1_T1_0672 0xA0 // 6.72s
+#define ISSI3733_ABCR1_T1_1344 0xC0 // 13.44s
+#define ISSI3733_ABCR1_T1_2688 0xE0 // 26.88s
// Max value time
-#define ISSI3733_ABCR1_T2_0000 0x00 // 0s
-#define ISSI3733_ABCR1_T2_0021 0x02 // 0.21s
-#define ISSI3733_ABCR1_T2_0042 0x04 // 0.42s
-#define ISSI3733_ABCR1_T2_0084 0x06 // 0.84s
-#define ISSI3733_ABCR1_T2_0168 0x08 // 1.68s
-#define ISSI3733_ABCR1_T2_0336 0x0A // 3.36s
-#define ISSI3733_ABCR1_T2_0672 0x0C // 6.72s
-#define ISSI3733_ABCR1_T2_1344 0x0E // 13.44s
-#define ISSI3733_ABCR1_T2_2688 0x10 // 26.88s
+#define ISSI3733_ABCR1_T2_0000 0x00 // 0s
+#define ISSI3733_ABCR1_T2_0021 0x02 // 0.21s
+#define ISSI3733_ABCR1_T2_0042 0x04 // 0.42s
+#define ISSI3733_ABCR1_T2_0084 0x06 // 0.84s
+#define ISSI3733_ABCR1_T2_0168 0x08 // 1.68s
+#define ISSI3733_ABCR1_T2_0336 0x0A // 3.36s
+#define ISSI3733_ABCR1_T2_0672 0x0C // 6.72s
+#define ISSI3733_ABCR1_T2_1344 0x0E // 13.44s
+#define ISSI3733_ABCR1_T2_2688 0x10 // 26.88s
// PG3: Auto Breath Control Register 2
-#define ISSI3733_ABCR2_ABM1 0x03 // Auto Breath Control Register 2 of ABM-1
-#define ISSI3733_ABCR2_ABM2 0x07 // Auto Breath Control Register 2 of ABM-2
-#define ISSI3733_ABCR2_ABM3 0x0B // Auto Breath Control Register 2 of ABM-3
+#define ISSI3733_ABCR2_ABM1 0x03 // Auto Breath Control Register 2 of ABM-1
+#define ISSI3733_ABCR2_ABM2 0x07 // Auto Breath Control Register 2 of ABM-2
+#define ISSI3733_ABCR2_ABM3 0x0B // Auto Breath Control Register 2 of ABM-3
// Fall time
-#define ISSI3733_ABCR2_T3_0021 0x00 // 0.21s
-#define ISSI3733_ABCR2_T3_0042 0x20 // 0.42s
-#define ISSI3733_ABCR2_T3_0084 0x40 // 0.84s
-#define ISSI3733_ABCR2_T3_0168 0x60 // 1.68s
-#define ISSI3733_ABCR2_T3_0336 0x80 // 3.36s
-#define ISSI3733_ABCR2_T3_0672 0xA0 // 6.72s
-#define ISSI3733_ABCR2_T3_1344 0xC0 // 13.44s
-#define ISSI3733_ABCR2_T3_2688 0xE0 // 26.88s
+#define ISSI3733_ABCR2_T3_0021 0x00 // 0.21s
+#define ISSI3733_ABCR2_T3_0042 0x20 // 0.42s
+#define ISSI3733_ABCR2_T3_0084 0x40 // 0.84s
+#define ISSI3733_ABCR2_T3_0168 0x60 // 1.68s
+#define ISSI3733_ABCR2_T3_0336 0x80 // 3.36s
+#define ISSI3733_ABCR2_T3_0672 0xA0 // 6.72s
+#define ISSI3733_ABCR2_T3_1344 0xC0 // 13.44s
+#define ISSI3733_ABCR2_T3_2688 0xE0 // 26.88s
// Min value time
-#define ISSI3733_ABCR2_T4_0000 0x00 // 0s
-#define ISSI3733_ABCR2_T4_0021 0x02 // 0.21s
-#define ISSI3733_ABCR2_T4_0042 0x04 // 0.42s
-#define ISSI3733_ABCR2_T4_0084 0x06 // 0.84s
-#define ISSI3733_ABCR2_T4_0168 0x08 // 1.68s
-#define ISSI3733_ABCR2_T4_0336 0x0A // 3.36s
-#define ISSI3733_ABCR2_T4_0672 0x0C // 6.72s
-#define ISSI3733_ABCR2_T4_1344 0x0E // 13.44s
-#define ISSI3733_ABCR2_T4_2688 0x10 // 26.88s
-#define ISSI3733_ABCR2_T4_5376 0x12 // 53.76s
-#define ISSI3733_ABCR2_T4_10752 0x14 // 107.52s
+#define ISSI3733_ABCR2_T4_0000 0x00 // 0s
+#define ISSI3733_ABCR2_T4_0021 0x02 // 0.21s
+#define ISSI3733_ABCR2_T4_0042 0x04 // 0.42s
+#define ISSI3733_ABCR2_T4_0084 0x06 // 0.84s
+#define ISSI3733_ABCR2_T4_0168 0x08 // 1.68s
+#define ISSI3733_ABCR2_T4_0336 0x0A // 3.36s
+#define ISSI3733_ABCR2_T4_0672 0x0C // 6.72s
+#define ISSI3733_ABCR2_T4_1344 0x0E // 13.44s
+#define ISSI3733_ABCR2_T4_2688 0x10 // 26.88s
+#define ISSI3733_ABCR2_T4_5376 0x12 // 53.76s
+#define ISSI3733_ABCR2_T4_10752 0x14 // 107.52s
// PG3: Auto Breath Control Register 3
-#define ISSI3733_ABCR3_ABM1 0x04 // Auto Breath Control Register 3 of ABM-1
-#define ISSI3733_ABCR3_ABM2 0x08 // Auto Breath Control Register 3 of ABM-2
-#define ISSI3733_ABCR3_ABM3 0x0C // Auto Breath Control Register 3 of ABM-3
+#define ISSI3733_ABCR3_ABM1 0x04 // Auto Breath Control Register 3 of ABM-1
+#define ISSI3733_ABCR3_ABM2 0x08 // Auto Breath Control Register 3 of ABM-2
+#define ISSI3733_ABCR3_ABM3 0x0C // Auto Breath Control Register 3 of ABM-3
#define ISSI3733_ABCR3_LTA_LOOP_ENDLESS 0x00
#define ISSI3733_ABCR3_LTA_LOOP_1 0x01
@@ -158,44 +158,44 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ISSI3733_ABCR3_LB_T4 0x30
// Loop End
-#define ISSI3733_ABCR3_LE_T3 0x00 // End at Off state
-#define ISSI3733_ABCR3_LE_T1 0x40 // End at On State
+#define ISSI3733_ABCR3_LE_T3 0x00 // End at Off state
+#define ISSI3733_ABCR3_LE_T1 0x40 // End at On State
// PG3: Auto Breath Control Register 4
-#define ISSI3733_ABCR4_ABM1 0x05 // Auto Breath Control Register 4 of ABM-1
-#define ISSI3733_ABCR4_ABM2 0x09 // Auto Breath Control Register 4 of ABM-2
-#define ISSI3733_ABCR4_ABM3 0x0D // Auto Breath Control Register 4 of ABM-3
+#define ISSI3733_ABCR4_ABM1 0x05 // Auto Breath Control Register 4 of ABM-1
+#define ISSI3733_ABCR4_ABM2 0x09 // Auto Breath Control Register 4 of ABM-2
+#define ISSI3733_ABCR4_ABM3 0x0D // Auto Breath Control Register 4 of ABM-3
#define ISSI3733_ABCR4_LTB_LOOP_ENDLESS 0x00
// Or 8bit loop times
// PG3: Time Update Register
#define ISSI3733_TUR 0x0E
-#define ISSI3733_TUR_UPDATE 0x00 // Write to update 02h~0Dh time registers after configuring
+#define ISSI3733_TUR_UPDATE 0x00 // Write to update 02h~0Dh time registers after configuring
// PG3: SWy Pull-Up Resistor Selection Register
#define ISSI3733_SWYR_PUR 0x0F
-#define ISSI3733_SWYR_PUR_NONE 0x00 // No pull-up resistor
-#define ISSI3733_SWYR_PUR_500 0x01 // 0.5k Ohm
-#define ISSI3733_SWYR_PUR_1000 0x02 // 1.0k Ohm
-#define ISSI3733_SWYR_PUR_2000 0x03 // 2.0k Ohm
-#define ISSI3733_SWYR_PUR_4000 0x04 // 4.0k Ohm
-#define ISSI3733_SWYR_PUR_8000 0x05 // 8.0k Ohm
-#define ISSI3733_SWYR_PUR_16000 0x06 // 16k Ohm
-#define ISSI3733_SWYR_PUR_32000 0x07 // 32k Ohm
+#define ISSI3733_SWYR_PUR_NONE 0x00 // No pull-up resistor
+#define ISSI3733_SWYR_PUR_500 0x01 // 0.5k Ohm
+#define ISSI3733_SWYR_PUR_1000 0x02 // 1.0k Ohm
+#define ISSI3733_SWYR_PUR_2000 0x03 // 2.0k Ohm
+#define ISSI3733_SWYR_PUR_4000 0x04 // 4.0k Ohm
+#define ISSI3733_SWYR_PUR_8000 0x05 // 8.0k Ohm
+#define ISSI3733_SWYR_PUR_16000 0x06 // 16k Ohm
+#define ISSI3733_SWYR_PUR_32000 0x07 // 32k Ohm
// PG3: CSx Pull-Down Resistor Selection Register
#define ISSI3733_CSXR_PDR 0x10
-#define ISSI3733_CSXR_PDR_NONE 0x00 // No pull-down resistor
-#define ISSI3733_CSXR_PDR_500 0x01 // 0.5k Ohm
-#define ISSI3733_CSXR_PDR_1000 0x02 // 1.0k Ohm
-#define ISSI3733_CSXR_PDR_2000 0x03 // 2.0k Ohm
-#define ISSI3733_CSXR_PDR_4000 0x04 // 4.0k Ohm
-#define ISSI3733_CSXR_PDR_8000 0x05 // 8.0k Ohm
-#define ISSI3733_CSXR_PDR_16000 0x06 // 16k Ohm
-#define ISSI3733_CSXR_PDR_32000 0x07 // 32k Ohm
+#define ISSI3733_CSXR_PDR_NONE 0x00 // No pull-down resistor
+#define ISSI3733_CSXR_PDR_500 0x01 // 0.5k Ohm
+#define ISSI3733_CSXR_PDR_1000 0x02 // 1.0k Ohm
+#define ISSI3733_CSXR_PDR_2000 0x03 // 2.0k Ohm
+#define ISSI3733_CSXR_PDR_4000 0x04 // 4.0k Ohm
+#define ISSI3733_CSXR_PDR_8000 0x05 // 8.0k Ohm
+#define ISSI3733_CSXR_PDR_16000 0x06 // 16k Ohm
+#define ISSI3733_CSXR_PDR_32000 0x07 // 32k Ohm
// PG3: Reset Register
-#define ISSI3733_RR 0x11 // Read to reset all registers to default values
+#define ISSI3733_RR 0x11 // Read to reset all registers to default values
-#endif //_ISSI3733_DRIVER_H_
+#endif //_ISSI3733_DRIVER_H_
diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
index de12821a74..d092da8682 100644
--- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c
+++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
@@ -31,7 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// From keyboard's directory
#include "config_led.h"
-uint8_t g_usb_state = USB_FSMSTATUS_FSMSTATE_OFF_Val; // Saved USB state from hardware value to detect changes
+uint8_t g_usb_state = USB_FSMSTATUS_FSMSTATE_OFF_Val; // Saved USB state from hardware value to detect changes
void main_subtasks(void);
uint8_t keyboard_leds(void);
@@ -42,7 +42,7 @@ void send_consumer(uint16_t data);
#ifdef DEFERRED_EXEC_ENABLE
void deferred_exec_task(void);
-#endif // DEFERRED_EXEC_ENABLE
+#endif // DEFERRED_EXEC_ENABLE
host_driver_t arm_atsam_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
@@ -53,7 +53,7 @@ uint8_t keyboard_leds(void) {
if (keymap_config.nkro)
return udi_hid_nkro_report_set;
else
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
return udi_hid_kbd_report_set;
}
@@ -62,10 +62,10 @@ void send_keyboard(report_keyboard_t *report) {
#ifdef NKRO_ENABLE
if (!keymap_config.nkro) {
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
while (udi_hid_kbd_b_report_trans_ongoing) {
main_subtasks();
- } // Run other tasks while waiting for USB to be free
+ } // Run other tasks while waiting for USB to be free
irqflags = __get_PRIMASK();
__disable_irq();
@@ -81,7 +81,7 @@ void send_keyboard(report_keyboard_t *report) {
} else {
while (udi_hid_nkro_b_report_trans_ongoing) {
main_subtasks();
- } // Run other tasks while waiting for USB to be free
+ } // Run other tasks while waiting for USB to be free
irqflags = __get_PRIMASK();
__disable_irq();
@@ -94,7 +94,7 @@ void send_keyboard(report_keyboard_t *report) {
__DMB();
__set_PRIMASK(irqflags);
}
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
}
void send_mouse(report_mouse_t *report) {
@@ -111,7 +111,7 @@ void send_mouse(report_mouse_t *report) {
__DMB();
__set_PRIMASK(irqflags);
-#endif // MOUSEKEY_ENABLE
+#endif // MOUSEKEY_ENABLE
}
#ifdef EXTRAKEY_ENABLE
@@ -130,18 +130,18 @@ void send_extra(uint8_t report_id, uint16_t data) {
__DMB();
__set_PRIMASK(irqflags);
}
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
send_extra(REPORT_ID_SYSTEM, data);
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
}
void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
send_extra(REPORT_ID_CONSUMER, data);
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
}
#ifdef CONSOLE_ENABLE
@@ -158,81 +158,81 @@ int8_t sendchar(uint8_t c) {
void main_subtask_console_flush(void) {
while (udi_hid_con_b_report_trans_ongoing) {
- } // Wait for any previous transfers to complete
+ } // Wait for any previous transfers to complete
uint16_t result = console_printbuf_len;
uint32_t irqflags;
- char * pconbuf = console_printbuf; // Pointer to start send from
- int send_out = CONSOLE_EPSIZE; // Bytes to send per transfer
+ char * pconbuf = console_printbuf; // Pointer to start send from
+ int send_out = CONSOLE_EPSIZE; // Bytes to send per transfer
- while (result > 0) { // While not error and bytes remain
+ while (result > 0) { // While not error and bytes remain
while (udi_hid_con_b_report_trans_ongoing) {
- } // Wait for any previous transfers to complete
+ } // Wait for any previous transfers to complete
irqflags = __get_PRIMASK();
__disable_irq();
__DMB();
- if (result < CONSOLE_EPSIZE) { // If remaining bytes are less than console epsize
- memset(udi_hid_con_report, 0, CONSOLE_EPSIZE); // Clear the buffer
- send_out = result; // Send remaining size
+ if (result < CONSOLE_EPSIZE) { // If remaining bytes are less than console epsize
+ memset(udi_hid_con_report, 0, CONSOLE_EPSIZE); // Clear the buffer
+ send_out = result; // Send remaining size
}
- memcpy(udi_hid_con_report, pconbuf, send_out); // Copy data into the send buffer
+ memcpy(udi_hid_con_report, pconbuf, send_out); // Copy data into the send buffer
- udi_hid_con_b_report_valid = 1; // Set report valid
- udi_hid_con_send_report(); // Send report
+ udi_hid_con_b_report_valid = 1; // Set report valid
+ udi_hid_con_send_report(); // Send report
__DMB();
__set_PRIMASK(irqflags);
- result -= send_out; // Decrement result by bytes sent
- pconbuf += send_out; // Increment buffer point by bytes sent
+ result -= send_out; // Decrement result by bytes sent
+ pconbuf += send_out; // Increment buffer point by bytes sent
}
console_printbuf_len = 0;
}
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
void main_subtask_usb_state(void) {
- static uint64_t fsmstate_on_delay = 0; // Delay timer to be sure USB is actually operating before bringing up hardware
- uint8_t fsmstate_now = USB->DEVICE.FSMSTATUS.reg; // Current state from hardware register
+ static uint64_t fsmstate_on_delay = 0; // Delay timer to be sure USB is actually operating before bringing up hardware
+ uint8_t fsmstate_now = USB->DEVICE.FSMSTATUS.reg; // Current state from hardware register
- if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) // If USB SUSPENDED
+ if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) // If USB SUSPENDED
{
- fsmstate_on_delay = 0; // Clear ON delay timer
+ fsmstate_on_delay = 0; // Clear ON delay timer
- if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) // If previously not SUSPENDED
+ if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) // If previously not SUSPENDED
{
- suspend_power_down(); // Run suspend routine
- g_usb_state = fsmstate_now; // Save current USB state
+ suspend_power_down(); // Run suspend routine
+ g_usb_state = fsmstate_now; // Save current USB state
}
- } else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SLEEP_Val) // Else if USB SLEEPING
+ } else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SLEEP_Val) // Else if USB SLEEPING
{
- fsmstate_on_delay = 0; // Clear ON delay timer
+ fsmstate_on_delay = 0; // Clear ON delay timer
- if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SLEEP_Val) // If previously not SLEEPING
+ if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SLEEP_Val) // If previously not SLEEPING
{
- suspend_power_down(); // Run suspend routine
- g_usb_state = fsmstate_now; // Save current USB state
+ suspend_power_down(); // Run suspend routine
+ g_usb_state = fsmstate_now; // Save current USB state
}
- } else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_ON_Val) // Else if USB ON
+ } else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_ON_Val) // Else if USB ON
{
- if (g_usb_state != USB_FSMSTATUS_FSMSTATE_ON_Val) // If previously not ON
+ if (g_usb_state != USB_FSMSTATUS_FSMSTATE_ON_Val) // If previously not ON
{
- if (fsmstate_on_delay == 0) // If ON delay timer is cleared
+ if (fsmstate_on_delay == 0) // If ON delay timer is cleared
{
- fsmstate_on_delay = timer_read64() + 250; // Set ON delay timer
- } else if (timer_read64() > fsmstate_on_delay) // Else if ON delay timer is active and timed out
+ fsmstate_on_delay = timer_read64() + 250; // Set ON delay timer
+ } else if (timer_read64() > fsmstate_on_delay) // Else if ON delay timer is active and timed out
{
- suspend_wakeup_init(); // Run wakeup routine
- g_usb_state = fsmstate_now; // Save current USB state
+ suspend_wakeup_init(); // Run wakeup routine
+ g_usb_state = fsmstate_now; // Save current USB state
}
}
- } else // Else if USB is in a state not being tracked
+ } else // Else if USB is in a state not being tracked
{
- fsmstate_on_delay = 0; // Clear ON delay timer
+ fsmstate_on_delay = 0; // Clear ON delay timer
}
}
@@ -262,7 +262,9 @@ void main_subtask_usb_extra_device(void) {
}
#ifdef RAW_ENABLE
-void main_subtask_raw(void) { udi_hid_raw_receive_report(); }
+void main_subtask_raw(void) {
+ udi_hid_raw_receive_report();
+}
#endif
void main_subtasks(void) {
@@ -296,7 +298,7 @@ int main(void) {
#ifdef RGB_MATRIX_ENABLE
i2c1_init();
-#endif // RGB_MATRIX_ENABLE
+#endif // RGB_MATRIX_ENABLE
matrix_init();
@@ -325,8 +327,9 @@ int main(void) {
i2c_led_q_init();
- for (uint8_t drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++) I2C_LED_Q_ONOFF(drvid); // Queue data
-#endif // RGB_MATRIX_ENABLE
+ for (uint8_t drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++)
+ I2C_LED_Q_ONOFF(drvid); // Queue data
+#endif // RGB_MATRIX_ENABLE
keyboard_setup();
@@ -336,18 +339,18 @@ int main(void) {
#ifdef CONSOLE_ENABLE
uint64_t next_print = 0;
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
v_5v_avg = adc_get(ADC_5V);
debug_code_disable();
while (1) {
- main_subtasks(); // Note these tasks will also be run while waiting for USB keyboard polling intervals
+ main_subtasks(); // Note these tasks will also be run while waiting for USB keyboard polling intervals
if (g_usb_state == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val || g_usb_state == USB_FSMSTATUS_FSMSTATE_SLEEP_Val) {
if (suspend_wakeup_condition()) {
- udc_remotewakeup(); // Send remote wakeup signal
+ udc_remotewakeup(); // Send remote wakeup signal
wait_ms(50);
}
@@ -362,12 +365,12 @@ int main(void) {
// Add any debug information here that you want to see very often
// dprintf("5v=%u 5vu=%u dlow=%u dhi=%u gca=%u gcd=%u\r\n", v_5v, v_5v_avg, v_5v_avg - V5_LOW, v_5v_avg - V5_HIGH, gcr_actual, gcr_desired);
}
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
#ifdef DEFERRED_EXEC_ENABLE
// Run deferred executions
deferred_exec_task();
-#endif // DEFERRED_EXEC_ENABLE
+#endif // DEFERRED_EXEC_ENABLE
// Run housekeeping
housekeeping_task();
diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.h b/tmk_core/protocol/arm_atsam/main_arm_atsam.h
index 5b088f0e20..78205e2e1b 100644
--- a/tmk_core/protocol/arm_atsam/main_arm_atsam.h
+++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.h
@@ -20,4 +20,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
uint8_t keyboard_leds(void);
-#endif //_MAIN_ARM_ATSAM_H_
+#endif //_MAIN_ARM_ATSAM_H_
diff --git a/tmk_core/protocol/arm_atsam/md_bootloader.h b/tmk_core/protocol/arm_atsam/md_bootloader.h
deleted file mode 100644
index 362b9bd52a..0000000000
--- a/tmk_core/protocol/arm_atsam/md_bootloader.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _MD_BOOTLOADER_H_
-#define _MD_BOOTLOADER_H_
-
-extern uint32_t _srom;
-extern uint32_t _lrom;
-extern uint32_t _erom;
-
-#define BOOTLOADER_SERIAL_MAX_SIZE 20 // DO NOT MODIFY!
-
-#ifdef KEYBOARD_massdrop_ctrl
-// WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support
-extern uint32_t _eram;
-# define BOOTLOADER_MAGIC 0x3B9ACA00
-# define MAGIC_ADDR (uint32_t *)((intptr_t)(&_eram) - 4)
-#endif
-
-#ifdef MD_BOOTLOADER
-
-# define MCU_HZ 48000000
-# define I2C_HZ 0 // Not used
-
-#endif // MD_BOOTLOADER
-
-#endif //_MD_BOOTLOADER_H_
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c
index 0741584439..84ce3ee24b 100644
--- a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c
+++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c
@@ -53,16 +53,20 @@ void eeconfig_update_md_led_default(void) {
eeconfig_flush_md_led(true);
}
-void md_led_changed(void) { eeconfig_flag_md_led(true); }
+void md_led_changed(void) {
+ eeconfig_flag_md_led(true);
+}
// todo: use real task rather than this bodge
-void housekeeping_task_kb(void) { eeconfig_flush_md_led_task(FLUSH_TIMEOUT); }
+void housekeeping_task_kb(void) {
+ eeconfig_flush_md_led_task(FLUSH_TIMEOUT);
+}
__attribute__((weak)) led_instruction_t led_instructions[] = {{.end = 1}};
static void md_rgb_matrix_config_override(int i);
# else
uint8_t gcr_desired;
-# endif // USE_MASSDROP_CONFIGURATOR
+# endif // USE_MASSDROP_CONFIGURATOR
void SERCOM1_0_Handler(void) {
if (SERCOM1->I2CM.INTFLAG.bit.ERROR) {
@@ -125,9 +129,9 @@ void gcr_compute(void) {
if (v_5v < V5_CAT) {
I2C3733_Control_Set(0);
// CDC_print("USB: WARNING: 5V catastrophic level reached! Disabling LED drivers!\r\n"); //Blocking print is bad here!
- v_5v_cat_hit = 20; //~100ms recover
- gcr_actual = 0; // Minimize GCR
- usb_gcr_auto = 1; // Force auto mode enabled
+ v_5v_cat_hit = 20; //~100ms recover
+ gcr_actual = 0; // Minimize GCR
+ usb_gcr_auto = 1; // Force auto mode enabled
return;
} else if (v_5v_cat_hit > 1) {
v_5v_cat_hit--;
@@ -157,24 +161,24 @@ void gcr_compute(void) {
gcr_min_counter = 0;
} else if (action == ACT_GCR_INC) {
if (LED_GCR_STEP_AUTO > LED_GCR_MAX - gcr_actual)
- gcr_actual = LED_GCR_MAX; // Obey max and prevent wrapping
+ gcr_actual = LED_GCR_MAX; // Obey max and prevent wrapping
else
gcr_actual += LED_GCR_STEP_AUTO;
gcr_min_counter = 0;
} else if (action == ACT_GCR_DEC) {
- if (LED_GCR_STEP_AUTO > gcr_actual) // Prevent wrapping
+ if (LED_GCR_STEP_AUTO > gcr_actual) // Prevent wrapping
{
gcr_actual = 0;
// At this point, power can no longer be cut from the LED drivers, so focus on cutting out extra port if active
- if (usb_extra_state != USB_EXTRA_STATE_DISABLED_UNTIL_REPLUG) // If not in a wait for replug state
+ if (usb_extra_state != USB_EXTRA_STATE_DISABLED_UNTIL_REPLUG) // If not in a wait for replug state
{
- if (usb_extra_state == USB_EXTRA_STATE_ENABLED) // If extra usb is enabled
+ if (usb_extra_state == USB_EXTRA_STATE_ENABLED) // If extra usb is enabled
{
gcr_min_counter++;
- if (gcr_min_counter > 200) // 5ms per check = 1s delay
+ if (gcr_min_counter > 200) // 5ms per check = 1s delay
{
USB_ExtraSetState(USB_EXTRA_STATE_DISABLED_UNTIL_REPLUG);
- usb_extra_manual = 0; // Force disable manual mode of extra port
+ usb_extra_manual = 0; // Force disable manual mode of extra port
if (usb_extra_manual)
CDC_print("USB: Disabling extra port until replug and manual mode toggle!\r\n");
else
@@ -275,11 +279,11 @@ static void flush(void) {
# ifdef USE_MASSDROP_CONFIGURATOR
if (!led_enabled) {
return;
- } // Prevent calculations and I2C traffic if LED drivers are not enabled
+ } // Prevent calculations and I2C traffic if LED drivers are not enabled
# else
if (!sr_exp_data.bit.SDB_N) {
return;
- } // Prevent calculations and I2C traffic if LED drivers are not enabled
+ } // Prevent calculations and I2C traffic if LED drivers are not enabled
# endif
// Wait for previous transfer to complete
@@ -319,17 +323,19 @@ static void flush(void) {
pomod = (uint32_t)pomod % 10000;
pomod /= 100.0f;
-# endif // USE_MASSDROP_CONFIGURATOR
+# endif // USE_MASSDROP_CONFIGURATOR
uint8_t drvid;
// NOTE: GCR does not need to be timed with LED processing, but there is really no harm
if (gcr_actual != gcr_actual_last) {
- for (drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++) I2C_LED_Q_GCR(drvid); // Queue data
+ for (drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++)
+ I2C_LED_Q_GCR(drvid); // Queue data
gcr_actual_last = gcr_actual;
}
- for (drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++) I2C_LED_Q_PWM(drvid); // Queue data
+ for (drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++)
+ I2C_LED_Q_PWM(drvid); // Queue data
i2c_led_q_run();
}
@@ -341,19 +347,19 @@ void md_rgb_matrix_indicators_advanced(uint8_t led_min, uint8_t led_max) {
if (
# if USB_LED_NUM_LOCK_SCANCODE != 255
(led_map[i].scan == USB_LED_NUM_LOCK_SCANCODE && (kbled & (1 << USB_LED_NUM_LOCK))) ||
-# endif // NUM LOCK
+# endif // NUM LOCK
# if USB_LED_CAPS_LOCK_SCANCODE != 255
(led_map[i].scan == USB_LED_CAPS_LOCK_SCANCODE && (kbled & (1 << USB_LED_CAPS_LOCK))) ||
-# endif // CAPS LOCK
+# endif // CAPS LOCK
# if USB_LED_SCROLL_LOCK_SCANCODE != 255
(led_map[i].scan == USB_LED_SCROLL_LOCK_SCANCODE && (kbled & (1 << USB_LED_SCROLL_LOCK))) ||
-# endif // SCROLL LOCK
+# endif // SCROLL LOCK
# if USB_LED_COMPOSE_SCANCODE != 255
(led_map[i].scan == USB_LED_COMPOSE_SCANCODE && (kbled & (1 << USB_LED_COMPOSE))) ||
-# endif // COMPOSE
+# endif // COMPOSE
# if USB_LED_KANA_SCANCODE != 255
(led_map[i].scan == USB_LED_KANA_SCANCODE && (kbled & (1 << USB_LED_KANA))) ||
-# endif // KANA
+# endif // KANA
(0)) {
if (rgb_matrix_get_flags() & LED_FLAG_INDICATOR) {
led_buffer[i].r = 255 - led_buffer[i].r;
@@ -378,7 +384,7 @@ static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, flo
float po;
while (f->end != 1) {
- po = pos; // Reset po for new frame
+ po = pos; // Reset po for new frame
// Add in any moving effects
if ((!led_animation_direction && f->ef & EF_SCR_R) || (led_animation_direction && (f->ef & EF_SCR_L))) {
@@ -413,17 +419,17 @@ static void led_run_pattern(led_setup_t* f, float* ro, float* go, float* bo, flo
// Add in any color effects
if (f->ef & EF_OVER) {
- *ro = (po * (f->re - f->rs)) + f->rs; // + 0.5;
- *go = (po * (f->ge - f->gs)) + f->gs; // + 0.5;
- *bo = (po * (f->be - f->bs)) + f->bs; // + 0.5;
+ *ro = (po * (f->re - f->rs)) + f->rs; // + 0.5;
+ *go = (po * (f->ge - f->gs)) + f->gs; // + 0.5;
+ *bo = (po * (f->be - f->bs)) + f->bs; // + 0.5;
} else if (f->ef & EF_SUBTRACT) {
- *ro -= (po * (f->re - f->rs)) + f->rs; // + 0.5;
- *go -= (po * (f->ge - f->gs)) + f->gs; // + 0.5;
- *bo -= (po * (f->be - f->bs)) + f->bs; // + 0.5;
+ *ro -= (po * (f->re - f->rs)) + f->rs; // + 0.5;
+ *go -= (po * (f->ge - f->gs)) + f->gs; // + 0.5;
+ *bo -= (po * (f->be - f->bs)) + f->bs; // + 0.5;
} else {
- *ro += (po * (f->re - f->rs)) + f->rs; // + 0.5;
- *go += (po * (f->ge - f->gs)) + f->gs; // + 0.5;
- *bo += (po * (f->be - f->bs)) + f->bs; // + 0.5;
+ *ro += (po * (f->re - f->rs)) + f->rs; // + 0.5;
+ *go += (po * (f->ge - f->gs)) + f->gs; // + 0.5;
+ *bo += (po * (f->be - f->bs)) + f->bs; // + 0.5;
}
f++;
@@ -471,10 +477,10 @@ static void md_rgb_matrix_config_override(int i) {
// Check if this applies to current index
if (led_cur_instruction->flags & LED_FLAG_MATCH_ID) {
- uint8_t modid = i / 32; // Calculate which id# contains the led bit
- uint32_t modidbit = 1 << (i % 32); // Calculate the bit within the id#
- uint32_t* bitfield = &led_cur_instruction->id0 + modid; // Add modid as offset to id0 address. *bitfield is now idX of the led id
- if (~(*bitfield) & modidbit) { // Check if led bit is not set in idX
+ uint8_t modid = i / 32; // Calculate which id# contains the led bit
+ uint32_t modidbit = 1 << (i % 32); // Calculate the bit within the id#
+ uint32_t* bitfield = &led_cur_instruction->id0 + modid; // Add modid as offset to id0 address. *bitfield is now idX of the led id
+ if (~(*bitfield) & modidbit) { // Check if led bit is not set in idX
goto next_iter;
}
}
@@ -538,5 +544,5 @@ static void md_rgb_matrix_config_override(int i) {
led_buffer[i].b = (uint8_t)bo;
}
-# endif // USE_MASSDROP_CONFIGURATOR
-#endif // RGB_MATRIX_ENABLE
+# endif // USE_MASSDROP_CONFIGURATOR
+#endif // RGB_MATRIX_ENABLE
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix.h b/tmk_core/protocol/arm_atsam/md_rgb_matrix.h
index deea12b888..f27da028a0 100644
--- a/tmk_core/protocol/arm_atsam/md_rgb_matrix.h
+++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix.h
@@ -31,10 +31,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ISSI3733_SW_COUNT 12
#define ISSI3733_LED_RGB_COUNT ISSI3733_CS_COUNT *ISSI3733_SW_COUNT
-#define ISSI3733_PG0_BYTES ISSI3733_LED_RGB_COUNT / 8 + 1 //+1 for first byte being memory start offset for I2C transfer
-#define ISSI3733_PG1_BYTES ISSI3733_LED_RGB_COUNT + 1 //+1 for first byte being memory start offset for I2C transfer
-#define ISSI3733_PG2_BYTES ISSI3733_LED_RGB_COUNT + 1 //+1 for first byte being memory start offset for I2C transfer
-#define ISSI3733_PG3_BYTES 18 + 1 //+1 for first byte being memory start offset for I2C transfer
+#define ISSI3733_PG0_BYTES ISSI3733_LED_RGB_COUNT / 8 + 1 //+1 for first byte being memory start offset for I2C transfer
+#define ISSI3733_PG1_BYTES ISSI3733_LED_RGB_COUNT + 1 //+1 for first byte being memory start offset for I2C transfer
+#define ISSI3733_PG2_BYTES ISSI3733_LED_RGB_COUNT + 1 //+1 for first byte being memory start offset for I2C transfer
+#define ISSI3733_PG3_BYTES 18 + 1 //+1 for first byte being memory start offset for I2C transfer
#define ISSI3733_PG_ONOFF_BYTES ISSI3733_PG0_BYTES
#define ISSI3733_PG_OR_BYTES ISSI3733_PG0_BYTES
@@ -44,38 +44,38 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ISSI3733_PG_FN_BYTES ISSI3733_PG3_BYTES
typedef struct issi3733_driver_s {
- uint8_t addr; // Address of the driver according to wiring "ISSI3733: Table 1 Slave Address"
- uint8_t onoff[ISSI3733_PG_ONOFF_BYTES]; // PG0 - LED Control Register - LED On/Off Register
- uint8_t open[ISSI3733_PG_OR_BYTES]; // PG0 - LED Control Register - LED Open Register
- uint8_t shrt[ISSI3733_PG_SR_BYTES]; // PG0 - LED Control Register - LED Short Register
- uint8_t pwm[ISSI3733_PG_PWM_BYTES]; // PG1 - PWM Register
- uint8_t abm[ISSI3733_PG_ABM_BYTES]; // PG2 - Auto Breath Mode Register
- uint8_t conf[ISSI3733_PG_FN_BYTES]; // PG3 - Function Register
+ uint8_t addr; // Address of the driver according to wiring "ISSI3733: Table 1 Slave Address"
+ uint8_t onoff[ISSI3733_PG_ONOFF_BYTES]; // PG0 - LED Control Register - LED On/Off Register
+ uint8_t open[ISSI3733_PG_OR_BYTES]; // PG0 - LED Control Register - LED Open Register
+ uint8_t shrt[ISSI3733_PG_SR_BYTES]; // PG0 - LED Control Register - LED Short Register
+ uint8_t pwm[ISSI3733_PG_PWM_BYTES]; // PG1 - PWM Register
+ uint8_t abm[ISSI3733_PG_ABM_BYTES]; // PG2 - Auto Breath Mode Register
+ uint8_t conf[ISSI3733_PG_FN_BYTES]; // PG3 - Function Register
} issi3733_driver_t;
typedef struct issi3733_rgb_s {
- uint8_t *r; // Direct access into PWM data
- uint8_t *g; // Direct access into PWM data
- uint8_t *b; // Direct access into PWM data
+ uint8_t *r; // Direct access into PWM data
+ uint8_t *g; // Direct access into PWM data
+ uint8_t *b; // Direct access into PWM data
} issi3733_rgb_t;
typedef struct issi3733_rgb_adr_s {
- uint8_t drv; // Driver from given list
- uint8_t cs; // CS
- uint8_t swr; // SW Red
- uint8_t swg; // SW Green
- uint8_t swb; // SW Blue
+ uint8_t drv; // Driver from given list
+ uint8_t cs; // CS
+ uint8_t swr; // SW Red
+ uint8_t swg; // SW Green
+ uint8_t swb; // SW Blue
} issi3733_rgb_adr_t;
typedef struct issi3733_led_s {
- uint8_t id; // According to PCB ref
- issi3733_rgb_t rgb; // PWM settings of R G B
- issi3733_rgb_adr_t adr; // Hardware addresses
- float x; // Physical position X
- float y; // Physical position Y
- float px; // Physical position X in percent
- float py; // Physical position Y in percent
- uint8_t scan; // Key scan code from wiring (set 0xFF if no key)
+ uint8_t id; // According to PCB ref
+ issi3733_rgb_t rgb; // PWM settings of R G B
+ issi3733_rgb_adr_t adr; // Hardware addresses
+ float x; // Physical position X
+ float y; // Physical position Y
+ float px; // Physical position X in percent
+ float py; // Physical position Y in percent
+ uint8_t scan; // Key scan code from wiring (set 0xFF if no key)
} issi3733_led_t;
extern issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
@@ -92,44 +92,44 @@ void md_rgb_matrix_indicators_advanced(uint8_t led_min, uint8_t led_max);
#ifdef USE_MASSDROP_CONFIGURATOR
-# define EF_NONE 0x00000000 // No effect
-# define EF_OVER 0x00000001 // Overwrite any previous color information with new
-# define EF_SCR_L 0x00000002 // Scroll left
-# define EF_SCR_R 0x00000004 // Scroll right
-# define EF_SUBTRACT 0x00000008 // Subtract color values
+# define EF_NONE 0x00000000 // No effect
+# define EF_OVER 0x00000001 // Overwrite any previous color information with new
+# define EF_SCR_L 0x00000002 // Scroll left
+# define EF_SCR_R 0x00000004 // Scroll right
+# define EF_SUBTRACT 0x00000008 // Subtract color values
typedef struct led_setup_s {
- float hs; // Band begin at percent
- float he; // Band end at percent
- uint8_t rs; // Red start value
- uint8_t re; // Red end value
- uint8_t gs; // Green start value
- uint8_t ge; // Green end value
- uint8_t bs; // Blue start value
- uint8_t be; // Blue end value
- uint32_t ef; // Animation and color effects
- uint8_t end; // Set to signal end of the setup
+ float hs; // Band begin at percent
+ float he; // Band end at percent
+ uint8_t rs; // Red start value
+ uint8_t re; // Red end value
+ uint8_t gs; // Green start value
+ uint8_t ge; // Green end value
+ uint8_t bs; // Blue start value
+ uint8_t be; // Blue end value
+ uint32_t ef; // Animation and color effects
+ uint8_t end; // Set to signal end of the setup
} led_setup_t;
extern const uint8_t led_setups_count;
extern void * led_setups[];
// LED Extra Instructions
-# define LED_FLAG_NULL 0x00 // Matching and coloring not used (default)
-# define LED_FLAG_MATCH_ID 0x01 // Match on the ID of the LED (set id#'s to desired bit pattern, first LED is id 1)
-# define LED_FLAG_MATCH_LAYER 0x02 // Match on the current active layer (set layer to desired match layer)
-# define LED_FLAG_USE_RGB 0x10 // Use a specific RGB value (set r, g, b to desired output color values)
-# define LED_FLAG_USE_PATTERN 0x20 // Use a specific pattern ID (set pattern_id to desired output pattern)
-# define LED_FLAG_USE_ROTATE_PATTERN 0x40 // Use pattern the user has cycled to manually
+# define LED_FLAG_NULL 0x00 // Matching and coloring not used (default)
+# define LED_FLAG_MATCH_ID 0x01 // Match on the ID of the LED (set id#'s to desired bit pattern, first LED is id 1)
+# define LED_FLAG_MATCH_LAYER 0x02 // Match on the current active layer (set layer to desired match layer)
+# define LED_FLAG_USE_RGB 0x10 // Use a specific RGB value (set r, g, b to desired output color values)
+# define LED_FLAG_USE_PATTERN 0x20 // Use a specific pattern ID (set pattern_id to desired output pattern)
+# define LED_FLAG_USE_ROTATE_PATTERN 0x40 // Use pattern the user has cycled to manually
typedef struct led_instruction_s {
- uint16_t flags; // Bitfield for LED instructions
- uint32_t id0; // Bitwise id, IDs 0-31
- uint32_t id1; // Bitwise id, IDs 32-63
- uint32_t id2; // Bitwise id, IDs 64-95
- uint32_t id3; // Bitwise id, IDs 96-127
- uint32_t id4; // Bitwise id, IDs 128-159
- uint32_t id5; // Bitwise id, IDs 160-191
+ uint16_t flags; // Bitfield for LED instructions
+ uint32_t id0; // Bitwise id, IDs 0-31
+ uint32_t id1; // Bitwise id, IDs 32-63
+ uint32_t id2; // Bitwise id, IDs 64-95
+ uint32_t id3; // Bitwise id, IDs 96-127
+ uint32_t id4; // Bitwise id, IDs 128-159
+ uint32_t id5; // Bitwise id, IDs 160-191
uint8_t layer;
uint8_t r;
uint8_t g;
@@ -141,7 +141,7 @@ typedef struct led_instruction_s {
extern led_instruction_t led_instructions[];
typedef struct led_config_s {
- uint8_t ver; // assumed to be zero on eeprom reset
+ uint8_t ver; // assumed to be zero on eeprom reset
uint8_t desired_gcr;
uint8_t animation_breathing;
@@ -178,27 +178,27 @@ void md_led_changed(void);
# define led_ratio_brightness md_led_config.ratio_brightness
# define led_edge_mode md_led_config.edge_mode
-# define LED_MODE_NORMAL 0 // Must be 0
+# define LED_MODE_NORMAL 0 // Must be 0
# define LED_MODE_KEYS_ONLY 1
# define LED_MODE_NON_KEYS_ONLY 2
# define LED_MODE_INDICATORS_ONLY 3
-# define LED_MODE_MAX_INDEX LED_MODE_INDICATORS_ONLY // Must be highest value
+# define LED_MODE_MAX_INDEX LED_MODE_INDICATORS_ONLY // Must be highest value
-# define LED_EDGE_MODE_ALL 0 // All edge LEDs are active (Must be 0)
-# define LED_EDGE_MODE_ALTERNATE 1 // Alternate mode of edge LEDs are active (Intention is for 'only every other edge LED' to be active)
-# define LED_EDGE_MODE_MAX LED_EDGE_MODE_ALTERNATE // Must be the highest valued LED edge mode
+# define LED_EDGE_MODE_ALL 0 // All edge LEDs are active (Must be 0)
+# define LED_EDGE_MODE_ALTERNATE 1 // Alternate mode of edge LEDs are active (Intention is for 'only every other edge LED' to be active)
+# define LED_EDGE_MODE_MAX LED_EDGE_MODE_ALTERNATE // Must be the highest valued LED edge mode
-# define LED_EDGE_FULL_MODE 255 // LEDs configured with this scan code will always be on for edge lighting modes
-# define LED_EDGE_ALT_MODE 254 // LEDs configured with this scan code will turn off in edge alternating mode
-# define LED_EDGE_MIN_SCAN 254 // LEDs configured with scan code >= to this are assigned as edge LEDs
-# define LED_INDICATOR_SCAN 253 // LEDs configured as dedicated indicators
+# define LED_EDGE_FULL_MODE 255 // LEDs configured with this scan code will always be on for edge lighting modes
+# define LED_EDGE_ALT_MODE 254 // LEDs configured with this scan code will turn off in edge alternating mode
+# define LED_EDGE_MIN_SCAN 254 // LEDs configured with scan code >= to this are assigned as edge LEDs
+# define LED_INDICATOR_SCAN 253 // LEDs configured as dedicated indicators
-# define LED_IS_KEY(scan) (scan < LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a key LED
-# define LED_IS_EDGE(scan) (scan >= LED_EDGE_MIN_SCAN) // Return true if an LED's scan value indicates an edge LED
-# define LED_IS_EDGE_ALT(scan) (scan == LED_EDGE_ALT_MODE) // Return true if an LED's scan value indicates an alternate edge mode LED
-# define LED_IS_INDICATOR(scan) (scan == LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a dedicated Indicator
+# define LED_IS_KEY(scan) (scan < LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a key LED
+# define LED_IS_EDGE(scan) (scan >= LED_EDGE_MIN_SCAN) // Return true if an LED's scan value indicates an edge LED
+# define LED_IS_EDGE_ALT(scan) (scan == LED_EDGE_ALT_MODE) // Return true if an LED's scan value indicates an alternate edge mode LED
+# define LED_IS_INDICATOR(scan) (scan == LED_INDICATOR_SCAN) // Return true if an LED's scan value indicates it is a dedicated Indicator
#else
extern uint8_t gcr_desired;
-#endif // USE_MASSDROP_CONFIGURATOR
+#endif // USE_MASSDROP_CONFIGURATOR
-#endif //_LED_MATRIX_H_
+#endif //_LED_MATRIX_H_
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
index 92b40b5b85..69b3ad574c 100644
--- a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
+++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
@@ -97,5 +97,5 @@ void *led_setups[] = {leds_rainbow_s, leds_rainbow_ns, leds_teal_salmon, leds_ye
const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
-# endif // USE_MASSDROP_CONFIGURATOR
-#endif // RGB_MATRIX_ENABLE \ No newline at end of file
+# endif // USE_MASSDROP_CONFIGURATOR
+#endif // RGB_MATRIX_ENABLE \ No newline at end of file
diff --git a/tmk_core/protocol/arm_atsam/shift_register.c b/tmk_core/protocol/arm_atsam/shift_register.c
index 8d63af1b59..3adb682aa8 100644
--- a/tmk_core/protocol/arm_atsam/shift_register.c
+++ b/tmk_core/protocol/arm_atsam/shift_register.c
@@ -54,7 +54,9 @@ void shift_out_impl(const uint8_t *data, uint16_t length) {
#else
-void shift_init_impl(void) { spi_init(); }
+void shift_init_impl(void) {
+ spi_init();
+}
void shift_out_impl(const uint8_t *data, uint16_t length) {
spi_start(SR_EXP_RCLK_PIN, true, 0, 0);
@@ -67,7 +69,9 @@ void shift_out_impl(const uint8_t *data, uint16_t length) {
// ***************************************************************
-void shift_out(const uint8_t *data, uint16_t length) { shift_out_impl(data, length); }
+void shift_out(const uint8_t *data, uint16_t length) {
+ shift_out_impl(data, length);
+}
void shift_enable(void) {
setPinOutput(SR_EXP_OE_PIN);
@@ -90,8 +94,8 @@ sr_exp_t sr_exp_data;
void SR_EXP_WriteData(void) {
uint8_t data[2] = {
- sr_exp_data.reg & 0xFF, // Shift in bits 7-0
- (sr_exp_data.reg >> 8) & 0xFF, // Shift in bits 15-8
+ sr_exp_data.reg & 0xFF, // Shift in bits 7-0
+ (sr_exp_data.reg >> 8) & 0xFF, // Shift in bits 15-8
};
shift_out(data, 2);
}
diff --git a/tmk_core/protocol/arm_atsam/spi_master.c b/tmk_core/protocol/arm_atsam/spi_master.c
index 9781d45b1e..3be82fac1d 100644
--- a/tmk_core/protocol/arm_atsam/spi_master.c
+++ b/tmk_core/protocol/arm_atsam/spi_master.c
@@ -45,10 +45,10 @@ __attribute__((weak)) void spi_init(void) {
CLK_set_spi_freq(CHAN_SERCOM_SPI, FREQ_SPI_DEFAULT);
// Set up MCU SPI pins
- PORT->Group[SAMD_PORT(SPI_DATAOUT_PIN)].PMUX[SAMD_PIN(SPI_DATAOUT_PIN) / 2].bit.SPI_DATAOUT_MUX_SEL = SPI_DATAOUT_MUX; // MUX select for sercom
- PORT->Group[SAMD_PORT(SPI_SCLK_PIN)].PMUX[SAMD_PIN(SPI_SCLK_PIN) / 2].bit.SPI_SCLK_MUX_SEL = SPI_SCLK_MUX; // MUX select for sercom
- PORT->Group[SAMD_PORT(SPI_DATAOUT_PIN)].PINCFG[SAMD_PIN(SPI_DATAOUT_PIN)].bit.PMUXEN = 1; // MUX Enable
- PORT->Group[SAMD_PORT(SPI_SCLK_PIN)].PINCFG[SAMD_PIN(SPI_SCLK_PIN)].bit.PMUXEN = 1; // MUX Enable
+ PORT->Group[SAMD_PORT(SPI_DATAOUT_PIN)].PMUX[SAMD_PIN(SPI_DATAOUT_PIN) / 2].bit.SPI_DATAOUT_MUX_SEL = SPI_DATAOUT_MUX; // MUX select for sercom
+ PORT->Group[SAMD_PORT(SPI_SCLK_PIN)].PMUX[SAMD_PIN(SPI_SCLK_PIN) / 2].bit.SPI_SCLK_MUX_SEL = SPI_SCLK_MUX; // MUX select for sercom
+ PORT->Group[SAMD_PORT(SPI_DATAOUT_PIN)].PINCFG[SAMD_PIN(SPI_DATAOUT_PIN)].bit.PMUXEN = 1; // MUX Enable
+ PORT->Group[SAMD_PORT(SPI_SCLK_PIN)].PINCFG[SAMD_PIN(SPI_SCLK_PIN)].bit.PMUXEN = 1; // MUX Enable
DBGC(DC_SPI_INIT_COMPLETE);
}
@@ -63,14 +63,14 @@ bool spi_start(pin_t csPin, bool lsbFirst, uint8_t mode, uint16_t divisor) {
setPinOutput(currentSelectPin);
writePinLow(currentSelectPin);
- SPI_SERCOM->SPI.CTRLA.bit.DORD = lsbFirst; // Data Order - LSB is transferred first
- SPI_SERCOM->SPI.CTRLA.bit.CPOL = 1; // Clock Polarity - SCK high when idle. Leading edge of cycle is falling. Trailing rising.
- SPI_SERCOM->SPI.CTRLA.bit.CPHA = 1; // Clock Phase - Leading Edge Falling, change, Trailing Edge - Rising, sample
- SPI_SERCOM->SPI.CTRLA.bit.DIPO = 3; // Data In Pinout - SERCOM PAD[3] is used as data input (Configure away from DOPO. Not using input.)
- SPI_SERCOM->SPI.CTRLA.bit.DOPO = 0; // Data Output PAD[0], Serial Clock PAD[1]
- SPI_SERCOM->SPI.CTRLA.bit.MODE = 3; // Operating Mode - Master operation
+ SPI_SERCOM->SPI.CTRLA.bit.DORD = lsbFirst; // Data Order - LSB is transferred first
+ SPI_SERCOM->SPI.CTRLA.bit.CPOL = 1; // Clock Polarity - SCK high when idle. Leading edge of cycle is falling. Trailing rising.
+ SPI_SERCOM->SPI.CTRLA.bit.CPHA = 1; // Clock Phase - Leading Edge Falling, change, Trailing Edge - Rising, sample
+ SPI_SERCOM->SPI.CTRLA.bit.DIPO = 3; // Data In Pinout - SERCOM PAD[3] is used as data input (Configure away from DOPO. Not using input.)
+ SPI_SERCOM->SPI.CTRLA.bit.DOPO = 0; // Data Output PAD[0], Serial Clock PAD[1]
+ SPI_SERCOM->SPI.CTRLA.bit.MODE = 3; // Operating Mode - Master operation
- SPI_SERCOM->SPI.CTRLA.bit.ENABLE = 1; // Enable - Peripheral is enabled or being enabled
+ SPI_SERCOM->SPI.CTRLA.bit.ENABLE = 1; // Enable - Peripheral is enabled or being enabled
while (SPI_SERCOM->SPI.SYNCBUSY.bit.ENABLE) {
DBGC(DC_SPI_SYNC_ENABLING);
}
diff --git a/tmk_core/protocol/arm_atsam/startup.c b/tmk_core/protocol/arm_atsam/startup.c
index 7a5791ab55..ce043bad51 100644
--- a/tmk_core/protocol/arm_atsam/startup.c
+++ b/tmk_core/protocol/arm_atsam/startup.c
@@ -28,7 +28,6 @@
*/
#include "samd51.h"
-#include "md_bootloader.h"
/* Initialize segments */
extern uint32_t _sfixed;
@@ -496,6 +495,11 @@ __attribute__((section(".vectors"))) const DeviceVectors exception_table = {
#endif
};
+// WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support
+extern uint32_t _eram;
+#define BOOTLOADER_MAGIC 0x3B9ACA00
+#define MAGIC_ADDR (uint32_t *)((intptr_t)(&_eram) - 4)
+
/**
* \brief This is the code that gets called on processor reset.
* To initialize the device, and call the main() routine.
diff --git a/tmk_core/protocol/arm_atsam/usb/compiler.h b/tmk_core/protocol/arm_atsam/usb/compiler.h
index 6ba2322340..517499f946 100644
--- a/tmk_core/protocol/arm_atsam/usb/compiler.h
+++ b/tmk_core/protocol/arm_atsam/usb/compiler.h
@@ -876,66 +876,66 @@ typedef struct {
// kmod #define LOW 0
// kmod #define HIGH 1
-typedef int8_t S8; //!< 8-bit signed integer.
-typedef uint8_t U8; //!< 8-bit unsigned integer.
-typedef int16_t S16; //!< 16-bit signed integer.
-typedef uint16_t U16; //!< 16-bit unsigned integer.
-typedef int32_t S32; //!< 32-bit signed integer.
-typedef uint32_t U32; //!< 32-bit unsigned integer.
-typedef int64_t S64; //!< 64-bit signed integer.
-typedef uint64_t U64; //!< 64-bit unsigned integer.
-typedef float F32; //!< 32-bit floating-point number.
-typedef double F64; //!< 64-bit floating-point number.
-
-# define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16.
-# define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16.
-
-# define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32.
-# define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32.
-# define MSB0W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 1st rank of \a u32.
-# define MSB1W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 2nd rank of \a u32.
-# define MSB2W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 3rd rank of \a u32.
-# define MSB3W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 4th rank of \a u32.
-# define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32.
-# define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32.
-# define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32.
-# define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32.
-
-# define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64.
-# define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64.
-# define MSH0(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 1st rank of \a u64.
-# define MSH1(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 2nd rank of \a u64.
-# define MSH2(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 3rd rank of \a u64.
-# define MSH3(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 4th rank of \a u64.
-# define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64.
-# define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64.
-# define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64.
-# define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64.
-# define MSB0D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 1st rank of \a u64.
-# define MSB1D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 2nd rank of \a u64.
-# define MSB2D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 3rd rank of \a u64.
-# define MSB3D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 4th rank of \a u64.
-# define MSB4D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 5th rank of \a u64.
-# define MSB5D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 6th rank of \a u64.
-# define MSB6D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 7th rank of \a u64.
-# define MSB7D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 8th rank of \a u64.
-# define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64.
-# define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64.
-# define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64.
-# define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64.
-# define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64.
-# define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64.
-# define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64.
-# define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64.
-
-# define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32.
-# define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32.
-# define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32.
-# define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32.
-# define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32.
-# define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32.
-# define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32.
-# define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32.
+typedef int8_t S8; //!< 8-bit signed integer.
+typedef uint8_t U8; //!< 8-bit unsigned integer.
+typedef int16_t S16; //!< 16-bit signed integer.
+typedef uint16_t U16; //!< 16-bit unsigned integer.
+typedef int32_t S32; //!< 32-bit signed integer.
+typedef uint32_t U32; //!< 32-bit unsigned integer.
+typedef int64_t S64; //!< 64-bit signed integer.
+typedef uint64_t U64; //!< 64-bit unsigned integer.
+typedef float F32; //!< 32-bit floating-point number.
+typedef double F64; //!< 64-bit floating-point number.
+
+# define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16.
+# define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16.
+
+# define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32.
+# define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32.
+# define MSB0W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 1st rank of \a u32.
+# define MSB1W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 2nd rank of \a u32.
+# define MSB2W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 3rd rank of \a u32.
+# define MSB3W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 4th rank of \a u32.
+# define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32.
+# define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32.
+# define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32.
+# define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32.
+
+# define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64.
+# define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64.
+# define MSH0(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 1st rank of \a u64.
+# define MSH1(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 2nd rank of \a u64.
+# define MSH2(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 3rd rank of \a u64.
+# define MSH3(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 4th rank of \a u64.
+# define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64.
+# define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64.
+# define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64.
+# define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64.
+# define MSB0D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 1st rank of \a u64.
+# define MSB1D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 2nd rank of \a u64.
+# define MSB2D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 3rd rank of \a u64.
+# define MSB3D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 4th rank of \a u64.
+# define MSB4D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 5th rank of \a u64.
+# define MSB5D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 6th rank of \a u64.
+# define MSB6D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 7th rank of \a u64.
+# define MSB7D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 8th rank of \a u64.
+# define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64.
+# define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64.
+# define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64.
+# define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64.
+# define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64.
+# define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64.
+# define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64.
+# define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64.
+
+# define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32.
+# define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32.
+# define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32.
+# define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32.
+# define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32.
+# define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32.
+# define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32.
+# define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32.
# if defined(__ICCARM__)
# define SHORTENUM __packed
@@ -1031,7 +1031,9 @@ static inline void convert_16_bit_to_byte_address(uint16_t value, uint8_t *data)
* @return 16-Bit value
* @ingroup apiPalApi
*/
-static inline uint16_t convert_byte_array_to_16_bit(uint8_t *data) { return (data[0] | ((uint16_t)data[1] << 8)); }
+static inline uint16_t convert_byte_array_to_16_bit(uint8_t *data) {
+ return (data[0] | ((uint16_t)data[1] << 8));
+}
/* Converts a 4 Byte array into a 32-Bit value */
static inline uint32_t convert_byte_array_to_32_bit(uint8_t *data) {
diff --git a/tmk_core/protocol/arm_atsam/usb/conf_usb.h b/tmk_core/protocol/arm_atsam/usb/conf_usb.h
index 184a2e81dc..50d189a202 100644
--- a/tmk_core/protocol/arm_atsam/usb/conf_usb.h
+++ b/tmk_core/protocol/arm_atsam/usb/conf_usb.h
@@ -59,7 +59,7 @@
#define USB_DEVICE_VENDOR_ID VENDOR_ID
#define USB_DEVICE_PRODUCT_ID PRODUCT_ID
#define USB_DEVICE_VERSION DEVICE_VER
-#define USB_DEVICE_POWER 500 // Consumption on Vbus line (mA)
+#define USB_DEVICE_POWER 500 // Consumption on Vbus line (mA)
#define USB_DEVICE_ATTR (USB_CONFIG_ATTR_REMOTE_WAKEUP | USB_CONFIG_ATTR_BUS_POWERED)
// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED)
// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED)
@@ -161,4 +161,4 @@
#include "usb_main.h"
#include "ui.h"
-#endif // _CONF_USB_H_
+#endif // _CONF_USB_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/main_usb.c b/tmk_core/protocol/arm_atsam/usb/main_usb.c
index 5fcb9a9c61..ee6ed25b85 100644
--- a/tmk_core/protocol/arm_atsam/usb/main_usb.c
+++ b/tmk_core/protocol/arm_atsam/usb/main_usb.c
@@ -25,15 +25,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
uint8_t keyboard_protocol = 1;
-void main_suspend_action(void) { ui_powerdown(); }
+void main_suspend_action(void) {
+ ui_powerdown();
+}
-void main_resume_action(void) { ui_wakeup(); }
+void main_resume_action(void) {
+ ui_wakeup();
+}
-void main_sof_action(void) { ui_process(udd_get_frame_number()); }
+void main_sof_action(void) {
+ ui_process(udd_get_frame_number());
+}
-void main_remotewakeup_enable(void) { ui_wakeup_enable(); }
+void main_remotewakeup_enable(void) {
+ ui_wakeup_enable();
+}
-void main_remotewakeup_disable(void) { ui_wakeup_disable(); }
+void main_remotewakeup_disable(void) {
+ ui_wakeup_disable();
+}
volatile bool main_b_kbd_enable = false;
bool main_kbd_enable(void) {
@@ -41,7 +51,9 @@ bool main_kbd_enable(void) {
return true;
}
-void main_kbd_disable(void) { main_b_kbd_enable = false; }
+void main_kbd_disable(void) {
+ main_b_kbd_enable = false;
+}
#ifdef NKRO_ENABLE
volatile bool main_b_nkro_enable = false;
@@ -50,7 +62,9 @@ bool main_nkro_enable(void) {
return true;
}
-void main_nkro_disable(void) { main_b_nkro_enable = false; }
+void main_nkro_disable(void) {
+ main_b_nkro_enable = false;
+}
#endif
#ifdef EXTRAKEY_ENABLE
@@ -60,7 +74,9 @@ bool main_exk_enable(void) {
return true;
}
-void main_exk_disable(void) { main_b_exk_enable = false; }
+void main_exk_disable(void) {
+ main_b_exk_enable = false;
+}
#endif
#ifdef CONSOLE_ENABLE
@@ -70,7 +86,9 @@ bool main_con_enable(void) {
return true;
}
-void main_con_disable(void) { main_b_con_enable = false; }
+void main_con_disable(void) {
+ main_b_con_enable = false;
+}
#endif
#ifdef MOUSE_ENABLE
@@ -80,7 +98,9 @@ bool main_mou_enable(void) {
return true;
}
-void main_mou_disable(void) { main_b_mou_enable = false; }
+void main_mou_disable(void) {
+ main_b_mou_enable = false;
+}
#endif
#ifdef RAW_ENABLE
@@ -90,7 +110,11 @@ bool main_raw_enable(void) {
return true;
}
-void main_raw_disable(void) { main_b_raw_enable = false; }
+void main_raw_disable(void) {
+ main_b_raw_enable = false;
+}
-void main_raw_receive(uint8_t *buffer, uint8_t len) { raw_hid_receive(buffer, len); }
+void main_raw_receive(uint8_t *buffer, uint8_t len) {
+ raw_hid_receive(buffer, len);
+}
#endif
diff --git a/tmk_core/protocol/arm_atsam/usb/status_codes.h b/tmk_core/protocol/arm_atsam/usb/status_codes.h
index a7a1230be0..72819a0d7d 100644
--- a/tmk_core/protocol/arm_atsam/usb/status_codes.h
+++ b/tmk_core/protocol/arm_atsam/usb/status_codes.h
@@ -124,20 +124,20 @@ typedef enum status_code status_code_genare_t;
*/
enum status_code_wireless {
// STATUS_OK = 0, //!< Success
- ERR_IO_ERROR = -1, //!< I/O error
- ERR_FLUSHED = -2, //!< Request flushed from queue
- ERR_TIMEOUT = -3, //!< Operation timed out
- ERR_BAD_DATA = -4, //!< Data integrity check failed
- ERR_PROTOCOL = -5, //!< Protocol error
- ERR_UNSUPPORTED_DEV = -6, //!< Unsupported device
- ERR_NO_MEMORY = -7, //!< Insufficient memory
- ERR_INVALID_ARG = -8, //!< Invalid argument
- ERR_BAD_ADDRESS = -9, //!< Bad address
- ERR_BUSY = -10, //!< Resource is busy
- ERR_BAD_FORMAT = -11, //!< Data format not recognized
- ERR_NO_TIMER = -12, //!< No timer available
- ERR_TIMER_ALREADY_RUNNING = -13, //!< Timer already running
- ERR_TIMER_NOT_RUNNING = -14, //!< Timer not running
+ ERR_IO_ERROR = -1, //!< I/O error
+ ERR_FLUSHED = -2, //!< Request flushed from queue
+ ERR_TIMEOUT = -3, //!< Operation timed out
+ ERR_BAD_DATA = -4, //!< Data integrity check failed
+ ERR_PROTOCOL = -5, //!< Protocol error
+ ERR_UNSUPPORTED_DEV = -6, //!< Unsupported device
+ ERR_NO_MEMORY = -7, //!< Insufficient memory
+ ERR_INVALID_ARG = -8, //!< Invalid argument
+ ERR_BAD_ADDRESS = -9, //!< Bad address
+ ERR_BUSY = -10, //!< Resource is busy
+ ERR_BAD_FORMAT = -11, //!< Data format not recognized
+ ERR_NO_TIMER = -12, //!< No timer available
+ ERR_TIMER_ALREADY_RUNNING = -13, //!< Timer already running
+ ERR_TIMER_NOT_RUNNING = -14, //!< Timer not running
/**
* \brief Operation in progress
diff --git a/tmk_core/protocol/arm_atsam/usb/udc.c b/tmk_core/protocol/arm_atsam/usb/udc.c
index d04e9b7b28..2a371c200a 100644
--- a/tmk_core/protocol/arm_atsam/usb/udc.c
+++ b/tmk_core/protocol/arm_atsam/usb/udc.c
@@ -51,7 +51,8 @@
#include "udi_device_conf.h"
#include "udi.h"
#include "udc.h"
-#include "md_bootloader.h"
+
+#define BOOTLOADER_SERIAL_MAX_SIZE 20 // DO NOT MODIFY!
/**
* \ingroup udc_group
@@ -122,6 +123,8 @@ static uint8_t udc_string_product_name[] = USB_DEVICE_PRODUCT_NAME;
# define USB_DEVICE_SERIAL_NAME_SIZE 0
#endif
+extern uint32_t _srom;
+
uint8_t usb_device_serial_name_size = 0;
#if defined USB_DEVICE_SERIAL_USE_BOOTLOADER_SERIAL
uint8_t bootloader_serial_number[BOOTLOADER_SERIAL_MAX_SIZE + 1] = "";
@@ -129,13 +132,13 @@ uint8_t bootloader_serial_number[BOOTLOADER_SERIAL_MAX_SIZE + 1] = "";
static const uint8_t *udc_get_string_serial_name(void) {
#if defined USB_DEVICE_SERIAL_USE_BOOTLOADER_SERIAL
uint32_t serial_ptrloc = (uint32_t)&_srom - 4;
- uint32_t serial_address = *(uint32_t *)serial_ptrloc; // Address of bootloader's serial number if available
+ uint32_t serial_address = *(uint32_t *)serial_ptrloc; // Address of bootloader's serial number if available
- if (serial_address != 0xFFFFFFFF && serial_address < serial_ptrloc) // Check for factory programmed serial address
+ if (serial_address != 0xFFFFFFFF && serial_address < serial_ptrloc) // Check for factory programmed serial address
{
- if ((serial_address & 0xFF) % 4 == 0) // Check alignment
+ if ((serial_address & 0xFF) % 4 == 0) // Check alignment
{
- uint16_t *serial_use = (uint16_t *)(serial_address); // Point to address of string in rom
+ uint16_t *serial_use = (uint16_t *)(serial_address); // Point to address of string in rom
uint8_t serial_length = 0;
while ((*(serial_use + serial_length) > 32 && *(serial_use + serial_length) < 127) && serial_length < BOOTLOADER_SERIAL_MAX_SIZE) {
@@ -146,7 +149,7 @@ static const uint8_t *udc_get_string_serial_name(void) {
usb_device_serial_name_size = serial_length;
- return bootloader_serial_number; // Use serial programmed into bootloader rom
+ return bootloader_serial_number; // Use serial programmed into bootloader rom
}
}
#endif
@@ -154,9 +157,9 @@ static const uint8_t *udc_get_string_serial_name(void) {
usb_device_serial_name_size = USB_DEVICE_SERIAL_NAME_SIZE;
#if defined USB_DEVICE_SERIAL_NAME
- return (const uint8_t *)USB_DEVICE_SERIAL_NAME; // Use serial supplied by keyboard's config.h
+ return (const uint8_t *)USB_DEVICE_SERIAL_NAME; // Use serial supplied by keyboard's config.h
#else
- return 0; // No serial supplied
+ return 0; // No serial supplied
#endif
}
@@ -166,7 +169,7 @@ static const uint8_t *udc_get_string_serial_name(void) {
*/
#ifndef BOOTLOADER_SERIAL_MAX_SIZE
# define BOOTLOADER_SERIAL_MAX_SIZE 0
-#endif // BOOTLOADER_SERIAL_MAX_SIZE
+#endif // BOOTLOADER_SERIAL_MAX_SIZE
struct udc_string_desc_t {
usb_str_desc_t header;
le16_t string[Max(Max(Max(USB_DEVICE_MANUFACTURE_NAME_SIZE, USB_DEVICE_PRODUCT_NAME_SIZE), USB_DEVICE_SERIAL_NAME_SIZE), BOOTLOADER_SERIAL_MAX_SIZE)];
@@ -175,14 +178,18 @@ COMPILER_WORD_ALIGNED
static UDC_DESC_STORAGE struct udc_string_desc_t udc_string_desc = {.header.bDescriptorType = USB_DT_STRING};
//! @}
-usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void) { return udc_ptr_iface; }
+usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void) {
+ return udc_ptr_iface;
+}
/**
* \brief Returns a value to check the end of USB Configuration descriptor
*
* \return address after the last byte of USB Configuration descriptor
*/
-static usb_conf_desc_t UDC_DESC_STORAGE *udc_get_eof_conf(void) { return (UDC_DESC_STORAGE usb_conf_desc_t *)((uint8_t *)udc_ptr_conf->desc + le16_to_cpu(udc_ptr_conf->desc->wTotalLength)); }
+static usb_conf_desc_t UDC_DESC_STORAGE *udc_get_eof_conf(void) {
+ return (UDC_DESC_STORAGE usb_conf_desc_t *)((uint8_t *)udc_ptr_conf->desc + le16_to_cpu(udc_ptr_conf->desc->wTotalLength));
+}
#if (0 != USB_DEVICE_MAX_EP)
/**
@@ -206,15 +213,15 @@ static usb_conf_desc_t UDC_DESC_STORAGE *udc_next_desc_in_iface(usb_conf_desc_t
// If new interface descriptor is found,
// then it is the end of the current global interface descriptor
if (USB_DT_INTERFACE == desc->bDescriptorType) {
- break; // End of global interface descriptor
+ break; // End of global interface descriptor
}
if (desc_id == desc->bDescriptorType) {
- return desc; // Specific descriptor found
+ return desc; // Specific descriptor found
}
// Go to next descriptor
desc = (UDC_DESC_STORAGE usb_conf_desc_t *)((uint8_t *)desc + desc->bLength);
}
- return NULL; // No specific descriptor found
+ return NULL; // No specific descriptor found
}
#endif
@@ -248,13 +255,13 @@ static bool udc_update_iface_desc(uint8_t iface_num, uint8_t setting_num) {
// A interface descriptor is found
// Check interface and alternate setting number
if ((iface_num == udc_ptr_iface->bInterfaceNumber) && (setting_num == udc_ptr_iface->bAlternateSetting)) {
- return true; // Interface found
+ return true; // Interface found
}
}
// Go to next descriptor
udc_ptr_iface = (UDC_DESC_STORAGE usb_iface_desc_t *)((uint8_t *)udc_ptr_iface + udc_ptr_iface->bLength);
}
- return false; // Interface not found
+ return false; // Interface not found
}
/**
@@ -340,7 +347,9 @@ static bool udc_iface_enable(uint8_t iface_num, uint8_t setting_num) {
/*! \brief Start the USB Device stack
*/
-void udc_start(void) { udd_enable(); }
+void udc_start(void) {
+ udd_enable();
+}
/*! \brief Stop the USB Device stack
*/
@@ -507,7 +516,7 @@ static bool udc_req_std_dev_set_feature(void) {
udd_g_ctrlreq.callback = udd_test_mode_packet;
return true;
- case USB_DEV_TEST_MODE_FORCE_ENABLE: // Only for downstream facing hub ports
+ case USB_DEV_TEST_MODE_FORCE_ENABLE: // Only for downstream facing hub ports
default:
break;
}
@@ -541,7 +550,9 @@ static bool udc_req_std_ep_set_feature(void) {
* \brief Change the address of device
* Callback called at the end of request set address
*/
-static void udc_valid_address(void) { udd_set_address(udd_g_ctrlreq.req.wValue & 0x7F); }
+static void udc_valid_address(void) {
+ udd_set_address(udd_g_ctrlreq.req.wValue & 0x7F);
+}
/**
* \brief Standard device request to set device address
@@ -760,7 +771,7 @@ static bool udc_req_std_dev_set_configuration(void) {
// Enable new configuration
udc_num_configuration = udd_g_ctrlreq.req.wValue & 0xFF;
if (udc_num_configuration == 0) {
- return true; // Default empty configuration requested
+ return true; // Default empty configuration requested
}
// Update pointer of the configuration descriptor
#ifdef USB_DEVICE_HS_SUPPORT
@@ -793,10 +804,10 @@ static bool udc_req_std_iface_get_setting(void) {
udi_api_t UDC_DESC_STORAGE *udi_api;
if (udd_g_ctrlreq.req.wLength != 1) {
- return false; // Error in request
+ return false; // Error in request
}
if (!udc_num_configuration) {
- return false; // The device is not is configured state yet
+ return false; // The device is not is configured state yet
}
// Check the interface number included in the request
@@ -829,10 +840,10 @@ static bool udc_req_std_iface_set_setting(void) {
uint8_t iface_num, setting_num;
if (udd_g_ctrlreq.req.wLength) {
- return false; // Error in request
+ return false; // Error in request
}
if (!udc_num_configuration) {
- return false; // The device is not is configured state yet
+ return false; // The device is not is configured state yet
}
iface_num = udd_g_ctrlreq.req.wIndex & 0xFF;
@@ -856,7 +867,7 @@ static bool udc_reqstd(void) {
if (Udd_setup_is_in()) {
// GET Standard Requests
if (udd_g_ctrlreq.req.wLength == 0) {
- return false; // Error for USB host
+ return false; // Error for USB host
}
if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) {
@@ -950,7 +961,7 @@ static bool udc_req_iface(void) {
udi_api_t UDC_DESC_STORAGE *udi_api;
if (0 == udc_num_configuration) {
- return false; // The device is not is configured state yet
+ return false; // The device is not is configured state yet
}
// Check interface number
iface_num = udd_g_ctrlreq.req.wIndex & 0xFF;
@@ -984,7 +995,7 @@ static bool udc_req_ep(void) {
udi_api_t UDC_DESC_STORAGE *udi_api;
if (0 == udc_num_configuration) {
- return false; // The device is not is configured state yet
+ return false; // The device is not is configured state yet
}
// Send this request on all enabled interfaces
iface_num = udd_g_ctrlreq.req.wIndex & 0xFF;
@@ -1024,7 +1035,7 @@ bool udc_process_setup(void) {
if (Udd_setup_is_in()) {
if (udd_g_ctrlreq.req.wLength == 0) {
- return false; // Error from USB host
+ return false; // Error from USB host
}
}
@@ -1052,7 +1063,7 @@ bool udc_process_setup(void) {
// Here SETUP request unknown by UDC and UDIs
#ifdef USB_DEVICE_SPECIFIC_REQUEST
// Try to decode it in specific callback
- return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,...
+ return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,...
#else
return false;
#endif
diff --git a/tmk_core/protocol/arm_atsam/usb/udc.h b/tmk_core/protocol/arm_atsam/usb/udc.h
index 8d33307d3c..f2144059eb 100644
--- a/tmk_core/protocol/arm_atsam/usb/udc.h
+++ b/tmk_core/protocol/arm_atsam/usb/udc.h
@@ -172,7 +172,9 @@ extern "C" {
}
\endcode
*/
-static inline bool udc_include_vbus_monitoring(void) { return udd_include_vbus_monitoring(); }
+static inline bool udc_include_vbus_monitoring(void) {
+ return udd_include_vbus_monitoring();
+}
/*! \brief Start the USB Device stack
*/
@@ -189,19 +191,25 @@ void udc_stop(void);
* then it will attach device when an acceptable Vbus
* level from the host is detected.
*/
-static inline void udc_attach(void) { udd_attach(); }
+static inline void udc_attach(void) {
+ udd_attach();
+}
/**
* \brief Detaches the device from the bus
*
* The driver must remove pull-up on USB line D- or D+.
*/
-static inline void udc_detach(void) { udd_detach(); }
+static inline void udc_detach(void) {
+ udd_detach();
+}
/*! \brief The USB driver sends a resume signal called \e "Upstream Resume"
* This is authorized only when the remote wakeup feature is enabled by host.
*/
-inline void udc_remotewakeup(void) { udd_send_remotewakeup(); }
+inline void udc_remotewakeup(void) {
+ udd_send_remotewakeup();
+}
/**
* \brief Returns a pointer on the current interface descriptor
@@ -245,4 +253,4 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void);
}
#endif
-#endif // _UDC_H_
+#endif // _UDC_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udc_desc.h b/tmk_core/protocol/arm_atsam/usb/udc_desc.h
index 39ea153b40..50861da964 100644
--- a/tmk_core/protocol/arm_atsam/usb/udc_desc.h
+++ b/tmk_core/protocol/arm_atsam/usb/udc_desc.h
@@ -129,4 +129,4 @@ extern UDC_DESC_STORAGE udc_config_t udc_config;
#ifdef __cplusplus
}
#endif
-#endif // _UDC_DESC_H_
+#endif // _UDC_DESC_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udd.h b/tmk_core/protocol/arm_atsam/usb/udd.h
index 805b761a77..d9f58baf0b 100644
--- a/tmk_core/protocol/arm_atsam/usb/udd.h
+++ b/tmk_core/protocol/arm_atsam/usb/udd.h
@@ -381,4 +381,4 @@ extern void udc_sof_notify(void);
#ifdef __cplusplus
}
#endif
-#endif // _UDD_H_
+#endif // _UDD_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi.h b/tmk_core/protocol/arm_atsam/usb/udi.h
index 89942cce4d..60b117f3ca 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi.h
@@ -130,4 +130,4 @@ typedef struct {
#ifdef __cplusplus
}
#endif
-#endif // _UDI_H_
+#endif // _UDI_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
index 27db4017c4..0391b49f66 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
+++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
@@ -386,7 +386,7 @@ bool udi_cdc_comm_setup(void) {
switch (udd_g_ctrlreq.req.bRequest) {
case USB_REQ_CDC_GET_LINE_CODING:
// Get configuration of CDC line
- if (sizeof(usb_cdc_line_coding_t) != udd_g_ctrlreq.req.wLength) return false; // Error for USB host
+ if (sizeof(usb_cdc_line_coding_t) != udd_g_ctrlreq.req.wLength) return false; // Error for USB host
udd_g_ctrlreq.payload = (uint8_t *)&udi_cdc_line_coding[port];
udd_g_ctrlreq.payload_size = sizeof(usb_cdc_line_coding_t);
return true;
@@ -400,7 +400,7 @@ bool udi_cdc_comm_setup(void) {
switch (udd_g_ctrlreq.req.bRequest) {
case USB_REQ_CDC_SET_LINE_CODING:
// Change configuration of CDC line
- if (sizeof(usb_cdc_line_coding_t) != udd_g_ctrlreq.req.wLength) return false; // Error for USB host
+ if (sizeof(usb_cdc_line_coding_t) != udd_g_ctrlreq.req.wLength) return false; // Error for USB host
udd_g_ctrlreq.callback = udi_cdc_line_coding_received;
udd_g_ctrlreq.payload = (uint8_t *)&udi_cdc_line_coding[port];
udd_g_ctrlreq.payload_size = sizeof(usb_cdc_line_coding_t);
@@ -417,15 +417,15 @@ bool udi_cdc_comm_setup(void) {
}
}
}
- return false; // request Not supported
+ return false; // request Not supported
}
bool udi_cdc_data_setup(void) {
- return false; // request Not supported
+ return false; // request Not supported
}
uint8_t udi_cdc_getsetting(void) {
- return 0; // CDC don't have multiple alternate setting
+ return 0; // CDC don't have multiple alternate setting
}
void udi_cdc_data_sof_notify(void) {
@@ -476,7 +476,7 @@ static void udi_cdc_line_coding_received(void) {
static void udi_cdc_ctrl_state_change(uint8_t port, bool b_set, le16_t bit_mask) {
udd_ep_id_t ep_comm;
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
//#if UDI_CDC_PORT_NB == 1 // To optimize code
port = 0;
@@ -514,7 +514,7 @@ static void udi_cdc_ctrl_state_change(uint8_t port, bool b_set, le16_t bit_mask)
}
static void udi_cdc_ctrl_state_notify(uint8_t port, udd_ep_id_t ep) {
-# if UDI_CDC_PORT_NB == 1 // To optimize code
+# if UDI_CDC_PORT_NB == 1 // To optimize code
port = 0;
# endif
@@ -562,7 +562,7 @@ static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n,
//------- Internal routines to process data transfer
static bool udi_cdc_rx_start(uint8_t port) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
uint8_t buf_sel_trans;
udd_ep_id_t ep;
@@ -685,7 +685,7 @@ static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t
}
static void udi_cdc_tx_send(uint8_t port) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
uint8_t buf_sel_trans;
bool b_short_packet;
udd_ep_id_t ep;
@@ -696,15 +696,15 @@ static void udi_cdc_tx_send(uint8_t port) {
//#endif
if (udi_cdc_tx_trans_ongoing[port]) {
- return; // Already on going or wait next SOF to send next data
+ return; // Already on going or wait next SOF to send next data
}
if (udd_is_high_speed()) {
if (udi_cdc_tx_sof_num[port] == udd_get_micro_frame_number()) {
- return; // Wait next SOF to send next data
+ return; // Wait next SOF to send next data
}
} else {
if (udi_cdc_tx_sof_num[port] == udd_get_frame_number()) {
- return; // Wait next SOF to send next data
+ return; // Wait next SOF to send next data
}
}
@@ -743,7 +743,7 @@ static void udi_cdc_tx_send(uint8_t port) {
udi_cdc_tx_sof_num[port] = udd_get_frame_number();
}
} else {
- udi_cdc_tx_sof_num[port] = 0; // Force next transfer without wait SOF
+ udi_cdc_tx_sof_num[port] = 0; // Force next transfer without wait SOF
}
/*
@@ -768,28 +768,48 @@ static void udi_cdc_tx_send(uint8_t port) {
//---------------------------------------------
//------- Application interface
-void udi_cdc_ctrl_signal_dcd(bool b_set) { udi_cdc_ctrl_state_change(0, b_set, CDC_SERIAL_STATE_DCD); }
+void udi_cdc_ctrl_signal_dcd(bool b_set) {
+ udi_cdc_ctrl_state_change(0, b_set, CDC_SERIAL_STATE_DCD);
+}
-void udi_cdc_ctrl_signal_dsr(bool b_set) { udi_cdc_ctrl_state_change(0, b_set, CDC_SERIAL_STATE_DSR); }
+void udi_cdc_ctrl_signal_dsr(bool b_set) {
+ udi_cdc_ctrl_state_change(0, b_set, CDC_SERIAL_STATE_DSR);
+}
-void udi_cdc_signal_framing_error(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_FRAMING); }
+void udi_cdc_signal_framing_error(void) {
+ udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_FRAMING);
+}
-void udi_cdc_signal_parity_error(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_PARITY); }
+void udi_cdc_signal_parity_error(void) {
+ udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_PARITY);
+}
-void udi_cdc_signal_overrun(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_OVERRUN); }
+void udi_cdc_signal_overrun(void) {
+ udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_OVERRUN);
+}
-void udi_cdc_multi_ctrl_signal_dcd(uint8_t port, bool b_set) { udi_cdc_ctrl_state_change(port, b_set, CDC_SERIAL_STATE_DCD); }
+void udi_cdc_multi_ctrl_signal_dcd(uint8_t port, bool b_set) {
+ udi_cdc_ctrl_state_change(port, b_set, CDC_SERIAL_STATE_DCD);
+}
-void udi_cdc_multi_ctrl_signal_dsr(uint8_t port, bool b_set) { udi_cdc_ctrl_state_change(port, b_set, CDC_SERIAL_STATE_DSR); }
+void udi_cdc_multi_ctrl_signal_dsr(uint8_t port, bool b_set) {
+ udi_cdc_ctrl_state_change(port, b_set, CDC_SERIAL_STATE_DSR);
+}
-void udi_cdc_multi_signal_framing_error(uint8_t port) { udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_FRAMING); }
+void udi_cdc_multi_signal_framing_error(uint8_t port) {
+ udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_FRAMING);
+}
-void udi_cdc_multi_signal_parity_error(uint8_t port) { udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_PARITY); }
+void udi_cdc_multi_signal_parity_error(uint8_t port) {
+ udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_PARITY);
+}
-void udi_cdc_multi_signal_overrun(uint8_t port) { udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_OVERRUN); }
+void udi_cdc_multi_signal_overrun(uint8_t port) {
+ udi_cdc_ctrl_state_change(port, true, CDC_SERIAL_STATE_OVERRUN);
+}
iram_size_t udi_cdc_multi_get_nb_received_data(uint8_t port) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
uint16_t pos;
iram_size_t nb_received;
@@ -807,14 +827,20 @@ iram_size_t udi_cdc_multi_get_nb_received_data(uint8_t port) {
return nb_received;
}
-iram_size_t udi_cdc_get_nb_received_data(void) { return udi_cdc_multi_get_nb_received_data(0); }
+iram_size_t udi_cdc_get_nb_received_data(void) {
+ return udi_cdc_multi_get_nb_received_data(0);
+}
-bool udi_cdc_multi_is_rx_ready(uint8_t port) { return (udi_cdc_multi_get_nb_received_data(port) > 0); }
+bool udi_cdc_multi_is_rx_ready(uint8_t port) {
+ return (udi_cdc_multi_get_nb_received_data(port) > 0);
+}
-bool udi_cdc_is_rx_ready(void) { return udi_cdc_multi_is_rx_ready(0); }
+bool udi_cdc_is_rx_ready(void) {
+ return udi_cdc_multi_is_rx_ready(0);
+}
int udi_cdc_multi_getc(uint8_t port) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
int rx_data = 0;
bool b_databit_9;
uint16_t pos;
@@ -859,10 +885,12 @@ udi_cdc_getc_process_one_byte:
return rx_data;
}
-int udi_cdc_getc(void) { return udi_cdc_multi_getc(0); }
+int udi_cdc_getc(void) {
+ return udi_cdc_multi_getc(0);
+}
iram_size_t udi_cdc_multi_read_buf(uint8_t port, void *buf, iram_size_t size) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
uint8_t * ptr_buf = (uint8_t *)buf;
iram_size_t copy_nb;
uint16_t pos;
@@ -912,7 +940,7 @@ static iram_size_t udi_cdc_multi_read_no_polling(uint8_t port, void *buf, iram_s
iram_size_t nb_avail_data;
uint16_t pos;
uint8_t buf_sel;
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
//#if UDI_CDC_PORT_NB == 1 // To optimize code
port = 0;
@@ -952,12 +980,16 @@ static iram_size_t udi_cdc_multi_read_no_polling(uint8_t port, void *buf, iram_s
return (nb_avail_data);
}
-iram_size_t udi_cdc_read_no_polling(void *buf, iram_size_t size) { return udi_cdc_multi_read_no_polling(0, buf, size); }
+iram_size_t udi_cdc_read_no_polling(void *buf, iram_size_t size) {
+ return udi_cdc_multi_read_no_polling(0, buf, size);
+}
-iram_size_t udi_cdc_read_buf(void *buf, iram_size_t size) { return udi_cdc_multi_read_buf(0, buf, size); }
+iram_size_t udi_cdc_read_buf(void *buf, iram_size_t size) {
+ return udi_cdc_multi_read_buf(0, buf, size);
+}
iram_size_t udi_cdc_multi_get_free_tx_buffer(uint8_t port) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
iram_size_t buf_sel_nb, retval;
uint8_t buf_sel;
@@ -986,14 +1018,20 @@ iram_size_t udi_cdc_multi_get_free_tx_buffer(uint8_t port) {
return retval;
}
-iram_size_t udi_cdc_get_free_tx_buffer(void) { return udi_cdc_multi_get_free_tx_buffer(0); }
+iram_size_t udi_cdc_get_free_tx_buffer(void) {
+ return udi_cdc_multi_get_free_tx_buffer(0);
+}
-bool udi_cdc_multi_is_tx_ready(uint8_t port) { return (udi_cdc_multi_get_free_tx_buffer(port) != 0); }
+bool udi_cdc_multi_is_tx_ready(uint8_t port) {
+ return (udi_cdc_multi_get_free_tx_buffer(port) != 0);
+}
-bool udi_cdc_is_tx_ready(void) { return udi_cdc_multi_is_tx_ready(0); }
+bool udi_cdc_is_tx_ready(void) {
+ return udi_cdc_multi_is_tx_ready(0);
+}
int udi_cdc_multi_putc(uint8_t port, int value) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
bool b_databit_9;
uint8_t buf_sel;
@@ -1030,10 +1068,12 @@ udi_cdc_putc_process_one_byte:
return true;
}
-int udi_cdc_putc(int value) { return udi_cdc_multi_putc(0, value); }
+int udi_cdc_putc(int value) {
+ return udi_cdc_multi_putc(0, value);
+}
iram_size_t udi_cdc_multi_write_buf(uint8_t port, const void *buf, iram_size_t size) {
- uint32_t irqflags; // irqflags_t
+ uint32_t irqflags; // irqflags_t
uint8_t buf_sel;
uint16_t buf_nb;
iram_size_t copy_nb;
@@ -1083,7 +1123,9 @@ udi_cdc_write_buf_loop_wait:
return 0;
}
-iram_size_t udi_cdc_write_buf(const void *buf, iram_size_t size) { return udi_cdc_multi_write_buf(0, buf, size); }
+iram_size_t udi_cdc_write_buf(const void *buf, iram_size_t size) {
+ return udi_cdc_multi_write_buf(0, buf, size);
+}
# define MAX_PRINT 256
# define CDC_SEND_INTERVAL 2
@@ -1121,10 +1163,10 @@ uint32_t CDC_print(char *printbuf) {
char printbuf[CDC_PRINTBUF_SIZE];
int CDC_printf(const char *_Format, ...) {
- va_list va; // Variable argument list variable
+ va_list va; // Variable argument list variable
int result;
- va_start(va, _Format); // Initialize the variable argument list
+ va_start(va, _Format); // Initialize the variable argument list
result = vsnprintf(printbuf, CDC_PRINTBUF_SIZE, _Format, va);
va_end(va);
@@ -1146,18 +1188,18 @@ uint32_t CDC_input_buf(inbuf_t inbuf, uint32_t inbuf_size) {
if (RXChar) {
switch (RXChar) {
- case '\t': // tab - repeat last
+ case '\t': // tab - repeat last
inbuf.count = inbuf.lastcount;
inbuf.buf[inbuf.count + 1] = 0;
CDC_print(inbuf.buf);
break;
- case '\r': // enter
+ case '\r': // enter
inbuf.buf[inbuf.count] = 0;
inbuf.lastcount = inbuf.count;
inbuf.count = 0;
entered = 1;
break;
- case '\b': // backspace
+ case '\b': // backspace
if (inbuf.count > 0) {
inbuf.count -= 1;
CDC_print("\b \b\0");
@@ -1181,7 +1223,9 @@ uint32_t CDC_input_buf(inbuf_t inbuf, uint32_t inbuf_size) {
return entered;
}
-uint32_t CDC_input() { return CDC_input_buf(inbuf, CDC_INBUF_SIZE); }
+uint32_t CDC_input() {
+ return CDC_input_buf(inbuf, CDC_INBUF_SIZE);
+}
void CDC_init(void) {
inbuf.count = 0;
@@ -1190,19 +1234,27 @@ void CDC_init(void) {
cdc_tx_send_time_next = timer_read64() + CDC_SEND_INTERVAL;
}
-#else // CDC line 62
+#else // CDC line 62
char printbuf[CDC_PRINTBUF_SIZE];
-void CDC_send(void) { return; }
+void CDC_send(void) {
+ return;
+}
-uint32_t CDC_print(char *printbuf) { return 0; }
+uint32_t CDC_print(char *printbuf) {
+ return 0;
+}
-int CDC_printf(const char *_Format, ...) { return 0; }
+int CDC_printf(const char *_Format, ...) {
+ return 0;
+}
inbuf_t inbuf;
-uint32_t CDC_input(void) { return 0; }
+uint32_t CDC_input(void) {
+ return 0;
+}
void CDC_init(void) {
inbuf.count = 0;
@@ -1210,6 +1262,6 @@ void CDC_init(void) {
printbuf[0] = 0;
}
-#endif // CDC line 62
+#endif // CDC line 62
//@}
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h
index 406023980c..ff4f521ce0 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h
@@ -346,7 +346,7 @@ typedef struct {
char buf[CDC_INBUF_SIZE];
} inbuf_t;
-#else // VIRTSER_ENABLE
+#else // VIRTSER_ENABLE
// keep these to accommodate calls if remaining
# define CDC_PRINTBUF_SIZE 1
@@ -362,7 +362,7 @@ typedef struct {
extern inbuf_t inbuf;
-#endif // VIRTSER_ENABLE
+#endif // VIRTSER_ENABLE
uint32_t CDC_print(char* printbuf);
int CDC_printf(const char* _Format, ...);
@@ -373,4 +373,4 @@ void CDC_init(void);
}
#endif
-#endif // _UDI_CDC_H_
+#endif // _UDI_CDC_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_cdc_conf.h
index e079512492..e17ed7bf44 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_cdc_conf.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc_conf.h
@@ -59,9 +59,9 @@
extern "C" {
#endif
-#define UDI_CDC_DATA_EP_IN_0 ((CDC_TX_ENDPOINT) | (USB_EP_DIR_IN)) // TX
-#define UDI_CDC_DATA_EP_OUT_0 ((CDC_RX_ENDPOINT) | (USB_EP_DIR_OUT)) // RX
-#define UDI_CDC_COMM_EP_0 ((CDC_ACM_ENDPOINT) | (USB_EP_DIR_IN)) // Notify endpoint
+#define UDI_CDC_DATA_EP_IN_0 ((CDC_TX_ENDPOINT) | (USB_EP_DIR_IN)) // TX
+#define UDI_CDC_DATA_EP_OUT_0 ((CDC_RX_ENDPOINT) | (USB_EP_DIR_OUT)) // RX
+#define UDI_CDC_COMM_EP_0 ((CDC_ACM_ENDPOINT) | (USB_EP_DIR_IN)) // Notify endpoint
#define UDI_CDC_COMM_IFACE_NUMBER_0 (CDC_STATUS_INTERFACE)
#define UDI_CDC_DATA_IFACE_NUMBER_0 (CDC_DATA_INTERFACE)
@@ -69,4 +69,4 @@ extern "C" {
#ifdef __cplusplus
}
#endif
-#endif // _UDI_CDC_CONF_H_
+#endif // _UDI_CDC_CONF_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h
index 1c0983115c..eeed196275 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h
@@ -220,7 +220,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define NEXT_OUT_EPNUM_4 (CDC_OUT_EPNUM + 1)
# define CDC_ACM_SIZE CDC_NOTIFICATION_EPSIZE
-# define CDC_RX_SIZE CDC_EPSIZE // KFSMOD was 64
+# define CDC_RX_SIZE CDC_EPSIZE // KFSMOD was 64
# define CDC_TX_SIZE CDC_RX_SIZE
# define CDC_ACM_POLLING_INTERVAL 255
# define CDC_EP_INTERVAL_STATUS CDC_ACM_POLLING_INTERVAL
@@ -370,7 +370,7 @@ extern udi_hid_exk_report_t udi_hid_exk_report;
COMPILER_PACK_RESET()
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
// **********************************************************************
// NKRO Descriptor structure and content
@@ -433,7 +433,7 @@ extern uint8_t udi_hid_nkro_report[UDI_HID_NKRO_REPORT_SIZE];
COMPILER_PACK_RESET()
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
// **********************************************************************
// MOU Descriptor structure and content
@@ -449,7 +449,7 @@ typedef struct {
} udi_hid_mou_desc_t;
typedef struct {
- uint8_t array[77]; // MOU PDS
+ uint8_t array[77]; // MOU PDS
} udi_hid_mou_report_desc_t;
// clang-format off
@@ -488,12 +488,12 @@ typedef struct {
// clang-format on
// report buffer
-# define UDI_HID_MOU_REPORT_SIZE 5 // MOU PDS
+# define UDI_HID_MOU_REPORT_SIZE 5 // MOU PDS
extern uint8_t udi_hid_mou_report[UDI_HID_MOU_REPORT_SIZE];
COMPILER_PACK_RESET()
-#endif // MOUSE_ENABLE
+#endif // MOUSE_ENABLE
// **********************************************************************
// RAW Descriptor structure and content
@@ -565,7 +565,7 @@ extern uint8_t udi_hid_raw_report[UDI_HID_RAW_REPORT_SIZE];
COMPILER_PACK_RESET()
-#endif // RAW_ENABLE
+#endif // RAW_ENABLE
// **********************************************************************
// CON Descriptor structure and content
@@ -637,7 +637,7 @@ extern uint8_t udi_hid_con_report[UDI_HID_CON_REPORT_SIZE];
COMPILER_PACK_RESET()
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
// **********************************************************************
// CDC Descriptor structure and content
@@ -780,7 +780,7 @@ typedef struct {
COMPILER_PACK_RESET()
-#endif // VIRTSER_ENABLE
+#endif // VIRTSER_ENABLE
// **********************************************************************
// CONFIGURATION Descriptor structure and content
@@ -815,4 +815,4 @@ typedef struct {
COMPILER_PACK_RESET()
-#endif //_UDI_DEVICE_CONF_H_
+#endif //_UDI_DEVICE_CONF_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h b/tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h
index 09de475469..7a9ed31930 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h
@@ -28,4 +28,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define CDC_NOTIFICATION_EPSIZE 8
#define CDC_EPSIZE 16
-#endif //_UDI_DEVICE_EPSIZE_H_
+#endif //_UDI_DEVICE_EPSIZE_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid.c b/tmk_core/protocol/arm_atsam/usb/udi_hid.c
index b0bdcc6932..73e384a039 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid.c
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid.c
@@ -110,7 +110,7 @@ bool udi_hid_setup(uint8_t *rate, uint8_t *protocol, uint8_t *report_desc, bool
}
}
}
- return false; // Request not supported
+ return false; // Request not supported
}
//---------------------------------------------
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid.h b/tmk_core/protocol/arm_atsam/usb/udi_hid.h
index 6fd2cabd4c..a08b7db744 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid.h
@@ -82,4 +82,4 @@ bool udi_hid_setup(uint8_t *rate, uint8_t *protocol, uint8_t *report_desc, bool
#ifdef __cplusplus
}
#endif
-#endif // _UDI_HID_H_
+#endif // _UDI_HID_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c
index 9ea4addcfc..be4f2bb0c9 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c
@@ -94,42 +94,42 @@ static uint8_t udi_hid_kbd_report_trans[UDI_HID_KBD_REPORT_SIZE];
COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_kbd_report_desc_t udi_hid_kbd_report_desc = {{
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x06, // Usage (Keyboard)
- 0xA1, 0x01, // Collection (Application)
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x06, // Usage (Keyboard)
+ 0xA1, 0x01, // Collection (Application)
// Modifiers (8 bits)
- 0x05, 0x07, // Usage Page (Keyboard)
- 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
- 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x08, // Report Count (8)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x05, 0x07, // Usage Page (Keyboard)
+ 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
+ 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x08, // Report Count (8)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Reserved (1 byte)
- 0x81, 0x01, // Input (Constant)
+ 0x81, 0x01, // Input (Constant)
// Keycodes (6 bytes)
- 0x19, 0x00, // Usage Minimum (0)
- 0x29, 0xFF, // Usage Maximum (255)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0xFF, // Logical Maximum (255)
- 0x95, 0x06, // Report Count (6)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x00, // Input (Data, Array, Absolute)
+ 0x19, 0x00, // Usage Minimum (0)
+ 0x29, 0xFF, // Usage Maximum (255)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0xFF, // Logical Maximum (255)
+ 0x95, 0x06, // Report Count (6)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x00, // Input (Data, Array, Absolute)
// Status LEDs (5 bits)
- 0x05, 0x08, // Usage Page (LED)
- 0x19, 0x01, // Usage Minimum (Num Lock)
- 0x29, 0x05, // Usage Maximum (Kana)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x05, // Report Count (5)
- 0x75, 0x01, // Report Size (1)
- 0x91, 0x02, // Output (Data, Variable, Absolute)
+ 0x05, 0x08, // Usage Page (LED)
+ 0x19, 0x01, // Usage Minimum (Num Lock)
+ 0x29, 0x05, // Usage Maximum (Kana)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x05, // Report Count (5)
+ 0x75, 0x01, // Report Size (1)
+ 0x91, 0x02, // Output (Data, Variable, Absolute)
// LED padding (3 bits)
- 0x95, 0x03, // Report Count (3)
- 0x91, 0x01, // Output (Constant)
- 0xC0 // End Collection
+ 0x95, 0x03, // Report Count (3)
+ 0x91, 0x01, // Output (Constant)
+ 0xC0 // End Collection
}};
static bool udi_hid_kbd_setreport(void);
@@ -148,11 +148,17 @@ bool udi_hid_kbd_enable(void) {
return UDI_HID_KBD_ENABLE_EXT();
}
-void udi_hid_kbd_disable(void) { UDI_HID_KBD_DISABLE_EXT(); }
+void udi_hid_kbd_disable(void) {
+ UDI_HID_KBD_DISABLE_EXT();
+}
-bool udi_hid_kbd_setup(void) { return udi_hid_setup(&udi_hid_kbd_rate, &udi_hid_kbd_protocol, (uint8_t *)&udi_hid_kbd_report_desc, udi_hid_kbd_setreport); }
+bool udi_hid_kbd_setup(void) {
+ return udi_hid_setup(&udi_hid_kbd_rate, &udi_hid_kbd_protocol, (uint8_t *)&udi_hid_kbd_report_desc, udi_hid_kbd_setreport);
+}
-uint8_t udi_hid_kbd_getsetting(void) { return 0; }
+uint8_t udi_hid_kbd_getsetting(void) {
+ return 0;
+}
static bool udi_hid_kbd_setreport(void) {
if ((USB_HID_REPORT_TYPE_OUTPUT == (udd_g_ctrlreq.req.wValue >> 8)) && (0 == (0xFF & udd_g_ctrlreq.req.wValue)) && (1 == udd_g_ctrlreq.req.wLength)) {
@@ -234,41 +240,41 @@ static uint8_t udi_hid_nkro_report_trans[UDI_HID_NKRO_REPORT_SIZE];
COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_nkro_report_desc_t udi_hid_nkro_report_desc = {{
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x06, // Usage (Keyboard)
- 0xA1, 0x01, // Collection (Application)
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x06, // Usage (Keyboard)
+ 0xA1, 0x01, // Collection (Application)
// Modifiers (8 bits)
- 0x05, 0x07, // Usage Page (Keyboard/Keypad)
- 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
- 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x08, // Report Count (8)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x05, 0x07, // Usage Page (Keyboard/Keypad)
+ 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
+ 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x08, // Report Count (8)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Keycodes
- 0x05, 0x07, // Usage Page (Keyboard/Keypad)
- 0x19, 0x00, // Usage Minimum (0)
- 0x29, 0xF7, // Usage Maximum (247)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0xF8, // Report Count (248)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield)
+ 0x05, 0x07, // Usage Page (Keyboard/Keypad)
+ 0x19, 0x00, // Usage Minimum (0)
+ 0x29, 0xF7, // Usage Maximum (247)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0xF8, // Report Count (248)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield)
// Status LEDs (5 bits)
- 0x05, 0x08, // Usage Page (LED)
- 0x19, 0x01, // Usage Minimum (Num Lock)
- 0x29, 0x05, // Usage Maximum (Kana)
- 0x95, 0x05, // Report Count (5)
- 0x75, 0x01, // Report Size (1)
- 0x91, 0x02, // Output (Data, Variable, Absolute)
+ 0x05, 0x08, // Usage Page (LED)
+ 0x19, 0x01, // Usage Minimum (Num Lock)
+ 0x29, 0x05, // Usage Maximum (Kana)
+ 0x95, 0x05, // Report Count (5)
+ 0x75, 0x01, // Report Size (1)
+ 0x91, 0x02, // Output (Data, Variable, Absolute)
// LED padding (3 bits)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x03, // Report Size (3)
- 0x91, 0x03, // Output (Constant)
- 0xC0 // End Collection
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x03, // Report Size (3)
+ 0x91, 0x03, // Output (Constant)
+ 0xC0 // End Collection
}};
static bool udi_hid_nkro_setreport(void);
@@ -285,18 +291,24 @@ bool udi_hid_nkro_enable(void) {
return UDI_HID_NKRO_ENABLE_EXT();
}
-void udi_hid_nkro_disable(void) { UDI_HID_NKRO_DISABLE_EXT(); }
+void udi_hid_nkro_disable(void) {
+ UDI_HID_NKRO_DISABLE_EXT();
+}
-bool udi_hid_nkro_setup(void) { return udi_hid_setup(&udi_hid_nkro_rate, &udi_hid_nkro_protocol, (uint8_t *)&udi_hid_nkro_report_desc, udi_hid_nkro_setreport); }
+bool udi_hid_nkro_setup(void) {
+ return udi_hid_setup(&udi_hid_nkro_rate, &udi_hid_nkro_protocol, (uint8_t *)&udi_hid_nkro_report_desc, udi_hid_nkro_setreport);
+}
-uint8_t udi_hid_nkro_getsetting(void) { return 0; }
+uint8_t udi_hid_nkro_getsetting(void) {
+ return 0;
+}
// keyboard receives LED report here
static bool udi_hid_nkro_setreport(void) {
if ((USB_HID_REPORT_TYPE_OUTPUT == (udd_g_ctrlreq.req.wValue >> 8)) && (0 == (0xFF & udd_g_ctrlreq.req.wValue)) && (1 == udd_g_ctrlreq.req.wLength)) {
// Report OUT type on report ID 0 from USB Host
udd_g_ctrlreq.payload = &udi_hid_nkro_report_set;
- udd_g_ctrlreq.callback = udi_hid_nkro_setreport_valid; // must call routine to transform setreport to LED state
+ udd_g_ctrlreq.callback = udi_hid_nkro_setreport_valid; // must call routine to transform setreport to LED state
udd_g_ctrlreq.payload_size = 1;
return true;
}
@@ -333,7 +345,7 @@ static void udi_hid_nkro_setreport_valid(void) {
// UDI_HID_NKRO_CHANGE_LED(udi_hid_nkro_report_set);
}
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
//********************************************************************************************
// EXK (extra-keys) SYS-CTRL Keyboard
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h
index a2d2281628..a330014498 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h
@@ -71,7 +71,7 @@ extern UDC_DESC_STORAGE udi_api_t udi_api_hid_nkro;
extern bool udi_hid_nkro_b_report_valid;
extern volatile bool udi_hid_nkro_b_report_trans_ongoing;
bool udi_hid_nkro_send_report(void);
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
//********************************************************************************************
// SYS-CTRL interface
@@ -81,7 +81,7 @@ extern UDC_DESC_STORAGE udi_api_t udi_api_hid_exk;
extern bool udi_hid_exk_b_report_valid;
extern uint8_t udi_hid_exk_report_set;
bool udi_hid_exk_send_report(void);
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
//********************************************************************************************
// CON Console
@@ -92,7 +92,7 @@ extern bool udi_hid_con_b_report_valid;
extern uint8_t udi_hid_con_report_set[UDI_HID_CON_REPORT_SIZE];
extern volatile bool udi_hid_con_b_report_trans_ongoing;
bool udi_hid_con_send_report(void);
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
//********************************************************************************************
// MOU Mouse
@@ -101,7 +101,7 @@ bool udi_hid_con_send_report(void);
extern UDC_DESC_STORAGE udi_api_t udi_api_hid_mou;
extern bool udi_hid_mou_b_report_valid;
bool udi_hid_mou_send_report(void);
-#endif // MOUSE_ENABLE
+#endif // MOUSE_ENABLE
//********************************************************************************************
// RAW Raw
@@ -110,7 +110,7 @@ bool udi_hid_mou_send_report(void);
extern UDC_DESC_STORAGE udi_api_t udi_api_hid_raw;
bool udi_hid_raw_send_report(void);
bool udi_hid_raw_receive_report(void);
-#endif // RAW_ENABLE
+#endif // RAW_ENABLE
//@}
@@ -118,4 +118,4 @@ bool udi_hid_raw_receive_report(void);
}
#endif
-#endif // _UDC_HID_KBD_H_
+#endif // _UDC_HID_KBD_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_conf.h
index ec73252b69..db5db17ed5 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_conf.h
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_conf.h
@@ -57,4 +57,4 @@
#include "udi_hid_kbd.h"
-#endif // _UDI_HID_KBD_CONF_H_
+#endif // _UDI_HID_KBD_CONF_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c
index 3c1c9a7926..2a60868ed2 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c
+++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c
@@ -78,17 +78,17 @@ UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {.bLength = sizeof(usb
#ifdef USB_DEVICE_MANUFACTURE_NAME
.iManufacturer = 1,
#else
- .iManufacturer = 0, // No manufacture string
+ .iManufacturer = 0, // No manufacture string
#endif
#ifdef USB_DEVICE_PRODUCT_NAME
.iProduct = 2,
#else
- .iProduct = 0, // No product string
+ .iProduct = 0, // No product string
#endif
#if (defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER)
.iSerialNumber = 3,
#else
- .iSerialNumber = 0, // No serial string
+ .iSerialNumber = 0, // No serial string
#endif
.bNumConfigurations = 1};
diff --git a/tmk_core/protocol/arm_atsam/usb/ui.c b/tmk_core/protocol/arm_atsam/usb/ui.c
index 86c7edc94e..f5263d7289 100644
--- a/tmk_core/protocol/arm_atsam/usb/ui.c
+++ b/tmk_core/protocol/arm_atsam/usb/ui.c
@@ -48,7 +48,7 @@
# define ARM_MATH_CM4
#endif
-#undef LITTLE_ENDIAN // redefined in samd51j18a.h
+#undef LITTLE_ENDIAN // redefined in samd51j18a.h
#include "samd51j18a.h"
#include "ui.h"
diff --git a/tmk_core/protocol/arm_atsam/usb/ui.h b/tmk_core/protocol/arm_atsam/usb/ui.h
index f7bc652360..d1c767d457 100644
--- a/tmk_core/protocol/arm_atsam/usb/ui.h
+++ b/tmk_core/protocol/arm_atsam/usb/ui.h
@@ -73,4 +73,4 @@ void ui_process(uint16_t framenumber);
*/
void ui_kbd_led(uint8_t value);
-#endif // _UI_H_
+#endif // _UI_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb.c b/tmk_core/protocol/arm_atsam/usb/usb.c
index b7393660b1..1abf0a2f4d 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb.c
+++ b/tmk_core/protocol/arm_atsam/usb/usb.c
@@ -52,7 +52,7 @@
#endif
#include "compiler.h"
-#undef LITTLE_ENDIAN // redefined in samd51j18a.h
+#undef LITTLE_ENDIAN // redefined in samd51j18a.h
#include "samd51j18a.h"
#include <stdbool.h>
#include <string.h>
@@ -319,7 +319,7 @@ enum status_code usb_device_endpoint_enable_callback(struct usb_module *module_i
module_inst->device_endpoint_enabled_callback_mask[ep_num] |= _usb_endpoint_irq_bits[callback_type];
if (callback_type == USB_DEVICE_ENDPOINT_CALLBACK_TRCPT) {
- if (ep_num == 0) { // control endpoint
+ if (ep_num == 0) { // control endpoint
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 | USB_DEVICE_EPINTENSET_TRCPT1;
} else if (ep & USB_EP_DIR_IN) {
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT1;
@@ -329,7 +329,7 @@ enum status_code usb_device_endpoint_enable_callback(struct usb_module *module_i
}
if (callback_type == USB_DEVICE_ENDPOINT_CALLBACK_TRFAIL) {
- if (ep_num == 0) { // control endpoint
+ if (ep_num == 0) { // control endpoint
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRFAIL0 | USB_DEVICE_EPINTENSET_TRFAIL1;
} else if (ep & USB_EP_DIR_IN) {
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRFAIL1;
@@ -377,7 +377,7 @@ enum status_code usb_device_endpoint_disable_callback(struct usb_module *module_
module_inst->device_endpoint_enabled_callback_mask[ep_num] &= ~_usb_endpoint_irq_bits[callback_type];
if (callback_type == USB_DEVICE_ENDPOINT_CALLBACK_TRCPT) {
- if (ep_num == 0) { // control endpoint
+ if (ep_num == 0) { // control endpoint
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENCLR.reg = USB_DEVICE_EPINTENCLR_TRCPT0 | USB_DEVICE_EPINTENCLR_TRCPT1;
} else if (ep & USB_EP_DIR_IN) {
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENCLR.reg = USB_DEVICE_EPINTENCLR_TRCPT1;
@@ -387,7 +387,7 @@ enum status_code usb_device_endpoint_disable_callback(struct usb_module *module_
}
if (callback_type == USB_DEVICE_ENDPOINT_CALLBACK_TRFAIL) {
- if (ep_num == 0) { // control endpoint
+ if (ep_num == 0) { // control endpoint
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENCLR.reg = USB_DEVICE_EPINTENCLR_TRFAIL0 | USB_DEVICE_EPINTENCLR_TRFAIL1;
} else if (ep & USB_EP_DIR_IN) {
module_inst->hw->DEVICE.DeviceEndpoint[ep_num].EPINTENCLR.reg = USB_DEVICE_EPINTENCLR_TRFAIL1;
@@ -903,11 +903,17 @@ void USB_0_Handler(void) {
}
}
-void USB_1_Handler(void) { _usb_device_interrupt_handler(); }
+void USB_1_Handler(void) {
+ _usb_device_interrupt_handler();
+}
-void USB_2_Handler(void) { _usb_device_interrupt_handler(); }
+void USB_2_Handler(void) {
+ _usb_device_interrupt_handler();
+}
-void USB_3_Handler(void) { _usb_device_interrupt_handler(); }
+void USB_3_Handler(void) {
+ _usb_device_interrupt_handler();
+}
/**
* \brief Get the default USB module settings
@@ -974,10 +980,10 @@ enum status_code usb_init(struct usb_module *module_inst, Usb *const hw, struct
pmclk->APBBMASK.bit.USB_ = 1;
/* Set up the USB DP/DN pins */
- pport->Group[0].PMUX[12].reg = 0x77; // PA24, PA25, function column H for USB D-, D+
+ pport->Group[0].PMUX[12].reg = 0x77; // PA24, PA25, function column H for USB D-, D+
pport->Group[0].PINCFG[24].bit.PMUXEN = 1;
pport->Group[0].PINCFG[25].bit.PMUXEN = 1;
- pport->Group[1].PMUX[11].bit.PMUXE = 7; // PB22, function column H for USB SOF_1KHz output
+ pport->Group[1].PMUX[11].bit.PMUXE = 7; // PB22, function column H for USB SOF_1KHz output
pport->Group[1].PINCFG[22].bit.PMUXEN = 1;
// configure and enable DFLL for USB clock recovery mode at 48MHz
@@ -996,7 +1002,7 @@ enum status_code usb_init(struct usb_module *module_inst, Usb *const hw, struct
while (posc->DFLLSYNC.bit.DFLLCTRLB)
;
posc->DFLLCTRLB.bit.CCDIS = 1;
- posc->DFLLMUL.bit.MUL = 0xbb80; // 4800 x 1KHz
+ posc->DFLLMUL.bit.MUL = 0xbb80; // 4800 x 1KHz
while (posc->DFLLSYNC.bit.DFLLMUL)
;
posc->DFLLCTRLA.bit.ENABLE = 1;
diff --git a/tmk_core/protocol/arm_atsam/usb/usb.h b/tmk_core/protocol/arm_atsam/usb/usb.h
index 4c937ecdc9..270143a112 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb.h
@@ -319,14 +319,18 @@ enum status_code usb_init(struct usb_module *module_inst, Usb *const hw, struct
*
* \param module_inst Pointer to USB device module instance
*/
-static inline void usb_device_attach(struct usb_module *module_inst) { module_inst->hw->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH; }
+static inline void usb_device_attach(struct usb_module *module_inst) {
+ module_inst->hw->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
+}
/**
* \brief Detach USB device from the bus
*
* \param module_inst Pointer to USB device module instance
*/
-static inline void usb_device_detach(struct usb_module *module_inst) { module_inst->hw->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH; }
+static inline void usb_device_detach(struct usb_module *module_inst) {
+ module_inst->hw->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH;
+}
/**
* \brief Get the speed mode of USB device
@@ -348,7 +352,9 @@ static inline enum usb_speed usb_device_get_speed(struct usb_module *module_inst
* \param module_inst Pointer to USB device module instance
* \return USB device address value.
*/
-static inline uint8_t usb_device_get_address(struct usb_module *module_inst) { return ((uint8_t)(module_inst->hw->DEVICE.DADD.bit.DADD)); }
+static inline uint8_t usb_device_get_address(struct usb_module *module_inst) {
+ return ((uint8_t)(module_inst->hw->DEVICE.DADD.bit.DADD));
+}
/**
* \brief Set the speed mode of USB device
@@ -356,7 +362,9 @@ static inline uint8_t usb_device_get_address(struct usb_module *module_inst) { r
* \param module_inst Pointer to USB device module instance
* \param address USB device address value
*/
-static inline void usb_device_set_address(struct usb_module *module_inst, uint8_t address) { module_inst->hw->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | address; }
+static inline void usb_device_set_address(struct usb_module *module_inst, uint8_t address) {
+ module_inst->hw->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | address;
+}
/**
* \brief Get the frame number of USB device
@@ -364,7 +372,9 @@ static inline void usb_device_set_address(struct usb_module *module_inst, uint8_
* \param module_inst Pointer to USB device module instance
* \return USB device frame number value.
*/
-static inline uint16_t usb_device_get_frame_number(struct usb_module *module_inst) { return ((uint16_t)(module_inst->hw->DEVICE.FNUM.bit.FNUM)); }
+static inline uint16_t usb_device_get_frame_number(struct usb_module *module_inst) {
+ return ((uint16_t)(module_inst->hw->DEVICE.FNUM.bit.FNUM));
+}
/**
* \brief Get the micro-frame number of USB device
@@ -372,14 +382,18 @@ static inline uint16_t usb_device_get_frame_number(struct usb_module *module_ins
* \param module_inst Pointer to USB device module instance
* \return USB device micro-frame number value.
*/
-static inline uint16_t usb_device_get_micro_frame_number(struct usb_module *module_inst) { return ((uint16_t)(module_inst->hw->DEVICE.FNUM.reg)); }
+static inline uint16_t usb_device_get_micro_frame_number(struct usb_module *module_inst) {
+ return ((uint16_t)(module_inst->hw->DEVICE.FNUM.reg));
+}
/**
* \brief USB device send the resume wakeup
*
* \param module_inst Pointer to USB device module instance
*/
-static inline void usb_device_send_remote_wake_up(struct usb_module *module_inst) { module_inst->hw->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_UPRSM; }
+static inline void usb_device_send_remote_wake_up(struct usb_module *module_inst) {
+ module_inst->hw->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_UPRSM;
+}
/**
* \brief USB device set the LPM mode
@@ -387,7 +401,9 @@ static inline void usb_device_send_remote_wake_up(struct usb_module *module_inst
* \param module_inst Pointer to USB device module instance
* \param lpm_mode LPM mode
*/
-static inline void usb_device_set_lpm_mode(struct usb_module *module_inst, enum usb_device_lpm_mode lpm_mode) { module_inst->hw->DEVICE.CTRLB.bit.LPMHDSK = lpm_mode; }
+static inline void usb_device_set_lpm_mode(struct usb_module *module_inst, enum usb_device_lpm_mode lpm_mode) {
+ module_inst->hw->DEVICE.CTRLB.bit.LPMHDSK = lpm_mode;
+}
/**
* \name USB Device Callback Management
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_atmel.h b/tmk_core/protocol/arm_atsam/usb/usb_atmel.h
index 1cef703788..82bafdc7d1 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_atmel.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_atmel.h
@@ -109,7 +109,7 @@
#define USB_PID_ATMEL_UC3_EVK1101_CTRLPANEL_HID_MS 0x2306
#define USB_PID_ATMEL_UC3_CDC 0x2307
#define USB_PID_ATMEL_UC3_AUDIO_MICRO 0x2308
-#define USB_PID_ATMEL_UC3_CDC_DEBUG 0x2310 // Virtual Com (debug interface) on EVK11xx
+#define USB_PID_ATMEL_UC3_CDC_DEBUG 0x2310 // Virtual Com (debug interface) on EVK11xx
#define USB_PID_ATMEL_UC3_AUDIO_SPEAKER_MICRO 0x2311
#define USB_PID_ATMEL_UC3_CDC_MSC 0x2312
//! @}
@@ -186,4 +186,4 @@
//! @}
-#endif // _USB_ATMEL_H_
+#endif // _USB_ATMEL_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_device_udd.c b/tmk_core/protocol/arm_atsam/usb/usb_device_udd.c
index f138b42786..e4510e7363 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_device_udd.c
+++ b/tmk_core/protocol/arm_atsam/usb/usb_device_udd.c
@@ -127,12 +127,12 @@ uint8_t udd_ctrl_buffer[USB_DEVICE_EP_CTRL_SIZE];
/** Bit definitions about endpoint control state machine for udd_ep_control_state */
typedef enum {
- UDD_EPCTRL_SETUP = 0, //!< Wait a SETUP packet
- UDD_EPCTRL_DATA_OUT = 1, //!< Wait a OUT data packet
- UDD_EPCTRL_DATA_IN = 2, //!< Wait a IN data packet
- UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP = 3, //!< Wait a IN ZLP packet
- UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP = 4, //!< Wait a OUT ZLP packet
- UDD_EPCTRL_STALL_REQ = 5, //!< STALL enabled on IN & OUT packet
+ UDD_EPCTRL_SETUP = 0, //!< Wait a SETUP packet
+ UDD_EPCTRL_DATA_OUT = 1, //!< Wait a OUT data packet
+ UDD_EPCTRL_DATA_IN = 2, //!< Wait a IN data packet
+ UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP = 3, //!< Wait a IN ZLP packet
+ UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP = 4, //!< Wait a OUT ZLP packet
+ UDD_EPCTRL_STALL_REQ = 5, //!< STALL enabled on IN & OUT packet
} udd_ctrl_ep_state_t;
/** Global variable to give and record information of the set up request management */
@@ -363,11 +363,17 @@ void udd_ep_abort(udd_ep_id_t ep) {
}
}
-bool udd_is_high_speed(void) { return false; }
+bool udd_is_high_speed(void) {
+ return false;
+}
-uint16_t udd_get_frame_number(void) { return usb_device_get_frame_number(&usb_device); }
+uint16_t udd_get_frame_number(void) {
+ return usb_device_get_frame_number(&usb_device);
+}
-uint16_t udd_get_micro_frame_number(void) { return usb_device_get_micro_frame_number(&usb_device); }
+uint16_t udd_get_micro_frame_number(void) {
+ return usb_device_get_micro_frame_number(&usb_device);
+}
void udd_ep_free(udd_ep_id_t ep) {
struct usb_device_endpoint_config config_ep;
@@ -436,7 +442,9 @@ bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes, uint16_t MaxEndpointSize
return true;
}
-bool udd_ep_is_halted(udd_ep_id_t ep) { return usb_device_endpoint_is_halted(&usb_device, ep); }
+bool udd_ep_is_halted(udd_ep_id_t ep) {
+ return usb_device_endpoint_is_halted(&usb_device, ep);
+}
bool udd_ep_set_halt(udd_ep_id_t ep) {
uint8_t ep_num = ep & USB_EP_ADDR_MASK;
@@ -591,9 +599,13 @@ bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket, uint8_t *buf, iram_size_t bu
}
}
-void udd_set_address(uint8_t address) { usb_device_set_address(&usb_device, address); }
+void udd_set_address(uint8_t address) {
+ usb_device_set_address(&usb_device, address);
+}
-uint8_t udd_getaddress(void) { return usb_device_get_address(&usb_device); }
+uint8_t udd_getaddress(void) {
+ return usb_device_get_address(&usb_device);
+}
void udd_send_remotewakeup(void) {
uint32_t try
@@ -913,7 +925,7 @@ static void _usb_device_lpm_suspend(struct usb_module *module_inst, void *pointe
usb_device_enable_callback(&usb_device, USB_DEVICE_CALLBACK_WAKEUP);
//#warning Here the sleep mode must be choose to have a DFLL startup time < bmAttribut.HIRD
- udd_sleep_mode(UDD_STATE_SUSPEND_LPM); // Enter in LPM SUSPEND mode
+ udd_sleep_mode(UDD_STATE_SUSPEND_LPM); // Enter in LPM SUSPEND mode
if ((*lpm_wakeup_enable)) {
UDC_REMOTEWAKEUP_LPM_ENABLE();
}
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_hub.c b/tmk_core/protocol/arm_atsam/usb/usb_hub.c
index c5fd284aab..14fba799c7 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_hub.c
+++ b/tmk_core/protocol/arm_atsam/usb/usb_hub.c
@@ -27,7 +27,7 @@ uint8_t usb_extra_state;
uint8_t usb_extra_manual;
uint8_t usb_gcr_auto;
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
uint16_t adc_extra;
@@ -51,10 +51,10 @@ void USB_Hub_init(void) {
pmclk->APBBMASK.bit.USB_ = 1;
// setup port pins for D-, D+, and SOF_1KHZ
- pport->Group[0].PMUX[12].reg = 0x77; // PA24, PA25, function column H for USB D-, D+
+ pport->Group[0].PMUX[12].reg = 0x77; // PA24, PA25, function column H for USB D-, D+
pport->Group[0].PINCFG[24].bit.PMUXEN = 1;
pport->Group[0].PINCFG[25].bit.PMUXEN = 1;
- pport->Group[1].PMUX[11].bit.PMUXE = 7; // PB22, function column H for USB SOF_1KHz output
+ pport->Group[1].PMUX[11].bit.PMUXE = 7; // PB22, function column H for USB SOF_1KHz output
pport->Group[1].PINCFG[22].bit.PMUXEN = 1;
// configure and enable DFLL for USB clock recovery mode at 48MHz
@@ -78,7 +78,7 @@ void USB_Hub_init(void) {
DBGC(DC_USB2422_INIT_OSC_SYNC_DFLLCTRLB_4);
}
posc->DFLLCTRLB.bit.CCDIS = 1;
- posc->DFLLMUL.bit.MUL = 0xBB80; // 4800 x 1KHz
+ posc->DFLLMUL.bit.MUL = 0xBB80; // 4800 x 1KHz
while (posc->DFLLSYNC.bit.DFLLMUL) {
DBGC(DC_USB2422_INIT_OSC_SYNC_DFLLMUL);
}
@@ -99,7 +99,7 @@ void USB_Hub_init(void) {
pusb->DEVICE.PADCAL.bit.TRANSP = (USB_FUSES_TRANSP_ADDR >> USB_FUSES_TRANSP_Pos) & USB_FUSES_TRANSP_Msk;
pusb->DEVICE.PADCAL.bit.TRIM = (USB_FUSES_TRIM_ADDR >> USB_FUSES_TRIM_Pos) & USB_FUSES_TRIM_Msk;
// device mode, enabled
- pusb->DEVICE.CTRLB.bit.SPDCONF = 0; // full speed
+ pusb->DEVICE.CTRLB.bit.SPDCONF = 0; // full speed
pusb->DEVICE.CTRLA.bit.MODE = 0;
pusb->DEVICE.CTRLA.bit.ENABLE = 1;
while (pusb->DEVICE.SYNCBUSY.bit.ENABLE) {
@@ -111,8 +111,8 @@ void USB_Hub_init(void) {
USB2422_init();
- sr_exp_data.bit.HUB_CONNECT = 1; // connect signal
- sr_exp_data.bit.HUB_RESET_N = 1; // reset high
+ sr_exp_data.bit.HUB_CONNECT = 1; // connect signal
+ sr_exp_data.bit.HUB_RESET_N = 1; // reset high
SR_EXP_WriteData();
wait_us(100);
@@ -122,7 +122,7 @@ void USB_Hub_init(void) {
usb_extra_manual = 0;
usb_gcr_auto = 1;
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
DBGC(DC_USB2422_INIT_COMPLETE);
}
@@ -131,10 +131,10 @@ void USB_reset(void) {
DBGC(DC_USB_RESET_BEGIN);
// pulse reset for at least 1 usec
- sr_exp_data.bit.HUB_RESET_N = 0; // reset low
+ sr_exp_data.bit.HUB_RESET_N = 0; // reset low
SR_EXP_WriteData();
wait_us(2);
- sr_exp_data.bit.HUB_RESET_N = 1; // reset high to run
+ sr_exp_data.bit.HUB_RESET_N = 1; // reset high to run
SR_EXP_WriteData();
DBGC(DC_USB_RESET_COMPLETE);
@@ -150,7 +150,9 @@ void USB_configure(void) {
DBGC(DC_USB_CONFIGURE_COMPLETE);
}
-uint16_t USB_active(void) { return USB2422_active(); }
+uint16_t USB_active(void) {
+ return USB2422_active();
+}
void USB_set_host_by_voltage(void) {
// UP is upstream device (HOST)
@@ -162,13 +164,13 @@ void USB_set_host_by_voltage(void) {
usb_host_port = USB_HOST_PORT_UNKNOWN;
#ifndef MD_BOOTLOADER
usb_extra_state = USB_EXTRA_STATE_UNKNOWN;
-#endif // MD_BOOTLOADER
- sr_exp_data.bit.SRC_1 = 1; // USBC-1 available for test
- sr_exp_data.bit.SRC_2 = 1; // USBC-2 available for test
- sr_exp_data.bit.E_UP_N = 1; // HOST disable
- sr_exp_data.bit.E_DN1_N = 1; // EXTRA disable
- sr_exp_data.bit.E_VBUS_1 = 0; // USBC-1 disable full power I/O
- sr_exp_data.bit.E_VBUS_2 = 0; // USBC-2 disable full power I/O
+#endif // MD_BOOTLOADER
+ sr_exp_data.bit.SRC_1 = 1; // USBC-1 available for test
+ sr_exp_data.bit.SRC_2 = 1; // USBC-2 available for test
+ sr_exp_data.bit.E_UP_N = 1; // HOST disable
+ sr_exp_data.bit.E_DN1_N = 1; // EXTRA disable
+ sr_exp_data.bit.E_VBUS_1 = 0; // USBC-1 disable full power I/O
+ sr_exp_data.bit.E_VBUS_2 = 0; // USBC-2 disable full power I/O
SR_EXP_WriteData();
@@ -185,33 +187,33 @@ void USB_set_host_by_voltage(void) {
v_con_2_boot = v_con_2;
if (v_con_1 > v_con_2) {
- sr_exp_data.bit.S_UP = 0; // HOST to USBC-1
- sr_exp_data.bit.S_DN1 = 1; // EXTRA to USBC-2
- sr_exp_data.bit.SRC_1 = 1; // HOST on USBC-1
- sr_exp_data.bit.SRC_2 = 0; // EXTRA available on USBC-2
+ sr_exp_data.bit.S_UP = 0; // HOST to USBC-1
+ sr_exp_data.bit.S_DN1 = 1; // EXTRA to USBC-2
+ sr_exp_data.bit.SRC_1 = 1; // HOST on USBC-1
+ sr_exp_data.bit.SRC_2 = 0; // EXTRA available on USBC-2
- sr_exp_data.bit.E_VBUS_1 = 1; // USBC-1 enable full power I/O
- sr_exp_data.bit.E_VBUS_2 = 0; // USBC-2 disable full power I/O
+ sr_exp_data.bit.E_VBUS_1 = 1; // USBC-1 enable full power I/O
+ sr_exp_data.bit.E_VBUS_2 = 0; // USBC-2 disable full power I/O
SR_EXP_WriteData();
- sr_exp_data.bit.E_UP_N = 0; // HOST enable
+ sr_exp_data.bit.E_UP_N = 0; // HOST enable
SR_EXP_WriteData();
usb_host_port = USB_HOST_PORT_1;
} else {
- sr_exp_data.bit.S_UP = 1; // EXTRA to USBC-1
- sr_exp_data.bit.S_DN1 = 0; // HOST to USBC-2
- sr_exp_data.bit.SRC_1 = 0; // EXTRA available on USBC-1
- sr_exp_data.bit.SRC_2 = 1; // HOST on USBC-2
+ sr_exp_data.bit.S_UP = 1; // EXTRA to USBC-1
+ sr_exp_data.bit.S_DN1 = 0; // HOST to USBC-2
+ sr_exp_data.bit.SRC_1 = 0; // EXTRA available on USBC-1
+ sr_exp_data.bit.SRC_2 = 1; // HOST on USBC-2
- sr_exp_data.bit.E_VBUS_1 = 0; // USBC-1 disable full power I/O
- sr_exp_data.bit.E_VBUS_2 = 1; // USBC-2 enable full power I/O
+ sr_exp_data.bit.E_VBUS_1 = 0; // USBC-1 disable full power I/O
+ sr_exp_data.bit.E_VBUS_2 = 1; // USBC-2 enable full power I/O
SR_EXP_WriteData();
- sr_exp_data.bit.E_UP_N = 0; // HOST enable
+ sr_exp_data.bit.E_UP_N = 0; // HOST enable
SR_EXP_WriteData();
@@ -220,7 +222,7 @@ void USB_set_host_by_voltage(void) {
#ifndef MD_BOOTLOADER
usb_extra_state = USB_EXTRA_STATE_DISABLED;
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
USB_reset();
USB_configure();
@@ -241,7 +243,7 @@ uint8_t USB_Hub_Port_Detect_Init(void) {
while (!USB_active()) {
tmod = timer_read64() % PORT_DETECT_RETRY_INTERVAL;
- if (v_con_1 > v_con_2) // Values updated from USB_set_host_by_voltage();
+ if (v_con_1 > v_con_2) // Values updated from USB_set_host_by_voltage();
{
// 1 flash for port 1 detected
if (tmod > 500 && tmod < 600) {
@@ -249,7 +251,7 @@ uint8_t USB_Hub_Port_Detect_Init(void) {
} else {
DBG_LED_OFF;
}
- } else if (v_con_2 > v_con_1) // Values updated from USB_set_host_by_voltage();
+ } else if (v_con_2 > v_con_1) // Values updated from USB_set_host_by_voltage();
{
// 2 flash for port 2 detected
if (tmod > 500 && tmod < 600) {
@@ -321,7 +323,7 @@ void USB_HandleExtraDevice(void) {
// Detect unplug and reset state to disabled
if (adc_extra > USB_EXTRA_ADC_THRESHOLD) usb_extra_state = USB_EXTRA_STATE_DISABLED;
- return; // Return even if unplug detected
+ return; // Return even if unplug detected
}
if (usb_extra_manual) {
@@ -337,4 +339,4 @@ void USB_HandleExtraDevice(void) {
USB_ExtraSetState(USB_EXTRA_STATE_DISABLED);
}
-#endif // MD_BOOTLOADER
+#endif // MD_BOOTLOADER
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_hub.h b/tmk_core/protocol/arm_atsam/usb/usb_hub.h
index 76b1e0a326..d7b2e3fab4 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_hub.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_hub.h
@@ -48,4 +48,4 @@ uint16_t adc_get(uint8_t muxpos);
void USB_HandleExtraDevice(void);
void USB_ExtraSetState(uint8_t state);
-#endif //_USB2422_H_
+#endif //_USB2422_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_main.h b/tmk_core/protocol/arm_atsam/usb/usb_main.h
index d8461c6c9f..c3b1698c59 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_main.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_main.h
@@ -71,31 +71,31 @@ void main_kbd_disable(void);
extern volatile bool main_b_nkro_enable;
bool main_nkro_enable(void);
void main_nkro_disable(void);
-#endif // NKRO_ENABLE
+#endif // NKRO_ENABLE
#ifdef EXTRAKEY_ENABLE
extern volatile bool main_b_exk_enable;
bool main_exk_enable(void);
void main_exk_disable(void);
-#endif // EXTRAKEY_ENABLE
+#endif // EXTRAKEY_ENABLE
#ifdef CONSOLE_ENABLE
extern volatile bool main_b_con_enable;
bool main_con_enable(void);
void main_con_disable(void);
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
#ifdef MOUSE_ENABLE
extern volatile bool main_b_mou_enable;
bool main_mou_enable(void);
void main_mou_disable(void);
-#endif // MOUSE_ENABLE
+#endif // MOUSE_ENABLE
#ifdef RAW_ENABLE
extern volatile bool main_b_raw_enable;
bool main_raw_enable(void);
void main_raw_disable(void);
void main_raw_receive(uint8_t *buffer, uint8_t len);
-#endif // RAW_ENABLE
+#endif // RAW_ENABLE
-#endif // _MAIN_H_
+#endif // _MAIN_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_protocol.h b/tmk_core/protocol/arm_atsam/usb/usb_protocol.h
index 54d023a6ee..639b80a804 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_protocol.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_protocol.h
@@ -63,8 +63,8 @@
*/
//! Value for field bcdUSB
-#define USB_V2_0 0x0200 //!< USB Specification version 2.00
-#define USB_V2_1 0x0201 //!< USB Specification version 2.01
+#define USB_V2_0 0x0200 //!< USB Specification version 2.00
+#define USB_V2_1 0x0201 //!< USB Specification version 2.01
/*! \name Generic definitions (Class, subclass and protocol)
*/
@@ -85,26 +85,26 @@
/**
* \brief USB request data transfer direction (bmRequestType)
*/
-#define USB_REQ_DIR_OUT (0 << 7) //!< Host to device
-#define USB_REQ_DIR_IN (1 << 7) //!< Device to host
-#define USB_REQ_DIR_MASK (1 << 7) //!< Mask
+#define USB_REQ_DIR_OUT (0 << 7) //!< Host to device
+#define USB_REQ_DIR_IN (1 << 7) //!< Device to host
+#define USB_REQ_DIR_MASK (1 << 7) //!< Mask
/**
* \brief USB request types (bmRequestType)
*/
-#define USB_REQ_TYPE_STANDARD (0 << 5) //!< Standard request
-#define USB_REQ_TYPE_CLASS (1 << 5) //!< Class-specific request
-#define USB_REQ_TYPE_VENDOR (2 << 5) //!< Vendor-specific request
-#define USB_REQ_TYPE_MASK (3 << 5) //!< Mask
+#define USB_REQ_TYPE_STANDARD (0 << 5) //!< Standard request
+#define USB_REQ_TYPE_CLASS (1 << 5) //!< Class-specific request
+#define USB_REQ_TYPE_VENDOR (2 << 5) //!< Vendor-specific request
+#define USB_REQ_TYPE_MASK (3 << 5) //!< Mask
/**
* \brief USB recipient codes (bmRequestType)
*/
-#define USB_REQ_RECIP_DEVICE (0 << 0) //!< Recipient device
-#define USB_REQ_RECIP_INTERFACE (1 << 0) //!< Recipient interface
-#define USB_REQ_RECIP_ENDPOINT (2 << 0) //!< Recipient endpoint
-#define USB_REQ_RECIP_OTHER (3 << 0) //!< Recipient other
-#define USB_REQ_RECIP_MASK (0x1F) //!< Mask
+#define USB_REQ_RECIP_DEVICE (0 << 0) //!< Recipient device
+#define USB_REQ_RECIP_INTERFACE (1 << 0) //!< Recipient interface
+#define USB_REQ_RECIP_ENDPOINT (2 << 0) //!< Recipient endpoint
+#define USB_REQ_RECIP_OTHER (3 << 0) //!< Recipient other
+#define USB_REQ_RECIP_MASK (0x1F) //!< Mask
/**
* \brief Standard USB requests (bRequest)
@@ -149,8 +149,8 @@ enum usb_endpoint_status {
* \note valid for SetFeature request.
*/
enum usb_device_feature {
- USB_DEV_FEATURE_REMOTE_WAKEUP = 1, //!< Remote wakeup enabled
- USB_DEV_FEATURE_TEST_MODE = 2, //!< USB test mode
+ USB_DEV_FEATURE_REMOTE_WAKEUP = 1, //!< Remote wakeup enabled
+ USB_DEV_FEATURE_TEST_MODE = 2, //!< USB test mode
USB_DEV_FEATURE_OTG_B_HNP_ENABLE = 3,
USB_DEV_FEATURE_OTG_A_HNP_SUPPORT = 4,
USB_DEV_FEATURE_OTG_A_ALT_HNP_SUPPORT = 5
@@ -261,7 +261,7 @@ enum usb_ep_type {
* \brief Standard USB language IDs for string descriptors
*/
enum usb_langid {
- USB_LANGID_EN_US = 0x0409, //!< English (United States)
+ USB_LANGID_EN_US = 0x0409, //!< English (United States)
};
/**
@@ -396,14 +396,14 @@ typedef struct {
* \brief Standard USB Interface Association Descriptor structure
*/
typedef struct {
- uint8_t bLength; //!< size of this descriptor in bytes
- uint8_t bDescriptorType; //!< INTERFACE descriptor type
- uint8_t bFirstInterface; //!< Number of interface
- uint8_t bInterfaceCount; //!< value to select alternate setting
- uint8_t bFunctionClass; //!< Class code assigned by the USB
- uint8_t bFunctionSubClass; //!< Sub-class code assigned by the USB
- uint8_t bFunctionProtocol; //!< Protocol code assigned by the USB
- uint8_t iFunction; //!< Index of string descriptor
+ uint8_t bLength; //!< size of this descriptor in bytes
+ uint8_t bDescriptorType; //!< INTERFACE descriptor type
+ uint8_t bFirstInterface; //!< Number of interface
+ uint8_t bInterfaceCount; //!< value to select alternate setting
+ uint8_t bFunctionClass; //!< Class code assigned by the USB
+ uint8_t bFunctionSubClass; //!< Sub-class code assigned by the USB
+ uint8_t bFunctionProtocol; //!< Protocol code assigned by the USB
+ uint8_t iFunction; //!< Index of string descriptor
} usb_association_desc_t;
/**
@@ -420,25 +420,25 @@ typedef struct {
uint8_t bMaxPower;
} usb_conf_desc_t;
-#define USB_CONFIG_ATTR_MUST_SET (1 << 7) //!< Must always be set
-#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6) //!< Bus-powered
-#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6) //!< Self-powered
-#define USB_CONFIG_ATTR_REMOTE_WAKEUP (1 << 5) //!< remote wakeup supported
+#define USB_CONFIG_ATTR_MUST_SET (1 << 7) //!< Must always be set
+#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6) //!< Bus-powered
+#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6) //!< Self-powered
+#define USB_CONFIG_ATTR_REMOTE_WAKEUP (1 << 5) //!< remote wakeup supported
-#define USB_CONFIG_MAX_POWER(ma) (((ma) + 1) / 2) //!< Max power in mA
+#define USB_CONFIG_MAX_POWER(ma) (((ma) + 1) / 2) //!< Max power in mA
/**
* \brief Standard USB association descriptor structure
*/
typedef struct {
- uint8_t bLength; //!< Size of this descriptor in bytes
- uint8_t bDescriptorType; //!< Interface descriptor type
- uint8_t bFirstInterface; //!< Number of interface
- uint8_t bInterfaceCount; //!< value to select alternate setting
- uint8_t bFunctionClass; //!< Class code assigned by the USB
- uint8_t bFunctionSubClass; //!< Sub-class code assigned by the USB
- uint8_t bFunctionProtocol; //!< Protocol code assigned by the USB
- uint8_t iFunction; //!< Index of string descriptor
+ uint8_t bLength; //!< Size of this descriptor in bytes
+ uint8_t bDescriptorType; //!< Interface descriptor type
+ uint8_t bFirstInterface; //!< Number of interface
+ uint8_t bInterfaceCount; //!< value to select alternate setting
+ uint8_t bFunctionClass; //!< Class code assigned by the USB
+ uint8_t bFunctionSubClass; //!< Sub-class code assigned by the USB
+ uint8_t bFunctionProtocol; //!< Protocol code assigned by the USB
+ uint8_t iFunction; //!< Index of string descriptor
} usb_iad_desc_t;
/**
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_protocol_cdc.h b/tmk_core/protocol/arm_atsam/usb/usb_protocol_cdc.h
index f35503a3be..1d36d58dbd 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_protocol_cdc.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_protocol_cdc.h
@@ -50,41 +50,41 @@
#ifdef VIRTSER_ENABLE
-# define CDC_CLASS_DEVICE 0x02 //!< USB Communication Device Class
-# define CDC_CLASS_COMM 0x02 //!< CDC Communication Class Interface
-# define CDC_CLASS_DATA 0x0A //!< CDC Data Class Interface
-
-# define CDC_SUBCLASS_DLCM 0x01 //!< Direct Line Control Model
-# define CDC_SUBCLASS_ACM 0x02 //!< Abstract Control Model
-# define CDC_SUBCLASS_TCM 0x03 //!< Telephone Control Model
-# define CDC_SUBCLASS_MCCM 0x04 //!< Multi-Channel Control Model
-# define CDC_SUBCLASS_CCM 0x05 //!< CAPI Control Model
-# define CDC_SUBCLASS_ETH 0x06 //!< Ethernet Networking Control Model
-# define CDC_SUBCLASS_ATM 0x07 //!< ATM Networking Control Model
-
-# define CDC_PROTOCOL_V25TER 0x01 //!< Common AT commands
-
-# define CDC_PROTOCOL_I430 0x30 //!< ISDN BRI
-# define CDC_PROTOCOL_HDLC 0x31 //!< HDLC
-# define CDC_PROTOCOL_TRANS 0x32 //!< Transparent
-# define CDC_PROTOCOL_Q921M 0x50 //!< Q.921 management protocol
-# define CDC_PROTOCOL_Q921 0x51 //!< Q.931 [sic] Data link protocol
-# define CDC_PROTOCOL_Q921TM 0x52 //!< Q.921 TEI-multiplexor
-# define CDC_PROTOCOL_V42BIS 0x90 //!< Data compression procedures
-# define CDC_PROTOCOL_Q931 0x91 //!< Euro-ISDN protocol control
-# define CDC_PROTOCOL_V120 0x92 //!< V.24 rate adaption to ISDN
-# define CDC_PROTOCOL_CAPI20 0x93 //!< CAPI Commands
-# define CDC_PROTOCOL_HOST 0xFD //!< Host based driver
+# define CDC_CLASS_DEVICE 0x02 //!< USB Communication Device Class
+# define CDC_CLASS_COMM 0x02 //!< CDC Communication Class Interface
+# define CDC_CLASS_DATA 0x0A //!< CDC Data Class Interface
+
+# define CDC_SUBCLASS_DLCM 0x01 //!< Direct Line Control Model
+# define CDC_SUBCLASS_ACM 0x02 //!< Abstract Control Model
+# define CDC_SUBCLASS_TCM 0x03 //!< Telephone Control Model
+# define CDC_SUBCLASS_MCCM 0x04 //!< Multi-Channel Control Model
+# define CDC_SUBCLASS_CCM 0x05 //!< CAPI Control Model
+# define CDC_SUBCLASS_ETH 0x06 //!< Ethernet Networking Control Model
+# define CDC_SUBCLASS_ATM 0x07 //!< ATM Networking Control Model
+
+# define CDC_PROTOCOL_V25TER 0x01 //!< Common AT commands
+
+# define CDC_PROTOCOL_I430 0x30 //!< ISDN BRI
+# define CDC_PROTOCOL_HDLC 0x31 //!< HDLC
+# define CDC_PROTOCOL_TRANS 0x32 //!< Transparent
+# define CDC_PROTOCOL_Q921M 0x50 //!< Q.921 management protocol
+# define CDC_PROTOCOL_Q921 0x51 //!< Q.931 [sic] Data link protocol
+# define CDC_PROTOCOL_Q921TM 0x52 //!< Q.921 TEI-multiplexor
+# define CDC_PROTOCOL_V42BIS 0x90 //!< Data compression procedures
+# define CDC_PROTOCOL_Q931 0x91 //!< Euro-ISDN protocol control
+# define CDC_PROTOCOL_V120 0x92 //!< V.24 rate adaption to ISDN
+# define CDC_PROTOCOL_CAPI20 0x93 //!< CAPI Commands
+# define CDC_PROTOCOL_HOST 0xFD //!< Host based driver
# define CDC_PROTOCOL_PUFD 0xFE
-# define CDC_CS_INTERFACE 0x24 //!< Interface Functional Descriptor
-# define CDC_CS_ENDPOINT 0x25 //!< Endpoint Functional Descriptor
+# define CDC_CS_INTERFACE 0x24 //!< Interface Functional Descriptor
+# define CDC_CS_ENDPOINT 0x25 //!< Endpoint Functional Descriptor
-# define CDC_SCS_HEADER 0x00 //!< Header Functional Descriptor
-# define CDC_SCS_CALL_MGMT 0x01 //!< Call Management
-# define CDC_SCS_ACM 0x02 //!< Abstract Control Management
-# define CDC_SCS_UNION 0x06 //!< Union Functional Descriptor
+# define CDC_SCS_HEADER 0x00 //!< Header Functional Descriptor
+# define CDC_SCS_CALL_MGMT 0x01 //!< Call Management
+# define CDC_SCS_ACM 0x02 //!< Abstract Control Management
+# define CDC_SCS_UNION 0x06 //!< Union Functional Descriptor
# define USB_REQ_CDC_SEND_ENCAPSULATED_COMMAND 0x00
# define USB_REQ_CDC_GET_ENCAPSULATED_RESPONSE 0x01
@@ -144,17 +144,17 @@ typedef struct {
# pragma pack(pop)
enum cdc_char_format {
- CDC_STOP_BITS_1 = 0, //!< 1 stop bit
- CDC_STOP_BITS_1_5 = 1, //!< 1.5 stop bits
- CDC_STOP_BITS_2 = 2, //!< 2 stop bits
+ CDC_STOP_BITS_1 = 0, //!< 1 stop bit
+ CDC_STOP_BITS_1_5 = 1, //!< 1.5 stop bits
+ CDC_STOP_BITS_2 = 2, //!< 2 stop bits
};
enum cdc_parity {
- CDC_PAR_NONE = 0, //!< No parity
- CDC_PAR_ODD = 1, //!< Odd parity
- CDC_PAR_EVEN = 2, //!< Even parity
- CDC_PAR_MARK = 3, //!< Parity forced to 0 (space)
- CDC_PAR_SPACE = 4, //!< Parity forced to 1 (mark)
+ CDC_PAR_NONE = 0, //!< No parity
+ CDC_PAR_ODD = 1, //!< Odd parity
+ CDC_PAR_EVEN = 2, //!< Even parity
+ CDC_PAR_MARK = 3, //!< Parity forced to 0 (space)
+ CDC_PAR_SPACE = 4, //!< Parity forced to 1 (mark)
};
typedef struct {
@@ -187,4 +187,4 @@ typedef struct {
#endif
-#endif // _USB_PROTOCOL_CDC_H_
+#endif // _USB_PROTOCOL_CDC_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h b/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
index fb97f63cef..c984c0762f 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
@@ -121,13 +121,13 @@ COMPILER_PACK_SET(1)
//! \brief HID Descriptor
typedef struct {
- uint8_t bLength; //!< Size of this descriptor in bytes
- uint8_t bDescriptorType; //!< HID descriptor type
- le16_t bcdHID; //!< Binary Coded Decimal Spec. release
- uint8_t bCountryCode; //!< Hardware target country
- uint8_t bNumDescriptors; //!< Number of HID class descriptors to follow
- uint8_t bRDescriptorType; //!< Report descriptor type
- le16_t wDescriptorLength; //!< Total length of Report descriptor
+ uint8_t bLength; //!< Size of this descriptor in bytes
+ uint8_t bDescriptorType; //!< HID descriptor type
+ le16_t bcdHID; //!< Binary Coded Decimal Spec. release
+ uint8_t bCountryCode; //!< Hardware target country
+ uint8_t bNumDescriptors; //!< Number of HID class descriptors to follow
+ uint8_t bRDescriptorType; //!< Report descriptor type
+ le16_t wDescriptorLength; //!< Total length of Report descriptor
} usb_hid_descriptor_t;
COMPILER_PACK_RESET()
@@ -151,45 +151,45 @@ COMPILER_PACK_RESET()
//! \name Country code
//! @{
-#define USB_HID_NO_COUNTRY_CODE 0 // Not Supported
-#define USB_HID_COUNTRY_ARABIC 1 // Arabic
-#define USB_HID_COUNTRY_BELGIAN 2 // Belgian
-#define USB_HID_COUNTRY_CANADIAN_BILINGUAL 3 // Canadian-Bilingual
-#define USB_HID_COUNTRY_CANADIAN_FRENCH 4 // Canadian-French
-#define USB_HID_COUNTRY_CZECH_REPUBLIC 5 // Czech Republic
-#define USB_HID_COUNTRY_DANISH 6 // Danish
-#define USB_HID_COUNTRY_FINNISH 7 // Finnish
-#define USB_HID_COUNTRY_FRENCH 8 // French
-#define USB_HID_COUNTRY_GERMAN 9 // German
-#define USB_HID_COUNTRY_GREEK 10 // Greek
-#define USB_HID_COUNTRY_HEBREW 11 // Hebrew
-#define USB_HID_COUNTRY_HUNGARY 12 // Hungary
-#define USB_HID_COUNTRY_INTERNATIONAL_ISO 13 // International (ISO)
-#define USB_HID_COUNTRY_ITALIAN 14 // Italian
-#define USB_HID_COUNTRY_JAPAN_KATAKANA 15 // Japan (Katakana)
-#define USB_HID_COUNTRY_KOREAN 16 // Korean
-#define USB_HID_COUNTRY_LATIN_AMERICAN 17 // Latin American
-#define USB_HID_COUNTRY_NETHERLANDS_DUTCH 18 // Netherlands/Dutch
-#define USB_HID_COUNTRY_NORWEGIAN 19 // Norwegian
-#define USB_HID_COUNTRY_PERSIAN_FARSI 20 // Persian (Farsi)
-#define USB_HID_COUNTRY_POLAND 21 // Poland
-#define USB_HID_COUNTRY_PORTUGUESE 22 // Portuguese
-#define USB_HID_COUNTRY_RUSSIA 23 // Russia
-#define USB_HID_COUNTRY_SLOVAKIA 24 // Slovakia
-#define USB_HID_COUNTRY_SPANISH 25 // Spanish
-#define USB_HID_COUNTRY_SWEDISH 26 // Swedish
-#define USB_HID_COUNTRY_SWISS_FRENCH 27 // Swiss/French
-#define USB_HID_COUNTRY_SWISS_GERMAN 28 // Swiss/German
-#define USB_HID_COUNTRY_SWITZERLAND 29 // Switzerland
-#define USB_HID_COUNTRY_TAIWAN 30 // Taiwan
-#define USB_HID_COUNTRY_TURKISH_Q 31 // Turkish-Q
-#define USB_HID_COUNTRY_UK 32 // UK
-#define USB_HID_COUNTRY_US 33 // US
-#define USB_HID_COUNTRY_YUGOSLAVIA 34 // Yugoslavia
+#define USB_HID_NO_COUNTRY_CODE 0 // Not Supported
+#define USB_HID_COUNTRY_ARABIC 1 // Arabic
+#define USB_HID_COUNTRY_BELGIAN 2 // Belgian
+#define USB_HID_COUNTRY_CANADIAN_BILINGUAL 3 // Canadian-Bilingual
+#define USB_HID_COUNTRY_CANADIAN_FRENCH 4 // Canadian-French
+#define USB_HID_COUNTRY_CZECH_REPUBLIC 5 // Czech Republic
+#define USB_HID_COUNTRY_DANISH 6 // Danish
+#define USB_HID_COUNTRY_FINNISH 7 // Finnish
+#define USB_HID_COUNTRY_FRENCH 8 // French
+#define USB_HID_COUNTRY_GERMAN 9 // German
+#define USB_HID_COUNTRY_GREEK 10 // Greek
+#define USB_HID_COUNTRY_HEBREW 11 // Hebrew
+#define USB_HID_COUNTRY_HUNGARY 12 // Hungary
+#define USB_HID_COUNTRY_INTERNATIONAL_ISO 13 // International (ISO)
+#define USB_HID_COUNTRY_ITALIAN 14 // Italian
+#define USB_HID_COUNTRY_JAPAN_KATAKANA 15 // Japan (Katakana)
+#define USB_HID_COUNTRY_KOREAN 16 // Korean
+#define USB_HID_COUNTRY_LATIN_AMERICAN 17 // Latin American
+#define USB_HID_COUNTRY_NETHERLANDS_DUTCH 18 // Netherlands/Dutch
+#define USB_HID_COUNTRY_NORWEGIAN 19 // Norwegian
+#define USB_HID_COUNTRY_PERSIAN_FARSI 20 // Persian (Farsi)
+#define USB_HID_COUNTRY_POLAND 21 // Poland
+#define USB_HID_COUNTRY_PORTUGUESE 22 // Portuguese
+#define USB_HID_COUNTRY_RUSSIA 23 // Russia
+#define USB_HID_COUNTRY_SLOVAKIA 24 // Slovakia
+#define USB_HID_COUNTRY_SPANISH 25 // Spanish
+#define USB_HID_COUNTRY_SWEDISH 26 // Swedish
+#define USB_HID_COUNTRY_SWISS_FRENCH 27 // Swiss/French
+#define USB_HID_COUNTRY_SWISS_GERMAN 28 // Swiss/German
+#define USB_HID_COUNTRY_SWITZERLAND 29 // Switzerland
+#define USB_HID_COUNTRY_TAIWAN 30 // Taiwan
+#define USB_HID_COUNTRY_TURKISH_Q 31 // Turkish-Q
+#define USB_HID_COUNTRY_UK 32 // UK
+#define USB_HID_COUNTRY_US 33 // US
+#define USB_HID_COUNTRY_YUGOSLAVIA 34 // Yugoslavia
#define USB_HID_COUNTRY_TURKISH_F \
- 35 // Turkish-F
- //! @}
- //! @}
+ 35 // Turkish-F
+ //! @}
+ //! @}
//! @}
//! \name HID KEYS values
@@ -237,12 +237,12 @@ COMPILER_PACK_RESET()
#define HID_SPACEBAR 44
#define HID_UNDERSCORE 45
#define HID_PLUS 46
-#define HID_OPEN_BRACKET 47 // {
-#define HID_CLOSE_BRACKET 48 // }
+#define HID_OPEN_BRACKET 47 // {
+#define HID_CLOSE_BRACKET 48 // }
#define HID_BACKSLASH 49
-#define HID_ASH 50 // # ~
-#define HID_COLON 51 // ; :
-#define HID_QUOTE 52 // ' "
+#define HID_ASH 50 // # ~
+#define HID_COLON 51 // ; :
+#define HID_QUOTE 52 // ' "
#define HID_TILDE 53
#define HID_COMMA 54
#define HID_DOT 55
@@ -314,4 +314,4 @@ COMPILER_PACK_RESET()
#define HID_LED_KANA (1 << 4)
//! @}
-#endif // _USB_PROTOCOL_HID_H_
+#endif // _USB_PROTOCOL_HID_H_
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_util.c b/tmk_core/protocol/arm_atsam/usb/usb_util.c
index a682c00b58..c7555c84c6 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_util.c
+++ b/tmk_core/protocol/arm_atsam/usb/usb_util.c
@@ -11,17 +11,17 @@ char digit(int d, int radix) {
}
int UTIL_ltoa_radix(int64_t value, char *dest, int radix) {
- int64_t original = value; // save original value
+ int64_t original = value; // save original value
char buf[25] = "";
int c = sizeof(buf) - 1;
int last = c;
int d;
int size;
- if (value < 0) // if it's negative, take the absolute value
+ if (value < 0) // if it's negative, take the absolute value
value = -value;
- do // write least significant digit of value that's left
+ do // write least significant digit of value that's left
{
d = (value % radix);
buf[--c] = digit(d, radix);
@@ -30,14 +30,20 @@ int UTIL_ltoa_radix(int64_t value, char *dest, int radix) {
if (original < 0) buf[--c] = '-';
- size = last - c + 1; // includes null at end
+ size = last - c + 1; // includes null at end
memcpy(dest, &buf[c], last - c + 1);
- return (size - 1); // without null termination
+ return (size - 1); // without null termination
}
-int UTIL_ltoa(int64_t value, char *dest) { return UTIL_ltoa_radix(value, dest, 10); }
+int UTIL_ltoa(int64_t value, char *dest) {
+ return UTIL_ltoa_radix(value, dest, 10);
+}
-int UTIL_itoa(int value, char *dest) { return UTIL_ltoa_radix((int64_t)value, dest, 10); }
+int UTIL_itoa(int value, char *dest) {
+ return UTIL_ltoa_radix((int64_t)value, dest, 10);
+}
-int UTIL_utoa(uint32_t value, char *dest) { return UTIL_ltoa_radix((int64_t)value, dest, 10); }
+int UTIL_utoa(uint32_t value, char *dest) {
+ return UTIL_ltoa_radix((int64_t)value, dest, 10);
+}
diff --git a/tmk_core/protocol/arm_atsam/usb/usb_util.h b/tmk_core/protocol/arm_atsam/usb/usb_util.h
index 3bad2c26f2..3e5b4fbb32 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_util.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_util.h
@@ -6,4 +6,4 @@ int UTIL_ltoa(int64_t value, char *dest);
int UTIL_itoa(int value, char *dest);
int UTIL_utoa(uint32_t value, char *dest);
-#endif //_USB_UTIL_H_
+#endif //_USB_UTIL_H_
diff --git a/tmk_core/protocol/chibios/chibios.c b/tmk_core/protocol/chibios/chibios.c
index 41752b2130..c9a480c325 100644
--- a/tmk_core/protocol/chibios/chibios.c
+++ b/tmk_core/protocol/chibios/chibios.c
@@ -60,10 +60,11 @@ void send_keyboard(report_keyboard_t *report);
void send_mouse(report_mouse_t *report);
void send_system(uint16_t data);
void send_consumer(uint16_t data);
+void send_programmable_button(uint32_t data);
void send_digitizer(report_digitizer_t *report);
/* host struct */
-host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
+host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
#ifdef VIRTSER_ENABLE
void virtser_task(void);
@@ -106,7 +107,7 @@ __attribute__((weak)) void early_hardware_init_pre(void) {
#if EARLY_INIT_PERFORM_BOOTLOADER_JUMP
void enter_bootloader_mode_if_requested(void);
enter_bootloader_mode_if_requested();
-#endif // EARLY_INIT_PERFORM_BOOTLOADER_JUMP
+#endif // EARLY_INIT_PERFORM_BOOTLOADER_JUMP
}
__attribute__((weak)) void early_hardware_init_post(void) {}
@@ -175,7 +176,9 @@ void protocol_pre_init(void) {
print("USB configured.\n");
}
-void protocol_post_init(void) { host_set_driver(driver); }
+void protocol_post_init(void) {
+ host_set_driver(driver);
+}
void protocol_pre_task(void) {
usb_event_queue_task();
@@ -185,7 +188,7 @@ void protocol_pre_task(void) {
print("[s]");
while (USB_DRIVER.state == USB_SUSPENDED) {
/* Do this in the suspended state */
- suspend_power_down(); // on AVR this deep sleeps for 15ms
+ suspend_power_down(); // on AVR this deep sleeps for 15ms
/* Remote wakeup */
if (suspend_wakeup_condition()) {
usbWakeupHost(&USB_DRIVER);
diff --git a/tmk_core/protocol/chibios/usb_driver.c b/tmk_core/protocol/chibios/usb_driver.c
index cc0ce7600f..4de060f306 100644
--- a/tmk_core/protocol/chibios/usb_driver.c
+++ b/tmk_core/protocol/chibios/usb_driver.c
@@ -80,21 +80,37 @@ static bool qmkusb_start_receive(QMKUSBDriver *qmkusbp) {
* Interface implementation.
*/
-static size_t _write(void *ip, const uint8_t *bp, size_t n) { return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, TIME_INFINITE); }
+static size_t _write(void *ip, const uint8_t *bp, size_t n) {
+ return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, TIME_INFINITE);
+}
-static size_t _read(void *ip, uint8_t *bp, size_t n) { return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, TIME_INFINITE); }
+static size_t _read(void *ip, uint8_t *bp, size_t n) {
+ return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, TIME_INFINITE);
+}
-static msg_t _put(void *ip, uint8_t b) { return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, TIME_INFINITE); }
+static msg_t _put(void *ip, uint8_t b) {
+ return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, TIME_INFINITE);
+}
-static msg_t _get(void *ip) { return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, TIME_INFINITE); }
+static msg_t _get(void *ip) {
+ return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, TIME_INFINITE);
+}
-static msg_t _putt(void *ip, uint8_t b, sysinterval_t timeout) { return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, timeout); }
+static msg_t _putt(void *ip, uint8_t b, sysinterval_t timeout) {
+ return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, timeout);
+}
-static msg_t _gett(void *ip, sysinterval_t timeout) { return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, timeout); }
+static msg_t _gett(void *ip, sysinterval_t timeout) {
+ return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, timeout);
+}
-static size_t _writet(void *ip, const uint8_t *bp, size_t n, sysinterval_t timeout) { return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, timeout); }
+static size_t _writet(void *ip, const uint8_t *bp, size_t n, sysinterval_t timeout) {
+ return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, timeout);
+}
-static size_t _readt(void *ip, uint8_t *bp, size_t n, sysinterval_t timeout) { return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, timeout); }
+static size_t _readt(void *ip, uint8_t *bp, size_t n, sysinterval_t timeout) {
+ return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, timeout);
+}
static const struct QMKUSBDriverVMT vmt = {0, _write, _read, _put, _get, _putt, _gett, _writet, _readt};
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index ac46a9312b..d9aa351ecb 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -734,7 +734,7 @@ void init_usb_driver(USBDriver *usbp) {
* after a reset.
*/
usbDisconnectBus(usbp);
- wait_ms(1500);
+ wait_ms(50);
usbStart(usbp, &usbcfg);
usbConnectBus(usbp);
@@ -775,7 +775,9 @@ void kbd_in_cb(USBDriver *usbp, usbep_t ep) {
/* start-of-frame handler
* TODO: i guess it would be better to re-implement using timers,
* so that this is not going to have to be checked every 1ms */
-void kbd_sof_cb(USBDriver *usbp) { (void)usbp; }
+void kbd_sof_cb(USBDriver *usbp) {
+ (void)usbp;
+}
/* Idle requests timer code
* callback (called from ISR, unlocked state) */
@@ -815,7 +817,9 @@ static void keyboard_idle_timer_cb(void *arg) {
}
/* LED status */
-uint8_t keyboard_leds(void) { return keyboard_led_state; }
+uint8_t keyboard_leds(void) {
+ return keyboard_led_state;
+}
/* prepare and start sending a report IN
* not callable from ISR or locked state */
@@ -915,7 +919,9 @@ void send_mouse(report_mouse_t *report) {
}
#else /* MOUSE_ENABLE */
-void send_mouse(report_mouse_t *report) { (void)report; }
+void send_mouse(report_mouse_t *report) {
+ (void)report;
+}
#endif /* MOUSE_ENABLE */
/* ---------------------------------------------------------
@@ -975,6 +981,35 @@ void send_consumer(uint16_t data) {
#endif
}
+void send_programmable_button(uint32_t data) {
+#ifdef PROGRAMMABLE_BUTTON_ENABLE
+ osalSysLock();
+ if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {
+ osalSysUnlock();
+ return;
+ }
+
+ if (usbGetTransmitStatusI(&USB_DRIVER, SHARED_IN_EPNUM)) {
+ /* Need to either suspend, or loop and call unlock/lock during
+ * every iteration - otherwise the system will remain locked,
+ * no interrupts served, so USB not going through as well.
+ * Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */
+ if (osalThreadSuspendTimeoutS(&(&USB_DRIVER)->epc[SHARED_IN_EPNUM]->in_state->thread, TIME_MS2I(10)) == MSG_TIMEOUT) {
+ osalSysUnlock();
+ return;
+ }
+ }
+ static report_programmable_button_t report = {
+ .report_id = REPORT_ID_PROGRAMMABLE_BUTTON,
+ };
+
+ report.usage = data;
+
+ usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)&report, sizeof(report));
+ osalSysUnlock();
+#endif
+}
+
void send_digitizer(report_digitizer_t *report) {
#ifdef DIGITIZER_ENABLE
# ifdef DIGITIZER_SHARED_EP
@@ -1078,7 +1113,9 @@ void raw_hid_task(void) {
#ifdef MIDI_ENABLE
-void send_midi_packet(MIDI_EventPacket_t *event) { chnWrite(&drivers.midi_driver.driver, (uint8_t *)event, sizeof(MIDI_EventPacket_t)); }
+void send_midi_packet(MIDI_EventPacket_t *event) {
+ chnWrite(&drivers.midi_driver.driver, (uint8_t *)event, sizeof(MIDI_EventPacket_t));
+}
bool recv_midi_packet(MIDI_EventPacket_t *const event) {
size_t size = chnReadTimeout(&drivers.midi_driver.driver, (uint8_t *)event, sizeof(MIDI_EventPacket_t), TIME_IMMEDIATE);
@@ -1101,7 +1138,9 @@ void midi_ep_task(void) {
void virtser_init(void) {}
-void virtser_send(const uint8_t byte) { chnWrite(&drivers.serial_driver.driver, &byte, 1); }
+void virtser_send(const uint8_t byte) {
+ chnWrite(&drivers.serial_driver.driver, &byte, 1);
+}
__attribute__((weak)) void virtser_recv(uint8_t c) {
// Ignore by default
@@ -1145,7 +1184,7 @@ void send_joystick_packet(joystick_t *joystick) {
joystick->axes[5],
# endif
},
-# endif // JOYSTICK_AXES_COUNT>0
+# endif // JOYSTICK_AXES_COUNT>0
# if JOYSTICK_BUTTON_COUNT > 0
.buttons = {
@@ -1161,7 +1200,7 @@ void send_joystick_packet(joystick_t *joystick) {
joystick->buttons[3],
# endif
}
-# endif // JOYSTICK_BUTTON_COUNT>0
+# endif // JOYSTICK_BUTTON_COUNT>0
};
// chnWrite(&drivers.joystick_driver.driver, (uint8_t *)&rep, sizeof(rep));
diff --git a/tmk_core/protocol/chibios/usb_util.c b/tmk_core/protocol/chibios/usb_util.c
index e32d6ebfa4..c8b435db0c 100644
--- a/tmk_core/protocol/chibios/usb_util.c
+++ b/tmk_core/protocol/chibios/usb_util.c
@@ -16,6 +16,10 @@
#include <hal.h>
#include "usb_util.h"
-void usb_disconnect(void) { usbStop(&USBD1); }
+void usb_disconnect(void) {
+ usbStop(&USBD1);
+}
-bool usb_connected_state(void) { return usbGetDriverStateI(&USBD1) == USB_ACTIVE; }
+bool usb_connected_state(void) {
+ return usbGetDriverStateI(&USBD1) == USB_ACTIVE;
+}
diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c
index 56d4bb0847..053d2b79e3 100644
--- a/tmk_core/protocol/host.c
+++ b/tmk_core/protocol/host.c
@@ -34,13 +34,19 @@ static uint16_t last_system_report = 0;
static uint16_t last_consumer_report = 0;
static uint32_t last_programmable_button_report = 0;
-void host_set_driver(host_driver_t *d) { driver = d; }
+void host_set_driver(host_driver_t *d) {
+ driver = d;
+}
-host_driver_t *host_get_driver(void) { return driver; }
+host_driver_t *host_get_driver(void) {
+ return driver;
+}
#ifdef SPLIT_KEYBOARD
uint8_t split_led_state = 0;
-void set_split_host_keyboard_leds(uint8_t led_state) { split_led_state = led_state; }
+void set_split_host_keyboard_leds(uint8_t led_state) {
+ split_led_state = led_state;
+}
#endif
uint8_t host_keyboard_leds(void) {
@@ -51,7 +57,9 @@ uint8_t host_keyboard_leds(void) {
return (*driver->keyboard_leds)();
}
-led_t host_keyboard_led_state(void) { return (led_t)host_keyboard_leds(); }
+led_t host_keyboard_led_state(void) {
+ return (led_t)host_keyboard_leds();
+}
/* send report */
void host_keyboard_send(report_keyboard_t *report) {
@@ -131,8 +139,14 @@ void host_programmable_button_send(uint32_t report) {
(*driver->send_programmable_button)(report);
}
-uint16_t host_last_system_report(void) { return last_system_report; }
+uint16_t host_last_system_report(void) {
+ return last_system_report;
+}
-uint16_t host_last_consumer_report(void) { return last_consumer_report; }
+uint16_t host_last_consumer_report(void) {
+ return last_consumer_report;
+}
-uint32_t host_last_programmable_button_report(void) { return last_programmable_button_report; }
+uint32_t host_last_programmable_button_report(void) {
+ return last_programmable_button_report;
+}
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index e3be96d93d..b4b03357a3 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -67,10 +67,10 @@ extern keymap_config_t keymap_config;
#ifdef BLUETOOTH_ENABLE
# include "outputselect.h"
-# ifdef MODULE_ADAFRUIT_BLE
-# include "adafruit_ble.h"
-# else
-# include "../serial.h"
+# ifdef BLUETOOTH_BLUEFRUIT_LE
+# include "bluefruit_le.h"
+# elif BLUETOOTH_RN42
+# include "rn42.h"
# endif
#endif
@@ -90,46 +90,6 @@ extern keymap_config_t keymap_config;
# include "joystick.h"
#endif
-// https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf#G7.663734
-static inline uint16_t CONSUMER2RN42(uint16_t usage) {
- switch (usage) {
- case AC_HOME:
- return 0x0001;
- case AL_EMAIL:
- return 0x0002;
- case AC_SEARCH:
- return 0x0004;
- case AL_KEYBOARD_LAYOUT:
- return 0x0008;
- case AUDIO_VOL_UP:
- return 0x0010;
- case AUDIO_VOL_DOWN:
- return 0x0020;
- case AUDIO_MUTE:
- return 0x0040;
- case TRANSPORT_PLAY_PAUSE:
- return 0x0080;
- case TRANSPORT_NEXT_TRACK:
- return 0x0100;
- case TRANSPORT_PREV_TRACK:
- return 0x0200;
- case TRANSPORT_STOP:
- return 0x0400;
- case TRANSPORT_EJECT:
- return 0x0800;
- case TRANSPORT_FAST_FORWARD:
- return 0x1000;
- case TRANSPORT_REWIND:
- return 0x2000;
- case TRANSPORT_STOP_EJECT:
- return 0x4000;
- case AL_LOCAL_BROWSER:
- return 0x8000;
- default:
- return 0;
- }
-}
-
uint8_t keyboard_idle = 0;
/* 0: Boot Protocol, 1: Report Protocol(default) */
uint8_t keyboard_protocol = 1;
@@ -296,7 +256,8 @@ static void Console_Task(void) {
}
// fill empty bank
- while (Endpoint_IsReadWriteAllowed()) Endpoint_Write_8(0);
+ while (Endpoint_IsReadWriteAllowed())
+ Endpoint_Write_8(0);
// flush sendchar packet
if (Endpoint_IsINReady()) {
@@ -336,7 +297,7 @@ void send_joystick_packet(joystick_t *joystick) {
joystick->axes[5],
# endif
},
-# endif // JOYSTICK_AXES_COUNT>0
+# endif // JOYSTICK_AXES_COUNT>0
# if JOYSTICK_BUTTON_COUNT > 0
.buttons = {
@@ -352,14 +313,15 @@ void send_joystick_packet(joystick_t *joystick) {
joystick->buttons[3],
# endif
}
-# endif // JOYSTICK_BUTTON_COUNT>0
+# endif // JOYSTICK_BUTTON_COUNT>0
};
/* Select the Joystick Report Endpoint */
Endpoint_SelectEndpoint(JOYSTICK_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
/* Write Joystick Report Data */
@@ -454,9 +416,11 @@ void EVENT_USB_Device_WakeUp() {
#ifdef CONSOLE_ENABLE
static bool console_flush = false;
-# define CONSOLE_FLUSH_SET(b) \
- do { \
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { console_flush = b; } \
+# define CONSOLE_FLUSH_SET(b) \
+ do { \
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { \
+ console_flush = b; \
+ } \
} while (0)
/** \brief Event USB Device Start Of Frame
@@ -674,7 +638,9 @@ void EVENT_USB_Device_ControlRequest(void) {
*
* FIXME: Needs doc
*/
-static uint8_t keyboard_leds(void) { return keyboard_led_state; }
+static uint8_t keyboard_leds(void) {
+ return keyboard_led_state;
+}
/** \brief Send Keyboard
*
@@ -685,17 +651,10 @@ static void send_keyboard(report_keyboard_t *report) {
#ifdef BLUETOOTH_ENABLE
if (where_to_send() == OUTPUT_BLUETOOTH) {
-# ifdef MODULE_ADAFRUIT_BLE
- adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
-# elif MODULE_RN42
- serial_send(0xFD);
- serial_send(0x09);
- serial_send(0x01);
- serial_send(report->mods);
- serial_send(report->reserved);
- for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
- serial_send(report->keys[i]);
- }
+# ifdef BLUETOOTH_BLUEFRUIT_LE
+ bluefruit_le_send_keys(report->mods, report->keys, sizeof(report->keys));
+# elif BLUETOOTH_RN42
+ rn42_send_keyboard(report);
# endif
return;
}
@@ -712,7 +671,8 @@ static void send_keyboard(report_keyboard_t *report) {
#endif
Endpoint_SelectEndpoint(ep);
/* Check if write ready for a polling interval around 10ms */
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
/* If we're in Boot Protocol, don't send any report ID or other funky fields */
@@ -738,19 +698,11 @@ static void send_mouse(report_mouse_t *report) {
# ifdef BLUETOOTH_ENABLE
if (where_to_send() == OUTPUT_BLUETOOTH) {
-# ifdef MODULE_ADAFRUIT_BLE
+# ifdef BLUETOOTH_BLUEFRUIT_LE
// FIXME: mouse buttons
- adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h, report->buttons);
-# else
- serial_send(0xFD);
- serial_send(0x00);
- serial_send(0x03);
- serial_send(report->buttons);
- serial_send(report->x);
- serial_send(report->y);
- serial_send(report->v); // should try sending the wheel v here
- serial_send(report->h); // should try sending the wheel h here
- serial_send(0x00);
+ bluefruit_le_send_mouse_move(report->x, report->y, report->v, report->h, report->buttons);
+# elif BLUETOOTH_RN42
+ rn42_send_mouse(report);
# endif
return;
}
@@ -760,7 +712,8 @@ static void send_mouse(report_mouse_t *report) {
Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
/* Write Mouse Report Data */
@@ -780,7 +733,8 @@ static void send_report(void *report, size_t size) {
Endpoint_SelectEndpoint(SHARED_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
Endpoint_Write_Stream_LE(report, size, NULL);
@@ -818,18 +772,10 @@ static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
# ifdef BLUETOOTH_ENABLE
if (where_to_send() == OUTPUT_BLUETOOTH) {
-# ifdef MODULE_ADAFRUIT_BLE
- adafruit_ble_send_consumer_key(data);
-# elif MODULE_RN42
- static uint16_t last_data = 0;
- if (data == last_data) return;
- last_data = data;
- uint16_t bitmap = CONSUMER2RN42(data);
- serial_send(0xFD);
- serial_send(0x03);
- serial_send(0x03);
- serial_send(bitmap & 0xFF);
- serial_send((bitmap >> 8) & 0xFF);
+# ifdef BLUETOOTH_BLUEFRUIT_LE
+ bluefruit_le_send_consumer_key(data);
+# elif BLUETOOTH_RN42
+ rn42_send_consumer(data);
# endif
return;
}
@@ -939,9 +885,13 @@ USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface = {
// clang-format on
-void send_midi_packet(MIDI_EventPacket_t *event) { MIDI_Device_SendEventPacket(&USB_MIDI_Interface, event); }
+void send_midi_packet(MIDI_EventPacket_t *event) {
+ MIDI_Device_SendEventPacket(&USB_MIDI_Interface, event);
+}
-bool recv_midi_packet(MIDI_EventPacket_t *const event) { return MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, event); }
+bool recv_midi_packet(MIDI_EventPacket_t *const event) {
+ return MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, event);
+}
#endif
@@ -997,7 +947,8 @@ void virtser_send(const uint8_t byte) {
return;
}
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
Endpoint_Write_8(byte);
CDC_Device_Flush(&cdc_device);
@@ -1020,7 +971,8 @@ void send_digitizer(report_digitizer_t *report) {
Endpoint_SelectEndpoint(DIGITIZER_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
- while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+ while (timeout-- && !Endpoint_IsReadWriteAllowed())
+ _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
Endpoint_Write_Stream_LE(report, sizeof(report_digitizer_t), NULL);
@@ -1076,8 +1028,8 @@ void protocol_pre_init(void) {
setup_usb();
sei();
-#if defined(MODULE_RN42)
- serial_init();
+#if defined(BLUETOOTH_RN42)
+ rn42_init();
#endif
/* wait for USB startup & debug output */
@@ -1096,7 +1048,9 @@ void protocol_pre_init(void) {
#endif
}
-void protocol_post_init(void) { host_set_driver(&lufa_driver); }
+void protocol_post_init(void) {
+ host_set_driver(&lufa_driver);
+}
void protocol_pre_task(void) {
#if !defined(NO_USB_STARTUP_CHECK)
@@ -1129,8 +1083,8 @@ void protocol_post_task(void) {
MIDI_Device_USBTask(&USB_MIDI_Interface);
#endif
-#ifdef MODULE_ADAFRUIT_BLE
- adafruit_ble_task();
+#ifdef BLUETOOTH_BLUEFRUIT_LE
+ bluefruit_le_task();
#endif
#ifdef VIRTSER_ENABLE
@@ -1147,4 +1101,6 @@ void protocol_post_task(void) {
#endif
}
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint16_t wIndex, const void **const DescriptorAddress) { return get_usb_descriptor(wValue, wIndex, DescriptorAddress); }
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint16_t wIndex, const void **const DescriptorAddress) {
+ return get_usb_descriptor(wValue, wIndex, DescriptorAddress);
+}
diff --git a/tmk_core/protocol/lufa/usb_util.c b/tmk_core/protocol/lufa/usb_util.c
index 9691eff1e4..2e3b86b80e 100644
--- a/tmk_core/protocol/lufa/usb_util.c
+++ b/tmk_core/protocol/lufa/usb_util.c
@@ -22,13 +22,15 @@ void usb_disconnect(void) {
USB_DeviceState = DEVICE_STATE_Unattached;
}
-bool usb_connected_state(void) { return USB_Device_IsAddressSet(); }
+bool usb_connected_state(void) {
+ return USB_Device_IsAddressSet();
+}
#if defined(OTGPADE)
bool usb_vbus_state(void) {
- USB_OTGPAD_On(); // enables VBUS pad
+ USB_OTGPAD_On(); // enables VBUS pad
wait_us(5);
- return USB_VBUS_GetStatus(); // checks state of VBUS
+ return USB_VBUS_GetStatus(); // checks state of VBUS
}
#endif
diff --git a/tmk_core/protocol/midi/bytequeue/bytequeue.c b/tmk_core/protocol/midi/bytequeue/bytequeue.c
index e36a9e66b1..0dd18680f0 100644
--- a/tmk_core/protocol/midi/bytequeue/bytequeue.c
+++ b/tmk_core/protocol/midi/bytequeue/bytequeue.c
@@ -52,7 +52,9 @@ byteQueueIndex_t bytequeue_length(byteQueue_t* queue) {
}
// we don't need to avoid interrupts if there is only one reader
-uint8_t bytequeue_get(byteQueue_t* queue, byteQueueIndex_t index) { return queue->data[(queue->start + index) % queue->length]; }
+uint8_t bytequeue_get(byteQueue_t* queue, byteQueueIndex_t index) {
+ return queue->data[(queue->start + index) % queue->length];
+}
// we just update the start index to remove elements
void bytequeue_remove(byteQueue_t* queue, byteQueueIndex_t numToRemove) {
diff --git a/tmk_core/protocol/midi/bytequeue/interrupt_setting.c b/tmk_core/protocol/midi/bytequeue/interrupt_setting.c
index 407cc65f49..d9c0035946 100644
--- a/tmk_core/protocol/midi/bytequeue/interrupt_setting.c
+++ b/tmk_core/protocol/midi/bytequeue/interrupt_setting.c
@@ -30,7 +30,9 @@ interrupt_setting_t store_and_clear_interrupt(void) {
return sreg;
}
-void restore_interrupt_setting(interrupt_setting_t setting) { SREG = setting; }
+void restore_interrupt_setting(interrupt_setting_t setting) {
+ SREG = setting;
+}
#elif defined(__arm__)
# include <ch.h>
@@ -39,5 +41,7 @@ interrupt_setting_t store_and_clear_interrupt(void) {
return 0;
}
-void restore_interrupt_setting(interrupt_setting_t setting) { chSysUnlock(); }
+void restore_interrupt_setting(interrupt_setting_t setting) {
+ chSysUnlock();
+}
#endif
diff --git a/tmk_core/protocol/midi/midi.c b/tmk_core/protocol/midi/midi.c
index 643c43722d..f3792552f4 100644
--- a/tmk_core/protocol/midi/midi.c
+++ b/tmk_core/protocol/midi/midi.c
@@ -17,7 +17,7 @@
// along with avr-midi. If not, see <http://www.gnu.org/licenses/>.
#include "midi.h"
-#include <string.h> //for memcpy
+#include <string.h> //for memcpy
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
@@ -25,9 +25,13 @@
# define NULL 0
#endif
-bool midi_is_statusbyte(uint8_t theByte) { return (bool)(theByte & MIDI_STATUSMASK); }
+bool midi_is_statusbyte(uint8_t theByte) {
+ return (bool)(theByte & MIDI_STATUSMASK);
+}
-bool midi_is_realtime(uint8_t theByte) { return (theByte >= MIDI_CLOCK); }
+bool midi_is_realtime(uint8_t theByte) {
+ return (theByte >= MIDI_CLOCK);
+}
midi_packet_length_t midi_packet_length(uint8_t status) {
switch (status & 0xF0) {
@@ -83,7 +87,9 @@ void midi_send_noteoff(MidiDevice* device, uint8_t chan, uint8_t num, uint8_t ve
device->send_func(device, 3, MIDI_NOTEOFF | (chan & MIDI_CHANMASK), num & 0x7F, vel & 0x7F);
}
-void midi_send_aftertouch(MidiDevice* device, uint8_t chan, uint8_t note_num, uint8_t amt) { device->send_func(device, 3, MIDI_AFTERTOUCH | (chan & MIDI_CHANMASK), note_num & 0x7F, amt & 0x7F); }
+void midi_send_aftertouch(MidiDevice* device, uint8_t chan, uint8_t note_num, uint8_t amt) {
+ device->send_func(device, 3, MIDI_AFTERTOUCH | (chan & MIDI_CHANMASK), note_num & 0x7F, amt & 0x7F);
+}
// XXX does this work right?
// amt in range -0x2000, 0x1fff
@@ -102,34 +108,62 @@ void midi_send_pitchbend(MidiDevice* device, uint8_t chan, int16_t amt) {
device->send_func(device, 3, MIDI_PITCHBEND | (chan & MIDI_CHANMASK), uAmt & 0x7F, (uAmt >> 7) & 0x7F);
}
-void midi_send_programchange(MidiDevice* device, uint8_t chan, uint8_t num) { device->send_func(device, 2, MIDI_PROGCHANGE | (chan & MIDI_CHANMASK), num & 0x7F, 0); }
+void midi_send_programchange(MidiDevice* device, uint8_t chan, uint8_t num) {
+ device->send_func(device, 2, MIDI_PROGCHANGE | (chan & MIDI_CHANMASK), num & 0x7F, 0);
+}
-void midi_send_channelpressure(MidiDevice* device, uint8_t chan, uint8_t amt) { device->send_func(device, 2, MIDI_CHANPRESSURE | (chan & MIDI_CHANMASK), amt & 0x7F, 0); }
+void midi_send_channelpressure(MidiDevice* device, uint8_t chan, uint8_t amt) {
+ device->send_func(device, 2, MIDI_CHANPRESSURE | (chan & MIDI_CHANMASK), amt & 0x7F, 0);
+}
-void midi_send_clock(MidiDevice* device) { device->send_func(device, 1, MIDI_CLOCK, 0, 0); }
+void midi_send_clock(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_CLOCK, 0, 0);
+}
-void midi_send_tick(MidiDevice* device) { device->send_func(device, 1, MIDI_TICK, 0, 0); }
+void midi_send_tick(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_TICK, 0, 0);
+}
-void midi_send_start(MidiDevice* device) { device->send_func(device, 1, MIDI_START, 0, 0); }
+void midi_send_start(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_START, 0, 0);
+}
-void midi_send_continue(MidiDevice* device) { device->send_func(device, 1, MIDI_CONTINUE, 0, 0); }
+void midi_send_continue(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_CONTINUE, 0, 0);
+}
-void midi_send_stop(MidiDevice* device) { device->send_func(device, 1, MIDI_STOP, 0, 0); }
+void midi_send_stop(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_STOP, 0, 0);
+}
-void midi_send_activesense(MidiDevice* device) { device->send_func(device, 1, MIDI_ACTIVESENSE, 0, 0); }
+void midi_send_activesense(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_ACTIVESENSE, 0, 0);
+}
-void midi_send_reset(MidiDevice* device) { device->send_func(device, 1, MIDI_RESET, 0, 0); }
+void midi_send_reset(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_RESET, 0, 0);
+}
-void midi_send_tcquarterframe(MidiDevice* device, uint8_t time) { device->send_func(device, 2, MIDI_TC_QUARTERFRAME, time & 0x7F, 0); }
+void midi_send_tcquarterframe(MidiDevice* device, uint8_t time) {
+ device->send_func(device, 2, MIDI_TC_QUARTERFRAME, time & 0x7F, 0);
+}
// XXX is this right?
-void midi_send_songposition(MidiDevice* device, uint16_t pos) { device->send_func(device, 3, MIDI_SONGPOSITION, pos & 0x7F, (pos >> 7) & 0x7F); }
+void midi_send_songposition(MidiDevice* device, uint16_t pos) {
+ device->send_func(device, 3, MIDI_SONGPOSITION, pos & 0x7F, (pos >> 7) & 0x7F);
+}
-void midi_send_songselect(MidiDevice* device, uint8_t song) { device->send_func(device, 2, MIDI_SONGSELECT, song & 0x7F, 0); }
+void midi_send_songselect(MidiDevice* device, uint8_t song) {
+ device->send_func(device, 2, MIDI_SONGSELECT, song & 0x7F, 0);
+}
-void midi_send_tunerequest(MidiDevice* device) { device->send_func(device, 1, MIDI_TUNEREQUEST, 0, 0); }
+void midi_send_tunerequest(MidiDevice* device) {
+ device->send_func(device, 1, MIDI_TUNEREQUEST, 0, 0);
+}
-void midi_send_byte(MidiDevice* device, uint8_t b) { device->send_func(device, 1, b, 0, 0); }
+void midi_send_byte(MidiDevice* device, uint8_t b) {
+ device->send_func(device, 1, b, 0, 0);
+}
void midi_send_data(MidiDevice* device, uint16_t count, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
// ensure that the count passed along is always 3 or lower
@@ -150,32 +184,62 @@ void midi_send_array(MidiDevice* device, uint16_t count, uint8_t* array) {
}
}
-void midi_register_cc_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_cc_callback = func; }
+void midi_register_cc_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_cc_callback = func;
+}
-void midi_register_noteon_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_noteon_callback = func; }
+void midi_register_noteon_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_noteon_callback = func;
+}
-void midi_register_noteoff_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_noteoff_callback = func; }
+void midi_register_noteoff_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_noteoff_callback = func;
+}
-void midi_register_aftertouch_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_aftertouch_callback = func; }
+void midi_register_aftertouch_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_aftertouch_callback = func;
+}
-void midi_register_pitchbend_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_pitchbend_callback = func; }
+void midi_register_pitchbend_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_pitchbend_callback = func;
+}
-void midi_register_songposition_callback(MidiDevice* device, midi_three_byte_func_t func) { device->input_songposition_callback = func; }
+void midi_register_songposition_callback(MidiDevice* device, midi_three_byte_func_t func) {
+ device->input_songposition_callback = func;
+}
-void midi_register_progchange_callback(MidiDevice* device, midi_two_byte_func_t func) { device->input_progchange_callback = func; }
+void midi_register_progchange_callback(MidiDevice* device, midi_two_byte_func_t func) {
+ device->input_progchange_callback = func;
+}
-void midi_register_chanpressure_callback(MidiDevice* device, midi_two_byte_func_t func) { device->input_chanpressure_callback = func; }
+void midi_register_chanpressure_callback(MidiDevice* device, midi_two_byte_func_t func) {
+ device->input_chanpressure_callback = func;
+}
-void midi_register_songselect_callback(MidiDevice* device, midi_two_byte_func_t func) { device->input_songselect_callback = func; }
+void midi_register_songselect_callback(MidiDevice* device, midi_two_byte_func_t func) {
+ device->input_songselect_callback = func;
+}
-void midi_register_tc_quarterframe_callback(MidiDevice* device, midi_two_byte_func_t func) { device->input_tc_quarterframe_callback = func; }
+void midi_register_tc_quarterframe_callback(MidiDevice* device, midi_two_byte_func_t func) {
+ device->input_tc_quarterframe_callback = func;
+}
-void midi_register_realtime_callback(MidiDevice* device, midi_one_byte_func_t func) { device->input_realtime_callback = func; }
+void midi_register_realtime_callback(MidiDevice* device, midi_one_byte_func_t func) {
+ device->input_realtime_callback = func;
+}
-void midi_register_tunerequest_callback(MidiDevice* device, midi_one_byte_func_t func) { device->input_tunerequest_callback = func; }
+void midi_register_tunerequest_callback(MidiDevice* device, midi_one_byte_func_t func) {
+ device->input_tunerequest_callback = func;
+}
-void midi_register_sysex_callback(MidiDevice* device, midi_sysex_func_t func) { device->input_sysex_callback = func; }
+void midi_register_sysex_callback(MidiDevice* device, midi_sysex_func_t func) {
+ device->input_sysex_callback = func;
+}
-void midi_register_fallthrough_callback(MidiDevice* device, midi_var_byte_func_t func) { device->input_fallthrough_callback = func; }
+void midi_register_fallthrough_callback(MidiDevice* device, midi_var_byte_func_t func) {
+ device->input_fallthrough_callback = func;
+}
-void midi_register_catchall_callback(MidiDevice* device, midi_var_byte_func_t func) { device->input_catchall_callback = func; }
+void midi_register_catchall_callback(MidiDevice* device, midi_var_byte_func_t func) {
+ device->input_catchall_callback = func;
+}
diff --git a/tmk_core/protocol/midi/midi.h b/tmk_core/protocol/midi/midi.h
index 75f3b13b0b..34547077e4 100644
--- a/tmk_core/protocol/midi/midi.h
+++ b/tmk_core/protocol/midi/midi.h
@@ -48,7 +48,7 @@ extern "C" {
*
* @param device the device to initialize
*/
-void midi_device_init(MidiDevice* device); // [implementation in midi_device.c]
+void midi_device_init(MidiDevice* device); // [implementation in midi_device.c]
/**
* @brief Process input data
@@ -58,7 +58,7 @@ void midi_device_init(MidiDevice* device); // [implementation in midi_device.c]
*
* @param device the device to process
*/
-void midi_device_process(MidiDevice* device); // [implementation in midi_device.c]
+void midi_device_process(MidiDevice* device); // [implementation in midi_device.c]
/**@}*/
@@ -115,7 +115,7 @@ void midi_send_aftertouch(MidiDevice* device, uint8_t chan, uint8_t note_num, ui
* @param chan the channel to send on, 0-15
* @param amt the bend amount range: -8192..8191, 0 means no bend
*/
-void midi_send_pitchbend(MidiDevice* device, uint8_t chan, int16_t amt); // range -8192, 8191
+void midi_send_pitchbend(MidiDevice* device, uint8_t chan, int16_t amt); // range -8192, 8191
/**
* @brief Send a program change message via the given device.
diff --git a/tmk_core/protocol/midi/midi_device.c b/tmk_core/protocol/midi/midi_device.c
index 58fe685e2d..77c010b156 100644
--- a/tmk_core/protocol/midi/midi_device.c
+++ b/tmk_core/protocol/midi/midi_device.c
@@ -60,12 +60,17 @@ void midi_device_init(MidiDevice* device) {
void midi_device_input(MidiDevice* device, uint8_t cnt, uint8_t* input) {
uint8_t i;
- for (i = 0; i < cnt; i++) bytequeue_enqueue(&device->input_queue, input[i]);
+ for (i = 0; i < cnt; i++)
+ bytequeue_enqueue(&device->input_queue, input[i]);
}
-void midi_device_set_send_func(MidiDevice* device, midi_var_byte_func_t send_func) { device->send_func = send_func; }
+void midi_device_set_send_func(MidiDevice* device, midi_var_byte_func_t send_func) {
+ device->send_func = send_func;
+}
-void midi_device_set_pre_input_process_func(MidiDevice* device, midi_no_byte_func_t pre_process_func) { device->pre_input_process_callback = pre_process_func; }
+void midi_device_set_pre_input_process_func(MidiDevice* device, midi_no_byte_func_t pre_process_func) {
+ device->pre_input_process_callback = pre_process_func;
+}
void midi_device_process(MidiDevice* device) {
// call the pre_input_process_callback if there is one
diff --git a/tmk_core/protocol/midi/qmk_midi.c b/tmk_core/protocol/midi/qmk_midi.c
index 3a454d61ae..f6a5d92281 100644
--- a/tmk_core/protocol/midi/qmk_midi.c
+++ b/tmk_core/protocol/midi/qmk_midi.c
@@ -50,7 +50,7 @@ static void usb_send_func(MidiDevice* device, uint16_t cnt, uint8_t byte0, uint8
event.Event = MIDI_EVENT(cable, SYSEX_START_OR_CONT);
break;
default:
- return; // invalid cnt
+ return; // invalid cnt
}
} else {
// deal with 'system common' messages
diff --git a/tmk_core/protocol/midi/sysex_tools.c b/tmk_core/protocol/midi/sysex_tools.c
index 84bca72158..c9a9d03285 100644
--- a/tmk_core/protocol/midi/sysex_tools.c
+++ b/tmk_core/protocol/midi/sysex_tools.c
@@ -35,7 +35,7 @@ uint16_t sysex_decoded_length(uint16_t encoded_length) {
}
uint16_t sysex_encode(uint8_t *encoded, const uint8_t *source, const uint16_t length) {
- uint16_t encoded_full = length / 7; // number of full 8 byte sections from 7 bytes of input
+ uint16_t encoded_full = length / 7; // number of full 8 byte sections from 7 bytes of input
uint16_t i, j;
// fill out the fully encoded sections
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index a43755f899..0b992ba6c5 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -450,7 +450,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {
#endif
#ifndef USB_POLLING_INTERVAL_MS
-# define USB_POLLING_INTERVAL_MS 10
+# define USB_POLLING_INTERVAL_MS 1
#endif
/*
diff --git a/tmk_core/protocol/usb_descriptor.h b/tmk_core/protocol/usb_descriptor.h
index 0f0c78f66c..6c3424145c 100644
--- a/tmk_core/protocol/usb_descriptor.h
+++ b/tmk_core/protocol/usb_descriptor.h
@@ -200,7 +200,7 @@ enum usb_interfaces {
* Endpoint numbers
*/
enum usb_endpoints {
- __unused_epnum__ = NEXT_EPNUM, // Endpoint numbering starts at 1
+ __unused_epnum__ = NEXT_EPNUM, // Endpoint numbering starts at 1
#ifndef KEYBOARD_SHARED_EP
KEYBOARD_IN_EPNUM = NEXT_EPNUM,
diff --git a/tmk_core/protocol/usb_device_state.c b/tmk_core/protocol/usb_device_state.c
index 84f01943be..8d56ba4d2f 100644
--- a/tmk_core/protocol/usb_device_state.c
+++ b/tmk_core/protocol/usb_device_state.c
@@ -22,7 +22,9 @@
enum usb_device_state usb_device_state = USB_DEVICE_STATE_NO_INIT;
-__attribute__((weak)) void notify_usb_device_state_change_kb(enum usb_device_state usb_device_state) { notify_usb_device_state_change_user(usb_device_state); }
+__attribute__((weak)) void notify_usb_device_state_change_kb(enum usb_device_state usb_device_state) {
+ notify_usb_device_state_change_user(usb_device_state);
+}
__attribute__((weak)) void notify_usb_device_state_change_user(enum usb_device_state usb_device_state) {}
diff --git a/tmk_core/protocol/usb_device_state.h b/tmk_core/protocol/usb_device_state.h
index c229311d46..3be65ea7e1 100644
--- a/tmk_core/protocol/usb_device_state.h
+++ b/tmk_core/protocol/usb_device_state.h
@@ -27,10 +27,10 @@ void usb_device_state_set_reset(void);
void usb_device_state_init(void);
enum usb_device_state {
- USB_DEVICE_STATE_NO_INIT = 0, // We're in this state before calling usb_device_state_init()
- USB_DEVICE_STATE_INIT = 1, // Can consume up to 100mA
- USB_DEVICE_STATE_CONFIGURED = 2, // Can consume up to what is specified in configuration descriptor, typically 500mA
- USB_DEVICE_STATE_SUSPEND = 3 // Can consume only suspend current
+ USB_DEVICE_STATE_NO_INIT = 0, // We're in this state before calling usb_device_state_init()
+ USB_DEVICE_STATE_INIT = 1, // Can consume up to 100mA
+ USB_DEVICE_STATE_CONFIGURED = 2, // Can consume up to what is specified in configuration descriptor, typically 500mA
+ USB_DEVICE_STATE_SUSPEND = 3 // Can consume only suspend current
};
extern enum usb_device_state usb_device_state;
diff --git a/tmk_core/protocol/usb_util.c b/tmk_core/protocol/usb_util.c
index dd1deeaa11..49aadedc2a 100644
--- a/tmk_core/protocol/usb_util.c
+++ b/tmk_core/protocol/usb_util.c
@@ -17,7 +17,9 @@
#include "usb_util.h"
__attribute__((weak)) void usb_disconnect(void) {}
-__attribute__((weak)) bool usb_connected_state(void) { return true; }
+__attribute__((weak)) bool usb_connected_state(void) {
+ return true;
+}
__attribute__((weak)) bool usb_vbus_state(void) {
#ifdef USB_VBUS_PIN
setPinInput(USB_VBUS_PIN);
diff --git a/tmk_core/protocol/vusb/protocol.c b/tmk_core/protocol/vusb/protocol.c
index 644e77e021..20d0530483 100644
--- a/tmk_core/protocol/vusb/protocol.c
+++ b/tmk_core/protocol/vusb/protocol.c
@@ -97,7 +97,9 @@ static void vusb_wakeup(void) {
*
* FIXME: Needs doc
*/
-static void setup_usb(void) { initForUsbConnectivity(); }
+static void setup_usb(void) {
+ initForUsbConnectivity();
+}
uint16_t sof_timer = 0;
diff --git a/tmk_core/protocol/vusb/usb_util.c b/tmk_core/protocol/vusb/usb_util.c
index 4ee2d3188b..38c4352d55 100644
--- a/tmk_core/protocol/vusb/usb_util.c
+++ b/tmk_core/protocol/vusb/usb_util.c
@@ -16,7 +16,9 @@
#include <usbdrv/usbdrv.h>
#include "usb_util.h"
-void usb_disconnect(void) { usbDeviceDisconnect(); }
+void usb_disconnect(void) {
+ usbDeviceDisconnect();
+}
bool usb_connected_state(void) {
usbPoll();
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index bd0f1c21aa..ebde955d3b 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -230,9 +230,13 @@ static void send_programmable_button(uint32_t data);
static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
-host_driver_t *vusb_driver(void) { return &driver; }
+host_driver_t *vusb_driver(void) {
+ return &driver;
+}
-static uint8_t keyboard_leds(void) { return keyboard_led_state; }
+static uint8_t keyboard_leds(void) {
+ return keyboard_led_state;
+}
static void send_keyboard(report_keyboard_t *report) {
uint8_t next = (kbuf_head + 1) % KBUF_SIZE;
@@ -348,7 +352,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) {
last_req.kind = SET_LED;
last_req.len = rq->wLength.word;
}
- return USB_NO_MSG; // to get data in usbFunctionWrite
+ return USB_NO_MSG; // to get data in usbFunctionWrite
} else {
dprint("UNKNOWN:");
}
@@ -410,47 +414,47 @@ const PROGMEM uchar shared_hid_report[] = {
#else
const PROGMEM uchar keyboard_hid_report[] = {
#endif
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x06, // Usage (Keyboard)
- 0xA1, 0x01, // Collection (Application)
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x06, // Usage (Keyboard)
+ 0xA1, 0x01, // Collection (Application)
#ifdef KEYBOARD_SHARED_EP
- 0x85, REPORT_ID_KEYBOARD, // Report ID
+ 0x85, REPORT_ID_KEYBOARD, // Report ID
#endif
// Modifiers (8 bits)
- 0x05, 0x07, // Usage Page (Keyboard/Keypad)
- 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
- 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x08, // Report Count (8)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x05, 0x07, // Usage Page (Keyboard/Keypad)
+ 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
+ 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x08, // Report Count (8)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Reserved (1 byte)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x03, // Input (Constant)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x03, // Input (Constant)
// Keycodes (6 bytes)
- 0x05, 0x07, // Usage Page (Keyboard/Keypad)
- 0x19, 0x00, // Usage Minimum (0)
- 0x29, 0xFF, // Usage Maximum (255)
- 0x15, 0x00, // Logical Minimum (0)
- 0x26, 0xFF, 0x00, // Logical Maximum (255)
- 0x95, 0x06, // Report Count (6)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x00, // Input (Data, Array, Absolute)
+ 0x05, 0x07, // Usage Page (Keyboard/Keypad)
+ 0x19, 0x00, // Usage Minimum (0)
+ 0x29, 0xFF, // Usage Maximum (255)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x26, 0xFF, 0x00, // Logical Maximum (255)
+ 0x95, 0x06, // Report Count (6)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x00, // Input (Data, Array, Absolute)
// Status LEDs (5 bits)
- 0x05, 0x08, // Usage Page (LED)
- 0x19, 0x01, // Usage Minimum (Num Lock)
- 0x29, 0x05, // Usage Maximum (Kana)
- 0x95, 0x05, // Report Count (5)
- 0x75, 0x01, // Report Size (1)
- 0x91, 0x02, // Output (Data, Variable, Absolute)
+ 0x05, 0x08, // Usage Page (LED)
+ 0x19, 0x01, // Usage Minimum (Num Lock)
+ 0x29, 0x05, // Usage Maximum (Kana)
+ 0x95, 0x05, // Report Count (5)
+ 0x75, 0x01, // Report Size (1)
+ 0x91, 0x02, // Output (Data, Variable, Absolute)
// LED padding (3 bits)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x03, // Report Size (3)
- 0x91, 0x03, // Output (Constant)
- 0xC0, // End Collection
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x03, // Report Size (3)
+ 0x91, 0x03, // Output (Constant)
+ 0xC0, // End Collection
#ifndef KEYBOARD_SHARED_EP
};
#endif
@@ -462,135 +466,135 @@ const PROGMEM uchar shared_hid_report[] = {
#ifdef MOUSE_ENABLE
// Mouse report descriptor
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x02, // Usage (Mouse)
- 0xA1, 0x01, // Collection (Application)
- 0x85, REPORT_ID_MOUSE, // Report ID
- 0x09, 0x01, // Usage (Pointer)
- 0xA1, 0x00, // Collection (Physical)
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x02, // Usage (Mouse)
+ 0xA1, 0x01, // Collection (Application)
+ 0x85, REPORT_ID_MOUSE, // Report ID
+ 0x09, 0x01, // Usage (Pointer)
+ 0xA1, 0x00, // Collection (Physical)
// Buttons (8 bits)
- 0x05, 0x09, // Usage Page (Button)
- 0x19, 0x01, // Usage Minimum (Button 1)
- 0x29, 0x08, // Usage Maximum (Button 8)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x08, // Report Count (8)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x05, 0x09, // Usage Page (Button)
+ 0x19, 0x01, // Usage Minimum (Button 1)
+ 0x29, 0x08, // Usage Maximum (Button 8)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x08, // Report Count (8)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// X/Y position (2 bytes)
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x30, // Usage (X)
- 0x09, 0x31, // Usage (Y)
- 0x15, 0x81, // Logical Minimum (-127)
- 0x25, 0x7F, // Logical Maximum (127)
- 0x95, 0x02, // Report Count (2)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x06, // Input (Data, Variable, Relative)
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x30, // Usage (X)
+ 0x09, 0x31, // Usage (Y)
+ 0x15, 0x81, // Logical Minimum (-127)
+ 0x25, 0x7F, // Logical Maximum (127)
+ 0x95, 0x02, // Report Count (2)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x06, // Input (Data, Variable, Relative)
// Vertical wheel (1 byte)
- 0x09, 0x38, // Usage (Wheel)
- 0x15, 0x81, // Logical Minimum (-127)
- 0x25, 0x7F, // Logical Maximum (127)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x06, // Input (Data, Variable, Relative)
+ 0x09, 0x38, // Usage (Wheel)
+ 0x15, 0x81, // Logical Minimum (-127)
+ 0x25, 0x7F, // Logical Maximum (127)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x06, // Input (Data, Variable, Relative)
// Horizontal wheel (1 byte)
- 0x05, 0x0C, // Usage Page (Consumer)
- 0x0A, 0x38, 0x02, // Usage (AC Pan)
- 0x15, 0x81, // Logical Minimum (-127)
- 0x25, 0x7F, // Logical Maximum (127)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x06, // Input (Data, Variable, Relative)
- 0xC0, // End Collection
- 0xC0, // End Collection
+ 0x05, 0x0C, // Usage Page (Consumer)
+ 0x0A, 0x38, 0x02, // Usage (AC Pan)
+ 0x15, 0x81, // Logical Minimum (-127)
+ 0x25, 0x7F, // Logical Maximum (127)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x06, // Input (Data, Variable, Relative)
+ 0xC0, // End Collection
+ 0xC0, // End Collection
#endif
#ifdef EXTRAKEY_ENABLE
// Extrakeys report descriptor
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x80, // Usage (System Control)
- 0xA1, 0x01, // Collection (Application)
- 0x85, REPORT_ID_SYSTEM, // Report ID
- 0x19, 0x01, // Usage Minimum (Pointer)
- 0x2A, 0xB7, 0x00, // Usage Maximum (System Display LCD Autoscale)
- 0x15, 0x01, // Logical Minimum
- 0x26, 0xB7, 0x00, // Logical Maximum
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x10, // Report Size (16)
- 0x81, 0x00, // Input (Data, Array, Absolute)
- 0xC0, // End Collection
-
- 0x05, 0x0C, // Usage Page (Consumer)
- 0x09, 0x01, // Usage (Consumer Control)
- 0xA1, 0x01, // Collection (Application)
- 0x85, REPORT_ID_CONSUMER, // Report ID
- 0x19, 0x01, // Usage Minimum (Consumer Control)
- 0x2A, 0xA0, 0x02, // Usage Maximum (AC Desktop Show All Applications)
- 0x15, 0x01, // Logical Minimum
- 0x26, 0xA0, 0x02, // Logical Maximum
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x10, // Report Size (16)
- 0x81, 0x00, // Input (Data, Array, Absolute)
- 0xC0, // End Collection
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x09, 0x80, // Usage (System Control)
+ 0xA1, 0x01, // Collection (Application)
+ 0x85, REPORT_ID_SYSTEM, // Report ID
+ 0x19, 0x01, // Usage Minimum (Pointer)
+ 0x2A, 0xB7, 0x00, // Usage Maximum (System Display LCD Autoscale)
+ 0x15, 0x01, // Logical Minimum
+ 0x26, 0xB7, 0x00, // Logical Maximum
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x10, // Report Size (16)
+ 0x81, 0x00, // Input (Data, Array, Absolute)
+ 0xC0, // End Collection
+
+ 0x05, 0x0C, // Usage Page (Consumer)
+ 0x09, 0x01, // Usage (Consumer Control)
+ 0xA1, 0x01, // Collection (Application)
+ 0x85, REPORT_ID_CONSUMER, // Report ID
+ 0x19, 0x01, // Usage Minimum (Consumer Control)
+ 0x2A, 0xA0, 0x02, // Usage Maximum (AC Desktop Show All Applications)
+ 0x15, 0x01, // Logical Minimum
+ 0x26, 0xA0, 0x02, // Logical Maximum
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x10, // Report Size (16)
+ 0x81, 0x00, // Input (Data, Array, Absolute)
+ 0xC0, // End Collection
#endif
#ifdef DIGITIZER_ENABLE
// Digitizer report descriptor
- 0x05, 0x0D, // Usage Page (Digitizers)
- 0x09, 0x01, // Usage (Digitizer)
- 0xA1, 0x01, // Collection (Application)
- 0x85, REPORT_ID_DIGITIZER, // Report ID
- 0x09, 0x22, // Usage (Finger)
- 0xA1, 0x00, // Collection (Physical)
+ 0x05, 0x0D, // Usage Page (Digitizers)
+ 0x09, 0x01, // Usage (Digitizer)
+ 0xA1, 0x01, // Collection (Application)
+ 0x85, REPORT_ID_DIGITIZER, // Report ID
+ 0x09, 0x22, // Usage (Finger)
+ 0xA1, 0x00, // Collection (Physical)
// Tip Switch (1 bit)
- 0x09, 0x42, // Usage (Tip Switch)
- 0x15, 0x00, // Logical Minimum
- 0x25, 0x01, // Logical Maximum
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x01, // Report Size (16)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x09, 0x42, // Usage (Tip Switch)
+ 0x15, 0x00, // Logical Minimum
+ 0x25, 0x01, // Logical Maximum
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x01, // Report Size (16)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// In Range (1 bit)
- 0x09, 0x32, // Usage (In Range)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x09, 0x32, // Usage (In Range)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Padding (6 bits)
- 0x95, 0x06, // Report Count (6)
- 0x81, 0x03, // Input (Constant)
+ 0x95, 0x06, // Report Count (6)
+ 0x81, 0x03, // Input (Constant)
// X/Y Position (4 bytes)
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x26, 0xFF, 0x7F, // Logical Maximum (32767)
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x10, // Report Size (16)
- 0x65, 0x33, // Unit (Inch, English Linear)
- 0x55, 0x0E, // Unit Exponent (-2)
- 0x09, 0x30, // Usage (X)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
- 0x09, 0x31, // Usage (Y)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
- 0xC0, // End Collection
- 0xC0, // End Collection
+ 0x05, 0x01, // Usage Page (Generic Desktop)
+ 0x26, 0xFF, 0x7F, // Logical Maximum (32767)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x10, // Report Size (16)
+ 0x65, 0x33, // Unit (Inch, English Linear)
+ 0x55, 0x0E, // Unit Exponent (-2)
+ 0x09, 0x30, // Usage (X)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x09, 0x31, // Usage (Y)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0xC0, // End Collection
+ 0xC0, // End Collection
#endif
#ifdef PROGRAMMABLE_BUTTON_ENABLE
// Programmable buttons report descriptor
- 0x05, 0x0C, // Usage Page (Consumer)
- 0x09, 0x01, // Usage (Consumer Control)
- 0xA1, 0x01, // Collection (Application)
- 0x85, REPORT_ID_PROGRAMMABLE_BUTTON, // Report ID
- 0x09, 0x03, // Usage (Programmable Buttons)
- 0xA1, 0x04, // Collection (Named Array)
- 0x05, 0x09, // Usage Page (Button)
- 0x19, 0x01, // Usage Minimum (Button 1)
- 0x29, 0x20, // Usage Maximum (Button 32)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x95, 0x20, // Report Count (32)
- 0x75, 0x01, // Report Size (1)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
- 0xC0, // End Collection
- 0xC0, // End Collection
+ 0x05, 0x0C, // Usage Page (Consumer)
+ 0x09, 0x01, // Usage (Consumer Control)
+ 0xA1, 0x01, // Collection (Application)
+ 0x85, REPORT_ID_PROGRAMMABLE_BUTTON, // Report ID
+ 0x09, 0x03, // Usage (Programmable Buttons)
+ 0xA1, 0x04, // Collection (Named Array)
+ 0x05, 0x09, // Usage Page (Button)
+ 0x19, 0x01, // Usage Minimum (Button 1)
+ 0x29, 0x20, // Usage Maximum (Button 32)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x95, 0x20, // Report Count (32)
+ 0x75, 0x01, // Report Size (1)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0xC0, // End Collection
+ 0xC0, // End Collection
#endif
#ifdef SHARED_EP_ENABLE
@@ -599,47 +603,47 @@ const PROGMEM uchar shared_hid_report[] = {
#ifdef RAW_ENABLE
const PROGMEM uchar raw_hid_report[] = {
- 0x06, RAW_USAGE_PAGE_LO, RAW_USAGE_PAGE_HI, // Usage Page (Vendor Defined)
- 0x09, RAW_USAGE_ID, // Usage (Vendor Defined)
- 0xA1, 0x01, // Collection (Application)
+ 0x06, RAW_USAGE_PAGE_LO, RAW_USAGE_PAGE_HI, // Usage Page (Vendor Defined)
+ 0x09, RAW_USAGE_ID, // Usage (Vendor Defined)
+ 0xA1, 0x01, // Collection (Application)
// Data to host
- 0x09, 0x62, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0)
- 0x26, 0xFF, 0x00, // Logical Maximum (255)
- 0x95, RAW_BUFFER_SIZE, // Report Count
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x09, 0x62, // Usage (Vendor Defined)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x26, 0xFF, 0x00, // Logical Maximum (255)
+ 0x95, RAW_BUFFER_SIZE, // Report Count
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Data from host
- 0x09, 0x63, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0)
- 0x26, 0xFF, 0x00, // Logical Maximum (255)
- 0x95, RAW_BUFFER_SIZE, // Report Count
- 0x75, 0x08, // Report Size (8)
- 0x91, 0x02, // Output (Data, Variable, Absolute)
- 0xC0 // End Collection
+ 0x09, 0x63, // Usage (Vendor Defined)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x26, 0xFF, 0x00, // Logical Maximum (255)
+ 0x95, RAW_BUFFER_SIZE, // Report Count
+ 0x75, 0x08, // Report Size (8)
+ 0x91, 0x02, // Output (Data, Variable, Absolute)
+ 0xC0 // End Collection
};
#endif
#if defined(CONSOLE_ENABLE)
const PROGMEM uchar console_hid_report[] = {
- 0x06, 0x31, 0xFF, // Usage Page (Vendor Defined - PJRC Teensy compatible)
- 0x09, 0x74, // Usage (Vendor Defined - PJRC Teensy compatible)
- 0xA1, 0x01, // Collection (Application)
+ 0x06, 0x31, 0xFF, // Usage Page (Vendor Defined - PJRC Teensy compatible)
+ 0x09, 0x74, // Usage (Vendor Defined - PJRC Teensy compatible)
+ 0xA1, 0x01, // Collection (Application)
// Data to host
- 0x09, 0x75, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0x00)
- 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
- 0x95, CONSOLE_BUFFER_SIZE, // Report Count
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
+ 0x09, 0x75, // Usage (Vendor Defined)
+ 0x15, 0x00, // Logical Minimum (0x00)
+ 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
+ 0x95, CONSOLE_BUFFER_SIZE, // Report Count
+ 0x75, 0x08, // Report Size (8)
+ 0x81, 0x02, // Input (Data, Variable, Absolute)
// Data from host
- 0x09, 0x76, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0x00)
- 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
- 0x95, CONSOLE_BUFFER_SIZE, // Report Count
- 0x75, 0x08, // Report Size (8)
- 0x91, 0x02, // Output (Data)
- 0xC0 // End Collection
+ 0x09, 0x76, // Usage (Vendor Defined)
+ 0x15, 0x00, // Logical Minimum (0x00)
+ 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
+ 0x95, CONSOLE_BUFFER_SIZE, // Report Count
+ 0x75, 0x08, // Report Size (8)
+ 0x91, 0x02, // Output (Data)
+ 0xC0 // End Collection
};
#endif
@@ -647,7 +651,6 @@ const PROGMEM uchar console_hid_report[] = {
# define USB_MAX_POWER_CONSUMPTION 500
#endif
-// TODO: change this to 10ms to match LUFA
#ifndef USB_POLLING_INTERVAL_MS
# define USB_POLLING_INTERVAL_MS 1
#endif
@@ -940,16 +943,16 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
usbMsgPtr = (usbMsgPtr_t)&usbStringDescriptorZero;
len = usbStringDescriptorZero.header.bLength;
break;
- case 1: // iManufacturer
+ case 1: // iManufacturer
usbMsgPtr = (usbMsgPtr_t)&usbStringDescriptorManufacturer;
len = usbStringDescriptorManufacturer.header.bLength;
break;
- case 2: // iProduct
+ case 2: // iProduct
usbMsgPtr = (usbMsgPtr_t)&usbStringDescriptorProduct;
len = usbStringDescriptorProduct.header.bLength;
break;
#if defined(SERIAL_NUMBER)
- case 3: // iSerialNumber
+ case 3: // iSerialNumber
usbMsgPtr = (usbMsgPtr_t)&usbStringDescriptorSerial;
len = usbStringDescriptorSerial.header.bLength;
break;
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
deleted file mode 100644
index 6767a8e4af..0000000000
--- a/tmk_core/rules.mk
+++ /dev/null
@@ -1,524 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-#----------------------------------------------------------------------------
-# WinAVR Makefile Template written by Eric B. Weddington, Jg Wunsch, et al.
-#
-# Released to the Public Domain
-#
-# Additional material for this makefile was written by:
-# Peter Fleury
-# Tim Henigan
-# Colin O'Flynn
-# Reiner Patommel
-# Markus Pfaff
-# Sander Pool
-# Frederik Rouleau
-# Carlos Lamas
-#
-
-# Enable vpath seraching for source files only
-# Without this, output files, could be read from the wrong .build directories
-VPATH_SRC := $(VPATH)
-vpath %.c $(VPATH_SRC)
-vpath %.h $(VPATH_SRC)
-vpath %.cpp $(VPATH_SRC)
-vpath %.cc $(VPATH_SRC)
-vpath %.hpp $(VPATH_SRC)
-vpath %.S $(VPATH_SRC)
-VPATH :=
-
-# Convert all SRC to OBJ
-define OBJ_FROM_SRC
-$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$(patsubst %.clib,$1/%.a,$($1_SRC))))))
-endef
-$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
-
-# Define a list of all objects
-OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
-NO_LTO_OBJ := $(filter %.a,$(OBJ))
-
-MASTER_OUTPUT := $(firstword $(OUTPUTS))
-
-
-
-# Output format. (can be srec, ihex, binary)
-FORMAT = ihex
-
-# Optimization level, can be [0, 1, 2, 3, s].
-# 0 = turn off optimization. s = optimize for size.
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
-OPT ?= s
-
-# Compiler flag to set the C Standard level.
-# c89 = "ANSI" C
-# gnu89 = c89 plus GCC extensions
-# c99 = ISO C99 standard (not yet fully implemented)
-# gnu99 = c99 plus GCC extensions
-CSTANDARD = -std=gnu99
-
-
-# Place -D or -U options here for C sources
-#CDEFS +=
-
-
-# Place -D or -U options here for ASM sources
-#ADEFS +=
-
-
-# Place -D or -U options here for C++ sources
-#CXXDEFS += -D__STDC_LIMIT_MACROS
-#CXXDEFS += -D__STDC_CONSTANT_MACROS
-#CXXDEFS +=
-
-# Speed up recompilations by opt-in usage of ccache
-USE_CCACHE ?= no
-ifneq ($(USE_CCACHE),no)
- CC_PREFIX ?= ccache
-endif
-
-#---------------- Compiler Options C ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-ifeq ($(strip $(LTO_ENABLE)), yes)
- ifeq ($(PLATFORM),CHIBIOS)
- $(info Enabling LTO on ChibiOS-targeting boards is known to have a high likelihood of failure.)
- $(info If unsure, set LTO_ENABLE = no.)
- endif
- CDEFS += -flto
- CDEFS += -DLTO_ENABLE
-endif
-
-DEBUG_ENABLE ?= yes
-ifeq ($(strip $(SKIP_DEBUG_INFO)),yes)
- DEBUG_ENABLE=no
-endif
-
-ifeq ($(strip $(DEBUG_ENABLE)),yes)
- CFLAGS += -g$(DEBUG)
-endif
-CFLAGS += $(CDEFS)
-CFLAGS += -O$(OPT)
-# add color
-ifeq ($(COLOR),true)
-ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "")
- CFLAGS+= -fdiagnostics-color
-endif
-endif
-CFLAGS += -Wall
-CFLAGS += -Wstrict-prototypes
-ifneq ($(strip $(ALLOW_WARNINGS)), yes)
- CFLAGS += -Werror
-endif
-#CFLAGS += -mshort-calls
-#CFLAGS += -fno-unit-at-a-time
-#CFLAGS += -Wundef
-#CFLAGS += -Wunreachable-code
-#CFLAGS += -Wsign-compare
-CFLAGS += $(CSTANDARD)
-
-# This fixes lots of keyboards linking errors but SHOULDN'T BE A FINAL SOLUTION
-# Fixing of multiple variable definitions must be made.
-CFLAGS += -fcommon
-
-#---------------- Compiler Options C++ ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-ifeq ($(strip $(DEBUG_ENABLE)),yes)
- CXXFLAGS += -g$(DEBUG)
-endif
-CXXFLAGS += $(CXXDEFS)
-CXXFLAGS += -O$(OPT)
-# to supress "warning: only initialized variables can be placed into program memory area"
-CXXFLAGS += -w
-CXXFLAGS += -Wall
-CXXFLAGS += -Wundef
-
-ifneq ($(strip $(ALLOW_WARNINGS)), yes)
- CXXFLAGS += -Werror
-endif
-#CXXFLAGS += -mshort-calls
-#CXXFLAGS += -fno-unit-at-a-time
-#CXXFLAGS += -Wstrict-prototypes
-#CXXFLAGS += -Wunreachable-code
-#CXXFLAGS += -Wsign-compare
-#CXXFLAGS += $(CSTANDARD)
-
-#---------------- Assembler Options ----------------
-ASFLAGS += $(ADEFS)
-ifeq ($(VERBOSE_AS_CMD),yes)
- ASFLAGS += -v
-endif
-
-#---------------- Library Options ----------------
-# Minimalistic printf version
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
-
-# Floating point printf version (requires MATH_LIB = -lm below)
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
-
-# If this is left blank, then it will use the Standard printf version.
-PRINTF_LIB =
-#PRINTF_LIB = $(PRINTF_LIB_MIN)
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
-
-
-# Minimalistic scanf version
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
-
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
-
-# If this is left blank, then it will use the Standard scanf version.
-SCANF_LIB =
-#SCANF_LIB = $(SCANF_LIB_MIN)
-#SCANF_LIB = $(SCANF_LIB_FLOAT)
-
-
-MATH_LIB = -lm
-CREATE_MAP ?= yes
-
-
-#---------------- Linker Options ----------------
-# -Wl,...: tell GCC to pass this to linker.
-# -Map: create map file
-# --cref: add cross reference to map file
-#
-# Comennt out "--relax" option to avoid a error such:
-# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
-#
-
-ifeq ($(CREATE_MAP),yes)
- LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
-endif
-ifeq ($(VERBOSE_LD_CMD),yes)
- LDFLAGS += -v
-endif
-#LDFLAGS += -Wl,--relax
-LDFLAGS += $(EXTMEMOPTS)
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
-#LDFLAGS += -T linker_script.x
-# You can give EXTRALDFLAGS at 'make' command line.
-LDFLAGS += $(EXTRALDFLAGS)
-
-#---------------- Assembler Listings ----------------
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns: create listing
-# -gstabs: have the assembler create line number information; note that
-# for use in COFF files, additional information about filenames
-# and function names needs to be present in the assembler source
-# files -- see avr-libc docs [FIXME: not yet described there]
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex
-# dump that will be displayed for a given single line of source input.
-
-ADHLNS_ENABLE ?= no
-ifeq ($(ADHLNS_ENABLE),yes)
- # Avoid "Options to '-Xassembler' do not match" - only specify assembler options at LTO link time
- ifeq ($(strip $(LTO_ENABLE)), yes)
- LDFLAGS += -Wa,-adhlns=$(BUILD_DIR)/$(TARGET).lst
- else
- CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
- CXXFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
- ifeq ($(strip $(DEBUG_ENABLE)),yes)
- ASFLAGS = -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
- else
- ASFLAGS = -Wa,-adhlns=$(@:%.o=%.lst),--listing-cont-lines=100
- endif
- endif
-endif
-
-# Define programs and commands.
-SHELL = sh
-REMOVE = rm -f
-REMOVEDIR = rmdir
-COPY = cp
-WINSHELL = cmd
-SECHO = $(SILENT) || echo
-MD5SUM ?= md5sum
-ifneq ($(filter Darwin FreeBSD,$(shell uname -s)),)
- MD5SUM = md5
-endif
-
-# UF2 format settings
-# To produce a UF2 file in your build, add to your keyboard's rules.mk:
-# FIRMWARE_FORMAT = uf2
-UF2CONV = $(TOP_DIR)/util/uf2conv.py
-UF2_FAMILY ?= 0x0
-
-# Compiler flags to generate dependency files.
-#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
-GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
-
-
-# Combine all necessary flags and optional flags.
-# Add target processor to flags.
-# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
-ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
-ALL_CXXFLAGS = $(MCUFLAGS) -x c++ $(CXXFLAGS) $(EXTRAFLAGS)
-ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
-
-define NO_LTO
-$(patsubst %.a,%.o,$1): NOLTO_CFLAGS += -fno-lto
-endef
-$(foreach LOBJ, $(NO_LTO_OBJ), $(eval $(call NO_LTO,$(LOBJ))))
-
-MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
-
-# For a ChibiOS build, ensure that the board files have the hook overrides injected
-define BOARDSRC_INJECT_HOOKS
-$(KEYBOARD_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): INIT_HOOK_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h
-endef
-$(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ))))
-
-# Add QMK specific flags
-DFU_SUFFIX ?= dfu-suffix
-DFU_SUFFIX_ARGS ?=
-
-
-elf: $(BUILD_DIR)/$(TARGET).elf
-hex: $(BUILD_DIR)/$(TARGET).hex
-uf2: $(BUILD_DIR)/$(TARGET).uf2
-cpfirmware: $(FIRMWARE_FORMAT)
- $(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to qmk_firmware folder" | $(AWK_CMD)
- $(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
-eep: $(BUILD_DIR)/$(TARGET).eep
-lss: $(BUILD_DIR)/$(TARGET).lss
-sym: $(BUILD_DIR)/$(TARGET).sym
-LIBNAME=lib$(TARGET).a
-lib: $(LIBNAME)
-
-# Display size of file.
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex
-#ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
-ELFSIZE = $(SIZE) $(BUILD_DIR)/$(TARGET).elf
-
-sizebefore:
- @if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \
- 2>/dev/null; $(SECHO); fi
-
-sizeafter: $(BUILD_DIR)/$(TARGET).hex
- @if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \
- 2>/dev/null; $(SECHO); fi
-
-# Display compiler version information.
-gccversion :
- @$(SILENT) || $(CC) --version
-
-# Create final output files (.hex, .eep) from ELF output file.
-%.hex: %.elf
- $(eval CMD=$(HEX) $< $@)
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
-
-%.uf2: %.hex
- $(eval CMD=$(UF2CONV) $(BUILD_DIR)/$(TARGET).hex -o $(BUILD_DIR)/$(TARGET).uf2 -c -f $(UF2_FAMILY) >/dev/null 2>&1)
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_UF2) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
-
-%.eep: %.elf
- $(eval CMD=$(EEP) $< $@ || exit 0)
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
-
-# Create extended listing file from ELF output file.
-%.lss: %.elf
- $(eval CMD=$(OBJDUMP) -h -S -z $< > $@)
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_EXTENDED_LISTING) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
-
-# Create a symbol table from ELF output file.
-%.sym: %.elf
- $(eval CMD=$(NM) -n $< > $@ )
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_SYMBOL_TABLE) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
-
-%.bin: %.elf
- $(eval CMD=$(BIN) $< $@ || exit 0)
- #@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
- @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD)
- @$(BUILD_CMD)
- if [ ! -z "$(DFU_SUFFIX_ARGS)" ]; then \
- $(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null ;\
- fi
- #$(SILENT) || printf "$(MSG_EXECUTING) '$(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null':\n" ;\
- $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
-
-BEGIN = gccversion sizebefore
-
-# Link: create ELF output file from object files.
-.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
-.PRECIOUS : $(OBJ)
-# Note the obj.txt depeendency is there to force linking if a source file is deleted
-%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
- @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
- $(eval CMD=MAKE=$(MAKE) $(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
- @$(BUILD_CMD)
-
-
-define GEN_OBJRULE
-$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
-ifdef $1_CONFIG
-$1_CONFIG_FLAGS += $$(patsubst %,-include %,$$($1_CONFIG))
-endif
-$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
-$1_CXXFLAGS = $$(ALL_CXXFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
-$1_ASFLAGS = $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
-
-# Compile: create object files from C source files.
-$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
- @mkdir -p $$(@D)
- @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
- $$(eval CC_EXEC := $$(CC))
- ifneq ($$(VERBOSE_C_CMD),)
- $$(if $$(filter $$(notdir $$(VERBOSE_C_CMD)),$$(notdir $$<)),$$(eval CC_EXEC += -v))
- endif
- ifneq ($$(VERBOSE_C_INCLUDE),)
- $$(if $$(filter $$(notdir $$(VERBOSE_C_INCLUDE)),$$(notdir $$<)),$$(eval CC_EXEC += -H))
- endif
- $$(eval CMD := $$(CC_EXEC) -c $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
- @$$(BUILD_CMD)
- ifneq ($$(DUMP_C_MACROS),)
- $$(eval CMD := $$(CC) -E -dM $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$<)
- @$$(if $$(filter $$(notdir $$(DUMP_C_MACROS)),$$(notdir $$<)),$$(BUILD_CMD))
- endif
-
-# Compile: create object files from C++ source files.
-$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
- @mkdir -p $$(@D)
- @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
- $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
- @$$(BUILD_CMD)
-
-$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
- @mkdir -p $$(@D)
- @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
- $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
- @$$(BUILD_CMD)
-
-# Assemble: create object files from assembler source files.
-$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
- @mkdir -p $$(@D)
- @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
- $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
- @$$(BUILD_CMD)
-
-$1/%.a : $1/%.o
- @mkdir -p $$(@D)
- @$(SILENT) || printf "Archiving: $$<" | $$(AWK_CMD)
- $$(eval CMD=$$(AR) rcs $$@ $$<)
- @$$(BUILD_CMD)
-
-$1/force:
-
-$1/cflags.txt: $1/force
- echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
-
-$1/cxxflags.txt: $1/force
- echo '$$($1_CXXFLAGS)' | cmp -s - $$@ || echo '$$($1_CXXFLAGS)' > $$@
-
-$1/asflags.txt: $1/force
- echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
-
-$1/compiler.txt: $1/force
- $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
-endef
-
-.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
-$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
- echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
-
-.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
-$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
- echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
-
-
-# We have to use static rules for the .d files for some reason
-DEPS = $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
-# Keep the .d files
-.PRECIOUS: $(DEPS)
-# Empty rule to force recompilation if the .d file is missing
-$(DEPS):
-
-
-$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
-
-# Create preprocessed source for use in sending a bug report.
-%.i : %.c | $(BEGIN)
- $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
-
-# Target: clean project.
-clean:
- $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
- $(REMOVE) $(BUILD_DIR)/$(TARGET).*
-
-show_path:
- @echo VPATH=$(VPATH)
- @echo SRC=$(SRC)
- @echo OBJ=$(OBJ)
-
-dump_vars: ERROR_IF_EMPTY=""
-dump_vars: ERROR_IF_NONBOOL=""
-dump_vars: ERROR_IF_UNSET=""
-dump_vars:
- @$(foreach V,$(sort $(.VARIABLES)),$(if $(filter-out environment% default automatic,$(origin $V)),$(info $V=$($V))))
-
-objs-size:
- for i in $(OBJ); do echo $$i; done | sort | xargs $(SIZE)
-
-ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
-SIZE_MARGIN = 1024
-
-check-size:
- $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) -D__ASSEMBLER__ $(CFLAGS) $(OPT_DEFS) platforms/avr/bootloader_size.c 2> /dev/null | sed -ne 's/\r//;/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
- $(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
- $(eval FREE_SIZE=$(shell expr $(MAX_SIZE) - $(CURRENT_SIZE)))
- $(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
- $(eval PERCENT_SIZE=$(shell expr $(CURRENT_SIZE) \* 100 / $(MAX_SIZE)))
- if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \
- $(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \
- if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then \
- printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); \
- else \
- if [ $(FREE_SIZE) -lt $(SIZE_MARGIN) ]; then \
- $(PRINT_WARNING_PLAIN); printf " * $(MSG_FILE_NEAR_LIMIT)"; \
- else \
- $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; \
- fi ; \
- fi ; \
- fi
-else
-check-size:
- $(SILENT) || echo "$(MSG_CHECK_FILESIZE_SKIPPED)"
-endif
-
-check-md5:
- $(MD5SUM) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT)
-
-# Create build directory
-$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
-
-# Create object files directory
-$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
-
-# Include the dependency files.
--include $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
-
-
-# Listing of phony targets.
-.PHONY : all dump_vars finish sizebefore sizeafter qmkversion \
-gccversion build elf hex uf2 eep lss sym coff extcoff \
-clean clean_list debug gdb-config show_path \
-program teensy dfu dfu-ee dfu-start \
-flash dfu-split-left dfu-split-right \
-avrdude-split-left avrdude-split-right \
-avrdude-loop usbasp
diff --git a/users/cedrikl/cedrikl.c b/users/cedrikl/cedrikl.c
new file mode 100644
index 0000000000..0479e22b5d
--- /dev/null
+++ b/users/cedrikl/cedrikl.c
@@ -0,0 +1,36 @@
+/* Copyright 2021 Cedrik Lussier @cedrikl
+.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include QMK_KEYBOARD_H
+#include "cedrikl.h"
+
+// Turn on/off NUM LOCK if current state is different
+void activate_numlock(bool turn_on) {
+ if (host_keyboard_led_state().num_lock != turn_on) {
+ tap_code(KC_NUMLOCK);
+ }
+}
+
+
+// INITIAL STARTUP
+
+void keyboard_post_init_user(void) {
+ #ifdef STARTUP_NUMLOCK_ON
+ activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results
+ #endif // STARTUP_NUMLOC_ON
+}
diff --git a/users/cedrikl/cedrikl.h b/users/cedrikl/cedrikl.h
new file mode 100644
index 0000000000..e25d274664
--- /dev/null
+++ b/users/cedrikl/cedrikl.h
@@ -0,0 +1,21 @@
+/* Copyright 2021 Cedrik Lussier @cedrikl
+.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// OTHER FUNCTION PROTOTYPE
+void activate_numlock(bool turn_on);
diff --git a/users/cedrikl/config.h b/users/cedrikl/config.h
new file mode 100644
index 0000000000..741a2fe470
--- /dev/null
+++ b/users/cedrikl/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2021 Cedrik Lussier @cedrikl
+.* Directly inspired from the work of jonavin https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#ifdef RGB_MATRIX_ENABLE
+ #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+ //#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+ #define RGB_DISABLE_WHEN_USB_SUSPENDED
+ #define RGB_MATRIX_STARTUP_VAL 120
+#endif
diff --git a/users/cedrikl/rules.mk b/users/cedrikl/rules.mk
new file mode 100644
index 0000000000..b5ee62c43a
--- /dev/null
+++ b/users/cedrikl/rules.mk
@@ -0,0 +1,4 @@
+SRC += cedrikl.c
+ifeq ($(strip $(STARTUP_NUMLOCK_ON)), yes)
+ OPT_DEFS += -DSTARTUP_NUMLOCK_ON
+endif
diff --git a/users/drashna/oled/oled_stuff.c b/users/drashna/oled/oled_stuff.c
index c850c5336f..752829e0fa 100644
--- a/users/drashna/oled/oled_stuff.c
+++ b/users/drashna/oled/oled_stuff.c
@@ -953,7 +953,7 @@ void oled_driver_render_logo_left(void) {
render_matrix_scan_rate(2);
# endif
oled_set_cursor(7, 2);
-# if defined(KEYBOARD_bastardkb_charybdis)
+# if defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)
render_pointing_dpi_status(charybdis_get_pointer_sniping_enabled() ? charybdis_get_pointer_sniping_dpi() : charybdis_get_pointer_default_dpi(), 1);
// credit and thanks to jaspertandy on discord for these images
diff --git a/users/drashna/pointing/pointing.c b/users/drashna/pointing/pointing.c
index 0dcfe73f34..d0a83e2c26 100644
--- a/users/drashna/pointing/pointing.c
+++ b/users/drashna/pointing/pointing.c
@@ -80,9 +80,9 @@ bool process_record_pointing(uint16_t keycode, keyrecord_t* record) {
}
break;
case MO(_MOUSE):
-#if defined(KEYBOARD_ploopy) || defined(KEYBOARD_handwired_tractyl_manuform)
+#if defined(KEYBOARD_ploopy)
case DPI_CONFIG:
-#elif defined(KEYBOARD_bastardkb_charybdis) && !defined(NO_CHARYBDIS_KEYCODES)
+#elif (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && !defined(NO_CHARYBDIS_KEYCODES)
case SAFE_RANGE ... (CHARYBDIS_SAFE_RANGE-1):
#endif
case KC_MS_UP ... KC_MS_WH_RIGHT:
diff --git a/users/vitoni/readme.adoc b/users/vitoni/readme.adoc
new file mode 100644
index 0000000000..acf65793d2
--- /dev/null
+++ b/users/vitoni/readme.adoc
@@ -0,0 +1,16 @@
+= User functions
+
+Functions are mostly related to changing the RGB lights depending on user interaction and when idling.
+
+== utils.h
+
+Common functions are declared in link:utils.h[]. These function are not directly RGB related but used to modify state and calculate values.
+
+== rgb_matrix_effects.h
+
+Functions in link:rgb_matrix_effects.h[] make use of common function in `utils.h` and are used to create to RGB matrix effects such as fading or breathing.
+
+== vitoni.h
+
+The functions declared in link:vitoni.h[] are used as entry points for usage of RGB effects.
+One entry point is `matrix_scan` based for regular task while the other is `process_record` based for user activity tasks.
diff --git a/users/vitoni/rgb_matrix_effects.c b/users/vitoni/rgb_matrix_effects.c
new file mode 100644
index 0000000000..3a13e99bc7
--- /dev/null
+++ b/users/vitoni/rgb_matrix_effects.c
@@ -0,0 +1,236 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rgb_matrix_effects.h"
+
+#include <rgb_matrix.h>
+#include <lib/lib8tion/lib8tion.h>
+
+#include "utils.h"
+
+/*
+ Offset used to start at the right point in th curve to avoid big jumps in brightness
+ 0 => 0% (signed) => 50% (unsigned)
+ 64 => 100% (signed) => 100% (unsigned)
+ 128 => 0% (signed) => 50% (unsigned)
+ 192 => -100% (signed) => 0% (unsigned)
+*/
+enum PHASE {
+ PHASE_ZERO_RAISING
+ ,PHASE_HIGH
+ ,PHASE_ZERO_FALLING
+ ,PHASE_LOW
+};
+
+/**
+ * @brief Calculates the offset so that a specific time is aligned to a specific point in the sine curve.
+ * @param[in] time The time for which the offset shopuld be calculated.
+ * @param[in] phase Phase which should be reached with the offset
+ * @see PHASE
+ */
+uint8_t offset_for_time(const uint8_t time, const uint8_t phase) {
+ switch (phase) {
+ case PHASE_ZERO_RAISING:
+ return 0 - time;
+ case PHASE_HIGH:
+ return 64 - time;
+ case PHASE_ZERO_FALLING:
+ return 128 - time;
+ case PHASE_LOW:
+ return 192 - time;
+ default:
+ return 0;
+ }
+}
+
+/**
+ * @brief Scales down `g_rgb_timer` so that it can be used for RGB effects.
+ * @return scaled down timer
+ * @see rgb_time_2_scale_w_factor()
+ */
+uint8_t rgb_time_2_scale(void) {
+ static const uint8_t factor = 1;
+ return rgb_time_2_scale_w_factor(factor);
+}
+
+/*
+ * Used to slow down RGB speed.
+ */
+static const uint8_t rgb_speed_divisor = 8;
+
+/**
+ * @brief Scales down `g_rgb_timer` so that it can be used for RGB effects.
+ * @details Usually these calculations aredone internally by some RGB effects.
+ This method exposed to scaling so that all effects to have same timebase. If `rgb_matrix_config.speed` all effects are affected the same.
+ * @param[in] factor The factor can be used to speed up some operations in relation to others.
+ * @return scaled down timer taking into account the given factor
+ * @see g_rgb_timer
+ * @see rgb_matrix_config.speed
+ */
+uint8_t rgb_time_2_scale_w_factor(const uint8_t rgb_speed_factor) {
+ const uint8_t scaled_time = scale16by8(g_rgb_timer, rgb_matrix_config.speed * rgb_speed_factor / rgb_speed_divisor);
+
+ return scaled_time;
+}
+
+/**
+ * @brief Inverse function to calculate time required to execute `timer` steps.
+ * @details This method allows calculation of the time needed to execute N `timer`steps.
+ Usefull when using a scaled down time but requiring the time needed to perform these steps.
+ * @param[in] scaled_time scaled down timer to inverse to time
+ * @return time corresponding to scaled down time
+ * @see rgb_time_2_scale()
+ */
+uint16_t scale_2_rgb_time(const uint8_t scaled_time) {
+ const uint16_t time = scaled_time * rgb_speed_divisor * UINT8_MAX / rgb_matrix_config.speed;
+
+ return time;
+}
+
+bool fade_in_ranged(const uint8_t time, const uint8_t range_min, const uint8_t range_max) {
+ static const uint8_t max_delta = 1;
+ return scaled_sin_up(time, range_min, range_max, max_delta, &(rgb_matrix_config.hsv.v));
+}
+
+bool fade_out_ranged(const uint8_t time, const uint8_t range_min, const uint8_t range_max) {
+ static const uint8_t max_delta = 1;
+ return scaled_sin_down(time, range_min, range_max, max_delta, &(rgb_matrix_config.hsv.v));
+}
+
+/**
+ * @brief Convenience method to eventually skip the value part when setting HSV.
+ * @details When setting HSV this includes the value/brightness.
+ As changing brightness might interfer with fading or breathing effects,
+ this method can skip the value part of HSV (depending on the preprocessor flag: RGB_FADE_IN).
+ * @param[in] hue Hue
+ * @param[in] sat Saturation
+ * @param[in] hue Value (brightness)
+ * @see rgb_matrix_sethsv_noeeprom()
+ */
+void rgb_matrix_sethsv_noeeprom_user(const uint16_t hue, const uint8_t sat, const uint8_t val) {
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+ rgb_matrix_config.hsv.h = hue;
+ rgb_matrix_config.hsv.s = sat;
+ // omitting setting the value to avoid interfering with effects
+// rgb_matrix_config.hsv.v = val;
+#else
+ rgb_matrix_sethsv_noeeprom(hue, sat, val);
+#endif
+}
+
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+/**
+ * @brief Calculates the time offset required by fade in.
+ * @details Using an arbitrary timer any point on the sine curve might be pointed to.
+ * The offest is calculated so that
+ * a) the point is at the lowest point in the curve and the curve is raising
+ * b) the point is near the current brightness (eg. fade in might be called while fading out and the lowest value has not yet been reached).
+ * @param[in] time Current time usually represented by (usually scaled) timer
+ * @return Offset required so that time matches the current brightness
+ */
+uint8_t calc_fade_in_offset(const uint8_t time) {
+ static const uint8_t max_steps = UINT8_MAX/2;
+ static const uint8_t range_min = 0;
+ static const uint8_t range_max = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+
+ // start at the right point in the sine curve
+ uint8_t time_offset = offset_for_time(time, PHASE_LOW);
+
+ // find the right offset to match the current brightness
+ for (int i = 1; i < max_steps; i++) {
+ const uint8_t value = scaled_sin(time + time_offset + 1, range_min, range_max);
+ if (in_range(value, range_min, range_max) && value < rgb_matrix_config.hsv.v) {
+ time_offset++;
+ } else {
+ break;
+ }
+ }
+
+ return time_offset;
+}
+
+/**
+ * @brief Increases value/brightness until reaching RGB_MATRIX_MAXIMUM_BRIGHTNESS based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if RGB_MATRIX_MAXIMUM_BRIGHTNESS has been reached, `false` otherwise.
+ */
+bool fade_in(const uint8_t time) {
+ static const uint8_t range_min = 0;
+ static const uint8_t range_max = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+
+ return fade_in_ranged(time, range_min, range_max);
+}
+#endif
+
+#if defined(RGB_DISABLE_WITH_FADE_OUT) || defined(RGB_IDLE_TIMEOUT)
+/**
+ * @brief Calculates the time offset required by fade out.
+ * @details Using an arbitrary timer any point on the Sinus curve might be pointed to.
+ * The offest is calculated so that
+ * a) the point is at the highest point in the curve and the curve is failing
+ * b) the point is near the current brightness (eg. fade out might be called while on breath effect).
+ * @param[in] time Current time usually represented by a(usually scaled) timer
+ * @return Offset required so that time matches the current brightness
+ */
+uint8_t calc_fade_out_offset(const uint8_t time) {
+ static const uint8_t range_min = 0;
+ static const uint8_t range_max = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+
+ // start at the right point in the sin() curve
+ uint8_t time_offset = offset_for_time(time, PHASE_HIGH);
+
+ // find the right offset to match the current brightness
+ for (int i = 1; i < 127; i++) {
+ const uint8_t value = scaled_sin(time + time_offset + 1, range_min, range_max);
+ if (in_range(value, range_min, range_max) && rgb_matrix_config.hsv.v < value) {
+ time_offset++;
+ } else {
+ break;
+ }
+ }
+
+ return time_offset;
+}
+#endif
+
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+/**
+ * @brief Decreases value/brightness until reaching 0 based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if 0 has been reached, `false` otherwise.
+ */
+bool fade_out(const uint8_t time) {
+ static const uint8_t range_min = 0;
+ static const uint8_t range_max = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+
+ return fade_out_ranged(time, range_min, range_max);
+}
+#endif
+
+#if defined(RGB_IDLE_TIMEOUT)
+/**
+ * @brief Decreases value/brightness until reaching `RGB_IDLE_MINIMUM_BRIGHTNESS` based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if `RGB_IDLE_MINIMUM_BRIGHTNESS` has been reached, `false` otherwise.
+ */
+bool idle_fade_out(const uint8_t time) {
+ static const uint8_t range_min = RGB_IDLE_MINIMUM_BRIGHTNESS;
+ static const uint8_t range_max = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+
+ return fade_out_ranged(time, range_min, range_max);
+}
+
+#if defined(RGB_IDLE_BREATHE)
+/**
+ * @brief Changes value/brightness to create a breathing effect based on given timer.
+ * @details Brightness will breathe in the range starting from `RGB_IDLE_MINIMUM_BRIGHTNESS` to `RGB_IDLE_MAXIMUM_BRIGHTNESS`.
+ * @param[in] time A (usually scaled) timer
+ */
+void idle_breathe(const uint8_t time) {
+ static const uint8_t range_min = RGB_IDLE_MINIMUM_BRIGHTNESS;
+ static const uint8_t range_max = RGB_IDLE_MAXIMUM_BRIGHTNESS;
+
+ rgb_matrix_config.hsv.v = scaled_sin(time, range_min, range_max);
+}
+#endif // RGB_IDLE_BREATHE
+#endif // RGB_IDLE_TIMEOUT
diff --git a/users/vitoni/rgb_matrix_effects.h b/users/vitoni/rgb_matrix_effects.h
new file mode 100644
index 0000000000..ed74500b18
--- /dev/null
+++ b/users/vitoni/rgb_matrix_effects.h
@@ -0,0 +1,174 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * States reflecting the state of the keyboard.
+ * Dependeing on these states various effects can set for the RGB matrix.
+ */
+enum states {
+ REGULAR //!< when in regular use
+#if defined(RGB_IDLE_TIMEOUT)
+ ,IDLE_FADE_OUT //!< when started idling
+ ,IDLE //!< when idling
+#endif
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+ ,FADE_IN //!< when starting initially or before going back to REGULAR
+#endif
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+ ,FADE_OUT //!< before supending
+#endif
+ ,SUSPENDED //!< expecting to be suspended by RGB_DISABLE_TIMEOUT any time
+};
+
+/**
+ * @brief Scales down `g_rgb_timer` so that it can be used for RGB effects.
+ * @details Usually these calculations aredone internally by some RGB effects.
+ This method exposed to scaling so that all effects to have same timebase. If `rgb_matrix_config.speed` all effects are affected the same.
+ * @param[in] factor The factor can be used to speed up some operations in relation to others.
+ * @return scaled down timer taking into account the given factor
+ * @see g_rgb_timer
+ * @see rgb_matrix_config.speed
+ */
+uint8_t rgb_time_2_scale_w_factor(const uint8_t factor);
+
+/**
+ * @brief Scales down `g_rgb_timer` so that it can be used for RGB effects.
+ * @return scaled down timer
+ * @see rgb_time_2_scale_w_factor()
+ */
+uint8_t rgb_time_2_scale(void);
+
+/**
+ * @brief Inverse function to calculate time required to execute `timer` steps.
+ * @details This method allows calculation of the time needed to execute N `timer`steps.
+ Usefull when using a scaled down time but requiring the time needed to perform these steps.
+ * @param[in] scaled_time scaled down timer to inverse to time
+ * @return time corresponding to scaled down time
+ * @see rgb_time_2_scale()
+ */
+uint16_t scale_2_rgb_time(const uint8_t scaled_time);
+
+/**
+ * @brief Convenience method to eventually skip the value part when setting HSV.
+ * @details When setting HSV this includes the value/brightness.
+ As changing brightness might interfer with fading or breathing effects,
+ this method can skip the value part of HSV (depending on the preprocessor flag: RGB_FADE_IN).
+ * @param[in] hue Hue
+ * @param[in] sat Saturation
+ * @param[in] hue Value (brightness)
+ * @see rgb_matrix_sethsv_noeeprom()
+ */
+void rgb_matrix_sethsv_noeeprom_user(const uint16_t hue, const uint8_t sat, const uint8_t val);
+
+#if defined(RGB_FADE_IN) || defined(RGB_DISABLE_WITH_FADE_OUT) || defined(RGB_IDLE_TIMEOUT)
+# if defined(RGB_MATRIX_MAXIMUM_BRIGHTNESS)
+# if (RGB_MATRIX_MAXIMUM_BRIGHTNESS) < 1
+# error "RGB_MATRIX_MAXIMUM_BRIGHTNESS must not be less than ONE"
+# endif
+# if UINT8_MAX < (RGB_MATRIX_MAXIMUM_BRIGHTNESS)
+# error "RGB_MATRIX_MAXIMUM_BRIGHTNESS must not be larger than UINT8_MAX"
+# endif
+# else
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
+# endif
+#endif
+
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+/**
+ * @brief Calculates the time offset required by fade in.
+ * @details Using an arbitrary timer any point on the sine curve might be pointed to.
+ * The offset is calculated so that
+ * a) the point is at the lowest point in the curve and the curve is raising
+ * b) the point is near the current brightness (eg. fade in might be called while fading out and the lowest value has not yet been reached).
+ * @param[in] time Current time usually represented by a(usually scaled) timer
+ * @return Offset required so that time matches the current brightness
+ */
+uint8_t calc_fade_in_offset(const uint8_t time);
+
+/**
+ * @brief Increases value/brightness until reaching RGB_MATRIX_MAXIMUM_BRIGHTNESS based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if RGB_MATRIX_MAXIMUM_BRIGHTNESS has been reached, `false` otherwise.
+ */
+bool fade_in(const uint8_t time);
+#endif
+
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+# if !defined(RGB_DISABLE_TIMEOUT)
+# warning "RGB_DISABLE_WITH_FADE_OUT expects RGB_DISABLE_TIMEOUT to be defined"
+# endif
+#endif
+
+#if defined(RGB_DISABLE_WITH_FADE_OUT) || defined(RGB_IDLE_TIMEOUT)
+/**
+ * @brief Calculates the time offset required by fade out.
+ * @details Using an arbitrary timer any point on the Sinus curve might be pointed to.
+ * The offest is calculated so that
+ * a) the point is at the highest point in the curve and the curve is failing
+ * b) the point is near the current brightness (eg. fade out might be called while on breath effect).
+ * @param[in] time Current time usually represented by a(usually scaled) timer
+ * @return Offset required so that time matches the current brightness
+ */
+uint8_t calc_fade_out_offset(const uint8_t time);
+#endif
+
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+/**
+ * @brief Decreases value/brightness until reaching 0 based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if 0 has been reached, `false` otherwise.
+ */
+bool fade_out(const uint8_t time);
+#endif
+
+#if defined(RGB_IDLE_TIMEOUT)
+# if RGB_IDLE_TIMEOUT < 0
+# error "RGB_IDLE_TIMEOUT must not be less than ZERO"
+# endif
+# if !defined(RGB_IDLE_MINIMUM_BRIGHTNESS)
+ // minimum brightness when idling
+# define RGB_IDLE_MINIMUM_BRIGHTNESS (RGB_MATRIX_MAXIMUM_BRIGHTNESS/5)
+# endif
+# if RGB_IDLE_MINIMUM_BRIGHTNESS < 0
+# error "RGB_IDLE_MINIMUM_BRIGHTNESS must not be less than ZERO"
+# endif // RGB_IDLE_MINIMUM_BRIGHTNESS < 0
+# if RGB_MATRIX_MAXIMUM_BRIGHTNESS <= RGB_IDLE_MINIMUM_BRIGHTNESS
+# error "RGB_IDLE_MINIMUM_BRIGHTNESS must be less than RGB_MATRIX_MAXIMUM_BRIGHTNESS"
+# endif // RGB_MATRIX_MAXIMUM_BRIGHTNESS <= RGB_IDLE_MINIMUM_BRIGHTNESS
+
+/**
+ * @brief Decreases value/brightness until reaching `RGB_IDLE_MINIMUM_BRIGHTNESS` based on given timer.
+ * @param[in] time A (usually scaled) timer
+ * @return Returns `true` if `RGB_IDLE_MINIMUM_BRIGHTNESS` has been reached, `false` otherwise.
+ */
+bool idle_fade_out(const uint8_t time);
+
+#if defined(RGB_IDLE_BREATHE)
+# if !defined(RGB_IDLE_MAXIMUM_BRIGHTNESS)
+ // maximum brightness when idling
+# define RGB_IDLE_MAXIMUM_BRIGHTNESS (RGB_MATRIX_MAXIMUM_BRIGHTNESS*3/5)
+# endif
+# if !(0 <= RGB_IDLE_MAXIMUM_BRIGHTNESS)
+# error "RGB_IDLE_MINIMUM_BRIGHTNESS must not be less than ZERO, was: " RGB_IDLE_MAXIMUM_BRIGHTNESS
+# endif // RGB_IDLE_MAXIMUM_BRIGHTNESS < 0
+# if !(RGB_IDLE_MINIMUM_BRIGHTNESS < RGB_IDLE_MAXIMUM_BRIGHTNESS)
+# error "RGB_IDLE_MINIMUM_BRIGHTNESS must be less than RGB_IDLE_MAXIMUM_BRIGHTNESS"
+# endif // RGB_IDLE_MAXIMUM_BRIGHTNESS <= RGB_IDLE_MINIMUM_BRIGHTNESS
+# if !(RGB_IDLE_MAXIMUM_BRIGHTNESS <= RGB_MATRIX_MAXIMUM_BRIGHTNESS)
+# error "RGB_IDLE_MAXIMUM_BRIGHTNESS must be less than or equal to RGB_MATRIX_MAXIMUM_BRIGHTNESS"
+# endif // RGB_MATRIX_MAXIMUM_BRIGHTNESS <= RGB_IDLE_MAXIMUM_BRIGHTNESS
+
+/**
+ * @brief Changes value/brightness to create a breathing effect based on given timer.
+ * @details Brightness will breathe in the range starting from `RGB_IDLE_MINIMUM_BRIGHTNESS` to `RGB_IDLE_MAXIMUM_BRIGHTNESS`.
+ * @param[in] time A (usually scaled) timer
+ */
+void idle_breathe(const uint8_t time);
+#endif // RGB_IDLE_BREATHE
+
+#endif // RGB_IDLE_TIMEOUT
diff --git a/users/vitoni/rules.mk b/users/vitoni/rules.mk
new file mode 100644
index 0000000000..2f3b0d15e5
--- /dev/null
+++ b/users/vitoni/rules.mk
@@ -0,0 +1,4 @@
+SRC += \
+ vitoni.c \
+ utils.c \
+ rgb_matrix_effects.c
diff --git a/users/vitoni/utils.c b/users/vitoni/utils.c
new file mode 100644
index 0000000000..fb011570e4
--- /dev/null
+++ b/users/vitoni/utils.c
@@ -0,0 +1,129 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "utils.h"
+
+#include <lib/lib8tion/lib8tion.h>
+
+/**
+* @brief Changes `*value` to `new_value`.
+* @param[in,out] value Pointer to variable to be changed.
+* @param[in] new_value Value to be changed.
+* @param[in,out] changed Flag indicating `*value` and `new_value` were different.
+*/
+void update_value(uint8_t *value, const uint8_t new_value, bool *changed) {
+ if (new_value != (*value)) {
+ (*changed) = true;
+ (*value) = new_value;
+ }
+}
+
+/**
+* @brief Checks whether a value is in the given range.
+* @param[in] value Value to be checked.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @return `true` if (range_min <= value <= range_max), `false` otherwise
+*/
+bool in_range(const uint8_t value, const uint8_t range_min, const uint8_t range_max) {
+ return range_min <= value && value <= range_max;
+}
+
+/**
+* @brief Calculates the sine value based on sin8() and scales it to the given range (unsigned).
+*
+* Table of values for unscaled sin8() eg. a theta of 0 results to 128 and a theta of 255 (240+15) results to 125.
+ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ +----------------------------------------------------------------
+ 0: 128 131 134 137 140 143 146 149 152 155 158 161 164 167 170 173
+ 16: 177 179 182 184 187 189 192 194 197 200 202 205 207 210 212 215
+ 32: 218 219 221 223 224 226 228 229 231 233 234 236 238 239 241 243
+ 48: 245 245 246 246 247 248 248 249 250 250 251 251 252 253 253 254
+ 64: 255 254 253 253 252 251 251 250 250 249 248 248 247 246 246 245
+ 80: 245 243 241 239 238 236 234 233 231 229 228 226 224 223 221 219
+ 96: 218 215 212 210 207 205 202 200 197 194 192 189 187 184 182 179
+ 112: 177 173 170 167 164 161 158 155 152 149 146 143 140 137 134 131
+ 128: 128 125 122 119 116 113 110 107 104 101 98 95 92 89 86 83
+ 144: 79 77 74 72 69 67 64 62 59 56 54 51 49 46 44 41
+ 160: 38 37 35 33 32 30 28 27 25 23 22 20 18 17 15 13
+ 176: 11 11 10 10 9 8 8 7 6 6 5 5 4 3 3 2
+ 192: 1 2 3 3 4 5 5 6 6 7 8 8 9 10 10 11
+ 208: 11 13 15 17 18 20 22 23 25 27 28 30 32 33 35 37
+ 224: 38 41 44 46 49 51 54 56 59 62 64 67 69 72 74 77
+ 240: 79 83 86 89 92 95 98 101 104 107 110 113 116 119 122 125
+*
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sine calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @return Calculated sine value mapped to the given range.
+*/
+uint8_t scaled_sin(const uint8_t theta, const uint8_t range_min, const uint8_t range_max) {
+ const uint8_t range = range_max - range_min;
+ return scale8(sin8(theta), range) + range_min;
+}
+
+/**
+* @brief Increases the given value until reaching range_max.
+* The increments occur following an upwards sine wave (scaled from range_min to range_max).
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sine calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @param[in] max_delta Maximum delta between value and range_max (due to values being integers and eventually not fully matching).
+* @param[in,out] value Reference of variable to be increased
+* @return `true` if value and range_max are within a delta of 3 (chosen by fair dice rolling), `false` otherwise
+* @see scaled_sin()
+*/
+bool scaled_sin_up(const uint8_t theta, const uint8_t range_min, const uint8_t range_max, const uint8_t max_delta, uint8_t *value) {
+ // ensure upper range bound
+ if (range_max <= (*value)) {
+ (*value) = range_max;
+ return true;
+ }
+
+ const uint8_t new_value = scaled_sin(theta, range_min, range_max);
+ if (in_range(new_value, range_min, range_max) && (*value) < new_value) {
+ (*value) = new_value;
+
+ return range_max == (*value);
+ }
+
+ const uint8_t delta = range_max - (*value);
+ if (delta <= max_delta) {
+ (*value) = range_max;
+ }
+
+ return delta <= max_delta;
+}
+
+/**
+* @brief Decreases the given value until reaching range_min.
+* The decrements occur following an downwards sinus wave (scaled from range_min to range_max).
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sinus calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @param[in] max_delta Maximum delta between value and range_min (due to values being integers and eventually not fully matching).
+* @param[in,out] value Reference of variable to be decreased
+* @return `true` if value and range_max are within a delta of 3 (chosen by fair dice rolling), `false` otherwise
+* @see scaled_sin()
+*/
+bool scaled_sin_down(const uint8_t theta, const uint8_t range_min, const uint8_t range_max, const uint8_t max_delta, uint8_t *value) {
+ // ensure lower range bound
+ if ((*value) <= range_min) {
+ (*value) = range_min;
+ return true;
+ }
+
+ const uint8_t new_value = scaled_sin(theta, range_min, range_max);
+ if (in_range(new_value, range_min, range_max) && new_value < (*value)) {
+ (*value) = new_value;
+
+ return range_min == (*value);
+ }
+
+ const uint8_t delta = (*value) - range_min;
+ if (delta <= max_delta) {
+ (*value) = range_min;
+ }
+
+ return delta <= max_delta;
+}
diff --git a/users/vitoni/utils.h b/users/vitoni/utils.h
new file mode 100644
index 0000000000..987b612d58
--- /dev/null
+++ b/users/vitoni/utils.h
@@ -0,0 +1,80 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+* @brief Changes `*value` to `new_value`.
+* @param[in,out] value Pointer to variable to be changed.
+* @param[in] new_value Value to be changed.
+* @param[in,out] changed Flag indicating `*value` and `new_value` were different.
+*/
+void update_value(uint8_t *value, const uint8_t new_value, bool *changed);
+
+/**
+* @brief Checks whether a value is in the given range.
+* @param[in] value Value to be checked.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @return `true` if (range_min <= value <= range_max), `false` otherwise
+*/
+bool in_range(const uint8_t value, const uint8_t range_min, const uint8_t range_max);
+
+/**
+* @brief Calculates the sine value based on sin8() and scales it to the given range (unsigned).
+*
+* Table of values for unscaled sin8() eg. a theta of 0 results to 128 and a theta of 255 (240+15) results to 125.
+ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ +----------------------------------------------------------------
+ 0: 128 131 134 137 140 143 146 149 152 155 158 161 164 167 170 173
+ 16: 177 179 182 184 187 189 192 194 197 200 202 205 207 210 212 215
+ 32: 218 219 221 223 224 226 228 229 231 233 234 236 238 239 241 243
+ 48: 245 245 246 246 247 248 248 249 250 250 251 251 252 253 253 254
+ 64: 255 254 253 253 252 251 251 250 250 249 248 248 247 246 246 245
+ 80: 245 243 241 239 238 236 234 233 231 229 228 226 224 223 221 219
+ 96: 218 215 212 210 207 205 202 200 197 194 192 189 187 184 182 179
+ 112: 177 173 170 167 164 161 158 155 152 149 146 143 140 137 134 131
+ 128: 128 125 122 119 116 113 110 107 104 101 98 95 92 89 86 83
+ 144: 79 77 74 72 69 67 64 62 59 56 54 51 49 46 44 41
+ 160: 38 37 35 33 32 30 28 27 25 23 22 20 18 17 15 13
+ 176: 11 11 10 10 9 8 8 7 6 6 5 5 4 3 3 2
+ 192: 1 2 3 3 4 5 5 6 6 7 8 8 9 10 10 11
+ 208: 11 13 15 17 18 20 22 23 25 27 28 30 32 33 35 37
+ 224: 38 41 44 46 49 51 54 56 59 62 64 67 69 72 74 77
+ 240: 79 83 86 89 92 95 98 101 104 107 110 113 116 119 122 125
+*
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sine calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @return Calculated sine value mapped to the given range.
+*/
+uint8_t scaled_sin(const uint8_t theta, const uint8_t range_min, const uint8_t range_max);
+
+/**
+* @brief Increases the given value until reaching range_max.
+* The increments occur following an upwards sine wave (scaled from range_min to range_max).
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sine calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @param[in] max_delta Maximum delta between value and range_max (due to values being integers and eventually not fully matching).
+* @param[in,out] value Reference of variable to be increased
+* @return `true` if value and range_max are within a delta of 3 (chosen by fair dice rolling), `false` otherwise
+* @see scaled_sin()
+*/
+bool scaled_sin_up(const uint8_t thea, const uint8_t range_min, const uint8_t range_max, const uint8_t max_delta, uint8_t *value);
+
+/**
+* @brief Decreases the given value until reaching range_min.
+* The decrements occur following an downwards sinus wave (scaled from range_min to range_max).
+* @param[in] theta Angle (a full circle mapped to 0-255) used as input for sinus calculation.
+* @param[in] range_min Lower bound of range (inclusive).
+* @param[in] range_max Upper bound of range (inclusive).
+* @param[in] max_delta Maximum delta between value and range_min (due to values being integers and eventually not fully matching).
+* @param[in,out] value Reference of variable to be decreased
+* @return `true` if value and range_max are within a delta of 3 (chosen by fair dice rolling), `false` otherwise
+* @see scaled_sin()
+*/
+bool scaled_sin_down(const uint8_t theta, const uint8_t range_min, const uint8_t range_max, const uint8_t max_delta, uint8_t *value);
diff --git a/users/vitoni/vitoni.c b/users/vitoni/vitoni.c
new file mode 100644
index 0000000000..2a0ff5c46f
--- /dev/null
+++ b/users/vitoni/vitoni.c
@@ -0,0 +1,131 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "vitoni.h"
+
+#include <rgb_matrix.h>
+#include <lib/lib8tion/lib8tion.h>
+
+#include "rgb_matrix_effects.h"
+#include "utils.h"
+
+#if defined(RGB_FADE_IN) || defined(RGB_DISABLE_WITH_FADE_OUT) || defined(RGB_IDLE_TIMEOUT)
+static uint8_t state;
+
+// flag used to indicate that offset calculation is needed to adjust the timer,
+// so that it matches the index used for sine calculation
+static bool calc_offset;
+
+void matrix_scan_user_rgb(void) {
+#if defined(RGB_DISABLE_WITH_FADE_OUT) || defined(RGB_IDLE_TIMEOUT)
+ const uint8_t time = rgb_time_2_scale();
+#endif
+ static uint8_t time_offset;
+
+ const uint32_t inactivity_millis = last_input_activity_elapsed();
+
+#if defined(RGB_IDLE_TIMEOUT)
+ if (IDLE != state && RGB_IDLE_TIMEOUT <= inactivity_millis) {
+ update_value(&state, IDLE_FADE_OUT, &calc_offset);
+ }
+#endif
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+ const uint32_t fade_out_duration = scale_2_rgb_time(128);
+ const uint32_t start_fade_out_after_millis = (RGB_DISABLE_TIMEOUT) > fade_out_duration
+ ? (RGB_DISABLE_TIMEOUT) - fade_out_duration
+ : 0;
+
+ if (start_fade_out_after_millis <= inactivity_millis) {
+ update_value(&state, FADE_OUT, &calc_offset);
+ }
+#elif defined(RGB_DISABLE_TIMEOUT)
+ // having to set brightness "manually" to black as starting point for fade in
+ // for the time when returning from suspended state
+ if (RGB_DISABLE_TIMEOUT <= inactivity_millis + 15) {
+ rgb_matrix_config.hsv.v = 0;
+ state = SUSPENDED;
+ }
+#endif
+
+ switch(state) {
+#if defined(RGB_IDLE_TIMEOUT)
+ case IDLE_FADE_OUT:
+ if (calc_offset) {
+ time_offset = calc_fade_out_offset(time);
+
+ // resetting flag for subsequent calls
+ calc_offset = false;
+ }
+ if (idle_fade_out(time + time_offset)) {
+ update_value(&state, IDLE, &calc_offset);
+ }
+ break;
+ case IDLE:
+#if defined(RGB_IDLE_BREATHE)
+ if (calc_offset) {
+ // no need to calculate time_offset since we are aligned already due to IDLE_FADE_OUT
+ // resetting flag for subsequent calls
+ calc_offset = false;
+ }
+ idle_breathe(time + time_offset);
+#endif
+ break;
+#endif
+#if defined(RGB_DISABLE_WITH_FADE_OUT)
+ case FADE_OUT:
+ if (calc_offset) {
+ time_offset = calc_fade_out_offset(time);
+
+ // resetting flag for subsequent calls
+ calc_offset = false;
+ }
+ if (fade_out(time + time_offset)) {
+ update_value(&state, SUSPENDED, &calc_offset);
+ }
+ break;
+#endif
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+ case FADE_IN:
+ {
+ // since we want to be active, fade in should be faster than e.g. fading out
+ const uint8_t fade_in_time = rgb_time_2_scale_w_factor(4);
+ if (calc_offset) {
+ time_offset = calc_fade_in_offset(fade_in_time);
+
+ // resetting flag for subsequent calls
+ calc_offset = false;
+ }
+ if (fade_in(fade_in_time + time_offset)) {
+ update_value(&state, REGULAR, &calc_offset);
+ }
+ }
+ break;
+#endif
+ default:
+ break;
+ }
+}
+
+#if defined(RGB_FADE_IN) || defined(RGB_IDLE_TIMEOUT)
+bool process_record_user_rgb(const uint16_t keycode, const keyrecord_t *record) {
+ // if we are in a non regular state we might have faded out (eventually partially)
+ // so we restore brightness (to max as we don't keep track of manually changed brightness)
+ // if (REGULAR != state && FADE_IN != state) {
+ if (FADE_IN != state && REGULAR != state) {
+ update_value(&state, FADE_IN, &calc_offset);
+ }
+
+ return true; // Process all other keycodes normally
+}
+
+void suspend_wakeup_init_user(void) {
+ if (FADE_IN != state) {
+ // setting brightness to black as starting point for fade in
+ rgb_matrix_config.hsv.v = 0;
+
+ update_value(&state, FADE_IN, &calc_offset);
+ }
+}
+#endif // defined(RGB_FADE_IN)
+
+#endif // defined(RGB_FADE_IN) || defined(RGB_DISABLE_WITH_FADE_OUT)
diff --git a/users/vitoni/vitoni.h b/users/vitoni/vitoni.h
new file mode 100644
index 0000000000..1f26037135
--- /dev/null
+++ b/users/vitoni/vitoni.h
@@ -0,0 +1,30 @@
+// Copyright 2021 Victor Toni (@vitoni)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <quantum/action.h>
+
+#include "rgb_matrix_effects.h"
+
+/**
+ * @brief Executes periodic tasks, eg. fading or checking for upcoming supend.
+ * @details Function declaration as weak as the implementation might "disappear" depending on the RGB settings used.
+ * The weak declaration avoids having to change `keymap.c`.
+ */
+__attribute__((weak))
+void matrix_scan_user_rgb(void);
+
+/**
+ * @brief Executes tasks based on user activity, eg. fading in.
+ * @details Function declaration as weak as the implementation might "disappear" depending on the RGB settings used.
+ * The weak declaration avoids having to change `keymap.c`.
+ * @param[in] keycode
+ * @param[in] record
+ * @return `false` if further processing should be stopped, `true` otherwise
+ */
+__attribute__((weak))
+bool process_record_user_rgb(const uint16_t keycode, const keyrecord_t *record);
diff --git a/users/wanleg/rules.mk b/users/wanleg/rules.mk
index 410803512d..de4decf78a 100644
--- a/users/wanleg/rules.mk
+++ b/users/wanleg/rules.mk
@@ -22,7 +22,7 @@ ifeq ($(strip $(BT)), yes)
OPT_DEFS += -DBLUEFRUIT
#Adafruit Bluefruit controller settings
BLUETOOTH_ENABLE = yes
- BLUETOOTH_DRIVER = AdafruitBLE
+ BLUETOOTH_DRIVER = BluefruitLE
F_CPU = 8000000
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
diff --git a/util/docker_cmd.sh b/util/docker_cmd.sh
new file mode 100755
index 0000000000..2ea113d24a
--- /dev/null
+++ b/util/docker_cmd.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# NOTE: This script uses tabs for indentation
+
+errcho() {
+ echo "$@" >&2
+}
+
+USAGE="Usage: $0 <command>"
+
+# Check preconditions
+for arg; do
+ if [ "$arg" = "--help" ]; then
+ echo "$USAGE"
+ exit 0
+ fi
+done
+
+# Allow $RUNTIME to be overriden by the user as an environment variable
+# Else check if either docker or podman exit and set them as runtime
+# if none are found error out
+if [ -z "$RUNTIME" ]; then
+ if command -v docker >/dev/null 2>&1; then
+ RUNTIME="docker"
+ elif command -v podman >/dev/null 2>&1; then
+ RUNTIME="podman"
+ else
+ errcho "Error: no compatible container runtime found."
+ errcho "Either podman or docker are required."
+ errcho "See https://podman.io/getting-started/installation"
+ errcho "or https://docs.docker.com/install/#supported-platforms"
+ errcho "for installation instructions."
+ exit 2
+ fi
+fi
+
+
+# IF we are using docker on non Linux and docker-machine isn't working print an error
+# ELSE set usb_args
+if [ ! "$(uname)" = "Linux" ] && [ "$RUNTIME" = "docker" ] && ! docker-machine active >/dev/null 2>&1; then
+ errcho "Error: target requires docker-machine to work on your platform"
+ errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos"
+ exit 3
+else
+ usb_args="--privileged -v /dev:/dev"
+fi
+dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows
+
+if [ "$RUNTIME" = "docker" ]; then
+ uid_arg="--user $(id -u):$(id -g)"
+fi
+
+# Run container and build firmware
+"$RUNTIME" run --rm -it \
+ $usb_args \
+ $uid_arg \
+ -w /qmk_firmware \
+ -v "$dir":/qmk_firmware \
+ qmkfm/qmk_cli \
+ "$@"
diff --git a/util/new_keyboard.sh b/util/new_keyboard.sh
deleted file mode 100755
index 62e8cb9e13..0000000000
--- a/util/new_keyboard.sh
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env bash
-
-# This script generates a new keyboard directory under keyboards/,
-# and copies the template files from data/templates/ into it.
-
-# Print an error message with the word "ERROR" in red.
-echo_error() {
- echo -e "[\033[0;91mERROR\033[m]: $1"
-}
-
-# Print a message in bold.
-echo_bold() {
- echo -e "\033[1m$1\033[m"
-}
-
-# Prompt the user for information, showing the default value in brackets.
-prompt() {
- local message="$1"
- local default="$2"
-
- [ -n "$default" ] && message+=" [$default]"
- message+=": "
-
- read -rp "$message" prompt_return
- [ -z "$prompt_return" ] && prompt_return="$default"
-}
-
-# Grab a username from Git config.
-set_git_username() {
- git_username="$(git config --get user.name)"
-}
-
-# Copy the template files to the new keyboard directory.
-copy_templates() {
- mkdir -p "$keyboard_dir"
-
- echo -n "Copying base template files..."
- cp -r "data/templates/base/." "${keyboard_dir}"
- echo " done"
-
- echo -n "Copying $keyboard_type template files..."
- cp -r "data/templates/${keyboard_type}/." "${keyboard_dir}"
- echo " done"
-
- echo -n "Renaming keyboard files..."
- mv "${keyboard_dir}/keyboard.c" "${keyboard_dir}/${keyboard_base_name}.c"
- mv "${keyboard_dir}/keyboard.h" "${keyboard_dir}/${keyboard_base_name}.h"
- echo " done"
-}
-
-# Set the inplace editing parameter for sed.
-# macOS/BSD sed expects a file extension immediately following -i.
-set_sed_i() {
- sed_i=(-i)
-
- case $(uname -a) in
- *Darwin*) sed_i=(-i "")
- esac
-}
-
-# Replace a token with a value in the given list of files.
-replace_placeholders() {
- local replace_token="$1"
- local replace_value="$2"
- shift 2
- local replace_filenames=("$@")
-
- echo -n "Replacing $replace_token with $replace_value..."
- for replace_filename in "${replace_filenames[@]}"; do
- sed "${sed_i[@]}" -e "s/${replace_token}/${replace_value}/g" "$replace_filename"
- done
- echo " done"
-}
-
-# Replace %YEAR% with the current year.
-replace_year_placeholders() {
- local replace_year_filenames=(
- "${keyboard_dir}/config.h"
- "${keyboard_dir}/${keyboard_base_name}.c"
- "${keyboard_dir}/${keyboard_base_name}.h"
- "${keyboard_dir}/keymaps/default/keymap.c"
- )
- replace_placeholders "%YEAR%" "$(date +%Y)" "${replace_year_filenames[@]}"
-}
-
-# Replace %KEYBOARD% with the keyboard name.
-replace_keyboard_placeholders() {
- local replace_keyboard_filenames=(
- "${keyboard_dir}/config.h"
- "${keyboard_dir}/info.json"
- "${keyboard_dir}/readme.md"
- "${keyboard_dir}/${keyboard_base_name}.c"
- "${keyboard_dir}/keymaps/default/readme.md"
- )
- replace_placeholders "%KEYBOARD%" "$keyboard_base_name" "${replace_keyboard_filenames[@]}"
-}
-
-# Replace %YOUR_NAME% with the username.
-replace_name_placeholders() {
- local replace_name_filenames=(
- "${keyboard_dir}/config.h"
- "${keyboard_dir}/info.json"
- "${keyboard_dir}/readme.md"
- "${keyboard_dir}/${keyboard_base_name}.c"
- "${keyboard_dir}/${keyboard_base_name}.h"
- "${keyboard_dir}/keymaps/default/keymap.c"
- )
- replace_placeholders "%YOUR_NAME%" "$username" "${replace_name_filenames[@]}"
-}
-
-# Check if an array contains an element.
-array_contains() {
- local e match="$1"
- shift
- for e; do
- [[ "$e" == "$match" ]] && return 0;
- done
-
- return 1
-}
-
-# If we've been started from util/, we want to be in qmk_firmware/
-[[ "$PWD" == *util ]] && cd ..
-
-# The root qmk_firmware/ directory should have a subdirectory called quantum/
-if [ ! -d "quantum" ]; then
- echo_error "Could not detect the QMK firmware directory!"
- echo_error "Are you sure you're in the right place?"
- exit 1
-fi
-
-echo_bold "########################################"
-echo_bold "# NOTICE #"
-echo_bold "# This script has been deprecated. #"
-echo_bold "# Please use qmk new-keyboard instead. #"
-echo_bold "########################################"
-echo
-echo_bold "Generating a new QMK keyboard directory"
-echo
-
-# Keyboard name is required, so keep prompting until we get one
-while [ -z "$keyboard_name" ]; do
- prompt "Keyboard Name" ""
- keyboard_name=$prompt_return
- keyboard_base_name=$(basename $keyboard_name)
-done
-
-keyboard_dir="keyboards/$keyboard_name"
-
-if [ -d "$keyboard_dir" ]; then
- echo_error "Keyboard $keyboard_name already exists!"
- exit 1
-fi
-
-KEYBOARD_TYPES=("avr" "ps2avrgb")
-
-prompt "Keyboard Type" "avr"
-keyboard_type=$prompt_return
-
-if ! array_contains "$keyboard_type" "${KEYBOARD_TYPES[@]}"; then
- echo_error "Keyboard type must be one of: ${KEYBOARD_TYPES[*]}"
- exit 1
-fi
-
-set_git_username
-prompt "Your Name" "$git_username"
-username=$prompt_return
-
-echo
-
-copy_templates
-set_sed_i
-replace_year_placeholders
-replace_keyboard_placeholders
-[ -n "$username" ] && replace_name_placeholders
-
-echo
-echo_bold "Created a new keyboard called $keyboard_name."
-echo
-echo_bold "To start working on things, cd into keyboards/$keyboard_name,"
-echo_bold "or open the directory in your favourite text editor."
diff --git a/util/new_keymap.sh b/util/new_keymap.sh
deleted file mode 100755
index c483314fdb..0000000000
--- a/util/new_keymap.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-# Script to make a new keymap for a keyboard of your choosing
-# This script automates the copying of the default keymap into
-# your own keymap
-
-KB_PATH=$(echo "$1" | tr 'A-Z' 'a-z')
-USERNAME=$(echo "$2" | tr 'A-Z' 'a-z')
-
-if [ -z "$KB_PATH" ]; then
- printf "Usage: %s <keyboard_path> <username>\n" "$0"
- printf "Example: %s 1upkeyboards/1up60hse yourname\n" "$0"
- exit 1
-fi
-
-if [ -z "$USERNAME" ]; then
- printf "Usage: %s <keyboard_path> <username>\n" "$0"
- printf "Example: %s 1upkeyboards/1up60hse yourname\n" "$0"
- exit 1
-fi
-
-cd "$(dirname "$0")/.."
-
-if [ ! -d "keyboards/$KB_PATH" ]; then
- printf "Error! keyboards/%s does not exist!\n" "$KB_PATH"
- exit 1
-fi
-
-if [ -d "keyboards/$KB_PATH/keymaps/$USERNAME" ]; then
- printf "Error! keyboards/%s/keymaps/%s already exists!\n" "$KB_PATH" "$USERNAME"
- exit 1
-fi
-
-# Recursively copy the chosen keyboard's default keymap
-cp -r keyboards/"$KB_PATH"/keymaps/default keyboards/"$KB_PATH"/keymaps/"$USERNAME"
-
-printf "%s keymap directory created in: qmk_firmware/keyboards/%s/keymaps/\n\n" "$USERNAME" "$KB_PATH"
-
-printf "Compile a firmware file with your new keymap by typing: \n"
-printf " make %s:%s\n" "$KB_PATH" "$USERNAME"
-printf "from the qmk_firmware directory\n"
diff --git a/util/size_regression.sh b/util/size_regression.sh
index 988d1d9b5b..d474d8d0d5 100755
--- a/util/size_regression.sh
+++ b/util/size_regression.sh
@@ -11,6 +11,8 @@ dest_ref="develop"
ignore_ref="master"
unset skip_zero
+export SIZE_REGRESSION_EXECUTING=1
+
function usage() {
echo "Usage: $(basename "$0") [-h] [-j <jobs>] [-s <source>] [-d <dest>] [-n] planck/rev6:default"
echo " -h : Shows this usage page."
@@ -23,9 +25,24 @@ function usage() {
}
if [[ ${#} -eq 0 ]]; then
- usage
+ usage
+ exit 0
fi
+unset cleanup_completed
+_internal_cleanup() {
+ if [[ -z "${cleanup_completed:-}" ]] ; then
+ echo
+ echo
+ echo 'Your git repository is in an indeterminate state!' >&2
+ echo 'Make sure you swap to your intended branch.' >&2
+ echo
+ unset SIZE_REGRESSION_EXECUTING
+ fi
+ cleanup_completed=1
+}
+trap _internal_cleanup EXIT HUP INT
+
while getopts "hj:s:d:i:n" opt "$@" ; do
case "$opt" in
h) usage; exit 0;;
@@ -49,7 +66,8 @@ function build_executor() {
revision=$(echo $line | cut -d' ' -f1)
make distclean >/dev/null 2>&1
- git checkout $revision >/dev/null 2>&1 || { echo "Failed to check out revision ${revision}" >&2 ; exit 1 ; }
+
+ git checkout -f $revision >/dev/null 2>&1 || { echo "Failed to check out revision ${revision}" >&2 ; exit 1 ; }
make -j${job_count} $keyboard_target >/dev/null 2>&1 || true
file_size=$(arm-none-eabi-size .build/*.elf 2>/dev/null | awk '/elf/ {print $1}' 2>/dev/null || true)
diff --git a/util/update_chibios_mirror.sh b/util/update_chibios_mirror.sh
index 0bf648ebfd..e6666c55c9 100755
--- a/util/update_chibios_mirror.sh
+++ b/util/update_chibios_mirror.sh
@@ -4,13 +4,13 @@
# Configuration
# The ChibiOS branches to mirror
-chibios_branches="trunk stable_20.3.x stable_21.6.x"
+chibios_branches="trunk stable_20.3.x stable_21.11.x"
# The ChibiOS tags to mirror
-chibios_tags="ver20.3.1 ver20.3.2 ver20.3.3 ver20.3.4 ver21.6.0"
+chibios_tags="ver20.3.1 ver20.3.2 ver20.3.3 ver20.3.4 ver21.11.1"
# The ChibiOS-Contrib branches to mirror
-contrib_branches="chibios-20.3.x chibios-21.6.x"
+contrib_branches="chibios-20.3.x chibios-21.11.x"
################################
# Actions
@@ -88,5 +88,5 @@ echo "Updating ChibiOS-Contrib branches..."
for branch in $contrib_branches ; do
echo "Creating branch 'mirror/$branch' from 'upstream/$branch'..."
git branch -f mirror/$branch upstream/$branch \
- && git push qmk mirror/$branch
+ && git push qmk mirror/$branch || true # Allow for nonexistent ChibiOS-Contrib branches -- they'll turn up eventually.
done