From e4f4ceaf3f2e3d25fb282273a81f9b58790fc427 Mon Sep 17 00:00:00 2001 From: lokher Date: Wed, 26 Apr 2023 16:32:15 +0800 Subject: merge upstream 713427c --- .github/ISSUE_TEMPLATE/feature_request.yml | 5 +- .github/ISSUE_TEMPLATE/other_issues.yml | 5 +- .github/labeler.yml | 1 + .github/workflows/api.yml | 3 + .github/workflows/auto_approve.yml | 2 + .github/workflows/auto_tag.yml | 12 +- .github/workflows/ci_builds.yml | 49 + .github/workflows/cli.yml | 7 + .github/workflows/develop_update.yml | 3 + .github/workflows/docs.yml | 3 + .github/workflows/feature_branch_update.yml | 3 + .github/workflows/format.yml | 14 +- .github/workflows/format_push.yml | 6 + .github/workflows/labeler.yml | 4 + .github/workflows/lint.yml | 26 +- .github/workflows/regen.yml | 36 + .github/workflows/regen_push.yml | 46 + .github/workflows/stale.yml | 11 +- .github/workflows/unit_test.yml | 3 + .gitmodules | 4 + Makefile | 67 +- builddefs/build_full_test.mk | 2 + builddefs/build_keyboard.mk | 53 +- builddefs/build_test.mk | 1 + builddefs/common_features.mk | 16 + builddefs/common_rules.mk | 4 +- builddefs/converters.mk | 24 +- builddefs/generic_features.mk | 1 + builddefs/mcu_selection.mk | 911 ----------------- builddefs/message.mk | 7 +- builddefs/show_options.mk | 3 +- builddefs/testlist.mk | 1 + .../keycodes/extras/keycodes_belgian_0.0.1.hjson | 375 +++++++ .../keycodes/extras/keycodes_bepo_0.0.1.hjson | 632 ++++++++++++ .../extras/keycodes_brazilian_abnt2_0.0.1.hjson | 379 +++++++ .../keycodes_canadian_multilingual_0.0.1.hjson | 641 ++++++++++++ .../keycodes/extras/keycodes_colemak_0.0.1.hjson | 302 ++++++ .../keycodes/extras/keycodes_croatian_0.0.1.hjson | 403 ++++++++ .../keycodes/extras/keycodes_czech_0.0.1.hjson | 435 ++++++++ .../keycodes/extras/keycodes_danish_0.0.1.hjson | 359 +++++++ .../keycodes/extras/keycodes_dvorak_0.0.1.hjson | 302 ++++++ .../keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson | 317 ++++++ .../extras/keycodes_dvorak_programmer_0.0.1.hjson | 302 ++++++ .../keycodes/extras/keycodes_estonian_0.0.1.hjson | 367 +++++++ .../keycodes/extras/keycodes_finnish_0.0.1.hjson | 359 +++++++ .../keycodes/extras/keycodes_french_0.0.1.hjson | 367 +++++++ .../extras/keycodes_french_afnor_0.0.1.hjson | 623 ++++++++++++ .../extras/keycodes_french_mac_iso_0.0.1.hjson | 676 +++++++++++++ .../keycodes/extras/keycodes_german_0.0.1.hjson | 359 +++++++ .../extras/keycodes_german_mac_iso_0.0.1.hjson | 656 ++++++++++++ .../keycodes/extras/keycodes_greek_0.0.1.hjson | 391 ++++++++ .../keycodes/extras/keycodes_hebrew_0.0.1.hjson | 347 +++++++ .../keycodes/extras/keycodes_hungarian_0.0.1.hjson | 435 ++++++++ .../keycodes/extras/keycodes_icelandic_0.0.1.hjson | 355 +++++++ .../keycodes/extras/keycodes_irish_0.0.1.hjson | 355 +++++++ .../keycodes/extras/keycodes_italian_0.0.1.hjson | 364 +++++++ .../extras/keycodes_italian_mac_ansi_0.0.1.hjson | 684 +++++++++++++ .../extras/keycodes_italian_mac_iso_0.0.1.hjson | 688 +++++++++++++ .../keycodes/extras/keycodes_japanese_0.0.1.hjson | 330 +++++++ .../keycodes/extras/keycodes_korean_0.0.1.hjson | 310 ++++++ .../keycodes/extras/keycodes_latvian_0.0.1.hjson | 440 +++++++++ .../extras/keycodes_lithuanian_azerty_0.0.1.hjson | 375 +++++++ .../extras/keycodes_lithuanian_qwerty_0.0.1.hjson | 368 +++++++ .../keycodes/extras/keycodes_neo2_0.0.1.hjson | 217 ++++ .../keycodes/extras/keycodes_nordic_0.0.1.hjson | 116 +++ .../keycodes/extras/keycodes_norman_0.0.1.hjson | 302 ++++++ .../keycodes/extras/keycodes_norwegian_0.0.1.hjson | 355 +++++++ .../keycodes/extras/keycodes_plover_0.0.1.hjson | 86 ++ .../extras/keycodes_plover_dvorak_0.0.1.hjson | 73 ++ .../keycodes/extras/keycodes_polish_0.0.1.hjson | 355 +++++++ .../extras/keycodes_portuguese_0.0.1.hjson | 355 +++++++ .../extras/keycodes_portuguese_mac_iso_0.0.1.hjson | 620 ++++++++++++ .../keycodes/extras/keycodes_romanian_0.0.1.hjson | 444 +++++++++ .../keycodes/extras/keycodes_russian_0.0.1.hjson | 291 ++++++ .../keycodes/extras/keycodes_serbian_0.0.1.hjson | 307 ++++++ .../extras/keycodes_serbian_latin_0.0.1.hjson | 407 ++++++++ .../keycodes/extras/keycodes_slovak_0.0.1.hjson | 443 +++++++++ .../keycodes/extras/keycodes_slovenian_0.0.1.hjson | 403 ++++++++ .../keycodes/extras/keycodes_spanish_0.0.1.hjson | 359 +++++++ .../extras/keycodes_spanish_dvorak_0.0.1.hjson | 359 +++++++ .../keycodes/extras/keycodes_swedish_0.0.1.hjson | 359 +++++++ .../extras/keycodes_swedish_mac_ansi_0.0.1.hjson | 642 ++++++++++++ .../extras/keycodes_swedish_mac_iso_0.0.1.hjson | 640 ++++++++++++ .../keycodes_swedish_pro_mac_ansi_0.0.1.hjson | 642 ++++++++++++ .../keycodes_swedish_pro_mac_iso_0.0.1.hjson | 640 ++++++++++++ .../keycodes/extras/keycodes_swiss_de_0.0.1.hjson | 379 +++++++ .../keycodes/extras/keycodes_swiss_fr_0.0.1.hjson | 379 +++++++ .../keycodes/extras/keycodes_turkish_f_0.0.1.hjson | 480 +++++++++ .../keycodes/extras/keycodes_turkish_q_0.0.1.hjson | 375 +++++++ .../keycodes/extras/keycodes_uk_0.0.1.hjson | 353 +++++++ .../keycodes/extras/keycodes_ukrainian_0.0.1.hjson | 295 ++++++ .../keycodes/extras/keycodes_us_0.0.1.hjson | 155 +++ .../extras/keycodes_us_extended_0.0.1.hjson | 588 +++++++++++ .../extras/keycodes_us_international_0.0.1.hjson | 508 ++++++++++ .../keycodes_us_international_linux_0.0.1.hjson | 576 +++++++++++ .../keycodes/extras/keycodes_workman_0.0.1.hjson | 302 ++++++ .../extras/keycodes_workman_zxcvm_0.0.1.hjson | 302 ++++++ data/constants/keycodes/keycodes_0.0.2.hjson | 19 + data/constants/keycodes/keycodes_0.0.2_basic.hjson | 20 + data/constants/keycodes/keycodes_0.0.2_kb.hjson | 132 +++ data/constants/keycodes/keycodes_0.0.2_magic.hjson | 251 +++++ data/constants/keycodes/keycodes_0.0.2_midi.hjson | 1044 ++++++++++++++++++++ .../keycodes/keycodes_0.0.2_quantum.hjson | 18 + .../keycodes/keycodes_0.0.2_sequencer.hjson | 69 ++ .../keycodes/keycodes_0.0.2_swap_hands.hjson | 53 + data/constants/keycodes/keycodes_0.0.2_user.hjson | 132 +++ data/mappings/defaults.hjson | 34 +- data/mappings/info_config.hjson | 16 +- data/mappings/info_rules.hjson | 4 + data/mappings/keyboard_aliases.hjson | 45 + data/schemas/keyboard.jsonschema | 47 +- data/schemas/keymap.jsonschema | 17 +- data/templates/config-overrides/chibios/board.h | 20 + data/templates/config-overrides/chibios/chconf.h | 20 + data/templates/config-overrides/chibios/halconf.h | 20 + data/templates/config-overrides/chibios/mcuconf.h | 21 + data/templates/config-overrides/common/lv_conf.h | 10 + docs/ChangeLog/20190830.md | 8 +- docs/ChangeLog/20230226.md | 367 +++++++ docs/_summary.md | 5 +- docs/adc_driver.md | 17 + docs/breaking_changes.md | 56 +- docs/breaking_changes_history.md | 1 + docs/chibios_upgrade_instructions.md | 19 +- docs/config_options.md | 32 +- docs/configurator_default_keymaps.md | 10 +- docs/contributing.md | 6 +- docs/custom_matrix.md | 4 +- docs/documentation_templates.md | 12 + docs/feature_auto_shift.md | 11 +- docs/feature_autocorrect.md | 18 +- docs/feature_combo.md | 103 +- docs/feature_converters.md | 30 +- docs/feature_encoders.md | 68 +- docs/feature_joystick.md | 6 +- docs/feature_layers.md | 12 +- docs/feature_leader_key.md | 338 +++++-- docs/feature_led_indicators.md | 2 +- docs/feature_led_matrix.md | 2 +- docs/feature_midi.md | 12 +- docs/feature_os_detection.md | 77 ++ docs/feature_pointing_device.md | 21 +- docs/feature_rgb_matrix.md | 6 +- docs/feature_rgblight.md | 2 +- docs/feature_sequencer.md | 28 +- docs/feature_split_keyboard.md | 56 +- docs/feature_swap_hands.md | 30 +- docs/feature_tap_dance.md | 66 +- docs/feature_tri_layer.md | 48 + docs/feature_unicode.md | 12 +- docs/flashing.md | 43 +- docs/gpio_control.md | 2 +- docs/hardware_keyboard_guidelines.md | 4 +- docs/ja/api_docs.md | 2 +- docs/ja/config_options.md | 2 - docs/ja/custom_matrix.md | 4 +- docs/ja/faq_keymap.md | 2 +- docs/ja/feature_grave_esc.md | 4 +- docs/ja/feature_led_indicators.md | 2 +- docs/ja/feature_tap_dance.md | 2 - docs/ja/hardware_keyboard_guidelines.md | 2 +- docs/ja/keycodes.md | 4 +- docs/ja/keycodes_basic.md | 4 +- docs/ja/keymap.md | 10 +- docs/ja/other_vscode.md | 2 - docs/ja/reference_configurator_support.md | 2 +- docs/ja/tap_hold.md | 19 - docs/ja/understanding_qmk.md | 4 +- docs/keycodes.md | 96 +- docs/keycodes_basic.md | 62 +- docs/keycodes_magic.md | 73 +- docs/keymap.md | 40 +- docs/newbs_building_firmware.md | 2 +- docs/newbs_building_firmware_workflow.md | 3 + docs/newbs_getting_started.md | 6 + docs/newbs_git_resynchronize_a_branch.md | 8 +- docs/other_vscode.md | 2 +- docs/platformdev_blackpill_f4x1.md | 35 +- docs/platformdev_rp2040.md | 23 +- docs/porting_your_keyboard_to_qmk.md | 7 +- docs/pr_checklist.md | 72 +- docs/quantum_painter.md | 59 +- docs/quantum_painter_lvgl.md | 55 ++ docs/reference_info_json.md | 36 +- docs/serial_driver.md | 2 +- docs/squeezing_avr.md | 2 + docs/support_deprecation_policy.md | 44 + docs/tap_hold.md | 124 ++- docs/understanding_qmk.md | 2 +- docs/zh-cn/api_docs.md | 2 +- docs/zh-cn/configurator_default_keymaps.md | 4 +- docs/zh-cn/faq_keymap.md | 2 +- docs/zh-cn/feature_grave_esc.md | 4 +- docs/zh-cn/keymap.md | 10 +- docs/zh-cn/other_vscode.md | 2 - docs/zh-cn/reference_configurator_support.md | 2 +- drivers/lcd/hd44780.c | 2 +- drivers/painter/gc9a01/qp_gc9a01.c | 1 + drivers/painter/generic/qp_rgb565_surface.c | 7 + drivers/painter/ili9xxx/qp_ili9163.c | 1 + drivers/painter/ili9xxx/qp_ili9341.c | 1 + drivers/painter/ili9xxx/qp_ili9488.c | 1 + drivers/painter/ssd1351/qp_ssd1351.c | 1 + drivers/painter/st77xx/qp_st7735.c | 1 + drivers/painter/st77xx/qp_st7789.c | 1 + drivers/painter/tft_panel/qp_tft_panel.c | 5 + drivers/painter/tft_panel/qp_tft_panel.h | 2 + drivers/sensors/adns5050.h | 1 + drivers/sensors/adns9800.c | 2 +- drivers/sensors/cirque_pinnacle.c | 2 +- drivers/sensors/pmw3360.c | 2 - drivers/sensors/pmw3389.c | 2 - drivers/sensors/pmw33xx_common.c | 8 +- drivers/sensors/pmw33xx_common.h | 16 + drivers/usb2422.c | 8 +- keyboards/keychron/bluetooth/bat_level_animation.c | 0 keyboards/keychron/bluetooth/bat_level_animation.h | 0 keyboards/keychron/bluetooth/battery.c | 0 keyboards/keychron/bluetooth/battery.h | 0 keyboards/keychron/bluetooth/bluetooth.c | 0 keyboards/keychron/bluetooth/bluetooth.h | 0 keyboards/keychron/bluetooth/bluetooth.mk | 0 keyboards/keychron/bluetooth/bluetooth_config.h | 0 .../keychron/bluetooth/bluetooth_event_type.h | 0 keyboards/keychron/bluetooth/bluetooth_main.c | 0 keyboards/keychron/bluetooth/ckbt51.c | 0 keyboards/keychron/bluetooth/ckbt51.h | 0 keyboards/keychron/bluetooth/factory_test.c | 0 keyboards/keychron/bluetooth/factory_test.h | 0 keyboards/keychron/bluetooth/indicator.c | 0 keyboards/keychron/bluetooth/indicator.h | 0 keyboards/keychron/bluetooth/lpm.c | 0 keyboards/keychron/bluetooth/lpm.h | 0 keyboards/keychron/bluetooth/lpm_stm32l432.c | 0 keyboards/keychron/bluetooth/lpm_stm32l432.h | 0 keyboards/keychron/bluetooth/report_buffer.c | 0 keyboards/keychron/bluetooth/report_buffer.h | 0 keyboards/keychron/bluetooth/rtc_timer.c | 0 keyboards/keychron/bluetooth/rtc_timer.h | 0 keyboards/keychron/bluetooth/transport.c | 0 keyboards/keychron/bluetooth/transport.h | 0 .../k10_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k10_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k10_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k10_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k10_pro/halconf.h | 2 + keyboards/keychron/k10_pro/iso/rgb/config.h | 0 keyboards/keychron/k10_pro/iso/rgb/info.json | 0 .../k10_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k10_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k10_pro/iso/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k10_pro/iso/rgb/rgb.c | 0 keyboards/keychron/k10_pro/iso/rgb/rules.mk | 0 keyboards/keychron/k10_pro/iso/white/config.h | 0 keyboards/keychron/k10_pro/iso/white/info.json | 0 .../k10_pro/iso/white/keymaps/default/keymap.c | 12 +- .../k10_pro/iso/white/keymaps/via/keymap.c | 12 +- .../k10_pro/iso/white/keymaps/via/rules.mk | 0 keyboards/keychron/k10_pro/iso/white/rules.mk | 0 keyboards/keychron/k10_pro/iso/white/white.c | 0 keyboards/keychron/k10_pro/k10_pro.c | 8 - keyboards/keychron/k10_pro/k10_pro.h | 14 +- .../k10_pro/via_json/k10_pro_ansi_rgb.json | 2 - .../k10_pro/via_json/k10_pro_ansi_white.json | 2 - keyboards/keychron/k13_pro/ansi/rgb/config.h | 0 keyboards/keychron/k13_pro/ansi/rgb/info.json | 0 .../k13_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k13_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k13_pro/ansi/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k13_pro/ansi/rgb/rgb.c | 0 keyboards/keychron/k13_pro/ansi/rgb/rules.mk | 0 keyboards/keychron/k13_pro/ansi/white/config.h | 0 keyboards/keychron/k13_pro/ansi/white/info.json | 0 .../k13_pro/ansi/white/keymaps/default/keymap.c | 2 +- .../k13_pro/ansi/white/keymaps/via/keymap.c | 2 +- .../k13_pro/ansi/white/keymaps/via/rules.mk | 0 keyboards/keychron/k13_pro/ansi/white/rules.mk | 0 keyboards/keychron/k13_pro/ansi/white/white.c | 0 keyboards/keychron/k13_pro/config.h | 0 keyboards/keychron/k13_pro/halconf.h | 2 + keyboards/keychron/k13_pro/k13_pro.c | 8 - keyboards/keychron/k13_pro/k13_pro.h | 17 +- keyboards/keychron/k13_pro/matrix.c | 0 keyboards/keychron/k13_pro/mcuconf.h | 0 keyboards/keychron/k13_pro/readme.md | 0 keyboards/keychron/k13_pro/rules.mk | 0 keyboards/keychron/k1_pro/ansi/rgb/config.h | 0 keyboards/keychron/k1_pro/ansi/rgb/info.json | 0 .../k1_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k1_pro/ansi/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k1_pro/ansi/rgb/rgb.c | 0 keyboards/keychron/k1_pro/ansi/rgb/rules.mk | 0 keyboards/keychron/k1_pro/ansi/white/config.h | 0 keyboards/keychron/k1_pro/ansi/white/info.json | 0 .../k1_pro/ansi/white/keymaps/default/keymap.c | 2 +- .../k1_pro/ansi/white/keymaps/via/keymap.c | 2 +- .../k1_pro/ansi/white/keymaps/via/rules.mk | 0 keyboards/keychron/k1_pro/ansi/white/rules.mk | 0 keyboards/keychron/k1_pro/ansi/white/white.c | 0 keyboards/keychron/k1_pro/config.h | 0 keyboards/keychron/k1_pro/halconf.h | 2 + keyboards/keychron/k1_pro/k1_pro.c | 8 - keyboards/keychron/k1_pro/k1_pro.h | 17 +- keyboards/keychron/k1_pro/matrix.c | 0 keyboards/keychron/k1_pro/mcuconf.h | 0 keyboards/keychron/k1_pro/readme.md | 0 keyboards/keychron/k1_pro/rules.mk | 0 .../keychron/k1_pro/via_json/k1_pro_us_rgb.json | 2 - .../keychron/k1_pro/via_json/k1_pro_us_white.json | 2 - .../k2_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k2_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k2_pro/ansi/white/keymaps/candysign/config.h | 0 .../k2_pro/ansi/white/keymaps/candysign/keymap.c | 12 +- .../k2_pro/ansi/white/keymaps/candysign/rules.mk | 0 .../k2_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k2_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k2_pro/halconf.h | 2 + .../k2_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k2_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../k2_pro/iso/white/keymaps/default/keymap.c | 12 +- .../keychron/k2_pro/iso/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k2_pro/jis/rgb/config.h | 0 keyboards/keychron/k2_pro/jis/rgb/info.json | 0 .../k2_pro/jis/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k2_pro/jis/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k2_pro/jis/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k2_pro/jis/rgb/rgb.c | 0 keyboards/keychron/k2_pro/jis/rgb/rules.mk | 0 keyboards/keychron/k2_pro/jis/white/config.h | 0 keyboards/keychron/k2_pro/jis/white/info.json | 0 .../k2_pro/jis/white/keymaps/default/keymap.c | 2 +- .../keychron/k2_pro/jis/white/keymaps/via/keymap.c | 2 +- .../keychron/k2_pro/jis/white/keymaps/via/rules.mk | 0 keyboards/keychron/k2_pro/jis/white/rules.mk | 0 keyboards/keychron/k2_pro/jis/white/white.c | 0 keyboards/keychron/k2_pro/k2_pro.c | 8 - keyboards/keychron/k2_pro/k2_pro.h | 13 +- .../keychron/k2_pro/via_json/k2_pro_ansi_rgb.json | 2 - .../k2_pro/via_json/k2_pro_ansi_white.json | 2 - .../keychron/k2_pro/via_json/k2_pro_iso_rgb.json | 2 - .../keychron/k2_pro/via_json/k2_pro_iso_white.json | 2 - .../k3_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k3_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k3_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k3_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k3_pro/halconf.h | 2 + .../k3_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k3_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../k3_pro/iso/white/keymaps/default/keymap.c | 12 +- .../keychron/k3_pro/iso/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k3_pro/jis/rgb/config.h | 0 keyboards/keychron/k3_pro/jis/rgb/info.json | 0 .../k3_pro/jis/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k3_pro/jis/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k3_pro/jis/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k3_pro/jis/rgb/rgb.c | 0 keyboards/keychron/k3_pro/jis/rgb/rules.mk | 0 keyboards/keychron/k3_pro/jis/white/config.h | 0 keyboards/keychron/k3_pro/jis/white/info.json | 0 .../k3_pro/jis/white/keymaps/default/keymap.c | 12 +- .../keychron/k3_pro/jis/white/keymaps/via/keymap.c | 12 +- .../keychron/k3_pro/jis/white/keymaps/via/rules.mk | 0 keyboards/keychron/k3_pro/jis/white/rules.mk | 0 keyboards/keychron/k3_pro/jis/white/white.c | 0 keyboards/keychron/k3_pro/k3_pro.c | 8 - keyboards/keychron/k3_pro/k3_pro.h | 13 +- .../keychron/k3_pro/via_json/k3_pro_ansi_rgb.json | 2 - .../k3_pro/via_json/k3_pro_ansi_white.json | 2 - .../keychron/k3_pro/via_json/k3_pro_iso_rgb .json | 2 - .../keychron/k3_pro/via_json/k3_pro_iso_white.json | 2 - .../keychron/k3_pro/via_json/k3_pro_jis_rgb .json | 2 - .../keychron/k3_pro/via_json/k3_pro_jis_white.json | 2 - .../k4_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k4_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k4_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k4_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k4_pro/halconf.h | 2 + keyboards/keychron/k4_pro/iso/rgb/config.h | 0 keyboards/keychron/k4_pro/iso/rgb/info.json | 0 .../k4_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k4_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k4_pro/iso/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k4_pro/iso/rgb/rgb.c | 0 keyboards/keychron/k4_pro/iso/rgb/rules.mk | 0 keyboards/keychron/k4_pro/iso/white/config.h | 0 keyboards/keychron/k4_pro/iso/white/info.json | 0 .../k4_pro/iso/white/keymaps/default/keymap.c | 12 +- .../keychron/k4_pro/iso/white/keymaps/via/keymap.c | 12 +- .../keychron/k4_pro/iso/white/keymaps/via/rules.mk | 0 keyboards/keychron/k4_pro/iso/white/rules.mk | 0 keyboards/keychron/k4_pro/iso/white/white.c | 0 keyboards/keychron/k4_pro/k4_pro.c | 8 - keyboards/keychron/k4_pro/k4_pro.h | 13 +- .../keychron/k4_pro/via_json/k4_pro_ansi_rgb.json | 2 - .../k4_pro/via_json/k4_pro_ansi_white.json | 2 - .../keychron/k4_pro/via_json/k4_pro_iso_rgb.json | 2 - .../keychron/k4_pro/via_json/k4_pro_iso_white.json | 2 - keyboards/keychron/k5_pro/ansi/rgb/config.h | 0 keyboards/keychron/k5_pro/ansi/rgb/info.json | 0 .../k5_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k5_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k5_pro/ansi/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k5_pro/ansi/rgb/rgb.c | 0 keyboards/keychron/k5_pro/ansi/rgb/rules.mk | 0 keyboards/keychron/k5_pro/ansi/white/config.h | 0 keyboards/keychron/k5_pro/ansi/white/info.json | 0 .../k5_pro/ansi/white/keymaps/default/keymap.c | 2 +- .../k5_pro/ansi/white/keymaps/via/keymap.c | 2 +- .../k5_pro/ansi/white/keymaps/via/rules.mk | 0 keyboards/keychron/k5_pro/ansi/white/rules.mk | 0 keyboards/keychron/k5_pro/ansi/white/white.c | 0 keyboards/keychron/k5_pro/config.h | 0 keyboards/keychron/k5_pro/halconf.h | 2 + keyboards/keychron/k5_pro/k5_pro.c | 8 - keyboards/keychron/k5_pro/k5_pro.h | 17 +- keyboards/keychron/k5_pro/matrix.c | 0 keyboards/keychron/k5_pro/mcuconf.h | 0 keyboards/keychron/k5_pro/readme.md | 0 keyboards/keychron/k5_pro/rules.mk | 0 .../k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json | 2 - .../k5_pro/via_json/k5_pro_ansi_white_v1.00.json | 2 - .../k6_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k6_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k6_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k6_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k6_pro/halconf.h | 2 + .../k6_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k6_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../k6_pro/iso/white/keymaps/default/keymap.c | 12 +- .../keychron/k6_pro/iso/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k6_pro/jis/rgb/config.h | 0 keyboards/keychron/k6_pro/jis/rgb/info.json | 0 .../k6_pro/jis/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k6_pro/jis/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k6_pro/jis/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k6_pro/jis/rgb/rgb.c | 0 keyboards/keychron/k6_pro/jis/rgb/rules.mk | 0 keyboards/keychron/k6_pro/k6_pro.c | 8 - keyboards/keychron/k6_pro/k6_pro.h | 13 +- .../keychron/k6_pro/via_json/k6_pro_ansi_rgb.json | 2 - .../k6_pro/via_json/k6_pro_ansi_white.json | 2 - .../keychron/k6_pro/via_json/k6_pro_iso_rgb.json | 2 - .../keychron/k6_pro/via_json/k6_pro_iso_white.json | 2 - .../keychron/k6_pro/via_json/k6_pro_jis_rgb.json | 2 - .../k7_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k7_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../k7_pro/ansi/white/keymaps/default/keymap.c | 12 +- .../k7_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k7_pro/halconf.h | 2 + keyboards/keychron/k7_pro/k7_pro.c | 8 - keyboards/keychron/k7_pro/k7_pro.h | 13 +- .../keychron/k7_pro/via_json/k7_pro_ansi_rgb.json | 2 - .../k7_pro/via_json/k7_pro_ansi_white.json | 2 - .../k8_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k8_pro/ansi/rgb/keymaps/via/keymap.c | 26 +- .../k8_pro/ansi/white/keymaps/default/keymap.c | 4 +- .../k8_pro/ansi/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k8_pro/halconf.h | 2 + .../k8_pro/iso/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k8_pro/iso/rgb/keymaps/via/keymap.c | 2 +- .../k8_pro/iso/white/keymaps/default/keymap.c | 4 +- .../keychron/k8_pro/iso/white/keymaps/via/keymap.c | 12 +- keyboards/keychron/k8_pro/k8_pro.c | 8 - keyboards/keychron/k8_pro/k8_pro.h | 13 +- .../keychron/k8_pro/via_json/k8_pro_ansi_rgb.json | 2 - .../k8_pro/via_json/k8_pro_ansi_white.json | 2 - .../keychron/k8_pro/via_json/k8_pro_iso_rgb.json | 2 - .../keychron/k8_pro/via_json/k8_pro_iso_white.json | 2 - .../keychron/k8_pro/via_json/k8_pro_jis_rgb.json | 2 - .../keychron/k8_pro/via_json/k8_pro_jis_white.json | 2 - keyboards/keychron/k9_pro/ansi/rgb/config.h | 0 keyboards/keychron/k9_pro/ansi/rgb/info.json | 0 .../k9_pro/ansi/rgb/keymaps/default/keymap.c | 2 +- .../keychron/k9_pro/ansi/rgb/keymaps/via/keymap.c | 2 +- .../keychron/k9_pro/ansi/rgb/keymaps/via/rules.mk | 0 keyboards/keychron/k9_pro/ansi/rgb/rgb.c | 0 keyboards/keychron/k9_pro/ansi/rgb/rules.mk | 0 keyboards/keychron/k9_pro/config.h | 0 keyboards/keychron/k9_pro/halconf.h | 2 + keyboards/keychron/k9_pro/k9_pro.c | 8 - keyboards/keychron/k9_pro/k9_pro.h | 15 +- keyboards/keychron/k9_pro/matrix.c | 0 keyboards/keychron/k9_pro/mcuconf.h | 0 keyboards/keychron/k9_pro/readme.md | 0 keyboards/keychron/k9_pro/rules.mk | 0 .../q1_pro/ansi_knob/keymaps/default/keymap.c | 2 +- .../keychron/q1_pro/ansi_knob/keymaps/via/keymap.c | 2 +- keyboards/keychron/q1_pro/halconf.h | 2 + .../q1_pro/iso_knob/keymaps/default/keymap.c | 2 +- .../keychron/q1_pro/iso_knob/keymaps/via/keymap.c | 2 +- keyboards/keychron/q1_pro/q1_pro.c | 8 - keyboards/keychron/q1_pro/q1_pro.h | 7 +- .../keychron/q2_pro/ansi_encoder/ansi_encoder.c | 0 keyboards/keychron/q2_pro/ansi_encoder/config.h | 0 keyboards/keychron/q2_pro/ansi_encoder/info.json | 0 .../q2_pro/ansi_encoder/keymaps/default/keymap.c | 2 +- .../q2_pro/ansi_encoder/keymaps/default/rules.mk | 0 .../q2_pro/ansi_encoder/keymaps/via/keymap.c | 2 +- .../q2_pro/ansi_encoder/keymaps/via/rules.mk | 0 keyboards/keychron/q2_pro/ansi_encoder/rules.mk | 0 keyboards/keychron/q2_pro/config.h | 0 keyboards/keychron/q2_pro/halconf.h | 2 + keyboards/keychron/q2_pro/matrix.c | 0 keyboards/keychron/q2_pro/mcuconf.h | 0 keyboards/keychron/q2_pro/q2_pro.c | 8 - keyboards/keychron/q2_pro/q2_pro.h | 14 +- keyboards/keychron/q2_pro/readme.md | 0 keyboards/keychron/q2_pro/rules.mk | 0 .../keychron/q3_pro/ansi_encoder/ansi_encoder.c | 0 keyboards/keychron/q3_pro/ansi_encoder/config.h | 0 keyboards/keychron/q3_pro/ansi_encoder/info.json | 0 .../q3_pro/ansi_encoder/keymaps/default/keymap.c | 2 +- .../q3_pro/ansi_encoder/keymaps/default/rules.mk | 0 .../q3_pro/ansi_encoder/keymaps/via/keymap.c | 18 +- .../q3_pro/ansi_encoder/keymaps/via/rules.mk | 0 keyboards/keychron/q3_pro/ansi_encoder/rules.mk | 0 keyboards/keychron/q3_pro/config.h | 0 keyboards/keychron/q3_pro/halconf.h | 2 + keyboards/keychron/q3_pro/matrix.c | 0 keyboards/keychron/q3_pro/mcuconf.h | 0 keyboards/keychron/q3_pro/q3_pro.c | 8 - keyboards/keychron/q3_pro/q3_pro.h | 14 +- keyboards/keychron/q3_pro/readme.md | 0 keyboards/keychron/q3_pro/rules.mk | 0 .../community/60_ansi/brandonschlack-ansi/keymap.c | 36 +- layouts/community/60_ansi/mechmerlin-ansi/keymap.c | 32 +- layouts/community/60_ansi/readme.md | 9 +- .../brandonschlack-split/keymap.c | 36 +- .../mechmerlin-split/keymap.c | 32 +- .../60_ansi_split_bs_rshift/yanfali/keymap.c | 24 +- layouts/community/60_hhkb/yanfali/keymap.c | 16 +- layouts/community/60_iso/bifbofii/keymap.c | 2 +- layouts/community/60_iso/unxmaal/keymap.c | 32 +- .../60_tsangan_hhkb/brandonschlack-tsngn/keymap.c | 36 +- layouts/community/65_ansi/yanfali/keymap.c | 16 +- .../65_ansi_blocker/brandonschlack/keymap.c | 38 +- .../brandonschlack-split/keymap.c | 38 +- layouts/community/66_ansi/mechmerlin/keymap.c | 24 +- layouts/community/66_ansi/xyverz/keymap.c | 40 +- layouts/community/68_ansi/mechmerlin/keymap.c | 6 +- layouts/community/75_ansi/brandonschlack/keymap.c | 42 +- .../community/75_ansi/mechmerlin-75_ansi/keymap.c | 6 +- layouts/community/75_ansi/readme.md | 3 +- layouts/community/75_ansi/yanfali/keymap.c | 4 +- layouts/community/ergodox/belak/keymap.c | 14 +- layouts/community/ergodox/drashna/keymap.c | 2 +- layouts/community/ergodox/haegin/keymap.c | 10 +- layouts/community/ergodox/meagerfindings/keymap.c | 2 +- layouts/community/ergodox/replicaJunction/config.h | 51 - layouts/community/ergodox/replicaJunction/keymap.c | 378 ------- .../community/ergodox/replicaJunction/readme.md | 5 - layouts/community/ergodox/replicaJunction/rules.mk | 33 - layouts/community/ergodox/videck/keymap.c | 6 +- layouts/community/ergodox/yoruian/keymap.c | 4 +- .../community/ergodox/zweihander-macos/config.h | 14 + .../community/ergodox/zweihander-macos/keymap.c | 74 +- .../ergodox/zweihander-macos/readme.markdown | 29 +- layouts/community/ortho_4x12/bakingpy/keymap.c | 10 +- layouts/community/ortho_4x12/bifbofii/keymap.c | 2 +- .../community/ortho_4x12/brandonschlack/keymap.c | 50 +- layouts/community/ortho_4x12/buswerks/keymap.c | 62 +- .../ortho_4x12/colemak_mod_dh_wide/keymap.c | 40 +- layouts/community/ortho_4x12/drashna/keymap.c | 28 +- layouts/community/ortho_4x12/ergodoxish/keymap.c | 60 +- layouts/community/ortho_4x12/jackhumbert/keymap.c | 4 +- layouts/community/ortho_4x12/jotix/keymap.c | 36 +- layouts/community/ortho_4x12/jotix/rules.mk | 1 + layouts/community/ortho_4x12/juno/keymap.c | 4 +- layouts/community/ortho_4x12/junonum/keymap.c | 297 +++--- layouts/community/ortho_4x12/junonum/rules.mk | 10 +- layouts/community/ortho_4x12/mguterl/keymap.c | 6 +- layouts/community/ortho_4x12/mindsound/keymap.c | 32 +- layouts/community/ortho_4x12/neo2marin/config.h | 23 + layouts/community/ortho_4x12/neo2marin/keymap.c | 175 ++++ layouts/community/ortho_4x12/neo2marin/readme.md | 105 ++ layouts/community/ortho_4x12/neo2marin/rules.mk | 6 + layouts/community/ortho_4x12/rs/keymap.c | 2 +- layouts/community/ortho_4x12/symbolic/keymap.c | 40 +- layouts/community/ortho_4x12/trguhq/keymap.c | 2 +- layouts/community/ortho_4x12/trguhq/trguhq.json | 16 +- layouts/community/ortho_4x12/wanleg/readme.md | 8 - layouts/community/ortho_4x12/xyverz/keymap.c | 60 +- layouts/community/ortho_5x12/333fred/keymap.c | 48 +- .../community/ortho_5x12/brandonschlack/keymap.c | 60 +- layouts/community/ortho_5x12/drashna/keymap.c | 8 +- layouts/community/ortho_5x12/riblee/keymap.c | 4 +- layouts/community/ortho_5x12/rs/keymap.c | 2 +- layouts/community/ortho_5x12/xyverz/config.h | 1 - layouts/community/ortho_5x12/xyverz/keymap.c | 72 +- layouts/community/split_3x6_3/drashna/chconf.h | 2 +- layouts/community/split_3x6_3/drashna/config.h | 2 +- layouts/community/split_3x6_3/drashna/keymap.c | 36 +- layouts/community/split_3x6_3/drashna/rules.mk | 3 - layouts/community/tkl_ansi/brandonschlack/keymap.c | 42 +- layouts/community/tkl_ansi/xyverz/keymap.c | 56 +- layouts/community/tkl_ansi/yanfali/keymap.c | 24 +- layouts/default/60_abnt2/default_60_abnt2/keymap.c | 5 +- layouts/default/60_ansi/default_60_ansi/keymap.c | 3 + .../60_ansi_arrow/default_60_ansi_arrow/keymap.c | 28 +- .../default_60_ansi_arrow_split_bs_7u_spc/keymap.c | 26 +- .../default_60_ansi_split_bs_rshift/keymap.c | 3 + .../default_60_ansi_tsangan/keymap.c | 3 + layouts/default/60_hhkb/default_60_hhkb/keymap.c | 3 + layouts/default/60_iso/default_60_iso/keymap.c | 3 + .../default_60_iso_split_bs_rshift/keymap.c | 3 + .../60_iso_tsangan/default_60_iso_tsangan/keymap.c | 3 + .../default_60_tsangan_hhkb/keymap.c | 5 +- layouts/default/64_ansi/default_64_ansi/keymap.c | 18 +- layouts/default/64_iso/default_64_iso/keymap.c | 18 +- layouts/default/65_ansi/default_65_ansi/keymap.c | 6 +- .../default_65_ansi_blocker/keymap.c | 6 +- .../default_65_ansi_blocker_split_bs/keymap.c | 5 +- .../default_65_ansi_blocker_tsangan/keymap.c | 6 +- .../keymap.c | 6 +- .../default_65_ansi_split_bs/keymap.c | 6 +- layouts/default/65_iso/default_65_iso/keymap.c | 6 +- .../65_iso_blocker/default_65_iso_blocker/keymap.c | 6 +- .../default_65_iso_blocker_split_bs/keymap.c | 6 +- .../default_65_iso_blocker_tsangan/keymap.c | 6 +- .../keymap.c | 6 +- .../default_65_iso_split_bs/keymap.c | 6 +- layouts/default/66_ansi/default_66_ansi/keymap.c | 3 + layouts/default/66_iso/default_66_iso/keymap.c | 3 + layouts/default/68_ansi/default_68_ansi/keymap.c | 3 + layouts/default/68_iso/default_68_iso/keymap.c | 3 + layouts/default/75_ansi/default_75_ansi/keymap.c | 3 + layouts/default/75_iso/default_75_iso/keymap.c | 3 + layouts/default/96_ansi/default_96_ansi/keymap.c | 3 + layouts/default/96_iso/default_96_iso/keymap.c | 17 +- layouts/default/alice/default_alice/keymap.c | 18 +- .../alice_split_bs/default_alice_split_bs/keymap.c | 18 +- layouts/default/ergodox/default_ergodox/keymap.c | 3 + .../fullsize_ansi/default_fullsize_ansi/keymap.c | 3 + .../fullsize_iso/default_fullsize_iso/keymap.c | 3 + .../default/numpad_4x4/default_numpad_4x4/keymap.c | 3 + .../default/numpad_5x4/default_numpad_5x4/keymap.c | 3 + .../default/numpad_5x6/default_numpad_5x6/keymap.c | 3 + .../default/numpad_6x4/default_numpad_6x4/keymap.c | 3 + .../default/numpad_6x5/default_numpad_6x5/keymap.c | 17 +- .../default/ortho_1x1/default_ortho_1x1/keymap.c | 3 + .../default/ortho_2x3/default_ortho_2x3/keymap.c | 3 + .../default/ortho_2x6/default_ortho_2x6/keymap.c | 3 + .../default/ortho_3x10/default_ortho_3x10/keymap.c | 3 + .../default/ortho_3x3/default_ortho_3x3/keymap.c | 3 + .../default/ortho_4x10/default_ortho_4x10/keymap.c | 3 + .../default/ortho_4x12/default_ortho_4x12/keymap.c | 3 + .../default/ortho_4x16/default_ortho_4x16/keymap.c | 2 +- .../default/ortho_4x4/default_ortho_4x4/keymap.c | 3 + .../default/ortho_4x6/default_ortho_4x6/keymap.c | 5 +- .../default/ortho_5x10/default_ortho_5x10/keymap.c | 3 + .../default/ortho_5x12/default_ortho_5x12/keymap.c | 3 + .../default/ortho_5x14/default_ortho_5x14/keymap.c | 3 + .../default/ortho_5x15/default_ortho_5x15/keymap.c | 3 + .../default/ortho_5x4/default_ortho_5x4/keymap.c | 3 + .../default/ortho_5x5/default_ortho_5x5/keymap.c | 3 + .../default/ortho_6x4/default_ortho_6x4/keymap.c | 3 + .../default/planck_mit/default_planck_mit/keymap.c | 3 + .../split_3x5_2/default_split_3x5_2/keymap.c | 3 + .../split_3x5_3/default_split_3x5_3/keymap.c | 3 + .../split_3x6_3/default_split_3x6_3/keymap.c | 3 + layouts/default/tkl_ansi/default_tkl_ansi/keymap.c | 3 + .../tkl_f13_ansi/default_tkl_f13_ansi/keymap.c | 3 + .../default_tkl_f13_ansi_tsangan/keymap.c | 3 + .../tkl_f13_iso/default_tkl_f13_iso/keymap.c | 3 + .../default_tkl_f13_iso_tsangan/keymap.c | 3 + layouts/default/tkl_iso/default_tkl_iso/keymap.c | 3 + .../default_tkl_nofrow_ansi/keymap.c | 3 + .../tkl_nofrow_iso/default_tkl_nofrow_iso/keymap.c | 3 + lib/lvgl | 1 + lib/python/qmk/c_parse.py | 4 +- lib/python/qmk/cli/__init__.py | 10 +- lib/python/qmk/cli/bux.py | 2 +- lib/python/qmk/cli/cformat.py | 28 - lib/python/qmk/cli/compile.py | 17 +- lib/python/qmk/cli/doctor/check.py | 93 +- lib/python/qmk/cli/doctor/linux.py | 34 +- lib/python/qmk/cli/doctor/main.py | 8 +- lib/python/qmk/cli/doctor/windows.py | 8 +- lib/python/qmk/cli/fileformat.py | 23 - lib/python/qmk/cli/flash.py | 61 +- lib/python/qmk/cli/generate/api.py | 56 +- lib/python/qmk/cli/generate/autocorrect_data.py | 82 +- lib/python/qmk/cli/generate/config_h.py | 2 +- lib/python/qmk/cli/generate/keyboard_c.py | 22 +- lib/python/qmk/cli/generate/keyboard_h.py | 23 +- lib/python/qmk/cli/generate/keycodes.py | 67 +- lib/python/qmk/cli/generate/keycodes_tests.py | 39 + lib/python/qmk/cli/generate/rgb_breathe_table.py | 49 +- lib/python/qmk/cli/generate/version_h.py | 13 +- lib/python/qmk/cli/git/__init__.py | 0 lib/python/qmk/cli/git/submodule.py | 38 + lib/python/qmk/cli/lint.py | 57 ++ lib/python/qmk/cli/list/keyboards.py | 3 +- lib/python/qmk/cli/mass_compile.py | 176 ++++ lib/python/qmk/cli/migrate.py | 81 ++ lib/python/qmk/cli/multibuild.py | 106 -- lib/python/qmk/cli/new/keyboard.py | 10 +- lib/python/qmk/cli/new/keymap.py | 56 +- lib/python/qmk/cli/pyformat.py | 24 - lib/python/qmk/flashers.py | 47 +- lib/python/qmk/git.py | 8 + lib/python/qmk/info.py | 80 +- lib/python/qmk/json_schema.py | 39 +- lib/python/qmk/keyboard.py | 10 +- lib/python/qmk/keycodes.py | 100 +- lib/python/qmk/keymap.py | 233 +++-- lib/python/qmk/painter.py | 80 +- lib/python/qmk/submodules.py | 26 +- platforms/arm_atsam/bootloader.mk | 2 + platforms/atomic_util.h | 10 +- platforms/avr/bootloader.mk | 2 + platforms/avr/drivers/audio_pwm_hardware.c | 4 +- platforms/avr/mcu_selection.mk | 95 ++ platforms/chibios/atomic_util.h | 17 +- .../boards/BLACKPILL_STM32_F401/configs/board.h | 2 +- .../boards/BLACKPILL_STM32_F411/configs/board.h | 2 +- platforms/chibios/boards/BONSAI_C4/configs/board.h | 2 +- .../chibios/boards/BONSAI_C4/configs/mcuconf.h | 5 +- .../boards/GENERIC_PROMICRO_RP2040/configs/board.h | 2 +- .../GENERIC_PROMICRO_RP2040/configs/config.h | 2 +- .../GENERIC_PROMICRO_RP2040/configs/mcuconf.h | 3 +- .../boards/GENERIC_RP_RP2040/configs/board.h | 2 +- .../boards/GENERIC_RP_RP2040/configs/mcuconf.h | 1 + .../boards/GENERIC_STM32_F072XB/configs/board.h | 2 +- .../boards/GENERIC_STM32_F303XC/configs/board.h | 2 +- .../boards/GENERIC_STM32_F401XC/configs/board.h | 2 +- .../boards/GENERIC_STM32_F405XG/configs/board.h | 2 +- .../boards/GENERIC_STM32_F407XE/configs/board.h | 2 +- .../boards/GENERIC_STM32_F411XE/configs/board.h | 2 +- .../boards/GENERIC_STM32_F446XE/configs/board.h | 2 +- .../boards/GENERIC_STM32_L412XB/configs/board.h | 2 +- .../boards/GENERIC_STM32_L433XC/configs/board.h | 2 +- .../chibios/boards/PJRC_TEENSY_3_5/board/board.mk | 11 + .../chibios/boards/PJRC_TEENSY_3_5/board/extra.c | 7 + .../chibios/boards/PJRC_TEENSY_3_6/board/board.mk | 11 + .../chibios/boards/PJRC_TEENSY_3_6/board/extra.c | 7 + .../chibios/boards/QMK_PM2040/configs/board.h | 2 +- .../chibios/boards/QMK_PM2040/configs/config.h | 2 +- .../chibios/boards/QMK_PM2040/configs/halconf.h | 1 + .../chibios/boards/QMK_PM2040/configs/mcuconf.h | 3 +- .../chibios/boards/QMK_PROTON_C/configs/board.h | 2 +- .../chibios/boards/QMK_PROTON_C/configs/halconf.h | 21 +- platforms/chibios/boards/STEMCELL/configs/board.h | 2 +- platforms/chibios/boards/common/configs/halconf.h | 21 +- .../boards/common/ld/STM32F103xB_uf2boot.ld | 88 ++ .../boards/common/ld/STM32F303xC_tinyuf2.ld | 88 ++ .../boards/keyboard-config-templates/board.h | 20 - .../boards/keyboard-config-templates/chconf.h | 20 - .../boards/keyboard-config-templates/halconf.h | 20 - .../boards/keyboard-config-templates/mcuconf.h | 21 - platforms/chibios/bootloader.mk | 7 + platforms/chibios/bootloaders/stm32_dfu.c | 2 +- platforms/chibios/bootloaders/uf2boot.c | 23 + .../converters/elite_c_to_elite_pi/_pin_defs.h | 39 - .../converters/elite_c_to_elite_pi/converter.mk | 9 - .../elite_c_to_elite_pi/pre_converter.mk | 2 + .../converters/elite_c_to_helios/pre_converter.mk | 2 + .../converters/elite_c_to_rp2040_ce/_pin_defs.h | 39 + .../converters/elite_c_to_rp2040_ce/converter.mk | 10 + .../promicro_to_bonsai_c3/pre_converter.mk | 2 + .../converters/promicro_to_elite_pi/_pin_defs.h | 36 - .../converters/promicro_to_elite_pi/converter.mk | 9 - .../promicro_to_elite_pi/pre_converter.mk | 2 + .../converters/promicro_to_helios/pre_converter.mk | 2 + .../converters/promicro_to_michi/_pin_defs.h | 36 + .../converters/promicro_to_michi/converter.mk | 9 + .../converters/promicro_to_rp2040_ce/_pin_defs.h | 36 + .../converters/promicro_to_rp2040_ce/converter.mk | 10 + platforms/chibios/drivers/analog.c | 53 +- platforms/chibios/drivers/audio_dac_additive.c | 2 +- platforms/chibios/drivers/audio_dac_basic.c | 2 +- platforms/chibios/drivers/serial_usart.c | 24 +- platforms/chibios/drivers/uart.c | 4 +- platforms/chibios/drivers/uart.h | 11 +- .../drivers/vendor/RP/RP2040/ws2812_vendor.c | 14 +- platforms/chibios/flash.mk | 2 + platforms/chibios/mcu_selection.mk | 825 ++++++++++++++++ platforms/chibios/platform.mk | 3 + platforms/chibios/vendors/RP/RP2040.mk | 2 + platforms/common.mk | 2 + platforms/lv_conf.h | 756 ++++++++++++++ platforms/synchronization_util.c | 17 + platforms/synchronization_util.h | 6 + platforms/test/timer.c | 3 +- platforms/timer.c | 8 + quantum/action.c | 210 ++-- quantum/action.h | 21 +- quantum/action_layer.c | 34 +- quantum/action_layer.h | 22 + quantum/action_tapping.c | 270 +++-- quantum/action_tapping.h | 17 +- quantum/action_util.c | 4 +- quantum/audio/audio.c | 4 +- quantum/audio/voices.c | 4 +- quantum/config_common.h | 12 +- quantum/haptic.c | 9 + quantum/joystick.c | 2 +- quantum/keyboard.c | 23 +- quantum/keyboard.h | 7 +- quantum/keycode.h | 5 - quantum/keycode_config.c | 6 +- quantum/keycodes.h | 569 ++++++----- quantum/keymap_common.c | 66 +- quantum/keymap_extras/keymap_belgian.h | 96 +- quantum/keymap_extras/keymap_bepo.h | 127 +-- quantum/keymap_extras/keymap_brazilian_abnt2.h | 97 +- .../keymap_extras/keymap_canadian_multilingual.h | 132 +-- quantum/keymap_extras/keymap_colemak.h | 78 +- quantum/keymap_extras/keymap_croatian.h | 94 +- quantum/keymap_extras/keymap_czech.h | 96 +- quantum/keymap_extras/keymap_danish.h | 95 +- quantum/keymap_extras/keymap_dvorak.h | 78 +- quantum/keymap_extras/keymap_dvorak_fr.h | 84 +- quantum/keymap_extras/keymap_dvorak_programmer.h | 78 +- quantum/keymap_extras/keymap_estonian.h | 95 +- quantum/keymap_extras/keymap_finnish.h | 95 +- quantum/keymap_extras/keymap_french.h | 98 +- quantum/keymap_extras/keymap_french_afnor.h | 144 +-- quantum/keymap_extras/keymap_french_mac_iso.h | 114 +-- quantum/keymap_extras/keymap_german.h | 95 +- quantum/keymap_extras/keymap_german_mac_iso.h | 114 +-- quantum/keymap_extras/keymap_greek.h | 96 +- quantum/keymap_extras/keymap_hebrew.h | 96 +- quantum/keymap_extras/keymap_hungarian.h | 94 +- quantum/keymap_extras/keymap_icelandic.h | 96 +- quantum/keymap_extras/keymap_irish.h | 95 +- quantum/keymap_extras/keymap_italian.h | 109 +- quantum/keymap_extras/keymap_italian_mac_ansi.h | 114 +-- quantum/keymap_extras/keymap_italian_mac_iso.h | 114 +-- quantum/keymap_extras/keymap_japanese.h | 85 +- quantum/keymap_extras/keymap_korean.h | 79 +- quantum/keymap_extras/keymap_latvian.h | 114 +-- quantum/keymap_extras/keymap_lithuanian_azerty.h | 94 +- quantum/keymap_extras/keymap_lithuanian_qwerty.h | 109 +- quantum/keymap_extras/keymap_neo2.h | 61 +- quantum/keymap_extras/keymap_nordic.h | 84 +- quantum/keymap_extras/keymap_norman.h | 78 +- quantum/keymap_extras/keymap_norwegian.h | 95 +- quantum/keymap_extras/keymap_plover.h | 101 +- quantum/keymap_extras/keymap_plover_dvorak.h | 91 +- quantum/keymap_extras/keymap_polish.h | 113 +-- quantum/keymap_extras/keymap_portuguese.h | 94 +- quantum/keymap_extras/keymap_portuguese_mac_iso.h | 114 +-- quantum/keymap_extras/keymap_romanian.h | 112 +-- quantum/keymap_extras/keymap_russian.h | 92 +- quantum/keymap_extras/keymap_serbian.h | 91 +- quantum/keymap_extras/keymap_serbian_latin.h | 94 +- quantum/keymap_extras/keymap_slovak.h | 96 +- quantum/keymap_extras/keymap_slovenian.h | 94 +- quantum/keymap_extras/keymap_spanish.h | 95 +- quantum/keymap_extras/keymap_spanish_dvorak.h | 95 +- quantum/keymap_extras/keymap_swedish.h | 96 +- quantum/keymap_extras/keymap_swedish_mac_ansi.h | 115 +-- quantum/keymap_extras/keymap_swedish_mac_iso.h | 116 +-- .../keymap_extras/keymap_swedish_pro_mac_ansi.h | 115 +-- quantum/keymap_extras/keymap_swedish_pro_mac_iso.h | 116 +-- quantum/keymap_extras/keymap_swiss_de.h | 101 +- quantum/keymap_extras/keymap_swiss_fr.h | 101 +- quantum/keymap_extras/keymap_turkish_f.h | 112 +-- quantum/keymap_extras/keymap_turkish_q.h | 94 +- quantum/keymap_extras/keymap_uk.h | 95 +- quantum/keymap_extras/keymap_ukrainian.h | 92 +- quantum/keymap_extras/keymap_us.h | 76 +- quantum/keymap_extras/keymap_us_extended.h | 119 +-- quantum/keymap_extras/keymap_us_international.h | 114 +-- .../keymap_extras/keymap_us_international_linux.h | 121 +-- quantum/keymap_extras/keymap_workman.h | 78 +- quantum/keymap_extras/keymap_workman_zxcvm.h | 78 +- quantum/keymap_introspection.c | 42 +- quantum/keymap_introspection.h | 14 +- quantum/leader.c | 101 ++ quantum/leader.h | 119 +++ quantum/led.c | 10 +- quantum/led.h | 5 +- quantum/led_matrix/led_matrix.c | 1 - quantum/logging/nodebug.h | 26 - quantum/main.c | 6 +- quantum/matrix.c | 14 +- quantum/matrix.h | 11 +- quantum/matrix_common.c | 6 +- quantum/midi/Config/LUFAConfig.h | 91 ++ quantum/midi/bytequeue/COPYING | 674 +++++++++++++ quantum/midi/bytequeue/bytequeue.c | 64 ++ quantum/midi/bytequeue/bytequeue.h | 55 ++ quantum/midi/bytequeue/interrupt_setting.c | 47 + quantum/midi/bytequeue/interrupt_setting.h | 35 + quantum/midi/midi.c | 247 +++++ quantum/midi/midi.h | 487 +++++++++ quantum/midi/midi_device.c | 277 ++++++ quantum/midi/midi_device.h | 148 +++ quantum/midi/midi_function_types.h | 47 + quantum/midi/qmk_midi.c | 135 +++ quantum/midi/qmk_midi.h | 10 + quantum/midi/sysex_tools.c | 97 ++ quantum/midi/sysex_tools.h | 92 ++ quantum/mousekey.c | 2 +- quantum/os_detection.c | 129 +++ quantum/os_detection.h | 38 + quantum/os_detection/tests/os_detection.cpp | 164 +++ quantum/os_detection/tests/rules.mk | 5 + quantum/os_detection/tests/testlist.mk | 1 + quantum/painter/lvgl/qp_lvgl.c | 150 +++ quantum/painter/lvgl/qp_lvgl.h | 25 + quantum/painter/lvgl/rules.mk | 24 + quantum/painter/qgf.c | 4 +- quantum/painter/qp.c | 2 +- quantum/painter/qp.h | 15 + quantum/painter/qp_draw.h | 10 + quantum/painter/qp_draw_codec.c | 44 +- quantum/painter/qp_draw_image.c | 49 +- quantum/painter/qp_draw_text.c | 2 +- quantum/painter/qp_internal_driver.h | 2 + quantum/painter/qp_internal_formats.h | 2 + quantum/painter/rules.mk | 6 + quantum/process_keycode/process_audio.c | 4 +- quantum/process_keycode/process_auto_shift.c | 45 +- quantum/process_keycode/process_auto_shift.h | 5 +- quantum/process_keycode/process_autocorrect.c | 8 +- quantum/process_keycode/process_caps_word.c | 8 +- quantum/process_keycode/process_combo.c | 14 +- quantum/process_keycode/process_combo.h | 2 +- quantum/process_keycode/process_key_override.c | 8 +- quantum/process_keycode/process_leader.c | 83 +- quantum/process_keycode/process_leader.h | 22 - quantum/process_keycode/process_magic.c | 70 +- quantum/process_keycode/process_music.c | 6 +- quantum/process_keycode/process_sequencer.c | 24 +- quantum/process_keycode/process_space_cadet.c | 10 +- quantum/process_keycode/process_steno.c | 2 +- quantum/process_keycode/process_tap_dance.c | 46 +- quantum/process_keycode/process_tap_dance.h | 42 +- quantum/process_keycode/process_tri_layer.c | 30 + quantum/process_keycode/process_tri_layer.h | 16 + quantum/process_keycode/process_ucis.c | 52 +- quantum/process_keycode/process_ucis.h | 16 +- quantum/process_keycode/process_unicodemap.h | 2 +- quantum/quantum.c | 45 +- quantum/quantum.h | 10 +- quantum/quantum_keycodes.h | 6 +- quantum/quantum_keycodes_legacy.h | 332 +------ .../animations/jellybean_raindrops_anim.h | 4 +- quantum/rgb_matrix/animations/pixel_flow_anim.h | 4 +- quantum/rgb_matrix/animations/pixel_fractal_anim.h | 2 +- quantum/rgb_matrix/animations/pixel_rain_anim.h | 31 +- quantum/rgb_matrix/animations/raindrops_anim.h | 2 +- .../rgb_matrix/animations/solid_reactive_anim.h | 2 +- .../rgb_matrix/animations/solid_reactive_cross.h | 2 +- .../rgb_matrix/animations/solid_reactive_nexus.h | 5 +- .../animations/solid_reactive_simple_anim.h | 2 +- .../rgb_matrix/animations/solid_reactive_wide.h | 2 +- quantum/rgb_matrix/rgb_matrix.c | 1 - quantum/rgblight/rgblight.c | 4 +- quantum/rgblight/rgblight.h | 17 - quantum/rgblight/rgblight_breathe_table.h | 28 +- quantum/ring_buffer.h | 2 +- quantum/split_common/split_util.c | 1 - quantum/split_common/transaction_id_define.h | 4 + quantum/split_common/transactions.c | 45 + quantum/split_common/transport.h | 12 + quantum/tri_layer.c | 39 + quantum/tri_layer.h | 59 ++ quantum/via.c | 58 +- quantum/via.h | 42 +- tests/auto_shift/test_auto_shift.cpp | 8 +- tests/autocorrect/test_autocorrect.cpp | 12 +- tests/basic/test_action_layer.cpp | 129 ++- tests/basic/test_keycode_util.cpp | 52 + tests/basic/test_keypress.cpp | 32 +- tests/basic/test_one_shot_keys.cpp | 32 +- tests/basic/test_tapping.cpp | 69 ++ .../test_caps_word_autoshift.cpp | 6 +- .../caps_word_combo/test_caps_word_combo.cpp | 8 +- .../test_caps_word_unicodemap.cpp | 4 +- tests/caps_word/test_caps_word.cpp | 90 +- tests/leader/config.h | 6 + tests/leader/leader_no_initial_timeout/config.h | 8 + tests/leader/leader_no_initial_timeout/test.mk | 7 + .../test_leader_no_initial_timeout.cpp | 48 + tests/leader/leader_per_key_timeout/config.h | 5 + tests/leader/leader_per_key_timeout/test.mk | 7 + .../test_leader_per_key_timeout.cpp | 40 + tests/leader/leader_sequences.c | 26 + tests/leader/leader_strict_key_processing/config.h | 8 + tests/leader/leader_strict_key_processing/test.mk | 7 + .../test_leader_strict_key_processing.cpp | 45 + tests/leader/test.mk | 7 + tests/leader/test_leader.cpp | 224 +++++ tests/no_tapping/no_action_tapping/config.h | 21 + tests/no_tapping/no_action_tapping/test.mk | 18 + .../no_action_tapping/test_layer_tap.cpp | 63 ++ .../no_tapping/no_action_tapping/test_mod_tap.cpp | 107 ++ .../no_action_tapping/test_one_shot_keys.cpp | 105 ++ tests/no_tapping/no_mod_tap_mods/config.h | 22 + tests/no_tapping/no_mod_tap_mods/test.mk | 18 + tests/no_tapping/no_mod_tap_mods/test_tapping.cpp | 104 ++ tests/secure/test_secure.cpp | 20 +- tests/tap_dance/examples.c | 22 +- tests/tap_dance/tap_dance_layers/tap_dance_defs.c | 8 +- .../default_mod_tap/config.h | 2 +- .../default_mod_tap/test_one_shot_layer.cpp | 248 +++++ .../default_mod_tap/test_tap_hold.cpp | 48 +- .../hold_on_other_key_press/test_tap_hold.cpp | 94 +- .../ignore_mod_tap_interrupt/config.h | 21 - .../ignore_mod_tap_interrupt/test.mk | 18 - .../ignore_mod_tap_interrupt/test_tap_hold.cpp | 136 --- .../permissive_hold/test_one_shot_keys.cpp | 8 +- .../permissive_hold/test_tap_hold.cpp | 26 +- .../config.h | 22 - .../test.mk | 18 - .../test_tap_hold.cpp | 133 --- tests/tap_hold_configurations/quick_tap/config.h | 25 + tests/tap_hold_configurations/quick_tap/test.mk | 18 + .../quick_tap/test_action_layer.cpp | 82 ++ .../quick_tap/test_quick_tap.cpp | 290 ++++++ .../retro_tapping/test_tap_hold.cpp | 4 +- .../retro_tapping/test_tapping.cpp | 22 +- .../tapping_force_hold/config.h | 21 - .../tapping_force_hold/test.mk | 18 - .../tapping_force_hold/test_action_layer.cpp | 80 -- .../tapping_force_hold/test_tap_hold.cpp | 213 ---- tests/test_common/keyboard_report_util.cpp | 47 +- tests/test_common/keycode_table.cpp | 730 ++++++++++++++ tests/test_common/keycode_util.cpp | 128 +++ tests/test_common/keycode_util.hpp | 5 + tests/test_common/matrix.c | 12 +- tests/test_common/test_common.hpp | 1 + tests/test_common/test_driver.hpp | 6 + tests/test_common/test_fixture.cpp | 33 +- tests/test_common/test_keymap_key.cpp | 16 +- tests/test_common/test_keymap_key.hpp | 16 +- tests/test_common/test_logger.cpp | 16 +- tests/test_common/test_logger.hpp | 8 +- tests/tri_layer/config.h | 6 + tests/tri_layer/test.mk | 8 + tests/tri_layer/test_tri_layer.cpp | 103 ++ tmk_core/protocol/chibios.mk | 4 - tmk_core/protocol/chibios/usb_main.c | 258 ++--- tmk_core/protocol/host.h | 3 - tmk_core/protocol/lufa.mk | 2 +- tmk_core/protocol/lufa/lufa.c | 6 +- tmk_core/protocol/midi.mk | 11 - tmk_core/protocol/midi/Config/LUFAConfig.h | 91 -- tmk_core/protocol/midi/bytequeue/COPYING | 674 ------------- tmk_core/protocol/midi/bytequeue/bytequeue.c | 64 -- tmk_core/protocol/midi/bytequeue/bytequeue.h | 55 -- .../protocol/midi/bytequeue/interrupt_setting.c | 47 - .../protocol/midi/bytequeue/interrupt_setting.h | 35 - tmk_core/protocol/midi/midi.c | 247 ----- tmk_core/protocol/midi/midi.h | 487 --------- tmk_core/protocol/midi/midi_device.c | 277 ------ tmk_core/protoco