qmk_firmware/ChangeLog/20211127.html

62 lines
158 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>QMK Breaking Changes - 2021 November 27 Changelog | QMK Firmware</title>
<meta name="description" content="Documentation for QMK Firmware">
<meta name="generator" content="VitePress v1.1.3">
<link rel="preload stylesheet" href="/assets/style.R_mF0amW.css" as="style">
<script type="module" src="/assets/app.B02gM4TG.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.DyMmIvSC.js">
<link rel="modulepreload" href="/assets/chunks/theme.Y8mokbzj.js">
<link rel="modulepreload" href="/assets/ChangeLog_20211127.md.BDzkUAQX.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar has-sidebar top" data-v-ae24b3ad data-v-ccf7ddec><div class="wrapper" data-v-ccf7ddec><div class="container" data-v-ccf7ddec><div class="title" data-v-ccf7ddec><div class="VPNavBarTitle has-sidebar" data-v-ccf7ddec data-v-ab179fa1><a class="title" href="/" data-v-ab179fa1><!--[--><!--]--><!--[--><!--[--><!--[--><img class="VPImage dark logo" src="/badge-community-dark.svg" alt data-v-8426fc1a><!--]--><!--[--><img class="VPImage light logo" src="/badge-community-light.svg" alt data-v-8426fc1a><!--]--><!--]--><!--]--><!----><!--[--><!--]--></a></div></div><div class="content" data-v-ccf7ddec><div class="content-body" data-v-ccf7ddec><!--[--><!--]--><div class="VPNavBarSearch search" data-v-ccf7ddec><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-ccf7ddec data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="./" tabindex="0" data-v-7f418b0f data-v-9c663999><!--[--><span data-v-9c663999>Home</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-ccf7ddec data-v-e6aabb21><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-e6aabb21 data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-ccf7ddec data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://reddit.com/r/olkb" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.843
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">2003</span></span></code></pre></div><p>From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware!</p><h2 id="notable-features" tabindex="-1">Notable Features <a class="header-anchor" href="#notable-features" aria-label="Permalink to &quot;Notable Features {#notable-features}&quot;"></a></h2><h3 id="expanded-pointing-device" tabindex="-1">Expanded Pointing Device support (<a href="https://github.com/qmk/qmk_firmware/pull/14343" target="_blank" rel="noreferrer">#14343</a>) <a class="header-anchor" href="#expanded-pointing-device" aria-label="Permalink to &quot;Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) {#expanded-pointing-device}&quot;"></a></h3><p>Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals.</p><p>Usages of <code>POINTING_DEVICE_ENABLE = yes</code> in <code>rules.mk</code> files now need to be accompanied by a corresponding <code>POINTING_DEVICE_DRIVER = ???</code> 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.</p><p>QMK now has core-supplied support for the following pointing device peripherals:</p><table><thead><tr><th><code>rules.mk</code> line</th><th>Supported device</th></tr></thead><tbody><tr><td><code>POINTING_DEVICE_DRIVER = analog_joystick</code></td><td>Analog joysticks, such as PSP joysticks</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = adns5050</code></td><td>ADNS 5050 sensor</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = adns9800</code></td><td>ADNS 9800 laser sensor</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c</code></td><td>Cirque touchpad, I2C mode</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = cirque_pinnacle_spi</code></td><td>Cirque Touchpad, SPI mode</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = pimoroni_trackball</code></td><td>Pimoroni Trackball</td></tr><tr><td><code>POINTING_DEVICE_DRIVER = pmw3360</code></td><td>PMW 3360</td></tr></tbody></table><p>See the new documentation for the <a href="./../feature_pointing_device">Pointing Device</a> feature for more information on specific configuration for each driver.</p><h3 id="dynamic-tapping-term" tabindex="-1">Dynamic Tapping Term (<a href="https://github.com/qmk/qmk_firmware/pull/11036" target="_blank" rel="noreferrer">#11036</a>) <a class="header-anchor" href="#dynamic-tapping-term" aria-label="Permalink to &quot;Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term}&quot;"></a></h3><p>For people who are starting out with tapping keys, or for people who think tapping keys don&#39;t &quot;feel right&quot;, it&#39;s sometimes quite difficult to determine what duration of tapping term to use to make things seem natural.</p><p>If you&#39;re in this stage of discovery, you can now add <code>DYNAMIC_TAPPING_TERM_ENABLE = yes</code> to your <code>rules.mk</code>, which enables the use of the following keycodes in your keymap:</p><table><thead><tr><th>Key</th><th>Description</th></tr></thead><tbody><tr><td><code>DT_PRNT</code></td><td>&quot;Dynamic Tapping Term Print&quot;: Types the current tapping term, in milliseconds</td></tr><tr><td><code>DT_UP</code></td><td>&quot;Dynamic Tapping Term Up&quot;: Increases the current tapping term by 5ms</td></tr><tr><td><code>DT_DOWN</code></td><td>&quot;Dynamic Tapping Term Down&quot;: Decreases the current tapping term by 5ms</td></tr></tbody></table><p>Coupled with the use of <code>qmk console</code> or QMK Toolbox to show console output from your keyboard, you can tweak the tapping term dynamically in order to narrow down what &quot;feels right&quot; to you. Once you&#39;re happy, drop in the resulting number into your keymap&#39;s <code>config.h</code> and you&#39;re good to go!</p><h3 id="macros-in-keymap-json" tabindex="-1">Macros in JSON keymaps (<
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;keyboard&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;handwired/my_macropad&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;keymap&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;my_keymap&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;macros&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// first listed is QK_MACRO_0...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;down&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;keycodes&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;LSFT&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]},</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;hello world1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;up&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;keycodes&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;LSFT&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ...then QK_MACRO_1...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;tap&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;keycodes&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;LCTL&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;LALT&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;DEL&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ...then QK_MACRO_2...</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;ding!&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;beep&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ...and QK_MACRO_3.</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;tap&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;keycodes&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;F1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]},</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;delay&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;duration&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;1000&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">},</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;action&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;tap&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">&quot;keycodes&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;PGDN&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;layout&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;LAYOUT_all&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;layers&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;QK_MACRO_0&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;QK_MACRO_1&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;QK_MACRO_2&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;QK_MACRO_3&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>In due course, <a href="https://config.qmk.fm/" target="_blank" rel="noreferrer">QMK Configurator</a> will pick up support for defining these in its UI, but for now the json is the only way to define macros.</p><h2 id="changes-requiring-user-action" tabindex="-1">Changes Requiring User Action <a class="header-anchor" href="#changes-requiring-user-action" aria-label="Permalink to &quot;Changes Requiring User Action {#changes-requiring-user-action}&quot;"></a></h2><h3 id="updated-keyboard-codebases" tabindex="-1">Updated Keyboard Codebases <a class="header-anchor" href="#updated-keyboard-codebases" aria-label="Permalink to &quot;Updated Keyboard Codebases {#updated-keyboard-codebases}&quot;"></a></h3><p>The following keyboards have had their source moved within QMK:</p><table><thead><tr><th>Old Keyboard Name</th><th>New Keyboard Name</th></tr></thead><tbody><tr><td>aozora/hotswap</td><td>aozora</td></tr><tr><td>gskt00</td><td>kapcave/gskt00</td></tr><tr><td>handwired/dtisaac01</td><td>dtisaac/dtisaac01</td></tr><tr><td>kprepublic/bm60poker</td><td>kprepublic/bm60hsrgb_poker/rev1</td></tr><tr><td>kprepublic/bm60rgb</td><td>kprepublic/bm60hsrgb/rev1</td></tr><tr><td>kprepublic/bm60rgb_iso</td><td>kprepublic/bm60hsrgb_iso/rev1</td></tr><tr><td>kprepublic/bm65iso</td><td>kprepublic/bm65hsrgb_iso</td></tr><tr><td>kprepublic/bm68rgb</td><td>kprepublic/bm68hsrgb</td></tr><tr><td>paladin64</td><td>kapcave/paladin64</td></tr><tr><td>portal_66</td><td>portal_66/soldered</td></tr><tr><td>signum/3_0/elitec</td><td>signum/3_0</td></tr><tr><td>tgr/jane</td><td>tgr/jane/v2</td></tr></tbody></table><h3 id="squeezing-space-from-avr" tabindex="-1">Squeezing space out of AVR (<a href="https://github.com/qmk/qmk_firmware/pull/15243" target="_blank" rel="noreferrer">#15243</a>) <a class="header-anchor" href="#squeezing-space-from-avr" aria-label="Permalink to &quot;Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) {#squeezing-space-from-avr}&quot;"></a></h3><p>The 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.</p><p>Of course, there are much fewer constraints with ARM chips... 😉</p><h3 id="explicit-rgb-modes" tabindex="-1">Require explicit enabling of RGB Matrix modes (<a href="https://github.com/qmk/qmk_firmware/pull/15018" target="_blank" rel="noreferrer">#15018</a>) <a class="header-anchor" href="#explicit-rgb-modes" aria-label="Permalink to &quot;Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) {#explicit-rgb-modes}&quot;"></a></h3><p>Related 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&#39;re expecting -- you may need to configure and recompile your firmware and enable your animations of choice... with any luck they&#39;ll still fit in the space available.</p><p>Most 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.</p><p>The full list of configurables to turn specific animations back on can be found at on the <a href="./../feature_rgb_matrix#rgb-matrix-effects">RGB Matrix documentation</a> page.</p><h3 id="oled-task-refactor" tabindex="-1">OLED task refactoring (<a href="https://github.com/qmk/qmk_firmware/pull/14864" target="_blank" rel="noreferrer">#14864</a>) <a class="header-anchor" h
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap drawing code</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>...but the new keymap code looks like this:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> oled_task_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // keymap drawing code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Keyboard designers should now structure their keyboard-level drawing routines like the following, in order to allow for keymap overrides:</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> oled_task_kb</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Defer to the keymap if they want to override</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">oled_task_user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()) { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // default keyboard drawing code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="bootmagic-full-removal" tabindex="-1">Bootmagic Full Removal (<a href="https://github.com/qmk/qmk_firmware/pull/15002" target="_blank" rel="noreferrer">#15002</a>) <a class="header-anchor" href="#bootmagic-full-removal" aria-label="Permalink to &quot;Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) {#bootmagic-full-removal}&quot;"></a></h3><p>As noted during previous breaking changes cycles, QMK decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.</p><p>This removal is now complete!</p><p>This pull request changes the behavior of <code>BOOTMAGIC_ENABLE</code> such that specifying <code>lite</code> or <code>full</code> results in an error, allowing only <code>yes</code> or <code>no</code>, with <code>yes</code> mirroring historical <code>lite</code> functionality.</p><p>All use of the <code>lite</code> keyword within the repository has been migrated to <code>yes</code> -- any new submissions using <code>lite</code> will now fail to build and should be updated accordingly.</p><h4 id="bootmagic-full-deprecation-schedule-complete" tabindex="-1">Bootmagic Full Deprecation Schedule: Complete! <a class="header-anchor" href="#bootmagic-full-deprecation-schedule-complete" aria-label="Permalink to &quot;Bootmagic Full Deprecation Schedule: Complete!&quot;"></a></h4><p>This is the historical timeline for the behavior of <code>BOOTMAGIC_ENABLE</code>:</p><ul><li>(done) From 2021 May 29, setting <code>BOOTMAGIC_ENABLE = yes</code> will enable Bootmagic Lite instead of full Bootmagic.</li><li>(done) From 2021 Aug 28, <code>BOOTMAGIC_ENABLE</code> must be either <code>yes</code>, <code>lite</code>, or <code>no</code> setting <code>BOOTMAGIC_ENABLE = full</code> will cause compilation to fail.</li><li>(now) From 2021 Nov 27, <code>BOOTMAGIC_ENABLE</code> must be either <code>yes</code> or <code>no</code> setting <code>BOOTMAGIC_ENABLE = lite</code> will cause compilation to fail.</li></ul><h3 id="remove-qwiic" tabindex="-1">Remove QWIIC_DRIVERS (<a href="https://github.com/qmk/qmk_firmware/pull/14174" target="_blank" rel="noreferrer">#14174</a>) <a class="header-anchor" href="#remove-qwiic" aria-label="Permalink to &quot;Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) {#remove-qwiic}&quot;"></a></h3><p>Due 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.</p><h2 id="notable-core" tabindex="-1">Notable core changes <a class="header-anchor" href="#notable-core" aria-label="Permalink to &quot;Notable core changes {#notable-core}&quot;"></a></h2><h3 id="new-mcu-support" tabindex="-1">New MCU Support <a class="header-anchor" href="#new-mcu-support" aria-label="Permalink to &quot;New MCU Support {#new-mcu-support}&quot;"></a></h3><p>QMK firmware picked up support for a handful of new MCU families, potentially making it a bit easier to source components.</p><p>QMK firmware is now no longer limited to AVR and ARM - it also picked up support for our first RISC-V chip, the GD32VF103.</p><ul><li>Add support for RISC-V builds and GD32VF103 MCU (<a href="https://github.com/qmk/qmk_firmware/pull/12508" target="_blank" rel="noreferrer">#12508</a>)</li><li>Add HT32 support to core (<a href="https://github.com/qmk/qmk_firmware/pull/14388" target="_blank" rel="noreferrer">#14388</a>)</li><li>Westberrytech pr (<a href="https://github.com/qmk/qmk_firmware/pull/14422" target="_blank" rel="noreferrer">#14422</a>)</li><li>Initial pass of F405 support (<a href="https://github.com/qmk/qmk_firmware/pull/14584" target="_blank" rel="noreferrer">#14584</a>)</li></ul><h3 id="eeprom-changes" tabindex="-1">EEPROM Changes <a class="header-anchor" href="#eeprom-changes" aria-label="Permalink to &quot;EEPROM Changes {#eeprom-changes}&quot;"></a></h3><p>There were a few
<script>window.__VP_HASH_MAP__=JSON.parse("{\"feature_programmable_button.md\":\"BP5-HUlT\",\"feature_wpm.md\":\"C-SARAXc\",\"feature_eeprom.md\":\"vdeTTfI0\",\"getting_started_docker.md\":\"mz6HE4Bl\",\"api_development_overview.md\":\"Dcey4ntL\",\"feature_ps2_mouse.md\":\"DgKRvSpd\",\"api_docs.md\":\"CRoD6CbL\",\"arm_debugging.md\":\"BH-H2Ukz\",\"audio_driver.md\":\"YKqJ1wkZ\",\"breaking_changes.md\":\"BtdqWQlY\",\"breaking_changes_history.md\":\"CkzdD6x8\",\"breaking_changes_instructions.md\":\"BAjIGeJb\",\"cli.md\":\"BLzAdA6l\",\"cli_configuration.md\":\"CGSB128P\",\"chibios_upgrade_instructions.md\":\"B5dMtL5R\",\"api_overview.md\":\"0FPaUsMb\",\"coding_conventions_c.md\":\"DdrpXBEh\",\"cli_development.md\":\"CczMJOE3\",\"compatible_microcontrollers.md\":\"6HA6FJZJ\",\"cli_commands.md\":\"DCpejdln\",\"coding_conventions_python.md\":\"BV-OK1s5\",\"cli_tab_complete.md\":\"ChaxfzYo\",\"configurator_architecture.md\":\"DEFTvTlS\",\"changelog_20200829.md\":\"CoqrOffn\",\"data_driven_config.md\":\"BvLQ7P20\",\"changelog_20230226.md\":\"CEQKb2Sw\",\"documentation_best_practices.md\":\"D_UwEt1C\",\"custom_quantum_functions.md\":\"BabGw-ye\",\"documentation_templates.md\":\"Bhkum0wD\",\"driver_installation_zadig.md\":\"BIO-iq8r\",\"easy_maker.md\":\"BLadB4D_\",\"eeprom_driver.md\":\"CJGhJYmK\",\"changelog_20210227.md\":\"BWOtCaeS\",\"changelog_20190830.md\":\"Drtq3lMy\",\"changelog_20231126.md\":\"D2Ok5QAf\",\"feature_advanced_keycodes.md\":\"jN1BLaPG\",\"feature_audio.md\":\"CSdy-B0q\",\"changelog_20201128.md\":\"7XXL02Bn\",\"changelog_20220528.md\":\"BdSPPJS6\",\"changelog_20211127.md\":\"BDzkUAQX\",\"changelog_20230528.md\":\"BMuuw__T\",\"changelog_20220827.md\":\"I6ja7C5w\",\"changelog_20200229.md\":\"DNsowwM1\",\"faq_build.md\":\"Bryo1ywz\",\"faq_general.md\":\"BC3pFw4U\",\"feature_encoders.md\":\"DzEjkR0q\",\"feature_caps_word.md\":\"DFEidvi5\",\"feature_mouse_keys.md\":\"Iyt3Hb3p\",\"feature_command.md\":\"DyD1wEzr\",\"feature_combo.md\":\"BFcSajDz\",\"feature_converters.md\":\"Bmv29bqN\",\"feature_debounce_type.md\":\"CUrSp0Iy\",\"feature_oled_driver.md\":\"C3msZUgf\",\"feature_digitizer.md\":\"D7mG1fUR\",\"feature_dip_switch.md\":\"BRm_919T\",\"feature_dynamic_macros.md\":\"CQqgFNCL\",\"feature_secure.md\":\"DTio1NtX\",\"feature_macros.md\":\"DpKdCniT\",\"feature_tri_layer.md\":\"H5S9g49a\",\"feature_send_string.md\":\"ucKdf_1f\",\"feature_pointing_device.md\":\"D8bKydDH\",\"feature_unicode.md\":\"CmuIgTId\",\"feature_split_keyboard.md\":\"dSXqGTcC\",\"flash_driver.md\":\"BTZjpIxy\",\"feature_rgb_matrix.md\":\"DjrTztSt\",\"flashing_bootloadhid.md\":\"aXGP0bN5\",\"flashing.md\":\"CGYYQUk5\",\"feature_space_cadet.md\":\"BadigqA6\",\"faq_keymap.md\":\"BNm1UZCq\",\"feature_layouts.md\":\"qcy8hNMO\",\"changelog_20200530.md\":\"Dk-vRpTQ\",\"index.md\":\"Q8qZBSI9\",\"pr_checklist.md\":\"B5cKcG_-\",\"quantum_keycodes.md\":\"DM5WeUFF\",\"quantum_painter_qff.md\":\"kLNwshez\",\"quantum_painter_qgf.md\":\"BJNSu2s0\",\"quantum_painter_rle.md\":\"B07V3m-n\",\"isp_flashing_guide.md\":\"DfzdHli4\",\"ref_functions.md\":\"BqUSY2Jo\",\"reference_configurator_support.md\":\"FaBQzIj6\",\"reference_glossary.md\":\"2AN0RaWE\",\"spi_driver.md\":\"BUPXWtdm\",\"serial_driver.md\":\"FRk1ebke\",\"squeezing_avr.md\":\"BmcLYKOr\",\"support_deprecation_policy.md\":\"CCo4ljiw\",\"support.md\":\"CwJ_H6Qx\",\"reference_info_json.md\":\"DLkUuXVh\",\"syllabus.md\":\"0-MOMJnE\",\"uart_driver.md\":\"Cby_2B9q\",\"tap_hold.md\":\"54I6XHRj\",\"changelog_20221126.md\":\"BOpHhXi2\",\"feature_midi.md\":\"6rA7lbe-\",\"feature_sequencer.md\":\"B9A4Z8EN\",\"feature_grave_esc.md\":\"Dfk03Mwq\",\"quantum_painter_lvgl.md\":\"DobNbSgA\",\"hardware_drivers.md\":\"DFF5LGTT\",\"getting_started_introduction.md\":\"BOJreqSs\",\"feature_autocorrect.md\":\"MXySdvB8\",\"feature_bluetooth.md\":\"bG-tYvch\",\"newbs_building_firmware.md\":\"C7XiOjZf\",\"newbs_building_firmware_configurator.md\":\"yyo-1QDE\",\"newbs_flashing.md\":\"B42m5Wln\",\"feature_tap_dance.md\":\"B6ipWqOP\",\"newbs_git_best_practices.md\":\"BI2-EVI5\",\"newbs_git_resolving_merge_conflicts.md\":\"72w3
</body>
</html>