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 Change - 2020 May 30 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20200530.md","filePath":"ChangeLog/20200530.md"}'); const _sfc_main = { name: "ChangeLog/20200530.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('
Four 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.
The list of changes follows.
#8321 and qmk_compiler#62.
These 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.
Updates all of the per key tap-hold functions to pass the keyrecord_t
structure, and include documentation changes.
Any remaining versions or code outside of the main repo will need to be converted:
Old function | New Function |
---|---|
uint16_t get_tapping_term(uint16_t keycode) | uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) |
bool get_ignore_mod_tap_interrupt(uint16_t keycode) | bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) |
This 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.
After the next breaking change you will not be able to build if bin/qmk hello
does not work.
make git-submodule
may be required after pulling the latest QMK Firmware code to update to the new dependency.RGB_DISABLE_AFTER_TIMEOUT
to be based on milliseconds instead of ticks.The 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.
Before: #define RGB_DISABLE_AFTER_TIMEOUT 100
After: #define RGB_DISABLE_TIMEOUT 120000
Fork all QMK submodules to protect against upstream repositories disappearing.
Removes the deprecated PLAY_NOTE_ARRAY
macro. References to it are replaced with PLAY_SONG
, which references the same function.
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.
These changes fix this by disabling Audio on keyboards that have the feature misconfigured, and therefore non-functional.
Also, add a compile-time error to alert the user to a missing pin-configuration (on AVR boards) when AUDIO_ENABLE = yes
is set.
Modifies 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:
This allows current lily58 firmware to advance with updates to the split_common
library, which is shared with many other split keyboards.
#define SSD1306OLED
from config.h#ifdef SSD1306OLED
with #ifdef OLED_DRIVER_ENABLE
default
, you may find it easier to simply copy the relevant section. Otherwise, the changes you need to make are as follows (sample change here)#ifdef SSD1306OLED \n iota_gfx_init(!has_usb()); // turns on the display \n#endif
#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:oled_rotation_t oled_init_user(oled_rotation_t rotation) {\n if (!is_keyboard_master())\n return OLED_ROTATION_180; // flips the display 180 degrees if offhand\n return rotation;\n}
matrix_scan_user
, matrix_update
and iota_gfx_task_user
matrix_render_user(struct CharacterMatrix *matrix)
with iota_gfx_task_user(void)
is_master
with is_keyboard_master()
matrix_write_ln(matrix, display_fn())
, rewrite it as oled_write_ln(read_layer_state(), false);
matrix_write(matrix, read_logo());
, replace with oled_write(read_logo(), false);
Modifies 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:
This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.
#define SSD1306OLED
from config.hvoid keyboard_pre_init_kb(void) {\n setPinInputHigh(D0);\n setPinInputHigh(D1);\n\n keyboard_pre_init_user();\n}
#ifdef SSD1306OLED
with #ifdef OLED_DRIVER_ENABLE
#ifdef SSD1306OLED \n iota_gfx_init(!has_usb()); // turns on the display \n#endif
#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:oled_rotation_t oled_init_user(oled_rotation_t rotation) {\n if (!is_keyboard_master())\n return OLED_ROTATION_180; // flips the display 180 degrees if offhand\n return rotation;\n}
iota_gfx_task_user
keyboards/hhkb/ansi
and keyboards/hhkb/jp
.HHKB_JP
definition keymaps
directory keyboards/hhkb/ansi/keymaps/
for ANSI HHKBskeyboards/hhkb/jp/keymaps/
for HHKB JPsmake hhkb/ansi
for ANSI-layout HHKBsmake hhkb/jp
for HHKB JP keyboardsKeyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.
Old Name | New Name |
---|---|
2_milk | spaceman/2_milk |
at101_blackheart | at101_bh |
ergoinu | dm9records/ergoinu |
model01 | keyboardio/model01 |
omnikey_blackheart | omnikey_bh |
pancake | spaceman/pancake |
plaid | dm9records/plaid |
tartan | dm9records/tartan |
z150_blackheart | z150_bh |
If you own one of these PCBs, please use the new names to compile your firmware moving forward.
#8954, #8957, #8958, #8959, #8968, #8977, and #8979
Authored by fauxpark, these pull requests remove references to deprecated TMK macros that have been superseded by native QMK keycodes.
Old fn_actions action | New QMK keycode |
---|---|
ACTION_DEFAULT_LAYER_SET(layer) | DF(layer) |
ACTION_LAYER_MODS(layer, mod) | LM(layer, mod) |
ACTION_LAYER_ONESHOT(mod) | OSL(mod) |
ACTION_LAYER_TOGGLE(layer) | TG(layer) |
ACTION_MODS_ONESHOT(mod) | OSM(mod) |
ACTION_MODS_TAP_KEY(mod, kc) | MT(mod, kc) |
ACTION_MODS_KEY(mod, kc) e.g. ACTION_MODS_KEY(MOD_LCTL, KC_0) | MOD(kc) e.g. LCTL(KC_0) |