import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.Clpp4x2N.js"; const __pageData = JSON.parse('{"title":"QMK Breaking Changes - 2024 February 25 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20240225.md","filePath":"ChangeLog/20240225.md"}'); const _sfc_main = { name: "ChangeLog/20240225.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

QMK Breaking Changes - 2024 February 25 Changelog

Notable Features

0.24.0 is mainly a maintenance release of QMK Firmware -- as per last few breaking changes cycles, there have been a lot of behind-the-scenes changes, mainly:

Changes Requiring User Action

Windows Driver Changes (QMK Toolbox 0.3.0 Release)

Flashing keyboards that target atmel-dfu or qmk-dfu on Windows using qmk flash or QMK Toolbox have traditionally used libusb for access to the DFU USB device. Since QMK Toolbox 0.3.0, this has changed to WinUSB.

If you update QMK Toolbox or update QMK MSYS, you may find that flashing Atmel DFU keyboards no longer functions as intended. If you strike such issues when flashing new firmware, you will need to replace the libusb driver with WinUSB using Zadig. You can follow the Recovering from Installation to Wrong Device instructions to replace the driver associated with the Atmel DFU bootloader, skipping the section about removal as Zadig will safely replace the driver instead. Please ensure your keyboard is in bootloader mode and has libusb as the existing driver before attempting to use Zadig to replace the driver. If instead you see HidUsb you're not in bootloader mode and should not continue with driver replacement.

Updated Keyboard Codebases

One note with updated keyboard names -- historical keyboard names are still considered valid when using External Userspace for builds. If you're already using External Userspace, you do not need to move your keymap inside your repository.

Old Keyboard NameNew Keyboard Name
enter67kezewa/enter67
enter80kezewa/enter80
epoch80kbdfans/epoch80
eu_isolationp3d/eu_isolation
flygone60/rev3shandoncodes/flygone60/rev3
hub16joshajohnson/hub16
hub20joshajohnson/hub20
jm60kbdfans/jm60
kira75kira/kira75
kira80kira/kira80
kmackbdmania/kmac
kmac_padkbdmania/kmac_pad
kudox/columnerkumaokobo/kudox/columner
kudox/rev1kumaokobo/kudox/rev1
kudox/rev2kumaokobo/kudox/rev2
kudox/rev3kumaokobo/kudox/rev3
kudox_full/rev1kumaokobo/kudox_full/rev1
kudox_gamekumaokobo/kudox_game
kudox_game/rev1kumaokobo/kudox_game/rev1
kudox_game/rev2kumaokobo/kudox_game/rev2
laser_ninja/pumpkin_padlaser_ninja/pumpkinpad
late9/rev1rookiebwoy/late9/rev1
leftysmoll/lefty
lefty/rev1smoll/lefty/rev1
lefty/rev2smoll/lefty/rev2
lpadlaneware/lpad
lw67laneware/lw67
lw75laneware/lw75
macro1laneware/macro1
macro3handwired/macro3
miniaxekagizaraya/miniaxe
mino/hotswapshandoncodes/mino/hotswap
mino_plus/hotswapshandoncodes/mino_plus/hotswap
mino_plus/solderedshandoncodes/mino_plus/soldered
mnk1800smonokei/mnk1800s
mnk50monokei/mnk50
mnk75monokei/mnk75
moonlanderzsa/moonlander
neopad/rev1rookiebwoy/neopad/rev1
pico/65keyskumaokobo/pico/65keys
pico/70keyskumaokobo/pico/70keys
pw88smoll/pw88
q4zp3d/q4z
raindroplaneware/raindrop
redox_wredox/wireless
riot_padshandoncodes/riot_pad
spaceyp3d/spacey
synapsep3d/synapse
tw40p3d/tw40
w1_atgeonworks/w1_at
z12zigotica/z12
z34zigotica/z34

Notable core changes

Renaming Arduino-style GPIO pin functions (#23085, #23093)

QMK has long used Arduino-style GPIO naming conventions. This has been confusing for users, as over time they've had new variations added, as well as users mistakenly thinking that QMK supports the rest of the Arduino ecosystem.

The decision was made to rename the GPIO manipulation functions with ones matching QMK Firmware's code styling.

OldNew
setPinInput(pin)gpio_set_pin_input(pin)
setPinInputHigh(pin)gpio_set_pin_input_high(pin)
setPinInputLow(pin)gpio_set_pin_input_low(pin)
setPinOutput(pin)gpio_set_pin_output(pin)
setPinOutputPushPull(pin)gpio_set_pin_output_push_pull(pin)
setPinOutputOpenDrain(pin)gpio_set_pin_output_open_drain(pin)
writePinHigh(pin)gpio_write_pin_high(pin)
writePinLow(pin)gpio_write_pin_low(pin)
writePin(pin, level)gpio_write_pin(pin, level)
readPin(pin)gpio_read_pin(pin)
togglePin(pin)gpio_toggle_pin(pin)

I2C driver API Changes (#22905)

Much like the GPIO refactoring, I2C APIs were also updated to conform to QMK naming standards. This is largely irrelevant to people using subsystem abstractions such as touchpads or RGB lighting, and only affects people manually communicating with other peripherals.

Old APINew API
i2c_readReg()i2c_read_register()
i2c_readReg16()i2c_read_register16()
i2c_writeReg()i2c_write_register()
i2c_writeReg16()i2c_write_register16()

Renaming Bootmagic Lite => Bootmagic (#22970, #22979)

Bootmagic "Lite" had no real meaning once the historical Bootmagic "Full" was deprecated and removed. Any references to Bootmagic Lite should now just refer to Bootmagic. We hope we got the majority of the code and the documentation, so if you find any more, let us know!

Threshold for automatic mouse layer activation (#21398)

In some cases, accidental automatic activation of the mouse layer made it difficult to continue typing, such as when brushing across a trackball. AUTO_MOUSE_THRESHOLD is now a configurable option in config.h which allows for specifying what the movement threshold is before automatically activating the mouse layer.

DIP Switch Mapping (#22543)

Much like Encoder Mapping, DIP Switch Mapping allows for specifying a table of actions to execute when a DIP switch state changes. See the DIP Switch Documentation for more information.

c
#if defined(DIP_SWITCH_MAP_ENABLE)\nconst uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = {\n    DIP_SWITCH_OFF_ON(DF(0), DF(1)),\n    DIP_SWITCH_OFF_ON(EC_NORM, EC_SWAP)\n};\n#endif

Quantum Painter updates (#18521, #20645, #22358)

Quantum Painter picked up support for the following:

Quantum Painter now supports the majority of common OLED panels supported by the basic OLED driver, so if you're using an ARM-based board you may find Quantum Painter a much more feature-rich API in comparison.

Full changelist

Core:

CLI:

Submodule updates:

Keyboards:

Keyboard fixes:

Bugs:

', 43); const _hoisted_44 = [ _hoisted_1 ]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", null, _hoisted_44); } const _20240225 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, _20240225 as default };