docs/ChangeLog/20240225.md
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:
info.json filesLAYOUT namingFlashing 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.
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 Name | New Keyboard Name |
|---|---|
| enter67 | kezewa/enter67 |
| enter80 | kezewa/enter80 |
| epoch80 | kbdfans/epoch80 |
| eu_isolation | p3d/eu_isolation |
| flygone60/rev3 | shandoncodes/flygone60/rev3 |
| hub16 | joshajohnson/hub16 |
| hub20 | joshajohnson/hub20 |
| jm60 | kbdfans/jm60 |
| kira75 | kira/kira75 |
| kira80 | kira/kira80 |
| kmac | kbdmania/kmac |
| kmac_pad | kbdmania/kmac_pad |
| kudox/columner | kumaokobo/kudox/columner |
| kudox/rev1 | kumaokobo/kudox/rev1 |
| kudox/rev2 | kumaokobo/kudox/rev2 |
| kudox/rev3 | kumaokobo/kudox/rev3 |
| kudox_full/rev1 | kumaokobo/kudox_full/rev1 |
| kudox_game | kumaokobo/kudox_game |
| kudox_game/rev1 | kumaokobo/kudox_game/rev1 |
| kudox_game/rev2 | kumaokobo/kudox_game/rev2 |
| laser_ninja/pumpkin_pad | laser_ninja/pumpkinpad |
| late9/rev1 | rookiebwoy/late9/rev1 |
| lefty | smoll/lefty |
| lefty/rev1 | smoll/lefty/rev1 |
| lefty/rev2 | smoll/lefty/rev2 |
| lpad | laneware/lpad |
| lw67 | laneware/lw67 |
| lw75 | laneware/lw75 |
| macro1 | laneware/macro1 |
| macro3 | handwired/macro3 |
| miniaxe | kagizaraya/miniaxe |
| mino/hotswap | shandoncodes/mino/hotswap |
| mino_plus/hotswap | shandoncodes/mino_plus/hotswap |
| mino_plus/soldered | shandoncodes/mino_plus/soldered |
| mnk1800s | monokei/mnk1800s |
| mnk50 | monokei/mnk50 |
| mnk75 | monokei/mnk75 |
| moonlander | zsa/moonlander |
| neopad/rev1 | rookiebwoy/neopad/rev1 |
| pico/65keys | kumaokobo/pico/65keys |
| pico/70keys | kumaokobo/pico/70keys |
| pw88 | smoll/pw88 |
| q4z | p3d/q4z |
| raindrop | laneware/raindrop |
| redox_w | redox/wireless |
| riot_pad | shandoncodes/riot_pad |
| spacey | p3d/spacey |
| synapse | p3d/synapse |
| tw40 | p3d/tw40 |
| w1_at | geonworks/w1_at |
| z12 | zigotica/z12 |
| z34 | zigotica/z34 |
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.
| Old | New |
|---|---|
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) |
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 API | New API |
|---|---|
i2c_readReg() | i2c_read_register() |
i2c_readReg16() | i2c_read_register16() |
i2c_writeReg() | i2c_write_register() |
i2c_writeReg16() | i2c_write_register16() |
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!
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.
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.
#if defined(DIP_SWITCH_MAP_ENABLE)
const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = {
DIP_SWITCH_OFF_ON(DF(0), DF(1)),
DIP_SWITCH_OFF_ON(EC_NORM, EC_SWAP)
};
#endif
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.
Core:
APA102_LED_COUNT define (#22530)RGBLED_NUM -> RGBLIGHT_LED_COUNT (#22570)LED_DISABLE_WHEN_USB_SUSPENDED -> LED_MATRIX_SLEEP (#22681)RGB_DISABLE_WHEN_USB_SUSPENDED -> RGB_MATRIX_SLEEP (#22682)SPLIT_HAND_MATRIX_GRID left/right logic with SPLIT_HAND_PIN (#22775)write_register() return type to void (#22824)write_register() return type to void (#22825)SIO driver for UART driver (#22839)write_pwm_buffer() return type to void (#22869)write_pwm_buffer() from public API (#22884)g_<driver>_leds (#23052)CLI:
qmk find (#21096)QGFImageFile's _save function into smaller pieces (#21124)SyntaxWarning (#22562)Submodule updates:
Keyboards:
redox_w into redox (#21448)keycapsss/plaid_pad: switch to encoder map (#22474)g_is31fl3736_leds from wt_mono_backlight (#22823)LAYOUTS_HAS_RGB (#22917)info.json build config option (#22932)RGBLED_NUM -> RGBLIGHT_LED_COUNT in remaining non-user keymaps (#23128)Keyboard fixes:
Bugs:
qmk migrate processing unparsed info.json values (#22374)qmk format-json: Force Unix line endings and ensure LF at EOF (#22901)make test:all DEBUG=1 (#23047)NOP_FUDGE define (#23110)qmk generate-compilation-database copies to userspace as well. (#23129)