Deploying to gh-pages from @ qmk/qmk_firmware@9f76541b29 🚀

This commit is contained in:
QMK Bot 2024-11-27 10:33:24 +00:00
parent b8b24d0db0
commit 95193b39df
277 changed files with 2123 additions and 1639 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

24
ChangeLog/20241124.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"QMK Breaking Changes - 2024 November 24 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20241124.md","filePath":"ChangeLog/20241124.md","lastUpdated":null}');
const _sfc_main = { name: "ChangeLog/20241124.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 31);
const _hoisted_32 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_32);
}
const _20241124 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
_20241124 as default
};

View File

@ -1,4 +1,4 @@
import { R as RawTheme } from "./chunks/theme.Ca3MAp8i.js";
import { R as RawTheme } from "./chunks/theme.Crx8xFVd.js";
import { V as inBrowser, a9 as useUpdateHead, aa as RouterSymbol, ab as initData, ac as dataSymbol, ad as Content, ae as ClientOnly, af as siteDataRef, ag as createSSRApp, ah as createRouter, ai as pathToFile, d as defineComponent, u as useData, k as onMounted, y as watchEffect, aj as usePrefetch, ak as useCopyCode, al as useCodeGroups, am as h } from "./chunks/framework.B9AX-CPi.js";
function resolveThemeExtends(theme) {
if (theme.extends) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Past Breaking Changes","description":"","frontmatter":{},"headers":[],"relativePath":"breaking_changes_history.md","filePath":"breaking_changes_history.md","lastUpdated":null}');
const _sfc_main = { name: "breaking_changes_history.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="past-breaking-changes" tabindex="-1">Past Breaking Changes <a class="header-anchor" href="#past-breaking-changes" aria-label="Permalink to &quot;Past Breaking Changes&quot;"></a></h1><p>This page links to all previous changelogs from the QMK Breaking Changes process.</p><ul><li><a href="./ChangeLog/20240825">2024 Aug 25</a> - version 0.26.0</li><li><a href="./ChangeLog/20240526">2024 May 26</a> - version 0.25.0</li><li><a href="./ChangeLog/20240225">2024 Feb 25</a> - version 0.24.0</li><li><a href="./ChangeLog/20231126">2023 Nov 26</a> - version 0.23.0</li><li><a href="./ChangeLog/20230827">2023 Aug 27</a> - version 0.22.0</li><li><a href="./ChangeLog/20230528">2023 May 28</a> - version 0.21.0</li><li><a href="./ChangeLog/20230226">2023 Feb 26</a> - version 0.20.0</li><li><a href="./ChangeLog/20221126">2022 Nov 26</a> - version 0.19.0</li><li><a href="./ChangeLog/20220827">2022 Aug 27</a> - version 0.18.0</li><li><a href="./ChangeLog/20220528">2022 May 28</a> - version 0.17.0</li><li><a href="./ChangeLog/20220226">2022 Feb 26</a> - version 0.16.0</li><li><a href="./ChangeLog/20211127">2021 Nov 27</a> - version 0.15.0</li><li><a href="./ChangeLog/20210828">2021 Aug 28</a> - version 0.14.0</li><li><a href="./ChangeLog/20210529">2021 May 29</a> - version 0.13.0</li><li><a href="./ChangeLog/20210227">2021 Feb 27</a> - version 0.12.0</li><li><a href="./ChangeLog/20201128">2020 Nov 28</a> - version 0.11.0</li><li><a href="./ChangeLog/20200829">2020 Aug 29</a> - version 0.10.0</li><li><a href="./ChangeLog/20200530">2020 May 30</a> - version 0.9.0</li><li><a href="./ChangeLog/20200229">2020 Feb 29</a> - version 0.8.0</li><li><a href="./ChangeLog/20190830">2019 Aug 30</a> - version 0.7.0</li></ul>', 3);
const _hoisted_4 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_4);
}
const breaking_changes_history = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
breaking_changes_history as default
};

View File

@ -0,0 +1,15 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Past Breaking Changes","description":"","frontmatter":{},"headers":[],"relativePath":"breaking_changes_history.md","filePath":"breaking_changes_history.md","lastUpdated":null}');
const _sfc_main = { name: "breaking_changes_history.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="past-breaking-changes" tabindex="-1">Past Breaking Changes <a class="header-anchor" href="#past-breaking-changes" aria-label="Permalink to &quot;Past Breaking Changes&quot;"></a></h1><p>This page links to all previous changelogs from the QMK Breaking Changes process.</p><ul><li><a href="./ChangeLog/20241124">2024 Nov 24</a> - version 0.27.0</li><li><a href="./ChangeLog/20240825">2024 Aug 25</a> - version 0.26.0</li><li><a href="./ChangeLog/20240526">2024 May 26</a> - version 0.25.0</li><li><a href="./ChangeLog/20240225">2024 Feb 25</a> - version 0.24.0</li><li><a href="./ChangeLog/20231126">2023 Nov 26</a> - version 0.23.0</li><li><a href="./ChangeLog/20230827">2023 Aug 27</a> - version 0.22.0</li><li><a href="./ChangeLog/20230528">2023 May 28</a> - version 0.21.0</li><li><a href="./ChangeLog/20230226">2023 Feb 26</a> - version 0.20.0</li><li><a href="./ChangeLog/20221126">2022 Nov 26</a> - version 0.19.0</li><li><a href="./ChangeLog/20220827">2022 Aug 27</a> - version 0.18.0</li><li><a href="./ChangeLog/20220528">2022 May 28</a> - version 0.17.0</li><li><a href="./ChangeLog/20220226">2022 Feb 26</a> - version 0.16.0</li><li><a href="./ChangeLog/20211127">2021 Nov 27</a> - version 0.15.0</li><li><a href="./ChangeLog/20210828">2021 Aug 28</a> - version 0.14.0</li><li><a href="./ChangeLog/20210529">2021 May 29</a> - version 0.13.0</li><li><a href="./ChangeLog/20210227">2021 Feb 27</a> - version 0.12.0</li><li><a href="./ChangeLog/20201128">2020 Nov 28</a> - version 0.11.0</li><li><a href="./ChangeLog/20200829">2020 Aug 29</a> - version 0.10.0</li><li><a href="./ChangeLog/20200530">2020 May 30</a> - version 0.9.0</li><li><a href="./ChangeLog/20200229">2020 Feb 29</a> - version 0.8.0</li><li><a href="./ChangeLog/20190830">2019 Aug 30</a> - version 0.7.0</li></ul>', 3);
const _hoisted_4 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_4);
}
const breaking_changes_history = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
breaking_changes_history as default
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,8 +5,8 @@ var __publicField = (obj, key, value) => {
return value;
};
import { Y as __vitePreload, j as ref, x as watch, an as unrefElement, ao as tryOnScopeDispose, d as defineComponent, G as shallowRef, ap as computedAsync, h as computed, aq as useSessionStorage, ar as useLocalStorage, y as watchEffect, as as watchDebounced, k as onMounted, S as nextTick, R as onKeyStroke, a6 as useRouter, at as useEventListener, Z as useScrollLock, V as inBrowser, au as onBeforeUnmount, o as openBlock, b as createBlock, l as createBaseVNode, a2 as withModifiers, m as unref, av as withDirectives, aw as vModelText, ax as isRef, c as createElementBlock, n as normalizeClass, e as createCommentVNode, E as renderList, F as Fragment, a as createTextVNode, t as toDisplayString, ay as Teleport, p as pushScopeId, q as popScopeId, az as markRaw, aA as createApp, ac as dataSymbol, ai as pathToFile, aB as escapeRegExp, _ as _export_sfc } from "./framework.B9AX-CPi.js";
import { u as useData, c as createSearchTranslate } from "./theme.Ca3MAp8i.js";
const localSearchIndex = { "root": () => __vitePreload(() => import("./@localSearchIndexroot.CONjFMfo.js"), true ? [] : void 0) };
import { u as useData, c as createSearchTranslate } from "./theme.Crx8xFVd.js";
const localSearchIndex = { "root": () => __vitePreload(() => import("./@localSearchIndexroot.D5zLRhr6.js"), true ? [] : void 0) };
/*!
* tabbable 6.2.0
* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE

View File

@ -1,4 +1,4 @@
const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.CYyXny3k.js","assets/chunks/framework.B9AX-CPi.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);
const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.tTevrGok.js","assets/chunks/framework.B9AX-CPi.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);
import { d as defineComponent, o as openBlock, c as createElementBlock, r as renderSlot, n as normalizeClass, a as createTextVNode, t as toDisplayString, b as createBlock, w as withCtx, e as createCommentVNode, T as Transition, _ as _export_sfc, u as useData$1, i as isExternal, f as treatAsHtml, g as withBase, h as computed, j as ref, k as onMounted, l as createBaseVNode, m as unref, p as pushScopeId, q as popScopeId, s as isActive, v as useMediaQuery, x as watch, y as watchEffect, z as onUnmounted, A as watchPostEffect, B as onUpdated, C as getScrollOffset, D as resolveComponent, F as Fragment, E as renderList, G as shallowRef, H as onContentUpdated, I as createVNode, J as resolveDynamicComponent, K as EXTERNAL_URL_RE, L as useRoute, M as mergeProps, N as inject, O as useWindowSize, P as normalizeStyle, Q as onClickOutside, R as onKeyStroke, S as nextTick, U as useWindowScroll, V as inBrowser, W as readonly, X as defineAsyncComponent, Y as __vitePreload, Z as useScrollLock, $ as provide, a0 as toHandlers, a1 as withKeys, a2 as withModifiers, a3 as useSlots, a4 as reactive, a5 as toRef, a6 as useRouter, a7 as onBeforeMount } from "./framework.B9AX-CPi.js";
const _sfc_main$Z = /* @__PURE__ */ defineComponent({
__name: "VPBadge",
@ -2225,7 +2225,7 @@ const _hoisted_3$6 = {
const _sfc_main$l = /* @__PURE__ */ defineComponent({
__name: "VPNavBarSearch",
setup(__props) {
const VPLocalSearchBox = defineAsyncComponent(() => __vitePreload(() => import("./VPLocalSearchBox.CYyXny3k.js"), true ? __vite__mapDeps([0,1]) : void 0));
const VPLocalSearchBox = defineAsyncComponent(() => __vitePreload(() => import("./VPLocalSearchBox.tTevrGok.js"), true ? __vite__mapDeps([0,1]) : void 0));
const VPAlgoliaSearchBox = () => null;
const { theme: theme2 } = useData();
const loaded = ref(false);
@ -3404,6 +3404,7 @@ const aliases = {
"/tap_dance": "/feature_tap_dance",
"/tutorial": "/newbs",
"/unicode": "/feature_unicode",
"/features/bluetooth": "/features/wireless",
"/adc_driver": "/drivers/adc",
"/apa102_driver": "/drivers/apa102",
"/audio_driver": "/drivers/audio",
@ -3412,7 +3413,7 @@ const aliases = {
"/feature_auto_shift": "/features/auto_shift",
"/feature_autocorrect": "/features/autocorrect",
"/feature_backlight": "/features/backlight",
"/feature_bluetooth": "/features/bluetooth",
"/feature_bluetooth": "/features/wireless",
"/feature_bootmagic": "/features/bootmagic",
"/feature_caps_word": "/features/caps_word",
"/feature_combo": "/features/combo",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"GPIO Control","description":"","frontmatter":{},"headers":[],"relativePath":"drivers/gpio.md","filePath":"drivers/gpio.md","lastUpdated":null}');
const _sfc_main = { name: "drivers/gpio.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="gpio-control" tabindex="-1">GPIO Control <a class="header-anchor" href="#gpio-control" aria-label="Permalink to &quot;GPIO Control {#gpio-control}&quot;"></a></h1><p>QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms.</p><h2 id="macros" tabindex="-1">Macros <a class="header-anchor" href="#macros" aria-label="Permalink to &quot;Macros {#macros}&quot;"></a></h2><p>The following macros provide basic control of GPIOs and are found in <code>platforms/&lt;platform&gt;/gpio.h</code>.</p><table><thead><tr><th>Macro</th><th>Description</th></tr></thead><tbody><tr><td><code>gpio_set_pin_input(pin)</code></td><td>Set pin as input with high impedance (High-Z)</td></tr><tr><td><code>gpio_set_pin_input_high(pin)</code></td><td>Set pin as input with builtin pull-up resistor</td></tr><tr><td><code>gpio_set_pin_input_low(pin)</code></td><td>Set pin as input with builtin pull-down resistor (unavailable on AVR)</td></tr><tr><td><code>gpio_set_pin_output(pin)</code></td><td>Set pin as output (alias of <code>gpio_set_pin_output_push_pull</code>)</td></tr><tr><td><code>gpio_set_pin_output_push_pull(pin)</code></td><td>Set pin as output, push/pull mode</td></tr><tr><td><code>gpio_set_pin_output_open_drain(pin)</code></td><td>Set pin as output, open-drain mode (unavailable on AVR and ATSAM)</td></tr><tr><td><code>gpio_write_pin_high(pin)</code></td><td>Set pin level as high, assuming it is an output</td></tr><tr><td><code>gpio_write_pin_low(pin)</code></td><td>Set pin level as low, assuming it is an output</td></tr><tr><td><code>gpio_write_pin(pin, level)</code></td><td>Set pin level, assuming it is an output</td></tr><tr><td><code>gpio_read_pin(pin)</code></td><td>Returns the level of the pin</td></tr><tr><td><code>gpio_toggle_pin(pin)</code></td><td>Invert pin level, assuming it is an output</td></tr></tbody></table><h2 id="advanced-settings" tabindex="-1">Advanced Settings <a class="header-anchor" href="#advanced-settings" aria-label="Permalink to &quot;Advanced Settings {#advanced-settings}&quot;"></a></h2><p>Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device. For AVR, the standard <code>avr/io.h</code> library is used; for STM32, the ChibiOS <a href="https://chibios.sourceforge.net/docs3/hal/group___p_a_l.html" target="_blank" rel="noreferrer">PAL library</a> is used.</p><h2 id="atomic-operation" tabindex="-1">Atomic Operation <a class="header-anchor" href="#atomic-operation" aria-label="Permalink to &quot;Atomic Operation {#atomic-operation}&quot;"></a></h2><p>The above functions are not always guaranteed to work atomically. Therefore, if you want to prevent interruptions in the middle of operations when using multiple combinations of the above functions, use the following <code>ATOMIC_BLOCK_FORCEON</code> macro.</p><p>eg.</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;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> some_function</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>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // some process</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ATOMIC_BLOCK_FORCEON {</span></span>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Atomic Processing</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // some process</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><code>ATOMIC_BLOCK_FORCEON</code> forces interrupts to be disabled before the block is executed, without regard to whether they are enabled or disabled. Then, after the block is executed, the interrupt is enabled.</p><p>Note that <code>ATOMIC_BLOCK_FORCEON</code> can therefore be used if you know that interrupts are enabled before the execution of the block, or if you know that it is OK to enable interrupts at the completion of the block.</p>', 13);
const _hoisted_14 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_14);
}
const gpio = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
gpio as default
};

View File

@ -0,0 +1,15 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"GPIO Control","description":"","frontmatter":{},"headers":[],"relativePath":"drivers/gpio.md","filePath":"drivers/gpio.md","lastUpdated":null}');
const _sfc_main = { name: "drivers/gpio.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="gpio-control" tabindex="-1">GPIO Control <a class="header-anchor" href="#gpio-control" aria-label="Permalink to &quot;GPIO Control {#gpio-control}&quot;"></a></h1><p>QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms.</p><h2 id="macros" tabindex="-1">Macros <a class="header-anchor" href="#macros" aria-label="Permalink to &quot;Macros {#macros}&quot;"></a></h2><p>The following macros provide basic control of GPIOs and are found in <code>platforms/&lt;platform&gt;/gpio.h</code>.</p><table><thead><tr><th>Macro</th><th>Description</th></tr></thead><tbody><tr><td><code>gpio_set_pin_input(pin)</code></td><td>Set pin as input with high impedance (High-Z)</td></tr><tr><td><code>gpio_set_pin_input_high(pin)</code></td><td>Set pin as input with builtin pull-up resistor</td></tr><tr><td><code>gpio_set_pin_input_low(pin)</code></td><td>Set pin as input with builtin pull-down resistor (unavailable on AVR)</td></tr><tr><td><code>gpio_set_pin_output(pin)</code></td><td>Set pin as output (alias of <code>gpio_set_pin_output_push_pull</code>)</td></tr><tr><td><code>gpio_set_pin_output_push_pull(pin)</code></td><td>Set pin as output, push/pull mode</td></tr><tr><td><code>gpio_set_pin_output_open_drain(pin)</code></td><td>Set pin as output, open-drain mode (unavailable on AVR)</td></tr><tr><td><code>gpio_write_pin_high(pin)</code></td><td>Set pin level as high, assuming it is an output</td></tr><tr><td><code>gpio_write_pin_low(pin)</code></td><td>Set pin level as low, assuming it is an output</td></tr><tr><td><code>gpio_write_pin(pin, level)</code></td><td>Set pin level, assuming it is an output</td></tr><tr><td><code>gpio_read_pin(pin)</code></td><td>Returns the level of the pin</td></tr><tr><td><code>gpio_toggle_pin(pin)</code></td><td>Invert pin level, assuming it is an output</td></tr></tbody></table><h2 id="advanced-settings" tabindex="-1">Advanced Settings <a class="header-anchor" href="#advanced-settings" aria-label="Permalink to &quot;Advanced Settings {#advanced-settings}&quot;"></a></h2><p>Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device. For AVR, the standard <code>avr/io.h</code> library is used; for STM32, the ChibiOS <a href="https://chibios.sourceforge.net/docs3/hal/group___p_a_l.html" target="_blank" rel="noreferrer">PAL library</a> is used.</p><h2 id="atomic-operation" tabindex="-1">Atomic Operation <a class="header-anchor" href="#atomic-operation" aria-label="Permalink to &quot;Atomic Operation {#atomic-operation}&quot;"></a></h2><p>The above functions are not always guaranteed to work atomically. Therefore, if you want to prevent interruptions in the middle of operations when using multiple combinations of the above functions, use the following <code>ATOMIC_BLOCK_FORCEON</code> macro.</p><p>eg.</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;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> some_function</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>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // some process</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ATOMIC_BLOCK_FORCEON {</span></span>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Atomic Processing</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>\n<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // some process</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><code>ATOMIC_BLOCK_FORCEON</code> forces interrupts to be disabled before the block is executed, without regard to whether they are enabled or disabled. Then, after the block is executed, the interrupt is enabled.</p><p>Note that <code>ATOMIC_BLOCK_FORCEON</code> can therefore be used if you know that interrupts are enabled before the execution of the block, or if you know that it is OK to enable interrupts at the completion of the block.</p>', 13);
const _hoisted_14 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_14);
}
const gpio = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
gpio as default
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"WS2812 Driver","description":"","frontmatter":{},"headers":[],"relativePath":"drivers/ws2812.md","filePath":"drivers/ws2812.md","lastUpdated":null}');
const _sfc_main = { name: "drivers/ws2812.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 83);
const _hoisted_84 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 94);
const _hoisted_95 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_84);
return openBlock(), createElementBlock("div", null, _hoisted_95);
}
const ws2812 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Converters","description":"","frontmatter":{},"headers":[],"relativePath":"feature_converters.md","filePath":"feature_converters.md","lastUpdated":null}');
const _sfc_main = { name: "feature_converters.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 52);
const _hoisted_53 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 54);
const _hoisted_55 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_53);
return openBlock(), createElementBlock("div", null, _hoisted_55);
}
const feature_converters = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Layers","description":"","frontmatter":{},"headers":[],"relativePath":"feature_layers.md","filePath":"feature_layers.md","lastUpdated":null}');
const _sfc_main = { name: "feature_layers.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 43);
const _hoisted_44 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 44);
const _hoisted_45 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_44);
return openBlock(), createElementBlock("div", null, _hoisted_45);
}
const feature_layers = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Bluetooth","description":"","frontmatter":{},"headers":[],"relativePath":"features/bluetooth.md","filePath":"features/bluetooth.md","lastUpdated":null}');
const _sfc_main = { name: "features/bluetooth.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="bluetooth" tabindex="-1">Bluetooth <a class="header-anchor" href="#bluetooth" aria-label="Permalink to &quot;Bluetooth&quot;"></a></h1><h2 id="bluetooth-known-supported-hardware" tabindex="-1">Bluetooth Known Supported Hardware <a class="header-anchor" href="#bluetooth-known-supported-hardware" aria-label="Permalink to &quot;Bluetooth Known Supported Hardware&quot;"></a></h2><p>Currently Bluetooth support is limited to AVR based chips. For Bluetooth 2.1, QMK has support for RN-42 modules. For more recent BLE protocols, currently only the Adafruit Bluefruit SPI Friend is directly supported. BLE is needed to connect to iOS devices. Note iOS does not support mouse input.</p><table><thead><tr><th>Board</th><th>Bluetooth Protocol</th><th>Connection Type</th><th>rules.mk</th><th>Bluetooth Chip</th></tr></thead><tbody><tr><td>Roving Networks RN-42 (Sparkfun Bluesmirf)</td><td>Bluetooth Classic</td><td>UART</td><td><code>BLUETOOTH_DRIVER = rn42</code></td><td>RN-42</td></tr><tr><td><a href="https://www.adafruit.com/product/2633" target="_blank" rel="noreferrer">Bluefruit LE SPI Friend</a></td><td>Bluetooth Low Energy</td><td>SPI</td><td><code>BLUETOOTH_DRIVER = bluefruit_le</code></td><td>nRF51822</td></tr></tbody></table><p>Not Supported Yet but possible:</p><ul><li><a href="https://www.adafruit.com/product/2479" target="_blank" rel="noreferrer">Bluefruit LE UART Friend</a>. <a href="https://github.com/tmk/tmk_keyboard/issues/514" target="_blank" rel="noreferrer">Possible tmk implementation found in</a></li><li>HC-05 boards flashed with RN-42 firmware. They apparently both use the CSR BC417 Chip. Flashing it with RN-42 firmware gives it HID capability.</li><li>Sparkfun Bluetooth Mate</li><li>HM-13 based boards</li></ul><h3 id="adafruit-ble-spi-friend" tabindex="-1">Adafruit BLE SPI Friend <a class="header-anchor" href="#adafruit-ble-spi-friend" aria-label="Permalink to &quot;Adafruit BLE SPI Friend&quot;"></a></h3><p>Currently The only bluetooth chipset supported by QMK is the Adafruit Bluefruit SPI Friend. It&#39;s a Nordic nRF51822 based chip running Adafruit&#39;s custom firmware. Data is transmitted via Adafruit&#39;s SDEP over Hardware SPI. The <a href="https://www.adafruit.com/product/2829" target="_blank" rel="noreferrer">Feather 32u4 Bluefruit LE</a> is supported as it&#39;s an AVR mcu connected via SPI to the Nordic BLE chip with Adafruit firmware. If Building a custom board with the SPI friend it would be easiest to just use the pin selection that the 32u4 feather uses but you can change the pins in the config.h options with the following defines:</p><ul><li><code>#define BLUEFRUIT_LE_RST_PIN D4</code></li><li><code>#define BLUEFRUIT_LE_CS_PIN B4</code></li><li><code>#define BLUEFRUIT_LE_IRQ_PIN E6</code></li></ul><p>A Bluefruit UART friend can be converted to an SPI friend, however this <a href="https://github.com/qmk/qmk_firmware/issues/2274" target="_blank" rel="noreferrer">requires</a> some reflashing and soldering directly to the MDBT40 chip.</p><h2 id="bluetooth-rules-mk-options" tabindex="-1">Bluetooth Rules.mk Options <a class="header-anchor" href="#bluetooth-rules-mk-options" aria-label="Permalink to &quot;Bluetooth Rules.mk Options&quot;"></a></h2><p>The currently supported Bluetooth chipsets do not support <a href="./../reference_glossary#n-key-rollover-nkro">N-Key Rollover (NKRO)</a>, so <code>rules.mk</code> must contain <code>NKRO_ENABLE = no</code>.</p><p>Add the following to your <code>rules.mk</code>:</p><div class="language-make vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">make</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">BLUETOOTH_ENABLE = yes</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">BLUETOOTH_DRIVER = bluefruit_le </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># or rn42</span></span></code></pre></div><h2 id="bluetooth-keycodes" tabindex="-1">Bluetooth Keycodes <a class="header-anchor" href="#bluetooth-keycodes" aria-label="Permalink to &quot;Bluetooth Keycodes&quot;"></a></h2><p>This is used when multiple keyboard outputs can be selected. Currently this only allows for switching between USB and Bluetooth on keyboards that support both.</p><table><thead><tr><th>Key</th><th>Aliases</th><th>Description</th></tr></thead><tbody><tr><td><code>QK_OUTPUT_AUTO</code></td><td><code>OU_AUTO</code></td><td>Automatically switch between USB and Bluetooth</td></tr><tr><td><code>QK_OUTPUT_USB</code></td><td><code>OU_USB</code></td><td>USB only</td></tr><tr><td><code>QK_OUTPUT_BLUETOOTH</code></td><td><code>OU_BT</code></td><td>Bluetooth only</td></tr></tbody></table>', 17);
const _hoisted_18 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_18);
}
const bluetooth = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
bluetooth as default
};

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Combos","description":"","frontmatter":{},"headers":[],"relativePath":"features/combo.md","filePath":"features/combo.md","lastUpdated":null}');
const _sfc_main = { name: "features/combo.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 80);
const _hoisted_81 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 83);
const _hoisted_84 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_81);
return openBlock(), createElementBlock("div", null, _hoisted_84);
}
const combo = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Joystick","description":"","frontmatter":{},"headers":[],"relativePath":"features/joystick.md","filePath":"features/joystick.md","lastUpdated":null}');
const _sfc_main = { name: "features/joystick.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 59);
const _hoisted_60 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 71);
const _hoisted_72 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_60);
return openBlock(), createElementBlock("div", null, _hoisted_72);
}
const joystick = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Layer Lock","description":"","frontmatter":{},"headers":[],"relativePath":"features/layer_lock.md","filePath":"features/layer_lock.md","lastUpdated":null}');
const _sfc_main = { name: "features/layer_lock.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 30);
const _hoisted_31 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_31);
}
const layer_lock = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
layer_lock as default
};

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"OS Detection","description":"","frontmatter":{},"headers":[],"relativePath":"features/os_detection.md","filePath":"features/os_detection.md","lastUpdated":null}');
const _sfc_main = { name: "features/os_detection.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 33);
const _hoisted_34 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 34);
const _hoisted_35 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_34);
return openBlock(), createElementBlock("div", null, _hoisted_35);
}
const os_detection = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"RGB Matrix Lighting","description":"","frontmatter":{},"headers":[],"relativePath":"features/rgb_matrix.md","filePath":"features/rgb_matrix.md","lastUpdated":null}');
const _sfc_main = { name: "features/rgb_matrix.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 276);
const _hoisted_277 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 271);
const _hoisted_272 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_277);
return openBlock(), createElementBlock("div", null, _hoisted_272);
}
const rgb_matrix = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Bluetooth","description":"","frontmatter":{},"headers":[],"relativePath":"features/bluetooth.md","filePath":"features/bluetooth.md","lastUpdated":null}');
const _sfc_main = { name: "features/bluetooth.md" };
const __pageData = JSON.parse('{"title":"Wireless / Bluetooth","description":"","frontmatter":{},"headers":[],"relativePath":"features/wireless.md","filePath":"features/wireless.md","lastUpdated":null}');
const _sfc_main = { name: "features/wireless.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 17);
const _hoisted_18 = [
_hoisted_1
@ -8,8 +8,8 @@ const _hoisted_18 = [
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_18);
}
const bluetooth = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
const wireless = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
bluetooth as default
wireless as default
};

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Flashing Instructions and Bootloader Information","description":"","frontmatter":{},"headers":[],"relativePath":"flashing.md","filePath":"flashing.md","lastUpdated":null}');
const _sfc_main = { name: "flashing.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 143);
const _hoisted_144 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 153);
const _hoisted_154 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_144);
return openBlock(), createElementBlock("div", null, _hoisted_154);
}
const flashing = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Keycodes Overview","description":"","frontmatter":{},"headers":[],"relativePath":"keycodes.md","filePath":"keycodes.md","lastUpdated":null}');
const _sfc_main = { name: "keycodes.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 94);
const _hoisted_95 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 97);
const _hoisted_98 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_95);
return openBlock(), createElementBlock("div", null, _hoisted_98);
}
const keycodes = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js";
const __pageData = JSON.parse('{"title":"Adding Your Keyboard to QMK","description":"","frontmatter":{},"headers":[],"relativePath":"porting_your_keyboard_to_qmk.md","filePath":"porting_your_keyboard_to_qmk.md","lastUpdated":null}');
const _sfc_main = { name: "porting_your_keyboard_to_qmk.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 36);
const _hoisted_37 = [
const _hoisted_1 = /* @__PURE__ */ createStaticVNode("", 38);
const _hoisted_39 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_37);
return openBlock(), createElementBlock("div", null, _hoisted_39);
}
const porting_your_keyboard_to_qmk = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {

Some files were not shown because too many files have changed in this diff Show More