aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/.nojekyll0
-rw-r--r--docs/CNAME1
-rw-r--r--docs/ChangeLog/20190830.md52
-rw-r--r--docs/ChangeLog/20200229.md75
-rw-r--r--docs/ChangeLog/20200530.md239
-rw-r--r--docs/ChangeLog/20200829.md148
-rw-r--r--docs/ChangeLog/20201128.md150
-rw-r--r--docs/ChangeLog/20210227.md169
-rw-r--r--docs/ChangeLog/20210529.md227
-rw-r--r--docs/ChangeLog/20210828.md557
-rw-r--r--docs/ChangeLog/20211127.md457
-rw-r--r--docs/README.md37
-rw-r--r--docs/_langs.md4
-rw-r--r--docs/_summary.md191
-rw-r--r--docs/adc_driver.md156
-rw-r--r--docs/api_development_environment.md3
-rw-r--r--docs/api_development_overview.md44
-rw-r--r--docs/api_docs.md68
-rw-r--r--docs/api_overview.md15
-rw-r--r--docs/arm_debugging.md87
-rw-r--r--docs/audio_driver.md221
-rw-r--r--docs/breaking_changes.md120
-rw-r--r--docs/breaking_changes_history.md13
-rw-r--r--docs/breaking_changes_instructions.md42
-rw-r--r--docs/chibios_upgrade_instructions.md59
-rw-r--r--docs/cli.md38
-rw-r--r--docs/cli_commands.md500
-rw-r--r--docs/cli_configuration.md121
-rw-r--r--docs/cli_development.md219
-rw-r--r--docs/cli_tab_complete.md27
-rw-r--r--docs/coding_conventions_c.md58
-rw-r--r--docs/coding_conventions_python.md326
-rw-r--r--docs/compatible_microcontrollers.md60
-rw-r--r--docs/config_options.md481
-rw-r--r--docs/configurator_architecture.md61
-rw-r--r--docs/configurator_default_keymaps.md193
-rw-r--r--docs/configurator_diagram.drawio1
-rw-r--r--docs/configurator_diagram.svg3
-rw-r--r--docs/configurator_step_by_step.md58
-rw-r--r--docs/configurator_troubleshooting.md26
-rw-r--r--docs/contributing.md168
-rw-r--r--docs/custom_matrix.md108
-rw-r--r--docs/custom_quantum_functions.md473
-rw-r--r--docs/data_driven_config.md91
-rw-r--r--docs/documentation_best_practices.md64
-rw-r--r--docs/documentation_templates.md40
-rw-r--r--docs/driver_installation_zadig.md99
-rw-r--r--docs/easy_maker.md31
-rw-r--r--docs/eeprom_driver.md75
-rw-r--r--docs/faq_build.md69
-rw-r--r--docs/faq_debug.md135
-rw-r--r--docs/faq_general.md53
-rw-r--r--docs/faq_keymap.md156
-rw-r--r--docs/faq_misc.md113
-rw-r--r--docs/feature_advanced_keycodes.md182
-rw-r--r--docs/feature_audio.md348
-rw-r--r--docs/feature_auto_shift.md356
-rw-r--r--docs/feature_backlight.md220
-rw-r--r--docs/feature_bluetooth.md46
-rw-r--r--docs/feature_bootmagic.md60
-rw-r--r--docs/feature_combo.md329
-rw-r--r--docs/feature_command.md51
-rw-r--r--docs/feature_debounce_type.md133
-rw-r--r--docs/feature_digitizer.md35
-rw-r--r--docs/feature_dip_switch.md109
-rw-r--r--docs/feature_dynamic_macros.md66
-rw-r--r--docs/feature_encoders.md148
-rw-r--r--docs/feature_grave_esc.md32
-rw-r--r--docs/feature_haptic_feedback.md210
-rw-r--r--docs/feature_hd44780.md57
-rw-r--r--docs/feature_joystick.md152
-rw-r--r--docs/feature_key_lock.md22
-rw-r--r--docs/feature_key_overrides.md229
-rw-r--r--docs/feature_layers.md91
-rw-r--r--docs/feature_layouts.md109
-rw-r--r--docs/feature_leader_key.md159
-rw-r--r--docs/feature_led_indicators.md118
-rw-r--r--docs/feature_led_matrix.md346
-rw-r--r--docs/feature_macros.md408
-rw-r--r--docs/feature_midi.md260
-rw-r--r--docs/feature_mouse_keys.md175
-rw-r--r--docs/feature_oled_driver.md408
-rw-r--r--docs/feature_pointing_device.md276
-rw-r--r--docs/feature_programmable_button.md74
-rw-r--r--docs/feature_ps2_mouse.md322
-rw-r--r--docs/feature_rawhid.md69
-rw-r--r--docs/feature_rgb_matrix.md860
-rw-r--r--docs/feature_rgblight.md565
-rw-r--r--docs/feature_sequencer.md87
-rw-r--r--docs/feature_space_cadet.md60
-rw-r--r--docs/feature_split_keyboard.md442
-rw-r--r--docs/feature_st7565.md274
-rw-r--r--docs/feature_stenography.md146
-rw-r--r--docs/feature_swap_hands.md33
-rw-r--r--docs/feature_tap_dance.md526
-rw-r--r--docs/feature_terminal.md107
-rw-r--r--docs/feature_thermal_printer.md10
-rw-r--r--docs/feature_unicode.md293
-rw-r--r--docs/feature_userspace.md255
-rw-r--r--docs/feature_velocikey.md29
-rw-r--r--docs/feature_wpm.md76
-rw-r--r--docs/flashing.md323
-rw-r--r--docs/flashing_bootloadhid.md70
-rw-r--r--docs/fuse.txt49
-rw-r--r--docs/getting_started_docker.md55
-rw-r--r--docs/getting_started_github.md64
-rw-r--r--docs/getting_started_introduction.md60
-rw-r--r--docs/getting_started_make_guide.md156
-rw-r--r--docs/getting_started_vagrant.md56
-rw-r--r--docs/gitbook/images/color-wheel.svg441
-rw-r--r--docs/gitbook/images/favicon.icobin0 -> 1150 bytes
-rw-r--r--docs/hand_wire.md244
-rw-r--r--docs/hardware_avr.md182
-rw-r--r--docs/hardware_drivers.md35
-rw-r--r--docs/hardware_keyboard_guidelines.md260
-rw-r--r--docs/how_a_matrix_works.md99
-rw-r--r--docs/how_keyboards_work.md76
-rw-r--r--docs/i2c_driver.md278
-rw-r--r--docs/index.html148
-rw-r--r--docs/internals_defines.md78
-rw-r--r--docs/internals_gpio_control.md42
-rw-r--r--docs/internals_input_callback_reg.md169
-rw-r--r--docs/internals_midi_device.md143
-rw-r--r--docs/internals_midi_device_setup_process.md31
-rw-r--r--docs/internals_midi_util.md54
-rw-r--r--docs/internals_send_functions.md241
-rw-r--r--docs/internals_sysex_tools.md61
-rw-r--r--docs/isp_flashing_guide.md242
-rw-r--r--docs/ja/README.md47
-rw-r--r--docs/ja/_summary.md182
-rw-r--r--docs/ja/adc_driver.md155
-rw-r--r--docs/ja/api_development_environment.md8
-rw-r--r--docs/ja/api_development_overview.md49
-rw-r--r--docs/ja/api_docs.md73
-rw-r--r--docs/ja/api_overview.md20
-rw-r--r--docs/ja/arm_debugging.md92
-rw-r--r--docs/ja/breaking_changes.md120
-rw-r--r--docs/ja/breaking_changes_instructions.md51
-rw-r--r--docs/ja/cli.md43
-rw-r--r--docs/ja/cli_commands.md296
-rw-r--r--docs/ja/cli_configuration.md126
-rw-r--r--docs/ja/cli_development.md223
-rw-r--r--docs/ja/coding_conventions_c.md63
-rw-r--r--docs/ja/coding_conventions_python.md331
-rw-r--r--docs/ja/compatible_microcontrollers.md54
-rw-r--r--docs/ja/config_options.md421
-rw-r--r--docs/ja/configurator_step_by_step.md67
-rw-r--r--docs/ja/configurator_troubleshooting.md32
-rw-r--r--docs/ja/contributing.md173
-rw-r--r--docs/ja/custom_matrix.md114
-rw-r--r--docs/ja/custom_quantum_functions.md403
-rw-r--r--docs/ja/data_driven_config.md123
-rw-r--r--docs/ja/documentation_best_practices.md69
-rw-r--r--docs/ja/documentation_templates.md45
-rw-r--r--docs/ja/driver_installation_zadig.md53
-rw-r--r--docs/ja/faq_build.md73
-rw-r--r--docs/ja/faq_debug.md131
-rw-r--r--docs/ja/faq_general.md58
-rw-r--r--docs/ja/faq_keymap.md160
-rw-r--r--docs/ja/faq_misc.md103
-rw-r--r--docs/ja/feature_advanced_keycodes.md185
-rw-r--r--docs/ja/feature_audio.md322
-rw-r--r--docs/ja/feature_auto_shift.md135
-rw-r--r--docs/ja/feature_backlight.md225
-rw-r--r--docs/ja/feature_bluetooth.md49
-rw-r--r--docs/ja/feature_bootmagic.md182
-rw-r--r--docs/ja/feature_combo.md108
-rw-r--r--docs/ja/feature_command.md56
-rw-r--r--docs/ja/feature_debounce_type.md128
-rw-r--r--docs/ja/feature_dip_switch.md115
-rw-r--r--docs/ja/feature_dynamic_macros.md71
-rw-r--r--docs/ja/feature_encoders.md85
-rw-r--r--docs/ja/feature_grave_esc.md37
-rw-r--r--docs/ja/feature_haptic_feedback.md173
-rw-r--r--docs/ja/feature_hd44780.md62
-rw-r--r--docs/ja/feature_key_lock.md27
-rw-r--r--docs/ja/feature_layers.md97
-rw-r--r--docs/ja/feature_layouts.md114
-rw-r--r--docs/ja/feature_leader_key.md164
-rw-r--r--docs/ja/feature_led_indicators.md119
-rw-r--r--docs/ja/feature_led_matrix.md96
-rw-r--r--docs/ja/feature_macros.md303
-rw-r--r--docs/ja/feature_mouse_keys.md147
-rw-r--r--docs/ja/feature_pointing_device.md58
-rw-r--r--docs/ja/feature_ps2_mouse.md286
-rw-r--r--docs/ja/feature_rawhid.md74
-rw-r--r--docs/ja/feature_split_keyboard.md251
-rw-r--r--docs/ja/feature_stenography.md135
-rw-r--r--docs/ja/feature_swap_hands.md36
-rw-r--r--docs/ja/feature_tap_dance.md533
-rw-r--r--docs/ja/feature_terminal.md112
-rw-r--r--docs/ja/feature_thermal_printer.md15
-rw-r--r--docs/ja/feature_unicode.md277
-rw-r--r--docs/ja/feature_userspace.md260
-rw-r--r--docs/ja/feature_velocikey.md34
-rw-r--r--docs/ja/feature_wpm.md24
-rw-r--r--docs/ja/flashing.md247
-rw-r--r--docs/ja/flashing_bootloadhid.md75
-rw-r--r--docs/ja/getting_started_docker.md60
-rw-r--r--docs/ja/getting_started_github.md69
-rw-r--r--docs/ja/getting_started_introduction.md65
-rw-r--r--docs/ja/getting_started_make_guide.md161
-rw-r--r--docs/ja/getting_started_vagrant.md61
-rw-r--r--docs/ja/hardware_avr.md190
-rw-r--r--docs/ja/hardware_drivers.md41
-rw-r--r--docs/ja/hardware_keyboard_guidelines.md239
-rw-r--r--docs/ja/how_a_matrix_works.md104
-rw-r--r--docs/ja/how_keyboards_work.md74
-rw-r--r--docs/ja/i2c_driver.md135
-rw-r--r--docs/ja/internals_defines.md78
-rw-r--r--docs/ja/internals_gpio_control.md47
-rw-r--r--docs/ja/internals_input_callback_reg.md173
-rw-r--r--docs/ja/internals_midi_device.md148
-rw-r--r--docs/ja/internals_midi_device_setup_process.md36
-rw-r--r--docs/ja/internals_midi_util.md59
-rw-r--r--docs/ja/internals_send_functions.md246
-rw-r--r--docs/ja/internals_sysex_tools.md66
-rw-r--r--docs/ja/isp_flashing_guide.md294
-rw-r--r--docs/ja/ja_doc_status.sh34
-rw-r--r--docs/ja/keycodes.md574
-rw-r--r--docs/ja/keycodes_basic.md261
-rw-r--r--docs/ja/keycodes_us_ansi_shifted.md41
-rw-r--r--docs/ja/keymap.md187
-rw-r--r--docs/ja/mod_tap.md71
-rw-r--r--docs/ja/newbs.md40
-rw-r--r--docs/ja/newbs_building_firmware.md81
-rw-r--r--docs/ja/newbs_building_firmware_configurator.md20
-rw-r--r--docs/ja/newbs_flashing.md133
-rw-r--r--docs/ja/newbs_getting_started.md210
-rw-r--r--docs/ja/newbs_git_best_practices.md24
-rw-r--r--docs/ja/newbs_git_resolving_merge_conflicts.md94
-rw-r--r--docs/ja/newbs_git_resynchronize_a_branch.md88
-rw-r--r--docs/ja/newbs_git_using_your_master_branch.md101
-rw-r--r--docs/ja/newbs_learn_more_resources.md63
-rw-r--r--docs/ja/newbs_testing_debugging.md15
-rw-r--r--docs/ja/one_shot_keys.md110
-rw-r--r--docs/ja/other_eclipse.md89
-rw-r--r--docs/ja/other_vscode.md121
-rw-r--r--docs/ja/pr_checklist.md145
-rw-r--r--docs/ja/proton_c_conversion.md98
-rw-r--r--docs/ja/quantum_keycodes.md20
-rw-r--r--docs/ja/ref_functions.md124
-rw-r--r--docs/ja/reference_configurator_support.md200
-rw-r--r--docs/ja/reference_glossary.md173
-rw-r--r--docs/ja/reference_info_json.md68
-rw-r--r--docs/ja/reference_keymap_extras.md89
-rw-r--r--docs/ja/serial_driver.md75
-rw-r--r--docs/ja/support.md22
-rw-r--r--docs/ja/syllabus.md76
-rw-r--r--docs/ja/tap_hold.md214
-rw-r--r--docs/ja/translating.md60
-rw-r--r--docs/ja/understanding_qmk.md191
-rw-r--r--docs/keycodes.md775
-rw-r--r--docs/keycodes_basic.md256
-rw-r--r--docs/keycodes_magic.md36
-rw-r--r--docs/keycodes_us_ansi_shifted.md37
-rw-r--r--docs/keymap.md184
-rw-r--r--docs/mod_tap.md137
-rw-r--r--docs/newbs.md24
-rw-r--r--docs/newbs_building_firmware.md78
-rw-r--r--docs/newbs_building_firmware_configurator.md13
-rw-r--r--docs/newbs_flashing.md118
-rw-r--r--docs/newbs_getting_started.md187
-rw-r--r--docs/newbs_git_best_practices.md16
-rw-r--r--docs/newbs_git_resolving_merge_conflicts.md79
-rw-r--r--docs/newbs_git_resynchronize_a_branch.md71
-rw-r--r--docs/newbs_git_using_your_master_branch.md74
-rw-r--r--docs/newbs_learn_more_resources.md28
-rw-r--r--docs/newbs_testing_debugging.md9
-rw-r--r--docs/one_shot_keys.md105
-rw-r--r--docs/other_eclipse.md90
-rw-r--r--docs/other_vscode.md119
-rw-r--r--docs/platformdev_chibios_earlyinit.md64
-rw-r--r--docs/platformdev_selecting_arm_mcu.md58
-rw-r--r--docs/power.txt62
-rw-r--r--docs/pr_checklist.md176
-rw-r--r--docs/proton_c_conversion.md91
-rw-r--r--docs/qmk.css862
-rw-r--r--docs/qmk_custom_dark.css41
-rw-r--r--docs/qmk_custom_light.css58
-rw-r--r--docs/quantum_keycodes.md15
-rw-r--r--docs/redirects.json52
-rw-r--r--docs/ref_functions.md119
-rw-r--r--docs/reference_configurator_support.md195
-rw-r--r--docs/reference_glossary.md167
-rw-r--r--docs/reference_info_json.md187
-rw-r--r--docs/reference_keymap_extras.md91
-rw-r--r--docs/serial_driver.md211
-rw-r--r--docs/spi_driver.md150
-rw-r--r--docs/squeezing_avr.md180
-rw-r--r--docs/support.md17
-rw-r--r--docs/sw.js83
-rw-r--r--docs/syllabus.md72
-rw-r--r--docs/tap_hold.md361
-rw-r--r--docs/translating.md55
-rw-r--r--docs/uart_driver.md116
-rw-r--r--docs/understanding_qmk.md190
-rw-r--r--docs/unit_testing.md76
-rw-r--r--docs/usb_nkro.txt160
-rw-r--r--docs/ws2812_driver.md171
-rw-r--r--docs/zh-cn/README.md31
-rw-r--r--docs/zh-cn/_summary.md133
-rw-r--r--docs/zh-cn/contributing.md205
-rw-r--r--docs/zh-cn/custom_quantum_functions.md490
-rw-r--r--docs/zh-cn/faq.md6
-rw-r--r--docs/zh-cn/faq_build.md122
-rw-r--r--docs/zh-cn/faq_debug.md136
-rw-r--r--docs/zh-cn/faq_general.md19
-rw-r--r--docs/zh-cn/faq_keymap.md151
-rw-r--r--docs/zh-cn/getting_started_getting_help.md15
-rw-r--r--docs/zh-cn/getting_started_github.md64
-rw-r--r--docs/zh-cn/getting_started_introduction.md54
-rw-r--r--docs/zh-cn/newbs.md23
-rw-r--r--docs/zh-cn/newbs_best_practices.md163
-rw-r--r--docs/zh-cn/newbs_building_firmware.md81
-rw-r--r--docs/zh-cn/newbs_flashing.md307
-rw-r--r--docs/zh-cn/newbs_getting_started.md102
-rw-r--r--docs/zh-cn/newbs_learn_more_resources.md15
-rw-r--r--docs/zh-cn/newbs_testing_debugging.md46
-rw-r--r--docs/zh-cn/reference_glossary.md167
320 files changed, 44481 insertions, 0 deletions
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/docs/.nojekyll
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 000000000..e089843e0
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
docs.qmk.fm \ No newline at end of file
diff --git a/docs/ChangeLog/20190830.md b/docs/ChangeLog/20190830.md
new file mode 100644
index 000000000..ab6e28c4d
--- /dev/null
+++ b/docs/ChangeLog/20190830.md
@@ -0,0 +1,52 @@
1# QMK Breaking Change - 2019 Aug 30
2
3Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
4
5This document marks the inaugural Breaking Change merge. A list of changes follows.
6
7## Core code formatting with clang-format
8
9* All core files (`drivers/`, `quantum/`, `tests/`, and `tmk_core/`) have been formatted with clang-format
10* A travis process to reformat PR's on merge has been instituted
11* You can use the new CLI command `qmk cformat` to format before submitting your PR if you wish.
12
13## LUFA USB descriptor cleanup
14
15* Some code cleanups related to the USB HID descriptors on AVR keyboards, to make them easier to read and understand
16* More information: see https://github.com/qmk/qmk_firmware/pull/4871
17* No behaviour changes anticipated and no keymaps modified
18
19## Migrating `ACTION_LAYER_MOMENTARY()` entries in `fn_actions` to `MO()` keycodes
20
21* `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
22* The end result of removing this obsolete feature should result in a decent reduction in firmware size and code complexity
23* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
24
25## Update Atreus to current code conventions
26
27* Duplicate include guards have bypassed the expected header processing behavior
28* All keymaps affected are recommended to remove duplication of `<keyboard>/config.h` to `<keyboard>/keymaps/<user>/config.h` and only provide overrides at the keymap level
29
30## Backport changes to keymap language files from ZSA fork
31
32* Fixes an issue in the `keymap_br_abnt2.h` file that includes the wrong source (`keymap_common.h` instead of `keymap.h`)
33* Updates the `keymap_swedish.h` file to be specific to swedish, and not just "nordic" in general.
34* Any keymaps using this will need to remove `NO_*` and replace it with `SE_*`.
35
36## Update repo to use LUFA as a git submodule
37
38* `/lib/LUFA` removed from the repo
39* LUFA set as a submodule, pointing to qmk/lufa
40* This should allow more flexibility with LUFA, and allow us to keep the sub-module up to date, a lot more easily. It was ~2 years out of date with no easy path to fix that. This prevents that from being an issue in the future
41
42## Migrating `ACTION_BACKLIGHT_*()` entries in `fn_actions` to `BL_` keycodes
43
44* `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
45* All keymaps using these actions have had the relevant `KC_FN*` keys replaced with the equivalent `BL_*` keys
46* If you currently use `KC_FN*` you will need to replace `fn_actions` with the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
47
48## Remove `KC_DELT` alias in favor of `KC_DEL`
49
50* `KC_DELT` was a redundant, undocumented alias for `KC_DELETE`
51* It has been removed and all its uses replaced with the more common `KC_DEL` alias
52* Around 90 keymaps (mostly for ErgoDox boards) have been modified as a result
diff --git a/docs/ChangeLog/20200229.md b/docs/ChangeLog/20200229.md
new file mode 100644
index 000000000..398fe01c0
--- /dev/null
+++ b/docs/ChangeLog/20200229.md
@@ -0,0 +1,75 @@
1# QMK Breaking Change - 2020 Feb 29 Changelog
2
3Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
4
5
6## Update ChibiOS/ChibiOS-Contrib/uGFX submodules
7
8* General Notes
9 * A `make git-submodule` may be required after pulling the latest QMK firmware code to update affected submodules to the upgraded revisions
10 * Enabling link-time-optimization (`LINK_TIME_OPTIMIZATION_ENABLE = yes`) should work on a lot more boards
11* Upgrade to ChibiOS ver19.1.3
12 * This will allow QMK to update to upstream ChibiOS a lot easier -- the old version was ~2 years out of date. Automated update scripts have been made available to simplify future upgrades.
13 * Includes improved MCU support and bugfixes
14 * ChibiOS revision is now included in Command output
15 * Timers should now be more accurate
16* Upgrade to newer ChibiOS-Contrib
17 * Also includes improved MCU support and bugfixes
18 * ChibiOS-Contrib revision is now included in Command output
19* Upgrade to newer uGFX
20 * Required in order to support updated ChibiOS
21
22
23## Fix ChibiOS timer overflow for 16-bit SysTick devices
24
25* On 16-bit SysTick devices, the timer subsystem in QMK was incorrectly dealing with overflow.
26 * When running at a 100000 SysTick frequency (possible on 16-bit devices, but uncommon), this overflow would occur after 0.65 seconds.
27* Timers are now correctly handling this overflow case and timing should now be correct on ChibiOS/ARM.
28
29
30## Update LUFA submodule
31
32* Updates the LUFA submodule to include updates from upstream (abcminiuser/lufa)
33* Includes some cleanup for QMK DFU generation
34
35
36## Encoder flip
37
38* Flips the encoder direction so that `clockwise == true` is for actually turning the knob clockwise
39* Adds `ENCODER_DIRECTION_FLIP` define, so that reversing the expected dirction is simple for users.
40* Cleans up documentation page for encoders
41
42
43## Adding support for `BACKLIGHT_ON_STATE` for hardware PWM backlight
44
45* Previously, the define only affected software PWM, and hardware PWM always assumed an N-channel MOSFET.
46* The hardware PWM backlight setup has been updated to respect this option.
47* The default "on" state has been changed to `1` - **this impacts all keyboards using software PWM backlight that do not define it explicitly**. If your keyboard's backlight is acting strange, it may have a P-channel MOSFET, and will need to have `#define BACKLIGHT_ON_STATE 0` added to the keyboard-level `config.h`. Please see the PR for more detailed information.
48
49
50## Migrating `ACTION_LAYER_TAP_KEY()` entries in `fn_actions` to `LT()` keycodes
51
52* `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
53* The end result of removing this obsolete feature should result in a decent reduction in firmware size and code complexity
54* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
55
56
57## Moving backlight keycode handling to `process_keycode/`
58
59* This refactors the backlight keycode logic to be clearer and more modular.
60* All backlight-related keycodes are now actioned in a single file.
61* The `ACTION_BACKLIGHT_*` macros have also been deleted. If you are still using these in a `fn_actions[]` block, please switch to using the backlight keycodes or functions directly.
62
63
64## Refactor Planck keymaps to use Layout Macros
65
66* Refactor Planck keymaps to use layout macros instead of raw matrix assignments
67* Makes keymaps revision-agnostic
68* Should reduce noise and errors in Travis CI logs
69
70
71## GON NerD codebase refactor
72
73* Splits the codebase for GON NerD 60 and NerdD TKL PCBs into two separate directories.
74* If your keymap is for a NerD 60 PCB, your `make` command is now `make gon/nerd60:<keymap>`.
75* If your keymap is for a NerD TKL PCB, your `make` command is now `make gon/nerdtkl:<keymap>`.
diff --git a/docs/ChangeLog/20200530.md b/docs/ChangeLog/20200530.md
new file mode 100644
index 000000000..9def9ae12
--- /dev/null
+++ b/docs/ChangeLog/20200530.md
@@ -0,0 +1,239 @@
1# QMK Breaking Change - 2020 May 30 Changelog
2
3Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
4
5The list of changes follows.
6
7
8## Core Changes
9
10### Converting V-USB usbdrv to a submodule
11
12[#8321](https://github.com/qmk/qmk_firmware/pull/8321) and [qmk_compiler#62](https://github.com/qmk/qmk_compiler/pull/62).
13
14These PRs move the V-USB driver code out of the qmk_firmware repository and into a submodule pointed at https://github.com/obdev/v-usb. This will make it easier to update the codebase if needed, while applying any potential QMK-specific modifications by forking it to the QMK GitHub organization.
15
16### Unify Tap Hold functions and documentation
17
18[#8348](https://github.com/qmk/qmk_firmware/pull/8348)
19
20Updates all of the per key tap-hold functions to pass the `keyrecord_t` structure, and include documentation changes.
21
22Any remaining versions or code outside of the main repo will need to be converted:
23| Old function | New Function |
24|------------------------------------------------------|---------------------------------------------------------------------------|
25|`uint16_t get_tapping_term(uint16_t keycode)` |`uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record)` |
26|`bool get_ignore_mod_tap_interrupt(uint16_t keycode)` |`bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record)` |
27
28### Python Required In The Build Process
29
30[#9000](https://github.com/qmk/qmk_firmware/pull/9000)
31
32This is the last release of QMK that will work without having Python 3.6 (or later) installed. If your environment is not fully setup you will get a warning instructing you to set it up.
33
34After the next breaking change you will not be able to build if `bin/qmk hello` does not work.
35
36### Upgrade from tinyprintf to mpaland/printf
37
38[#8269](https://github.com/qmk/qmk_firmware/pull/8269)
39
40- Provides debug functionality on ChibiOS/ARM that is more compliant than previous integrations.
41- Less maintenence, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
42- A `make git-submodule` may be required after pulling the latest QMK Firmware code to update to the new dependency.
43
44### Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup
45
46[#6480](https://github.com/qmk/qmk_firmware/pull/6480)
47
48- Changes `RGB_DISABLE_AFTER_TIMEOUT` to be based on milliseconds instead of ticks.
49- Includes a code cleanup, resulting in a savings of 100 bytes, depending on features used.
50- Fixed issues with timeouts / suspending at the wrong time not turning off all LEDs in some cases.
51
52The `RGB_DISABLE_AFTER_TIMEOUT` definition is now deprecated, and has been superseded by `RGB_DISABLE_TIMEOUT`. To use the new definition, rename `RGB_DISABLE_AFTER_TIMEOUT` to `RGB_DISABLE_TIMEOUT` in your `config.h` file, and multiply the value set by 1200.
53
54Before: `#define RGB_DISABLE_AFTER_TIMEOUT 100`
55After: `#define RGB_DISABLE_TIMEOUT 120000`
56
57### Switch to qmk forks for everything
58
59[#9019](https://github.com/qmk/qmk_firmware/pull/9019)
60
61Fork all QMK submodules to protect against upstream repositories disappearing.
62
63### code cleanup regarding deprecated macro PLAY_NOTE_ARRAY by replacing it with PLAY_SONG
64
65[#8484](https://github.com/qmk/qmk_firmware/pull/8484)
66
67Removes the deprecated `PLAY_NOTE_ARRAY` macro. References to it are replaced with `PLAY_SONG`, which references the same function.
68
69### fixing wrong configuration of AUDIO feature
70
71[#8903](https://github.com/qmk/qmk_firmware/pull/8903) and [#8974](https://github.com/qmk/qmk_firmware/pull/8974)
72
73`audio_avr.c` does not default to any pin; there has to be a #define XX_AUDIO in config.h at some level for Audio to actually work. Otherwise, the Audio code ends up cluttering the firmware, possibly breaking builds because the maximum allowed firmware size is exceeded.
74
75These changes fix this by disabling Audio on keyboards that have the feature misconfigured, and therefore non-functional.
76
77Also, add a compile-time error to alert the user to a missing pin-configuration (on AVR boards) when `AUDIO_ENABLE = yes` is set.
78
79
80## Keyboard Refactors
81
82### Migrating Lily58 to use split_common
83
84[#6260](https://github.com/qmk/qmk_firmware/pull/6260)
85
86Modifies the default firmware for Lily58 to use the `split_common` library, instead of including and depending on its own set of libraries for the following functionality:
87
88- SSD1306 display
89- i2c for OLED
90- Serial Communication
91
92This allows current lily58 firmware to advance with updates to the `split_common` library, which is shared with many other split keyboards.
93
94#### To migrate existing Lily58 firmware:
95
96[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-445ac369c8717dcd6fc6fc3630836fc1):
97- Remove `#define SSD1306OLED` from config.h
98
99
100[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7):
101- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
102- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
103- Alternatively, if you did not change the OLED code from that in `default`, you may find it easier to simply copy the [relevant section](https://github.com/qmk/qmk_firmware/blob/4ac310668501ae6786c711ecc8f01f62ddaa1c0b/keyboards/lily58/keymaps/default/keymap.c#L138-L172). Otherwise, the changes you need to make are as follows (sample change [here](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7R138-R173))
104- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L138-L141) the block
105```c
106#ifdef SSD1306OLED
107 iota_gfx_init(!has_usb()); // turns on the display
108#endif
109```
110- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
111```c
112oled_rotation_t oled_init_user(oled_rotation_t rotation) {
113 if (!is_keyboard_master())
114 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
115 return rotation;
116}
117```
118- Remove the functions `matrix_scan_user`, `matrix_update` and `iota_gfx_task_user`
119- Find/Replace `matrix_render_user(struct CharacterMatrix *matrix)` with `iota_gfx_task_user(void)`
120- Find/Replace `is_master` with `is_keyboard_master()`
121- For each instance of `matrix_write_ln(matrix, display_fn())`, rewrite it as `oled_write_ln(read_layer_state(), false);`
122- For each instance of `matrix_write(matrix, read_logo());`, replace with `oled_write(read_logo(), false);`
123
124### Refactor zinc to use split_common
125
126[#7114](https://github.com/qmk/qmk_firmware/pull/7114) and [#9171](https://github.com/qmk/qmk_firmware/pull/9171)
127
128* Refactor to use split_common and remove split codes under the zinc/revx/
129* Add - backlight RGB LED and/or underglow RGB LED option
130* Add - continuous RGB animations feature (between L and R halves)
131* Fix - keymap files to adapt to changes
132 * all authors of keymaps confirmed this PR
133* Update - documents and rules.mk
134
135### Refactor of TKC1800 to use common OLED code
136
137[#8472](https://github.com/qmk/qmk_firmware/pull/8472)
138
139Modifies the default firmware for TKC1800 to use the in-built I2C and OLED drivers, instead of including and depending on its own set of libraries for the following functionality:
140
141- SSD1306 display
142- i2c for OLED
143
144This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.
145
146#### To migrate existing TKC1800 firmware:
147
148[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-d10b26e676b4a55cbb00d71955116526):
149- Remove `#define SSD1306OLED` from config.h
150
151[Changes to `tkc1800.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-3b35bd30abe89c8110717c6972cd2cc5):
152- Add the following to avoid debug errors on HID_listen if the screen is not present
153```c
154void keyboard_pre_init_kb(void) {
155 setPinInputHigh(D0);
156 setPinInputHigh(D1);
157
158 keyboard_pre_init_user();
159}
160```
161
162[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-05a2a344ce27e4d045fe68520ccd4771):
163- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
164- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
165- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158) the block
166```c
167#ifdef SSD1306OLED
168 iota_gfx_init(!has_usb()); // turns on the display
169#endif
170```
171- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
172```c
173oled_rotation_t oled_init_user(oled_rotation_t rotation) {
174 if (!is_keyboard_master())
175 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
176 return rotation;
177}
178```
179- Remove the function `iota_gfx_task_user`
180
181### Split HHKB to ANSI and JP layouts and Add VIA support for each
182
183[#8582](https://github.com/qmk/qmk_firmware/pull/8582)
184
185- Splits the HHKB codebase into two separate folders `keyboards/hhkb/ansi` and `keyboards/hhkb/jp`.
186- Adds VIA Configurator support for both versions.
187
188#### Migrating existing HHKB keymaps
189
190- Remove any checks for the `HHKB_JP` definition
191 - All checks for this definition have been removed, and each version uses the source that is appropriate to that version.
192- Move the directory for your keymap into the appropriate `keymaps` directory
193 - `keyboards/hhkb/ansi/keymaps/` for ANSI HHKBs
194 - `keyboards/hhkb/jp/keymaps/` for HHKB JPs
195- Compile with the new keyboard names
196 - This PR changes the compilation instructions for the HHKB Alternate Controller. To compile firmware for this controller moving forward, use:
197 - `make hhkb/ansi` for ANSI-layout HHKBs
198 - `make hhkb/jp` for HHKB JP keyboards
199
200
201## Keyboard Moves
202
203- [#8412](https://github.com/qmk/qmk_firmware/pull/8412 "Changing board names to prevent confusion") by blindassassin111
204- [#8499](https://github.com/qmk/qmk_firmware/pull/8499 "Move the Keyboardio Model01 to a keyboardio/ subdir") by algernon
205- [#8830](https://github.com/qmk/qmk_firmware/pull/8830 "Move spaceman keyboards") by Spaceman (formerly known as Rionlion100)
206- [#8537](https://github.com/qmk/qmk_firmware/pull/8537 "Organizing my keyboards (plaid, tartan, ergoinu)") by hsgw
207
208Keyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.
209
210Old Name | New Name
211:----------------- | :-----------------
2122_milk | spaceman/2_milk
213at101_blackheart | at101_bh
214ergoinu | dm9records/ergoinu
215model01 | keyboardio/model01
216omnikey_blackheart | omnikey_bh
217pancake | spaceman/pancake
218plaid | dm9records/plaid
219tartan | dm9records/tartan
220z150_blackheart | z150_bh
221
222If you own one of these PCBs, please use the new names to compile your firmware moving forward.
223
224
225## Keycode Migration PRs
226
227[#8954](https://github.com/qmk/qmk_firmware/pull/8954 "Migrate `ACTION_LAYER_TOGGLE` to `TG()`"), [#8957](https://github.com/qmk/qmk_firmware/pull/8957 "Migrate `ACTION_MODS_ONESHOT` to `OSM()`"), [#8958](https://github.com/qmk/qmk_firmware/pull/8958 "Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()`"), [#8959](https://github.com/qmk/qmk_firmware/pull/8959 "Migrate `ACTION_LAYER_MODS` to `LM()`"), [#8968](https://github.com/qmk/qmk_firmware/pull/8968 "Migrate `ACTION_MODS_TAP_KEY` to `MT()`"), [#8977](https://github.com/qmk/qmk_firmware/pull/8977 "Migrate miscellaneous `fn_actions` entries"), and [#8979](https://github.com/qmk/qmk_firmware/pull/8979 "Migrate `ACTION_MODS_KEY` to chained mod keycodes")
228
229Authored by fauxpark, these pull requests remove references to deprecated TMK macros that have been superseded by native QMK keycodes.
230
231Old `fn_actions` action | New QMK keycode
232:---------------------- | :--------------
233`ACTION_DEFAULT_LAYER_SET(layer)` | `DF(layer)`
234`ACTION_LAYER_MODS(layer, mod)` | `LM(layer, mod)`
235`ACTION_LAYER_ONESHOT(mod)` | `OSL(mod)`
236`ACTION_LAYER_TOGGLE(layer)` | `TG(layer)`
237`ACTION_MODS_ONESHOT(mod)` | `OSM(mod)`
238`ACTION_MODS_TAP_KEY(mod, kc)` | `MT(mod, kc)`
239`ACTION_MODS_KEY(mod, kc)`<br>e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br>e.g. `LCTL(KC_0)`
diff --git a/docs/ChangeLog/20200829.md b/docs/ChangeLog/20200829.md
new file mode 100644
index 000000000..c6abed5b3
--- /dev/null
+++ b/docs/ChangeLog/20200829.md
@@ -0,0 +1,148 @@
1# QMK Breaking Change - 2020 Aug 29 Changelog
2
3Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
4
5
6## Changes Requiring User Action :id=changes-requiring-user-action
7
8### Relocated Keyboards :id=relocated-keyboards
9
10#### The Key Company project consolidation ([#9547](https://github.com/qmk/qmk_firmware/pull/9547))
11#### relocating boards by flehrad to flehrad/ folder ([#9635](https://github.com/qmk/qmk_firmware/pull/9635))
12
13Keyboards released by The Key Company and keyboards designed by flehrad have moved to vendor folders. If you own any of the keyboards listed below, please use the new names to compile your firmware moving forward.
14
15Old Name | New Name
16:--------------------- | :------------------
17candybar/lefty | tkc/candybar/lefty
18candybar/righty | tkc/candybar/righty
19m0lly | tkc/m0lly
20tkc1800 | tkc/tkc1800
21bigswitch | flehrad/bigswitch
22handwired/downbubble | flehrad/downbubble
23handwired/numbrero | flehrad/numbrero
24snagpad | flehrad/snagpad
25handwired/tradestation | flehrad/tradestation
26
27### Updated Keyboard Codebases :id=keyboard-updates
28
29#### Keebio RGB wiring update ([#7754](https://github.com/qmk/qmk_firmware/pull/7754))
30
31This pull request changes the configuration for Keebio split boards to use the same RGB strip wiring for each half, which provides the following improvements:
32
33* Easier wiring due to one fewer wire needed (the wire between left DOut to extra data pin) and the fact that wiring is the same for both halves.
34* RGB LEDs can be controlled by each half now instead of just master half.
35* Extra data line is freed up to allow for I2C usage instead of serial.
36
37If you have customized the value of `RGBLED_SPLIT` for your keymap, you will need to undefine it using `#undef RGBLED_SPLIT` before defining it to your customized value.
38
39This change affects:
40
41* BFO-9000
42* Fourier
43* Iris rev2
44* Levinson, revs. 1 and 2
45* Nyquist, revs. 1 and 2
46* Quefrency rev1
47* Viterbi, revs. 1 and 2
48
49### Changes to Core Functionality :id=core-updates
50
51* Bigger Combo index ([#9318](https://github.com/qmk/qmk_firmware/pull/9318))
52
53Allows the Combo feature to support more than 256 combos.
54
55Any fork that uses `process_combo_event` needs to update the function's first argument to `uint16_t`:
56
57* Old function: `void process_combo_event(uint8_t combo_index, bool pressed)`
58* New function: `void process_combo_event(uint16_t combo_index, bool pressed)`
59
60
61## Core Changes :id=core-changes
62
63### Fixes :id=core-fixes
64
65* Mousekeys: scrolling acceleration is no longer coupled to mouse movement acceleration ([#9174](https://github.com/qmk/qmk_firmware/pull/9174))
66* Keymap Extras: correctly assign Question Mark in Czech layout ([#9987](https://github.com/qmk/qmk_firmware/pull/9987))
67
68### Additions and Enhancements :id=core-additions
69
70* allow for WS2812 PWM to work on DMAMUX-capable devices ([#9471](https://github.com/qmk/qmk_firmware/pull/9471))
71 * Newer STM32 MCUs have a DMAMUX peripheral, which allows mapping of DMAs to different DMA streams, rather than hard-defining the target streams in silicon.
72 * Affects STM32L4+ devices, as well as the soon-to-be-supported-by-QMK STM32G4/H7 families.
73 * Tested on F303/Proton C (ChibiOS v19, non-DMAMUX), G474 (ChibiOS v20, with DMAMUX).
74* dual-bank STM32 bootloader support ([#8778](https://github.com/qmk/qmk_firmware/pull/8778) and [#9738](https://github.com/qmk/qmk_firmware/pull/9738))
75 * Adds support for STM32 dual-bank flash bootloaders, by toggling a GPIO during early init in order to charge an RC circuit attached to `BOOT0`.
76 * The main rationale behind this is that dual-bank STM32 devices unconditionally execute user-mode code, regardless of whether or not the user-mode code jumps to the bootloader. If either flash bank is valid (and `BOOT0` is low), then the built-in bootloader will skip any sort of DFU.
77 * This PR allows for the initialisation sequencing to charge the RC circuit based on the example circuit posted on Discord, effectively pulling `BOOT0` high before issuing the system reset. As the RC circuit takes a while to discharge, the system reset executes the ROM bootloader which subsequently sees `BOOT0` high, and starts executing the DFU routines.
78 * Tested with STM32L082 (with current QMK+current ChibiOS), and STM32G474 (against ChibiOS 20.x).
79* update Space Cadet and Tap Dance features to use Custom Tapping Term when appropriate ([#6259](https://github.com/qmk/qmk_firmware/pull/6259))
80 * For the Tap Dance feature, this completely removes the need for the `ACTION_TAP_DANCE_FN_ADVANCED_TIME` dance.
81* HID Joystick Interface ([#4226](https://github.com/qmk/qmk_firmware/pull/4226) and [#9949](https://github.com/qmk/qmk_firmware/pull/9949 "Fix Joystick Compile Issues"))
82 * This implements a joystick feature, including a joystick_task function called from TMK, specific keycodes for joystick buttons and a USB HID interface.
83 * Tested on V-USB backend and Proton C; compiles but untested on LUFA.
84 * In order to test, you have to add `JOYSTICK_ENABLE = yes` to your `rules.mk` and
85 ```c
86 #define JOYSTICK_BUTTON_COUNT 8
87 #define JOYSTICK_AXES_COUNT 2
88 ```
89 in your config.h.
90* Christmas RGB Underglow animation now fades between green and red ([#7648](https://github.com/qmk/qmk_firmware/pull/7648))
91 * `RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL` has been greatly decreased; please check your animation if you have customized this value.
92* layer state now initializes on startup ([#8318](https://github.com/qmk/qmk_firmware/pull/8318))
93 * This should produce more consistent behavior between the two functions and layer masks.
94* added support for HSV->RGB conversion without using CIE curve ([#9856](https://github.com/qmk/qmk_firmware/pull/9856))
95* added NOEEPROM functions for RGB Matrix ([#9487](https://github.com/qmk/qmk_firmware/pull/9487))
96 * Added eeprom_helpers for toggle, mode, sethsv, speed, similar to rgblight versions.
97 * Added set_speed function.
98 * Added helper functions, similar to those in rgblight, in order to add NOEEPROM versions of toggle, step, hue, sat, val, and speed.
99 * Minor: spelling correction for EEPROM in a debug message.
100* flashing firmware using `st-flash` utility from [STLink Tools](https://github.com/stlink-org/stlink) is now supported ([#9964](https://github.com/qmk/qmk_firmware/pull/9964))
101* add ability to dump all makefile variables for the specified target ([#8256](https://github.com/qmk/qmk_firmware/pull/8256))
102 * Adds a new subtarget to builds, `dump_vars`, which allows for printing out all the variables that make knows about, after all substitutions occur.
103 * Example: `make handwired/onekey/proton_c:default:dump_vars`
104* add ability to change the Auto Shift timeout in real time ([#8441](https://github.com/qmk/qmk_firmware/pull/8441))
105* added a timer implementation for backlight on ChibiOS ([#8291](https://github.com/qmk/qmk_firmware/pull/8291))
106* added a third endpoint to V-USB keyboards ([#9020](https://github.com/qmk/qmk_firmware/pull/9020))
107* added a method to read the OLED display buffer from user space ([#8777](https://github.com/qmk/qmk_firmware/pull/8777))
108* K-Type refactor ([#9864](https://github.com/qmk/qmk_firmware/pull/9864))
109 * The K-Type has been refactored to use QMK's native matrix scanning routine, and now has partial support for the RGB Matrix feature.
110* Joysticks can now be used without defining analog pins ([#10169](https://github.com/qmk/qmk_firmware/pull/10169))
111
112### Clean-ups and Optimizations :id=core-optimizations
113
114* iWRAP protocol removed ([#9284](https://github.com/qmk/qmk_firmware/pull/9284))
115* work begun for consolidation of ChibiOS platform files ([#8327](https://github.com/qmk/qmk_firmware/pull/8327) and [#9315](https://github.com/qmk/qmk_firmware/pull/9315))
116 * Start of the consolidation work to move the ChibiOS board definitions as well as the default set of configuration files for existing board definitions used by keyboards.
117 * Uses `/platforms/chibios` as previously discussed on discord.
118 * Consolidates the Proton C configs into the generic F303 definitions.
119 * Allows for defining a default set of `chconf.h`, `halconf.h`, and `mcuconf.h` files within the platform definition, which is able to be overridden by the keyboard directly, though include path ordering.
120 * Adds template `chconf.h`, `halconf.h`, `mcuconf.h`, and `board.h` that can be dropped into a keyboard directory, in order to override rather than replace the entire contents of the respective files.
121 * Removed Proton C QMK board definitions, falling back to ChibiOS board definitions with QMK overrides.
122* Various tidy-ups for USB descriptor code ([#9005](https://github.com/qmk/qmk_firmware/pull/9005))
123 * Renamed `keyboard_led_stats` in lufa.c and ChibiOS usb_main.c to `keyboard_led_state`, as well as `vusb_keyboard_leds`, for consistency
124 * Formatted CDC and MIDI descriptors better
125 * Removed `ENDPOINT_CONFIG` macro, it seems pointless and removes the need for endpoint address defines in the middle of the endpoint numbering enum
126 * Fixed (possibly?) V-USB `GET_REPORT` request handling. Not sure about this one, but the existing code appears to always return an empty report - now `send_keyboard` sets this variable to the current report, matching what the LUFA code does.
127* converted `CONSUMER2BLUEFRUIT()` and `CONSUMER2RN42()` macros to static inline functions ([#9055](https://github.com/qmk/qmk_firmware/pull/9055))
128* Additional cleanups for V-USB code ([#9310](https://github.com/qmk/qmk_firmware/pull/9310))
129 * Removing the UART stuff entirely, now that we have Console support. Also fixing up various other things; switching some `debug()` calls to `dprintf()`, moved `raw_hid_report` out of the way so that we can implement the shared endpoint stuff.
130* removed inclusion of `adafruit_ble.h` from `ssd1306.c` ([#9355](https://github.com/qmk/qmk_firmware/pull/9355))
131* `outputselect.c` is no longer compiled if Bluetooth is disabled ([#9356](https://github.com/qmk/qmk_firmware/pull/9356))
132* `analogRead()` deprecated in favor of `analogReadPin()` ([#9023](https://github.com/qmk/qmk_firmware/pull/9023))
133* forcibly disable NKRO on V-USB controllers ([#9054](https://github.com/qmk/qmk_firmware/pull/9054))
134* removed warning if running backlight on STM32F072 ([#10040](https://github.com/qmk/qmk_firmware/pull/10040))
135* removed unused CORTEX_VTOR_INIT rules.mk option ([#10053](https://github.com/qmk/qmk_firmware/pull/10053))
136* improved handling for enabling Link Time Optimization ([#9832](https://github.com/qmk/qmk_firmware/pull/9832))
137* streamline rules for supporting Kiibohd bootloader ([#10129](https://github.com/qmk/qmk_firmware/pull/10129))
138* Define `STM32_DMA_REQUIRED` when using DMA-based WS2812 driver on STM32 ([#10127](https://github.com/qmk/qmk_firmware/pull/10127))
139* fix DMA stream ID calculation in ws2812_pwm ([#10008](https://github.com/qmk/qmk_firmware/pull/10008))
140* remove support for Adafruit EZ Key Bluetooth controller ([#10103](https://github.com/qmk/qmk_firmware/pull/10103))
141
142
143## QMK Infrastructure and Internals :id=qmk-internals
144
145* Attempt to fix CI for non-master branches. ([#9308](https://github.com/qmk/qmk_firmware/pull/9308))
146 * Actually fetch the branch we're attempting to compare against.
147* Run `qmk cformat` on `develop` branch ([#9501](https://github.com/qmk/qmk_firmware/pull/9501))
148* minor refactor of Bluetooth API ([#9905](https://github.com/qmk/qmk_firmware/pull/9905))
diff --git a/docs/ChangeLog/20201128.md b/docs/ChangeLog/20201128.md
new file mode 100644
index 000000000..444132029
--- /dev/null
+++ b/docs/ChangeLog/20201128.md
@@ -0,0 +1,150 @@
1# QMK Breaking Change - 2020 Nov 28 Changelog
2
3Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
4
5
6## Changes Requiring User Action :id=changes-requiring-user-action
7
8### Relocated Keyboards :id=relocated-keyboards
9
10#### Reduce Helix keyboard build variation ([#8669](https://github.com/qmk/qmk_firmware/pull/8669))
11
12The build commands for the Helix keyboard are:
13
14```
15make <helix_build_name>:<keymap_name>
16```
17
18For `<helix_build_name>`, specify the one in the rightmost column of the table below, such as `helix`,` helix/pico`.
19
20| before Oct 17 2019 | Oct 17 2019 | Mar 10 2020 | Nov 28 2020 |
21| ---------------------|-------------------------|-------------------------| ------------------------|
22| helix/rev1 | helix/rev1 | helix/rev1 | helix/rev1 |
23| helix/pico | helix/pico | helix/pico | helix/pico |
24| | helix/pico/back | helix/pico/back | helix/pico/back |
25| | helix/pico/under | helix/pico/under | helix/pico/under |
26| | | helix/pico/sc | -- |
27| | | helix/pico/sc/back | helix/pico/sc |
28| | | helix/pico/sc/under | -- |
29| helix/rev2 (=helix) | helix/rev2 (=helix) | helix/rev2 (=helix) | -- |
30| | helix/rev2/back | helix/rev2/back | -- |
31| | helix/rev2/back/oled | helix/rev2/back/oled | ( --> helix/rev2/back) |
32| | helix/rev2/oled | helix/rev2/oled | helix/rev2 (=helix) |
33| | helix/rev2/oled/back | helix/rev2/oled/back | helix/rev2/back |
34| | helix/rev2/oled/under | helix/rev2/oled/under | helix/rev2/under |
35| | | helix/rev2/sc | -- |
36| | | helix/rev2/sc/back | -- |
37| | | helix/rev2/sc/oled | -- |
38| | | helix/rev2/sc/oledback | helix/rev2/sc |
39| | | helix/rev2/sc/oledunder | -- |
40| | | helix/rev2/sc/under | -- |
41| | helix/rev2/under | helix/rev2/under | -- |
42| | helix/rev2/under/oled | helix/rev2/under/oled | ( --> helix/rev2/under) |
43
44#### Update the Speedo firmware for v3.0 ([#10657](https://github.com/qmk/qmk_firmware/pull/10657))
45
46The Speedo keyboard has moved to `cozykeys/speedo/v2` as the designer prepares to release the Speedo v3.0.
47
48| Previous Name | New Name |
49| :------------ | :------------------------- |
50| speedo | cozykeys/speedo/v2 |
51| -- | cozykeys/speedo/v3 **new** |
52
53#### Maartenwut/Maarten name change to evyd13/Evy ([#10274](https://github.com/qmk/qmk_firmware/pull/10274))
54
55Maartenwut has rebranded as @evyd13, and all released Maartenwut boards have moved.
56
57| Previous Name | New Name |
58| :--------------------- | :----------------- |
59| maartenwut/atom47/rev2 | evyd13/atom47/rev2 |
60| maartenwut/atom47/rev3 | evyd13/atom47/rev3 |
61| maartenwut/eon40 | evyd13/eon40 |
62| maartenwut/eon65 | evyd13/eon65 |
63| maartenwut/eon75 | evyd13/eon75 |
64| maartenwut/eon87 | evyd13/eon87 |
65| maartenwut/eon95 | evyd13/eon95 |
66| maartenwut/gh80_1800 | evyd13/gh80_1800 |
67| maartenwut/gh80_3700 | evyd13/gh80_3700 |
68| maartenwut/minitomic | evyd13/minitomic |
69| maartenwut/mx5160 | evyd13/mx5160 |
70| maartenwut/nt660 | evyd13/nt660 |
71| maartenwut/omrontkl | evyd13/omrontkl |
72| maartenwut/plain60 | evyd13/plain60 |
73| maartenwut/pockettype | evyd13/pockettype |
74| maartenwut/quackfire | evyd13/quackfire |
75| maartenwut/solheim68 | evyd13/solheim68 |
76| maartenwut/ta65 | evyd13/ta65 |
77| maartenwut/wasdat | evyd13/wasdat |
78| maartenwut/wasdat_code | evyd13/wasdat_code |
79| maartenwut/wonderland | evyd13/wonderland |
80
81#### Xelus Valor and Dawn60 Refactors ([#10512](https://github.com/qmk/qmk_firmware/pull/10512), [#10584](https://github.com/qmk/qmk_firmware/pull/10584))
82
83The Valor and Dawn60 keyboards by Xelus22 both now require their revisions to be specified when compiling.
84
85| Previous Name | New Name |
86| :------------ | :---------------- |
87| xelus/dawn60 | xelus/dawn60/rev1 |
88| xelus/valor | xelus/valor/rev1 |
89
90
91### Updated Keyboard Codebases :id=keyboard-updates
92
93#### AEboards EXT65 Refactor ([#10820](https://github.com/qmk/qmk_firmware/pull/10820))
94
95The EXT65 codebase has been reworked so keymaps can be used with either revision.
96
97
98## Core Changes :id=core-changes
99
100### Fixes :id=core-fixes
101
102* Reconnect the USB if users wake up a computer from the keyboard to restore the USB state ([#10088](https://github.com/qmk/qmk_firmware/pull/10088))
103* Fix cursor position bug in oled_write_raw functions ([#10800](https://github.com/qmk/qmk_firmware/pull/10800))
104
105### Additions and Enhancements :id=core-additions
106
107* Allow MATRIX_ROWS to be greater than 32 ([#10183](https://github.com/qmk/qmk_firmware/pull/10183))
108* Add support for soft serial to ATmega32U2 ([#10204](https://github.com/qmk/qmk_firmware/pull/10204))
109* Allow direct control of MIDI velocity value ([#9940](https://github.com/qmk/qmk_firmware/pull/9940))
110* Joystick 16-bit support ([#10439](https://github.com/qmk/qmk_firmware/pull/10439))
111* Allow encoder resolutions to be set per encoder ([#10259](https://github.com/qmk/qmk_firmware/pull/10259))
112* Share button state from mousekey to pointing_device ([#10179](https://github.com/qmk/qmk_firmware/pull/10179))
113* Add advanced/efficient RGB Matrix Indicators ([#8564](https://github.com/qmk/qmk_firmware/pull/8564))
114* OLED display update interval support ([#10388](https://github.com/qmk/qmk_firmware/pull/10388))
115* Per-Key Retro Tapping ([#10622](https://github.com/qmk/qmk_firmware/pull/10622))
116* Allow backlight duty cycle limit ([#10260](https://github.com/qmk/qmk_firmware/pull/10260))
117* Add step sequencer feature ([#9703](https://github.com/qmk/qmk_firmware/pull/9703))
118* Added `add_oneshot_mods` & `del_oneshot_mods` ([#10549](https://github.com/qmk/qmk_firmware/pull/10549))
119* Add AT90USB support for serial.c ([#10706](https://github.com/qmk/qmk_firmware/pull/10706))
120* Auto shift: support repeats and early registration (#9826)
121
122### Clean-ups and Optimizations :id=core-optimizations
123
124* Haptic and solenoid cleanup ([#9700](https://github.com/qmk/qmk_firmware/pull/9700))
125* XD75 cleanup ([#10524](https://github.com/qmk/qmk_firmware/pull/10524))
126* Minor change to behavior allowing display updates to continue between task ticks ([#10750](https://github.com/qmk/qmk_firmware/pull/10750))
127* Change some GPIO manipulations in matrix.c to be atomic ([#10491](https://github.com/qmk/qmk_firmware/pull/10491))
128* combine repeated lines of code for ATmega32U2, ATmega16U2, ATmega328 and ATmega328P ([#10837](https://github.com/qmk/qmk_firmware/pull/10837))
129* Remove references to HD44780 ([#10735](https://github.com/qmk/qmk_firmware/pull/10735))
130
131
132## QMK Infrastructure and Internals :id=qmk-internals
133
134* Add ability to build a subset of all keyboards based on platform. ([#10420](https://github.com/qmk/qmk_firmware/pull/10420))
135* Initialise EEPROM drivers at startup, instead of upon first execution ([#10438](https://github.com/qmk/qmk_firmware/pull/10438))
136* Make bootloader_jump weak for ChibiOS ([#10417](https://github.com/qmk/qmk_firmware/pull/10417))
137* Support for STM32 GPIOF,G,H,I,J,K ([#10206](https://github.com/qmk/qmk_firmware/pull/10206))
138* Add milc as a dependency and remove the installed milc ([#10563](https://github.com/qmk/qmk_firmware/pull/10563))
139* ChibiOS upgrade: early init conversions ([#10214](https://github.com/qmk/qmk_firmware/pull/10214))
140* ChibiOS upgrade: configuration file migrator ([#9952](https://github.com/qmk/qmk_firmware/pull/9952))
141* Add definition based on currently-selected serial driver. ([#10716](https://github.com/qmk/qmk_firmware/pull/10716))
142* Allow for modification of output RGB values when using rgblight/rgb_matrix. ([#10638](https://github.com/qmk/qmk_firmware/pull/10638))
143* Allow keyboards/keymaps to execute code at each main loop iteration ([#10530](https://github.com/qmk/qmk_firmware/pull/10530))
144* qmk cformat ([#10767](https://github.com/qmk/qmk_firmware/pull/10767))
145* Add a Make variable to easily enable DEBUG_MATRIX_SCAN_RATE on the command line ([#10824](https://github.com/qmk/qmk_firmware/pull/10824))
146* update Chibios OS USB for the OTG driver ([#8893](https://github.com/qmk/qmk_firmware/pull/8893))
147* Fixup version.h writing when using `SKIP_VERSION=yes` ([#10972](https://github.com/qmk/qmk_firmware/pull/10972), [#10974](https://github.com/qmk/qmk_firmware/pull/10974))
148* Rename ledmatrix.h to match .c file ([#7949](https://github.com/qmk/qmk_firmware/pull/7949))
149* Split RGB_MATRIX_ENABLE into _ENABLE and _DRIVER ([#10231](https://github.com/qmk/qmk_firmware/pull/10231))
150* Split LED_MATRIX_ENABLE into _ENABLE and _DRIVER ([#10840](https://github.com/qmk/qmk_firmware/pull/10840))
diff --git a/docs/ChangeLog/20210227.md b/docs/ChangeLog/20210227.md
new file mode 100644
index 000000000..cb34edfd9
--- /dev/null
+++ b/docs/ChangeLog/20210227.md
@@ -0,0 +1,169 @@
1# QMK Breaking Changes - 2021 February 27 Changelog
2
3## Changes Requiring User Action
4
5The following keyboards have had their source moved within QMK:
6
7Old Keyboard Name | New Keyboard Name
8:---------------- | :----------------
9bear_65 | jacky_studio/bear_65
10s7_elephant/rev1 | jacky_studio/s7_elephant/rev1
11s7_elephant/rev2 | jacky_studio/s7_elephant/rev2
12aplx6 | aplyard/aplx6/rev1
13southpaw75 | fr4/southpaw75
14
15The [Aplyard Aplx6 rev2](https://github.com/qmk/qmk_firmware/tree/0.12.0/keyboards/aplyard/aplx6/rev1) and the [FR4Boards Unix60](https://github.com/qmk/qmk_firmware/tree/0.12.0/keyboards/fr4/unix60) have also been added as part of these changes.
16
17Additionally, the `handwired/bluepill/bluepill70` keyboard has been removed.
18
19## Core Changes
20
21### ChibiOS Update and Config Migration
22
23QMK's ChibiOS and ChibiOS-Contrib submodules have been updated to version 20.3.2.
24
25Along with this, QMK now provides default configuration files for all commonly-supported ARM microcontrollers running on ChibiOS. As such, keyboards are now only required to define settings which differ from the defaults, thereby reducing the size of pull requests for keyboards running atop ChibiOS.
26
27### QMK Infrastructure and Internals
28
29Python is now required to build QMK. The minimum Python version has been increased to 3.7.
30
31The power of `info.json` has been massively expanded. Most keyboard parameters can now be expressed in `info.json` instead of `config.h`/`rules.mk`. This should make maintaining keyboards easier, and will enable tooling that can allow non-technical users to add and maintain QMK keyboards without writing any code.
32
33To ease migration a new command has been provided, `qmk generate-info-json -kb <keyboard>`. You can use this command to generate a complete `info.json` file for a keyboard and then remove the duplicate information from `config.h` and `rules.mk`.
34
35Detailed example showing how to generate a new info.json and identify duplicate keys:
36
37```
38user@hostname:~/qmk_firmware/keyboards/lets_split:0$ qmk generate-info-json > new-info.json
39user@hostname:~/qmk_firmware/keyboards/lets_split:0$ mv new-info.json info.json
40user@hostname:~/qmk_firmware/keyboards/lets_split:0$ qmk info
41⚠ lets_split/rev2: DEBOUNCE in config.h is overwriting debounce in info.json
42⚠ lets_split/rev2: DEVICE_VER in config.h is overwriting usb.device_ver in info.json
43⚠ lets_split/rev2: DIODE_DIRECTION in config.h is overwriting diode_direction in info.json
44⚠ lets_split/rev2: MANUFACTURER in config.h is overwriting manufacturer in info.json
45⚠ lets_split/rev2: RGB_DI_PIN in config.h is overwriting rgblight.pin in info.json
46⚠ lets_split/rev2: RGBLED_NUM in config.h is overwriting rgblight.led_count in info.json
47⚠ lets_split/rev2: PRODUCT_ID in config.h is overwriting usb.pid in info.json
48⚠ lets_split/rev2: VENDOR_ID in config.h is overwriting usb.vid in info.json
49⚠ lets_split/rev2: Matrix pins are specified in both info.json and config.h, the config.h values win.
50⚠ lets_split/rev2: LAYOUTS in rules.mk is overwriting community_layouts in info.json
51⚠ lets_split/rev2: Feature bootmagic is specified in both info.json and rules.mk, the rules.mk value wins.
52⚠ lets_split/rev2: Feature mousekey is specified in both info.json and rules.mk, the rules.mk value wins.
53⚠ lets_split/rev2: Feature extrakey is specified in both info.json and rules.mk, the rules.mk value wins.
54⚠ lets_split/rev2: Feature console is specified in both info.json and rules.mk, the rules.mk value wins.
55⚠ lets_split/rev2: Feature command is specified in both info.json and rules.mk, the rules.mk value wins.
56⚠ lets_split/rev2: Feature nkro is specified in both info.json and rules.mk, the rules.mk value wins.
57⚠ lets_split/rev2: Feature backlight is specified in both info.json and rules.mk, the rules.mk value wins.
58⚠ lets_split/rev2: Feature midi is specified in both info.json and rules.mk, the rules.mk value wins.
59⚠ lets_split/rev2: Feature audio is specified in both info.json and rules.mk, the rules.mk value wins.
60⚠ lets_split/rev2: Feature unicode is specified in both info.json and rules.mk, the rules.mk value wins.
61⚠ lets_split/rev2: Feature bluetooth is specified in both info.json and rules.mk, the rules.mk value wins.
62⚠ lets_split/rev2: Feature rgblight is specified in both info.json and rules.mk, the rules.mk value wins.
63⚠ lets_split/rev2: Feature sleep_led is specified in both info.json and rules.mk, the rules.mk value wins.
64Keyboard Name: Let's Split
65Manufacturer: Wootpatoot
66Website:
67Maintainer: QMK Community
68Keyboard Folder: lets_split/rev2
69Layouts: LAYOUT, LAYOUT_ortho_4x12
70Size: 13 x 4
71Processor: atmega32u4
72Bootloader: caterina
73```
74
75## Detailed Change List
76
77### Changes Requiring User Action
78
79* Refactor Jacky's boards (Bear65 and S7 Elephant) ([#10528](https://github.com/qmk/qmk_firmware/pull/10528), [#11981](https://github.com/qmk/qmk_firmware/pull/11981))
80* Remove handwired/bluepill ([#11415](https://github.com/qmk/qmk_firmware/pull/11415))
81* Aplyard Aplx6 Added rev2 & move rev1+rev2 to parent folder ([#10973](https://github.com/qmk/qmk_firmware/pull/10973))
82* added `unix60`, moved together with `southpaw75` into `fr4` folder ([#11195](https://github.com/qmk/qmk_firmware/pull/11195))
83
84### Fixes
85
86* GCC 10 can now compile Drop Alt firmware ([#9485](https://github.com/qmk/qmk_firmware/pull/9485))
87* Fix compiling on `develop` branch ([#11409](https://github.com/qmk/qmk_firmware/pull/11409))
88* Fix broken keyboards and keymaps ([#11412](https://github.com/qmk/qmk_firmware/pull/11412), [#11427](https://github.com/qmk/qmk_firmware/pull/11427), [#11448](https://github.com/qmk/qmk_firmware/pull/11448), [#11447](https://github.com/qmk/qmk_firmware/pull/11447), [#11473](https://github.com/qmk/qmk_firmware/pull/11473), [#11584](https://github.com/qmk/qmk_firmware/pull/11584), [#11600](https://github.com/qmk/qmk_firmware/pull/11600))
89* Fixed up build dependencies so that generated files are made available before compiling any object files ([#11435](https://github.com/qmk/qmk_firmware/pull/11435))
90* Formatting fixes ([`378edd9`](https://github.com/qmk/qmk_firmware/commit/378edd9491f2ab0d3d8a970c9a8e64bc03ca15cf), [#11594](https://github.com/qmk/qmk_firmware/pull/11594), [`27749e1`](https://github.com/qmk/qmk_firmware/commit/27749e1c967c02c05e62a89a0ae2776dd7e5158c))
91* Include `stdbool.h` in `uart.h` to fix compiler errors ([#11728](https://github.com/qmk/qmk_firmware/pull/11728))
92* Decouple USB events from the USB interrupt handler in ChibiOS ([#10437](https://github.com/qmk/qmk_firmware/pull/10437))
93 * Fixes an issue while using Backlight and External EEPROM at the same time that would cause the MCU to lock up.
94* Address wake from sleep instability ([#11450](https://github.com/qmk/qmk_firmware/pull/11450))
95* Fix pressing media key on a momentarily activated layer may lead to missing key up events ([#11162](https://github.com/qmk/qmk_firmware/pull/11162))
96* Fix an RGB initialisation bug on Massdrop keyboards ([#12022](https://github.com/qmk/qmk_firmware/pull/12022))
97* Fix file encoding errors on Windows, and layouts not correctly merging into info.json ([#12039](https://github.com/qmk/qmk_firmware/pull/12039))
98
99### Additions and Enhancements
100
101* Allow configuration of serial USART timeout ([#11057](https://github.com/qmk/qmk_firmware/pull/11057))
102* Added Sync Timer feature for Split Common keyboards ([#10997](https://github.com/qmk/qmk_firmware/pull/10997))
103* Add modifier state to the Split Common transport ([#10400](https://github.com/qmk/qmk_firmware/pull/10400))
104* Add Pix keyboard by sendz (`sendyyeah/pix`) ([#11154](https://github.com/qmk/qmk_firmware/pull/11154))
105* Implement option for kinetic mouse movement algorithm for mouse keys ([#6739](https://github.com/qmk/qmk_firmware/pull/6739))
106* Improved Language Specific Keycodes for US International and Extended Layouts ([#11307](https://github.com/qmk/qmk_firmware/pull/11307))
107* Modified `QWIIC_ENABLE` in `rules.mk` to be yes/no choice, adding `QWIIC_DRIVERS` to allow for inclusion of specific drivers ([#11426](https://github.com/qmk/qmk_firmware/pull/11426))
108* Allow AVR-based keyboards to override the `bootloader_jump` function ([#11418](https://github.com/qmk/qmk_firmware/pull/11418))
109* Refine RGBLight Twinkle effect to be smoother (use breathing curve) ([#11350](https://github.com/qmk/qmk_firmware/pull/11350))
110* Keep track of last matrix activity ([#10730](https://github.com/qmk/qmk_firmware/pull/10730), [`ab375d3`](https://github.com/qmk/qmk_firmware/commit/ab375d3d075c105f09a1ddd0e155f178225518bc), [#11552](https://github.com/qmk/qmk_firmware/pull/11552))
111* fix `matrix_io_delay()` timing in `quantum/matrix.c` ([#9603](https://github.com/qmk/qmk_firmware/pull/9603))
112* Keep track of encoder activity ([#11595](https://github.com/qmk/qmk_firmware/pull/11595))
113* Backport ChibiOS Audio changes from ZSA ([#11687](https://github.com/qmk/qmk_firmware/pull/11687))
114* Add support for 8 buttons to mouse report ([#10807](https://github.com/qmk/qmk_firmware/pull/10807))
115* Allow `post_config.h` to be implemented in userspace ([#11519](https://github.com/qmk/qmk_firmware/pull/11519))
116* Adds AT90USB162 support ([#11570](https://github.com/qmk/qmk_firmware/pull/11570))
117* Stop sounds when suspended ([#11553](https://github.com/qmk/qmk_firmware/pull/11553))
118* Revamp spidey3 userspace and keymaps ([#11768](https://github.com/qmk/qmk_firmware/pull/11768))
119* Add support for analog USBPD on STM32G4xx ([#11824](https://github.com/qmk/qmk_firmware/pull/11824))
120* Master matrix can now be transported to the slave side in Split Common keyboards ([#11046](https://github.com/qmk/qmk_firmware/pull/11046))
121* RGBLight: Allow configurable default settings ([#11912](https://github.com/qmk/qmk_firmware/pull/11912))
122* Add `tap_code_delay(code, delay)` ([#11913](https://github.com/qmk/qmk_firmware/pull/11913), [#11938](https://github.com/qmk/qmk_firmware/pull/11938))
123
124### Clean-ups and Optimizations
125
126* Fix duplicate `I2C_KEYMAP_START` define ([#11237](https://github.com/qmk/qmk_firmware/pull/11237))
127* Rewrite APA102 support for RGBLight ([#10894](https://github.com/qmk/qmk_firmware/pull/10894))
128* Update ADB Protocol implementation in TMK Core ([#11168](https://github.com/qmk/qmk_firmware/pull/11168))
129* Remove unused `action_get_macro()` usages in user files ([#11165](https://github.com/qmk/qmk_firmware/pull/11165))
130* Remove `QMK_KEYBOARD_CONFIG_H` ([#11576](https://github.com/qmk/qmk_firmware/pull/11576))
131* Remove duplicated housekeeping in `arm_atsam` ([#11672](https://github.com/qmk/qmk_firmware/pull/11672))
132* UART driver refactor ([#11637](https://github.com/qmk/qmk_firmware/pull/11637))
133* Move `transport.c` to `QUANTUM_LIB_SRC` ([#11751](https://github.com/qmk/qmk_firmware/pull/11751))
134* Remove `MIDI_ENABLE_STRICT` from user keymaps ([#11750](https://github.com/qmk/qmk_firmware/pull/11750))
135* Remove legacy print backward compatiblitly ([#11805](https://github.com/qmk/qmk_firmware/pull/11805))
136* Migrate mousekey to quantum ([#11804](https://github.com/qmk/qmk_firmware/pull/11804))
137* remove deprecated `qmk json-keymap` ([#11823](https://github.com/qmk/qmk_firmware/pull/11823))
138* Remove FAUXCLICKY feature (deprecated) ([#11829](https://github.com/qmk/qmk_firmware/pull/11829))
139* Refactor platform logic within `print.h` ([#11863](https://github.com/qmk/qmk_firmware/pull/11863))
140* Audio system overhaul ([#11820](https://github.com/qmk/qmk_firmware/pull/11820))
141* Output selection: Remove "USB and BT" option for Bluetooth ([#11940](https://github.com/qmk/qmk_firmware/pull/11940))
142* `tmk_core/common/action.c`: refactor for code size; merge multiple `case`s into one ([#11943](https://github.com/qmk/qmk_firmware/pull/11943))
143* Remove rules and settings from user keymaps that are already defined at keyboard level ([#11966](https://github.com/qmk/qmk_firmware/pull/11966))
144
145### QMK Infrastructure and Internals
146
147* bump to python 3.7 ([#11408](https://github.com/qmk/qmk_firmware/pull/11408))
148* `develop` branch is now formatted as part of CI tasks ([#11893](https://github.com/qmk/qmk_firmware/pull/11893), [#11905](https://github.com/qmk/qmk_firmware/pull/11905), [#11907](https://github.com/qmk/qmk_firmware/pull/11907), [#11928](https://github.com/qmk/qmk_firmware/pull/11928), [#11936](https://github.com/qmk/qmk_firmware/pull/11936))
149* Configure keyboard matrix from info.json ([#10817](https://github.com/qmk/qmk_firmware/pull/10817))
150* Validate our JSON data using json_schema ([#11101](https://github.com/qmk/qmk_firmware/pull/11101))
151* Use the schema to eliminate custom code ([#11108](https://github.com/qmk/qmk_firmware/pull/11108))
152* Add support for specifying BOARD in `info.json` ([#11492](https://github.com/qmk/qmk_firmware/pull/11492))
153* Document how to add data driven configurations ([#11502](https://github.com/qmk/qmk_firmware/pull/11502))
154* Process info.json rules ahead of userspace rules ([#11542](https://github.com/qmk/qmk_firmware/pull/11542))
155* Remove duplicate manufacturer definitions ([#11544](https://github.com/qmk/qmk_firmware/pull/11544))
156* Update list of MCUs in `keyboard.jsonschema` to mirror `qmk.constants.py` ([#11688](https://github.com/qmk/qmk_firmware/pull/11688))
157* Create a system to map between `info.json` and `config.h`/`rules.mk` ([#11548](https://github.com/qmk/qmk_firmware/pull/11548))
158* Make LAYOUT parsing more robust ([#12000](https://github.com/qmk/qmk_firmware/pull/12000))
159
160
161### ChibiOS Update and Config Migration
162
163* Add board specific to Proton-C, with usual defaults turned on to match Pro-Micro ([#10976](https://github.com/qmk/qmk_firmware/pull/10976))
164* Disable almost all ChibiOS subsystems in default configs ([#11111](https://github.com/qmk/qmk_firmware/pull/11111))
165* Config Migrations ([#10418](https://github.com/qmk/qmk_firmware/pull/10418), [#11123](https://github.com/qmk/qmk_firmware/pull/11123), [#11261](https://github.com/qmk/qmk_firmware/pull/11261), [#11413](https://github.com/qmk/qmk_firmware/pull/11413), [#11414](https://github.com/qmk/qmk_firmware/pull/11414), [#11495](https://github.com/qmk/qmk_firmware/pull/11495), [#11504](https://github.com/qmk/qmk_firmware/pull/11504), [#11529](https://github.com/qmk/qmk_firmware/pull/11529), [#11588](https://github.com/qmk/qmk_firmware/pull/11588), [#11598](https://github.com/qmk/qmk_firmware/pull/11598), [#11607](https://github.com/qmk/qmk_firmware/pull/11607), [#11617](https://github.com/qmk/qmk_firmware/pull/11617), [#11620](https://github.com/qmk/qmk_firmware/pull/11620), [#11630](https://github.com/qmk/qmk_firmware/pull/11630), [#11646](https://github.com/qmk/qmk_firmware/pull/11646), [#11689](https://github.com/qmk/qmk_firmware/pull/11689), [#11846](https://github.com/qmk/qmk_firmware/pull/11846), [#11927](https://github.com/qmk/qmk_firmware/pull/11927), [#12001](https://github.com/qmk/qmk_firmware/pull/12001))
166* Disable subsystems repo-wide ([#11449](https://github.com/qmk/qmk_firmware/pull/11449))
167* Leftover early initialisation conversions ([#11615](https://github.com/qmk/qmk_firmware/pull/11615))
168* Fix up comments showing how to execute config migration ([#11621](https://github.com/qmk/qmk_firmware/pull/11621))
169* Add STM32G431 and STM32G474 board definitions ([#11793](https://github.com/qmk/qmk_firmware/pull/11793))
diff --git a/docs/ChangeLog/20210529.md b/docs/ChangeLog/20210529.md
new file mode 100644
index 000000000..2feeed643
--- /dev/null
+++ b/docs/ChangeLog/20210529.md
@@ -0,0 +1,227 @@
1# QMK Breaking Changes - 2021 May 29 Changelog
2
3## Notable Changes :id=notable-changes
4
5### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common
6
7Split boards can now use RGB Matrix without defining a custom matrix.
8
9### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support
10
11Added support for MK66F18 (Teensy 3.6) microcontroller.
12
13### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console
14
15A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
16
17### Improved command: qmk config :id=improve-command-qmk-config
18
19We've updated the `qmk config` command to show only the configuration items you have actually set. You can now display (almost) all of the available configuration options, along with their default values, using `qmk config -a`.
20
21### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) :id=led-matrix-improvements
22
23LED Matrix has been improved with effects, CIE1931 curves, and a task system.
24
25## Changes Requiring User Action :id=changes-requiring-user-action
26
27### Updated Keyboard Codebases :id=updated-keyboard-codebases
28
29* Durgod keyboard refactor in preparation for adding additional durgod keyboards ([#11978](https://github.com/qmk/qmk_firmware/pull/11978))
30* Updated Function96 with V2 files and removed chconf.h and halconf.h ([#12613](https://github.com/qmk/qmk_firmware/pull/12613))
31* [Keyboard] updated a vendor name / fixed minor keymap issues ([#12881](https://github.com/qmk/qmk_firmware/pull/12881))
32* [Keyboard] Corne - Remove legacy revision support ([#12226](https://github.com/qmk/qmk_firmware/pull/12226))
33
34The following keyboards have had their source moved within QMK:
35
36Old Keyboard Name | New Keyboard Name
37:---------------- | :----------------
38crkbd/rev1/common | crkbd/rev1
39function96 | function96/v1
40nckiibs/flatbread60 | delikeeb/flatbread60
41nckiibs/vaguettelite | delikeeb/vaguettelite
42nckiibs/vanana/rev1 | delikeeb/vanana/rev1
43nckiibs/vanana/rev2 | delikeeb/vanana/rev2
44nckiibs/vaneela | delikeeb/vaneela
45nckiibs/vaneelaex | delikeeb/vaneelaex
46nckiibs/waaffle/rev3/elite_c | delikeeb/waaffle/rev3/elite_c
47nckiibs/waaffle/rev3/pro_micro | delikeeb/waaffle/rev3/pro_micro
48
49The [Function96 V2](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/function96/v2) has also been added as part of these changes.
50
51The codebase for the [Durgod K320](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/durgod/k320) has been reworked in anticipation of additional Durgod keyboards gaining QMK support.
52
53Additionally, the `crkbd/rev1/legacy` keyboard has been removed.
54
55### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) :id=bootmagic-deprecation-and-refactor
56
57QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
58
59This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `BOOTMAGIC_ENABLE = yes` enables Bootmagic Lite instead of full Bootmagic.
60
61If attempts to use Bootmagic functionality result in unexpected behavior, check your `rules.mk` file and change the `BOOTMAGIC_ENABLE` setting to specify either `lite` or `full`.
62
63#### Tentative Deprecation Schedule
64
65This is the current planned roadmap for the behavior of `BOOTMAGIC_ENABLE`:
66
67- From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic.
68- From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
69- From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
70
71### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) :id=removal-of-layout-kc
72
73We've removed support for `LAYOUT_kc` macros, if your keymap uses one you will need to update it use a regular `LAYOUT` macro.
74
75### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) :id=encoder-callback-boolean
76
77To allow for keyboards to override (or not) keymap level code the `encoder_update_kb` function has been changed from `void` to `bool`. You will need to update your function definition to reflect this and ensure that you return a `true` or `false` value.
78
79Example code before change:
80
81```c
82void encoder_update_kb(uint8_t index, bool clockwise) {
83 encoder_update_user(index, clockwise);
84}
85
86void encoder_update_user(uint8_t index, bool clockwise) {
87 if (index == 0) { /* First encoder */
88 if (clockwise) {
89 tap_code(KC_PGDN);
90 } else {
91 tap_code(KC_PGUP);
92 }
93 } else if (index == 1) { /* Second encoder */
94 if (clockwise) {
95 tap_code(KC_DOWN);
96 } else {
97 tap_code(KC_UP);
98 }
99 }
100}
101```
102
103Example code after change:
104
105```c
106bool encoder_update_kb(uint8_t index, bool clockwise) {
107 return encoder_update_user(index, clockwise);
108}
109
110bool encoder_update_user(uint8_t index, bool clockwise) {
111 if (index == 0) { /* First encoder */
112 if (clockwise) {
113 tap_code(KC_PGDN);
114 } else {
115 tap_code(KC_PGUP);
116 }
117 } else if (index == 1) { /* Second encoder */
118 if (clockwise) {
119 tap_code(KC_DOWN);
120 } else {
121 tap_code(KC_UP);
122 }
123 }
124 return true;
125 // If you return true, this will allow the keyboard level code to run, as well.
126 //Returning false will override the keyboard level code. Depending on how the keyboard level function is set up.
127}
128```
129
130## Core Changes :id=core-changes
131
132### Fixes :id=core-fixes
133
134* Fix connection issue in split keyboards when slave and OLED display are connected via I2C (fixes #9335) ([#11487](https://github.com/qmk/qmk_firmware/pull/11487))
135* Terrazzo: Fix wrong LED Matrix function names ([#12561](https://github.com/qmk/qmk_firmware/pull/12561))
136* Apply the "NO_LIMITED_CONTROLLER_CONNECT" fix to atmega16u2 ([#12482](https://github.com/qmk/qmk_firmware/pull/12482))
137* Fix comment parsing ([#12750](https://github.com/qmk/qmk_firmware/pull/12750))
138* Turn OLED off on suspend in soundmonster Corne keymap ([#10419](https://github.com/qmk/qmk_firmware/pull/10419))
139* Fixup build errors on `develop` branch. ([#12723](https://github.com/qmk/qmk_firmware/pull/12723))
140* Fix syntax error when compiling for ARM ([#12866](https://github.com/qmk/qmk_firmware/pull/12866))
141* Add missing LED Matrix suspend code to suspend.c ([#12878](https://github.com/qmk/qmk_firmware/pull/12878))
142* Fix spelling mistake regarding LED Matrix in split_common. ([#12888](https://github.com/qmk/qmk_firmware/pull/12888))
143* [Keymap] Fix QWERTY/DVORAK status output for kzar keymap ([#12895](https://github.com/qmk/qmk_firmware/pull/12895))
144* Fixup housekeeping from being invoked twice per loop. ([#12933](https://github.com/qmk/qmk_firmware/pull/12933))
145* wait for matrix row signal to go HIGH for every row ([#12945](https://github.com/qmk/qmk_firmware/pull/12945))
146* ensure we do not conflict with existing keymap aliases ([#12976](https://github.com/qmk/qmk_firmware/pull/12976))
147* [Keyboard] Fix Terrazzo build failure ([#12977](https://github.com/qmk/qmk_firmware/pull/12977))
148* Do not hard set config in CPTC files ([#11864](https://github.com/qmk/qmk_firmware/pull/11864))
149
150### Additions and Enhancements :id=core-additions
151
152* ARM - Refactor SLEEP_LED to support more platforms ([#8403](https://github.com/qmk/qmk_firmware/pull/8403))
153* Add ability to toggle One Shot functionality ([#4198](https://github.com/qmk/qmk_firmware/pull/4198))
154* Add RGB Matrix support to Split Common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055))
155* Add support for complementary outputs to the ChibiOS WS2812 PWM driver ([#11988](https://github.com/qmk/qmk_firmware/pull/11988))
156* Enable RGB Matrix for Corne ([#12091](https://github.com/qmk/qmk_firmware/pull/12091))
157* Set default OLED Update Interval for Split Keyboards to improve matrix scan performance ([#12107](https://github.com/qmk/qmk_firmware/pull/12107))
158* Add support for MK66F18 (Teensy 3.6) micro controller ([#12258](https://github.com/qmk/qmk_firmware/pull/12258))
159* Split RGB Matrix support for RGBKB Zygomorph ([#11083](https://github.com/qmk/qmk_firmware/pull/11083))
160* Add baudrate and circular buffer to ARM WS2812 SPI config ([#12216](https://github.com/qmk/qmk_firmware/pull/12216))
161* Add keyboard level weak function for slave matrix scan ([#12317](https://github.com/qmk/qmk_firmware/pull/12317))
162* Add link to schematic on EasyEDA for XD60 ([#12018](https://github.com/qmk/qmk_firmware/pull/12018))
163* Add Config functions for LED Matrix ([#12361](https://github.com/qmk/qmk_firmware/pull/12361))
164* Add pin definitions for MK66F18 ([#12419](https://github.com/qmk/qmk_firmware/pull/12419))
165* add kinesis/kint36 keyboard ([#10171](https://github.com/qmk/qmk_firmware/pull/10171))
166* Add support for producing UF2-format binaries. ([#12435](https://github.com/qmk/qmk_firmware/pull/12435))
167* Implement CIE1931 curve for LED Matrix ([#12417](https://github.com/qmk/qmk_firmware/pull/12417))
168* Change `BOOTMAGIC_ENABLE=yes` to use Bootmagic Lite ([#12172](https://github.com/qmk/qmk_firmware/pull/12172))
169* Add kzar keymap for Kinesis Advantage ([#12444](https://github.com/qmk/qmk_firmware/pull/12444))
170* LED Matrix: suspend code ([#12509](https://github.com/qmk/qmk_firmware/pull/12509))
171* LED Matrix: Task system ([#12580](https://github.com/qmk/qmk_firmware/pull/12580))
172* Add missing RGB_MODE_TWINKLE / RGB_M_TW keycodes ([#11935](https://github.com/qmk/qmk_firmware/pull/11935))
173* Enhancement of WPM feature ([#11727](https://github.com/qmk/qmk_firmware/pull/11727))
174* Add Per Key functionality for AutoShift ([#11536](https://github.com/qmk/qmk_firmware/pull/11536))
175* LED Matrix: Reactive effect buffers & advanced indicators ([#12588](https://github.com/qmk/qmk_firmware/pull/12588))
176* LED Matrix: support for Split keyboards ([#12633](https://github.com/qmk/qmk_firmware/pull/12633))
177* add setting to enable infinite timeout for leader key ([#6580](https://github.com/qmk/qmk_firmware/pull/6580), [#12721](https://github.com/qmk/qmk_firmware/pull/12721 "Fix bad PR merge for #6580"))
178* Update ADC driver for STM32F1xx, STM32F3xx, STM32F4xx ([#12403](https://github.com/qmk/qmk_firmware/pull/12403))
179* Add initial support for tinyuf2 bootloader (when hosted on F411 blackpill) ([#12600](https://github.com/qmk/qmk_firmware/pull/12600))
180* Add support for STM32F446 MCU ([#12619](https://github.com/qmk/qmk_firmware/pull/12619))
181* Add STM32L433 and L443 support ([#12063](https://github.com/qmk/qmk_firmware/pull/12063))
182* Added OLED fade out support ([#12086](https://github.com/qmk/qmk_firmware/pull/12086))
183* New command: `qmk console` ([#12828](https://github.com/qmk/qmk_firmware/pull/12828))
184* LED Matrix: Effects! ([#12651](https://github.com/qmk/qmk_firmware/pull/12651))
185* Add setup, clone, and env to the list of commands we allow even with broken modules ([#12868](https://github.com/qmk/qmk_firmware/pull/12868))
186* LED Matrix: Documentation ([#12685](https://github.com/qmk/qmk_firmware/pull/12685))
187* Add function to allow repeated blinking of one layer ([#12237](https://github.com/qmk/qmk_firmware/pull/12237))
188* Add support for up to 4 IS31FL3733 drivers ([#12342](https://github.com/qmk/qmk_firmware/pull/12342))
189* Convert Encoder callbacks to be boolean functions ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985))
190* [Keymap] Update to Drashna keymap and user code (based on develop) ([#12936](https://github.com/qmk/qmk_firmware/pull/12936))
191* Add Full-duplex serial driver for ARM boards ([#9842](https://github.com/qmk/qmk_firmware/pull/9842))
192* Document LED_MATRIX_FRAMEBUFFER_EFFECTS ([#12987](https://github.com/qmk/qmk_firmware/pull/12987))
193* Backlight: add defines for default level and breathing state ([#12560](https://github.com/qmk/qmk_firmware/pull/12560), [#13024](https://github.com/qmk/qmk_firmware/pull/13024))
194* Add dire message about LUFA mass storage bootloader ([#13014](https://github.com/qmk/qmk_firmware/pull/13014))
195
196### Clean-ups and Optimizations :id=core-optimizations
197
198* Overhaul bootmagic logic to have single entrypoint ([#8532](https://github.com/qmk/qmk_firmware/pull/8532))
199* Refactor of USB code within split_common ([#11890](https://github.com/qmk/qmk_firmware/pull/11890))
200* Begin the process of deprecating `bin/qmk` in favor of the global CLI ([#12109](https://github.com/qmk/qmk_firmware/pull/12109))
201* LED Matrix: decouple from Backlight ([#12054](https://github.com/qmk/qmk_firmware/pull/12054))
202* Remove `FUNC()` ([#12161](https://github.com/qmk/qmk_firmware/pull/12161))
203* Move gpio wait logic to wait.h ([#12067](https://github.com/qmk/qmk_firmware/pull/12067))
204* LED Matrix: Clean up includes ([#12197](https://github.com/qmk/qmk_firmware/pull/12197))
205* Consistently use bin/qmk when that script is called ([#12286](https://github.com/qmk/qmk_firmware/pull/12286))
206* LED Matrix: Additional common_features.mk tweaks ([#12187](https://github.com/qmk/qmk_firmware/pull/12187))
207* LED Matrix: Fix up eeconfig code ([#12327](https://github.com/qmk/qmk_firmware/pull/12327))
208* Big quantum_keycodes cleanup ([#12249](https://github.com/qmk/qmk_firmware/pull/12249))
209* Fix up builds that are now too big for `develop` branch. ([#12495](https://github.com/qmk/qmk_firmware/pull/12495))
210* [Keyboard] kint36: switch to sym_eager_pk debouncing ([#12626](https://github.com/qmk/qmk_firmware/pull/12626))
211* [Keyboard] kint2pp: reduce input latency by ≈10ms ([#12625](https://github.com/qmk/qmk_firmware/pull/12625))
212* eeprom driver: Refactor where eeprom driver initialisation (and EEPROM emulation initialisation) occurs to make it non-target-specific. ([#12671](https://github.com/qmk/qmk_firmware/pull/12671))
213* Change RGB/LED Matrix to use a simple define for USB suspend ([#12697](https://github.com/qmk/qmk_firmware/pull/12697), [#12770](https://github.com/qmk/qmk_firmware/pull/12770 "Fixing transport's led/rgb matrix suspend state logic"))
214* Remove pointless SERIAL_LINK_ENABLE rules ([#12846](https://github.com/qmk/qmk_firmware/pull/12846))
215* Make Swap Hands use PROGMEM ([#12284](https://github.com/qmk/qmk_firmware/pull/12284))
216* Remove KEYMAP and LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160))
217* Rename `point_t` -> `led_point_t` ([#12864](https://github.com/qmk/qmk_firmware/pull/12864))
218* Deprecate `send_unicode_hex_string()` ([#12602](https://github.com/qmk/qmk_firmware/pull/12602))
219* [Keyboard] Remove redundant legacy and common headers for crkbd ([#13023](https://github.com/qmk/qmk_firmware/pull/13023))
220
221### QMK Infrastructure and Internals :id=qmk-internals
222
223* trivial change to trigger api update ([`b15288fb87`](https://github.com/qmk/qmk_firmware/commit/b15288fb87))
224* fix some references to bin/qmk that slipped in ([#12832](https://github.com/qmk/qmk_firmware/pull/12832))
225* Resolve a number of warnings in `qmk generate-api` ([#12833](https://github.com/qmk/qmk_firmware/pull/12833))
226* Fix another bin/qmk reference ([#12856](https://github.com/qmk/qmk_firmware/pull/12856))
227* Use milc.subcommand.config instead of qmk.cli.config ([#12915](https://github.com/qmk/qmk_firmware/pull/12915))
diff --git a/docs/ChangeLog/20210828.md b/docs/ChangeLog/20210828.md
new file mode 100644
index 000000000..f96283e6a
--- /dev/null
+++ b/docs/ChangeLog/20210828.md
@@ -0,0 +1,557 @@
1# QMK Breaking Changes - 2021 August 28 Changelog
2
3## Notable Features :id=notable-features
4
5### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) :id=combo-processing-improvements
6
7Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.
8
9It is also now possible to define combos that have keys overlapping with other combos, triggering only one. For example, a combo of `A`, `B` can coexist with a longer combo of `A`, `B`, `C` -- previous functionality would trigger both combos if all three keys were pressed.
10
11### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) :id=key-overrides
12
13QMK now has a new feature: [key overrides](https://docs.qmk.fm/#/feature_key_overrides). This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing <kbd>Shift+2</kbd> normally results in an <kbd>@</kbd> on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any <kbd>modifier + key</kbd> press.
14
15To illustrate, it's now possible to use the key overrides feature to translate <kbd>Shift + Backspace</kbd> into <kbd>Delete</kbd> -- an often-requested example of where this functionality comes in handy.
16
17There's far more to describe that what lives in this changelog, so head over to the [key overrides documentation](https://docs.qmk.fm/#/feature_key_overrides) for more examples and info.
18
19### Digitizer support ([#12851](https://github.com/qmk/qmk_firmware/pull/12851))
20
21QMK gained the ability to pretend to be a digitizer device -- much like a tablet device. A mouse uses delta-coordinates -- move up, move right -- but a digitizer works with absolute coordinates -- top left, bottom right.
22
23## Changes Requiring User Action :id=changes-requiring-user-action
24
25### Updated Keyboard Codebases :id=updated-keyboard-codebases
26
27The following keyboards have had their source moved within QMK:
28
29Old Keyboard Name | New Keyboard Name
30------------------------------|---------------------------------------------------------
31aeboards/constellation | aeboards/constellation/rev1, aeboards/constellation/rev2
32bakeneko65 | bakeneko65/rev2, bakeneko65/rev3
33bm16a | kprepublic/bm16a
34bm16s | kprepublic/bm16s
35bm40hsrgb | kprepublic/bm40hsrgb
36bm43a | kprepublic/bm43a
37bm60poker | kprepublic/bm60poker
38bm60rgb | kprepublic/bm60rgb
39bm60rgb_iso | kprepublic/bm60rgb_iso
40bm68rgb | kprepublic/bm68rgb
41clawsome/gamebuddy | clawsome/gamebuddy/v1_0, clawsome/gamebuddy/v1_m
42cospad | kprepublic/cospad
43custommk/genesis | custommk/genesis/rev1, custommk/genesis/rev2
44daisy | ktec/daisy
45durgod/k320 | durgod/k3x0/k320
46dztech/volcano660 | ilumkb/volcano660
47ergodone | ktec/ergodone
48gmmk/pro | gmmk/pro/ansi, gmmk/pro/iso
49handwired/p1800fl | team0110/p1800fl
50jj40 | kprepublic/jj40
51jj4x4 | kprepublic/jj4x4
52jj50 | kprepublic/jj50
53kyria | splitkb/kyria
54lazydesigners/the60 | lazydesigners/the60/rev1, lazydesigners/the60/rev2
55matrix/m12og | matrix/m12og/rev1, matrix/m12og/rev2
56mechlovin/hannah65/mechlovin9 | mechlovin/mechlovin9/rev1, mechlovin/mechlovin9/rev2
57peiorisboards/ixora | coarse/ixora
58ramonimbao/mona | ramonimbao/mona/v1, ramonimbao/mona/v1_1
59staryu | ktec/staryu
60tokyo60 | tokyokeyboard/tokyo60
61vinta | coarse/vinta
62xd002 | xiudi/xd002
63xd004 | xiudi/xd004
64xd60 | xiudi/xd60
65xd68 | xiudi/xd68
66xd75 | xiudi/xd75
67xd84 | xiudi/xd84
68xd84pro | xiudi/xd84pro
69xd87 | xiudi/xd87
70xd96 | xiudi/xd96
71
72### Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) :id=bootmagic-full-removal
73
74As noted during last breaking changes cycle, QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
75
76This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `full` results in an error, allowing only `no`, `yes`, or `lite`.
77
78Currently `lite` is the equivalent of `yes` in `rules.mk`. Next cycle the use of the `lite` keyword will be prevented in favour of `yes` -- any new submissions should now be using `yes` or `no` to minimise disruption.
79
80#### Bootmagic Full Deprecation Schedule
81
82This is the current roadmap for the behavior of `BOOTMAGIC_ENABLE`:
83
84- (done) From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic.
85- (now) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
86- (next) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
87
88### DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) :id=dip-switch-boolean
89
90To match the encoder change last breaking changes cycle, DIP switch callbacks now return `bool`, too.
91
92Example code before change:
93
94```c
95void dip_switch_update_kb(uint8_t index, bool active) {
96 dip_switch_update_user(index, active);
97}
98
99void dip_switch_update_user(uint8_t index, bool active) {
100 switch (index) {
101 case 0:
102 if(active) { audio_on(); } else { audio_off(); }
103 break;
104 }
105}
106
107void dip_switch_update_mask_kb(uint32_t state) {
108 dip_switch_update_mask_user(state);
109}
110
111void dip_switch_update_mask_user(uint32_t state) {
112 if (state & (1UL<<0) && state & (1UL<<1)) {
113 layer_on(_ADJUST); // C on esc
114 } else {
115 layer_off(_ADJUST);
116 }
117}
118```
119
120Example code after change:
121
122```c
123bool dip_switch_update_kb(uint8_t index, bool active) {
124 if !(dip_switch_update_user(index, active)) { return false; }
125 return true;
126}
127
128bool dip_switch_update_user(uint8_t index, bool active) {
129 switch (index) {
130 case 0:
131 if(active) { audio_on(); } else { audio_off(); }
132 break;
133 }
134 return true; // Returning true allows keyboard code to execute, false will tell the keyboard code "I've already handled it".
135}
136
137bool dip_switch_update_mask_kb(uint32_t state) {
138 if (!dip_switch_update_mask_user(state)) { return false; }
139 return true;
140}
141
142bool dip_switch_update_mask_user(uint32_t state) {
143 if (state & (1UL<<0) && state & (1UL<<1)) {
144 layer_on(_ADJUST); // C on esc
145 } else {
146 layer_off(_ADJUST);
147 }
148 return true; // Returning true allows keyboard code to execute, false will tell the keyboard code "I've already handled it".
149}
150```
151
152## Notable core changes :id=notable-core
153
154### Split transport improvements :id=split-transport-improvements
155
156Split keyboards gained a significant amount of improvements during this breaking changes cycle, specifically:
157
158* Extensible split data sync ([#11930](https://github.com/qmk/qmk_firmware/pull/11930)) -- rewritten data sharing between sides, allowing for data transfer only when required, as well as enabling keyboards and keymaps to define their own shared data.
159* Full-duplex ARM USART split ([#13081](https://github.com/qmk/qmk_firmware/pull/13081)) -- adds to the previous half-duplex driver and now allows for full-duplex support on ARM.
160* Make solo half of split keyboards (more) usable. ([#13523](https://github.com/qmk/qmk_firmware/pull/13523)) -- allows the slave to be disconnected, enabling one-handed use.
161* Switch split_common to CRC subsystem ([#13418](https://github.com/qmk/qmk_firmware/pull/13418))
162
163!> If you're updating your split keyboard, you will need to flash both sides of the split with the your firmware.
164
165### Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) :id=teensy-4-x-support
166
167Updated ChibiOS and ChibiOS-Contrib, which brought in support for Teensy 4.x dev boards, running NXP i.MX1062.
168
169### Data Driven Improvements ([#13366](https://github.com/qmk/qmk_firmware/pull/13366))
170
171QMK's pursuit of data-driven keyboards has progressed, allowing substantially more configurable options to be specified in `info.json`.
172
173#### Tags
174
175Tags will let you categorize your keyboard, and will be used in the future to allow browsing and sorting through keyboards in QMK. Tags are free-form text identifiers that identify attributes about your keyboard. To add tags you simply add a `tags` key to your `info.json`:
176
177 "tags": ["tkl", "backlight", "encoder"]
178
179#### Dot Notation
180
181With this release we are moving towards using JSON dot notation in more places. For example, when using `qmk info -f text`:
182
183```
184$ qmk info -f text -kb clueboard/card
185 bootloader: atmel-dfu
186 debounce: 20
187 diode_direction: ROW2COL
188 features.audio: True
189 features.backlight: True
190 features.bluetooth: False
191 features.bootmagic: False
192 features.command: True
193 features.console: True
194 features.extrakey: True
195 features.lto: True
196 features.midi: False
197 features.mousekey: True
198 features.nkro: False
199 features.rgblight: True
200 features.unicode: False
201 height: 8
202 keyboard_folder: clueboard/card
203 keyboard_name: Cluecard
204 layout_aliases.LAYOUT: LAYOUT_all
205 layouts: LAYOUT_all
206 maintainer: skullydazed
207 manufacturer: Clueboard
208 matrix_pins.cols: F1, F6, F7
209 matrix_pins.rows: B4, F0, F4, F5
210 platform: unknown
211 processor: atmega32u4
212 processor_type: avr
213 protocol: LUFA
214 rgblight.brightness_steps: 17
215 rgblight.hue_steps: 10
216 rgblight.led_count: 4
217 rgblight.pin: E6
218 rgblight.saturation_steps: 17
219 split.transport.protocol: serial
220 usb.device_ver: 0x0001
221 usb.pid: 0x2330
222 usb.vid: 0xC1ED
223 width: 10
224```
225
226#### New configuration keys
227
228We've added dozens of new keys to `info.json` so that you can configure more than ever without writing a single line of code. A quick overview of the new items you can configure:
229
230* `audio.pins`, `audio.voices`
231* `backlight.breathing`, `backlight.breathing_period`, `backlight.levels`, `backlight.pin`,
232* `bluetooth.driver`, `bluetooth.lto`
233* `bootloader_instructions`
234* `build.debounce_type`, `build.firmware_format`, `build.lto`
235* `combo.count`, `combo.term`
236* `leader_key.timing`, `leader_key.strict_processing`, `leader_key.timeout`
237* `matrix.custom`, `matrix.custom_lite`, `matrix.ghost`, `matrix.io_delay`
238* `mouse_key.enabled`, `mouse_key.delay`, `mouse_key.interval`, `mouse_key.max_speed`, `mouse_key.time_to_max`, `mouse_key.wheel_delay`
239* `oneshot.tap_toggle`, `oneshot.timeout`
240* `rgblight.layers.blink`, `rgblight.layers.enabled`, `rgblight.layers.max`, `rgblight.layers.override_rgb`, `rgblight.rgbw`
241* `split.enabled`, `split.matrix_grid`, `split.matrix_pins`, `split.main`, `split.soft_serial_pin`, `split.soft_serial_speed`, `split.transport.protocol`, `split.transport.sync_matrix_state`, `split.transport.sync_modifiers`, `split.usb_detect`
242* `tapping.force_hold`, `tapping.force_hold_per_key`, `tapping.ignore_mod_tap_interrupt`, `tapping.ignore_mod_tap_interrupt_per_key`, `tapping.permissive_hold`, `tapping.permissive_hold_per_key`, `tapping.retro`, `tapping.retro_per_key`, `tapping.term`, `tapping.term_per_key`, `tapping.toggle`
243* `usb.force_nkro`, `usb.max_power`, `usb.no_startup_check`, `usb.polling_interval`, `usb.shared_endpoint.keyboard`, `usb.shared_endpoint.mouse`, `usb.suspend_wakeup_delay`, `usb.wait_for`
244* `qmk.keys_per_scan`, `qmk.tap_keycode_delay`, `qmk.tap_capslock_delay`
245
246### Codebase restructure and cleanup :id=codebase-restructure
247
248QMK was originally based on TMK, and has grown in size considerably since its first inception. To keep moving things forward, restructure of some of the core areas of the code is needed to support new concepts and new hardware, and progress is happening along those lines:
249
250* Move RGBLight code into its own folder ([#13312](https://github.com/qmk/qmk_firmware/pull/13312))
251* Migrate platform independent code from tmk_core -> quantum ([#13673](https://github.com/qmk/qmk_firmware/pull/13673))
252* matrix_scan_x -> x_task ([#13748](https://github.com/qmk/qmk_firmware/pull/13748))
253* Move some led drivers to common folder ([#13749](https://github.com/qmk/qmk_firmware/pull/13749))
254* Move chibios board files to allow tmk_core platform migration ([#13777](https://github.com/qmk/qmk_firmware/pull/13777))
255* Begin to carve out platform/protocol API - Single main loop ([#13843](https://github.com/qmk/qmk_firmware/pull/13843))
256* Relocate platform specific drivers ([#13894](https://github.com/qmk/qmk_firmware/pull/13894))
257* Move all the flash logic from tmk_core ([#13927](https://github.com/qmk/qmk_firmware/pull/13927))
258* Move USB Host Shield and Arduino core to `lib/` ([#13973](https://github.com/qmk/qmk_firmware/pull/13973))
259* Unify behaviour of wait on AVR ([#14025](https://github.com/qmk/qmk_firmware/pull/14025))
260* Move nix folder alongside vagrant ([#14132](https://github.com/qmk/qmk_firmware/pull/14132))
261* Align some quantum sub-directories ([#14134](https://github.com/qmk/qmk_firmware/pull/14134))
262
263---
264
265## Full changelist
266
267Core:
268* Arm ps2 mouse interrupt ([#6490](https://github.com/qmk/qmk_firmware/pull/6490))
269* Process combos earlier & overlapping combos ([#8591](https://github.com/qmk/qmk_firmware/pull/8591))
270* Swap buttons on PS2 Mouse/Trackball ([#9205](https://github.com/qmk/qmk_firmware/pull/9205))
271* Add HOLD_ON_OTHER_KEY_PRESS option for dual-role keys ([#9404](https://github.com/qmk/qmk_firmware/pull/9404))
272* add yaml_build_options target ([#10533](https://github.com/qmk/qmk_firmware/pull/10533))
273* Warn when building a board that uses arm_atsam ([#10904](https://github.com/qmk/qmk_firmware/pull/10904))
274* Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422))
275* Refactor `quantum/command.{c,h}` for code size & {read,maintain}ability ([#11842](https://github.com/qmk/qmk_firmware/pull/11842))
276* Extensible split data sync ([#11930](https://github.com/qmk/qmk_firmware/pull/11930))
277* Move print/debug files to quantum ([#12069](https://github.com/qmk/qmk_firmware/pull/12069))
278* Unconditionally call led_init_ports ([#12116](https://github.com/qmk/qmk_firmware/pull/12116))
279* Support using a timer for wait_us() on ChibiOS-based boards ([#12211](https://github.com/qmk/qmk_firmware/pull/12211))
280* Add support for NO_PIN to all matrix types ([#12238](https://github.com/qmk/qmk_firmware/pull/12238))
281* Avoid 8-bit timer overflows in debounce algorithms ([#12240](https://github.com/qmk/qmk_firmware/pull/12240))
282* Add Per Key exclusions for Haptic Feedback ([#12386](https://github.com/qmk/qmk_firmware/pull/12386))
283* Steno combinedkeys ([#12538](https://github.com/qmk/qmk_firmware/pull/12538))
284* eeprom_stm32: implement high density wear leveling ([#12567](https://github.com/qmk/qmk_firmware/pull/12567))
285* eeprom_i2c driver: added EXTERNAL_EEPROM_WP_PIN configuration option. ([#12617](https://github.com/qmk/qmk_firmware/pull/12617))
286* Add CRC8 calculation subsystem to quantum ([#12641](https://github.com/qmk/qmk_firmware/pull/12641))
287* Limit saturation for RGB_MATRIX_JELLYBEAN_RAINDROPS ([#12669](https://github.com/qmk/qmk_firmware/pull/12669))
288* Add asym_eager_defer_pk debounce type ([#12689](https://github.com/qmk/qmk_firmware/pull/12689))
289* Include lib8tion.c into RGB/LED matrix build list ([#12699](https://github.com/qmk/qmk_firmware/pull/12699))
290* Add readPort() and some API to 'tmk_core/common/*/gpio.h' ([#12754](https://github.com/qmk/qmk_firmware/pull/12754))
291* add wait_cpuclock() macro for AVR and CPU_CLOCK macro ([#12755](https://github.com/qmk/qmk_firmware/pull/12755))
292* Trigger a wakeup after USB Reset on ChibiOS. ([#12831](https://github.com/qmk/qmk_firmware/pull/12831))
293* Add sync_timer support over serial_link (i.e. Ergodox Infinity) ([#12845](https://github.com/qmk/qmk_firmware/pull/12845))
294* Digitizer HID interface : absolute coordinates for mouse cursor ([#12851](https://github.com/qmk/qmk_firmware/pull/12851))
295* Add config.h and rules.mk support for data driven keymaps ([#12859](https://github.com/qmk/qmk_firmware/pull/12859))
296* Add alternate ldscript for STM32duino (F103xB) ([#12914](https://github.com/qmk/qmk_firmware/pull/12914))
297* `keymap_extras`: Remove deprecated defines ([#12949](https://github.com/qmk/qmk_firmware/pull/12949))
298* Retain brightness with lighting layers ([#13025](https://github.com/qmk/qmk_firmware/pull/13025))
299* Move optical sensor code to drivers folder ([#13044](https://github.com/qmk/qmk_firmware/pull/13044))
300* Change the prototype of matrix_output_unselect_delay() ([#13045](https://github.com/qmk/qmk_firmware/pull/13045))
301* Add weak refs on reading rows/cols. ([#13062](https://github.com/qmk/qmk_firmware/pull/13062))
302* Use single memcmp to determine if matrix changed. ([#13064](https://github.com/qmk/qmk_firmware/pull/13064))
303* Improve layer mask handling ([#13065](https://github.com/qmk/qmk_firmware/pull/13065))
304* mousekey: expose current report to users ([#13069](https://github.com/qmk/qmk_firmware/pull/13069))
305* ChibiOS SVN mirror script. ([#13070](https://github.com/qmk/qmk_firmware/pull/13070))
306* Added right vs left specific pin assignments for dip switch ([#13074](https://github.com/qmk/qmk_firmware/pull/13074))
307* make RESET key work with Teensy 4.x ([#13076](https://github.com/qmk/qmk_firmware/pull/13076))
308* wire up flash make target for Teensy 4.x ([#13077](https://github.com/qmk/qmk_firmware/pull/13077))
309* bump USB spec version in device descriptor to 2.0 ([#13078](https://github.com/qmk/qmk_firmware/pull/13078))
310* Unite half-duplex and full-duplex serial drivers ([#13081](https://github.com/qmk/qmk_firmware/pull/13081))
311* Add ST7565 LCD driver ([#13089](https://github.com/qmk/qmk_firmware/pull/13089))
312* `spi_master` Kinetis support ([#13098](https://github.com/qmk/qmk_firmware/pull/13098))
313* GMMK Pro RGB Support ([#13147](https://github.com/qmk/qmk_firmware/pull/13147))
314* Remove dfu-util arguments from mcu_selection ([#13150](https://github.com/qmk/qmk_firmware/pull/13150))
315* Add subcommand to generate version.h ([#13151](https://github.com/qmk/qmk_firmware/pull/13151))
316* Add oled_invert ([#13172](https://github.com/qmk/qmk_firmware/pull/13172))
317* ST7565 invert ([#13237](https://github.com/qmk/qmk_firmware/pull/13237))
318* RGB Matrix eeprom write limiting ([#13238](https://github.com/qmk/qmk_firmware/pull/13238))
319* Temporary disable of CRC ([#13252](https://github.com/qmk/qmk_firmware/pull/13252))
320* Move LED/RGB Matrix code into their own directories ([#13257](https://github.com/qmk/qmk_firmware/pull/13257))
321* Skip EEPROM writes once done. ([#13293](https://github.com/qmk/qmk_firmware/pull/13293))
322* Remove rgblight stubs ([#13302](https://github.com/qmk/qmk_firmware/pull/13302))
323* Allow settable SPI divisor for AW20216 driver, set default to 4 ([#13309](https://github.com/qmk/qmk_firmware/pull/13309))
324* Move RGBLight code into its own folder ([#13312](https://github.com/qmk/qmk_firmware/pull/13312))
325* Unify matrix for split common and regular matrix ([#13330](https://github.com/qmk/qmk_firmware/pull/13330))
326* Relocate RGB/HSV color defs to a more fitting place ([#13377](https://github.com/qmk/qmk_firmware/pull/13377))
327* Adds support for STM32L412xB, STM32L422xB. ([#13383](https://github.com/qmk/qmk_firmware/pull/13383))
328* Convert Dip Switch callbacks to boolean functions ([#13399](https://github.com/qmk/qmk_firmware/pull/13399))
329* Use string literals for `SERIAL_NUMBER` ([#13403](https://github.com/qmk/qmk_firmware/pull/13403))
330* Switch split_common to CRC subsystem ([#13418](https://github.com/qmk/qmk_firmware/pull/13418))
331* Improve 'show_build_options' target ([#13425](https://github.com/qmk/qmk_firmware/pull/13425))
332* AW20216 use register increment for framebuffer flushes ([#13430](https://github.com/qmk/qmk_firmware/pull/13430))
333* Allow invert of SPLIT_HAND_PIN logic ([#13433](https://github.com/qmk/qmk_firmware/pull/13433))
334* chibios: bootloader: use integer pointers as volatile ([#13450](https://github.com/qmk/qmk_firmware/pull/13450))
335* Refactor OLED to allow easy addition of other types ([#13454](https://github.com/qmk/qmk_firmware/pull/13454))
336* Dual RGB Matrix IS31FL3737 driver support to address #13442 ([#13457](https://github.com/qmk/qmk_firmware/pull/13457))
337* Enable g_is31_leds PROGMEM for RGB Matrix IS31FL3737 driver ([#13480](https://github.com/qmk/qmk_firmware/pull/13480))
338* Switch Ergodox Infinity over to split_common ([#13481](https://github.com/qmk/qmk_firmware/pull/13481))
339* Make solo half of split keyboards (more) usable. ([#13523](https://github.com/qmk/qmk_firmware/pull/13523))
340* Enable sync of OLED/ST7565 display on/off state on Splits ([#13542](https://github.com/qmk/qmk_firmware/pull/13542))
341* Revert "Add rgblight to RGB Matrix VPATH" ([#13559](https://github.com/qmk/qmk_firmware/pull/13559))
342* Move `SENDSTRING_BELL` code to `send_string.h` ([#13566](https://github.com/qmk/qmk_firmware/pull/13566))
343* Migrate platform independent code from tmk_core -> quantum ([#13673](https://github.com/qmk/qmk_firmware/pull/13673))
344* Avoid LTO conficts on arm_atsam ([#13676](https://github.com/qmk/qmk_firmware/pull/13676))
345* Allow for removal of hysteresis on 4x encoders ([#13698](https://github.com/qmk/qmk_firmware/pull/13698))
346* Port new_keyboard.sh to CLI ([#13706](https://github.com/qmk/qmk_firmware/pull/13706))
347* Align AW20216 driver ([#13712](https://github.com/qmk/qmk_firmware/pull/13712))
348* Haptic: driver-> feature ([#13713](https://github.com/qmk/qmk_firmware/pull/13713))
349* Add support for STM32F407x MCUs. ([#13718](https://github.com/qmk/qmk_firmware/pull/13718))
350* Remove legacy BACKLIGHT_CUSTOM_DRIVER option ([#13731](https://github.com/qmk/qmk_firmware/pull/13731))
351* Minor tidy up of key overrides ([#13747](https://github.com/qmk/qmk_firmware/pull/13747))
352* matrix_scan_x -> x_task ([#13748](https://github.com/qmk/qmk_firmware/pull/13748))
353* Move some led drivers to common folder ([#13749](https://github.com/qmk/qmk_firmware/pull/13749))
354* Allow for higher USB Polling rate on ATSAM boards ([#13755](https://github.com/qmk/qmk_firmware/pull/13755))
355* Rgb matrix/enable modes explicitly ([#13758](https://github.com/qmk/qmk_firmware/pull/13758))
356* Move chibios board files to allow tmk_core platform migration ([#13777](https://github.com/qmk/qmk_firmware/pull/13777))
357* __flash? ([#13799](https://github.com/qmk/qmk_firmware/pull/13799))
358* `--parallel` improvements ([#13800](https://github.com/qmk/qmk_firmware/pull/13800))
359* Speed up pimoroni trackball driver ([#13823](https://github.com/qmk/qmk_firmware/pull/13823))
360* Add a toggle key for GUI On/Off in Magic feature ([#13830](https://github.com/qmk/qmk_firmware/pull/13830))
361* Begin to carve out platform/protocol API - Single main loop ([#13843](https://github.com/qmk/qmk_firmware/pull/13843))
362* Remove Full Bootmagic ([#13846](https://github.com/qmk/qmk_firmware/pull/13846))
363* Remove backwards compatibility of debounce names ([#13877](https://github.com/qmk/qmk_firmware/pull/13877))
364* Relocate platform specific drivers ([#13894](https://github.com/qmk/qmk_firmware/pull/13894))
365* Remove ONEHAND_ENABLE ([#13920](https://github.com/qmk/qmk_firmware/pull/13920))
366* Move all the flash logic from tmk_core ([#13927](https://github.com/qmk/qmk_firmware/pull/13927))
367* adding uf2 flash support for blackpill 401 ([#13968](https://github.com/qmk/qmk_firmware/pull/13968))
368* Unify behaviour of wait on AVR ([#14025](https://github.com/qmk/qmk_firmware/pull/14025))
369* Add qmk-hid bootloader detection support to `qmk console` ([#14038](https://github.com/qmk/qmk_firmware/pull/14038))
370* Align DIP_SWITCH_PINS_RIGHT implementation with encoders ([#14079](https://github.com/qmk/qmk_firmware/pull/14079))
371* Tidy up quantum.c now some of tmk_core has been merged ([#14083](https://github.com/qmk/qmk_firmware/pull/14083))
372* Improve pmw3360 sensor and make it more hardware agnostic ([#14097](https://github.com/qmk/qmk_firmware/pull/14097))
373* Move nix folder alongside vagrant ([#14132](https://github.com/qmk/qmk_firmware/pull/14132))
374* Align some quantum sub-directories ([#14134](https://github.com/qmk/qmk_firmware/pull/14134))
375* Revert 14083 && 14144 ([#14150](https://github.com/qmk/qmk_firmware/pull/14150))
376
377CLI:
378* allow LINE_PINxx for Teensy 4.x pins ([#13247](https://github.com/qmk/qmk_firmware/pull/13247))
379* Remove the redundant pin name validation ([#13251](https://github.com/qmk/qmk_firmware/pull/13251))
380* Move all our CLI file formatters to the format dir ([#13296](https://github.com/qmk/qmk_firmware/pull/13296))
381* Refactor doctor.py into a directory ([#13298](https://github.com/qmk/qmk_firmware/pull/13298))
382* Add git and venv info to doctor's output ([#13405](https://github.com/qmk/qmk_firmware/pull/13405))
383* Matrix consistency check ([#13470](https://github.com/qmk/qmk_firmware/pull/13470))
384* Remove references to info.json `width` and `height` in CLI ([#13728](https://github.com/qmk/qmk_firmware/pull/13728))
385* Make `qmk doctor` more lenient about system config ([#13804](https://github.com/qmk/qmk_firmware/pull/13804))
386* Defer the expensive search for layout macros until info.json has been processed ([#14007](https://github.com/qmk/qmk_firmware/pull/14007))
387
388Submodule updates:
389* Update ChibiOS, ChibiOS-Contrib. ([#13056](https://github.com/qmk/qmk_firmware/pull/13056))
390* Update LUFA (18-07-2021) and add QMK-HID Bootloader support ([#13588](https://github.com/qmk/qmk_firmware/pull/13588))
391* Update LUFA Submodule (2021-07-30) ([#13819](https://github.com/qmk/qmk_firmware/pull/13819))
392* Bump gtest ([#13885](https://github.com/qmk/qmk_firmware/pull/13885))
393* Update ChibiOS-Contrib, mirroring script. ([#13896](https://github.com/qmk/qmk_firmware/pull/13896))
394* Move USB Host Shield and Arduino core to `lib/` ([#13973](https://github.com/qmk/qmk_firmware/pull/13973))
395
396Keyboards:
397* Migrate keyboards using uGFX to LED_MATRIX ([#9657](https://github.com/qmk/qmk_firmware/pull/9657))
398* Remove MIDI Configuration boilerplate ([#11151](https://github.com/qmk/qmk_firmware/pull/11151))
399* manyboard macro ([#11896](https://github.com/qmk/qmk_firmware/pull/11896))
400* Moved tokyo60/ into tokyokeyboard/tokyo60/. ([#12023](https://github.com/qmk/qmk_firmware/pull/12023))
401* Organize KPrepublic, K.T.E.C, xiudi boards into directories ([#12159](https://github.com/qmk/qmk_firmware/pull/12159))
402* Add Durgod Taurus K310 keyboard ([#12314](https://github.com/qmk/qmk_firmware/pull/12314))
403* add support for m65 and simple 5x13 ortholinear ([#12315](https://github.com/qmk/qmk_firmware/pull/12315))
404* Relocalize and Update p1800fl ([#12425](https://github.com/qmk/qmk_firmware/pull/12425))
405* GameBuddy v1.M ([#12637](https://github.com/qmk/qmk_firmware/pull/12637))
406* Add mechlovin9 rev2 PCB ([#12767](https://github.com/qmk/qmk_firmware/pull/12767))
407* Add RGB matrix support for Kyria ([#12789](https://github.com/qmk/qmk_firmware/pull/12789))
408* RGB Matrix working for Sofle RGB ([#12861](https://github.com/qmk/qmk_firmware/pull/12861))
409* Add Durgod Hades, Galaxy and Venus Keyboards ([#12893](https://github.com/qmk/qmk_firmware/pull/12893))
410* kint36: set correct EEPROM size ([#12946](https://github.com/qmk/qmk_firmware/pull/12946))
411* Updated encoder_update_user on my keymap to follow the new signature on quantum ([#13152](https://github.com/qmk/qmk_firmware/pull/13152))
412* Add Creator Pro by SergioPoverony ([#13154](https://github.com/qmk/qmk_firmware/pull/13154))
413* Use the new ST7565 driver on Ergodox Infinity ([#13165](https://github.com/qmk/qmk_firmware/pull/13165))
414* Refactor atom47 and add rev4 and rev5 ([#13201](https://github.com/qmk/qmk_firmware/pull/13201))
415* Add Bakeneko65 V3 and revision folders ([#13228](https://github.com/qmk/qmk_firmware/pull/13228))
416* Keyboards/RGBKB/Mün ([#13239](https://github.com/qmk/qmk_firmware/pull/13239))
417* Optimize our jsonschema by using refs ([#13271](https://github.com/qmk/qmk_firmware/pull/13271))
418* Handwired/Stream_Cheap/2x4: Add via support ([#13297](https://github.com/qmk/qmk_firmware/pull/13297))
419* ez_maker/directpins for easy one-offs in qmk_configurator ([#13321](https://github.com/qmk/qmk_firmware/pull/13321))
420* add kinT kinesis keyboard controller (kint41 variant) ([#13333](https://github.com/qmk/qmk_firmware/pull/13333))
421* Error log cleanup ([#13349](https://github.com/qmk/qmk_firmware/pull/13349))
422* Drashna's split updates ([#13350](https://github.com/qmk/qmk_firmware/pull/13350))
423* Migrate SHIFT_ESC and RGB `fn_actions` to Grave Escape and RGB keycodes ([#13360](https://github.com/qmk/qmk_firmware/pull/13360))
424* Add a lot more data to info.json ([#13366](https://github.com/qmk/qmk_firmware/pull/13366))
425* Remove `API_SYSEX_ENABLE`s from rules.mk ([#13389](https://github.com/qmk/qmk_firmware/pull/13389))
426* gmmk/pro/mike1808 keymap ([#13398](https://github.com/qmk/qmk_firmware/pull/13398))
427* Remove deprecated callbacks for encoders and dip switches ([#13404](https://github.com/qmk/qmk_firmware/pull/13404))
428* first pass: matrix consistency improvements ([#13471](https://github.com/qmk/qmk_firmware/pull/13471))
429* Migrate more `fn_actions` stuff ([#13502](https://github.com/qmk/qmk_firmware/pull/13502))
430* add simple gmmk pro macos keymap with rgb ([#13504](https://github.com/qmk/qmk_firmware/pull/13504))
431* move volcano660 to ilumkb folder ([#13550](https://github.com/qmk/qmk_firmware/pull/13550))
432* Valor Rev 2 ([#13551](https://github.com/qmk/qmk_firmware/pull/13551))
433* Split GMMK Pro PCBs into separate revisions ([#13570](https://github.com/qmk/qmk_firmware/pull/13570))
434* Remove the vision_division keyboard ([#13571](https://github.com/qmk/qmk_firmware/pull/13571))
435* Develop - Change uint32_t to layer_state_t ([#13596](https://github.com/qmk/qmk_firmware/pull/13596))
436* Develop - DC01 left ([#13597](https://github.com/qmk/qmk_firmware/pull/13597))
437* Created "paddlegame" keymap ([#13629](https://github.com/qmk/qmk_firmware/pull/13629))
438* Add timer_avr to includes for broken builds ([#13641](https://github.com/qmk/qmk_firmware/pull/13641))
439* Disable console by default on all Keebio boards ([#13649](https://github.com/qmk/qmk_firmware/pull/13649))
440* Enable LTO by default on BastardKB Scylla ([#13664](https://github.com/qmk/qmk_firmware/pull/13664))
441* Reduce compile size for dz60rgb v2.1 ([#13680](https://github.com/qmk/qmk_firmware/pull/13680))
442* Clean up remaining RGB_DISABLE_WHEN_USB_SUSPENDED defines ([#13689](https://github.com/qmk/qmk_firmware/pull/13689))
443* Remove some legacy files ([#13715](https://github.com/qmk/qmk_firmware/pull/13715))
444* [Keyboard Update] Change to L422 ([#13717](https://github.com/qmk/qmk_firmware/pull/13717))
445* Update kyria make path example ([#13720](https://github.com/qmk/qmk_firmware/pull/13720))
446* Drashna's Defaults cleanup ([#13722](https://github.com/qmk/qmk_firmware/pull/13722))
447* Reduce firmware size in prep for #12670 ([#13724](https://github.com/qmk/qmk_firmware/pull/13724))
448* Tidy up rgbkb/mun ([#13801](https://github.com/qmk/qmk_firmware/pull/13801))
449* Make default keymap for GMMK Pro reflect stock ([#13850](https://github.com/qmk/qmk_firmware/pull/13850))
450* Rework as per 9824 ([#13898](https://github.com/qmk/qmk_firmware/pull/13898))
451* Remove console from keebio via keyboards ([#13901](https://github.com/qmk/qmk_firmware/pull/13901))
452* Drashna split transport improvement ([#13905](https://github.com/qmk/qmk_firmware/pull/13905))
453* Copy GMMK Pro screw specs to ISO readme ([#13908](https://github.com/qmk/qmk_firmware/pull/13908))
454* Clean up remaining RGB_DISABLE_WHEN_USB_SUSPENDED defines Part 2 ([#13912](https://github.com/qmk/qmk_firmware/pull/13912))
455* Add andrebrait layout for GMMK Pro ([#13932](https://github.com/qmk/qmk_firmware/pull/13932))
456* Updated RGB Matrix suspend define part 3 ([#13954](https://github.com/qmk/qmk_firmware/pull/13954))
457* Improve andrebrait keymap ([#13985](https://github.com/qmk/qmk_firmware/pull/13985))
458* Drashna's Improve OLEDs and custom Split code ([#14063](https://github.com/qmk/qmk_firmware/pull/14063))
459* Kyria default reformat ([#14080](https://github.com/qmk/qmk_firmware/pull/14080))
460* Feature rich keymap for GMMK Pro (ANSI) ([#14120](https://github.com/qmk/qmk_firmware/pull/14120))
461
462Keyboard fixes:
463* Fix LED mapping for GMMK Pro ([#13189](https://github.com/qmk/qmk_firmware/pull/13189))
464* Fix up SplitKB keyboards ([#13511](https://github.com/qmk/qmk_firmware/pull/13511))
465* Keyboards/sol rev2 fix ([#13533](https://github.com/qmk/qmk_firmware/pull/13533))
466* Fix MATRIX_COLS for aeboards/constellation/rev2 ([#13633](https://github.com/qmk/qmk_firmware/pull/13633))
467* Fix errors with matrix_output_unselect_delay function calls ([#13645](https://github.com/qmk/qmk_firmware/pull/13645))
468* Fix default keymap for 0xCB 1337 keyboard ([#13646](https://github.com/qmk/qmk_firmware/pull/13646))
469* Fix Matrix Row number for ggkeyboards/genisis ([#13647](https://github.com/qmk/qmk_firmware/pull/13647))
470* Fix matrix issues with Promethium ([#13648](https://github.com/qmk/qmk_firmware/pull/13648))
471* Fix dc01/left so that it doesn't throw a warning ([#13653](https://github.com/qmk/qmk_firmware/pull/13653))
472* Remove broken, unmaintained converter/ibm_5291 ([#13658](https://github.com/qmk/qmk_firmware/pull/13658))
473* Quick hack to fix Astro65 board ([#13665](https://github.com/qmk/qmk_firmware/pull/13665))
474* Fix symmetric70_proto build break on develop branch ([#13667](https://github.com/qmk/qmk_firmware/pull/13667))
475* Fix matrix delay on Drop boards ([#13671](https://github.com/qmk/qmk_firmware/pull/13671))
476* Fix split matrix for sekigon grs 70ec ([#13672](https://github.com/qmk/qmk_firmware/pull/13672))
477* Fix type on pandora via keymap ([#13681](https://github.com/qmk/qmk_firmware/pull/13681))
478* Fix & clean up tronguylabs/m122_3270 ([#13684](https://github.com/qmk/qmk_firmware/pull/13684))
479* Fix up xd002 rgb keymaps ([#13685](https://github.com/qmk/qmk_firmware/pull/13685))
480* Dactyl Manuform cleanup ([#13686](https://github.com/qmk/qmk_firmware/pull/13686))
481* Fix Q1 change dip switch to bool ([#13687](https://github.com/qmk/qmk_firmware/pull/13687))
482* Fix compile size for the Merge UM70 via keymap ([#13690](https://github.com/qmk/qmk_firmware/pull/13690))
483* Fix compile size for the Lets Split Sockets via keymap ([#13691](https://github.com/qmk/qmk_firmware/pull/13691))
484* Fix Compile size on ungodly Launch Pad ([#13692](https://github.com/qmk/qmk_firmware/pull/13692))
485* dirty fix ([#13695](https://github.com/qmk/qmk_firmware/pull/13695))
486* Fix compile size for the Vitamins Included via keymap ([#13696](https://github.com/qmk/qmk_firmware/pull/13696))
487* Fix typo in Dactyl Manuform ([#13740](https://github.com/qmk/qmk_firmware/pull/13740))
488* Fix compile issues due to LED changes ([#13821](https://github.com/qmk/qmk_firmware/pull/13821))
489* Fix SRC include for matrix/m20add issi driver ([#13826](https://github.com/qmk/qmk_firmware/pull/13826))
490* fix develop branch move file ([#13832](https://github.com/qmk/qmk_firmware/pull/13832))
491* Fix knops keymaps ([#13872](https://github.com/qmk/qmk_firmware/pull/13872))
492* Switch Draculad to using WPM char hack ([#13886](https://github.com/qmk/qmk_firmware/pull/13886))
493* Fix up builds after #8591 ([#13900](https://github.com/qmk/qmk_firmware/pull/13900))
494* Fix matrix_output_unselect_delay for handwired/xealousbrown ([#13913](https://github.com/qmk/qmk_firmware/pull/13913))
495* Fixup rgb matrix config for KBD67 mkII boards ([#13931](https://github.com/qmk/qmk_firmware/pull/13931))
496* Fix compliation for ferris 0.2 bling ([#13937](https://github.com/qmk/qmk_firmware/pull/13937))
497* Fix some additional bootmagic settings ([#13979](https://github.com/qmk/qmk_firmware/pull/13979))
498* Fix default keymap for GMMK Pro Iso ([#13980](https://github.com/qmk/qmk_firmware/pull/13980))
499* Fixup Ungodly Launch Pad config ([#13992](https://github.com/qmk/qmk_firmware/pull/13992))
500* Fix errors that have cropped up in develop ([#14005](https://github.com/qmk/qmk_firmware/pull/14005))
501* Fix wait_us overflow in matrix for dactyl based boards ([#14039](https://github.com/qmk/qmk_firmware/pull/14039))
502* Fixup Neson Design N6 ISSI includes ([#14045](https://github.com/qmk/qmk_firmware/pull/14045))
503* Fixup `massdrop/alt`, `cest73/tkm`. ([#14048](https://github.com/qmk/qmk_firmware/pull/14048))
504* fix helix:fraanrosi compile error caused by #13677. ([#14061](https://github.com/qmk/qmk_firmware/pull/14061))
505* Fix compile issues for Tractyl Manuform ([#14105](https://github.com/qmk/qmk_firmware/pull/14105))
506* Disable Console on Keebio Quefrency ([#14108](https://github.com/qmk/qmk_firmware/pull/14108))
507* Fixed GMMK Pro -> stickandgum keymap readme.md ([#14123](https://github.com/qmk/qmk_firmware/pull/14123))
508* Drashna keymap fixups ([#14140](https://github.com/qmk/qmk_firmware/pull/14140))
509* fix ([#14142](https://github.com/qmk/qmk_firmware/pull/14142))
510* Fix merge artifacts ([#14146](https://github.com/qmk/qmk_firmware/pull/14146))
511* Update readme files ([#14172](https://github.com/qmk/qmk_firmware/pull/14172))
512
513Others:
514* Add examples to RGB Matrix Indicators docs ([#12797](https://github.com/qmk/qmk_firmware/pull/12797))
515
516Bugs:
517* Fix Indicator LED issues ([#12097](https://github.com/qmk/qmk_firmware/pull/12097))
518* Fixing incorrect keymap build when switching between multiple keymap.jsons ([#12632](https://github.com/qmk/qmk_firmware/pull/12632))
519* Fix LED Hit Counter for LED/RGB Matrix ([#12674](https://github.com/qmk/qmk_firmware/pull/12674))
520* ChibiOS fix O3 and LTO breakage of extra keys and joystick ([#12819](https://github.com/qmk/qmk_firmware/pull/12819))
521* Remove the #10088 hotfix for Teensy 3.1-like Input:Club keyboards ([#12870](https://github.com/qmk/qmk_firmware/pull/12870))
522* Fix firmware size check with avr-libc 1:2.0.0+Atmel3.6.2-1.1 (Debian bullseye) ([#12951](https://github.com/qmk/qmk_firmware/pull/12951))
523* Fix RGB/LED Suspend defines ([#13146](https://github.com/qmk/qmk_firmware/pull/13146))
524* Fix overrun in st7565_write_raw when not at (0, 0) ([#13209](https://github.com/qmk/qmk_firmware/pull/13209))
525* Upgrades Vagrant box to Debian 10 to fix Docker build error on Debian 9. ([#13236](https://github.com/qmk/qmk_firmware/pull/13236))
526* Fix issues with VIA EEPROM init and bring in line with eeconfig functionality ([#13243](https://github.com/qmk/qmk_firmware/pull/13243))
527* Fix CRC for AVR and enable again. ([#13253](https://github.com/qmk/qmk_firmware/pull/13253))
528* Fix linker error when rgblight and RGB Matrix are both enabled ([#13304](https://github.com/qmk/qmk_firmware/pull/13304))
529* Fix building layouts from JSON ([#13310](https://github.com/qmk/qmk_firmware/pull/13310))
530* Add rgblight to RGB Matrix VPATH ([#13371](https://github.com/qmk/qmk_firmware/pull/13371))
531* Fix two out of bounds accesses from #13330. ([#13525](https://github.com/qmk/qmk_firmware/pull/13525))
532* Fixes for clang not being able to run unit tests ([#13546](https://github.com/qmk/qmk_firmware/pull/13546))
533* Fixup Audio startup and add to documents ([#13606](https://github.com/qmk/qmk_firmware/pull/13606))
534* CLI/Docs: Fix the format commands' name ([#13668](https://github.com/qmk/qmk_firmware/pull/13668))
535* Disables rgblight twinkle by default. ([#13677](https://github.com/qmk/qmk_firmware/pull/13677))
536* Fix typo in dip switch example ([#13688](https://github.com/qmk/qmk_firmware/pull/13688))
537* docs/cli_commands: fix typo ([#13697](https://github.com/qmk/qmk_firmware/pull/13697))
538* Include gpio.h in solenoid driver for GPIO Control functions ([#13716](https://github.com/qmk/qmk_firmware/pull/13716))
539* Fix pimoroni trackball read address ([#13810](https://github.com/qmk/qmk_firmware/pull/13810))
540* Fix Key Override includes ([#13831](https://github.com/qmk/qmk_firmware/pull/13831))
541* Fix alignment of USB out report buffer 2 -> 4 ([#13838](https://github.com/qmk/qmk_firmware/pull/13838))
542* Fix compilation issue. ([#13926](https://github.com/qmk/qmk_firmware/pull/13926))
543* Fix `combo_disable` ([#13988](https://github.com/qmk/qmk_firmware/pull/13988))
544* Fix pmw3360 code to only output debug info if mouse debugging is enabled ([#13993](https://github.com/qmk/qmk_firmware/pull/13993))
545* Fix ifdefs for OLED split sync code ([#14017](https://github.com/qmk/qmk_firmware/pull/14017))
546* Various fixes from reorg of files ([#14051](https://github.com/qmk/qmk_firmware/pull/14051))
547* Fixup atsam builds. ([#14052](https://github.com/qmk/qmk_firmware/pull/14052))
548* Fix RGB/LED Matrix Suspend code ([#14084](https://github.com/qmk/qmk_firmware/pull/14084))
549* Fix issues with recent keymap.json changes ([#14089](https://github.com/qmk/qmk_firmware/pull/14089))
550* Fix LED Matrix suspend code ([#14090](https://github.com/qmk/qmk_firmware/pull/14090))
551* Fix up compilation issues. ([#14095](https://github.com/qmk/qmk_firmware/pull/14095))
552* Fix copypasta issue with pmw3360 sensor config ([#14106](https://github.com/qmk/qmk_firmware/pull/14106))
553* Fix typo ([#14118](https://github.com/qmk/qmk_firmware/pull/14118))
554* Fix bootloadHID comments breaking :flash ([#14133](https://github.com/qmk/qmk_firmware/pull/14133))
555* Fix Mouse Shared EP functionality ([#14136](https://github.com/qmk/qmk_firmware/pull/14136))
556* Short term bodge for firmware size bloat ([#14144](https://github.com/qmk/qmk_firmware/pull/14144))
557* Move to correct location ([#14171](https://github.com/qmk/qmk_firmware/pull/14171))
diff --git a/docs/ChangeLog/20211127.md b/docs/ChangeLog/20211127.md
new file mode 100644
index 000000000..d954bb9f6
--- /dev/null
+++ b/docs/ChangeLog/20211127.md
@@ -0,0 +1,457 @@
1# QMK Breaking Changes - 2021 November 27 Changelog
2
3## 2000 keyboards! :id=qmk-2000th-keyboard
4
5QMK had it's 2000th keyboard submitted during this breaking changes cycle.... and it only _just_ made the cut-off!
6
7```shell
8% qmk list-keyboards | wc -l
92003
10```
11
12From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware!
13
14## Notable Features :id=notable-features
15
16### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) :id=expanded-pointing-device
17
18Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals.
19
20Usages of `POINTING_DEVICE_ENABLE = yes` in `rules.mk` files now need to be accompanied by a corresponding `POINTING_DEVICE_DRIVER = ???` line, specifying which driver to use during the build. Existing keyboards have already been migrated across to the new usage pattern, so most likely no change is required by users.
21
22QMK now has core-supplied support for the following pointing device peripherals:
23
24| `rules.mk` line | Supported device |
25|------------------------------------------------|-----------------------------------------|
26| `POINTING_DEVICE_DRIVER = analog_joystick` | Analog joysticks, such as PSP joysticks |
27| `POINTING_DEVICE_DRIVER = adns5050` | ADNS 5050 sensor |
28| `POINTING_DEVICE_DRIVER = adns9800` | ADNS 9800 laser sensor |
29| `POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c` | Cirque touchpad, I2C mode |
30| `POINTING_DEVICE_DRIVER = cirque_pinnacle_spi` | Cirque Touchpad, SPI mode |
31| `POINTING_DEVICE_DRIVER = pimoroni_trackball` | Pimoroni Trackball |
32| `POINTING_DEVICE_DRIVER = pmw3360` | PMW 3360 |
33
34See the new documentation for the [Pointing Device](../feature_pointing_device.md) feature for more information on specific configuration for each driver.
35
36### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) :id=dynamic-tapping-term
37
38For people who are starting out with tapping keys, or for people who think tapping keys don't "feel right", it's sometimes quite difficult to determine what duration of tapping term to use to make things seem natural.
39
40If you're in this stage of discovery, you can now add `DYNAMIC_TAPPING_TERM_ENABLE = yes` to your `rules.mk`, which enables the use of the following keycodes in your keymap:
41
42| Key | Description |
43|-----------|-------------------------------------------------------------------------------|
44| `DT_PRNT` | "Dynamic Tapping Term Print": Types the current tapping term, in milliseconds |
45| `DT_UP` | "Dynamic Tapping Term Up": Increases the current tapping term by 5ms |
46| `DT_DOWN` | "Dynamic Tapping Term Down": Decreases the current tapping term by 5ms |
47
48Coupled with the use of `qmk console` or QMK Toolbox to show console output from your keyboard, you can tweak the tapping term dynamically in order to narrow down what "feels right" to you. Once you're happy, drop in the resulting number into your keymap's `config.h` and you're good to go!
49
50### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) :id=macros-in-keymap-json
51
52You can now define up to 32 macros in your `keymap.json` file, as used by [QMK Configurator](newbs_building_firmware_configurator.md), and `qmk compile`. You can define these macros in a list under the `macros` keyword, like this:
53
54```json
55{
56 "keyboard": "handwired/my_macropad",
57 "keymap": "my_keymap",
58 "macros": [
59 [ // first listed is MACRO_0...
60 {"action":"down", "keycodes": ["LSFT"]},
61 "hello world1",
62 {"action": "up","keycodes": ["LSFT"]}
63 ],
64 [ // ...then MACRO_1...
65 {"action":"tap", "keycodes": ["LCTL", "LALT", "DEL"]}
66 ],
67 [ // ...then MACRO_2...
68 "ding!",
69 {"action":"beep"}
70 ],
71 [ // ...and MACRO_3.
72 {"action":"tap", "keycodes": ["F1"]},
73 {"action":"delay", "duration": "1000"},
74 {"action":"tap", "keycodes": ["PGDN"]}
75 ]
76 ],
77 "layout": "LAYOUT_all",
78 "layers": [
79 ["MACRO_0", "MACRO_1", "MACRO_2", "MACRO_3"]
80 ]
81}
82```
83
84In due course, [QMK Configurator](https://config.qmk.fm/) will pick up support for defining these in its UI, but for now the json is the only way to define macros.
85
86## Changes Requiring User Action :id=changes-requiring-user-action
87
88### Updated Keyboard Codebases :id=updated-keyboard-codebases
89
90The following keyboards have had their source moved within QMK:
91
92| Old Keyboard Name | New Keyboard Name |
93|------------------------|---------------------------------|
94| aozora/hotswap | aozora |
95| gskt00 | kapcave/gskt00 |
96| handwired/dtisaac01 | dtisaac/dtisaac01 |
97| kprepublic/bm60poker | kprepublic/bm60hsrgb_poker/rev1 |
98| kprepublic/bm60rgb | kprepublic/bm60hsrgb/rev1 |
99| kprepublic/bm60rgb_iso | kprepublic/bm60hsrgb_iso/rev1 |
100| kprepublic/bm65iso | kprepublic/bm65hsrgb_iso |
101| kprepublic/bm68rgb | kprepublic/bm68hsrgb |
102| paladin64 | kapcave/paladin64 |
103| portal_66 | portal_66/soldered |
104| signum/3_0/elitec | signum/3_0 |
105| tgr/jane | tgr/jane/v2 |
106
107### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) :id=squeezing-space-from-avr
108
109The AVR platform has been problematic for some time, in the sense that it is severely resource-constrained -- this makes life difficult for anyone attempting to add new functionality such as display panels to their keymap code. The illustrious Drashna has contributed some newer documentation on how to attempt to free up some space on AVR-based keyboards that are in short supply.
110
111Of course, there are much fewer constraints with ARM chips... ;)
112
113### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) :id=explicit-rgb-modes
114
115Related to the previous section -- RGB Matrix modes have now been made to be opt-in, rather than opt-out. As these animations are now opt-in, you may find that your keyboard no longer has all the RGB modes you're expecting -- you may need to configure and recompile your firmware and enable your animations of choice... with any luck they'll still fit in the space available.
116
117Most keyboards keep their original functionality, but over time the QMK maintainers have found that removal of animations ends up being the quickest way to free up space... and some keyboards have had animations such as reactive effects disabled by default in order to still fit within the flash space available.
118
119The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](feature_rgb_matrix.md#rgb-matrix-effects) page.
120
121### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) :id=oled-task-refactor
122
123OLED display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of `bool *_kb()` deferring to `bool *_user()` functions, allowing signalling to the higher level that processing had already been done.
124
125This changes the standard OLED drawing function model to allow for a base implementation to be provided by a keyboard, but also still allow for keymap-level overrides without needing to modify the keyboard's code.
126
127The old keymap code went something like this:
128
129```c
130void oled_task_user(void) {
131 // keymap drawing code
132}
133```
134
135...but the new keymap code looks like this:
136```c
137bool oled_task_user(void) {
138 // keymap drawing code
139 return false;
140}
141```
142
143Keyboard designers should now structure their keyboard-level drawing routines like the following, in order to allow for keymap overrides:
144
145```c
146bool oled_task_kb(void) {
147 // Defer to the keymap if they want to override
148 if(!oled_task_user()) { return false; }
149
150 // default keyboard drawing code
151 return false;
152}
153```
154
155### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) :id=bootmagic-full-removal
156
157As noted during previous breaking changes cycles, QMK decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
158
159This removal is now complete!
160
161This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `lite` or `full` results in an error, allowing only `yes` or `no`, with `yes` mirroring historical `lite` functionality.
162
163All use of the `lite` keyword within the repository has been migrated to `yes` -- any new submissions using `lite` will now fail to build and should be updated accordingly.
164
165#### Bootmagic Full Deprecation Schedule: Complete!
166
167This is the historical timeline for the behavior of `BOOTMAGIC_ENABLE`:
168
169- (done) From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic.
170- (done) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
171- (now) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
172
173### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) :id=remove-qwiic
174
175Due to minimal QWIIC adoption and other options for similar functionality, the QWIIC drivers were removed from QMK. Existing OLED usages have been migrated across to the normal QMK OLED driver instead.
176
177## Notable core changes :id=notable-core
178
179### New MCU Support :id=new-mcu-support
180
181QMK firmware picked up support for a handful of new MCU families, potentially making it a bit easier to source components.
182
183QMK firmware is now no longer limited to AVR and ARM - it also picked up support for our first RISC-V chip, the GD32VF103.
184
185* Add support for RISC-V builds and GD32VF103 MCU ([#12508](https://github.com/qmk/qmk_firmware/pull/12508))
186* Add HT32 support to core ([#14388](https://github.com/qmk/qmk_firmware/pull/14388))
187* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422))
188* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584))
189
190### EEPROM Changes :id=eeprom-changes
191
192There were a few EEPROM-related changes that landed during this breaking changes cycle, most prominently the long-awaited ability for the Drop boards to gain persistent storage. Any users of the Drop CTRL or Drop ALT should update QMK Toolbox as well -- coupled with a QMK firmware update settings should now be saved.
193
194* massdrop alt/ctrl: support saving into nvm ([#6068](https://github.com/qmk/qmk_firmware/pull/6068))
195* Implement F4 eeprom ([#14195](https://github.com/qmk/qmk_firmware/pull/14195))
196* make the full 4096 bytes of EEPROM work on Teensy 3.6 ([#12947](https://github.com/qmk/qmk_firmware/pull/12947))
197* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591))
198* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752))
199
200### Compilation Database :id=compile-commands
201
202A clang-compatible compilation database generator has been added as an option in order to help development environments such as Visual Studio Code.
203
204Running `qmk generate-compilation-database -kb <yourkb> -km <yourkeymap>` from within the QMK firmware directory will generate a `compile_commands.json` file -- using a compatible IDE will likely see this and correctly start detecting the correct locations for source files as well as type and function information that are relevant to your build.
205
206Do note that switching keyboards will require re-generation of this file.
207
208* New CLI subcommand to create clang-compatible compilation database (`compile_commands.json`) ([#14370](https://github.com/qmk/qmk_firmware/pull/14370))
209* compiledb: query include paths from gcc directly. ([#14462](https://github.com/qmk/qmk_firmware/pull/14462))
210
211### Codebase restructure and cleanup :id=codebase-restructure
212
213QMK continues on its restructuring journey, in order to make it easier to integrate newer features and add support for new hardware. This quarter's batch of changes include:
214
215* add 'include keyboard_features.mk' into build_keyboard.mk ([#8422](https://github.com/qmk/qmk_firmware/pull/8422))
216* Infer more when building features ([#13890](https://github.com/qmk/qmk_firmware/pull/13890))
217* Move `tmk_core/common/<plat>` ([#13918](https://github.com/qmk/qmk_firmware/pull/13918))
218* Move feature suspend logic out of platform specific code ([#14210](https://github.com/qmk/qmk_firmware/pull/14210))
219* Remove bin/qmk ([#14231](https://github.com/qmk/qmk_firmware/pull/14231))
220* Move Audio drivers from quantum to platform drivers folder ([#14308](https://github.com/qmk/qmk_firmware/pull/14308))
221* Remove Arduino-style `analogRead()` ([#14348](https://github.com/qmk/qmk_firmware/pull/14348))
222* Remove unreferenced IBM4704, Sony NEWS, NeXT keyboard code. ([#14380](https://github.com/qmk/qmk_firmware/pull/14380))
223* Move Bluetooth config to common_features.mk ([#14404](https://github.com/qmk/qmk_firmware/pull/14404))
224* Relocate Adafruit BLE code ([#14530](https://github.com/qmk/qmk_firmware/pull/14530))
225* Change `MK66F18` -> `MK66FX1M0` ([#14659](https://github.com/qmk/qmk_firmware/pull/14659))
226* Remove sysex API ([#14723](https://github.com/qmk/qmk_firmware/pull/14723))
227* Basic keycode overhaul ([#14726](https://github.com/qmk/qmk_firmware/pull/14726))
228* Remove SERIAL_LINK feature ([#14727](https://github.com/qmk/qmk_firmware/pull/14727))
229* Move converter specific tmk_core protocols ([#14743](https://github.com/qmk/qmk_firmware/pull/14743))
230* Align PS/2 GPIO defines ([#14745](https://github.com/qmk/qmk_firmware/pull/14745))
231* Clean up LED/RGB Matrix driver config ([#14760](https://github.com/qmk/qmk_firmware/pull/14760))
232* Update UART driver API ([#14839](https://github.com/qmk/qmk_firmware/pull/14839))
233* Tidy up LCD_ENABLE/visualizer references ([#14855](https://github.com/qmk/qmk_firmware/pull/14855))
234* Remove legacy Makefile functionality ([#14858](https://github.com/qmk/qmk_firmware/pull/14858))
235* Begin to carve out platform/protocol API - Migrate keyboard_* calls ([#14888](https://github.com/qmk/qmk_firmware/pull/14888))
236* Rename platform SRC variable ([#14894](https://github.com/qmk/qmk_firmware/pull/14894))
237* Relocate PS2 code ([#14895](https://github.com/qmk/qmk_firmware/pull/14895))
238* Move USE_CCACHE logic to common location ([#14899](https://github.com/qmk/qmk_firmware/pull/14899))
239* Migrate makefile utilities to sub-directory ([#14917](https://github.com/qmk/qmk_firmware/pull/14917))
240* Remove SERIAL_MOUSE ([#14969](https://github.com/qmk/qmk_firmware/pull/14969))
241* Relocate protocol files within tmk_core/common/ ([#14972](https://github.com/qmk/qmk_firmware/pull/14972))
242* More platform/protocol alignment ([#14976](https://github.com/qmk/qmk_firmware/pull/14976))
243* Fix uart function prototypes ([#15162](https://github.com/qmk/qmk_firmware/pull/15162))
244* Remove deprecated KEYMAP alias ([#15037](https://github.com/qmk/qmk_firmware/pull/15037))
245* Move non-assignment code to post_rules.mk ([#14207](https://github.com/qmk/qmk_firmware/pull/14207))
246* Helix use `post_rules.mk` ([#14216](https://github.com/qmk/qmk_firmware/pull/14216))
247* Make ChibiOS PAL interactions less STM32 specific - Round 2 ([#14456](https://github.com/qmk/qmk_firmware/pull/14456))
248
249---
250
251## Full changelist
252
253Core:
254* massdrop alt/ctrl: support saving into nvm ([#6068](https://github.com/qmk/qmk_firmware/pull/6068))
255* Made AVR backlight pwm resolution configurable ([#7521](https://github.com/qmk/qmk_firmware/pull/7521))
256* add 'include keyboard_features.mk' into build_keyboard.mk ([#8422](https://github.com/qmk/qmk_firmware/pull/8422))
257* New feature: `DYNAMIC_TAPPING_TERM_ENABLE` ([#11036](https://github.com/qmk/qmk_firmware/pull/11036))
258* Add Retro Shift (Auto Shift for Tap Hold via Retro Tapping) and Custom Auto Shifts ([#11059](https://github.com/qmk/qmk_firmware/pull/11059))
259* Add support for RISC-V builds and GD32VF103 MCU ([#12508](https://github.com/qmk/qmk_firmware/pull/12508))
260* Add Fractal RGB matrix effects ([#12670](https://github.com/qmk/qmk_firmware/pull/12670))
261* Added power tracking api ([#12691](https://github.com/qmk/qmk_firmware/pull/12691))
262* haptic: Feature to disable it when usb port is not configured or suspended. ([#12692](https://github.com/qmk/qmk_firmware/pull/12692))
263* make the full 4096 bytes of EEPROM work on Teensy 3.6 ([#12947](https://github.com/qmk/qmk_firmware/pull/12947))
264* Add Support for USB programmable buttons ([#12950](https://github.com/qmk/qmk_firmware/pull/12950))
265* [Tests] Increase QMK test coverage ([#13789](https://github.com/qmk/qmk_firmware/pull/13789))
266* Add support for ISSI drivers on both sides of a split keyboard ([#13842](https://github.com/qmk/qmk_firmware/pull/13842))
267* Infer more when building features ([#13890](https://github.com/qmk/qmk_firmware/pull/13890))
268* Reimplements WPM feature to be smaller & precise ([#13902](https://github.com/qmk/qmk_firmware/pull/13902))
269* Move `tmk_core/common/<plat>` ([#13918](https://github.com/qmk/qmk_firmware/pull/13918))
270* Improvements to handling of disconnected split keyboards. ([#14033](https://github.com/qmk/qmk_firmware/pull/14033))
271* Add Pixel Rain RGB Matrix effect ([#14155](https://github.com/qmk/qmk_firmware/pull/14155))
272* Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174))
273* Add LM() keys to the list of keys disabled by NO_HAPTIC_MOD ([#14181](https://github.com/qmk/qmk_firmware/pull/14181))
274* Implement F4 eeprom ([#14195](https://github.com/qmk/qmk_firmware/pull/14195))
275* define to AUTO_SHIFT_DISABLED_AT_STARTUP ([#14201](https://github.com/qmk/qmk_firmware/pull/14201))
276* Move feature suspend logic out of platform specific code ([#14210](https://github.com/qmk/qmk_firmware/pull/14210))
277* Remove bin/qmk ([#14231](https://github.com/qmk/qmk_firmware/pull/14231))
278* Change keyboard level include guards to `pragma once` ([#14248](https://github.com/qmk/qmk_firmware/pull/14248))
279* i2c_master: Add support for reading/writing to 16-bit registers ([#14289](https://github.com/qmk/qmk_firmware/pull/14289))
280* Move Audio drivers from quantum to platform drivers folder ([#14308](https://github.com/qmk/qmk_firmware/pull/14308))
281* Add RGBW support to PWM and SPI drivers for ChibiOS ([#14327](https://github.com/qmk/qmk_firmware/pull/14327))
282* Rework and expand Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343))
283* Remove Arduino-style `analogRead()` ([#14348](https://github.com/qmk/qmk_firmware/pull/14348))
284* Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374))
285* Remove unreferenced IBM4704, Sony NEWS, NeXT keyboard code. ([#14380](https://github.com/qmk/qmk_firmware/pull/14380))
286* Add HT32 support to core ([#14388](https://github.com/qmk/qmk_firmware/pull/14388))
287* Align ChibiOS I2C defs with other drivers ([#14399](https://github.com/qmk/qmk_firmware/pull/14399))
288* Move Bluetooth config to common_features.mk ([#14404](https://github.com/qmk/qmk_firmware/pull/14404))
289* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422))
290* Refactor use of STM32_SYSCLK ([#14430](https://github.com/qmk/qmk_firmware/pull/14430))
291* Migrate STM32_EEPROM_ENABLE to use EEPROM_DRIVER ([#14433](https://github.com/qmk/qmk_firmware/pull/14433))
292* Refactor use of _STM32_ defines ([#14439](https://github.com/qmk/qmk_firmware/pull/14439))
293* Add i2c defaults for Convert to Proton C ([#14470](https://github.com/qmk/qmk_firmware/pull/14470))
294* Use opendrain pin with external pullup again ([#14474](https://github.com/qmk/qmk_firmware/pull/14474))
295* Add ability to use numpad digits for unicode mode UC_WIN ([#14496](https://github.com/qmk/qmk_firmware/pull/14496))
296* Enable de-ghosting for RGB/LED matrix on all ISSI LED drivers ([#14508](https://github.com/qmk/qmk_firmware/pull/14508))
297* Relocate Adafruit BLE code ([#14530](https://github.com/qmk/qmk_firmware/pull/14530))
298* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584))
299* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591))
300* Remove GCC version check from song list inclusion ([#14600](https://github.com/qmk/qmk_firmware/pull/14600))
301* Change `MK66F18` -> `MK66FX1M0` ([#14659](https://github.com/qmk/qmk_firmware/pull/14659))
302* Add ifndef to WS2812 timing constraints ([#14678](https://github.com/qmk/qmk_firmware/pull/14678))
303* Reuse of EEPROM debounce logic ([#14699](https://github.com/qmk/qmk_firmware/pull/14699))
304* Remove sysex API ([#14723](https://github.com/qmk/qmk_firmware/pull/14723))
305* Basic keycode overhaul ([#14726](https://github.com/qmk/qmk_firmware/pull/14726))
306* Remove SERIAL_LINK feature ([#14727](https://github.com/qmk/qmk_firmware/pull/14727))
307* Enable CLI flashing via mdloader ([#14729](https://github.com/qmk/qmk_firmware/pull/14729))
308* Correct the Turkish F '?' keycode (TR_QUES) ([#14740](https://github.com/qmk/qmk_firmware/pull/14740))
309* Move converter specific tmk_core protocols ([#14743](https://github.com/qmk/qmk_firmware/pull/14743))
310* Align PS/2 GPIO defines ([#14745](https://github.com/qmk/qmk_firmware/pull/14745))
311* Improve Adafruit BLE configuration defines ([#14749](https://github.com/qmk/qmk_firmware/pull/14749))
312* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752))
313* Clean up LED/RGB Matrix driver config ([#14760](https://github.com/qmk/qmk_firmware/pull/14760))
314* Initial USB2422 driver ([#14835](https://github.com/qmk/qmk_firmware/pull/14835))
315* Update UART driver API ([#14839](https://github.com/qmk/qmk_firmware/pull/14839))
316* Split out arm_atsam shift register logic ([#14848](https://github.com/qmk/qmk_firmware/pull/14848))
317* Split out HAPTIC_ENABLE to have separate DRIVER option ([#14854](https://github.com/qmk/qmk_firmware/pull/14854))
318* Tidy up LCD_ENABLE/visualizer references ([#14855](https://github.com/qmk/qmk_firmware/pull/14855))
319* Remove legacy Makefile functionality ([#14858](https://github.com/qmk/qmk_firmware/pull/14858))
320* Add support for deferred executors. ([#14859](https://github.com/qmk/qmk_firmware/pull/14859))
321* Change OLED task function to be boolean ([#14864](https://github.com/qmk/qmk_firmware/pull/14864))
322* Add a new led driver for Keychron's keyboards. ([#14872](https://github.com/qmk/qmk_firmware/pull/14872))
323* Begin to carve out platform/protocol API - Migrate keyboard_* calls ([#14888](https://github.com/qmk/qmk_firmware/pull/14888))
324* Rename platform SRC variable ([#14894](https://github.com/qmk/qmk_firmware/pull/14894))
325* Relocate PS2 code ([#14895](https://github.com/qmk/qmk_firmware/pull/14895))
326* Move USE_CCACHE logic to common location ([#14899](https://github.com/qmk/qmk_firmware/pull/14899))
327* Migrate makefile utilities to sub-directory ([#14917](https://github.com/qmk/qmk_firmware/pull/14917))
328* Remove legacy handling for ErgoDox Infinity handedness ([#14919](https://github.com/qmk/qmk_firmware/pull/14919))
329* Align usbasp flashing behaviour ([#14928](https://github.com/qmk/qmk_firmware/pull/14928))
330* Optimize matrix scanning by removing variable shifts ([#14947](https://github.com/qmk/qmk_firmware/pull/14947))
331* Stop-gap forward-port Drop LED features for CTRL and ALT ([#14967](https://github.com/qmk/qmk_firmware/pull/14967))
332* Remove SERIAL_MOUSE ([#14969](https://github.com/qmk/qmk_firmware/pull/14969))
333* Relocate protocol files within tmk_core/common/ ([#14972](https://github.com/qmk/qmk_firmware/pull/14972))
334* Move LTO logic from common.mk ([#14973](https://github.com/qmk/qmk_firmware/pull/14973))
335* More platform/protocol alignment ([#14976](https://github.com/qmk/qmk_firmware/pull/14976))
336* Add support to persist MD LED framework settings ([#14980](https://github.com/qmk/qmk_firmware/pull/14980))
337* Enable configuration of PWM frequency for IS31FL3733B ([#14983](https://github.com/qmk/qmk_firmware/pull/14983))
338* Remove `BOOTMAGIC_ENABLE = lite` option ([#15002](https://github.com/qmk/qmk_firmware/pull/15002))
339* Manually format develop ([#15003](https://github.com/qmk/qmk_firmware/pull/15003))
340* Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018))
341* Remove deprecated KEYMAP alias ([#15037](https://github.com/qmk/qmk_firmware/pull/15037))
342* Fix uart function prototypes ([#15162](https://github.com/qmk/qmk_firmware/pull/15162))
343* Rename RGB fractal ([#15174](https://github.com/qmk/qmk_firmware/pull/15174))
344* Format code according to conventions ([#15195](https://github.com/qmk/qmk_firmware/pull/15195))
345* Format code according to conventions ([#15196](https://github.com/qmk/qmk_firmware/pull/15196))
346* Add uint to char functions ([#15244](https://github.com/qmk/qmk_firmware/pull/15244))