From 6d7589e249b4656e6cee4a90829374f324991603 Mon Sep 17 00:00:00 2001 From: zvecr Date: Sun, 8 Mar 2026 00:52:03 +0000 Subject: [PATCH 01/48] Branch point for 2026q2 Breaking Change --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index 62aed120662..e5c0d41b7b3 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,7 @@ +# THIS IS THE DEVELOP BRANCH + +Warning- This is the `develop` branch of QMK Firmware. You may encounter broken code here. Please see [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) for more information. + # Quantum Mechanical Keyboard Firmware [![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags) From e83672fdc4a8d7ef564dbbf4195c33ad179f8754 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Fri, 13 Mar 2026 18:52:49 +1100 Subject: [PATCH 02/48] Update ChibiOS, ChibiOS-Contrib. (#25730) --- keyboards/matrix/abelx/mcuconf.h | 2 +- keyboards/matrix/m20add/mcuconf.h | 2 +- keyboards/matrix/noah/mcuconf.h | 2 +- keyboards/tzarc/kobold/info.json | 2 +- lib/chibios | 2 +- lib/chibios-contrib | 2 +- .../BLACKPILL_STM32_F401/configs/mcuconf.h | 2 +- .../BLACKPILL_STM32_F411/configs/mcuconf.h | 2 +- .../boards/BONSAI_C4/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F303XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F401XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F405XG/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F407XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F411XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F446XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_G0B1XB/configs/mcuconf.h | 28 ++++++++++--------- .../GENERIC_STM32_G431XB/configs/mcuconf.h | 18 ++++++------ .../GENERIC_STM32_G474XE/configs/mcuconf.h | 24 ++++++++-------- .../GENERIC_STM32_H723XG/configs/mcuconf.h | 7 ++++- .../GENERIC_STM32_L412XB/configs/mcuconf.h | 2 +- .../GENERIC_STM32_L432XC/configs/mcuconf.h | 2 +- .../boards/QMK_PROTON_C/configs/chconf.h | 25 +---------------- .../boards/QMK_PROTON_C/configs/halconf.h | 19 +++++++++++-- .../boards/QMK_PROTON_C/configs/mcuconf.h | 2 +- .../chibios/boards/STEMCELL/configs/mcuconf.h | 2 +- .../chibios/boards/common/configs/chconf.h | 25 +---------------- .../chibios/boards/common/configs/halconf.h | 19 +++++++++++-- platforms/chibios/platform.mk | 2 +- util/chibios_conf_updater.sh | 2 +- 29 files changed, 97 insertions(+), 110 deletions(-) diff --git a/keyboards/matrix/abelx/mcuconf.h b/keyboards/matrix/abelx/mcuconf.h index a2fd42b8c4c..ce8783c8b9e 100644 --- a/keyboards/matrix/abelx/mcuconf.h +++ b/keyboards/matrix/abelx/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/m20add/mcuconf.h b/keyboards/matrix/m20add/mcuconf.h index 00216f6908f..25f36a892d0 100644 --- a/keyboards/matrix/m20add/mcuconf.h +++ b/keyboards/matrix/m20add/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/noah/mcuconf.h b/keyboards/matrix/noah/mcuconf.h index 00216f6908f..25f36a892d0 100644 --- a/keyboards/matrix/noah/mcuconf.h +++ b/keyboards/matrix/noah/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/tzarc/kobold/info.json b/keyboards/tzarc/kobold/info.json index bed8e8a23fe..70eaa9eb847 100644 --- a/keyboards/tzarc/kobold/info.json +++ b/keyboards/tzarc/kobold/info.json @@ -13,7 +13,7 @@ "eeprom": { "driver": "wear_leveling", "wear_leveling": { - "backing_size": 32768, + "backing_size": 16384, "driver": "spi_flash" } }, diff --git a/lib/chibios b/lib/chibios index 8bd61b80430..d5b7ac30a02 160000 --- a/lib/chibios +++ b/lib/chibios @@ -1 +1 @@ -Subproject commit 8bd61b804303f1614d574546c2dd735eeabb09f5 +Subproject commit d5b7ac30a02c4962338a38b3a05e5f8da97a8c81 diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 8d863d9ee4e..5a9ad82b6ba 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 8d863d9ee4eecea68ad8d15f7e7c2b451aea79d9 +Subproject commit 5a9ad82b6ba4f649cdb800e8c2bbc9be2d3ce767 diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h index a21fd7bd128..129e275ca8b 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h index 131c847661c..cd2152da083 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h index b381aed4fd1..d119d133ffb 100644 --- a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h +++ b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h index e0af4a276bf..0c514c2b88c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h index 1208563aa15..8e2d16843ac 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h index 394e7502560..21871350c6c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h index 07399ad2f73..d29ab85c36c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h index e1d45ca4877..4489bed5c1c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h index 9c5cb824369..45ee3ef56e2 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h index 80726e0308f..c13e69c7cd8 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -73,6 +73,8 @@ #define STM32_PPRE STM32_PPRE_DIV1 #define STM32_MCOSEL STM32_MCOSEL_NOCLOCK #define STM32_MCOPRE STM32_MCOPRE_DIV1 +#define STM32_MCO2SEL STM32_MCOSEL_NOCLOCK +#define STM32_MCO2PRE STM32_MCOPRE_DIV1 #define STM32_LSCOSEL STM32_LSCOSEL_NOCLOCK /* @@ -107,9 +109,8 @@ #define STM32_IRQ_EXTI4_15_PRIORITY 3 #define STM32_IRQ_EXTI1921_PRIORITY 3 -#define STM32_IRQ_USART1_PRIORITY 2 -#define STM32_IRQ_USART2_LP2_PRIORITY 2 -#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 +#define STM32_IRQ_I2C1_PRIORITY 3 +#define STM32_IRQ_I2C2_3_PRIORITY 3 #define STM32_IRQ_TIM1_UP_PRIORITY 1 #define STM32_IRQ_TIM1_CC_PRIORITY 1 @@ -122,6 +123,12 @@ #define STM32_IRQ_TIM16_PRIORITY 1 #define STM32_IRQ_TIM17_PRIORITY 1 +#define STM32_IRQ_USART1_PRIORITY 2 +#define STM32_IRQ_USART2_LP2_PRIORITY 2 +#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 + +#define STM32_IRQ_USB1_UCPD1_2_PRIORITY 3 + /* * ADC driver system settings. */ @@ -166,16 +173,12 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 3 -#define STM32_I2C_I2C2_IRQ_PRIORITY 3 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 +#define STM32_I2C_I2C3_DMA_PRIORITY 1 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* @@ -296,7 +299,6 @@ * USB driver system settings. */ #define STM32_USB_USE_USB1 TRUE -#define STM32_USB_USB1_LP_IRQ_PRIORITY 3 #define STM32_USB_USE_ISOCHRONOUS FALSE #define STM32_USB_USE_FAST_COPY TRUE #define STM32_USB_HOST_WAKEUP_DURATION 2 diff --git a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h index 0537ee92357..39d594d585a 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -119,6 +119,10 @@ #define STM32_IRQ_FDCAN1_PRIORITY 10 +#define STM32_IRQ_I2C1_PRIORITY 5 +#define STM32_IRQ_I2C2_PRIORITY 5 +#define STM32_IRQ_I2C3_PRIORITY 5 + #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -201,15 +205,9 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C3_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h index d6385da6249..94bef9ea545 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -127,6 +127,11 @@ #define STM32_IRQ_FDCAN2_PRIORITY 10 #define STM32_IRQ_FDCAN3_PRIORITY 10 +#define STM32_IRQ_I2C1_PRIORITY 5 +#define STM32_IRQ_I2C2_PRIORITY 5 +#define STM32_IRQ_I2C3_PRIORITY 5 +#define STM32_IRQ_I2C4_PRIORITY 5 + #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -184,6 +189,7 @@ #define STM32_CAN_USE_FDCAN1 FALSE #define STM32_CAN_USE_FDCAN2 FALSE #define STM32_CAN_USE_FDCAN3 FALSE +#define STM32_CAN_FDCAN_PRESC FDCAN_CONFIG_CKDIV_PDIV_20 /* * DAC driver system settings. @@ -241,18 +247,10 @@ #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C4_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C4_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C3_IRQ_PRIORITY 5 -#define STM32_I2C_I2C4_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C4_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h index 09096c39778..2b74c34ff5b 100644 --- a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -276,6 +276,7 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE +#define STM32_I2C_USE_I2C5 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 #define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY @@ -285,14 +286,18 @@ #define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C4_RX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY #define STM32_I2C_I2C4_TX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY +#define STM32_I2C_I2C5_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C5_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_IRQ_PRIORITY 5 #define STM32_I2C_I2C2_IRQ_PRIORITY 5 #define STM32_I2C_I2C3_IRQ_PRIORITY 5 #define STM32_I2C_I2C4_IRQ_PRIORITY 5 +#define STM32_I2C_I2C5_IRQ_PRIORITY 5 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 #define STM32_I2C_I2C4_DMA_PRIORITY 3 +#define STM32_I2C_I2C5_DMA_PRIORITY 3 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* diff --git a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h index 47f1598b743..ee3a84f0ecd 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h index 6962a340c55..7f7cb74bebc 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h index e92b7aeb984..2cdd9bc80ed 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,19 +49,6 @@ #define CH_CFG_SMP_MODE FALSE #endif -/** - * @brief Kernel hardening level. - * @details This option is the level of functional-safety checks enabled - * in the kerkel. The meaning is: - * - 0: No checks, maximum performance. - * - 1: Reasonable checks. - * - 2: All checks. - * . - */ -#if !defined(CH_CFG_HARDENING_LEVEL) -#define CH_CFG_HARDENING_LEVEL 0 -#endif - /** @} */ /*===========================================================================*/ @@ -373,16 +360,6 @@ #define CH_CFG_USE_MAILBOXES TRUE #endif -/** - * @brief Memory checks APIs. - * @details If enabled then the memory checks APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MEMCHECKS) -#define CH_CFG_USE_MEMCHECKS TRUE -#endif - /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h index 4a22e818e25..4e8154820bf 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,17 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_8_4_ +#define _CHIBIOS_HAL_CONF_VER_9_1_ #include +/** + * @brief Enables the HAL safety subsystem. + */ +#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) +#define HAL_USE_SAFETY FALSE +#endif + /** * @brief Enables the PAL subsystem. */ @@ -305,6 +312,14 @@ /* I2C driver related settings. */ /*===========================================================================*/ +/** + * @brief Slave mode API enable switch. + * @note The low level driver must support this capability. + */ +#if !defined(I2C_ENABLE_SLAVE_MODE) +#define I2C_ENABLE_SLAVE_MODE FALSE +#endif + /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h index cab4c29cf65..8a27ba5537f 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h index d4b870f8e4a..3ccc6686412 100644 --- a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h +++ b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/common/configs/chconf.h b/platforms/chibios/boards/common/configs/chconf.h index 6381298ef7b..e4c65bdcf7e 100644 --- a/platforms/chibios/boards/common/configs/chconf.h +++ b/platforms/chibios/boards/common/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,19 +49,6 @@ #define CH_CFG_SMP_MODE FALSE #endif -/** - * @brief Kernel hardening level. - * @details This option is the level of functional-safety checks enabled - * in the kerkel. The meaning is: - * - 0: No checks, maximum performance. - * - 1: Reasonable checks. - * - 2: All checks. - * . - */ -#if !defined(CH_CFG_HARDENING_LEVEL) -#define CH_CFG_HARDENING_LEVEL 0 -#endif - /** @} */ /*===========================================================================*/ @@ -373,16 +360,6 @@ #define CH_CFG_USE_MAILBOXES FALSE #endif -/** - * @brief Memory checks APIs. - * @details If enabled then the memory checks APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MEMCHECKS) -#define CH_CFG_USE_MEMCHECKS TRUE -#endif - /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/common/configs/halconf.h b/platforms/chibios/boards/common/configs/halconf.h index b0ccbc1f2f8..9ab6dc3fd6e 100644 --- a/platforms/chibios/boards/common/configs/halconf.h +++ b/platforms/chibios/boards/common/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,17 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_8_4_ +#define _CHIBIOS_HAL_CONF_VER_9_1_ #include +/** + * @brief Enables the HAL safety subsystem. + */ +#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) +#define HAL_USE_SAFETY FALSE +#endif + /** * @brief Enables the PAL subsystem. */ @@ -305,6 +312,14 @@ /* I2C driver related settings. */ /*===========================================================================*/ +/** + * @brief Slave mode API enable switch. + * @note The low level driver must support this capability. + */ +#if !defined(I2C_ENABLE_SLAVE_MODE) +#define I2C_ENABLE_SLAVE_MODE FALSE +#endif + /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk index cf9fac251e4..b5cbec4431f 100644 --- a/platforms/chibios/platform.mk +++ b/platforms/chibios/platform.mk @@ -279,7 +279,7 @@ PLATFORM_SRC = \ $(PLATFORMSRC) \ $(BOARDSRC) \ $(STREAMSSRC) \ - $(CHIBIOS)/os/various/syscalls.c \ + $(CHIBIOS)/os/various/newlib_bindings/syscalls.c \ $(PLATFORM_COMMON_DIR)/syscall-fallbacks.c \ $(PLATFORM_COMMON_DIR)/wait.c \ $(PLATFORM_COMMON_DIR)/synchronization_util.c \ diff --git a/util/chibios_conf_updater.sh b/util/chibios_conf_updater.sh index 4c68c678c63..06f8e9104ad 100755 --- a/util/chibios_conf_updater.sh +++ b/util/chibios_conf_updater.sh @@ -62,7 +62,7 @@ upgrade_conf_files_generic() { pushd "$qmk_firmware_dir/lib/chibios/tools/updater" >/dev/null 2>&1 for file in $(find_chibi_files "$qmk_firmware_dir" -name "$search_filename") ; do cp -f "$file" "$file.orig" - clang-format --style='{IndentPPDirectives: None}' -i "$file" + clang-format --style='{IndentPPDirectives: None, ColumnLimit: 0}' -i "$file" cp -f "$file" "$file.formatted" bash "$update_script" "$file" if ! diff "$file" "$file.formatted" >/dev/null 2>&1 ; then From f7a77c8b702d8e18c85818652e7e6b6652422034 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 13 Mar 2026 23:20:28 +0000 Subject: [PATCH 03/48] Update lint to check all keymaps within the repo (#25970) --- lib/python/qmk/cli/lint.py | 20 ++++++++++---------- lib/python/qmk/keymap.py | 32 ++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py index 99775067e9b..575e357c7eb 100644 --- a/lib/python/qmk/cli/lint.py +++ b/lib/python/qmk/cli/lint.py @@ -22,15 +22,10 @@ INVALID_KM_NAMES = ['via', 'vial'] def _list_defaultish_keymaps(kb): """Return default like keymaps for a given keyboard """ - defaultish = ['ansi', 'iso'] + keymaps = set(list_keymaps(kb, include_userspace=False, include_community=False)) - # This is only here to flag it as "testable", so it doesn't fly under the radar during PR - defaultish.extend(INVALID_KM_NAMES) - - keymaps = set() - for x in list_keymaps(kb, include_userspace=False): - if x in defaultish or x.startswith('default'): - keymaps.add(x) + # Ensure that at least a 'default' keymap always exists + keymaps.add('default') return keymaps @@ -366,6 +361,11 @@ def lint(cli): cli.print_help() return False + # milc config handling of user.keymap breaks running lint without keymap argument + # so we have to disable that while still allowing a default to be set with lint.keymap + if 'keymap' not in cli.config_source.lint.keys() and cli.config.lint.keymap: + cli.config.lint.keymap = None + if isinstance(cli.config.lint.keyboard, str): # if provided via config - string not array keyboard_list = [cli.config.lint.keyboard] @@ -381,12 +381,12 @@ def lint(cli): # Determine keymaps to also check if cli.args.keymap == 'all': keymaps = list_keymaps(kb) + elif cli.args.keymap: + keymaps = {cli.args.keymap} elif cli.config.lint.keymap: keymaps = {cli.config.lint.keymap} else: keymaps = _list_defaultish_keymaps(kb) - # Ensure that at least a 'default' keymap always exists - keymaps.add('default') ok = True diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index 4c7b391362d..fa8f5df5f91 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py @@ -389,7 +389,7 @@ def is_keymap_target(keyboard, keymap): return False -def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=False, include_userspace=True): +def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=False, include_userspace=True, include_community=True): """List the available keymaps for a keyboard. Args: @@ -411,6 +411,9 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa include_userspace When set to True, also search userspace for available keymaps + include_community + When set to True, also search community layouts folder for available keymaps + Returns: a sorted list of valid keymap names. """ @@ -434,21 +437,22 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa kb_path = kb_path.parent - # Check community layouts as a fallback - info = info_json(keyboard) + if include_community: + # Check community layouts as a fallback + info = info_json(keyboard) - community_parents = list(Path('layouts').glob('*/')) - if has_userspace and (Path(QMK_USERSPACE) / "layouts").exists(): - community_parents.append(Path(QMK_USERSPACE) / "layouts") + community_parents = list(Path('layouts').glob('*/')) + if has_userspace and (Path(QMK_USERSPACE) / "layouts").exists(): + community_parents.append(Path(QMK_USERSPACE) / "layouts") - for community_parent in community_parents: - for layout in info.get("community_layouts", []): - cl_path = community_parent / layout - if cl_path.is_dir(): - for keymap in cl_path.iterdir(): - if is_keymap_dir(keymap, c, json, additional_files): - keymap = keymap if fullpath else keymap.name - names.add(keymap) + for community_parent in community_parents: + for layout in info.get("community_layouts", []): + cl_path = community_parent / layout + if cl_path.is_dir(): + for keymap in cl_path.iterdir(): + if is_keymap_dir(keymap, c, json, additional_files): + keymap = keymap if fullpath else keymap.name + names.add(keymap) return sorted(names) From cd78765edc547c118a55dbdd847da4bb2606815b Mon Sep 17 00:00:00 2001 From: HorrorTroll Date: Sun, 15 Mar 2026 16:06:19 +0700 Subject: [PATCH 04/48] Update WL backing store from 16 to 32-bit for AT32 (#26066) Update backing store from 16 to 32-bit for AT32 --- .../chibios/drivers/wear_leveling/wear_leveling_efl_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl_config.h b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl_config.h index f09f824bd8b..2661b54acc5 100644 --- a/platforms/chibios/drivers/wear_leveling/wear_leveling_efl_config.h +++ b/platforms/chibios/drivers/wear_leveling/wear_leveling_efl_config.h @@ -17,7 +17,7 @@ # elif defined(QMK_MCU_FAMILY_WB32) # define BACKING_STORE_WRITE_SIZE 8 // from hal_efl_lld.c # elif defined(QMK_MCU_FAMILY_AT32) -# define BACKING_STORE_WRITE_SIZE 2 // from hal_efl_lld.c +# define BACKING_STORE_WRITE_SIZE 4 // from hal_efl_lld.c # elif defined(QMK_MCU_FAMILY_STM32) # if defined(STM32_FLASH_LINE_SIZE) // from some family's stm32_registry.h file # define BACKING_STORE_WRITE_SIZE (STM32_FLASH_LINE_SIZE) From b6ff72cb03ba002b4f3459a2afea52645b116a01 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 15 Mar 2026 10:25:45 +0000 Subject: [PATCH 05/48] Bump vitepress to 1.6.4 (#26067) --- builddefs/docsgen/package.json | 6 +- builddefs/docsgen/yarn.lock | 1134 +++++++++++++++++++++----------- 2 files changed, 750 insertions(+), 390 deletions(-) diff --git a/builddefs/docsgen/package.json b/builddefs/docsgen/package.json index b6c56f3448d..17912e652d5 100644 --- a/builddefs/docsgen/package.json +++ b/builddefs/docsgen/package.json @@ -1,10 +1,8 @@ { "license": "GPL-2.0-or-later", "devDependencies": { - "vite": "^5.4.21", - "vitepress": "^1.1.0", - "vitepress-plugin-tabs": "^0.5.0", - "vue": "^3.4.24" + "vitepress": "^1.6.4", + "vitepress-plugin-tabs": "^0.8.0" }, "scripts": { "docs:dev": "vitepress dev --host 0.0.0.0", diff --git a/builddefs/docsgen/yarn.lock b/builddefs/docsgen/yarn.lock index 8c0791ffc20..ec27914827b 100644 --- a/builddefs/docsgen/yarn.lock +++ b/builddefs/docsgen/yarn.lock @@ -2,181 +2,206 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" - integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== +"@algolia/abtesting@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.15.2.tgz#5c5e52daba3cf80d92eaf683c781e7f86d3b51b6" + integrity sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/autocomplete-plugin-algolia-insights@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" - integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== +"@algolia/autocomplete-core@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz#2c410baa94a47c5c5f56ed712bb4a00ebe24088b" + integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== dependencies: - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/autocomplete-plugin-algolia-insights" "1.17.7" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/autocomplete-preset-algolia@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da" - integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== +"@algolia/autocomplete-plugin-algolia-insights@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz#7d2b105f84e7dd8f0370aa4c4ab3b704e6760d82" + integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== dependencies: - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/autocomplete-shared@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" - integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== - -"@algolia/cache-browser-local-storage@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz#0cc26b96085e1115dac5fcb9d826651ba57faabc" - integrity sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg== +"@algolia/autocomplete-preset-algolia@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz#c9badc0d73d62db5bf565d839d94ec0034680ae9" + integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== dependencies: - "@algolia/cache-common" "4.23.3" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/cache-common@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.23.3.tgz#3bec79092d512a96c9bfbdeec7cff4ad36367166" - integrity sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A== +"@algolia/autocomplete-shared@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" + integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== -"@algolia/cache-in-memory@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz#3945f87cd21ffa2bec23890c85305b6b11192423" - integrity sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg== +"@algolia/client-abtesting@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.49.2.tgz#0c7f46ba2789e30db53eb31f816aa31fe1ec750e" + integrity sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ== dependencies: - "@algolia/cache-common" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/client-account@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.23.3.tgz#8751bbf636e6741c95e7c778488dee3ee430ac6f" - integrity sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA== +"@algolia/client-analytics@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.49.2.tgz#d1eee1df4a7d50c05cd0448589b34d5e3b058237" + integrity sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q== dependencies: - "@algolia/client-common" "4.23.3" - "@algolia/client-search" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/client-analytics@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.23.3.tgz#f88710885278fe6fb6964384af59004a5a6f161d" - integrity sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA== +"@algolia/client-common@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.49.2.tgz#cb93f1ea9a60f7ffec65474e075afb52900f2434" + integrity sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw== + +"@algolia/client-insights@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.49.2.tgz#fdbd2be74bfe805cddf249f67f95f65323c5f5dd" + integrity sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA== dependencies: - "@algolia/client-common" "4.23.3" - "@algolia/client-search" "4.23.3" - "@algolia/requester-common" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/client-common@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.23.3.tgz#891116aa0db75055a7ecc107649f7f0965774704" - integrity sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw== +"@algolia/client-personalization@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.49.2.tgz#3b8fc9eb85b24dbcb2ee80dae9af91bd12490148" + integrity sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA== dependencies: - "@algolia/requester-common" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/client-personalization@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.23.3.tgz#35fa8e5699b0295fbc400a8eb211dc711e5909db" - integrity sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g== +"@algolia/client-query-suggestions@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.49.2.tgz#e5d9ed73fe5f0afc8feddfc68d4691d5963e8c57" + integrity sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA== dependencies: - "@algolia/client-common" "4.23.3" - "@algolia/requester-common" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/client-search@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.23.3.tgz#a3486e6af13a231ec4ab43a915a1f318787b937f" - integrity sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw== +"@algolia/client-search@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.49.2.tgz#3c823ffaf333ce70fedfb3d45361661c8b227806" + integrity sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg== dependencies: - "@algolia/client-common" "4.23.3" - "@algolia/requester-common" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/logger-common@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.23.3.tgz#35c6d833cbf41e853a4f36ba37c6e5864920bfe9" - integrity sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g== - -"@algolia/logger-console@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.23.3.tgz#30f916781826c4db5f51fcd9a8a264a06e136985" - integrity sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A== +"@algolia/ingestion@1.49.2": + version "1.49.2" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.49.2.tgz#99626cd9b11925e1aae5db59836821d2e7e2c892" + integrity sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw== dependencies: - "@algolia/logger-common" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/recommend@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-4.23.3.tgz#53d4f194d22d9c72dc05f3f7514c5878f87c5890" - integrity sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w== +"@algolia/monitoring@1.49.2": + version "1.49.2" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.49.2.tgz#5c550df1b073de97e3d38a2e8d50f17e90badc52" + integrity sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg== dependencies: - "@algolia/cache-browser-local-storage" "4.23.3" - "@algolia/cache-common" "4.23.3" - "@algolia/cache-in-memory" "4.23.3" - "@algolia/client-common" "4.23.3" - "@algolia/client-search" "4.23.3" - "@algolia/logger-common" "4.23.3" - "@algolia/logger-console" "4.23.3" - "@algolia/requester-browser-xhr" "4.23.3" - "@algolia/requester-common" "4.23.3" - "@algolia/requester-node-http" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/requester-browser-xhr@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz#9e47e76f60d540acc8b27b4ebc7a80d1b41938b9" - integrity sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw== +"@algolia/recommend@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.49.2.tgz#ace9e988141dd627f7ac3a0e38d9e254bb006490" + integrity sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA== dependencies: - "@algolia/requester-common" "4.23.3" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/requester-common@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.23.3.tgz#7dbae896e41adfaaf1d1fa5f317f83a99afb04b3" - integrity sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw== - -"@algolia/requester-node-http@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz#c9f94a5cb96a15f48cea338ab6ef16bbd0ff989f" - integrity sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA== +"@algolia/requester-browser-xhr@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.49.2.tgz#4493ed41dc84948693b34174ccc08ac5dfabd3dd" + integrity sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA== dependencies: - "@algolia/requester-common" "4.23.3" + "@algolia/client-common" "5.49.2" -"@algolia/transporter@4.23.3": - version "4.23.3" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.23.3.tgz#545b045b67db3850ddf0bbecbc6c84ff1f3398b7" - integrity sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ== +"@algolia/requester-fetch@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.49.2.tgz#fd64e1ec726ffb63dce22112354119125c67a27e" + integrity sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ== dependencies: - "@algolia/cache-common" "4.23.3" - "@algolia/logger-common" "4.23.3" - "@algolia/requester-common" "4.23.3" + "@algolia/client-common" "5.49.2" -"@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@docsearch/css@3.6.0", "@docsearch/css@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.6.0.tgz#0e9f56f704b3a34d044d15fd9962ebc1536ba4fb" - integrity sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ== - -"@docsearch/js@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.6.0.tgz#f9e46943449b9092d874944f7a80bcc071004cfb" - integrity sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ== +"@algolia/requester-node-http@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.49.2.tgz#ac71c6502b8ba8760d22afd3f38620934a28a68f" + integrity sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA== dependencies: - "@docsearch/react" "3.6.0" + "@algolia/client-common" "5.49.2" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@docsearch/css@3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.8.2.tgz#7973ceb6892c30f154ba254cd05c562257a44977" + integrity sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ== + +"@docsearch/js@3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.8.2.tgz#bdcfc9837700eb38453b88e211ab5cc5a3813cc6" + integrity sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ== + dependencies: + "@docsearch/react" "3.8.2" preact "^10.0.0" -"@docsearch/react@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.6.0.tgz#b4f25228ecb7fc473741aefac592121e86dd2958" - integrity sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w== +"@docsearch/react@3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.8.2.tgz#7b11d39b61c976c0aa9fbde66e6b73b30f3acd42" + integrity sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg== dependencies: - "@algolia/autocomplete-core" "1.9.3" - "@algolia/autocomplete-preset-algolia" "1.9.3" - "@docsearch/css" "3.6.0" - algoliasearch "^4.19.1" + "@algolia/autocomplete-core" "1.17.7" + "@algolia/autocomplete-preset-algolia" "1.17.7" + "@docsearch/css" "3.8.2" + algoliasearch "^5.14.2" "@esbuild/aix-ppc64@0.21.5": version "0.21.5" @@ -293,10 +318,22 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== -"@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@iconify-json/simple-icons@^1.2.21": + version "1.2.73" + resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.73.tgz#65772d358fc25aa1ea97b98101c61170c3ef27e7" + integrity sha512-nQZTwul4c2zBqH/aLP4zMOiElj93T6HawbrP+sFQKpxmBdS5x1duCK3cAnkj6dntHz84EYkzaQRM83V2pj4qxA== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@rollup/rollup-android-arm-eabi@4.59.0": version "4.59.0" @@ -423,216 +460,343 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz#4584a8a87b29188a4c1fe987a9fcf701e256d86c" integrity sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA== -"@shikijs/core@1.3.0", "@shikijs/core@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.3.0.tgz#5b93b51ddb8def1e3a1543107f9b5b0540f716f6" - integrity sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA== - -"@shikijs/transformers@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.3.0.tgz#b03c5733ef61e25e4f53666bf11889f8876f34e9" - integrity sha512-3mlpg2I9CjhjE96dEWQOGeCWoPcyTov3s4aAsHmgvnTHa8MBknEnCQy8/xivJPSpD+olqOqIEoHnLfbNJK29AA== +"@shikijs/core@2.5.0", "@shikijs/core@^2.1.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-2.5.0.tgz#e14d33961dfa3141393d4a76fc8923d0d1c4b62f" + integrity sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg== dependencies: - shiki "1.3.0" + "@shikijs/engine-javascript" "2.5.0" + "@shikijs/engine-oniguruma" "2.5.0" + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.4" + +"@shikijs/engine-javascript@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz#e045c6ecfbda6c99137547b0a482e0b87f1053fc" + integrity sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w== + dependencies: + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^3.1.0" + +"@shikijs/engine-oniguruma@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz#230de5693cc1da6c9d59c7ad83593c2027274817" + integrity sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw== + dependencies: + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + +"@shikijs/langs@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-2.5.0.tgz#97ab50c495922cc1ca06e192985b28dc73de5d50" + integrity sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w== + dependencies: + "@shikijs/types" "2.5.0" + +"@shikijs/themes@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-2.5.0.tgz#8c6aecf73f5455681c8bec15797cf678162896cb" + integrity sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw== + dependencies: + "@shikijs/types" "2.5.0" + +"@shikijs/transformers@^2.1.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-2.5.0.tgz#190c84786ff06c417580ab79177338a947168c55" + integrity sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg== + dependencies: + "@shikijs/core" "2.5.0" + "@shikijs/types" "2.5.0" + +"@shikijs/types@2.5.0", "@shikijs/types@^2.1.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-2.5.0.tgz#e949c7384802703a48b9d6425dd41673c164df69" + integrity sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw== + dependencies: + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" + integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== "@types/estree@1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/linkify-it@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" - integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== - -"@types/markdown-it@^14.0.1": - version "14.0.1" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.0.1.tgz#3d3fdf9dba83b69edececc070d39ec72b84270a7" - integrity sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ== +"@types/hast@^3.0.0", "@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: - "@types/linkify-it" "*" - "@types/mdurl" "*" + "@types/unist" "*" -"@types/mdurl@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" - integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== -"@types/web-bluetooth@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" - integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== - -"@vitejs/plugin-vue@^5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37" - integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ== - -"@vue/compiler-core@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.24.tgz#6b4a5ffddcd874a692f2acfa68981201bcd7096b" - integrity sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A== +"@types/markdown-it@^14.1.2": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: - "@babel/parser" "^7.24.4" - "@vue/shared" "3.4.24" - entities "^4.5.0" + "@types/linkify-it" "^5" + "@types/mdurl" "^2" + +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/web-bluetooth@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63" + integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== + +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@vitejs/plugin-vue@^5.2.1": + version "5.2.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz#9e8a512eb174bfc2a333ba959bbf9de428d89ad8" + integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA== + +"@vue/compiler-core@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.30.tgz#0f984da9207f24f9ddfb700052a43247a953fd9a" + integrity sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw== + dependencies: + "@babel/parser" "^7.29.0" + "@vue/shared" "3.5.30" + entities "^7.0.1" estree-walker "^2.0.2" - source-map-js "^1.2.0" + source-map-js "^1.2.1" -"@vue/compiler-dom@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz#b7335a49f095b6d35e48b6f7be8da513c1fa52b8" - integrity sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA== +"@vue/compiler-dom@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz#a38dbdd520479244c8b673123b4bd06a82e733ee" + integrity sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g== dependencies: - "@vue/compiler-core" "3.4.24" - "@vue/shared" "3.4.24" + "@vue/compiler-core" "3.5.30" + "@vue/shared" "3.5.30" -"@vue/compiler-sfc@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz#2872e353147ce2a145169a33ddd4d68dc95c3a18" - integrity sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA== +"@vue/compiler-sfc@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz#5c716d844f240154263e99b25fba6e1802c0c8c6" + integrity sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A== dependencies: - "@babel/parser" "^7.24.4" - "@vue/compiler-core" "3.4.24" - "@vue/compiler-dom" "3.4.24" - "@vue/compiler-ssr" "3.4.24" - "@vue/shared" "3.4.24" + "@babel/parser" "^7.29.0" + "@vue/compiler-core" "3.5.30" + "@vue/compiler-dom" "3.5.30" + "@vue/compiler-ssr" "3.5.30" + "@vue/shared" "3.5.30" estree-walker "^2.0.2" - magic-string "^0.30.10" - postcss "^8.4.38" - source-map-js "^1.2.0" + magic-string "^0.30.21" + postcss "^8.5.8" + source-map-js "^1.2.1" -"@vue/compiler-ssr@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz#0d11fe54dabd17cbd6393a16bf7f785da1cfab46" - integrity sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ== +"@vue/compiler-ssr@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz#e9b407d7e56be1e307a7621f2e8d2501267ff1d0" + integrity sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA== dependencies: - "@vue/compiler-dom" "3.4.24" - "@vue/shared" "3.4.24" + "@vue/compiler-dom" "3.5.30" + "@vue/shared" "3.5.30" -"@vue/devtools-api@^7.0.27": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-7.1.2.tgz#8808b0f008842b756bf1e9c30788837abb62ab3a" - integrity sha512-AKd49cN3BdRgttmX5Aw8op7sx6jmaPwaILcDjaa05UKc1yIHDYST7P8yGZs6zd2pKFETAQz40gmyG7+b57slsQ== +"@vue/devtools-api@^7.7.0": + version "7.7.9" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-7.7.9.tgz#999dbea50da6b00cf59a1336f11fdc2b43d9e063" + integrity sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g== dependencies: - "@vue/devtools-kit" "^7.1.2" + "@vue/devtools-kit" "^7.7.9" -"@vue/devtools-kit@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.1.2.tgz#dfb7306edf895dadc556dd5f0c516809c2f94826" - integrity sha512-UTrcUSOhlI9eXqbPMHUWwA6NQiiPT3onzXsVk2JHGR8ZFFSkzsWTTpHyVA1woG8zvgu2HNV/wigW2k87p858zw== +"@vue/devtools-kit@^7.7.9": + version "7.7.9" + resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz#bc218a815616e8987df7ab3e10fc1fb3b8706c58" + integrity sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA== dependencies: - "@vue/devtools-shared" "^7.1.2" + "@vue/devtools-shared" "^7.7.9" + birpc "^2.3.0" hookable "^5.5.3" mitt "^3.0.1" perfect-debounce "^1.0.0" speakingurl "^14.0.1" + superjson "^2.2.2" -"@vue/devtools-shared@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.1.2.tgz#7b1c1de10bab4756f271c377370a62833b4ee94b" - integrity sha512-r9cUf93VMhKSsxF2/cBbf6Lm1nRBx+r1pRuji5CiAf3JIPYPOjeEqJ13OuwP1fauYh1tyBFcCxt3eJPvHT59gg== +"@vue/devtools-shared@^7.7.9": + version "7.7.9" + resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz#fa4c096b744927081a7dda5fcf05f34b1ae6ca14" + integrity sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA== dependencies: - rfdc "^1.3.1" + rfdc "^1.4.1" -"@vue/reactivity@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.24.tgz#150584316ca2acc4ed19a24f9f29863c3a17a7b2" - integrity sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g== +"@vue/reactivity@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.30.tgz#1ff13f7d570b16b4f009f007772c7b71be1dd09d" + integrity sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q== dependencies: - "@vue/shared" "3.4.24" + "@vue/shared" "3.5.30" -"@vue/runtime-core@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.24.tgz#066c544dc59a07a96c12874a57b750c239124874" - integrity sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g== +"@vue/runtime-core@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.30.tgz#abe448b25e88f583b1847323a2f19f5e4a21837d" + integrity sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg== dependencies: - "@vue/reactivity" "3.4.24" - "@vue/shared" "3.4.24" + "@vue/reactivity" "3.5.30" + "@vue/shared" "3.5.30" -"@vue/runtime-dom@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz#4f8e7acbe1e8ffa7c55af1366e4438729ebe9b20" - integrity sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ== +"@vue/runtime-dom@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz#41d1b6424b754300f735c2ecb1a7457b4125dab3" + integrity sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw== dependencies: - "@vue/runtime-core" "3.4.24" - "@vue/shared" "3.4.24" - csstype "^3.1.3" + "@vue/reactivity" "3.5.30" + "@vue/runtime-core" "3.5.30" + "@vue/shared" "3.5.30" + csstype "^3.2.3" -"@vue/server-renderer@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.24.tgz#80dd546f8d6a9f5c4f8b68083fe9cc2d62299332" - integrity sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow== +"@vue/server-renderer@3.5.30": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.30.tgz#116515063d609d3ceca1170f3b09122f24f187b5" + integrity sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ== dependencies: - "@vue/compiler-ssr" "3.4.24" - "@vue/shared" "3.4.24" + "@vue/compiler-ssr" "3.5.30" + "@vue/shared" "3.5.30" -"@vue/shared@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.24.tgz#278ac71f492b392b9b17fe8fc7d324db1a8842db" - integrity sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw== +"@vue/shared@3.5.30", "@vue/shared@^3.5.13": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.30.tgz#5d7a0d3ca151647484303fd9f057e2e13ecb80ef" + integrity sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ== -"@vueuse/core@10.9.0", "@vueuse/core@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.9.0.tgz#7d779a95cf0189de176fee63cee4ba44b3c85d64" - integrity sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg== +"@vueuse/core@12.8.2", "@vueuse/core@^12.4.0": + version "12.8.2" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-12.8.2.tgz#007c6dd29a7d1f6933e916e7a2f8ef3c3f968eaa" + integrity sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ== dependencies: - "@types/web-bluetooth" "^0.0.20" - "@vueuse/metadata" "10.9.0" - "@vueuse/shared" "10.9.0" - vue-demi ">=0.14.7" + "@types/web-bluetooth" "^0.0.21" + "@vueuse/metadata" "12.8.2" + "@vueuse/shared" "12.8.2" + vue "^3.5.13" -"@vueuse/integrations@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.9.0.tgz#2b1a9556215ad3c1f96d39cbfbef102cf6e0ec05" - integrity sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q== +"@vueuse/integrations@^12.4.0": + version "12.8.2" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-12.8.2.tgz#d04f33d86fe985c9a27c98addcfde9f30f2db1df" + integrity sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g== dependencies: - "@vueuse/core" "10.9.0" - "@vueuse/shared" "10.9.0" - vue-demi ">=0.14.7" + "@vueuse/core" "12.8.2" + "@vueuse/shared" "12.8.2" + vue "^3.5.13" -"@vueuse/metadata@10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.9.0.tgz#769a1a9db65daac15cf98084cbf7819ed3758620" - integrity sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA== +"@vueuse/metadata@12.8.2": + version "12.8.2" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-12.8.2.tgz#6cb3a4e97cdcf528329eebc1bda73cd7f64318d3" + integrity sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A== -"@vueuse/shared@10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.9.0.tgz#13af2a348de15d07b7be2fd0c7fc9853a69d8fe0" - integrity sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw== +"@vueuse/shared@12.8.2": + version "12.8.2" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-12.8.2.tgz#b9e4611d0603629c8e151f982459da394e22f930" + integrity sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w== dependencies: - vue-demi ">=0.14.7" + vue "^3.5.13" -algoliasearch@^4.19.1: - version "4.23.3" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.23.3.tgz#e09011d0a3b0651444916a3e6bbcba064ec44b60" - integrity sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg== +algoliasearch@^5.14.2: + version "5.49.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.49.2.tgz#af1a0db7c8a36f93473399da918fe6d7799660b6" + integrity sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng== dependencies: - "@algolia/cache-browser-local-storage" "4.23.3" - "@algolia/cache-common" "4.23.3" - "@algolia/cache-in-memory" "4.23.3" - "@algolia/client-account" "4.23.3" - "@algolia/client-analytics" "4.23.3" - "@algolia/client-common" "4.23.3" - "@algolia/client-personalization" "4.23.3" - "@algolia/client-search" "4.23.3" - "@algolia/logger-common" "4.23.3" - "@algolia/logger-console" "4.23.3" - "@algolia/recommend" "4.23.3" - "@algolia/requester-browser-xhr" "4.23.3" - "@algolia/requester-common" "4.23.3" - "@algolia/requester-node-http" "4.23.3" - "@algolia/transporter" "4.23.3" + "@algolia/abtesting" "1.15.2" + "@algolia/client-abtesting" "5.49.2" + "@algolia/client-analytics" "5.49.2" + "@algolia/client-common" "5.49.2" + "@algolia/client-insights" "5.49.2" + "@algolia/client-personalization" "5.49.2" + "@algolia/client-query-suggestions" "5.49.2" + "@algolia/client-search" "5.49.2" + "@algolia/ingestion" "1.49.2" + "@algolia/monitoring" "1.49.2" + "@algolia/recommend" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +birpc@^2.3.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/birpc/-/birpc-2.9.0.tgz#b59550897e4cd96a223e2a6c1475b572236ed145" + integrity sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw== -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +copy-anything@^4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-4.0.5.tgz#16cabafd1ea4bb327a540b750f2b4df522825aea" + integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA== + dependencies: + is-what "^5.2.0" + +csstype@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +devlop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + +emoji-regex-xs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz#e8af22e5d9dbd7f7f22d280af3d19d2aab5b0724" + integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== + +entities@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== esbuild@^0.21.3: version "0.21.5" @@ -668,49 +832,139 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -focus-trap@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2" - integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w== +focus-trap@^7.6.4: + version "7.8.0" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.8.0.tgz#b1d9463fa42b93ad7a5223d750493a6c09b672a8" + integrity sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA== dependencies: - tabbable "^6.2.0" + tabbable "^6.4.0" fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +hast-util-to-html@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + hookable@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== -magic-string@^0.30.10: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +is-what@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-5.5.0.tgz#a3031815757cfe1f03fed990bf6355a2d3f628c4" + integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.5" mark.js@8.11.1: version "8.11.1" resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== -minisearch@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b" - integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ== +mdast-util-to-hast@^13.0.0: + version "13.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" + integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +minisearch@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.2.0.tgz#3dc30e41e9464b3836553b6d969b656614f8f359" + integrity sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg== mitt@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -nanoid@^3.3.8: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +oniguruma-to-es@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz#480e4bac4d3bc9439ac0d2124f0725e7a0d76d17" + integrity sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ== + dependencies: + emoji-regex-xs "^1.0.0" + regex "^6.0.1" + regex-recursion "^6.0.2" perfect-debounce@^1.0.0: version "1.0.0" @@ -722,24 +976,48 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -postcss@^8.4.38, postcss@^8.4.43: - version "8.5.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" - integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== +postcss@^8.4.43, postcss@^8.5.8: + version "8.5.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== dependencies: - nanoid "^3.3.8" + nanoid "^3.3.11" picocolors "^1.1.1" source-map-js "^1.2.1" preact@^10.0.0: - version "10.20.2" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.20.2.tgz#0b343299a8c020562311cc25db93b3d832ec5e71" - integrity sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg== + version "10.29.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.29.0.tgz#a6e5858670b659c4d471c6fea232233e03b403e8" + integrity sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg== -rfdc@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + +regex-recursion@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33" + integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== + dependencies: + regex-utilities "^2.3.0" + +regex-utilities@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" + integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + +regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803" + integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg== + dependencies: + regex-utilities "^2.3.0" + +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rollup@^4.20.0: version "4.59.0" @@ -775,34 +1053,115 @@ rollup@^4.20.0: "@rollup/rollup-win32-x64-msvc" "4.59.0" fsevents "~2.3.2" -shiki@1.3.0, shiki@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.3.0.tgz#3eda35cb49f6f0a98525e9da48fc072e6c655a3f" - integrity sha512-9aNdQy/etMXctnPzsje1h1XIGm9YfRcSksKOGqZWXA/qP9G18/8fpz5Bjpma8bOgz3tqIpjERAd6/lLjFyzoww== +shiki@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-2.5.0.tgz#09d01ebf3b0b06580431ce3ddc023320442cf223" + integrity sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ== dependencies: - "@shikijs/core" "1.3.0" - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + "@shikijs/core" "2.5.0" + "@shikijs/engine-javascript" "2.5.0" + "@shikijs/engine-oniguruma" "2.5.0" + "@shikijs/langs" "2.5.0" + "@shikijs/themes" "2.5.0" + "@shikijs/types" "2.5.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + speakingurl@^14.0.1: version "14.0.1" resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== -tabbable@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" -vite@^5.2.9, vite@^5.4.21: +superjson@^2.2.2: + version "2.2.6" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.6.tgz#a223a3a988172a5f9656e2063fe5f733af40d099" + integrity sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA== + dependencies: + copy-anything "^4" + +tabbable@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.4.0.tgz#36eb7a06d80b3924a22095daf45740dea3bf5581" + integrity sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vite@^5.4.14: version "5.4.21" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027" integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw== @@ -813,44 +1172,47 @@ vite@^5.2.9, vite@^5.4.21: optionalDependencies: fsevents "~2.3.3" -vitepress-plugin-tabs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz#2b193a72ed36b9fcd63e3907d3044fe7b6cf3e4e" - integrity sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A== +vitepress-plugin-tabs@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.8.0.tgz#4509330ccc0cb04a4aca0f43160108270a21d143" + integrity sha512-86FWHAuS9XCyTMDpMd5MELwp3bQyITDf/+IdZ20+iYbB8TIR8yoCp08PkDHxi4WWSVsCZ3n1uUIC7YCVhMsI3A== -vitepress@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.1.3.tgz#ded22392f5274680aaba8bb81dd4fb1c4741c02e" - integrity sha512-hGrIYN0w9IHWs0NQSnlMjKV/v/HLfD+Ywv5QdvCSkiT32mpNOOwUrZjnqZv/JL/WBPpUc94eghTUvmipxw0xrA== +vitepress@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.6.4.tgz#1b6c68fede541a3f401a66263dce0c985e2d8d92" + integrity sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg== dependencies: - "@docsearch/css" "^3.6.0" - "@docsearch/js" "^3.6.0" - "@shikijs/core" "^1.3.0" - "@shikijs/transformers" "^1.3.0" - "@types/markdown-it" "^14.0.1" - "@vitejs/plugin-vue" "^5.0.4" - "@vue/devtools-api" "^7.0.27" - "@vueuse/core" "^10.9.0" - "@vueuse/integrations" "^10.9.0" - focus-trap "^7.5.4" + "@docsearch/css" "3.8.2" + "@docsearch/js" "3.8.2" + "@iconify-json/simple-icons" "^1.2.21" + "@shikijs/core" "^2.1.0" + "@shikijs/transformers" "^2.1.0" + "@shikijs/types" "^2.1.0" + "@types/markdown-it" "^14.1.2" + "@vitejs/plugin-vue" "^5.2.1" + "@vue/devtools-api" "^7.7.0" + "@vue/shared" "^3.5.13" + "@vueuse/core" "^12.4.0" + "@vueuse/integrations" "^12.4.0" + focus-trap "^7.6.4" mark.js "8.11.1" - minisearch "^6.3.0" - shiki "^1.3.0" - vite "^5.2.9" - vue "^3.4.23" + minisearch "^7.1.1" + shiki "^2.1.0" + vite "^5.4.14" + vue "^3.5.13" -vue-demi@>=0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" - integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== - -vue@^3.4.23, vue@^3.4.24: - version "3.4.24" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.24.tgz#f269549939a6c092480f018aa0bd886ba64f4c6f" - integrity sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg== +vue@^3.5.13: + version "3.5.30" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.30.tgz#66df25e9795af3e5522b36f24f3d290fde83f8a0" + integrity sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg== dependencies: - "@vue/compiler-dom" "3.4.24" - "@vue/compiler-sfc" "3.4.24" - "@vue/runtime-dom" "3.4.24" - "@vue/server-renderer" "3.4.24" - "@vue/shared" "3.4.24" + "@vue/compiler-dom" "3.5.30" + "@vue/compiler-sfc" "3.5.30" + "@vue/runtime-dom" "3.5.30" + "@vue/server-renderer" "3.5.30" + "@vue/shared" "3.5.30" + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From e4de46b3b0aa140967835ece0bebef61c22e4a51 Mon Sep 17 00:00:00 2001 From: HorrorTroll Date: Sun, 15 Mar 2026 17:28:40 +0700 Subject: [PATCH 06/48] Added PixArt PMW-3325 mouse sensor driver (#26065) * Added support PMW3325 sensor driver * Missing PMW3325 on pointing device document * Suggested changes resolved --- builddefs/common_features.mk | 4 +- docs/features/pointing_device.md | 17 ++ drivers/sensors/pmw3325.c | 179 ++++++++++++++++++++++ drivers/sensors/pmw3325.h | 44 ++++++ quantum/pointing_device/pointing_device.h | 4 + 5 files changed, 247 insertions(+), 1 deletion(-) create mode 100644 drivers/sensors/pmw3325.c create mode 100644 drivers/sensors/pmw3325.h diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index cd4e67a4bd4..b7cb2193fa3 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -125,7 +125,7 @@ ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) MOUSE_ENABLE := yes endif -VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick azoteq_iqs5xx cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 paw3222 pmw3320 pmw3360 pmw3389 pimoroni_trackball custom +VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick azoteq_iqs5xx cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 paw3222 pmw3320 pmw3325 pmw3360 pmw3389 pimoroni_trackball custom ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes) ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),) $(call CATASTROPHIC_ERROR,Invalid POINTING_DEVICE_DRIVER,POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type) @@ -159,6 +159,8 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes) SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), paw3222) SPI_DRIVER_REQUIRED = yes + else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3325) + SPI_DRIVER_REQUIRED = yes else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball) I2C_DRIVER_REQUIRED = yes else ifneq ($(filter $(strip $(POINTING_DEVICE_DRIVER)),pmw3360 pmw3389),) diff --git a/docs/features/pointing_device.md b/docs/features/pointing_device.md index eedbf59b95b..8319db78231 100644 --- a/docs/features/pointing_device.md +++ b/docs/features/pointing_device.md @@ -320,6 +320,23 @@ The PMW3320 sensor uses a serial type protocol for communication, and requires a The CPI range is 500-3500, in increments of 250. Defaults to 1000 CPI. +### PMW-3325 Sensor + +To use the PMW-3325 sensor, add this to your `rules.mk`: + +```make +POINTING_DEVICE_DRIVER = pmw3325 +``` + +The following pins must be defined in `config.h`: + +| Setting (`config.h`) | Description | Default | +| --------------------- | ------------------------------------------------------------------ | ---------------------------- | +| `PMW3325_CS_PIN` | (Required) The pin connected to the chip select pin of the sensor. | `POINTING_DEVICE_CS_PIN` | +| `PMW3325_SPI_DIVISOR` | (Required) The SPI clock divisor. This is dependent on your MCU. | _not defined_ | + +The CPI range is 100-5000, in increments of 100. Defaults to 2000 CPI. + ### PMW 3360 and PMW 3389 Sensor This drivers supports both the PMW 3360 and PMW 3389 sensor as well as multiple sensors of the same type _per_ controller, so 2 can be attached at the same side for split keyboards (or unsplit keyboards). diff --git a/drivers/sensors/pmw3325.c b/drivers/sensors/pmw3325.c new file mode 100644 index 00000000000..b8eb6ee88cf --- /dev/null +++ b/drivers/sensors/pmw3325.c @@ -0,0 +1,179 @@ +// Copyright 2024 Colin Lam (Ploopy Corporation) +// Copyright 2026 HorrorTroll +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "pmw3325.h" +#include "wait.h" +#include "gpio.h" +#include "spi_master.h" +#include "pointing_device_internal.h" + +#define MSB1 0x80 +#define MSB0 0x7F + +const pointing_device_driver_t pmw3325_pointing_device_driver = { + .init = pmw3325_init, + .get_report = pmw3325_get_report, + .set_cpi = pmw3325_set_cpi, + .get_cpi = pmw3325_get_cpi, +}; + +// Convert a 16-bit twos complement binary-represented number into a +// signed 16-bit integer. +static int16_t convert_twoscomp_16(uint8_t high, uint8_t low) { + uint16_t data = (high << 8) | low; + + if ((data & 0x8000) == 0x8000) { + return -32768 + (data & 0x7FFF); + } else { + return data; + } +} + +void pmw3325_write(uint8_t reg_addr, uint8_t data) { + spi_start(PMW3325_CS_PIN, false, 3, PMW3325_SPI_DIVISOR); + wait_us(1); // tNCS_SCLK + spi_write(reg_addr | MSB1); + wait_us(180); // tSRAD + spi_write(data); + wait_us(1); // tSCLK_NCS + spi_stop(); + wait_us(20); // tSRR +} + +uint8_t pmw3325_read(uint8_t reg_addr) { + spi_start(PMW3325_CS_PIN, false, 3, PMW3325_SPI_DIVISOR); + wait_us(1); // tNCS_SCLK + spi_write(reg_addr & MSB0); + wait_us(180); // tSRAD + uint8_t data = spi_read(); + wait_us(1); // tSCLK_NCS + spi_stop(); + wait_us(20); // tSRR + + return data; +} + +bool pmw3325_init(void) { + wait_ms(50); + gpio_set_pin_output(PMW3325_CS_PIN); + + // CS must be kept high at power-up stage for at least 1ms + gpio_write_pin_low(PMW3325_CS_PIN); + wait_ms(10); + gpio_write_pin_high(PMW3325_CS_PIN); + + spi_init(); + + // reboot + pmw3325_write(0x3A, 0x5A); + wait_ms(10); + + pmw3325_write(0x18, 0x39); + + if (!pmw3325_check_signature()) { + return false; + } + + // read a burst, then discard + pmw3325_read(0x02); + pmw3325_read(0x03); + pmw3325_read(0x04); + pmw3325_read(0x05); + pmw3325_read(0x06); + + // initialize + pmw3325_write(0x78, 0x80); + pmw3325_write(0x79, 0x80); + pmw3325_write(0x14, 0x80); + pmw3325_write(0x20, 0x40); + pmw3325_write(0x1A, 0x40); + pmw3325_write(0x47, 0x00); + pmw3325_write(0x48, 0x01); + pmw3325_write(0x60, 0x01); + pmw3325_write(0x69, 0x03); + pmw3325_write(0x1D, 0x90); + pmw3325_write(0x1B, 0x2E); + pmw3325_write(0x24, 0x05); + pmw3325_write(0x56, 0x00); + pmw3325_write(0x2C, 0x8A); + pmw3325_write(0x2D, 0x58); + pmw3325_write(0x40, 0x80); + pmw3325_write(0x7F, 0x01); + pmw3325_write(0x7A, 0x32); + pmw3325_write(0x6A, 0x93); + pmw3325_write(0x6B, 0x68); + pmw3325_write(0x6C, 0x71); + pmw3325_write(0x6D, 0x50); + pmw3325_write(0x7F, 0x00); + pmw3325_write(0x7F, 0x02); + pmw3325_write(0x29, 0x1C); + pmw3325_write(0x2A, 0x1A); + pmw3325_write(0x2B, 0x90); + pmw3325_write(0x40, 0x80); + pmw3325_write(0x7F, 0x00); + return true; +} + +report_pmw3325_t pmw3325_read_burst(void) { + report_pmw3325_t report = {0}; + + uint8_t motion = pmw3325_read(0x02); + if ((motion & MSB1) == MSB1) { + // Motion detected + uint8_t dx_l = pmw3325_read(0x03); + uint8_t dx_h = pmw3325_read(0x04); + uint8_t dy_l = pmw3325_read(0x05); + uint8_t dy_h = pmw3325_read(0x06); + + report.dx = convert_twoscomp_16(dx_h, dx_l); + report.dy = convert_twoscomp_16(dy_h, dy_l); + } + + return report; +} + +static const uint8_t pmw3325_cpi_lut[50] = { + 0x02, 0x04, 0x06, 0x08, 0x0B, 0x0D, 0x0F, 0x12, 0x14, 0x16, + 0x19, 0x1B, 0x1D, 0x20, 0x22, 0x24, 0x27, 0x29, 0x2B, 0x2E, + 0x30, 0x32, 0x34, 0x37, 0x39, 0x3B, 0x3E, 0x40, 0x42, 0x45, + 0x47, 0x49, 0x4C, 0x4E, 0x50, 0x53, 0x55, 0x57, 0x5A, 0x5C, + 0x5E, 0x61, 0x63, 0x65, 0x68, 0x6A, 0x6C, 0x6F, 0x71, 0x73 +}; + +void pmw3325_set_cpi(uint16_t cpi) { + uint8_t cpival = CONSTRAIN((cpi / PMW3325_CPI_STEP), (PMW3325_CPI_MIN / PMW3325_CPI_STEP), (PMW3325_CPI_MAX / PMW3325_CPI_STEP)) - 1U; + + pmw3325_write(0x1B, pmw3325_cpi_lut[cpival]); +} + +uint16_t pmw3325_get_cpi(void) { + uint8_t cpival = pmw3325_read(0x1B); + + for (uint8_t cpi = 0; cpi < 50; cpi++) { + if (pmw3325_cpi_lut[cpi] == cpival) { + return (cpi + 1) * PMW3325_CPI_STEP; + } + } + + return 0; +} + +report_mouse_t pmw3325_get_report(report_mouse_t mouse_report) { + report_pmw3325_t data = pmw3325_read_burst(); + + if (data.dx != 0 || data.dy != 0) { + pd_dprintf("Raw ] X: %d, Y: %d\n", data.dx, data.dy); + mouse_report.x = CONSTRAIN_HID_XY(data.dx); + mouse_report.y = CONSTRAIN_HID_XY(data.dy); + } + + return mouse_report; +} + +bool pmw3325_check_signature(void) { + uint8_t checkval_1 = pmw3325_read(0x00); + uint8_t checkval_2 = pmw3325_read(0x3F); + + return (checkval_1 == 0x43 && checkval_2 == 0xBC); +} diff --git a/drivers/sensors/pmw3325.h b/drivers/sensors/pmw3325.h new file mode 100644 index 00000000000..17a965aa19a --- /dev/null +++ b/drivers/sensors/pmw3325.h @@ -0,0 +1,44 @@ +// Copyright 2021 Colin Lam (Ploopy Corporation) +// Copyright 2026 HorrorTroll +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include +#include +#include "pointing_device.h" + +#ifndef PMW3325_CS_PIN +# ifdef POINTING_DEVICE_CS_PIN +# define PMW3325_CS_PIN POINTING_DEVICE_CS_PIN +# else +# error "No chip select pin defined -- missing POINTING_DEVICE_CS_PIN or PMW3325_CS_PIN define" +# endif +#endif + +#ifndef PMW3325_SPI_DIVISOR +# error "No PMW3325 SPI divisor defined -- missing PMW3325_SPI_DIVISOR" +#endif + +typedef struct { + int16_t dx; + int16_t dy; +} report_pmw3325_t; + +extern const pointing_device_driver_t pmw3325_pointing_device_driver; + +bool pmw3325_init(void); +report_pmw3325_t pmw3325_read_burst(void); +void pmw3325_set_cpi(uint16_t cpi); +uint16_t pmw3325_get_cpi(void); +report_mouse_t pmw3325_get_report(report_mouse_t mouse_report); +bool pmw3325_check_signature(void); + +#if !defined(PMW3325_CPI) +# define PMW3325_CPI 2000 +#endif + +#define PMW3325_CPI_MIN 100 +#define PMW3325_CPI_MAX 5000 +#define PMW3325_CPI_STEP 100 +#define CONSTRAIN(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) diff --git a/quantum/pointing_device/pointing_device.h b/quantum/pointing_device/pointing_device.h index bb0e43af3c4..78c5f326dee 100644 --- a/quantum/pointing_device/pointing_device.h +++ b/quantum/pointing_device/pointing_device.h @@ -43,6 +43,10 @@ typedef struct { # include "spi_master.h" # include "drivers/sensors/paw3222.h" # define POINTING_DEVICE_MOTION_PIN_ACTIVE_LOW +#elif defined(POINTING_DEVICE_DRIVER_pmw3325) +# include "spi_master.h" +# include "drivers/sensors/pmw3325.h" +# define POINTING_DEVICE_MOTION_PIN_ACTIVE_LOW #elif defined(POINTING_DEVICE_DRIVER_adns9800) # include "spi_master.h" # include "drivers/sensors/adns9800.h" From 2afc217124883e8b11e22081497ede12d61e0d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Sun, 15 Mar 2026 18:29:36 +0800 Subject: [PATCH 07/48] Refactor Pixel Fractal effect (#26071) --- .../animations/pixel_fractal_anim.h | 47 ++++++++----------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/quantum/rgb_matrix/animations/pixel_fractal_anim.h b/quantum/rgb_matrix/animations/pixel_fractal_anim.h index bf5c22a64e4..05d899f6ec2 100644 --- a/quantum/rgb_matrix/animations/pixel_fractal_anim.h +++ b/quantum/rgb_matrix/animations/pixel_fractal_anim.h @@ -10,50 +10,43 @@ static bool PIXEL_FRACTAL(effect_params_t* params) { # if MATRIX_COLS < 2 # define MID_COL 1 # else -# define MID_COL MATRIX_COLS / 2 +# define MID_COL (MATRIX_COLS / 2) # endif static bool led[MATRIX_ROWS][MID_COL]; static uint32_t wait_timer = 0; - inline uint32_t interval(void) { - return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); - } - if (params->init) { rgb_matrix_set_color_all(0, 0, 0); + memset(led, 0, sizeof(led)); } RGB_MATRIX_USE_LIMITS(led_min, led_max); if (g_rgb_timer > wait_timer) { rgb_t rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv); - for (uint8_t h = 0; h < MATRIX_ROWS; ++h) { - // Light and copy columns outward - for (uint8_t l = 0; l < MID_COL - 1; ++l) { - rgb_t index_rgb = led[h][l] ? (rgb_t){rgb.r, rgb.g, rgb.b} : (rgb_t){0, 0, 0}; - if (HAS_ANY_FLAGS(g_led_config.flags[g_led_config.matrix_co[h][l]], params->flags)) { - rgb_matrix_set_color(g_led_config.matrix_co[h][l], index_rgb.r, index_rgb.g, index_rgb.b); + for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { + // Light columns outward from center, mirroring each side + for (uint8_t col = 0; col < MID_COL; ++col) { + rgb_t index_rgb = led[row][col] ? rgb : (rgb_t){0, 0, 0}; + uint8_t l_idx = g_led_config.matrix_co[row][col]; + uint8_t r_idx = g_led_config.matrix_co[row][MATRIX_COLS - 1 - col]; + if (l_idx >= led_min && l_idx < led_max && HAS_ANY_FLAGS(g_led_config.flags[l_idx], params->flags)) { + rgb_matrix_set_color(l_idx, index_rgb.r, index_rgb.g, index_rgb.b); } - if (HAS_ANY_FLAGS(g_led_config.flags[g_led_config.matrix_co[h][MATRIX_COLS - 1 - l]], params->flags)) { - rgb_matrix_set_color(g_led_config.matrix_co[h][MATRIX_COLS - 1 - l], index_rgb.r, index_rgb.g, index_rgb.b); + if (r_idx >= led_min && r_idx < led_max && HAS_ANY_FLAGS(g_led_config.flags[r_idx], params->flags)) { + rgb_matrix_set_color(r_idx, index_rgb.r, index_rgb.g, index_rgb.b); } - led[h][l] = led[h][l + 1]; } - - // Light both middle columns - rgb_t index_rgb = led[h][MID_COL - 1] ? (rgb_t){rgb.r, rgb.g, rgb.b} : (rgb_t){0, 0, 0}; - if (HAS_ANY_FLAGS(g_led_config.flags[g_led_config.matrix_co[h][MID_COL - 1]], params->flags)) { - rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL - 1], index_rgb.r, index_rgb.g, index_rgb.b); - } - if (HAS_ANY_FLAGS(g_led_config.flags[g_led_config.matrix_co[h][MATRIX_COLS - MID_COL]], params->flags)) { - rgb_matrix_set_color(g_led_config.matrix_co[h][MATRIX_COLS - MID_COL], index_rgb.r, index_rgb.g, index_rgb.b); - } - - // Generate new random fractal column - led[h][MID_COL - 1] = (random8() & 3) ? false : true; } - wait_timer = g_rgb_timer + interval(); + // Advance state and reset timer only on the final LED range iteration + if (!rgb_matrix_check_finished_leds(led_max)) { + for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { + memmove(led[row], led[row] + 1, (MID_COL - 1) * sizeof(bool)); + led[row][MID_COL - 1] = !(random8() & 3); + } + wait_timer = g_rgb_timer + 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); + } } return rgb_matrix_check_finished_leds(led_max); From 53c0e30e9691ce364f90fd1834b2f98e14834ef1 Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Sun, 15 Mar 2026 21:31:43 +1100 Subject: [PATCH 08/48] [CI] Format code according to conventions (#26072) --- drivers/sensors/pmw3325.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/sensors/pmw3325.c b/drivers/sensors/pmw3325.c index b8eb6ee88cf..96f22888246 100644 --- a/drivers/sensors/pmw3325.c +++ b/drivers/sensors/pmw3325.c @@ -133,13 +133,7 @@ report_pmw3325_t pmw3325_read_burst(void) { return report; } -static const uint8_t pmw3325_cpi_lut[50] = { - 0x02, 0x04, 0x06, 0x08, 0x0B, 0x0D, 0x0F, 0x12, 0x14, 0x16, - 0x19, 0x1B, 0x1D, 0x20, 0x22, 0x24, 0x27, 0x29, 0x2B, 0x2E, - 0x30, 0x32, 0x34, 0x37, 0x39, 0x3B, 0x3E, 0x40, 0x42, 0x45, - 0x47, 0x49, 0x4C, 0x4E, 0x50, 0x53, 0x55, 0x57, 0x5A, 0x5C, - 0x5E, 0x61, 0x63, 0x65, 0x68, 0x6A, 0x6C, 0x6F, 0x71, 0x73 -}; +static const uint8_t pmw3325_cpi_lut[50] = {0x02, 0x04, 0x06, 0x08, 0x0B, 0x0D, 0x0F, 0x12, 0x14, 0x16, 0x19, 0x1B, 0x1D, 0x20, 0x22, 0x24, 0x27, 0x29, 0x2B, 0x2E, 0x30, 0x32, 0x34, 0x37, 0x39, 0x3B, 0x3E, 0x40, 0x42, 0x45, 0x47, 0x49, 0x4C, 0x4E, 0x50, 0x53, 0x55, 0x57, 0x5A, 0x5C, 0x5E, 0x61, 0x63, 0x65, 0x68, 0x6A, 0x6C, 0x6F, 0x71, 0x73}; void pmw3325_set_cpi(uint16_t cpi) { uint8_t cpival = CONSTRAIN((cpi / PMW3325_CPI_STEP), (PMW3325_CPI_MIN / PMW3325_CPI_STEP), (PMW3325_CPI_MAX / PMW3325_CPI_STEP)) - 1U; From f01698b3f88a72b9878c5f01063e4a593d96562e Mon Sep 17 00:00:00 2001 From: Marcus Ofenhed Date: Sun, 15 Mar 2026 10:59:23 +0000 Subject: [PATCH 09/48] Add resolution information to digitizer (#25958) Co-authored-by: Marcus Ofenhed <> --- tmk_core/protocol/usb_descriptor.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index ceab9eef9ab..b71236f067c 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -332,6 +332,11 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { HID_RI_USAGE(8, 0x44), // Barrel Switch HID_RI_LOGICAL_MINIMUM(8, 0x00), HID_RI_LOGICAL_MAXIMUM(8, 0x01), + HID_RI_PHYSICAL_MINIMUM(8, 0), + // Semi-random value (actual claimed physical size is not important) + HID_RI_PHYSICAL_MAXIMUM(8, 0xCB), + HID_RI_UNIT(8, 0x13), // Inch, English Linear + HID_RI_UNIT_EXPONENT(8, 0x0E), // -2 HID_RI_REPORT_COUNT(8, 0x03), HID_RI_REPORT_SIZE(8, 0x01), HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), From c0bbf2f0f954e53fb9dca8873077c72bc6b29f62 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Mon, 16 Mar 2026 12:29:22 +1100 Subject: [PATCH 10/48] Revert "Update ChibiOS, ChibiOS-Contrib." (#26074) --- keyboards/matrix/abelx/mcuconf.h | 2 +- keyboards/matrix/m20add/mcuconf.h | 2 +- keyboards/matrix/noah/mcuconf.h | 2 +- keyboards/tzarc/kobold/info.json | 2 +- lib/chibios | 2 +- lib/chibios-contrib | 2 +- .../BLACKPILL_STM32_F401/configs/mcuconf.h | 2 +- .../BLACKPILL_STM32_F411/configs/mcuconf.h | 2 +- .../boards/BONSAI_C4/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F303XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F401XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F405XG/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F407XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F411XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F446XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_G0B1XB/configs/mcuconf.h | 28 +++++++++---------- .../GENERIC_STM32_G431XB/configs/mcuconf.h | 18 ++++++------ .../GENERIC_STM32_G474XE/configs/mcuconf.h | 24 ++++++++-------- .../GENERIC_STM32_H723XG/configs/mcuconf.h | 7 +---- .../GENERIC_STM32_L412XB/configs/mcuconf.h | 2 +- .../GENERIC_STM32_L432XC/configs/mcuconf.h | 2 +- .../boards/QMK_PROTON_C/configs/chconf.h | 25 ++++++++++++++++- .../boards/QMK_PROTON_C/configs/halconf.h | 19 ++----------- .../boards/QMK_PROTON_C/configs/mcuconf.h | 2 +- .../chibios/boards/STEMCELL/configs/mcuconf.h | 2 +- .../chibios/boards/common/configs/chconf.h | 25 ++++++++++++++++- .../chibios/boards/common/configs/halconf.h | 19 ++----------- platforms/chibios/platform.mk | 2 +- util/chibios_conf_updater.sh | 2 +- 29 files changed, 110 insertions(+), 97 deletions(-) diff --git a/keyboards/matrix/abelx/mcuconf.h b/keyboards/matrix/abelx/mcuconf.h index ce8783c8b9e..a2fd42b8c4c 100644 --- a/keyboards/matrix/abelx/mcuconf.h +++ b/keyboards/matrix/abelx/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/m20add/mcuconf.h b/keyboards/matrix/m20add/mcuconf.h index 25f36a892d0..00216f6908f 100644 --- a/keyboards/matrix/m20add/mcuconf.h +++ b/keyboards/matrix/m20add/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/noah/mcuconf.h b/keyboards/matrix/noah/mcuconf.h index 25f36a892d0..00216f6908f 100644 --- a/keyboards/matrix/noah/mcuconf.h +++ b/keyboards/matrix/noah/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/tzarc/kobold/info.json b/keyboards/tzarc/kobold/info.json index 70eaa9eb847..bed8e8a23fe 100644 --- a/keyboards/tzarc/kobold/info.json +++ b/keyboards/tzarc/kobold/info.json @@ -13,7 +13,7 @@ "eeprom": { "driver": "wear_leveling", "wear_leveling": { - "backing_size": 16384, + "backing_size": 32768, "driver": "spi_flash" } }, diff --git a/lib/chibios b/lib/chibios index d5b7ac30a02..8bd61b80430 160000 --- a/lib/chibios +++ b/lib/chibios @@ -1 +1 @@ -Subproject commit d5b7ac30a02c4962338a38b3a05e5f8da97a8c81 +Subproject commit 8bd61b804303f1614d574546c2dd735eeabb09f5 diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 5a9ad82b6ba..8d863d9ee4e 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 5a9ad82b6ba4f649cdb800e8c2bbc9be2d3ce767 +Subproject commit 8d863d9ee4eecea68ad8d15f7e7c2b451aea79d9 diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h index 129e275ca8b..a21fd7bd128 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h index cd2152da083..131c847661c 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h index d119d133ffb..b381aed4fd1 100644 --- a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h +++ b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h index 0c514c2b88c..e0af4a276bf 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h index 8e2d16843ac..1208563aa15 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h index 21871350c6c..394e7502560 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h index d29ab85c36c..07399ad2f73 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h index 4489bed5c1c..e1d45ca4877 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h index 45ee3ef56e2..9c5cb824369 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h index c13e69c7cd8..80726e0308f 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -73,8 +73,6 @@ #define STM32_PPRE STM32_PPRE_DIV1 #define STM32_MCOSEL STM32_MCOSEL_NOCLOCK #define STM32_MCOPRE STM32_MCOPRE_DIV1 -#define STM32_MCO2SEL STM32_MCOSEL_NOCLOCK -#define STM32_MCO2PRE STM32_MCOPRE_DIV1 #define STM32_LSCOSEL STM32_LSCOSEL_NOCLOCK /* @@ -109,8 +107,9 @@ #define STM32_IRQ_EXTI4_15_PRIORITY 3 #define STM32_IRQ_EXTI1921_PRIORITY 3 -#define STM32_IRQ_I2C1_PRIORITY 3 -#define STM32_IRQ_I2C2_3_PRIORITY 3 +#define STM32_IRQ_USART1_PRIORITY 2 +#define STM32_IRQ_USART2_LP2_PRIORITY 2 +#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 #define STM32_IRQ_TIM1_UP_PRIORITY 1 #define STM32_IRQ_TIM1_CC_PRIORITY 1 @@ -123,12 +122,6 @@ #define STM32_IRQ_TIM16_PRIORITY 1 #define STM32_IRQ_TIM17_PRIORITY 1 -#define STM32_IRQ_USART1_PRIORITY 2 -#define STM32_IRQ_USART2_LP2_PRIORITY 2 -#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 - -#define STM32_IRQ_USB1_UCPD1_2_PRIORITY 3 - /* * ADC driver system settings. */ @@ -173,12 +166,16 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_IRQ_PRIORITY 3 +#define STM32_I2C_I2C2_IRQ_PRIORITY 3 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 -#define STM32_I2C_I2C3_DMA_PRIORITY 1 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* @@ -299,6 +296,7 @@ * USB driver system settings. */ #define STM32_USB_USE_USB1 TRUE +#define STM32_USB_USB1_LP_IRQ_PRIORITY 3 #define STM32_USB_USE_ISOCHRONOUS FALSE #define STM32_USB_USE_FAST_COPY TRUE #define STM32_USB_HOST_WAKEUP_DURATION 2 diff --git a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h index 39d594d585a..0537ee92357 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -119,10 +119,6 @@ #define STM32_IRQ_FDCAN1_PRIORITY 10 -#define STM32_IRQ_I2C1_PRIORITY 5 -#define STM32_IRQ_I2C2_PRIORITY 5 -#define STM32_IRQ_I2C3_PRIORITY 5 - #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -205,9 +201,15 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_IRQ_PRIORITY 5 +#define STM32_I2C_I2C2_IRQ_PRIORITY 5 +#define STM32_I2C_I2C3_IRQ_PRIORITY 5 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h index 94bef9ea545..d6385da6249 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -127,11 +127,6 @@ #define STM32_IRQ_FDCAN2_PRIORITY 10 #define STM32_IRQ_FDCAN3_PRIORITY 10 -#define STM32_IRQ_I2C1_PRIORITY 5 -#define STM32_IRQ_I2C2_PRIORITY 5 -#define STM32_IRQ_I2C3_PRIORITY 5 -#define STM32_IRQ_I2C4_PRIORITY 5 - #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -189,7 +184,6 @@ #define STM32_CAN_USE_FDCAN1 FALSE #define STM32_CAN_USE_FDCAN2 FALSE #define STM32_CAN_USE_FDCAN3 FALSE -#define STM32_CAN_FDCAN_PRESC FDCAN_CONFIG_CKDIV_PDIV_20 /* * DAC driver system settings. @@ -247,10 +241,18 @@ #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C4_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C4_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C4_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C1_IRQ_PRIORITY 5 +#define STM32_I2C_I2C2_IRQ_PRIORITY 5 +#define STM32_I2C_I2C3_IRQ_PRIORITY 5 +#define STM32_I2C_I2C4_IRQ_PRIORITY 5 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h index 2b74c34ff5b..09096c39778 100644 --- a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -276,7 +276,6 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE -#define STM32_I2C_USE_I2C5 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 #define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY @@ -286,18 +285,14 @@ #define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C4_RX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY #define STM32_I2C_I2C4_TX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY -#define STM32_I2C_I2C5_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C5_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_IRQ_PRIORITY 5 #define STM32_I2C_I2C2_IRQ_PRIORITY 5 #define STM32_I2C_I2C3_IRQ_PRIORITY 5 #define STM32_I2C_I2C4_IRQ_PRIORITY 5 -#define STM32_I2C_I2C5_IRQ_PRIORITY 5 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 #define STM32_I2C_I2C4_DMA_PRIORITY 3 -#define STM32_I2C_I2C5_DMA_PRIORITY 3 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* diff --git a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h index ee3a84f0ecd..47f1598b743 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h index 7f7cb74bebc..6962a340c55 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h index 2cdd9bc80ed..e92b7aeb984 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,6 +49,19 @@ #define CH_CFG_SMP_MODE FALSE #endif +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + /** @} */ /*===========================================================================*/ @@ -360,6 +373,16 @@ #define CH_CFG_USE_MAILBOXES TRUE #endif +/** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h index 4e8154820bf..4a22e818e25 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,17 +29,10 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_9_1_ +#define _CHIBIOS_HAL_CONF_VER_8_4_ #include -/** - * @brief Enables the HAL safety subsystem. - */ -#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) -#define HAL_USE_SAFETY FALSE -#endif - /** * @brief Enables the PAL subsystem. */ @@ -312,14 +305,6 @@ /* I2C driver related settings. */ /*===========================================================================*/ -/** - * @brief Slave mode API enable switch. - * @note The low level driver must support this capability. - */ -#if !defined(I2C_ENABLE_SLAVE_MODE) -#define I2C_ENABLE_SLAVE_MODE FALSE -#endif - /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h index 8a27ba5537f..cab4c29cf65 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h index 3ccc6686412..d4b870f8e4a 100644 --- a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h +++ b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/common/configs/chconf.h b/platforms/chibios/boards/common/configs/chconf.h index e4c65bdcf7e..6381298ef7b 100644 --- a/platforms/chibios/boards/common/configs/chconf.h +++ b/platforms/chibios/boards/common/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,6 +49,19 @@ #define CH_CFG_SMP_MODE FALSE #endif +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + /** @} */ /*===========================================================================*/ @@ -360,6 +373,16 @@ #define CH_CFG_USE_MAILBOXES FALSE #endif +/** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/common/configs/halconf.h b/platforms/chibios/boards/common/configs/halconf.h index 9ab6dc3fd6e..b0ccbc1f2f8 100644 --- a/platforms/chibios/boards/common/configs/halconf.h +++ b/platforms/chibios/boards/common/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,17 +29,10 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_9_1_ +#define _CHIBIOS_HAL_CONF_VER_8_4_ #include -/** - * @brief Enables the HAL safety subsystem. - */ -#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) -#define HAL_USE_SAFETY FALSE -#endif - /** * @brief Enables the PAL subsystem. */ @@ -312,14 +305,6 @@ /* I2C driver related settings. */ /*===========================================================================*/ -/** - * @brief Slave mode API enable switch. - * @note The low level driver must support this capability. - */ -#if !defined(I2C_ENABLE_SLAVE_MODE) -#define I2C_ENABLE_SLAVE_MODE FALSE -#endif - /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk index b5cbec4431f..cf9fac251e4 100644 --- a/platforms/chibios/platform.mk +++ b/platforms/chibios/platform.mk @@ -279,7 +279,7 @@ PLATFORM_SRC = \ $(PLATFORMSRC) \ $(BOARDSRC) \ $(STREAMSSRC) \ - $(CHIBIOS)/os/various/newlib_bindings/syscalls.c \ + $(CHIBIOS)/os/various/syscalls.c \ $(PLATFORM_COMMON_DIR)/syscall-fallbacks.c \ $(PLATFORM_COMMON_DIR)/wait.c \ $(PLATFORM_COMMON_DIR)/synchronization_util.c \ diff --git a/util/chibios_conf_updater.sh b/util/chibios_conf_updater.sh index 06f8e9104ad..4c68c678c63 100755 --- a/util/chibios_conf_updater.sh +++ b/util/chibios_conf_updater.sh @@ -62,7 +62,7 @@ upgrade_conf_files_generic() { pushd "$qmk_firmware_dir/lib/chibios/tools/updater" >/dev/null 2>&1 for file in $(find_chibi_files "$qmk_firmware_dir" -name "$search_filename") ; do cp -f "$file" "$file.orig" - clang-format --style='{IndentPPDirectives: None, ColumnLimit: 0}' -i "$file" + clang-format --style='{IndentPPDirectives: None}' -i "$file" cp -f "$file" "$file.formatted" bash "$update_script" "$file" if ! diff "$file" "$file.formatted" >/dev/null 2>&1 ; then From 86fbc9efe052e1ff55135f23785b5a043c7b90d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Mon, 16 Mar 2026 09:45:39 +0800 Subject: [PATCH 11/48] Remove blockader user keymap (#26075) --- .../matrix/noah/keymaps/blockader/config.h | 3 - .../matrix/noah/keymaps/blockader/keymap.c | 652 ------------------ .../matrix/noah/keymaps/blockader/rules.mk | 2 - 3 files changed, 657 deletions(-) delete mode 100644 keyboards/matrix/noah/keymaps/blockader/config.h delete mode 100644 keyboards/matrix/noah/keymaps/blockader/keymap.c delete mode 100644 keyboards/matrix/noah/keymaps/blockader/rules.mk diff --git a/keyboards/matrix/noah/keymaps/blockader/config.h b/keyboards/matrix/noah/keymaps/blockader/config.h deleted file mode 100644 index a64261ba9d1..00000000000 --- a/keyboards/matrix/noah/keymaps/blockader/config.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define TAPPING_TOGGLE 2 diff --git a/keyboards/matrix/noah/keymaps/blockader/keymap.c b/keyboards/matrix/noah/keymaps/blockader/keymap.c deleted file mode 100644 index b6caf43f91f..00000000000 --- a/keyboards/matrix/noah/keymaps/blockader/keymap.c +++ /dev/null @@ -1,652 +0,0 @@ -#include QMK_KEYBOARD_H - -enum { - LAYER_NORM_BASE, - LAYER_NORM_EXTENSION, - LAYER_RACE_BASE, - LAYER_RACE_EXTENSION, - LAYER_LEGACY_BASE, - LAYER_LEGACY_EXTENSION, - LAYER_CONTROL, - LAYER_WINDOW, - LAYER_DESKTOP, - NUMBER_OF_LAYERS, -}; - -bool temporary[NUMBER_OF_LAYERS] = { - [LAYER_NORM_BASE] = false, - [LAYER_NORM_EXTENSION] = true, - [LAYER_RACE_BASE] = false, - [LAYER_RACE_EXTENSION] = true, - [LAYER_LEGACY_BASE] = false, - [LAYER_LEGACY_EXTENSION] = true, - [LAYER_CONTROL] = false, - [LAYER_WINDOW] = true, - [LAYER_DESKTOP] = false, -}; - -#define KEY_FORWARD_LAYER(a) SAFE_RANGE + a - -enum{ - DANCE_PGDN_BOTTOM, - DANCE_PGUP_TOP, -}; - -tap_dance_action_t tap_dance_actions[] = { - [DANCE_PGDN_BOTTOM] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, LGUI(KC_DOWN)), - [DANCE_PGUP_TOP] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, LGUI(KC_UP)), -}; - -#define KEY_DANCE(a) TD(a) - -enum custom_keycodes { - KEY_BACK_LAYER = SAFE_RANGE + NUMBER_OF_LAYERS, - KEY_INSERT_LINE_START, - KEY_INSERT_HERE, - KEY_INSERT_LINE_END, - KEY_CREATE_PREVIOUS_LINE, - KEY_CREATE_NEXT_LINE, - KEY_CUT_WORD, - KEY_CUT_LINE, - KEY_CUT_SELECTION, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [LAYER_NORM_BASE] = LAYOUT_default_splitspace( - KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KEY_DANCE(DANCE_PGDN_BOTTOM), KEY_DANCE(DANCE_PGUP_TOP), KC_NO, KEY_CUT_LINE, KEY_FORWARD_LAYER(LAYER_RACE_BASE), - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LCBR, KC_RCBR, KC_BSLS, KEY_FORWARD_LAYER(LAYER_LEGACY_BASE), - KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KEY_FORWARD_LAYER(LAYER_DESKTOP), - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, LCTL(KC_LEFT), - KC_LCTL, KC_LGUI, KC_LALT, KEY_FORWARD_LAYER(LAYER_NORM_EXTENSION), KEY_FORWARD_LAYER(LAYER_CONTROL), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_NO, LCTL(KC_RIGHT)), - [LAYER_NORM_EXTENSION] = LAYOUT_default_splitspace( - LGUI(LSFT(KC_4)), KC_NO, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, LCTL(KC_C), KEY_FORWARD_LAYER(LAYER_RACE_BASE), - KEY_FORWARD_LAYER(LAYER_WINDOW), LGUI(KC_SPC), LCTL(KC_SPC), KC_ESC, KC_TILD, KC_EXLM, KC_PEQL, KC_PLUS, KC_MINUS, KC_PIPE, KC_COLN, KC_LCBR, KC_RCBR, KEY_CREATE_PREVIOUS_LINE, KEY_FORWARD_LAYER(LAYER_LEGACY_BASE), - KEY_CUT_WORD, LALT(KC_LEFT), LALT(KC_RIGHT), KC_BSPC, LGUI(KC_LEFT), LCTL(KC_E), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LGUI(KC_V), KC_DQUO, KEY_CREATE_NEXT_LINE, KEY_FORWARD_LAYER(LAYER_DESKTOP), - KC_LSFT, LGUI(KC_Z), KEY_CUT_SELECTION, KC_LPRN, KC_RPRN, KC_UNDS, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_QUES, KC_RSFT, KC_NO, LCTL(KC_LEFT), - KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KEY_FORWARD_LAYER(LAYER_CONTROL), KC_SPC, KC_RALT, KC_RGUI, KC_NO, QK_BOOT, LCTL(KC_RIGHT)), - [LAYER_RACE_BASE] = LAYOUT_default_splitspace( - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, KC_NO, KC_NO, KC_NO, KEY_BACK_LAYER, - KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LCBR, KC_RCBR, KC_BSLS, KC_NO, - KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_NO, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KEY_FORWARD_LAYER(LAYER_RACE_EXTENSION), KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), - [LAYER_RACE_EXTENSION] = LAYOUT_default_splitspace( - KC_NO, KC_1, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_9, KC_0, KC_NO, KC_NO, KC_NO, KEY_CUT_LINE, KEY_BACK_LAYER, - KC_NO, KC_Q, KC_W, KC_F, KC_TILD, KC_EXLM, KC_PEQL, KC_PLUS, KC_MINUS, KC_PIPE, KC_COLN, KC_LCBR, KC_RCBR, KC_BSLS, KC_NO, - KEY_CUT_LINE, KC_A, KC_R, KC_BSPC, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_DQUO, KC_ENT, KC_NO, - KC_LSFT, KC_Z, KC_X, KC_LPRN, KC_RPRN, KC_UNDS, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_QUES, KC_RSFT, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), - [LAYER_LEGACY_BASE] = LAYOUT_default_splitspace( - KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KEY_DANCE(DANCE_PGDN_BOTTOM), KEY_DANCE(DANCE_PGUP_TOP), KC_NO, KEY_CUT_LINE, KC_NO, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LCBR, KC_RCBR, KC_BSLS, KEY_BACK_LAYER, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KEY_FORWARD_LAYER(LAYER_DESKTOP), - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, LCTL(KC_LEFT), - KC_LCTL, KC_LGUI, KC_LALT, KEY_FORWARD_LAYER(LAYER_LEGACY_EXTENSION), KEY_FORWARD_LAYER(LAYER_CONTROL), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_NO, LCTL(KC_RIGHT)), - [LAYER_LEGACY_EXTENSION] = LAYOUT_default_splitspace( - LGUI(LSFT(KC_4)), KC_NO, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, LCTL(KC_C), KC_NO, - KEY_FORWARD_LAYER(LAYER_WINDOW), LGUI(KC_SPC), LCTL(KC_SPC), KC_ESC, KC_TILD, KC_EXLM, KC_PEQL, KC_PLUS, KC_MINUS, KC_PIPE, KC_COLN, KC_LCBR, KC_RCBR, KEY_CREATE_PREVIOUS_LINE, KEY_BACK_LAYER, - KEY_CUT_WORD, LALT(KC_LEFT), LALT(KC_RIGHT), KC_BSPC, LGUI(KC_LEFT), LCTL(KC_E), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LGUI(KC_V), KC_DQUO, KEY_CREATE_NEXT_LINE, KEY_FORWARD_LAYER(LAYER_DESKTOP), - KC_LSFT, LGUI(KC_Z), KEY_CUT_SELECTION, KC_LPRN, KC_RPRN, KC_UNDS, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_QUES, KC_RSFT, KC_NO, LCTL(KC_LEFT), - KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KEY_FORWARD_LAYER(LAYER_CONTROL), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_NO, LCTL(KC_RIGHT)), - [LAYER_CONTROL] = LAYOUT_default_splitspace( - KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KEY_INSERT_LINE_START, KEY_INSERT_HERE, KEY_INSERT_LINE_END, KC_NO, KC_NO, KC_NO, KEY_CREATE_PREVIOUS_LINE, KC_NO, - KEY_CUT_WORD, LALT(KC_LEFT), LALT(KC_RIGHT), KC_BSPC, LGUI(KC_LEFT), LCTL(KC_E), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LGUI(KC_V), KC_NO, KEY_CREATE_NEXT_LINE, KC_NO, - KC_LSFT, LGUI(KC_Z), KEY_CUT_SELECTION, LGUI(KC_C), LGUI(KC_V), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KEY_BACK_LAYER, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), - [LAYER_WINDOW] = LAYOUT_default_splitspace( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KEY_BACK_LAYER, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_NO, KEY_BACK_LAYER, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KEY_BACK_LAYER, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), - [LAYER_DESKTOP] = LAYOUT_default_splitspace( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LCTL(KC_LEFT), KC_NO, KC_NO, LCTL(KC_RIGHT), KC_NO, KC_NO, KEY_BACK_LAYER, KEY_BACK_LAYER, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KEY_BACK_LAYER, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), -}; - -int layers[16]; - -struct { - bool back; -} common_layer_data; -struct { - int operator, multiplier; -} layer_control_data; - -struct { - int start_time; -} layer_window_data; - -bool handle_layer_key(uint16_t key, keyrecord_t* record) { - switch (layers[layers[0] + 1]) { - case LAYER_CONTROL: - switch (key) { - case KC_0: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_1: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 1; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_2: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 2; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_3: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 3; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_4: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 4; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_5: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 5; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_6: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 6; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_7: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 7; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_8: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 8; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KC_9: - if (record->event.pressed) { - layer_control_data.multiplier = layer_control_data.multiplier * 10 + 9; - if (layer_control_data.multiplier < 0) layer_control_data.multiplier = 0; - } - return false; - case KEY_INSERT_LINE_START: - if (record->event.pressed) common_layer_data.back = true; - return true; - case KEY_INSERT_HERE: - if (record->event.pressed) common_layer_data.back = true; - return true; - case KEY_INSERT_LINE_END: - if (record->event.pressed) common_layer_data.back = true; - return true; - case KEY_CREATE_PREVIOUS_LINE: - if (record->event.pressed) common_layer_data.back = true; - return true; - case KEY_CUT_WORD: - if (record->event.pressed) { - if (layer_control_data.operator== - 1) { - register_code(KC_LALT); - tap_code(KC_LEFT); - tap_code(KC_RIGHT); - unregister_code(KC_LALT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(LALT(KC_LEFT))); - tap_code16(LGUI(KC_X)); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case LALT(KC_LEFT): - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LALT(KC_LEFT)); - else if (layer_control_data.operator== KC_BSPC) { - register_code(KC_LALT); - tap_code(KC_LEFT); - tap_code(KC_RIGHT); - unregister_code(KC_LALT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(LALT(KC_LEFT))); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - register_code(KC_LALT); - tap_code(KC_LEFT); - tap_code(KC_RIGHT); - unregister_code(KC_LALT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(LALT(KC_LEFT))); - tap_code16(LGUI(KC_C)); - tap_code(KC_RIGHT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case LALT(KC_RIGHT): - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LALT(KC_RIGHT)); - else if (layer_control_data.operator== KC_BSPC) { - register_code(KC_LALT); - tap_code(KC_RIGHT); - tap_code(KC_LEFT); - unregister_code(KC_LALT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(LALT(KC_RIGHT))); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - register_code(KC_LALT); - tap_code(KC_RIGHT); - tap_code(KC_LEFT); - unregister_code(KC_LALT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(LALT(KC_RIGHT))); - tap_code16(LGUI(KC_C)); - tap_code(KC_LEFT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case LGUI(KC_LEFT): - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - tap_code16(LGUI(KC_LEFT)); - else if (layer_control_data.operator== KC_BSPC) { - tap_code16(LSFT(LGUI(KC_LEFT))); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - tap_code16(LSFT(LGUI(KC_LEFT))); - tap_code16(LGUI(KC_C)); - tap_code(KC_RIGHT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case LCTL(KC_E): - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - tap_code16(LCTL(KC_E)); - else if (layer_control_data.operator== KC_BSPC) { - tap_code16(LSFT(LCTL(KC_E))); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - tap_code16(LSFT(LCTL(KC_E))); - tap_code16(LGUI(KC_C)); - tap_code(KC_LEFT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case KC_BSPC: - if (record->event.pressed) { - if (get_mods() & MOD_MASK_SHIFT) { - unregister_code(KC_LSFT); - tap_code16(LGUI(KC_X)); - register_code(KC_LSFT); - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } else if (layer_control_data.operator== - 1) - layer_control_data.operator= KC_BSPC; - else { - if (layer_control_data.operator== KC_BSPC) { - tap_code16(LCTL(KC_A)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_DOWN)); - tap_code16(LGUI(KC_X)); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - } - return false; - case KC_LEFT: - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code(KC_LEFT); - else if (layer_control_data.operator== KC_BSPC) { - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_LEFT)); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_LEFT)); - tap_code16(LGUI(KC_C)); - tap_code(KC_RIGHT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case KC_DOWN: - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code(KC_DOWN); - else if (layer_control_data.operator== KC_BSPC) { - tap_code16(LCTL(KC_A)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_DOWN)); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - tap_code16(LCTL(KC_A)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_DOWN)); - tap_code16(LGUI(KC_C)); - tap_code(KC_LEFT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case KC_UP: - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code(KC_UP); - else if (layer_control_data.operator== KC_BSPC) { - tap_code16(LCTL(KC_E)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_UP)); - tap_code16(LSFT(LCTL(KC_E))); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - tap_code16(LCTL(KC_E)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_UP)); - tap_code16(LSFT(LCTL(KC_E))); - tap_code16(LGUI(KC_C)); - tap_code(KC_RIGHT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case KC_RIGHT: - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code(KC_RIGHT); - else if (layer_control_data.operator== KC_BSPC) { - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_RIGHT)); - tap_code16(LGUI(KC_X)); - } else if (layer_control_data.operator== LGUI(KC_C)) { - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_RIGHT)); - tap_code16(LGUI(KC_C)); - tap_code(KC_LEFT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case KEY_CREATE_NEXT_LINE: - if (record->event.pressed) common_layer_data.back = true; - return true; - case LGUI(KC_Z): - if (layer_control_data.operator== - 1 && layer_control_data.multiplier == 0) return true; - if (record->event.pressed) { - if (layer_control_data.operator== - 1) - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LGUI(KC_Z)); - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - return false; - case LGUI(KC_C): - if (record->event.pressed) { - if (get_mods() & MOD_MASK_SHIFT) { - unregister_code(KC_LSFT); - tap_code16(LGUI(KC_C)); - register_code(KC_LSFT); - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } else if (layer_control_data.operator== - 1) - layer_control_data.operator= LGUI(KC_C); - else { - if (layer_control_data.operator== LGUI(KC_C)) { - tap_code16(LCTL(KC_A)); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LSFT(KC_DOWN)); - tap_code16(LGUI(KC_C)); - tap_code(KC_LEFT); - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - } - return false; - case LGUI(KC_V): - if (record->event.pressed) { - if (get_mods() & MOD_MASK_SHIFT) { - unregister_code(KC_LSFT); - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LGUI(KC_V)); - register_code(KC_LSFT); - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } else { - for (int i = 0; i < (layer_control_data.multiplier ? layer_control_data.multiplier : 1); ++i) tap_code16(LGUI(KC_V)); - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - } - } - return false; - } - layer_control_data.multiplier = 0; - layer_control_data.operator = - 1; - return true; - case LAYER_WINDOW: - switch (key) { - case SAFE_RANGE + LAYER_WINDOW: - if (!record->event.pressed) { - if (timer_elapsed(layer_window_data.start_time) < 200) - temporary[LAYER_WINDOW] = true; - else - temporary[LAYER_WINDOW] = false; - } - return true; - case KEY_BACK_LAYER: - if (record->event.pressed) tap_code(KC_ENTER); - return true; - } - return true; - case LAYER_DESKTOP: - switch (key) { - case KEY_BACK_LAYER: - if (record->event.pressed) tap_code16(LCTL(KC_UP)); - return true; - } - return true; - } - return true; -} - -void handle_layer_start(void) { - rgblight_disable_noeeprom(); - switch (layers[layers[0] + 1]) { - case LAYER_RACE_BASE: - case LAYER_RACE_EXTENSION: - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_GREEN); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - case LAYER_LEGACY_BASE: - case LAYER_LEGACY_EXTENSION: - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_RED); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - case LAYER_CONTROL: - layer_control_data.operator = - 1; - layer_control_data.multiplier = 0; - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_BLUE); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - case LAYER_WINDOW: - register_code(KC_LGUI); - tap_code(KC_TAB); - layer_window_data.start_time = timer_read(); - return; - case LAYER_DESKTOP: - tap_code16(LCTL(KC_UP)); - return; - } -} - -void handle_layer_return(void) { - rgblight_disable_noeeprom(); - switch (layers[layers[0] + 1]) { - case LAYER_RACE_BASE: - case LAYER_RACE_EXTENSION: - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_GREEN); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - case LAYER_LEGACY_BASE: - case LAYER_LEGACY_EXTENSION: - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_RED); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - case LAYER_CONTROL: - layer_control_data.operator = - 1; - layer_control_data.multiplier = 0; - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_BLUE); - rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - return; - } -} - -void handle_layer_end(void) { - switch (layers[layers[0] + 1]) { - case LAYER_WINDOW: - unregister_code(KC_LGUI); - return; - } -} - -void update_layer(void) { - layer_clear(); - common_layer_data.back = false; - layer_on(layers[layers[0] + 1]); -} - -bool handle_call_key(uint16_t key, keyrecord_t* record) { - switch (key) { - case KEY_BACK_LAYER: - if (record->event.pressed) { - if (layers[0]) { - handle_layer_end(); - --layers[0]; - update_layer(); - handle_layer_return(); - } - } - return false; - } - if (key >= SAFE_RANGE && key < SAFE_RANGE + NUMBER_OF_LAYERS) { - int new_layer = key - SAFE_RANGE; - if (record->event.pressed) { - if (layers[layers[0] + 1] != new_layer) { - if (temporary[layers[layers[0] + 1]]) { - handle_layer_end(); - layers[layers[0] + 1] = new_layer; - } else - layers[++layers[0] + 1] = new_layer; - update_layer(); - handle_layer_start(); - } - } else { - if (layers[layers[0] + 1] == new_layer && temporary[layers[layers[0] + 1]]) { - handle_layer_end(); - --layers[0]; - update_layer(); - handle_layer_return(); - } - } - return false; - } - if (common_layer_data.back) { - if (layers[0]) { - handle_layer_end(); - --layers[0]; - update_layer(); - handle_layer_return(); - } - } - return true; -} - -bool handle_common_key(uint16_t key, keyrecord_t* record) { - switch (key) { - case KEY_INSERT_LINE_START: - if (record->event.pressed) tap_code16(LGUI(KC_LEFT)); - return false; - case KEY_INSERT_HERE: - return false; - case KEY_INSERT_LINE_END: - if (record->event.pressed) tap_code16(LGUI(KC_RIGHT)); - return false; - case KEY_CREATE_PREVIOUS_LINE: - if (record->event.pressed) { - tap_code16(LGUI(KC_LEFT)); - tap_code(KC_ENTER); - tap_code(KC_UP); - } - return false; - case KEY_CREATE_NEXT_LINE: - if (record->event.pressed) { - tap_code16(LGUI(KC_RIGHT)); - tap_code(KC_ENTER); - } - return false; - case KEY_CUT_WORD: - if (record->event.pressed) { - register_code(KC_LALT); - tap_code(KC_LEFT); - tap_code(KC_RIGHT); - unregister_code(KC_LALT); - tap_code16(LSFT(LALT(KC_LEFT))); - tap_code16(LGUI(KC_X)); - } - return false; - case KEY_CUT_LINE: - if (record->event.pressed) { - tap_code16(LGUI(KC_RIGHT)); - tap_code16(LSFT(LGUI(KC_LEFT))); - tap_code16(LGUI(KC_X)); - } - return false; - case KEY_CUT_SELECTION: - if (record->event.pressed) { - if (get_mods() & MOD_MASK_SHIFT) { - unregister_code(KC_LSFT); - tap_code16(LGUI(KC_X)); - register_code(KC_LSFT); - } else - tap_code16(LGUI(KC_X)); - } - return false; - } - return true; -} - -bool process_record_user(uint16_t key, keyrecord_t* record) { - if (!handle_layer_key(key, record)) return false; - if (!handle_call_key(key, record)) return false; - return handle_common_key(key, record); -} - -void keyboard_post_init_user(void) { - rgblight_disable_noeeprom(); - rgb_matrix_disable(); - common_layer_data.back = false; -} diff --git a/keyboards/matrix/noah/keymaps/blockader/rules.mk b/keyboards/matrix/noah/keymaps/blockader/rules.mk deleted file mode 100644 index 610cc234237..00000000000 --- a/keyboards/matrix/noah/keymaps/blockader/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -TAP_DANCE_ENABLE = yes -DYNAMIC_MACRO_ENABLE = yes From 1f96f890fa7e605f3e806c39ff5723dc122c737f Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Mon, 16 Mar 2026 11:31:16 +0100 Subject: [PATCH 12/48] Always generate .map files. (#25961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Always generate .map files. Useful when NOT compiling with debugging C/CXX/AS flags too! e.g. to find which source file was used to compile-in a weak reference. * Shorten comment phrase --------- Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com> --- builddefs/common_rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk index d6f91b10e4f..6ba42f3b5bc 100644 --- a/builddefs/common_rules.mk +++ b/builddefs/common_rules.mk @@ -50,10 +50,10 @@ ifeq ($(strip $(DEBUG_ENABLE)),yes) CFLAGS += -ggdb3 CXXFLAGS += -ggdb3 ASFLAGS += -ggdb3 -# Create a map file when debugging - LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref endif +# Always create a map file to see what was compiled and where. +LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #---------------- C Compiler Options ---------------- From 3d0ccbb1d54bac89c5739b609e76530abbc68f39 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Sat, 28 Mar 2026 03:31:07 +0100 Subject: [PATCH 13/48] Add an `mcu_reset` impl for the kiibohd bootloader. (#25963) * Fixes resetting and split watchdog on the Ergodox Infinity. --- platforms/chibios/bootloaders/kiibohd.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/platforms/chibios/bootloaders/kiibohd.c b/platforms/chibios/bootloaders/kiibohd.c index 09a4d49b787..eb61cd2d0a2 100644 --- a/platforms/chibios/bootloaders/kiibohd.c +++ b/platforms/chibios/bootloaders/kiibohd.c @@ -30,4 +30,21 @@ __attribute__((weak)) void bootloader_jump(void) { // request reset SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk; } -__attribute__((weak)) void mcu_reset(void) {} + +__attribute__((weak)) void mcu_reset(void) { + /* Ensure all outstanding memory operations complete */ + __DSB(); + __ISB(); + + /* Request system reset (preserve PRIGROUP) */ + uint32_t aircr = SCB->AIRCR; + aircr &= ~SCB_AIRCR_VECTKEY_Msk; + aircr |= SCB_AIRCR_VECTKEY_WRITEMAGIC; + aircr |= SCB_AIRCR_SYSRESETREQ_Msk; + SCB->AIRCR = aircr; + + /* Wait for reset to occur */ + while (true) { + __NOP(); + } +} From 43a27da29619d5ab2f11feed6b10da698c1463d9 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 28 Mar 2026 02:41:17 +0000 Subject: [PATCH 14/48] Remove override of QK_{LED,RGB}_MATRIX_TOGGLE keycode (#25672) --- keyboards/akko/5087/5087.c | 27 ------- keyboards/chosfox/cf81/cf81.c | 29 ------- keyboards/doio/kb03/kb03.c | 26 ------- keyboards/drop/alt/v2/config.h | 1 - keyboards/drop/ctrl/v2/config.h | 1 - keyboards/drop/lib/common.c | 31 -------- keyboards/drop/sense75/config.h | 1 - keyboards/drop/shift/v2/config.h | 2 - keyboards/feker/ik75/keymaps/default/keymap.c | 33 -------- keyboards/gopolar/gg86/gg86.c | 32 -------- .../devil68_pro/keymaps/default/keymap.c | 34 -------- .../keymaps/default/keymap_stuff.h | 47 ----------- keyboards/horrortroll/nyx/rev1/rev1.c | 56 ------------- keyboards/inland/kb83/kb83.c | 28 ------- .../keybee/keybee65/keymaps/default/keymap.c | 38 --------- keyboards/keychron/c1_pro/ansi/rgb/rgb.c | 26 ------- keyboards/keychron/c1_pro/ansi/white/white.c | 26 ------- keyboards/keychron/c1_pro_v2/c1_pro_v2.c | 48 ------------ keyboards/keychron/c2_pro/c2_pro.c | 44 ----------- keyboards/keychron/c2_pro_v2/c2_pro_v2.c | 48 ------------ keyboards/keychron/c3_pro/c3_pro.c | 38 --------- keyboards/keychron/q0/q0.c | 24 ------ keyboards/keychron/q10/q10.c | 28 ------- keyboards/keychron/q11/q11.c | 25 ------ keyboards/keychron/q12/q12.c | 25 ------ keyboards/keychron/q1v1/q1v1.c | 26 ------- keyboards/keychron/q1v2/q1v2.c | 28 ------- keyboards/keychron/q2/q2.c | 24 ------ keyboards/keychron/q3/q3.c | 26 ------- keyboards/keychron/q4/q4.c | 25 ------ keyboards/keychron/q5/q5.c | 28 ------- keyboards/keychron/q6/q6.c | 26 ------- keyboards/keychron/q65/q65.c | 26 ------- keyboards/keychron/q7/q7.c | 26 ------- keyboards/keychron/q8/q8.c | 26 ------- keyboards/keychron/q9/q9.c | 26 ------- keyboards/keychron/q9_plus/q9_plus.c | 26 ------- keyboards/keychron/s1/s1.c | 52 ------------- keyboards/keychron/v1/v1.c | 26 ------- keyboards/keychron/v10/v10.c | 26 ------- keyboards/keychron/v2/v2.c | 25 ------ keyboards/keychron/v3/v3.c | 26 ------- keyboards/keychron/v4/v4.c | 26 ------- keyboards/keychron/v5/v5.c | 26 ------- keyboards/keychron/v6/v6.c | 26 ------- keyboards/keychron/v7/v7.c | 26 ------- keyboards/keychron/v8/v8.c | 26 ------- keyboards/ml/gas75/keymaps/default/keymap.c | 55 ------------- keyboards/monsgeek/m1/m1.c | 29 ------- keyboards/monsgeek/m3/m3.c | 27 ------- keyboards/monsgeek/m6/m6.c | 36 --------- .../m63_rgb/keymaps/default/keymap.c | 78 ------------------- .../m64_rgb/keymaps/default/keymap.c | 78 ------------------- .../nk_classic_tkl/keymaps/default/keymap.c | 27 +------ .../keymaps/default/keymap.c | 27 +------ keyboards/pangorin/tan67/tan67.c | 52 ------------- keyboards/phage_studio/pila87/pila87.c | 22 ------ keyboards/rgbkb/sol/keymaps/default/keymap.c | 64 +-------------- keyboards/rgbkb/sol3/rev1/rev1.c | 45 ----------- keyboards/rgbkb/sol3/rev1/rev1.h | 5 -- keyboards/skyloong/gk61/pro/pro.c | 25 ------ keyboards/skyloong/gk61/pro_48/pro_48.c | 25 ------ keyboards/skyloong/qk21/v1/v1.c | 24 ------ 63 files changed, 3 insertions(+), 1932 deletions(-) delete mode 100644 keyboards/pangorin/tan67/tan67.c diff --git a/keyboards/akko/5087/5087.c b/keyboards/akko/5087/5087.c index 0b26ef90a65..892e6d2b1d3 100644 --- a/keyboards/akko/5087/5087.c +++ b/keyboards/akko/5087/5087.c @@ -140,30 +140,3 @@ void housekeeping_task_kb(void){ gpio_write_pin(LED_MAC_OS_PIN, (get_highest_layer(default_layer_state) == 3)); gpio_write_pin(LED_WIN_LOCK_PIN, keymap_config.no_gui); } - -bool process_record_kb(uint16_t keycode, keyrecord_t* record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - default: - return true; - } -} diff --git a/keyboards/chosfox/cf81/cf81.c b/keyboards/chosfox/cf81/cf81.c index 12b4ab6110f..4cf006e3a85 100644 --- a/keyboards/chosfox/cf81/cf81.c +++ b/keyboards/chosfox/cf81/cf81.c @@ -157,32 +157,3 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { } #endif - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - default: - return true; - } -} diff --git a/keyboards/doio/kb03/kb03.c b/keyboards/doio/kb03/kb03.c index 9368bc5d41c..0d34c370df6 100644 --- a/keyboards/doio/kb03/kb03.c +++ b/keyboards/doio/kb03/kb03.c @@ -6,32 +6,6 @@ #ifdef RGB_MATRIX_ENABLE -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case RM_TOGG: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/drop/alt/v2/config.h b/keyboards/drop/alt/v2/config.h index 2dfae36a49d..4499054785a 100644 --- a/keyboards/drop/alt/v2/config.h +++ b/keyboards/drop/alt/v2/config.h @@ -18,5 +18,4 @@ #define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_VCC_VCC #define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_26K7_HZ -#define RGB_MATRIX_CYCLE_ZONES_ENABLE #define RGB_MATRIX_CAPS_LOCK_INDEX 30 diff --git a/keyboards/drop/ctrl/v2/config.h b/keyboards/drop/ctrl/v2/config.h index c0a259492ba..297e297abe1 100644 --- a/keyboards/drop/ctrl/v2/config.h +++ b/keyboards/drop/ctrl/v2/config.h @@ -18,5 +18,4 @@ #define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_VCC_VCC #define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_26K7_HZ -#define RGB_MATRIX_CYCLE_ZONES_ENABLE #define RGB_MATRIX_CAPS_LOCK_INDEX 50 diff --git a/keyboards/drop/lib/common.c b/keyboards/drop/lib/common.c index 53fa70882e9..a4300b4e8e6 100644 --- a/keyboards/drop/lib/common.c +++ b/keyboards/drop/lib/common.c @@ -19,35 +19,4 @@ bool rgb_matrix_indicators_kb(void) { return true; } # endif - -# ifdef RGB_MATRIX_CYCLE_ZONES_ENABLE -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - - if (!record->event.pressed) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - break; - case LED_FLAG_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_NONE); - break; - default: - rgb_matrix_set_flags(LED_FLAG_ALL); - break; - } - return false; - } - } - return true; -}; -# endif - #endif diff --git a/keyboards/drop/sense75/config.h b/keyboards/drop/sense75/config.h index 448d223d489..539f3d5714e 100644 --- a/keyboards/drop/sense75/config.h +++ b/keyboards/drop/sense75/config.h @@ -13,5 +13,4 @@ #define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_VCC_VCC #define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_26K7_HZ -#define RGB_MATRIX_CYCLE_ZONES_ENABLE #define RGB_MATRIX_CAPS_LOCK_INDEX 62 diff --git a/keyboards/drop/shift/v2/config.h b/keyboards/drop/shift/v2/config.h index e912e3805f8..dc3b1718685 100644 --- a/keyboards/drop/shift/v2/config.h +++ b/keyboards/drop/shift/v2/config.h @@ -18,5 +18,3 @@ #define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_VCC_VCC #define IS31FL3733_I2C_ADDRESS_3 IS31FL3733_I2C_ADDRESS_GND_GND #define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_26K7_HZ - -#define RGB_MATRIX_CYCLE_ZONES_ENABLE diff --git a/keyboards/feker/ik75/keymaps/default/keymap.c b/keyboards/feker/ik75/keymaps/default/keymap.c index 7dd762a6ec3..836beb7e0e8 100644 --- a/keyboards/feker/ik75/keymaps/default/keymap.c +++ b/keyboards/feker/ik75/keymaps/default/keymap.c @@ -101,39 +101,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - - return true; -} - bool rgb_matrix_indicators_user(void) { rgb_matrix_set_color(46, 0, 0, 0); rgb_matrix_set_color(104, 0, 0, 0); diff --git a/keyboards/gopolar/gg86/gg86.c b/keyboards/gopolar/gg86/gg86.c index 3aa1d608a87..40fb06c8a65 100644 --- a/keyboards/gopolar/gg86/gg86.c +++ b/keyboards/gopolar/gg86/gg86.c @@ -25,38 +25,6 @@ #include #include -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return process_record_user(keycode, record); -} - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c b/keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c index 4ad4bcd5ccb..bf7dce5949b 100644 --- a/keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c +++ b/keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c @@ -31,8 +31,6 @@ enum layer_names { _FN, }; -// enum layer_keycodes { }; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -91,38 +89,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return true; -} - bool rgb_matrix_indicators_user(void) { hsv_t hsv = rgb_matrix_config.hsv; uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); diff --git a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h index b68f9fa6342..a9f64ff8d29 100644 --- a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h +++ b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h @@ -44,20 +44,6 @@ typedef struct { bool reflected; } CUSTOM_PRESETS; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - enum layer_keycodes { //Custom Gradient control keycode G1_HUI = SAFE_RANGE, //Custom gradient color 1 hue increase @@ -80,20 +66,6 @@ enum layer_keycodes { RGB_C_E, //Cycle user effect }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { process_record_user_oled(keycode, record); @@ -229,25 +201,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } return false; - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; } return true; } diff --git a/keyboards/horrortroll/nyx/rev1/rev1.c b/keyboards/horrortroll/nyx/rev1/rev1.c index 48cbeb66804..d927f53f015 100644 --- a/keyboards/horrortroll/nyx/rev1/rev1.c +++ b/keyboards/horrortroll/nyx/rev1/rev1.c @@ -17,52 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - case QK_RGB_MATRIX_MODE_NEXT: - if (record->event.pressed) { - switch (rgb_matrix_get_mode()) { - case RGB_MATRIX_SOLID_MULTISPLASH: - rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); - return false; - default: - rgb_matrix_step(); - return false; - } - } - return false; - case QK_RGB_MATRIX_MODE_PREVIOUS: - if (record->event.pressed) { - switch (rgb_matrix_get_mode()) { - case RGB_MATRIX_SOLID_COLOR: - rgb_matrix_mode(RGB_MATRIX_SOLID_MULTISPLASH); - return false; - default: - rgb_matrix_step_reverse(); - return false; - } - } - return false; - } - - return process_record_user(keycode, record); -} bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { @@ -76,14 +30,4 @@ bool rgb_matrix_indicators_kb(void) { } return true; } - -void keyboard_post_init_kb(void) { - if (!(rgb_matrix_get_flags() & LED_FLAG_ALL)) { - rgb_matrix_set_color_all(0, 0, 0); - } else { - rgb_matrix_mode_noeeprom(RGB_MATRIX_CUSTOM_STARTUP_SWIRL_ANIM); - } - - keyboard_post_init_user(); -} #endif diff --git a/keyboards/inland/kb83/kb83.c b/keyboards/inland/kb83/kb83.c index 431406d0089..9cc1b78129c 100644 --- a/keyboards/inland/kb83/kb83.c +++ b/keyboards/inland/kb83/kb83.c @@ -164,31 +164,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) { } return true; } - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - - default: - return true; - } -} diff --git a/keyboards/keybee/keybee65/keymaps/default/keymap.c b/keyboards/keybee/keybee65/keymaps/default/keymap.c index 4662a9bd45b..fb5442251b0 100644 --- a/keyboards/keybee/keybee65/keymaps/default/keymap.c +++ b/keyboards/keybee/keybee65/keymaps/default/keymap.c @@ -38,44 +38,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_UNDERGLOW: { - rgb_matrix_set_flags(LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_INDICATOR: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_disable_noeeprom(); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - default: - return true; //Process all other keycodes normally - } -} - bool rgb_matrix_indicators_user(void) { led_t host_leds = host_keyboard_led_state(); if (host_leds.caps_lock) { diff --git a/keyboards/keychron/c1_pro/ansi/rgb/rgb.c b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c index f4f0c0af475..1777fe4cf3f 100644 --- a/keyboards/keychron/c1_pro/ansi/rgb/rgb.c +++ b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c @@ -123,32 +123,6 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { // clang-format on -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/c1_pro/ansi/white/white.c b/keyboards/keychron/c1_pro/ansi/white/white.c index 9009225b3b2..96beb1e8d50 100644 --- a/keyboards/keychron/c1_pro/ansi/white/white.c +++ b/keyboards/keychron/c1_pro/ansi/white/white.c @@ -123,32 +123,6 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { // clang-format on -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case LM_TOGG: - if (record->event.pressed) { - switch (led_matrix_get_flags()) { - case LED_FLAG_ALL: { - led_matrix_set_flags(LED_FLAG_NONE); - led_matrix_set_value_all(0); - } break; - default: { - led_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!led_matrix_is_enabled()) { - led_matrix_set_flags(LED_FLAG_ALL); - led_matrix_enable(); - } - return false; - } - return true; -} - bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!led_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/c1_pro_v2/c1_pro_v2.c b/keyboards/keychron/c1_pro_v2/c1_pro_v2.c index d4ff5eb9dc8..ef93847d87e 100644 --- a/keyboards/keychron/c1_pro_v2/c1_pro_v2.c +++ b/keyboards/keychron/c1_pro_v2/c1_pro_v2.c @@ -28,54 +28,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { } #endif -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif -#ifdef LED_MATRIX_ENABLE - case QK_LED_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (led_matrix_get_flags()) { - case LED_FLAG_ALL: { - led_matrix_set_flags(LED_FLAG_NONE); - led_matrix_set_value_all(0); - } break; - default: { - led_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!led_matrix_is_enabled()) { - led_matrix_set_flags(LED_FLAG_ALL); - led_matrix_enable(); - } - return false; -#endif - default: - return true; - } -} - void keyboard_post_init_kb(void) { gpio_set_pin_output_push_pull(LED_MAC_OS_PIN); gpio_set_pin_output_push_pull(LED_WIN_OS_PIN); diff --git a/keyboards/keychron/c2_pro/c2_pro.c b/keyboards/keychron/c2_pro/c2_pro.c index bb7aba4f816..6c8105e191d 100644 --- a/keyboards/keychron/c2_pro/c2_pro.c +++ b/keyboards/keychron/c2_pro/c2_pro.c @@ -31,64 +31,20 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #endif // DIP_SWITCH_ENABLE # ifdef RGB_MATRIX_ENABLE -# define LED_TOGGLE_KEYCODE QK_RGB_MATRIX_TOGGLE -# define LED_SET_FLAGS rgb_matrix_set_flags -# define LED_GET_FLAGS rgb_matrix_get_flags -# define LED_SET_ALL_OFF rgb_matrix_set_color_all(COLOR_BLACK) -# define LED_IS_ENABLED rgb_matrix_is_enabled -# define LED_ENABLE rgb_matrix_enable # define LED_MATRIX_INDICATORS_KB rgb_matrix_indicators_kb # define LED_MATRIX_INDICATORS_USER rgb_matrix_indicators_user # define LED_MATRIX_SET_COLOR rgb_matrix_set_color -# define LED_MATRIX_UPDATE_PWN_BUFFERS rgb_matrix_update_pwm_buffers -# define LED_MATRIX_INDICATORS_NONE_KB rgb_matrix_indicators_none_kb -# define LED_MATRIX_IS_ENABLED rgb_matrix_is_enabled # define COLOR_WHITE 255, 255, 255 # define COLOR_BLACK 0, 0, 0 # endif # ifdef LED_MATRIX_ENABLE -# define LED_TOGGLE_KEYCODE QK_LED_MATRIX_TOGGLE -# define LED_SET_FLAGS led_matrix_set_flags -# define LED_GET_FLAGS led_matrix_get_flags -# define LED_SET_ALL_OFF led_matrix_set_value_all(COLOR_BLACK) -# define LED_IS_ENABLED led_matrix_is_enabled -# define LED_ENABLE led_matrix_enable # define LED_MATRIX_INDICATORS_KB led_matrix_indicators_kb # define LED_MATRIX_INDICATORS_USER led_matrix_indicators_user # define LED_MATRIX_SET_COLOR led_matrix_set_value -# define LED_MATRIX_UPDATE_PWN_BUFFERS led_matrix_update_pwm_buffers -# define LED_MATRIX_INDICATORS_NONE_KB led_matrix_indicators_none_kb -# define LED_MATRIX_IS_ENABLED led_matrix_is_enabled # define COLOR_WHITE 255 # define COLOR_BLACK 0 -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case LED_TOGGLE_KEYCODE: - if (record->event.pressed) { - switch (LED_GET_FLAGS()) { - case LED_FLAG_ALL: { - LED_SET_FLAGS(LED_FLAG_NONE); - LED_SET_ALL_OFF; - } break; - default: { - LED_SET_FLAGS(LED_FLAG_ALL); - } break; - } - } - if (!LED_IS_ENABLED()) { - LED_SET_FLAGS(LED_FLAG_ALL); - LED_ENABLE(); - } - return false; - } - return true; -} - bool LED_MATRIX_INDICATORS_KB(void) { if (!LED_MATRIX_INDICATORS_USER()) { return false; diff --git a/keyboards/keychron/c2_pro_v2/c2_pro_v2.c b/keyboards/keychron/c2_pro_v2/c2_pro_v2.c index d4ff5eb9dc8..ef93847d87e 100644 --- a/keyboards/keychron/c2_pro_v2/c2_pro_v2.c +++ b/keyboards/keychron/c2_pro_v2/c2_pro_v2.c @@ -28,54 +28,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { } #endif -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif -#ifdef LED_MATRIX_ENABLE - case QK_LED_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (led_matrix_get_flags()) { - case LED_FLAG_ALL: { - led_matrix_set_flags(LED_FLAG_NONE); - led_matrix_set_value_all(0); - } break; - default: { - led_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!led_matrix_is_enabled()) { - led_matrix_set_flags(LED_FLAG_ALL); - led_matrix_enable(); - } - return false; -#endif - default: - return true; - } -} - void keyboard_post_init_kb(void) { gpio_set_pin_output_push_pull(LED_MAC_OS_PIN); gpio_set_pin_output_push_pull(LED_WIN_OS_PIN); diff --git a/keyboards/keychron/c3_pro/c3_pro.c b/keyboards/keychron/c3_pro/c3_pro.c index 0c584b0938c..810a291dcc0 100644 --- a/keyboards/keychron/c3_pro/c3_pro.c +++ b/keyboards/keychron/c3_pro/c3_pro.c @@ -41,44 +41,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) { return false; } switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif -#ifdef LED_MATRIX_ENABLE - case QK_LED_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (led_matrix_get_flags()) { - case LED_FLAG_ALL: { - led_matrix_set_flags(LED_FLAG_NONE); - led_matrix_set_value_all(0); - } break; - default: { - led_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!led_matrix_is_enabled()) { - led_matrix_set_flags(LED_FLAG_ALL); - led_matrix_enable(); - } - return false; -#endif case KC_OSSW: if (record->event.pressed) { // Switches default layer between `MAC_BASE` and `WIN_BASE` (0 and 2) diff --git a/keyboards/keychron/q0/q0.c b/keyboards/keychron/q0/q0.c index 7b5f7a59076..3c6677a93c7 100644 --- a/keyboards/keychron/q0/q0.c +++ b/keyboards/keychron/q0/q0.c @@ -18,30 +18,6 @@ #if defined(RGB_MATRIX_ENABLE) && defined(NUM_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - return false; -# endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/q10/q10.c b/keyboards/keychron/q10/q10.c index 79abdacd4fa..3f22dc864a9 100644 --- a/keyboards/keychron/q10/q10.c +++ b/keyboards/keychron/q10/q10.c @@ -32,34 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -# endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/q11/q11.c b/keyboards/keychron/q11/q11.c index 8dd9120ca1e..efc3ef9d017 100755 --- a/keyboards/keychron/q11/q11.c +++ b/keyboards/keychron/q11/q11.c @@ -29,31 +29,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #endif #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { diff --git a/keyboards/keychron/q12/q12.c b/keyboards/keychron/q12/q12.c index bc0645ab474..25a08ae549b 100644 --- a/keyboards/keychron/q12/q12.c +++ b/keyboards/keychron/q12/q12.c @@ -29,31 +29,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #endif #if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { diff --git a/keyboards/keychron/q1v1/q1v1.c b/keyboards/keychron/q1v1/q1v1.c index 5ed4618d396..2fe5b970d8b 100644 --- a/keyboards/keychron/q1v1/q1v1.c +++ b/keyboards/keychron/q1v1/q1v1.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q1v2/q1v2.c b/keyboards/keychron/q1v2/q1v2.c index 82118838697..a8217997f75 100644 --- a/keyboards/keychron/q1v2/q1v2.c +++ b/keyboards/keychron/q1v2/q1v2.c @@ -30,34 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -# endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/q2/q2.c b/keyboards/keychron/q2/q2.c index 01a23b8f3eb..f71a602e3fc 100644 --- a/keyboards/keychron/q2/q2.c +++ b/keyboards/keychron/q2/q2.c @@ -30,30 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q3/q3.c b/keyboards/keychron/q3/q3.c index 0cd0509df58..59ab0a5abb1 100644 --- a/keyboards/keychron/q3/q3.c +++ b/keyboards/keychron/q3/q3.c @@ -33,32 +33,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q4/q4.c b/keyboards/keychron/q4/q4.c index 44c139f71c7..0ba22f8f652 100644 --- a/keyboards/keychron/q4/q4.c +++ b/keyboards/keychron/q4/q4.c @@ -29,31 +29,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #endif // DIP_SWITCH_ENABLE #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { diff --git a/keyboards/keychron/q5/q5.c b/keyboards/keychron/q5/q5.c index c45eaa3cb26..8dd0a797728 100644 --- a/keyboards/keychron/q5/q5.c +++ b/keyboards/keychron/q5/q5.c @@ -32,34 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -# endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q6/q6.c b/keyboards/keychron/q6/q6.c index d5cdd37c51b..70cc05c584b 100644 --- a/keyboards/keychron/q6/q6.c +++ b/keyboards/keychron/q6/q6.c @@ -32,32 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/q65/q65.c b/keyboards/keychron/q65/q65.c index e02e53e8289..2dda7f2b2fb 100644 --- a/keyboards/keychron/q65/q65.c +++ b/keyboards/keychron/q65/q65.c @@ -31,32 +31,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { // clang-format on #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q7/q7.c b/keyboards/keychron/q7/q7.c index a9ccdb81bae..2427d580a8c 100644 --- a/keyboards/keychron/q7/q7.c +++ b/keyboards/keychron/q7/q7.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q8/q8.c b/keyboards/keychron/q8/q8.c index b16f89115d3..4bd83a9bf31 100644 --- a/keyboards/keychron/q8/q8.c +++ b/keyboards/keychron/q8/q8.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/q9/q9.c b/keyboards/keychron/q9/q9.c index a9ccdb81bae..2427d580a8c 100644 --- a/keyboards/keychron/q9/q9.c +++ b/keyboards/keychron/q9/q9.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/q9_plus/q9_plus.c b/keyboards/keychron/q9_plus/q9_plus.c index d155936f98f..4624630a467 100755 --- a/keyboards/keychron/q9_plus/q9_plus.c +++ b/keyboards/keychron/q9_plus/q9_plus.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/s1/s1.c b/keyboards/keychron/s1/s1.c index 4179cb4a6fe..9f02892b766 100644 --- a/keyboards/keychron/s1/s1.c +++ b/keyboards/keychron/s1/s1.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); @@ -74,32 +48,6 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { #if defined(LED_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef LED_MATRIX_ENABLE - case LM_TOGG: - if (record->event.pressed) { - switch (led_matrix_get_flags()) { - case LED_FLAG_ALL: { - led_matrix_set_flags(LED_FLAG_NONE); - led_matrix_set_value_all(0); - } break; - default: { - led_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!led_matrix_is_enabled()) { - led_matrix_set_flags(LED_FLAG_ALL); - led_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!led_matrix_indicators_advanced_user(led_min, led_max)) { return false; } diff --git a/keyboards/keychron/v1/v1.c b/keyboards/keychron/v1/v1.c index 4d5381105a3..f00309f3e4e 100644 --- a/keyboards/keychron/v1/v1.c +++ b/keyboards/keychron/v1/v1.c @@ -32,32 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/v10/v10.c b/keyboards/keychron/v10/v10.c index f81b78284b8..c5160d7838c 100644 --- a/keyboards/keychron/v10/v10.c +++ b/keyboards/keychron/v10/v10.c @@ -32,32 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/v2/v2.c b/keyboards/keychron/v2/v2.c index 127af0ed6d9..2427d580a8c 100644 --- a/keyboards/keychron/v2/v2.c +++ b/keyboards/keychron/v2/v2.c @@ -29,31 +29,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #endif // DIP_SWITCH_ENABLE #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } diff --git a/keyboards/keychron/v3/v3.c b/keyboards/keychron/v3/v3.c index f844ffe9d99..e7562d4bff2 100644 --- a/keyboards/keychron/v3/v3.c +++ b/keyboards/keychron/v3/v3.c @@ -32,32 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/v4/v4.c b/keyboards/keychron/v4/v4.c index a9ccdb81bae..2427d580a8c 100644 --- a/keyboards/keychron/v4/v4.c +++ b/keyboards/keychron/v4/v4.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/v5/v5.c b/keyboards/keychron/v5/v5.c index 03d1f9a743b..39004322bc2 100644 --- a/keyboards/keychron/v5/v5.c +++ b/keyboards/keychron/v5/v5.c @@ -32,32 +32,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/v6/v6.c b/keyboards/keychron/v6/v6.c index 2fedd20d5ba..9c74c5ec08b 100644 --- a/keyboards/keychron/v6/v6.c +++ b/keyboards/keychron/v6/v6.c @@ -36,32 +36,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX)) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/keychron/v7/v7.c b/keyboards/keychron/v7/v7.c index 02f4ec15008..12a9078a369 100644 --- a/keyboards/keychron/v7/v7.c +++ b/keyboards/keychron/v7/v7.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/keychron/v8/v8.c b/keyboards/keychron/v8/v8.c index 0e03ba34ec6..c36a0e9d50b 100644 --- a/keyboards/keychron/v8/v8.c +++ b/keyboards/keychron/v8/v8.c @@ -30,32 +30,6 @@ bool dip_switch_update_kb(uint8_t index, bool active) { #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { return false; } - switch (keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; -#endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); diff --git a/keyboards/ml/gas75/keymaps/default/keymap.c b/keyboards/ml/gas75/keymaps/default/keymap.c index 8e61e104ed4..542e7732bb5 100644 --- a/keyboards/ml/gas75/keymaps/default/keymap.c +++ b/keyboards/ml/gas75/keymaps/default/keymap.c @@ -31,22 +31,6 @@ enum layer_names { _FN, }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - -// enum layer_keycodes { }; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -119,45 +103,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - return true; -} - #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, diff --git a/keyboards/monsgeek/m1/m1.c b/keyboards/monsgeek/m1/m1.c index 6466b554124..4a7afe55626 100644 --- a/keyboards/monsgeek/m1/m1.c +++ b/keyboards/monsgeek/m1/m1.c @@ -164,32 +164,3 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { return true; } #endif - -// clang-format on - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - default: - return true; - } -} diff --git a/keyboards/monsgeek/m3/m3.c b/keyboards/monsgeek/m3/m3.c index 0b26ef90a65..892e6d2b1d3 100644 --- a/keyboards/monsgeek/m3/m3.c +++ b/keyboards/monsgeek/m3/m3.c @@ -140,30 +140,3 @@ void housekeeping_task_kb(void){ gpio_write_pin(LED_MAC_OS_PIN, (get_highest_layer(default_layer_state) == 3)); gpio_write_pin(LED_WIN_LOCK_PIN, keymap_config.no_gui); } - -bool process_record_kb(uint16_t keycode, keyrecord_t* record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - if (!rgb_matrix_is_enabled()) { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - default: - return true; - } -} diff --git a/keyboards/monsgeek/m6/m6.c b/keyboards/monsgeek/m6/m6.c index 3c4b67458c1..577c36e051a 100644 --- a/keyboards/monsgeek/m6/m6.c +++ b/keyboards/monsgeek/m6/m6.c @@ -159,39 +159,3 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) } #endif -bool process_record_kb(uint16_t keycode, keyrecord_t *record) -{ - if (!process_record_user(keycode, record)) - { - return false; - } - switch (keycode) - { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) - { - switch (rgb_matrix_get_flags()) - { - case LED_FLAG_ALL: - { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: - { - rgb_matrix_set_flags(LED_FLAG_ALL); - } - break; - } - } - if (!rgb_matrix_is_enabled()) - { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable(); - } - return false; - default: - return true; - } -} diff --git a/keyboards/mss_studio/m63_rgb/keymaps/default/keymap.c b/keyboards/mss_studio/m63_rgb/keymaps/default/keymap.c index 8a59f2ec9f5..ac26ed2de9f 100644 --- a/keyboards/mss_studio/m63_rgb/keymaps/default/keymap.c +++ b/keyboards/mss_studio/m63_rgb/keymaps/default/keymap.c @@ -32,24 +32,6 @@ enum layer_names { _FN, }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - -// enum layer_keycodes { }; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -108,66 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - bool rgb_matrix_indicators_user(void) { hsv_t hsv = rgb_matrix_config.hsv; uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); diff --git a/keyboards/mss_studio/m64_rgb/keymaps/default/keymap.c b/keyboards/mss_studio/m64_rgb/keymaps/default/keymap.c index c3879b2b614..82180c7c210 100644 --- a/keyboards/mss_studio/m64_rgb/keymaps/default/keymap.c +++ b/keyboards/mss_studio/m64_rgb/keymaps/default/keymap.c @@ -28,24 +28,6 @@ enum layer_names { _FN, }; -enum user_rgb_mode { - RGB_MODE_ALL, - RGB_MODE_KEYLIGHT, - RGB_MODE_UNDERGLOW, - RGB_MODE_NONE, -}; - -typedef union { - uint32_t raw; - struct { - uint8_t rgb_mode :8; - }; -} user_config_t; - -user_config_t user_config; - -// enum layer_keycodes { }; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -104,66 +86,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - switch (user_config.rgb_mode) { - case RGB_MODE_ALL: - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - break; - case RGB_MODE_KEYLIGHT: - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_UNDERGLOW: - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - break; - case RGB_MODE_NONE: - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_KEYLIGHT; - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_UNDERGLOW; - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - user_config.rgb_mode = RGB_MODE_NONE; - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - user_config.rgb_mode = RGB_MODE_ALL; - } - break; - } - eeconfig_update_user(user_config.raw); - } - return false; - } - - return true; -} - bool rgb_matrix_indicators_user(void) { hsv_t hsv = rgb_matrix_config.hsv; uint8_t time = scale16by8(g_rgb_timer, qadd8(32, 1)); diff --git a/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c b/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c index 6f647f54f97..ce147c05bb7 100644 --- a/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c +++ b/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c @@ -15,10 +15,6 @@ */ #include QMK_KEYBOARD_H -enum my_keycodes { - RETRO_RGB = QK_USER_0 -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_tkl_ansi_tsangan( /* Base */ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, @@ -34,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RM_TOGG, RM_NEXT, RM_HUED, RM_HUEU, RM_SATD, RM_SATU, RM_VALD, RM_VALU, RM_SPDD, RM_SPDU, _______, _______, - _______, _______, _______, RETRO_RGB, _______, _______, _______, _______, _______, _______), + _______, _______, _______, RM_FLGN, _______, _______, _______, _______, _______, _______), }; @@ -50,24 +46,3 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } return false; } - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RETRO_RGB: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_INDICATOR); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } - break; - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c b/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c index 23014881bd4..77848ba7eeb 100644 --- a/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c +++ b/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c @@ -15,10 +15,6 @@ */ #include QMK_KEYBOARD_H -enum my_keycodes { - RETRO_RGB = QK_USER_0 -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_tkl_iso_tsangan( /* Base */ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, @@ -34,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RM_TOGG, RM_NEXT, RM_HUED, RM_HUEU, RM_SATD, RM_SATU, RM_VALD, RM_VALU, RM_SPDD, RM_SPDU, _______, _______, - _______, _______, _______, RETRO_RGB, _______, _______, _______, _______, _______, _______), + _______, _______, _______, RM_FLGN, _______, _______, _______, _______, _______, _______), }; @@ -50,24 +46,3 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } return false; } - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case RETRO_RGB: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_INDICATOR); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } - break; - } - } - return false; // Skip all further processing of this key - default: - return true; // Process all other keycodes normally - } -} diff --git a/keyboards/pangorin/tan67/tan67.c b/keyboards/pangorin/tan67/tan67.c deleted file mode 100644 index 08568ddcc8c..00000000000 --- a/keyboards/pangorin/tan67/tan67.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2023 Pangorin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case (LED_FLAG_UNDERGLOW): { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return process_record_user(keycode, record); -} -#endif - diff --git a/keyboards/phage_studio/pila87/pila87.c b/keyboards/phage_studio/pila87/pila87.c index 927f349cf3b..f95ce981312 100644 --- a/keyboards/phage_studio/pila87/pila87.c +++ b/keyboards/phage_studio/pila87/pila87.c @@ -23,28 +23,6 @@ #include #include -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } - } - return false; - } - return process_record_user(keycode, record); -} - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/rgbkb/sol/keymaps/default/keymap.c b/keyboards/rgbkb/sol/keymaps/default/keymap.c index 54dab63736f..e4b573e4fc9 100644 --- a/keyboards/rgbkb/sol/keymaps/default/keymap.c +++ b/keyboards/rgbkb/sol/keymaps/default/keymap.c @@ -129,61 +129,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -// For RGBRST Keycode -#if defined(RGB_MATRIX_ENABLE) -void rgb_matrix_increase_flags(void) -{ - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_UNDERGLOW: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_disable_noeeprom(); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } -} - -void rgb_matrix_decrease_flags(void) -{ - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_disable_noeeprom(); - } - break; - case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_UNDERGLOW: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_enable_noeeprom(); - } - break; - } -} -#endif - #ifdef RGB_OLED_MENU uint8_t rgb_encoder_state = 4; @@ -195,7 +140,7 @@ const rgb_matrix_f rgb_matrix_functions[6][2] = { { rgb_matrix_increase_val, rgb_matrix_decrease_val }, { rgb_matrix_increase_speed, rgb_matrix_decrease_speed }, { rgb_matrix_step, rgb_matrix_step_reverse }, - { rgb_matrix_increase_flags, rgb_matrix_decrease_flags } + { rgb_matrix_flags_step, rgb_matrix_flags_step_reverse } }; #endif @@ -272,13 +217,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } return false; -#if defined(RGB_MATRIX_ENABLE) && defined(KEYBOARD_rgbkb_sol_rev2) - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - rgb_matrix_increase_flags(); - } - return false; -#endif case RGB_MENU: #ifdef RGB_OLED_MENU if (record->event.pressed) { diff --git a/keyboards/rgbkb/sol3/rev1/rev1.c b/keyboards/rgbkb/sol3/rev1/rev1.c index afe0ef17f64..1f1149e1ba1 100644 --- a/keyboards/rgbkb/sol3/rev1/rev1.c +++ b/keyboards/rgbkb/sol3/rev1/rev1.c @@ -80,35 +80,6 @@ void matrix_slave_scan_kb(void) { matrix_slave_scan_user(); } -#ifdef RGB_MATRIX_ENABLE -void rgb_matrix_increase_flags(void) -{ - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: { - rgb_matrix_set_flags(LED_FLAG_UNDERGLOW); - rgb_matrix_set_color_all(0, 0, 0); - } - break; - case LED_FLAG_UNDERGLOW: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_disable_noeeprom(); - } - break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - rgb_matrix_enable_noeeprom(); - } - break; - } -} -#endif - - __attribute__((weak)) void render_layer_status(void) { // Keymap specific, expected to be overridden @@ -185,22 +156,6 @@ bool oled_task_kb(void) { return false; } -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) - return false; - - switch(keycode) { -#ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - rgb_matrix_increase_flags(); - } - return false; -#endif - } - return true; -}; - void keyboard_post_init_kb(void) { touch_encoder_init(); transaction_register_rpc(TOUCH_ENCODER_SYNC, touch_encoder_slave_sync); diff --git a/keyboards/rgbkb/sol3/rev1/rev1.h b/keyboards/rgbkb/sol3/rev1/rev1.h index 03e4f3aa140..1a2d2a0e1a3 100644 --- a/keyboards/rgbkb/sol3/rev1/rev1.h +++ b/keyboards/rgbkb/sol3/rev1/rev1.h @@ -18,8 +18,3 @@ void render_layer_status(void); void render_leds_status(void); void render_touch_status(void); void render_audio_status(void); - -#ifdef RGB_MATRIX_ENABLE -// utility function to cycle active led zones -void rgb_matrix_increase_flags(void); -#endif diff --git a/keyboards/skyloong/gk61/pro/pro.c b/keyboards/skyloong/gk61/pro/pro.c index 11411ba2b19..521fce60884 100644 --- a/keyboards/skyloong/gk61/pro/pro.c +++ b/keyboards/skyloong/gk61/pro/pro.c @@ -107,31 +107,6 @@ void suspend_wakeup_init_kb(void) { } #endif -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - return false; -# endif - } - - return true; -} - void board_init(void) { // JTAG-DP Disabled and SW-DP Disabled AFIO->MAPR = (AFIO->MAPR & ~AFIO_MAPR_SWJ_CFG_Msk) | AFIO_MAPR_SWJ_CFG_DISABLE; diff --git a/keyboards/skyloong/gk61/pro_48/pro_48.c b/keyboards/skyloong/gk61/pro_48/pro_48.c index 11411ba2b19..521fce60884 100644 --- a/keyboards/skyloong/gk61/pro_48/pro_48.c +++ b/keyboards/skyloong/gk61/pro_48/pro_48.c @@ -107,31 +107,6 @@ void suspend_wakeup_init_kb(void) { } #endif -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - return false; -# endif - } - - return true; -} - void board_init(void) { // JTAG-DP Disabled and SW-DP Disabled AFIO->MAPR = (AFIO->MAPR & ~AFIO_MAPR_SWJ_CFG_Msk) | AFIO_MAPR_SWJ_CFG_DISABLE; diff --git a/keyboards/skyloong/qk21/v1/v1.c b/keyboards/skyloong/qk21/v1/v1.c index ae85eaab396..4d22de5ccb7 100644 --- a/keyboards/skyloong/qk21/v1/v1.c +++ b/keyboards/skyloong/qk21/v1/v1.c @@ -5,30 +5,6 @@ #if defined(RGB_MATRIX_ENABLE) && defined(NUM_LOCK_INDEX) -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - switch (keycode) { -# ifdef RGB_MATRIX_ENABLE - case QK_RGB_MATRIX_TOGGLE: - if (record->event.pressed) { - switch (rgb_matrix_get_flags()) { - case LED_FLAG_ALL: { - rgb_matrix_set_flags(LED_FLAG_NONE); - rgb_matrix_set_color_all(0, 0, 0); - } break; - default: { - rgb_matrix_set_flags(LED_FLAG_ALL); - } break; - } - } - return false; -# endif - } - return true; -} - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; From 7382c0a6f2d2d3d19bbce7df174f83c08b4a3204 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 28 Mar 2026 07:29:27 +0000 Subject: [PATCH 15/48] Remove deprecated audio pin defines (#26111) --- docs/config_options.md | 18 ------------------ keyboards/delikeeb/vanana/rev1/config.h | 2 +- keyboards/delikeeb/vanana/rev2/config.h | 2 +- keyboards/latincompass/latin6rgb/config.h | 2 +- keyboards/merge/um70/config.h | 2 +- keyboards/nightly_boards/n60_s/config.h | 3 +-- lib/python/qmk/info.py | 14 -------------- 7 files changed, 5 insertions(+), 38 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index 91c17cf09d7..95cc89eaa7e 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -74,24 +74,6 @@ This is a C header file that is one of the first things included, and will persi * pins mapped to rows and columns, from left to right. Defines a matrix where each switch is connected to a separate pin and ground. * `#define AUDIO_VOICES` * turns on the alternate audio voices (to cycle through) -* `#define C4_AUDIO` - * enables audio on pin C4 - * Deprecated. Use `#define AUDIO_PIN C4` -* `#define C5_AUDIO` - * enables audio on pin C5 - * Deprecated. Use `#define AUDIO_PIN C5` -* `#define C6_AUDIO` - * enables audio on pin C6 - * Deprecated. Use `#define AUDIO_PIN C6` -* `#define B5_AUDIO` - * enables audio on pin B5 (duophony is enabled if one of B pins is enabled along with one of C pins) - * Deprecated. Use `#define AUDIO_PIN B5`, or use `#define AUDIO_PIN_ALT B5` if a `C` pin is enabled with `AUDIO_PIN` -* `#define B6_AUDIO` - * enables audio on pin B6 (duophony is enabled if one of B pins is enabled along with one of C pins) - * Deprecated. Use `#define AUDIO_PIN B6`, or use `#define AUDIO_PIN_ALT B6` if a `C` pin is enabled with `AUDIO_PIN` -* `#define B7_AUDIO` - * enables audio on pin B7 (duophony is enabled if one of B pins is enabled along with one of C pins) - * Deprecated. Use `#define AUDIO_PIN B7`, or use `#define AUDIO_PIN_ALT B7` if a `C` pin is enabled with `AUDIO_PIN` * `#define BACKLIGHT_PIN B7` * pin of the backlight * `#define BACKLIGHT_LEVELS 3` diff --git a/keyboards/delikeeb/vanana/rev1/config.h b/keyboards/delikeeb/vanana/rev1/config.h index 97281151068..5841bd563cf 100644 --- a/keyboards/delikeeb/vanana/rev1/config.h +++ b/keyboards/delikeeb/vanana/rev1/config.h @@ -17,7 +17,7 @@ along with this program. If not, see . #pragma once -#define B7_AUDIO +#define AUDIO_PIN B7 /* If defined, GRAVE_ESC will always act as ESC when CTRL is held. * This is useful for the Windows task manager shortcut (ctrl+shift+esc). diff --git a/keyboards/delikeeb/vanana/rev2/config.h b/keyboards/delikeeb/vanana/rev2/config.h index 97281151068..5841bd563cf 100644 --- a/keyboards/delikeeb/vanana/rev2/config.h +++ b/keyboards/delikeeb/vanana/rev2/config.h @@ -17,7 +17,7 @@ along with this program. If not, see . #pragma once -#define B7_AUDIO +#define AUDIO_PIN B7 /* If defined, GRAVE_ESC will always act as ESC when CTRL is held. * This is useful for the Windows task manager shortcut (ctrl+shift+esc). diff --git a/keyboards/latincompass/latin6rgb/config.h b/keyboards/latincompass/latin6rgb/config.h index 6b159751008..ac1aec51bb2 100644 --- a/keyboards/latincompass/latin6rgb/config.h +++ b/keyboards/latincompass/latin6rgb/config.h @@ -19,4 +19,4 @@ #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND -#define B7_AUDIO +#define AUDIO_PIN B7 diff --git a/keyboards/merge/um70/config.h b/keyboards/merge/um70/config.h index 5f999594cf2..d8e896c14b4 100644 --- a/keyboards/merge/um70/config.h +++ b/keyboards/merge/um70/config.h @@ -19,7 +19,7 @@ #define SPLIT_USB_DETECT #define SPLIT_MODS_ENABLE -#define B6_AUDIO +#define AUDIO_PIN B6 #ifdef AUDIO_ENABLE #define STARTUP_SONG SONG(STARTUP_SOUND) diff --git a/keyboards/nightly_boards/n60_s/config.h b/keyboards/nightly_boards/n60_s/config.h index 9e3016e53a4..0f3c9b68149 100644 --- a/keyboards/nightly_boards/n60_s/config.h +++ b/keyboards/nightly_boards/n60_s/config.h @@ -18,6 +18,5 @@ along with this program. If not, see . #pragma once /* Audio */ - -#define B7_AUDIO +#define AUDIO_PIN B7 #define AUDIO_CLICKY diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index c51480804b4..25f9928621f 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -420,19 +420,6 @@ def _extract_direct_matrix(direct_pins): return direct_pin_array -def _extract_audio(info_data, config_c): - """Populate data about the audio configuration - """ - audio_pins = [] - - for pin in 'B5', 'B6', 'B7', 'C4', 'C5', 'C6': - if config_c.get(f'{pin}_AUDIO'): - audio_pins.append(pin) - - if audio_pins: - info_data['audio'] = {'pins': audio_pins} - - def _extract_encoders_values(config_c, postfix=''): """Common encoder extraction logic """ @@ -718,7 +705,6 @@ def _extract_config_h(info_data, config_c): # Pull data that easily can't be mapped in json _extract_matrix_info(info_data, config_c) - _extract_audio(info_data, config_c) _extract_secure_unlock(info_data, config_c) _extract_split_handedness(info_data, config_c) _extract_split_serial(info_data, config_c) From 534f59a1698ac772fb6691b17fedf0f3d149bd79 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 30 Mar 2026 03:25:46 +0100 Subject: [PATCH 16/48] Fix `cc-option` on arm-none-eabi-gcc (#26114) Fix `cc-option` on ARM Modify cc-option to ignore unresolved symbols during compilation tests. --- builddefs/support.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builddefs/support.mk b/builddefs/support.mk index 7ef7b9b041e..de1d3fd5c40 100644 --- a/builddefs/support.mk +++ b/builddefs/support.mk @@ -4,7 +4,7 @@ # $(2) = option to use if $(1) is not supported # $(3) = additional arguments to pass to the compiler during the test, but aren't contained in the output cc-option = $(shell \ - if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \ + if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -Wl,--unresolved-symbols=ignore-all -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \ then echo "$(1)"; else echo "$(2)"; fi) # Helper to pass comma character to make functions (use with `$(,)` to pass in `$(call ...)` arguments) From 6f4a45e39239367258b4232c03fee8e10a7dc122 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 30 Mar 2026 04:42:29 +0100 Subject: [PATCH 17/48] Fix color diagnostics for arm-none-eabi-gcc (#26115) --- builddefs/common_rules.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk index 6ba42f3b5bc..f3cb517aa58 100644 --- a/builddefs/common_rules.mk +++ b/builddefs/common_rules.mk @@ -66,9 +66,9 @@ CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") - CFLAGS+= -fdiagnostics-color -endif + CFLAGS+= -fdiagnostics-color=always +else + CFLAGS+= -fdiagnostics-color=never endif CFLAGS += -Wall CFLAGS += -Wstrict-prototypes From 593cd168c6f4697fb7847383837acb82f530d414 Mon Sep 17 00:00:00 2001 From: windexlight <32583007+windexlight@users.noreply.github.com> Date: Tue, 31 Mar 2026 03:12:01 -0700 Subject: [PATCH 18/48] Fix possible repeat key infinite recursion (#25926) Guard against infinite recursion when pressing this sequence after fresh boot: repeat key press -> another key press/release -> repeat key release. --- quantum/repeat_key.c | 47 ++++++++++++++++++---------- quantum/repeat_key.h | 1 + tests/repeat_key/test_repeat_key.cpp | 23 ++++++++++++++ 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/quantum/repeat_key.c b/quantum/repeat_key.c index 56f242f8b84..bc385cb8948 100644 --- a/quantum/repeat_key.c +++ b/quantum/repeat_key.c @@ -25,6 +25,21 @@ static int8_t last_repeat_count = 0; // The repeat_count, but set to 0 outside of repeat_key_invoke() so that it is // nonzero only while a repeated key is being processed. static int8_t processing_repeat_count = 0; +// It is possible (e.g. in rolled presses) that the last key changes while +// the Repeat Key is pressed. To prevent stuck keys, it is important to +// remember separately what key record was processed on press so that the +// the corresponding record is generated on release. +static keyrecord_t registered_record_repeat_key = {0}; +static int8_t registered_repeat_count_repeat_key = 0; + +void reset_repeat_key_state(void) { + last_record = (keyrecord_t){0}; + last_mods = 0; + last_repeat_count = 0; + processing_repeat_count = 0; + registered_record_repeat_key = (keyrecord_t){0}; + registered_repeat_count_repeat_key = 0; +} uint16_t get_last_keycode(void) { return last_record.keycode; @@ -67,12 +82,6 @@ int8_t get_repeat_key_count(void) { } void repeat_key_invoke(const keyevent_t* event) { - // It is possible (e.g. in rolled presses) that the last key changes while - // the Repeat Key is pressed. To prevent stuck keys, it is important to - // remember separately what key record was processed on press so that the - // the corresponding record is generated on release. - static keyrecord_t registered_record = {0}; - static int8_t registered_repeat_count = 0; // Since this function calls process_record(), it may recursively call // itself. We return early if `processing_repeat_count` is nonzero to // prevent infinite recursion. @@ -84,19 +93,25 @@ void repeat_key_invoke(const keyevent_t* event) { update_last_repeat_count(1); // On press, apply the last mods state, stacking on top of current mods. register_weak_mods(last_mods); - registered_record = last_record; - registered_repeat_count = last_repeat_count; + registered_record_repeat_key = last_record; + registered_repeat_count_repeat_key = last_repeat_count; } - // Generate a keyrecord and plumb it into the event pipeline. - registered_record.event = *event; - processing_repeat_count = registered_repeat_count; - process_record(®istered_record); - processing_repeat_count = 0; + // It is possible for this to be zero here in the case of pressing + // repeat key before any other after reset, pressing another key while + // holding repeat key, and then releasing repeat key. Must guard against + // this to prevent infinite recursion. + if (registered_repeat_count_repeat_key) { + // Generate a keyrecord and plumb it into the event pipeline. + registered_record_repeat_key.event = *event; + processing_repeat_count = registered_repeat_count_repeat_key; + process_record(®istered_record_repeat_key); + processing_repeat_count = 0; - // On release, restore the mods state. - if (!event->pressed) { - unregister_weak_mods(last_mods); + // On release, restore the mods state. + if (!event->pressed) { + unregister_weak_mods(last_mods); + } } } diff --git a/quantum/repeat_key.h b/quantum/repeat_key.h index 8084be24ad4..9bfb6caed44 100644 --- a/quantum/repeat_key.h +++ b/quantum/repeat_key.h @@ -19,6 +19,7 @@ #include "action.h" #include "keyboard.h" +void reset_repeat_key_state(void); /**< Resets repeat key state. */ uint16_t get_last_keycode(void); /**< Keycode of the last key. */ uint8_t get_last_mods(void); /**< Mods active with the last key. */ void set_last_keycode(uint16_t keycode); /**< Sets the last key. */ diff --git a/tests/repeat_key/test_repeat_key.cpp b/tests/repeat_key/test_repeat_key.cpp index ed5d6187617..385ae884cc5 100644 --- a/tests/repeat_key/test_repeat_key.cpp +++ b/tests/repeat_key/test_repeat_key.cpp @@ -54,6 +54,7 @@ class RepeatKey : public TestFixture { bool process_record_user_was_called_; void SetUp() override { + reset_repeat_key_state(); autoshift_disable(); process_record_user_fun = process_record_user_default; remember_last_key_user_fun = remember_last_key_user_default; @@ -784,4 +785,26 @@ TEST_F(RepeatKey, IgnoredKeys) { testing::Mock::VerifyAndClearExpectations(&driver); } +// Check that on fresh boot, repeat press, another key, repeat release doesn't hang +TEST_F(RepeatKey, RepeatKeyHeldAfterBoot) { + TestDriver driver; + KeymapKey key_a(0, 1, 0, KC_A); + KeymapKey key_repeat(0, 2, 0, QK_REP); + set_keymap({key_a, key_repeat}); + + EXPECT_EMPTY_REPORT(driver).Times(AnyNumber()); + ExpectString(driver, "a"); + + // Press and hold repeat key, then press and release 'a' key, then release repeat key + key_repeat.press(); + run_one_scan_loop(); + key_a.press(); + run_one_scan_loop(); + key_a.release(); + run_one_scan_loop(); + key_repeat.release(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); +} + } // namespace From fbb0acdaa09463633d183c87867af0d6c87c2634 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 6 Apr 2026 01:49:05 +0100 Subject: [PATCH 19/48] Remove deprecated `isLeftHand` (#25897) Refactor deprecated isLeftHand --- quantum/split_common/split_util.c | 4 ---- quantum/split_common/split_util.h | 2 -- 2 files changed, 6 deletions(-) diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index a35a16685a1..93a4d3419f0 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -56,8 +56,6 @@ static uint8_t connection_errors = 0; -volatile bool isLeftHand = true; - static struct { bool master; bool left; @@ -203,8 +201,6 @@ void split_pre_init(void) { split_config.master = is_keyboard_master_impl(); split_config.left = is_keyboard_left_impl(); - isLeftHand = is_keyboard_left(); // TODO: Remove isLeftHand - #if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) uint8_t num_rgb_leds_split[2] = RGBLED_SPLIT; if (is_keyboard_left()) { diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h index 6f4c4dc6602..4eb8f8dc18a 100644 --- a/quantum/split_common/split_util.h +++ b/quantum/split_common/split_util.h @@ -5,8 +5,6 @@ #include "matrix.h" -extern volatile bool isLeftHand; - void split_pre_init(void); void split_post_init(void); From dd74b2326fd2defc9a8df182930c4d2fcb15dbe3 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Mon, 6 Apr 2026 21:05:36 +1000 Subject: [PATCH 20/48] ChibiOS, ChibiOS-Contrib updates (redux) (#26079) * Reapply "Update ChibiOS, ChibiOS-Contrib." (#26074) This reverts commit c0bbf2f0f954e53fb9dca8873077c72bc6b29f62. * Updated repo. * Update `lib/chibios` to 21.11.5 release. --- keyboards/matrix/abelx/mcuconf.h | 2 +- keyboards/matrix/m20add/mcuconf.h | 2 +- keyboards/matrix/noah/mcuconf.h | 2 +- keyboards/tzarc/kobold/info.json | 2 +- lib/chibios | 2 +- lib/chibios-contrib | 2 +- .../BLACKPILL_STM32_F401/configs/mcuconf.h | 2 +- .../BLACKPILL_STM32_F411/configs/mcuconf.h | 2 +- .../boards/BONSAI_C4/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F303XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F401XC/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F405XG/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F407XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F411XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_F446XE/configs/mcuconf.h | 2 +- .../GENERIC_STM32_G0B1XB/configs/mcuconf.h | 28 ++++++++++--------- .../GENERIC_STM32_G431XB/configs/mcuconf.h | 18 ++++++------ .../GENERIC_STM32_G474XE/configs/mcuconf.h | 24 ++++++++-------- .../GENERIC_STM32_H723XG/configs/mcuconf.h | 7 ++++- .../GENERIC_STM32_L412XB/configs/mcuconf.h | 2 +- .../GENERIC_STM32_L432XC/configs/mcuconf.h | 2 +- .../boards/QMK_PROTON_C/configs/chconf.h | 25 +---------------- .../boards/QMK_PROTON_C/configs/halconf.h | 19 +++++++++++-- .../boards/QMK_PROTON_C/configs/mcuconf.h | 2 +- .../chibios/boards/STEMCELL/configs/mcuconf.h | 2 +- .../chibios/boards/common/configs/chconf.h | 25 +---------------- .../chibios/boards/common/configs/halconf.h | 19 +++++++++++-- platforms/chibios/platform.mk | 2 +- util/chibios_conf_updater.sh | 2 +- 29 files changed, 97 insertions(+), 110 deletions(-) diff --git a/keyboards/matrix/abelx/mcuconf.h b/keyboards/matrix/abelx/mcuconf.h index a2fd42b8c4c..ce8783c8b9e 100644 --- a/keyboards/matrix/abelx/mcuconf.h +++ b/keyboards/matrix/abelx/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/m20add/mcuconf.h b/keyboards/matrix/m20add/mcuconf.h index 00216f6908f..25f36a892d0 100644 --- a/keyboards/matrix/m20add/mcuconf.h +++ b/keyboards/matrix/m20add/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/matrix/noah/mcuconf.h b/keyboards/matrix/noah/mcuconf.h index 00216f6908f..25f36a892d0 100644 --- a/keyboards/matrix/noah/mcuconf.h +++ b/keyboards/matrix/noah/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/keyboards/tzarc/kobold/info.json b/keyboards/tzarc/kobold/info.json index bed8e8a23fe..70eaa9eb847 100644 --- a/keyboards/tzarc/kobold/info.json +++ b/keyboards/tzarc/kobold/info.json @@ -13,7 +13,7 @@ "eeprom": { "driver": "wear_leveling", "wear_leveling": { - "backing_size": 32768, + "backing_size": 16384, "driver": "spi_flash" } }, diff --git a/lib/chibios b/lib/chibios index 8bd61b80430..6170ddf92d5 160000 --- a/lib/chibios +++ b/lib/chibios @@ -1 +1 @@ -Subproject commit 8bd61b804303f1614d574546c2dd735eeabb09f5 +Subproject commit 6170ddf92d55be54c89b708d1882eea229edeb2c diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 8d863d9ee4e..5a9ad82b6ba 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 8d863d9ee4eecea68ad8d15f7e7c2b451aea79d9 +Subproject commit 5a9ad82b6ba4f649cdb800e8c2bbc9be2d3ce767 diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h index a21fd7bd128..129e275ca8b 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F401/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h index 131c847661c..cd2152da083 100644 --- a/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h +++ b/platforms/chibios/boards/BLACKPILL_STM32_F411/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h index b381aed4fd1..d119d133ffb 100644 --- a/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h +++ b/platforms/chibios/boards/BONSAI_C4/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h index e0af4a276bf..0c514c2b88c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F303XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h index 1208563aa15..8e2d16843ac 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F401XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h index 394e7502560..21871350c6c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F405XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h index 07399ad2f73..d29ab85c36c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h index e1d45ca4877..4489bed5c1c 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F411XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h index 9c5cb824369..45ee3ef56e2 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h index 80726e0308f..c13e69c7cd8 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G0B1XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -73,6 +73,8 @@ #define STM32_PPRE STM32_PPRE_DIV1 #define STM32_MCOSEL STM32_MCOSEL_NOCLOCK #define STM32_MCOPRE STM32_MCOPRE_DIV1 +#define STM32_MCO2SEL STM32_MCOSEL_NOCLOCK +#define STM32_MCO2PRE STM32_MCOPRE_DIV1 #define STM32_LSCOSEL STM32_LSCOSEL_NOCLOCK /* @@ -107,9 +109,8 @@ #define STM32_IRQ_EXTI4_15_PRIORITY 3 #define STM32_IRQ_EXTI1921_PRIORITY 3 -#define STM32_IRQ_USART1_PRIORITY 2 -#define STM32_IRQ_USART2_LP2_PRIORITY 2 -#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 +#define STM32_IRQ_I2C1_PRIORITY 3 +#define STM32_IRQ_I2C2_3_PRIORITY 3 #define STM32_IRQ_TIM1_UP_PRIORITY 1 #define STM32_IRQ_TIM1_CC_PRIORITY 1 @@ -122,6 +123,12 @@ #define STM32_IRQ_TIM16_PRIORITY 1 #define STM32_IRQ_TIM17_PRIORITY 1 +#define STM32_IRQ_USART1_PRIORITY 2 +#define STM32_IRQ_USART2_LP2_PRIORITY 2 +#define STM32_IRQ_USART3_4_5_6_LP1_PRIORITY 2 + +#define STM32_IRQ_USB1_UCPD1_2_PRIORITY 3 + /* * ADC driver system settings. */ @@ -166,16 +173,12 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 3 -#define STM32_I2C_I2C2_IRQ_PRIORITY 3 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 +#define STM32_I2C_I2C3_DMA_PRIORITY 1 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* @@ -296,7 +299,6 @@ * USB driver system settings. */ #define STM32_USB_USE_USB1 TRUE -#define STM32_USB_USB1_LP_IRQ_PRIORITY 3 #define STM32_USB_USE_ISOCHRONOUS FALSE #define STM32_USB_USE_FAST_COPY TRUE #define STM32_USB_HOST_WAKEUP_DURATION 2 diff --git a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h index 0537ee92357..39d594d585a 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G431XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -119,6 +119,10 @@ #define STM32_IRQ_FDCAN1_PRIORITY 10 +#define STM32_IRQ_I2C1_PRIORITY 5 +#define STM32_IRQ_I2C2_PRIORITY 5 +#define STM32_IRQ_I2C3_PRIORITY 5 + #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -201,15 +205,9 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C3_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h index d6385da6249..94bef9ea545 100644 --- a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -127,6 +127,11 @@ #define STM32_IRQ_FDCAN2_PRIORITY 10 #define STM32_IRQ_FDCAN3_PRIORITY 10 +#define STM32_IRQ_I2C1_PRIORITY 5 +#define STM32_IRQ_I2C2_PRIORITY 5 +#define STM32_IRQ_I2C3_PRIORITY 5 +#define STM32_IRQ_I2C4_PRIORITY 5 + #define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 #define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 #define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 @@ -184,6 +189,7 @@ #define STM32_CAN_USE_FDCAN1 FALSE #define STM32_CAN_USE_FDCAN2 FALSE #define STM32_CAN_USE_FDCAN3 FALSE +#define STM32_CAN_FDCAN_PRESC FDCAN_CONFIG_CKDIV_PDIV_20 /* * DAC driver system settings. @@ -241,18 +247,10 @@ #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C4_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C4_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C3_IRQ_PRIORITY 5 -#define STM32_I2C_I2C4_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C2_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C3_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C4_DMA_CHANNEL STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 diff --git a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h index 09096c39778..2b74c34ff5b 100644 --- a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -276,6 +276,7 @@ #define STM32_I2C_USE_I2C2 FALSE #define STM32_I2C_USE_I2C3 FALSE #define STM32_I2C_USE_I2C4 FALSE +#define STM32_I2C_USE_I2C5 FALSE #define STM32_I2C_BUSY_TIMEOUT 50 #define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY @@ -285,14 +286,18 @@ #define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C4_RX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY #define STM32_I2C_I2C4_TX_BDMA_STREAM STM32_BDMA_STREAM_ID_ANY +#define STM32_I2C_I2C5_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY +#define STM32_I2C_I2C5_TX_DMA_STREAM STM32_DMA_STREAM_ID_ANY #define STM32_I2C_I2C1_IRQ_PRIORITY 5 #define STM32_I2C_I2C2_IRQ_PRIORITY 5 #define STM32_I2C_I2C3_IRQ_PRIORITY 5 #define STM32_I2C_I2C4_IRQ_PRIORITY 5 +#define STM32_I2C_I2C5_IRQ_PRIORITY 5 #define STM32_I2C_I2C1_DMA_PRIORITY 3 #define STM32_I2C_I2C2_DMA_PRIORITY 3 #define STM32_I2C_I2C3_DMA_PRIORITY 3 #define STM32_I2C_I2C4_DMA_PRIORITY 3 +#define STM32_I2C_I2C5_DMA_PRIORITY 3 #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") /* diff --git a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h index 47f1598b743..ee3a84f0ecd 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L412XB/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h index 6962a340c55..7f7cb74bebc 100644 --- a/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_L432XC/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h index e92b7aeb984..2cdd9bc80ed 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,19 +49,6 @@ #define CH_CFG_SMP_MODE FALSE #endif -/** - * @brief Kernel hardening level. - * @details This option is the level of functional-safety checks enabled - * in the kerkel. The meaning is: - * - 0: No checks, maximum performance. - * - 1: Reasonable checks. - * - 2: All checks. - * . - */ -#if !defined(CH_CFG_HARDENING_LEVEL) -#define CH_CFG_HARDENING_LEVEL 0 -#endif - /** @} */ /*===========================================================================*/ @@ -373,16 +360,6 @@ #define CH_CFG_USE_MAILBOXES TRUE #endif -/** - * @brief Memory checks APIs. - * @details If enabled then the memory checks APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MEMCHECKS) -#define CH_CFG_USE_MEMCHECKS TRUE -#endif - /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h index 4a22e818e25..4e8154820bf 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,17 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_8_4_ +#define _CHIBIOS_HAL_CONF_VER_9_1_ #include +/** + * @brief Enables the HAL safety subsystem. + */ +#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) +#define HAL_USE_SAFETY FALSE +#endif + /** * @brief Enables the PAL subsystem. */ @@ -305,6 +312,14 @@ /* I2C driver related settings. */ /*===========================================================================*/ +/** + * @brief Slave mode API enable switch. + * @note The low level driver must support this capability. + */ +#if !defined(I2C_ENABLE_SLAVE_MODE) +#define I2C_ENABLE_SLAVE_MODE FALSE +#endif + /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h index cab4c29cf65..8a27ba5537f 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h index d4b870f8e4a..3ccc6686412 100644 --- a/platforms/chibios/boards/STEMCELL/configs/mcuconf.h +++ b/platforms/chibios/boards/STEMCELL/configs/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/platforms/chibios/boards/common/configs/chconf.h b/platforms/chibios/boards/common/configs/chconf.h index 6381298ef7b..e4c65bdcf7e 100644 --- a/platforms/chibios/boards/common/configs/chconf.h +++ b/platforms/chibios/boards/common/configs/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,19 +49,6 @@ #define CH_CFG_SMP_MODE FALSE #endif -/** - * @brief Kernel hardening level. - * @details This option is the level of functional-safety checks enabled - * in the kerkel. The meaning is: - * - 0: No checks, maximum performance. - * - 1: Reasonable checks. - * - 2: All checks. - * . - */ -#if !defined(CH_CFG_HARDENING_LEVEL) -#define CH_CFG_HARDENING_LEVEL 0 -#endif - /** @} */ /*===========================================================================*/ @@ -373,16 +360,6 @@ #define CH_CFG_USE_MAILBOXES FALSE #endif -/** - * @brief Memory checks APIs. - * @details If enabled then the memory checks APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MEMCHECKS) -#define CH_CFG_USE_MEMCHECKS TRUE -#endif - /** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included diff --git a/platforms/chibios/boards/common/configs/halconf.h b/platforms/chibios/boards/common/configs/halconf.h index b0ccbc1f2f8..9ab6dc3fd6e 100644 --- a/platforms/chibios/boards/common/configs/halconf.h +++ b/platforms/chibios/boards/common/configs/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,17 @@ #define HALCONF_H #define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_8_4_ +#define _CHIBIOS_HAL_CONF_VER_9_1_ #include +/** + * @brief Enables the HAL safety subsystem. + */ +#if !defined(HAL_USE_SAFETY) || defined(__DOXYGEN__) +#define HAL_USE_SAFETY FALSE +#endif + /** * @brief Enables the PAL subsystem. */ @@ -305,6 +312,14 @@ /* I2C driver related settings. */ /*===========================================================================*/ +/** + * @brief Slave mode API enable switch. + * @note The low level driver must support this capability. + */ +#if !defined(I2C_ENABLE_SLAVE_MODE) +#define I2C_ENABLE_SLAVE_MODE FALSE +#endif + /** * @brief Enables the mutual exclusion APIs on the I2C bus. */ diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk index cf9fac251e4..b5cbec4431f 100644 --- a/platforms/chibios/platform.mk +++ b/platforms/chibios/platform.mk @@ -279,7 +279,7 @@ PLATFORM_SRC = \ $(PLATFORMSRC) \ $(BOARDSRC) \ $(STREAMSSRC) \ - $(CHIBIOS)/os/various/syscalls.c \ + $(CHIBIOS)/os/various/newlib_bindings/syscalls.c \ $(PLATFORM_COMMON_DIR)/syscall-fallbacks.c \ $(PLATFORM_COMMON_DIR)/wait.c \ $(PLATFORM_COMMON_DIR)/synchronization_util.c \ diff --git a/util/chibios_conf_updater.sh b/util/chibios_conf_updater.sh index 4c68c678c63..06f8e9104ad 100755 --- a/util/chibios_conf_updater.sh +++ b/util/chibios_conf_updater.sh @@ -62,7 +62,7 @@ upgrade_conf_files_generic() { pushd "$qmk_firmware_dir/lib/chibios/tools/updater" >/dev/null 2>&1 for file in $(find_chibi_files "$qmk_firmware_dir" -name "$search_filename") ; do cp -f "$file" "$file.orig" - clang-format --style='{IndentPPDirectives: None}' -i "$file" + clang-format --style='{IndentPPDirectives: None, ColumnLimit: 0}' -i "$file" cp -f "$file" "$file.formatted" bash "$update_script" "$file" if ! diff "$file" "$file.formatted" >/dev/null 2>&1 ; then From 2dc7d991b13d2d34630ae5c3ee724a07e996ac44 Mon Sep 17 00:00:00 2001 From: ijouw <137716459+ijouw@users.noreply.github.com> Date: Tue, 14 Apr 2026 12:18:33 +0200 Subject: [PATCH 21/48] Either output Unicode or insert in Leader sequence (#25940) --- quantum/quantum.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 1a57548fd28..be2e84f6d5e 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -389,12 +389,12 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef TAP_DANCE_ENABLE process_tap_dance(keycode, record) && #endif -#if defined(UNICODE_COMMON_ENABLE) - process_unicode_common(keycode, record) && -#endif #ifdef LEADER_ENABLE process_leader(keycode, record) && #endif +#if defined(UNICODE_COMMON_ENABLE) + process_unicode_common(keycode, record) && +#endif #ifdef AUTO_SHIFT_ENABLE process_auto_shift(keycode, record) && #endif From 1daa191e09d7ca6c3418d09eb7c267ae2dbb12f1 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 16 Apr 2026 00:38:42 +0100 Subject: [PATCH 22/48] Add includes for std::setw (#26153) --- tests/test_common/keyboard_report_util.cpp | 1 + tests/test_common/mouse_report_util.cpp | 1 + tests/test_common/test_driver.cpp | 1 + tests/test_common/test_keymap_key.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/tests/test_common/keyboard_report_util.cpp b/tests/test_common/keyboard_report_util.cpp index 5e40323669f..dea61efcd11 100644 --- a/tests/test_common/keyboard_report_util.cpp +++ b/tests/test_common/keyboard_report_util.cpp @@ -18,6 +18,7 @@ #include #include #include +#include extern "C" { #include "keycode_string.h" diff --git a/tests/test_common/mouse_report_util.cpp b/tests/test_common/mouse_report_util.cpp index 60cdeced24f..948b3c11213 100644 --- a/tests/test_common/mouse_report_util.cpp +++ b/tests/test_common/mouse_report_util.cpp @@ -18,6 +18,7 @@ #include #include #include +#include using namespace testing; diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp index 70b920ac86a..2ab692256b2 100644 --- a/tests/test_common/test_driver.cpp +++ b/tests/test_common/test_driver.cpp @@ -15,6 +15,7 @@ */ #include "test_driver.hpp" +#include TestDriver* TestDriver::m_this = nullptr; diff --git a/tests/test_common/test_keymap_key.cpp b/tests/test_common/test_keymap_key.cpp index 63ae29975b5..3435382c04a 100644 --- a/tests/test_common/test_keymap_key.cpp +++ b/tests/test_common/test_keymap_key.cpp @@ -15,6 +15,7 @@ */ #include "test_keymap_key.hpp" +#include #include #include #include "matrix.h" From 70694abdfe8dbf758857c8cce82858a1f742062e Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 16 Apr 2026 15:23:15 +0100 Subject: [PATCH 23/48] Bump googletest to v1.16.0 (#26154) --- lib/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/googletest b/lib/googletest index e2239ee6043..6910c9d9165 160000 --- a/lib/googletest +++ b/lib/googletest @@ -1 +1 @@ -Subproject commit e2239ee6043f73722e7aa812a459f54a28552929 +Subproject commit 6910c9d9165801d8827d628cb72eb7ea9dd538c5 From cc291cff7f7e06d192f1f846ab9ad93cdcacc767 Mon Sep 17 00:00:00 2001 From: Dimitris Mantzouranis Date: Fri, 17 Apr 2026 01:53:05 +0300 Subject: [PATCH 24/48] VIA v13 (#26001) --- quantum/via.c | 8 ++++++++ quantum/via.h | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/quantum/via.c b/quantum/via.c index 0a4eb29401f..9c10840ec51 100644 --- a/quantum/via.c +++ b/quantum/via.c @@ -357,6 +357,14 @@ void raw_hid_receive(uint8_t *data, uint8_t length) { command_data[4] = value & 0xFF; break; } + case id_keycodes_version: { + uint32_t value = QMK_KEYCODES_VERSION_BCD; + command_data[1] = (value >> 24) & 0xFF; + command_data[2] = (value >> 16) & 0xFF; + command_data[3] = (value >> 8) & 0xFF; + command_data[4] = value & 0xFF; + break; + } default: { // The value ID is not known // Return the unhandled state diff --git a/quantum/via.h b/quantum/via.h index 9f0eef10f75..ef788ebfd85 100644 --- a/quantum/via.h +++ b/quantum/via.h @@ -39,7 +39,7 @@ // This is changed only when the command IDs change, // so VIA Configurator can detect compatible firmware. -#define VIA_PROTOCOL_VERSION 0x000C +#define VIA_PROTOCOL_VERSION 0x000D // This is a version number for the firmware for the keyboard. // It can be used to ensure the VIA keyboard definition and the firmware @@ -82,6 +82,7 @@ enum via_keyboard_value_id { id_switch_matrix_state = 0x03, id_firmware_version = 0x04, id_device_indication = 0x05, + id_keycodes_version = 0x06, }; enum via_channel_id { From 1182760a7c027aa964ede1fd8dacb0316a735dc8 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 19 Apr 2026 01:34:54 +0100 Subject: [PATCH 25/48] Bind gtest colour to QMKs 'COLOR' variable (#26159) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fe6623fdf69..2d10c4ade1e 100644 --- a/Makefile +++ b/Makefile @@ -313,7 +313,7 @@ define BUILD_TEST TEST_MSG := $$(MSG_TEST) $$(TEST_FULL_NAME)_COMMAND := \ printf "$$(TEST_MSG)\n"; \ - $$(TEST_EXECUTABLE); \ + $$(TEST_EXECUTABLE) --gtest_color=$$(COLOR); \ if [ $$$$? -gt 0 ]; \ then error_occurred=1; \ fi; \ From 21c193f77b481f0ffb841e67b29b9f5a3f166e63 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 19 Apr 2026 01:37:12 +0100 Subject: [PATCH 26/48] Print correct test names (#26160) --- Makefile | 1 + builddefs/message.mk | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 2d10c4ade1e..726ae4410b5 100644 --- a/Makefile +++ b/Makefile @@ -300,6 +300,7 @@ endef define BUILD_TEST TEST_PATH := $1 TEST_NAME := $$(notdir $$(TEST_PATH)) + TEST_ID := $$(patsubst ./tests/%,%,$$(TEST_PATH)) TEST_FULL_NAME := $$(subst /,_,$$(patsubst $$(ROOT_DIR)tests/%,%,$$(TEST_PATH))) MAKE_TARGET := $2 COMMAND := $1 diff --git a/builddefs/message.mk b/builddefs/message.mk index 7c8f87f9900..16cfc07b0ca 100644 --- a/builddefs/message.mk +++ b/builddefs/message.mk @@ -77,13 +77,13 @@ define GENERATE_MSG_MAKE_KB endef MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL) define GENERATE_MSG_MAKE_TEST - MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR) + MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_ID)$(NO_COLOR) ifneq ($$(MAKE_TARGET),) MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR) endif endef MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL) -MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR) +MSG_TEST = Testing $(BOLD)$(TEST_ID)$(NO_COLOR) define GENERATE_MSG_AVAILABLE_KEYMAPS MSG_AVAILABLE_KEYMAPS_ACTUAL := Available keymaps for $(BOLD)$$(CURRENT_KB)$(NO_COLOR): endef From 7d40a3328feb2b51fe7ccc0aa91dc102042ff559 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 26 Apr 2026 04:48:59 +0100 Subject: [PATCH 27/48] Require "url" field to not be empty (#25152) --- data/schemas/keyboard.jsonschema | 3 ++- lib/python/qmk/cli/lint.py | 11 ----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index d3a26923b54..c0647494ac0 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -46,7 +46,8 @@ "manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"}, "url": { "type": "string", - "format": "uri" + "format": "uri", + "minLength": 1 }, "development_board": { "type": "string", diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py index 575e357c7eb..f9f40e74a80 100644 --- a/lib/python/qmk/cli/lint.py +++ b/lib/python/qmk/cli/lint.py @@ -168,14 +168,6 @@ def _handle_invalid_features(kb, info): return ok -def _handle_invalid_config(kb, info): - """Check for invalid keyboard level config - """ - if info.get('url') == "": - cli.log.warning(f'{kb}: Invalid keyboard level config detected - Optional field "url" should not be empty.') - return True - - def _chibios_conf_includenext_check(target): """Check the ChibiOS conf.h for the correct inclusion of the next conf.h """ @@ -292,9 +284,6 @@ def keyboard_check(kb): # noqa C901 if not _handle_invalid_features(kb, kb_info): ok = False - if not _handle_invalid_config(kb, kb_info): - ok = False - if not _handle_duplicating_code_defaults(kb, kb_info): ok = False From 0c5e36d0560f2097b34ce2f1ea19e64a13da5f55 Mon Sep 17 00:00:00 2001 From: Scott Lamb Date: Tue, 28 Apr 2026 11:31:00 -0700 Subject: [PATCH 28/48] Fix `make test:all` failures seen on macOS Tahoe (#26136) --- builddefs/common_rules.mk | 6 +++++- docs/features/unicode.md | 2 +- .../drivers/eeprom/eeprom_legacy_emulated_flash.c | 4 +++- platforms/test/drivers/audio_pwm_hardware.c | 4 ++-- platforms/timer.c | 6 +++++- quantum/encoder/tests/encoder_tests.cpp | 4 ++-- .../tests/encoder_tests_split_left_eq_right.cpp | 4 ++-- .../tests/encoder_tests_split_left_gt_right.cpp | 4 ++-- .../tests/encoder_tests_split_left_lt_right.cpp | 4 ++-- .../encoder/tests/encoder_tests_split_no_left.cpp | 4 ++-- .../encoder/tests/encoder_tests_split_no_right.cpp | 4 ++-- quantum/process_keycode/process_key_override.c | 2 +- quantum/process_keycode/process_space_cadet.c | 2 +- quantum/unicode/unicode.c | 12 +++--------- tests/test_common/keyboard_report_util.hpp | 2 +- tmk_core/protocol/usb_device_state.c | 2 +- 16 files changed, 35 insertions(+), 31 deletions(-) diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk index fb03d9e3627..d8e0bf0220e 100644 --- a/builddefs/common_rules.mk +++ b/builddefs/common_rules.mk @@ -52,8 +52,12 @@ ifeq ($(strip $(DEBUG_ENABLE)),yes) ASFLAGS += -ggdb3 endif -# Always create a map file to see what was compiled and where. +# Create a map file to see what was compiled and where, unless disabled +# (e.g. test builds, which use the host linker — Apple's ld does not accept +# -Map=/--cref). +ifneq ($(strip $(CREATE_MAP)), no) LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +endif #---------------- C Compiler Options ---------------- diff --git a/docs/features/unicode.md b/docs/features/unicode.md index 7ed178c30d7..feea479492a 100644 --- a/docs/features/unicode.md +++ b/docs/features/unicode.md @@ -25,7 +25,7 @@ Add the following to your `config.h`: |`UNICODE_KEY_MAC` |`KC_LEFT_ALT` |The key to hold when beginning a Unicode sequence with the macOS input mode | |`UNICODE_KEY_LNX` |`LCTL(LSFT(KC_U))`|The key to tap when beginning a Unicode sequence with the Linux input mode | |`UNICODE_KEY_WINC` |`KC_RIGHT_ALT` |The key to hold when beginning a Unicode sequence with the WinCompose input mode| -|`UNICODE_SELECTED_MODES`|`-1` |A comma separated list of input modes for cycling through | +|`UNICODE_SELECTED_MODES`|*n/a* |A comma separated list of input modes for cycling through | |`UNICODE_CYCLE_PERSIST` |`true` |Whether to persist the current Unicode input mode to EEPROM | |`UNICODE_TYPE_DELAY` |`10` |The amount of time to wait, in milliseconds, between Unicode sequence keystrokes| diff --git a/platforms/chibios/drivers/eeprom/eeprom_legacy_emulated_flash.c b/platforms/chibios/drivers/eeprom/eeprom_legacy_emulated_flash.c index cf6b85fd128..737804b59fb 100644 --- a/platforms/chibios/drivers/eeprom/eeprom_legacy_emulated_flash.c +++ b/platforms/chibios/drivers/eeprom/eeprom_legacy_emulated_flash.c @@ -204,7 +204,9 @@ void print_eeprom(void) { } xprintf("%04x", i); } - if (i % 8 == 0) print(" "); + if (i % 8 == 0) { + print(" "); + } xprintf(" %02x", DataBuf[i]); if ((i + 1) % 16 == 0) { diff --git a/platforms/test/drivers/audio_pwm_hardware.c b/platforms/test/drivers/audio_pwm_hardware.c index 3a0384117a4..dc3b0ff3da7 100644 --- a/platforms/test/drivers/audio_pwm_hardware.c +++ b/platforms/test/drivers/audio_pwm_hardware.c @@ -16,5 +16,5 @@ #include "audio.h" void audio_driver_initialize_impl(void) {} -void audio_driver_start_impl() {} -void audio_driver_stop_impl() {} +void audio_driver_start_impl(void) {} +void audio_driver_stop_impl(void) {} diff --git a/platforms/timer.c b/platforms/timer.c index ba2cf94d2bf..2f534f3f1dd 100644 --- a/platforms/timer.c +++ b/platforms/timer.c @@ -1,7 +1,11 @@ // Copyright 2023 Sergey Vlasov (@sigprof) // SPDX-License-Identifier: GPL-2.0-or-later -#include "timer.h" +// Use an angle-bracket include so the header is located via the include +// search path rather than source-relative lookup. timer.h uses +// #include_next to chain to the active platform's _timer.h, and that +// only has well-defined semantics when timer.h itself was found via -I. +#include // Generate out-of-line copies for inline functions defined in timer.h. extern inline fast_timer_t timer_read_fast(void); diff --git a/quantum/encoder/tests/encoder_tests.cpp b/quantum/encoder/tests/encoder_tests.cpp index 499e413aed4..10ae9139d92 100644 --- a/quantum/encoder/tests/encoder_tests.cpp +++ b/quantum/encoder/tests/encoder_tests.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp index 590bd2e9f43..4665e556149 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp index e6f4db2636d..49af6892264 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp index c155f1269ab..9df795b8373 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/encoder/tests/encoder_tests_split_no_left.cpp b/quantum/encoder/tests/encoder_tests_split_no_left.cpp index 75244b94a27..17ae1bef2bc 100644 --- a/quantum/encoder/tests/encoder_tests_split_no_left.cpp +++ b/quantum/encoder/tests/encoder_tests_split_no_left.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/encoder/tests/encoder_tests_split_no_right.cpp b/quantum/encoder/tests/encoder_tests_split_no_right.cpp index bde6e1c29dd..cf340b7cdcd 100644 --- a/quantum/encoder/tests/encoder_tests_split_no_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_no_right.cpp @@ -26,8 +26,8 @@ extern "C" { } struct update { - int8_t index; - bool clockwise; + uint8_t index; + bool clockwise; }; uint8_t updates_array_idx = 0; diff --git a/quantum/process_keycode/process_key_override.c b/quantum/process_keycode/process_key_override.c index b6ef636e15b..8e241491452 100644 --- a/quantum/process_keycode/process_key_override.c +++ b/quantum/process_keycode/process_key_override.c @@ -175,7 +175,7 @@ const key_override_t *clear_active_override(const bool allow_reregister) { const key_override_t *const old = active_override; - const uint8_t mod_free_replacement = clear_mods_from(active_override->replacement); + const uint16_t mod_free_replacement = clear_mods_from(active_override->replacement); bool unregister_replacement = mod_free_replacement != KC_NO && // KC_NO is never registered mod_free_replacement < SAFE_RANGE; // Custom keycodes are never registered diff --git a/quantum/process_keycode/process_space_cadet.c b/quantum/process_keycode/process_space_cadet.c index 3e280d57d97..f3a85785dff 100644 --- a/quantum/process_keycode/process_space_cadet.c +++ b/quantum/process_keycode/process_space_cadet.c @@ -165,6 +165,6 @@ bool process_space_cadet(uint16_t keycode, keyrecord_t *record) { return true; } -void reset_space_cadet() { +void reset_space_cadet(void) { sc_last = 0; } diff --git a/quantum/unicode/unicode.c b/quantum/unicode/unicode.c index dff1d43fb41..b84c130907e 100644 --- a/quantum/unicode/unicode.c +++ b/quantum/unicode/unicode.c @@ -46,12 +46,6 @@ # define UNICODE_KEY_WINC KC_RIGHT_ALT #endif -// Comma-delimited, ordered list of input modes selected for use (e.g. in cycle) -// Example: #define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_LINUX -#ifndef UNICODE_SELECTED_MODES -# define UNICODE_SELECTED_MODES -1 -#endif - // Whether input mode changes in cycle should be written to EEPROM #ifndef UNICODE_CYCLE_PERSIST # define UNICODE_CYCLE_PERSIST true @@ -66,7 +60,7 @@ unicode_config_t unicode_config; uint8_t unicode_saved_mods; led_t unicode_saved_led_state; -#if UNICODE_SELECTED_MODES != -1 +#ifdef UNICODE_SELECTED_MODES static uint8_t selected[] = {UNICODE_SELECTED_MODES}; static int8_t selected_count = ARRAY_SIZE(selected); static int8_t selected_index; @@ -136,7 +130,7 @@ static void unicode_play_song(uint8_t mode) { void unicode_input_mode_init(void) { eeconfig_read_unicode_mode(&unicode_config); -#if UNICODE_SELECTED_MODES != -1 +#ifdef UNICODE_SELECTED_MODES # if UNICODE_CYCLE_PERSIST // Find input_mode in selected modes int8_t i; @@ -178,7 +172,7 @@ void set_unicode_input_mode(uint8_t mode) { } static void cycle_unicode_input_mode(int8_t offset) { -#if UNICODE_SELECTED_MODES != -1 +#ifdef UNICODE_SELECTED_MODES selected_index = (selected_index + offset) % selected_count; if (selected_index < 0) { selected_index += selected_count; diff --git a/tests/test_common/keyboard_report_util.hpp b/tests/test_common/keyboard_report_util.hpp index 8a7d716869c..666791a5b61 100644 --- a/tests/test_common/keyboard_report_util.hpp +++ b/tests/test_common/keyboard_report_util.hpp @@ -35,5 +35,5 @@ class KeyboardReportMatcher : public testing::MatcherInterface inline testing::Matcher KeyboardReport(Ts... keys) { - return testing::MakeMatcher(new KeyboardReportMatcher(std::vector({keys...}))); + return testing::MakeMatcher(new KeyboardReportMatcher({static_cast(keys)...})); } diff --git a/tmk_core/protocol/usb_device_state.c b/tmk_core/protocol/usb_device_state.c index 98ccfbc9027..46f83b43251 100644 --- a/tmk_core/protocol/usb_device_state.c +++ b/tmk_core/protocol/usb_device_state.c @@ -78,7 +78,7 @@ void usb_device_state_set_protocol(usb_hid_protocol_t protocol) { notify_usb_device_state_change(usb_device_state); } -inline usb_hid_protocol_t usb_device_state_get_protocol() { +inline usb_hid_protocol_t usb_device_state_get_protocol(void) { return usb_device_state.protocol; } From e2c7d621a110310b48a111c2ff21bf3bebc7b7fa Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 30 Apr 2026 23:56:35 +0100 Subject: [PATCH 29/48] Add workaround for undefined reference to weak function under mingw (#26167) --- platforms/test/platform.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platforms/test/platform.mk b/platforms/test/platform.mk index f07c863e698..371ed49d60e 100644 --- a/platforms/test/platform.mk +++ b/platforms/test/platform.mk @@ -11,6 +11,10 @@ HEX = EEP = BIN = +# workaround for undefined reference to weak function under mingw +ifneq ($(findstring mingw, ${SYSTEM_TYPE}),) +LTO_ENABLE := yes +endif COMPILEFLAGS += -funsigned-char ifeq ($(findstring clang, ${GCC_VERSION}),) From 8d8cd1ca61398a25ede410c742b855a806e99045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Sun, 3 May 2026 11:06:27 +0800 Subject: [PATCH 30/48] Minor combo code optimisation (#26073) * Remove redundant index initialisation * Add early break for overlap scan * Remove dead no_combo_keys_pressed code * Avoid duplicate timer reset --- quantum/process_keycode/process_combo.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index dfab42e70d1..e567fed813c 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c @@ -200,9 +200,8 @@ static inline uint16_t _get_combo_term(uint16_t combo_index, combo_t *combo) { } void clear_combos(void) { - uint16_t index = 0; - longest_term = 0; - for (index = 0; index < combo_count(); ++index) { + longest_term = 0; + for (uint16_t index = 0; index < combo_count(); ++index) { combo_t *combo = combo_get(index); if (!COMBO_ACTIVE(combo)) { RESET_COMBO_STATE(combo); @@ -393,7 +392,10 @@ combo_t *overlaps(combo_t *combo1, combo_t *combo2) { while ((key1 = pgm_read_word(&combo1->keys[idx1])) != COMBO_END) { idx2 = 0; while ((key2 = pgm_read_word(&combo2->keys[idx2])) != COMBO_END) { - if (key1 == key2) overlaps = true; + if (key1 == key2) { + overlaps = true; + break; + } idx2 += 1; } idx1 += 1; @@ -556,8 +558,7 @@ static combo_key_action_t process_single_combo(combo_t *combo, uint16_t keycode, } bool process_combo(uint16_t keycode, keyrecord_t *record) { - uint8_t is_combo_key = COMBO_KEY_NOT_PRESSED; - bool no_combo_keys_pressed = true; + uint8_t is_combo_key = COMBO_KEY_NOT_PRESSED; if (keycode == QK_COMBO_ON && record->event.pressed) { combo_enable(); @@ -588,7 +589,6 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) { for (uint16_t idx = 0; idx < combo_count(); ++idx) { combo_t *combo = combo_get(idx); is_combo_key |= process_single_combo(combo, keycode, record, idx); - no_combo_keys_pressed = no_combo_keys_pressed && (NO_COMBO_KEYS_ARE_DOWN || COMBO_ACTIVE(combo) || COMBO_DISABLED(combo)); } if (record->event.pressed && is_combo_key) { @@ -641,12 +641,11 @@ void combo_task(void) { if (combo_buffer_read != combo_buffer_write) { apply_combos(); longest_term = 0; - timer = 0; } else { dump_key_buffer(); - timer = 0; clear_combos(); } + timer = 0; } #endif } From c9f942e43ce0ef683ef71627447082a9ef46a114 Mon Sep 17 00:00:00 2001 From: Kenneth Fossen Date: Sun, 3 May 2026 19:02:39 +0200 Subject: [PATCH 31/48] Add Handwired Bouvet Macropad (#26040) * Bouvet MacroPad v1 * Working macropad and encoders * Fix matrix, and custom keymap * The perfect developer keyboard * Move to handwired * Rev 1.1 * Move to handwired * Turn off debugging * Fix copyright * qmk lint * Update keyboard.json * cleanup * Update image * Move encoder config * Update keyboards/handwired/bouvet/macropad/v1/keyboard.json Co-authored-by: Joel Challis * Cleanup --------- Co-authored-by: Joel Challis --- .../bouvet/macropad/v1/keyboard.json | 51 +++++++++++++++++++ .../macropad/v1/keymaps/default/keymap.c | 19 +++++++ .../handwired/bouvet/macropad/v1/readme.md | 27 ++++++++++ 3 files changed, 97 insertions(+) create mode 100644 keyboards/handwired/bouvet/macropad/v1/keyboard.json create mode 100644 keyboards/handwired/bouvet/macropad/v1/keymaps/default/keymap.c create mode 100644 keyboards/handwired/bouvet/macropad/v1/readme.md diff --git a/keyboards/handwired/bouvet/macropad/v1/keyboard.json b/keyboards/handwired/bouvet/macropad/v1/keyboard.json new file mode 100644 index 00000000000..0492ef6c37d --- /dev/null +++ b/keyboards/handwired/bouvet/macropad/v1/keyboard.json @@ -0,0 +1,51 @@ +{ + "manufacturer": "Kenneth Fossen", + "keyboard_name": "Bouvet Macropad v1", + "maintainer": "spydx", + "development_board": "promicro", + "diode_direction": "COL2ROW", + "features": { + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["D7","E6","B4","B5"], + "rows": ["B1", "B3", "B2", "B6"] + }, + "encoders": { + "rotary": [ + {"pin_a": "C6", "pin_b": "D4"}, + {"pin_a": "F6", "pin_b": "F7"} + ] + }, + "url": "https://kefo.no", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3} + ] + } + } +} diff --git a/keyboards/handwired/bouvet/macropad/v1/keymaps/default/keymap.c b/keyboards/handwired/bouvet/macropad/v1/keymaps/default/keymap.c new file mode 100644 index 00000000000..74f3c9cded1 --- /dev/null +++ b/keyboards/handwired/bouvet/macropad/v1/keymaps/default/keymap.c @@ -0,0 +1,19 @@ +// Copyright 2026 Kenneth Fossen +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_MCTL, LCS(KC_TAB), C(KC_TAB), KC_MPLY, + KC_P4, KC_P5, KC_P6, KC_PAST, + KC_P1, KC_P2, KC_P3, KC_PENT, + LCMD(KC_C), LCMD(KC_V) + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } +}; +#endif diff --git a/keyboards/handwired/bouvet/macropad/v1/readme.md b/keyboards/handwired/bouvet/macropad/v1/readme.md new file mode 100644 index 00000000000..a913af88ad7 --- /dev/null +++ b/keyboards/handwired/bouvet/macropad/v1/readme.md @@ -0,0 +1,27 @@ +# bouvet/macropad/v1 + +![bouvet/macropad/v1](https://www.kefo.no/assets/macropad/macropad_v1.png) +Small macropad, with two rotary encoder buttons and 14 keys. +Optional OLED 128x16 screen, small learning and sharing project. + +* Keyboard Maintainer: [Kenneth Fossen](https://github.com/spydx) +* Hardware Supported: Bouvet Macropad +* Hardware Availability: [Shop](https://www.kefo.no/macropad) + +Make example for this keyboard (after setting up your build environment): + + make handwired/bouvet/macropad/v1:default + +Flashing example for this keyboard: + + make handwired/bouvet/macropad/v1:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available From 5db9f2fb41221ac74d64d9e63951d37645d0e217 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 7 May 2026 22:27:02 +0100 Subject: [PATCH 32/48] Remove `OLED_DISPLAY_128X32` config (#26190) --- keyboards/1upkeyboards/pi40/config.h | 1 - keyboards/bluebell/swoop/config.h | 1 - keyboards/buzzard/rev1/config.h | 4 ---- keyboards/fearherbs1/blue_team_pad/config.h | 1 - keyboards/handwired/onekey/kb2040/config.h | 1 - keyboards/jorne/keymaps/default/config.h | 2 -- keyboards/splitkb/aurora/corne/rev1/config.h | 1 - keyboards/splitkb/aurora/helix/rev1/config.h | 1 - keyboards/splitkb/aurora/lily58/rev1/config.h | 1 - keyboards/splitkb/aurora/sofle_v2/rev1/config.h | 1 - keyboards/splitkb/aurora/sweep/rev1/config.h | 1 - keyboards/zigotica/z12/keymaps/default/config.h | 2 -- 12 files changed, 17 deletions(-) diff --git a/keyboards/1upkeyboards/pi40/config.h b/keyboards/1upkeyboards/pi40/config.h index 627c0c5ddb0..c906bf30b13 100644 --- a/keyboards/1upkeyboards/pi40/config.h +++ b/keyboards/1upkeyboards/pi40/config.h @@ -3,7 +3,6 @@ #pragma once -#define OLED_DISPLAY_128X32 #define I2C1_SCL_PIN GP17 #define I2C1_SDA_PIN GP16 #define I2C_DRIVER I2CD0 diff --git a/keyboards/bluebell/swoop/config.h b/keyboards/bluebell/swoop/config.h index 48d63003252..0383809ae0c 100644 --- a/keyboards/bluebell/swoop/config.h +++ b/keyboards/bluebell/swoop/config.h @@ -19,6 +19,5 @@ // OLED driver #ifdef OLED_DRIVER_ENABLE - #define OLED_DISPLAY_128X32 #define OLED_TIMEOUT 30000 #endif diff --git a/keyboards/buzzard/rev1/config.h b/keyboards/buzzard/rev1/config.h index a040e92dfd5..4ea0610d8b4 100644 --- a/keyboards/buzzard/rev1/config.h +++ b/keyboards/buzzard/rev1/config.h @@ -3,10 +3,6 @@ #pragma once -#ifdef OLED_ENABLE -#define OLED_DISPLAY_128X32 -#endif - #ifdef PS2_DRIVER_INTERRUPT #define PS2_CLOCK_PIN E6 #define PS2_DATA_PIN D7 diff --git a/keyboards/fearherbs1/blue_team_pad/config.h b/keyboards/fearherbs1/blue_team_pad/config.h index 63b26f864d5..3c12da62903 100644 --- a/keyboards/fearherbs1/blue_team_pad/config.h +++ b/keyboards/fearherbs1/blue_team_pad/config.h @@ -7,6 +7,5 @@ #define I2C1_SCL_PIN GP27 #define I2C1_SDA_PIN GP26 #define I2C_DRIVER I2CD1 -#define OLED_DISPLAY_128X32 #define OLED_BRIGHTNESS 128 #endif diff --git a/keyboards/handwired/onekey/kb2040/config.h b/keyboards/handwired/onekey/kb2040/config.h index a9508bc4ccb..7ddc2ed5faa 100644 --- a/keyboards/handwired/onekey/kb2040/config.h +++ b/keyboards/handwired/onekey/kb2040/config.h @@ -11,7 +11,6 @@ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U // settings for the oled keyboard demo with Adafruit 0.91" OLED display on the Stemma QT port -#define OLED_DISPLAY_128X32 #define I2C_DRIVER I2CD0 #define I2C1_SDA_PIN GP12 #define I2C1_SCL_PIN GP13 diff --git a/keyboards/jorne/keymaps/default/config.h b/keyboards/jorne/keymaps/default/config.h index 2fb5ca4c4fc..3fa16d679aa 100644 --- a/keyboards/jorne/keymaps/default/config.h +++ b/keyboards/jorne/keymaps/default/config.h @@ -2,8 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define OLED_DISPLAY_128X32 - #ifdef RGBLIGHT_ENABLE #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD diff --git a/keyboards/splitkb/aurora/corne/rev1/config.h b/keyboards/splitkb/aurora/corne/rev1/config.h index 5a5910d81cd..4bcdc564ac3 100644 --- a/keyboards/splitkb/aurora/corne/rev1/config.h +++ b/keyboards/splitkb/aurora/corne/rev1/config.h @@ -18,6 +18,5 @@ // Not yet available in `info.json` #ifdef OLED_ENABLE -# define OLED_DISPLAY_128X32 # define SPLIT_OLED_ENABLE #endif diff --git a/keyboards/splitkb/aurora/helix/rev1/config.h b/keyboards/splitkb/aurora/helix/rev1/config.h index 522bea4d5e1..56e9763f787 100644 --- a/keyboards/splitkb/aurora/helix/rev1/config.h +++ b/keyboards/splitkb/aurora/helix/rev1/config.h @@ -16,5 +16,4 @@ #pragma once -#define OLED_DISPLAY_128X32 #define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/aurora/lily58/rev1/config.h b/keyboards/splitkb/aurora/lily58/rev1/config.h index 5a5910d81cd..4bcdc564ac3 100644 --- a/keyboards/splitkb/aurora/lily58/rev1/config.h +++ b/keyboards/splitkb/aurora/lily58/rev1/config.h @@ -18,6 +18,5 @@ // Not yet available in `info.json` #ifdef OLED_ENABLE -# define OLED_DISPLAY_128X32 # define SPLIT_OLED_ENABLE #endif diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h b/keyboards/splitkb/aurora/sofle_v2/rev1/config.h index 522bea4d5e1..56e9763f787 100644 --- a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h +++ b/keyboards/splitkb/aurora/sofle_v2/rev1/config.h @@ -16,5 +16,4 @@ #pragma once -#define OLED_DISPLAY_128X32 #define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/aurora/sweep/rev1/config.h b/keyboards/splitkb/aurora/sweep/rev1/config.h index 5a5910d81cd..4bcdc564ac3 100644 --- a/keyboards/splitkb/aurora/sweep/rev1/config.h +++ b/keyboards/splitkb/aurora/sweep/rev1/config.h @@ -18,6 +18,5 @@ // Not yet available in `info.json` #ifdef OLED_ENABLE -# define OLED_DISPLAY_128X32 # define SPLIT_OLED_ENABLE #endif diff --git a/keyboards/zigotica/z12/keymaps/default/config.h b/keyboards/zigotica/z12/keymaps/default/config.h index 1fcf924f353..a199d94aeed 100644 --- a/keyboards/zigotica/z12/keymaps/default/config.h +++ b/keyboards/zigotica/z12/keymaps/default/config.h @@ -16,8 +16,6 @@ along with this program. If not, see . #pragma once -#define OLED_DISPLAY_128X32 - // EC11 encoders' resolution. // Reduce the value to 2 if you feel missing values: #define ENCODER_RESOLUTION 4 From a498daf6277b334f5bc71ba0b51f991bc4d67beb Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 7 May 2026 22:32:38 +0100 Subject: [PATCH 33/48] Migrate SPLIT_OLED_ENABLE (#26194) --- keyboards/splitkb/aurora/corne/rev1/config.h | 22 ------------------- .../splitkb/aurora/corne/rev1/keyboard.json | 3 ++- keyboards/splitkb/aurora/helix/rev1/config.h | 19 ---------------- .../splitkb/aurora/helix/rev1/keyboard.json | 5 +++++ keyboards/splitkb/aurora/lily58/rev1/config.h | 22 ------------------- .../splitkb/aurora/lily58/rev1/keyboard.json | 3 ++- .../splitkb/aurora/sofle_v2/rev1/config.h | 19 ---------------- .../aurora/sofle_v2/rev1/keyboard.json | 5 +++++ keyboards/splitkb/aurora/sweep/rev1/config.h | 22 ------------------- .../splitkb/aurora/sweep/rev1/keyboard.json | 3 ++- keyboards/splitkb/elora/rev1/config.h | 2 -- keyboards/splitkb/elora/rev1/keyboard.json | 3 ++- keyboards/splitkb/kyria/rev1/config.h | 1 - keyboards/splitkb/kyria/rev1/info.json | 3 ++- keyboards/splitkb/kyria/rev2/config.h | 1 - keyboards/splitkb/kyria/rev2/info.json | 3 ++- keyboards/splitkb/kyria/rev3/config.h | 1 - keyboards/splitkb/kyria/rev3/keyboard.json | 3 ++- 18 files changed, 24 insertions(+), 116 deletions(-) delete mode 100644 keyboards/splitkb/aurora/corne/rev1/config.h delete mode 100644 keyboards/splitkb/aurora/helix/rev1/config.h delete mode 100644 keyboards/splitkb/aurora/lily58/rev1/config.h delete mode 100644 keyboards/splitkb/aurora/sofle_v2/rev1/config.h delete mode 100644 keyboards/splitkb/aurora/sweep/rev1/config.h diff --git a/keyboards/splitkb/aurora/corne/rev1/config.h b/keyboards/splitkb/aurora/corne/rev1/config.h deleted file mode 100644 index 4bcdc564ac3..00000000000 --- a/keyboards/splitkb/aurora/corne/rev1/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2022 splitkb.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// Not yet available in `info.json` -#ifdef OLED_ENABLE -# define SPLIT_OLED_ENABLE -#endif diff --git a/keyboards/splitkb/aurora/corne/rev1/keyboard.json b/keyboards/splitkb/aurora/corne/rev1/keyboard.json index 40983ec28d5..9cbc2065ba1 100644 --- a/keyboards/splitkb/aurora/corne/rev1/keyboard.json +++ b/keyboards/splitkb/aurora/corne/rev1/keyboard.json @@ -103,7 +103,8 @@ }, "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, diff --git a/keyboards/splitkb/aurora/helix/rev1/config.h b/keyboards/splitkb/aurora/helix/rev1/config.h deleted file mode 100644 index 56e9763f787..00000000000 --- a/keyboards/splitkb/aurora/helix/rev1/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2023 splitkb.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/aurora/helix/rev1/keyboard.json b/keyboards/splitkb/aurora/helix/rev1/keyboard.json index 5921ec4af9b..3091bf9407c 100644 --- a/keyboards/splitkb/aurora/helix/rev1/keyboard.json +++ b/keyboards/splitkb/aurora/helix/rev1/keyboard.json @@ -129,6 +129,11 @@ }, "serial": { "pin": "D2" + }, + "transport": { + "sync": { + "oled": true + } } }, "usb": { diff --git a/keyboards/splitkb/aurora/lily58/rev1/config.h b/keyboards/splitkb/aurora/lily58/rev1/config.h deleted file mode 100644 index 4bcdc564ac3..00000000000 --- a/keyboards/splitkb/aurora/lily58/rev1/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2022 splitkb.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// Not yet available in `info.json` -#ifdef OLED_ENABLE -# define SPLIT_OLED_ENABLE -#endif diff --git a/keyboards/splitkb/aurora/lily58/rev1/keyboard.json b/keyboards/splitkb/aurora/lily58/rev1/keyboard.json index 60645f9deb4..74e30126fcb 100644 --- a/keyboards/splitkb/aurora/lily58/rev1/keyboard.json +++ b/keyboards/splitkb/aurora/lily58/rev1/keyboard.json @@ -114,7 +114,8 @@ }, "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h b/keyboards/splitkb/aurora/sofle_v2/rev1/config.h deleted file mode 100644 index 56e9763f787..00000000000 --- a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2023 splitkb.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/keyboard.json b/keyboards/splitkb/aurora/sofle_v2/rev1/keyboard.json index 6c72888b101..70dcae5aa69 100644 --- a/keyboards/splitkb/aurora/sofle_v2/rev1/keyboard.json +++ b/keyboards/splitkb/aurora/sofle_v2/rev1/keyboard.json @@ -123,6 +123,11 @@ }, "serial": { "pin": "D2" + }, + "transport": { + "sync": { + "oled": true + } } }, "usb": { diff --git a/keyboards/splitkb/aurora/sweep/rev1/config.h b/keyboards/splitkb/aurora/sweep/rev1/config.h deleted file mode 100644 index 4bcdc564ac3..00000000000 --- a/keyboards/splitkb/aurora/sweep/rev1/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2022 splitkb.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// Not yet available in `info.json` -#ifdef OLED_ENABLE -# define SPLIT_OLED_ENABLE -#endif diff --git a/keyboards/splitkb/aurora/sweep/rev1/keyboard.json b/keyboards/splitkb/aurora/sweep/rev1/keyboard.json index e90995b2071..69f1074ad2d 100644 --- a/keyboards/splitkb/aurora/sweep/rev1/keyboard.json +++ b/keyboards/splitkb/aurora/sweep/rev1/keyboard.json @@ -100,7 +100,8 @@ }, "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, diff --git a/keyboards/splitkb/elora/rev1/config.h b/keyboards/splitkb/elora/rev1/config.h index 7633cf00aff..a18edb28425 100644 --- a/keyboards/splitkb/elora/rev1/config.h +++ b/keyboards/splitkb/elora/rev1/config.h @@ -55,6 +55,4 @@ // including some code in rev1.c but makes // it so the timeout's are not synced // between halves. -#undef SPLIT_OLED_ENABLE #define OLED_TIMEOUT 0 - diff --git a/keyboards/splitkb/elora/rev1/keyboard.json b/keyboards/splitkb/elora/rev1/keyboard.json index 7996fdccb97..a7921c4e1f0 100644 --- a/keyboards/splitkb/elora/rev1/keyboard.json +++ b/keyboards/splitkb/elora/rev1/keyboard.json @@ -91,7 +91,8 @@ }, "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true }, "watchdog": true, "watchdog_timeout": 3000 diff --git a/keyboards/splitkb/kyria/rev1/config.h b/keyboards/splitkb/kyria/rev1/config.h index 615d93496dd..f20ce9a11a6 100644 --- a/keyboards/splitkb/kyria/rev1/config.h +++ b/keyboards/splitkb/kyria/rev1/config.h @@ -18,4 +18,3 @@ along with this program. If not, see . #pragma once #define OLED_DISPLAY_128X64 -#define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/kyria/rev1/info.json b/keyboards/splitkb/kyria/rev1/info.json index 54758180fa4..5dc88760601 100644 --- a/keyboards/splitkb/kyria/rev1/info.json +++ b/keyboards/splitkb/kyria/rev1/info.json @@ -48,7 +48,8 @@ "split": { "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, diff --git a/keyboards/splitkb/kyria/rev2/config.h b/keyboards/splitkb/kyria/rev2/config.h index fb9e7bb9590..df50b21b94a 100644 --- a/keyboards/splitkb/kyria/rev2/config.h +++ b/keyboards/splitkb/kyria/rev2/config.h @@ -22,4 +22,3 @@ along with this program. If not, see . #define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `rev2.c` #define OLED_DISPLAY_128X64 -#define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/kyria/rev2/info.json b/keyboards/splitkb/kyria/rev2/info.json index 41c55cc0257..5da17b48c02 100644 --- a/keyboards/splitkb/kyria/rev2/info.json +++ b/keyboards/splitkb/kyria/rev2/info.json @@ -48,7 +48,8 @@ "split": { "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, diff --git a/keyboards/splitkb/kyria/rev3/config.h b/keyboards/splitkb/kyria/rev3/config.h index 3f731859fcd..2bfa92b310a 100644 --- a/keyboards/splitkb/kyria/rev3/config.h +++ b/keyboards/splitkb/kyria/rev3/config.h @@ -17,4 +17,3 @@ #pragma once #define OLED_DISPLAY_128X64 -#define SPLIT_OLED_ENABLE diff --git a/keyboards/splitkb/kyria/rev3/keyboard.json b/keyboards/splitkb/kyria/rev3/keyboard.json index 580aa821dbe..2c40ac4572b 100644 --- a/keyboards/splitkb/kyria/rev3/keyboard.json +++ b/keyboards/splitkb/kyria/rev3/keyboard.json @@ -116,7 +116,8 @@ }, "transport": { "sync": { - "matrix_state": true + "matrix_state": true, + "oled": true } } }, From 1a56fbece266337b0f0efe5262f4d36bff997f7a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 7 May 2026 22:33:31 +0100 Subject: [PATCH 34/48] Fix `USER_PRINT` stripping out `uprintf` (#25919) --- platforms/avr/_print.h | 6 ++++++ quantum/logging/print.h | 42 ++++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/platforms/avr/_print.h b/platforms/avr/_print.h index bf8247c2f3a..7a6ff65d427 100644 --- a/platforms/avr/_print.h +++ b/platforms/avr/_print.h @@ -24,3 +24,9 @@ #pragma once #include "avr/xprintf.h" + +// TODO: Remove xprintf due to conflicts/assumptions on direct library usage +#undef xprintf + +// Export main print function +#define print_printf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__) diff --git a/quantum/logging/print.h b/quantum/logging/print.h index 984bc10758b..ffb32a046ea 100644 --- a/quantum/logging/print.h +++ b/quantum/logging/print.h @@ -30,8 +30,26 @@ #include "sendchar.h" #include "progmem.h" +/** + * @brief Configure the destination for routing all log data to. + */ void print_set_sendchar(sendchar_func_t func); +/** + * @def print_printf(fmt, ...) + * @brief Low-level logging entrypoint - should not be called directly + */ +#ifndef NO_PRINT +# if __has_include_next("_print.h") +# include_next "_print.h" // Include the platforms print.h - must export print_printf +# else +# include "printf.h" // Fall back to lib/printf/printf.h +# define print_printf printf +# endif +#else +# define print_printf(fmt, ...) // Remove ALL print defines +#endif + /** * @brief This macro suppress format warnings for the function that is passed * in. The main use-case is that `b` format specifier for printing binary @@ -48,26 +66,10 @@ void print_set_sendchar(sendchar_func_t func); _Pragma("GCC diagnostic pop"); \ } while (0) -#ifndef NO_PRINT -# if __has_include_next("_print.h") -# include_next "_print.h" /* Include the platforms print.h */ -# else -# include "printf.h" // // Fall back to lib/printf/printf.h -# define xprintf printf -# endif -#else -// Remove print defines -# undef xprintf -# define xprintf(fmt, ...) -#endif - -// Resolve before USER_PRINT can remove -#define uprintf xprintf - #ifdef USER_PRINT -// Remove normal print defines -# undef xprintf -# define xprintf(fmt, ...) +# define xprintf(fmt, ...) // Remove normal print defines +#else +# define xprintf print_printf #endif #define print(s) xprintf(s) @@ -108,6 +110,8 @@ void print_set_sendchar(sendchar_func_t func); // // !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!! +#define uprintf print_printf + #define uprint(s) uprintf(s) #define uprintln(s) uprintf(s "\r\n") From 2b88b7b20ab44b21a181918f455a3bbffd0a95b1 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 9 May 2026 11:10:34 +0100 Subject: [PATCH 35/48] Ignore Uninteresting test warnings during test teardown (#26161) --- tests/test_common/test_fixture.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_common/test_fixture.cpp b/tests/test_common/test_fixture.cpp index 00084721d6c..ed57d9e109e 100644 --- a/tests/test_common/test_fixture.cpp +++ b/tests/test_common/test_fixture.cpp @@ -65,7 +65,7 @@ TestFixture::TestFixture() { TestFixture::~TestFixture() { test_logger.info() << "test fixture clean-up start." << std::endl; - TestDriver driver; + ::testing::NiceMock driver; /* Reset keyboard state. */ clear_all_keys(); From ce4f342ceb64d0e1083bc4275796eae5df85322f Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 16 May 2026 02:27:19 +0100 Subject: [PATCH 36/48] Remove FORCE_NKRO (#26206) --- data/mappings/info_config.hjson | 2 +- docs/getting_started_make_guide.md | 2 +- keyboards/adkb96/keymaps/default/config.h | 25 ------------------- keyboards/adkb96/rev1/keyboard.json | 5 ++++ .../bear_face/v1/keymaps/default/readme.md | 1 - .../bear_face/v2/keymaps/default/readme.md | 1 - .../v2/keymaps/default_iso/readme.md | 1 - .../bear_face/v3/keymaps/default/readme.md | 1 - .../v3/keymaps/default_iso/readme.md | 1 - .../ergodox_ez/keymaps/rgb_layer/config.h | 2 +- keyboards/eternal_keypad/keyboard.json | 5 ++++ .../eternal_keypad/keymaps/default/config.h | 1 - keyboards/handwired/k8split/keyboard.json | 5 ++++ .../handwired/k8split/keymaps/left/config.h | 21 ---------------- .../handwired/k8split/keymaps/right/config.h | 21 ---------------- quantum/keyboard.c | 5 ---- 16 files changed, 18 insertions(+), 81 deletions(-) delete mode 100644 keyboards/adkb96/keymaps/default/config.h delete mode 100644 keyboards/handwired/k8split/keymaps/left/config.h delete mode 100644 keyboards/handwired/k8split/keymaps/right/config.h diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index cd4a127844f..1816124df07 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -269,9 +269,9 @@ "PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"}, "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"}, "VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.vid` in info.json"}, - "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag", "deprecated": true, "replace_with": "`host.default.nkro` in info.json"}, // Items we want flagged in lint + "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag", "invalid": true, "replace_with": "`host.default.nkro` in info.json"}, "VIAL_KEYBOARD_UID": {"info_key": "_invalid.vial_uid", "invalid": true}, "VIAL_UNLOCK_COMBO_COLS": {"info_key": "_invalid.vial_unlock_cols", "invalid": true}, "VIAL_UNLOCK_COMBO_ROWS": {"info_key": "_invalid.vial_unlock_rows", "invalid": true} diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md index 54f915e444c..c615b6ecab9 100644 --- a/docs/getting_started_make_guide.md +++ b/docs/getting_started_make_guide.md @@ -91,7 +91,7 @@ Enables your LED to breath while your computer is sleeping. Timer1 is being used `NKRO_ENABLE` -This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if `NKRO_ENABLE` is set. NKRO can be forced by adding `#define FORCE_NKRO` to your config.h or by binding `MAGIC_TOGGLE_NKRO` to a key and then hitting the key. +This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if `NKRO_ENABLE` is set. NKRO can be toggled by binding `NK_TOGG` to a key and then hitting the key. `BACKLIGHT_ENABLE` diff --git a/keyboards/adkb96/keymaps/default/config.h b/keyboards/adkb96/keymaps/default/config.h deleted file mode 100644 index a1c18568bed..00000000000 --- a/keyboards/adkb96/keymaps/default/config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -//#define USE_I2C - -#define FORCE_NKRO diff --git a/keyboards/adkb96/rev1/keyboard.json b/keyboards/adkb96/rev1/keyboard.json index 3c0c757c05e..c359dfdce1d 100644 --- a/keyboards/adkb96/rev1/keyboard.json +++ b/keyboards/adkb96/rev1/keyboard.json @@ -14,6 +14,11 @@ "command": true, "nkro": true }, + "host": { + "default": { + "nkro": true + } + }, "qmk": { "locking": { "enabled": true, diff --git a/keyboards/bear_face/v1/keymaps/default/readme.md b/keyboards/bear_face/v1/keymaps/default/readme.md index 5f9e635dfec..26e504d62d1 100644 --- a/keyboards/bear_face/v1/keymaps/default/readme.md +++ b/keyboards/bear_face/v1/keymaps/default/readme.md @@ -4,7 +4,6 @@ This layout replaces the stock layout on the Vortex Race 3. - Caps Lock indicator LED is enabled by default - Layer Tap on Caps Lock (tap for Caps Lock, hold for _FN1) -- FORCE_NKRO enabled by default - Pn key is set to 'KC_NO' by default * Might be a good place for a macro, or to put your PC to sleep, etc. diff --git a/keyboards/bear_face/v2/keymaps/default/readme.md b/keyboards/bear_face/v2/keymaps/default/readme.md index 517baa5726c..65e01e0d026 100644 --- a/keyboards/bear_face/v2/keymaps/default/readme.md +++ b/keyboards/bear_face/v2/keymaps/default/readme.md @@ -4,7 +4,6 @@ This layout replaces the stock layout on the Vortex Race 3. - Caps Lock indicator LED is enabled by default - Layer Tap on Caps Lock (tap for Caps Lock, hold for _FN1) -- FORCE_NKRO enabled by default - Pn key is set to 'KC_NO' by default * Might be a good place for a macro, or to put your PC to sleep, etc. diff --git a/keyboards/bear_face/v2/keymaps/default_iso/readme.md b/keyboards/bear_face/v2/keymaps/default_iso/readme.md index 517baa5726c..65e01e0d026 100644 --- a/keyboards/bear_face/v2/keymaps/default_iso/readme.md +++ b/keyboards/bear_face/v2/keymaps/default_iso/readme.md @@ -4,7 +4,6 @@ This layout replaces the stock layout on the Vortex Race 3. - Caps Lock indicator LED is enabled by default - Layer Tap on Caps Lock (tap for Caps Lock, hold for _FN1) -- FORCE_NKRO enabled by default - Pn key is set to 'KC_NO' by default * Might be a good place for a macro, or to put your PC to sleep, etc. diff --git a/keyboards/bear_face/v3/keymaps/default/readme.md b/keyboards/bear_face/v3/keymaps/default/readme.md index a86b77bb191..f648e0b735e 100644 --- a/keyboards/bear_face/v3/keymaps/default/readme.md +++ b/keyboards/bear_face/v3/keymaps/default/readme.md @@ -4,7 +4,6 @@ This layout replaces the stock layout on the Vortex Race 3. - Caps Lock indicator LED is enabled by default - Layer Tap on Caps Lock (tap for Caps Lock, hold for _FN1) -- FORCE_NKRO enabled by default - Pn key is set to 'KC_NO' by default * Might be a good place for a macro, or to put your PC to sleep, etc. diff --git a/keyboards/bear_face/v3/keymaps/default_iso/readme.md b/keyboards/bear_face/v3/keymaps/default_iso/readme.md index a86b77bb191..f648e0b735e 100644 --- a/keyboards/bear_face/v3/keymaps/default_iso/readme.md +++ b/keyboards/bear_face/v3/keymaps/default_iso/readme.md @@ -4,7 +4,6 @@ This layout replaces the stock layout on the Vortex Race 3. - Caps Lock indicator LED is enabled by default - Layer Tap on Caps Lock (tap for Caps Lock, hold for _FN1) -- FORCE_NKRO enabled by default - Pn key is set to 'KC_NO' by default * Might be a good place for a macro, or to put your PC to sleep, etc. diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h index edd1f130ccd..7623e37e730 100644 --- a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h +++ b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h @@ -8,7 +8,7 @@ #undef PERMISSIVE_HOLD -#define FORCE_NKRO +#define NKRO_DEFAULT_ON true #ifndef TAPPING_TOGGLE #define TAPPING_TOGGLE 1 diff --git a/keyboards/eternal_keypad/keyboard.json b/keyboards/eternal_keypad/keyboard.json index 1951c7fa099..97421204ff3 100644 --- a/keyboards/eternal_keypad/keyboard.json +++ b/keyboards/eternal_keypad/keyboard.json @@ -15,6 +15,11 @@ "nkro": true, "rgblight": true }, + "host": { + "default": { + "nkro": true + } + }, "qmk": { "locking": { "enabled": true, diff --git a/keyboards/eternal_keypad/keymaps/default/config.h b/keyboards/eternal_keypad/keymaps/default/config.h index 36ab46334c0..58be405e6bd 100644 --- a/keyboards/eternal_keypad/keymaps/default/config.h +++ b/keyboards/eternal_keypad/keymaps/default/config.h @@ -16,4 +16,3 @@ #pragma once #define ONESHOT_TIMEOUT 2000 -#define FORCE_NKRO diff --git a/keyboards/handwired/k8split/keyboard.json b/keyboards/handwired/k8split/keyboard.json index 2312d43689b..b69f91a8019 100644 --- a/keyboards/handwired/k8split/keyboard.json +++ b/keyboards/handwired/k8split/keyboard.json @@ -13,6 +13,11 @@ "mousekey": true, "nkro": true }, + "host": { + "default": { + "nkro": true + } + }, "matrix_pins": { "cols": ["C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"], "rows": ["D5", "D3", "D2", "D1", "D0", "B7"] diff --git a/keyboards/handwired/k8split/keymaps/left/config.h b/keyboards/handwired/k8split/keymaps/left/config.h deleted file mode 100644 index 968a6eb413c..00000000000 --- a/keyboards/handwired/k8split/keymaps/left/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2020 Ckat - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* ensure NKRO is on */ -#define FORCE_NKRO diff --git a/keyboards/handwired/k8split/keymaps/right/config.h b/keyboards/handwired/k8split/keymaps/right/config.h deleted file mode 100644 index 968a6eb413c..00000000000 --- a/keyboards/handwired/k8split/keymaps/right/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2020 Ckat - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* ensure NKRO is on */ -#define FORCE_NKRO diff --git a/quantum/keyboard.c b/quantum/keyboard.c index debd3caf5c0..5a80facf57f 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -510,11 +510,6 @@ void keyboard_init(void) { #ifdef STENO_ENABLE_ALL steno_init(); #endif -#if defined(NKRO_ENABLE) && defined(FORCE_NKRO) -# pragma message "FORCE_NKRO option is now deprecated - Please migrate to NKRO_DEFAULT_ON instead." - keymap_config.nkro = 1; - eeconfig_update_keymap(&keymap_config); -#endif #ifdef DIP_SWITCH_ENABLE dip_switch_init(); #endif From 0efd817f42ba131debdbc193e16b609391d48c75 Mon Sep 17 00:00:00 2001 From: Serge Baranov Date: Sat, 16 May 2026 16:14:52 -0700 Subject: [PATCH 37/48] fix(ws2812-pwm): allow WS2812_PWM_TICK_FREQUENCY override (#26186) Wrap the define in #ifndef so a keyboard's config.h can set it. The default (CPU_CLOCK / 2) works for a fixed SYSCLK, but boards that change SYSCLK at runtime (meletrix/zoom_tkl drops to 16 MHz on battery) need a tick frequency that divides into both the high and low TMRCLKs. Every other knob in the file is already #ifndef-guarded; this one was the only flat #define. --- platforms/chibios/drivers/ws2812_pwm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c index 0fc20b3f277..144f6e13880 100644 --- a/platforms/chibios/drivers/ws2812_pwm.c +++ b/platforms/chibios/drivers/ws2812_pwm.c @@ -89,7 +89,9 @@ /* --- PRIVATE CONSTANTS ---------------------------------------------------- */ -#define WS2812_PWM_TICK_FREQUENCY (CPU_CLOCK / 2) /**< Clock frequency of PWM ticks, must be valid with respect to system clock! */ +#ifndef WS2812_PWM_TICK_FREQUENCY +# define WS2812_PWM_TICK_FREQUENCY (CPU_CLOCK / 2) /**< Clock frequency of PWM ticks, must be valid with respect to system clock! */ +#endif #define WS2812_PWM_PERIOD (WS2812_PWM_TICK_FREQUENCY / WS2812_PWM_FREQUENCY) /**< Clock period in PWM ticks. */ /** From cf2dcd6e247b074feb85669e969b390005cd73c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Fri, 22 May 2026 07:57:44 +0200 Subject: [PATCH 38/48] Add usage clarifications to docs/features/unicode.md (#26156) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add usage clarifications to docs/features/unicode.md * Apply suggestions from code review Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com> --------- Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com> --- docs/features/unicode.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/features/unicode.md b/docs/features/unicode.md index feea479492a..a19f11a52e9 100644 --- a/docs/features/unicode.md +++ b/docs/features/unicode.md @@ -8,9 +8,9 @@ There are some limitations to this feature. Because there is no "standard" metho ## Usage {#usage} -The core Unicode API can be used purely programmatically. However, there are also additional subsystems which build on top of it and come with keycodes to make things easier. See below for more details. +The core Unicode API can be used purely programmatically. However, there are also additional subsystems which build on top of it and come with keycodes to make things easier. See [below](#input-subsystems) for more details. -Add the following to your keymap's `rules.mk`: +To start, add the following to your keymap's `rules.mk`: ```make UNICODE_COMMON = yes @@ -18,7 +18,7 @@ UNICODE_COMMON = yes ## Basic Configuration {#basic-configuration} -Add the following to your `config.h`: +The following options can be set or overridden in your `config.h`: |Define |Default |Description | |------------------------|------------------|--------------------------------------------------------------------------------| @@ -29,11 +29,14 @@ Add the following to your `config.h`: |`UNICODE_CYCLE_PERSIST` |`true` |Whether to persist the current Unicode input mode to EEPROM | |`UNICODE_TYPE_DELAY` |`10` |The amount of time to wait, in milliseconds, between Unicode sequence keystrokes| +The default values work well for most use cases, so users usually only need to define `UNICODE_SELECTED_MODES` to set their desired input modes. +However, if you plan on switching input modes manually (see [keycodes](#keycodes) below) and don't plan on cycling through them, this definition can be omitted. + ### Audio Feedback {#audio-feedback} If you have the [Audio](audio) feature enabled on your board, you can configure it to play sounds when the input mode is changed. -Add the following to your `config.h`: +Add one or more of the following definitions to your `config.h`: |Define |Default|Description | |-------------------|-------|-----------------------------------------------------------| From 9d47119457fac9a8c3efec32aef703be94280aca Mon Sep 17 00:00:00 2001 From: Pascal Getreuer <50221757+getreuer@users.noreply.github.com> Date: Fri, 22 May 2026 14:50:52 -0700 Subject: [PATCH 39/48] [Core] Options to constrain Speculative Hold: `SPECULATIVE_HOLD_ONE_KEY` and `SPECULATIVE_HOLD_FLOW_TERM`. (#26099) --- data/mappings/info_config.hjson | 2 + data/schemas/keyboard.jsonschema | 4 + docs/tap_hold.md | 25 ++- quantum/action.c | 4 +- quantum/action_tapping.c | 27 ++- quantum/action_tapping.h | 8 +- .../speculative_hold_flow_term/config.h | 23 +++ .../speculative_hold_flow_term/test.mk | 16 ++ .../test_tap_hold.cpp | 195 ++++++++++++++++++ .../speculative_hold_one_key/config.h | 24 +++ .../speculative_hold_one_key/test.mk | 16 ++ .../test_tap_hold.cpp | 189 +++++++++++++++++ tests/test_common/keyboard_report_util.hpp | 4 + 13 files changed, 525 insertions(+), 12 deletions(-) create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test.mk create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test_tap_hold.cpp create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test.mk create mode 100644 tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test_tap_hold.cpp diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 1816124df07..8b08f2e45d3 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -225,6 +225,8 @@ "RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "flag"}, "RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "flag"}, "SPECULATIVE_HOLD": {"info_key": "tapping.speculative_hold", "value_type": "flag"}, + "SPECULATIVE_HOLD_FLOW_TERM": {"info_key": "tapping.speculative_hold_flow_term", "value_type": "int"}, + "SPECULATIVE_HOLD_ONE_KEY": {"info_key": "tapping.speculative_hold_one_key", "value_type": "flag"}, "TAP_CODE_DELAY": {"info_key": "qmk.tap_keycode_delay", "value_type": "int"}, "TAP_HOLD_CAPS_DELAY": {"info_key": "qmk.tap_capslock_delay", "value_type": "int"}, "TAPPING_TERM": {"info_key": "tapping.term", "value_type": "int"}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index c0647494ac0..ef2b4802a40 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -993,6 +993,7 @@ "type": "object", "properties": { "chordal_hold": {"type": "boolean"}, + "flow_tap_term": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "force_hold": {"type": "boolean"}, "force_hold_per_key": {"type": "boolean"}, "ignore_mod_tap_interrupt": {"type": "boolean"}, @@ -1002,6 +1003,9 @@ "permissive_hold_per_key": {"type": "boolean"}, "retro": {"type": "boolean"}, "retro_per_key": {"type": "boolean"}, + "speculative_hold": {"type": "boolean"}, + "speculative_hold_flow_term": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "speculative_hold_one_key": {"type": "boolean"}, "term": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "term_per_key": {"type": "boolean"}, "toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"} diff --git a/docs/tap_hold.md b/docs/tap_hold.md index 3e88a7a5c23..8fe81cfe1d4 100644 --- a/docs/tap_hold.md +++ b/docs/tap_hold.md @@ -824,7 +824,30 @@ bool get_speculative_hold(uint16_t keycode, keyrecord_t* record) { } ``` -Some operating systems or applications assign actions to tapping a modifier key by itself, e.g., tapping GUI to open a start menu. Because Speculative Hold sends a lone modifier key press in some cases, it can falsely trigger these actions. To prevent this, set `DUMMY_MOD_NEUTRALIZER_KEYCODE` (and optionally `MODS_TO_NEUTRALIZE`) in your `config.h` in the same way as described above for [Retro Tapping](#retro-tapping). +Some operating systems or applications assign actions to tapping a modifier key by itself, e.g., tapping GUI to open a start menu. Because Speculative Hold sometimes sends a lone modifier key press, it can falsely trigger these actions (known as the "flashing mods" problem). How such an input is handled depends on the OS and application, so unfortunately, there is no universal solution. + +To mitigate this issue, you can set `DUMMY_MOD_NEUTRALIZER_KEYCODE` (and optionally `MODS_TO_NEUTRALIZE`) in your `config.h`, as described above for [Retro Tapping](#retro-tapping). + +You can further prevent flashing mods by restricting when Speculative Hold is allowed to trigger. There are several options for this: + +* Constrain Speculative Hold to one key at a time. Add to your config.h: + + ```c + #define SPECULATIVE_HOLD_ONE_KEY + ``` + + With this option, Speculative Hold does not apply when any mods are already active. Mod combinations across multiple keys can still be made after the mod-tap keys settle. + +* Disable Speculative Hold during the flow of fast typing. Add to your config.h: + + ```c + #define SPECULATIVE_HOLD_FLOW_TERM 200 + ``` + + This value specifies a duration in milliseconds. Speculative Hold does not apply if a key is pressed within this threshold of the previous key. The effect is similar to [Flow Tap](#flow-tap); however, `SPECULATIVE_HOLD_FLOW_TERM` only restricts when speculation is allowed, without affecting how the key settles. + +* Use the Flow Tap option. In the fast flow of typing, the mod-tap key is immediately settled, and therefore no speculation occurs. See [Flow Tap](#flow-tap) for details. + ## Why do we include the key record for the per key functions? diff --git a/quantum/action.c b/quantum/action.c index aacafbe2ffb..827defcb45c 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -286,9 +286,9 @@ void process_record(keyrecord_t *record) { speculative_key_settled(record); } #endif // SPECULATIVE_HOLD -#ifdef FLOW_TAP_TERM +#if defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) flow_tap_update_last_event(record); -#endif // FLOW_TAP_TERM +#endif // defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) if (!process_record_quantum(record)) { #ifndef NO_ACTION_ONESHOT diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c index 6baf7721ad5..d8069917b44 100644 --- a/quantum/action_tapping.c +++ b/quantum/action_tapping.c @@ -119,11 +119,13 @@ __attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyreco # include "process_auto_shift.h" # endif -# if defined(FLOW_TAP_TERM) +# if defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) static uint16_t flow_tap_prev_keycode = KC_NO; static uint16_t flow_tap_prev_time = 0; static bool flow_tap_expired = true; +# endif // defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) +# if defined(FLOW_TAP_TERM) static bool flow_tap_key_if_within_term(keyrecord_t *record, uint16_t prev_time); # endif // defined(FLOW_TAP_TERM) @@ -191,11 +193,11 @@ void action_tapping_process(keyrecord_t record) { if (IS_EVENT(record.event)) { ac_dprintf("\n"); } else { -# ifdef FLOW_TAP_TERM +# if defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) if (!flow_tap_expired && TIMER_DIFF_16(record.event.time, flow_tap_prev_time) >= INT16_MAX / 2) { flow_tap_expired = true; } -# endif // FLOW_TAP_TERM +# endif // defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) } } @@ -770,17 +772,28 @@ static void speculative_key_press(keyrecord_t *record) { if (speculative_keys_find(record->event.key) < num_speculative_keys) { return; // Don't trigger: key is already in speculative_keys. } +# ifdef SPECULATIVE_HOLD_FLOW_TERM + if (!flow_tap_expired && TIMER_DIFF_16(record->event.time, flow_tap_prev_time) <= SPECULATIVE_HOLD_FLOW_TERM) { + return; // Don't trigger: within flow term of previous key. + } +# endif // SPECULATIVE_HOLD_FLOW_TERM const uint16_t keycode = get_record_keycode(record, false); if (!IS_QK_MOD_TAP(keycode)) { return; // Don't trigger: not a mod-tap key. } - uint8_t mods = mod_config(QK_MOD_TAP_GET_MODS(keycode)); + uint8_t mods = mod_config(QK_MOD_TAP_GET_MODS(keycode)); + const uint8_t active_mods = get_mods() | speculative_mods; +# ifdef SPECULATIVE_HOLD_ONE_KEY + if (active_mods != 0) { + return; // Don't trigger: some mod is already active. + } +# endif // SPECULATIVE_HOLD_ONE_KEY if ((mods & 0x10) != 0) { // Unpack 5-bit mods to 8-bit representation. mods <<= 4; } - if ((~(get_mods() | speculative_mods) & mods) == 0) { + if ((~active_mods & mods) == 0) { return; // Don't trigger: mods are already active. } @@ -988,7 +1001,7 @@ static void waiting_buffer_process_regular(void) { } # endif // CHORDAL_HOLD -# ifdef FLOW_TAP_TERM +# if defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) void flow_tap_update_last_event(keyrecord_t *record) { const uint16_t keycode = get_record_keycode(record, false); // Don't update while a tap-hold key is unsettled. @@ -1028,7 +1041,9 @@ void flow_tap_update_last_event(keyrecord_t *record) { flow_tap_prev_time = record->event.time; flow_tap_expired = false; } +# endif // defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) +# ifdef FLOW_TAP_TERM static bool flow_tap_key_if_within_term(keyrecord_t *record, uint16_t prev_time) { const uint16_t idle_time = TIMER_DIFF_16(record->event.time, prev_time); if (flow_tap_expired || idle_time >= 500) { diff --git a/quantum/action_tapping.h b/quantum/action_tapping.h index 227e3330e12..22453296339 100644 --- a/quantum/action_tapping.h +++ b/quantum/action_tapping.h @@ -197,9 +197,6 @@ bool is_flow_tap_key(uint16_t keycode); */ uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t *record, uint16_t prev_keycode); -/** Updates the Flow Tap last key and timer. */ -void flow_tap_update_last_event(keyrecord_t *record); - /** * Checks if the pressed key is within the flow tap term. * Can be used to avoid triggering combos or other actions within the flow tap term. @@ -211,6 +208,11 @@ void flow_tap_update_last_event(keyrecord_t *record); bool within_flow_tap_term(uint16_t keycode, keyrecord_t *record); #endif // FLOW_TAP_TERM +#if defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) +/** Updates the Flow Tap last key and timer. */ +void flow_tap_update_last_event(keyrecord_t *record); +#endif // defined(FLOW_TAP_TERM) || defined(SPECULATIVE_HOLD_FLOW_TERM) + #ifdef DYNAMIC_TAPPING_TERM_ENABLE extern uint16_t g_tapping_term; #endif diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h new file mode 100644 index 00000000000..92b4e61b1d7 --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h @@ -0,0 +1,23 @@ +/* Copyright 2022 Vladislav Kucheriavykh + * Copyright 2026 Google LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "test_common.h" + +#define SPECULATIVE_HOLD +#define SPECULATIVE_HOLD_FLOW_TERM 200 diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test.mk b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test.mk new file mode 100644 index 00000000000..e716b592107 --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test.mk @@ -0,0 +1,16 @@ +# Copyright 2022 Vladislav Kucheriavykh +# Copyright 2026 Google LLC +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test_tap_hold.cpp b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test_tap_hold.cpp new file mode 100644 index 00000000000..70a7713bb01 --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/test_tap_hold.cpp @@ -0,0 +1,195 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "keyboard_report_util.hpp" +#include "keycode.h" +#include "test_common.hpp" +#include "action_tapping.h" +#include "test_fixture.hpp" +#include "test_keymap_key.hpp" + +using testing::_; +using testing::AnyNumber; +using testing::InSequence; + +namespace { + +class SpeculativeHoldFlowTerm : public TestFixture {}; + +TEST_F(SpeculativeHoldFlowTerm, within_flow_term_one_modtap) { + TestDriver driver; + InSequence s; + auto regular_key = KeymapKey(0, 1, 0, KC_SPC); + auto mod_tap_key = KeymapKey(0, 2, 0, RSFT_T(KC_B)); + set_keymap({regular_key, mod_tap_key}); + + // Tap regular key. + EXPECT_REPORT(driver, (KC_SPC)); + EXPECT_EMPTY_REPORT(driver); + tap_key(regular_key); + VERIFY_AND_CLEAR(driver); + + // Press mod-tap key. + EXPECT_NO_REPORT(driver); + mod_tap_key.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); // Don't speculate. + EXPECT_EQ(get_mods(), 0); + + EXPECT_REPORT(driver, (KC_RSFT)); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); + EXPECT_EQ(get_mods(), MOD_BIT_RSHIFT); + + // Release mod-tap key. + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); +} + +TEST_F(SpeculativeHoldFlowTerm, within_flow_term_two_modtaps) { + TestDriver driver; + InSequence s; + auto regular_key = KeymapKey(0, 0, 0, KC_A); + auto mod_tap_key1 = KeymapKey(0, 1, 0, SFT_T(KC_B)); + auto mod_tap_key2 = KeymapKey(0, 2, 0, CTL_T(KC_C)); + + set_keymap({regular_key, mod_tap_key1, mod_tap_key2}); + + // Tap regular key. + EXPECT_REPORT(driver, (KC_A)); + EXPECT_EMPTY_REPORT(driver); + tap_key(regular_key); + VERIFY_AND_CLEAR(driver); + + // Press mod-tap key 1 quickly after regular key. The mod-tap should settle + // immediately as tapped, sending `KC_B`. + EXPECT_NO_REPORT(driver); + mod_tap_key1.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); // Don't speculate. + + // Press mod-tap key 2 quickly. + EXPECT_NO_REPORT(driver); + mod_tap_key2.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); // Don't speculate. + + // Hold for longer than the tapping term. + EXPECT_REPORT(driver, (KC_LSFT)); + EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL)); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + + // Release mod-tap keys. + EXPECT_REPORT(driver, (KC_LCTL)); + EXPECT_EMPTY_REPORT(driver); + mod_tap_key1.release(); + run_one_scan_loop(); + mod_tap_key2.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); +} + +TEST_F(SpeculativeHoldFlowTerm, after_flow_term_one_modtap) { + TestDriver driver; + InSequence s; + auto regular_key = KeymapKey(0, 1, 0, KC_SPC); + auto mod_tap_key = KeymapKey(0, 2, 0, RSFT_T(KC_B)); + set_keymap({regular_key, mod_tap_key}); + + // Tap regular key. + EXPECT_REPORT(driver, (KC_SPC)); + EXPECT_EMPTY_REPORT(driver); + tap_key(regular_key); + idle_for(SPECULATIVE_HOLD_FLOW_TERM + 1); + VERIFY_AND_CLEAR(driver); + + // Press mod-tap key. + EXPECT_REPORT(driver, (KC_RSFT)); + mod_tap_key.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), MOD_BIT_RSHIFT); + EXPECT_EQ(get_mods(), 0); + + EXPECT_NO_REPORT(driver); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); + EXPECT_EQ(get_mods(), MOD_BIT_RSHIFT); + + // Release mod-tap key. + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); +} + +TEST_F(SpeculativeHoldFlowTerm, after_flow_term_two_modtaps) { + TestDriver driver; + InSequence s; + auto regular_key = KeymapKey(0, 1, 0, KC_SPC); + auto mod_tap_key1 = KeymapKey(0, 2, 0, RSFT_T(KC_B)); + auto mod_tap_key2 = KeymapKey(0, 3, 0, RCTL_T(KC_C)); + set_keymap({regular_key, mod_tap_key1, mod_tap_key2}); + + // Tap regular key. + EXPECT_REPORT(driver, (KC_SPC)); + EXPECT_EMPTY_REPORT(driver); + tap_key(regular_key); + idle_for(SPECULATIVE_HOLD_FLOW_TERM + 1); + VERIFY_AND_CLEAR(driver); + + // Press mod-tap key 1. + EXPECT_REPORT(driver, (KC_RSFT)); + mod_tap_key1.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), MOD_BIT_RSHIFT); + EXPECT_EQ(get_mods(), 0); + + // Press mod-tap key 2. + EXPECT_REPORT(driver, (KC_RSFT, KC_RCTL)); + mod_tap_key2.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), MOD_BIT_RSHIFT | MOD_BIT_RCTRL); + EXPECT_EQ(get_mods(), 0); + + EXPECT_NO_REPORT(driver); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); + EXPECT_EQ(get_mods(), MOD_BIT_RSHIFT | MOD_BIT_RCTRL); + + // Release mod-tap keys. + EXPECT_REPORT(driver, (KC_RCTL)); + EXPECT_EMPTY_REPORT(driver); + mod_tap_key1.release(); + run_one_scan_loop(); + mod_tap_key2.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); +} + +} // namespace diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h new file mode 100644 index 00000000000..0ae84c2cac1 --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h @@ -0,0 +1,24 @@ +/* Copyright 2022 Vladislav Kucheriavykh + * Copyright 2026 Google LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "test_common.h" + +#define SPECULATIVE_HOLD +#define SPECULATIVE_HOLD_ONE_KEY +#define DUMMY_MOD_NEUTRALIZER_KEYCODE KC_F24 diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test.mk b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test.mk new file mode 100644 index 00000000000..e716b592107 --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test.mk @@ -0,0 +1,16 @@ +# Copyright 2022 Vladislav Kucheriavykh +# Copyright 2026 Google LLC +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + diff --git a/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test_tap_hold.cpp b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test_tap_hold.cpp new file mode 100644 index 00000000000..60f7574517e --- /dev/null +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/test_tap_hold.cpp @@ -0,0 +1,189 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "keyboard_report_util.hpp" +#include "keycode.h" +#include "test_common.hpp" +#include "action_tapping.h" +#include "test_fixture.hpp" +#include "test_keymap_key.hpp" + +using testing::_; +using testing::AnyNumber; +using testing::InSequence; + +namespace { + +// Gets the unpacked 8-bit mods corresponding to a given mod-tap keycode. +uint8_t unpack_mod_tap_mods(uint16_t keycode) { + const uint8_t mods5 = QK_MOD_TAP_GET_MODS(keycode); + return (mods5 & 0x10) != 0 ? (mods5 << 4) : mods5; +} + +std::vector mods_report(uint8_t mods) { + std::vector keycodes; + if ((mods & MOD_BIT_LCTRL)) { + keycodes.push_back(KC_LCTL); + } + if ((mods & MOD_BIT_LSHIFT)) { + keycodes.push_back(KC_LSFT); + } + if ((mods & MOD_BIT_LALT)) { + keycodes.push_back(KC_LALT); + } + if ((mods & MOD_BIT_LGUI)) { + keycodes.push_back(KC_LGUI); + } + if ((mods & MOD_BIT_RCTRL)) { + keycodes.push_back(KC_RCTL); + } + if ((mods & MOD_BIT_RSHIFT)) { + keycodes.push_back(KC_RSFT); + } + if ((mods & MOD_BIT_RALT)) { + keycodes.push_back(KC_RALT); + } + if ((mods & MOD_BIT_RGUI)) { + keycodes.push_back(KC_RGUI); + } + return keycodes; +} + +extern "C" bool get_speculative_hold(uint16_t keycode, keyrecord_t *record) { + return true; // Enable Speculative Hold for all mod-tap keys. +} + +class SpeculativeHoldOneKey : public TestFixture {}; + +TEST_F(SpeculativeHoldOneKey, modtap_dont_speculate) { + TestDriver driver; + InSequence s; + + struct Params { + uint8_t initial_mods; + uint16_t key; + }; + for (Params params : std::vector({ + {MOD_BIT_LSHIFT, LALT_T(KC_1)}, + {MOD_BIT_RCTRL, LGUI_T(KC_1)}, + {MOD_BIT_LALT, LSFT_T(KC_1)}, + {MOD_BIT_RALT, RCTL_T(KC_1)}, + {MOD_MASK_SHIFT, RGUI_T(KC_1)}, + })) { + std::string scope = "initial_mods="; + scope += testing::PrintToString(params.initial_mods); + scope += std::string(", key=") + get_keycode_string(params.key); + SCOPED_TRACE(scope); + + const uint8_t initial_mods = params.initial_mods; + auto mod_tap_key = KeymapKey(0, 1, 0, params.key); + const uint8_t mod_tap_mods = unpack_mod_tap_mods(params.key); + + set_keymap({mod_tap_key}); + + // Activate mods. + set_mods(initial_mods); + + // Press mod-tap key. + EXPECT_NO_REPORT(driver); + mod_tap_key.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_mods(), initial_mods); + EXPECT_EQ(get_speculative_mods(), 0); + + EXPECT_REPORT(driver, (mods_report(initial_mods | mod_tap_mods))); + EXPECT_NO_REPORT(driver); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); + EXPECT_EQ(get_mods(), initial_mods | mod_tap_mods); + + // Release mod-tap key. + EXPECT_REPORT(driver, (mods_report(initial_mods & ~mod_tap_mods))); + mod_tap_key.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + } + + EXPECT_EMPTY_REPORT(driver); + clear_mods(); + send_keyboard_report(); + VERIFY_AND_CLEAR(driver); +} + +TEST_F(SpeculativeHoldOneKey, two_modtaps_dont_speculate_second_key) { + TestDriver driver; + InSequence s; + + for (auto keys : std::vector>({ + {LSFT_T(KC_A), LCTL_T(KC_1)}, + {RSFT_T(KC_A), RCTL_T(KC_1)}, + {LGUI_T(KC_A), LSFT_T(KC_1)}, + {RALT_T(KC_A), RSFT_T(KC_1)}, + {MEH_T(KC_A), LGUI_T(KC_1)}, + {RCS_T(KC_A), RSG_T(KC_1)}, + {LCS_T(KC_A), HYPR_T(KC_1)}, + })) { + std::string scope = "keys = "; + scope += get_keycode_string(keys.first); + scope += std::string(", ") + get_keycode_string(keys.second); + SCOPED_TRACE(scope); + + auto mod_tap_key1 = KeymapKey(0, 1, 0, keys.first); + auto mod_tap_key2 = KeymapKey(0, 2, 0, keys.second); + const uint8_t mods1 = unpack_mod_tap_mods(keys.first); + const uint8_t mods2 = unpack_mod_tap_mods(keys.second); + + set_keymap({mod_tap_key1, mod_tap_key2}); + + // Press first mod-tap key. + EXPECT_REPORT(driver, (mods_report(mods1))); + mod_tap_key1.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), mods1); + + // Press second mod-tap key. + EXPECT_NO_REPORT(driver); + mod_tap_key2.press(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), mods1); + + EXPECT_REPORT(driver, (mods_report(mods1 | mods2))); + EXPECT_NO_REPORT(driver); + idle_for(TAPPING_TERM + 1); + VERIFY_AND_CLEAR(driver); + EXPECT_EQ(get_speculative_mods(), 0); + EXPECT_EQ(get_mods(), mods1 | mods2); + + // Release first mod-tap key. + EXPECT_REPORT(driver, (mods_report(mods2 & ~mods1))); + mod_tap_key1.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + + // Release second mod-tap key. + EXPECT_EMPTY_REPORT(driver); + mod_tap_key2.release(); + run_one_scan_loop(); + VERIFY_AND_CLEAR(driver); + } +} + +} // namespace diff --git a/tests/test_common/keyboard_report_util.hpp b/tests/test_common/keyboard_report_util.hpp index 666791a5b61..d4a4622c247 100644 --- a/tests/test_common/keyboard_report_util.hpp +++ b/tests/test_common/keyboard_report_util.hpp @@ -33,6 +33,10 @@ class KeyboardReportMatcher : public testing::MatcherInterface KeyboardReport(const std::vector& keys) { + return testing::MakeMatcher(new KeyboardReportMatcher(keys)); +} + template inline testing::Matcher KeyboardReport(Ts... keys) { return testing::MakeMatcher(new KeyboardReportMatcher({static_cast(keys)...})); From 6ee28ac86f31fc2ec657faf7d62a4fa3d3c38568 Mon Sep 17 00:00:00 2001 From: George Norton <30636555+george-norton@users.noreply.github.com> Date: Sat, 23 May 2026 04:08:44 +0100 Subject: [PATCH 40/48] Clip mouse report values to the logical range from the USB descriptor. (#26195) --- tmk_core/protocol/report.h | 8 ++++---- tmk_core/protocol/usb_descriptor.c | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h index 9053b0bb3f0..ec220c6938d 100644 --- a/tmk_core/protocol/report.h +++ b/tmk_core/protocol/report.h @@ -194,21 +194,21 @@ typedef struct { } PACKED report_programmable_button_t; #ifdef MOUSE_EXTENDED_REPORT -# define MOUSE_REPORT_XY_MIN INT16_MIN +# define MOUSE_REPORT_XY_MIN (INT16_MIN + 1) # define MOUSE_REPORT_XY_MAX INT16_MAX typedef int16_t mouse_xy_report_t; #else -# define MOUSE_REPORT_XY_MIN INT8_MIN +# define MOUSE_REPORT_XY_MIN (INT8_MIN + 1) # define MOUSE_REPORT_XY_MAX INT8_MAX typedef int8_t mouse_xy_report_t; #endif #ifdef WHEEL_EXTENDED_REPORT -# define MOUSE_REPORT_HV_MIN INT16_MIN +# define MOUSE_REPORT_HV_MIN (INT16_MIN + 1) # define MOUSE_REPORT_HV_MAX INT16_MAX typedef int16_t mouse_hv_report_t; #else -# define MOUSE_REPORT_HV_MIN INT8_MIN +# define MOUSE_REPORT_HV_MIN (INT8_MIN + 1) # define MOUSE_REPORT_HV_MAX INT8_MAX typedef int8_t mouse_hv_report_t; #endif diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index b71236f067c..f330cb85217 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -153,13 +153,13 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { HID_RI_USAGE(8, 0x30), // X HID_RI_USAGE(8, 0x31), // Y # ifndef MOUSE_EXTENDED_REPORT - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_RI_LOGICAL_MINIMUM(8, MOUSE_REPORT_XY_MIN), + HID_RI_LOGICAL_MAXIMUM(8, MOUSE_REPORT_XY_MAX), HID_RI_REPORT_COUNT(8, 0x02), HID_RI_REPORT_SIZE(8, 0x08), # else - HID_RI_LOGICAL_MINIMUM(16, -32767), - HID_RI_LOGICAL_MAXIMUM(16, 32767), + HID_RI_LOGICAL_MINIMUM(16, MOUSE_REPORT_XY_MIN), + HID_RI_LOGICAL_MAXIMUM(16, MOUSE_REPORT_XY_MAX), HID_RI_REPORT_COUNT(8, 0x02), HID_RI_REPORT_SIZE(8, 0x10), # endif @@ -186,13 +186,13 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { // Vertical wheel (1 or 2 bytes) HID_RI_USAGE(8, 0x38), // Wheel # ifndef WHEEL_EXTENDED_REPORT - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_RI_LOGICAL_MINIMUM(8, MOUSE_REPORT_HV_MIN), + HID_RI_LOGICAL_MAXIMUM(8, MOUSE_REPORT_HV_MAX), HID_RI_REPORT_COUNT(8, 0x01), HID_RI_REPORT_SIZE(8, 0x08), # else - HID_RI_LOGICAL_MINIMUM(16, -32767), - HID_RI_LOGICAL_MAXIMUM(16, 32767), + HID_RI_LOGICAL_MINIMUM(16, MOUSE_REPORT_HV_MIN), + HID_RI_LOGICAL_MAXIMUM(16, MOUSE_REPORT_HV_MAX), HID_RI_REPORT_COUNT(8, 0x01), HID_RI_REPORT_SIZE(8, 0x10), # endif From f31df2ed6bbe00c4f8e3287dd3e2fb1e0673066f Mon Sep 17 00:00:00 2001 From: Logan Butler <8854426+MatchstickWorks@users.noreply.github.com> Date: Sun, 24 May 2026 08:34:32 -0700 Subject: [PATCH 41/48] Add reverse keymap to SouthPad v2 (#25707) --- .../southpad/rev2/keymaps/reverse/keymap.c | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 keyboards/matchstickworks/southpad/rev2/keymaps/reverse/keymap.c diff --git a/keyboards/matchstickworks/southpad/rev2/keymaps/reverse/keymap.c b/keyboards/matchstickworks/southpad/rev2/keymaps/reverse/keymap.c new file mode 100644 index 00000000000..b318c144fd2 --- /dev/null +++ b/keyboards/matchstickworks/southpad/rev2/keymaps/reverse/keymap.c @@ -0,0 +1,25 @@ +/* Copyright 2023 Logan Butler*/ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_BSPC, KC_EQL, LSFT(KC_9),LSFT(KC_0), + KC_PMNS, KC_PAST, KC_PSLS, TG(1), + KC_PPLS, KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, + KC_PENT, KC_P1, KC_P2, KC_P3, + KC_PDOT, KC_P0 + ), + + [1] = LAYOUT( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, KC_PGUP, KC_UP, KC_HOME, + KC_LEFT, _______, KC_RGHT, + _______, KC_PGDN, KC_DOWN, KC_END, + KC_DEL, KC_INS + ), +}; From 06c24a811e8231df1c57ccf430c102585f76a130 Mon Sep 17 00:00:00 2001 From: Simon Arlott <70171+nomis@users.noreply.github.com> Date: Tue, 26 May 2026 03:24:57 +0100 Subject: [PATCH 42/48] [Keyboard] Add nomis/rpi_pico_25x1 macropad (#25346) --- keyboards/nomis/rpi_pico_25x1/keyboard.json | 63 +++++++++++++++++++ .../rpi_pico_25x1/keymaps/default/keymap.c | 34 ++++++++++ keyboards/nomis/rpi_pico_25x1/readme.md | 28 +++++++++ 3 files changed, 125 insertions(+) create mode 100644 keyboards/nomis/rpi_pico_25x1/keyboard.json create mode 100644 keyboards/nomis/rpi_pico_25x1/keymaps/default/keymap.c create mode 100644 keyboards/nomis/rpi_pico_25x1/readme.md diff --git a/keyboards/nomis/rpi_pico_25x1/keyboard.json b/keyboards/nomis/rpi_pico_25x1/keyboard.json new file mode 100644 index 00000000000..0ac738ba87c --- /dev/null +++ b/keyboards/nomis/rpi_pico_25x1/keyboard.json @@ -0,0 +1,63 @@ +{ + "manufacturer": "uuid.uk", + "keyboard_name": "rpi pico 25x1 keyboard", + "maintainer": "nomis", + "bootloader": "rp2040", + "features": { + "bootmagic": true, + "extrakey": true, + "joystick": true, + "nkro": true + }, + "joystick": { + "axes": {}, + "button_count": 25, + "driver": "digital" + }, + "matrix_pins": { + "direct": [ + ["GP0", "GP1", "GP2", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP15", "GP14", "GP13", "GP12", "GP19", "GP18", "GP17", "GP16", "GP20", "GP21", "GP22", "GP26", "GP27"] + ] + }, + "processor": "RP2040", + "url": "https://github.com/nomis/keyboard-pcb-rpi-pico-25x1", + "usb": { + "device_version": "1.0.0", + "pid": "0x5A19", + "vid": "0xFEED" + }, + "ws2812": { + "pin": "GP28" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 0, "y": 1}, + {"matrix": [0, 2], "x": 0, "y": 2}, + {"matrix": [0, 3], "x": 0, "y": 3}, + {"matrix": [0, 4], "x": 0, "y": 4}, + {"matrix": [0, 5], "x": 0, "y": 5.5}, + {"matrix": [0, 6], "x": 0, "y": 6.5}, + {"matrix": [0, 7], "x": 0, "y": 7.5}, + {"matrix": [0, 8], "x": 0, "y": 8.5}, + {"matrix": [0, 9], "x": 0, "y": 9.5}, + {"matrix": [0, 10], "x": 0, "y": 11}, + {"matrix": [0, 11], "x": 0, "y": 12}, + {"matrix": [0, 12], "x": 0, "y": 13}, + {"matrix": [0, 13], "x": 0, "y": 14}, + {"matrix": [0, 14], "x": 0, "y": 15}, + {"matrix": [0, 15], "x": 0, "y": 16.5}, + {"matrix": [0, 16], "x": 0, "y": 17.5}, + {"matrix": [0, 17], "x": 0, "y": 18.5}, + {"matrix": [0, 18], "x": 0, "y": 19.5}, + {"matrix": [0, 19], "x": 0, "y": 20.5}, + {"matrix": [0, 20], "x": 0, "y": 22}, + {"matrix": [0, 21], "x": 0, "y": 23}, + {"matrix": [0, 22], "x": 0, "y": 24}, + {"matrix": [0, 23], "x": 0, "y": 25}, + {"matrix": [0, 24], "x": 0, "y": 26} + ] + } + } +} diff --git a/keyboards/nomis/rpi_pico_25x1/keymaps/default/keymap.c b/keyboards/nomis/rpi_pico_25x1/keymaps/default/keymap.c new file mode 100644 index 00000000000..4ff6b48cc36 --- /dev/null +++ b/keyboards/nomis/rpi_pico_25x1/keymaps/default/keymap.c @@ -0,0 +1,34 @@ +// Copyright 2025 Simon Arlott +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + JS_0, + JS_1, + JS_2, + JS_3, + JS_4, + JS_5, + JS_6, + JS_7, + JS_8, + JS_9, + JS_10, + JS_11, + JS_12, + JS_13, + JS_14, + JS_15, + JS_16, + JS_17, + JS_18, + JS_19, + JS_20, + JS_21, + JS_22, + JS_23, + JS_24 + ) +}; diff --git a/keyboards/nomis/rpi_pico_25x1/readme.md b/keyboards/nomis/rpi_pico_25x1/readme.md new file mode 100644 index 00000000000..32377ec012e --- /dev/null +++ b/keyboards/nomis/rpi_pico_25x1/readme.md @@ -0,0 +1,28 @@ +# rpi pico 25x1 + +![rpi-pico-25x1 PCB](https://i.imgur.com/eOIZH3p.png) + +Macropad keyboard with 25 keys in a single row/column powered by a Raspberry Pi +Pico. The default keymap is a 25 button joystick. + +* Keyboard Maintainer: [Simon Arlott](https://github.com/nomis) +* Hardware Supported: Raspberry Pi Pico +* Hardware Availability: Order/manufacture the [open source PCB](https://github.com/nomis/keyboard-pcb-rpi-pico-25x1) + +Make example for this keyboard (after setting up your build environment): + + make nomis/rpi_pico_25x1:default + +Flashing example for this keyboard: + + make nomis/rpi_pico_25x1:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the top key and plug in the keyboard +* **Physical reset button**: Hold the BOOTSEL button on the Raspberry Pi Pico and plug in the keyboard +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available From d19204824d6229b05a7d41b3e3a82966ff8a79fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Wed, 27 May 2026 07:20:24 +0800 Subject: [PATCH 43/48] Mask out active mods when unregistering after retro tapping (#26127) Do not unregister modifiers still held by other keys --- quantum/action.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/action.c b/quantum/action.c index 827defcb45c..9be3fbe3448 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -879,7 +879,9 @@ void process_action(keyrecord_t *record, action_t action) { wait_ms(TAP_CODE_DELAY); tap_code(action.layer_tap.code); wait_ms(TAP_CODE_DELAY); - unregister_mods(retro_tap_curr_mods); + // Only unregister the mods that were active at the time of + // the tap and are not independently held by other keys. + unregister_mods(retro_tap_curr_mods & ~curr_mods); # endif } retro_tap_primed = false; From 05c4322c658f4a231c5490e779fe40a1bad84d5b Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Wed, 27 May 2026 00:43:26 +0100 Subject: [PATCH 44/48] Align Mouse USB descriptor (#26230) --- tmk_core/protocol/usb_descriptor.c | 8 ++--- tmk_core/protocol/vusb/vusb.c | 48 +++++++++++++++--------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index f330cb85217..38abb3781cd 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -202,13 +202,13 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { HID_RI_USAGE_PAGE(8, 0x0C),// Consumer HID_RI_USAGE(16, 0x0238), // AC Pan # ifndef WHEEL_EXTENDED_REPORT - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_RI_LOGICAL_MINIMUM(8, MOUSE_REPORT_HV_MIN), + HID_RI_LOGICAL_MAXIMUM(8, MOUSE_REPORT_HV_MAX), HID_RI_REPORT_COUNT(8, 0x01), HID_RI_REPORT_SIZE(8, 0x08), # else - HID_RI_LOGICAL_MINIMUM(16, -32767), - HID_RI_LOGICAL_MAXIMUM(16, 32767), + HID_RI_LOGICAL_MINIMUM(16, MOUSE_REPORT_HV_MIN), + HID_RI_LOGICAL_MAXIMUM(16, MOUSE_REPORT_HV_MAX), HID_RI_REPORT_COUNT(8, 0x01), HID_RI_REPORT_SIZE(8, 0x10), # endif diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index 1f0f82664b7..e2e28a2b105 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -515,15 +515,15 @@ const PROGMEM uchar shared_hid_report[] = { 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) # ifndef MOUSE_EXTENDED_REPORT - 0x15, 0x81, // Logical Minimum (-127) - 0x25, 0x7F, // Logical Maximum (127) - 0x95, 0x02, // Report Count (2) - 0x75, 0x08, // Report Size (8) + 0x15, MOUSE_REPORT_XY_MIN, // Logical Minimum (-127) + 0x25, MOUSE_REPORT_XY_MAX, // Logical Maximum (127) + 0x95, 0x02, // Report Count (2) + 0x75, 0x08, // Report Size (8) # else - 0x16, 0x01, 0x80, // Logical Minimum (-32767) - 0x26, 0xFF, 0x7F, // Logical Maximum (32767) - 0x95, 0x02, // Report Count (2) - 0x75, 0x10, // Report Size (16) + 0x16, 0x01, HID_VALUE_16(MOUSE_REPORT_XY_MIN), // Logical Minimum (-32767) + 0x26, 0xFF, HID_VALUE_16(MOUSE_REPORT_XY_MAX), // Logical Maximum (32767) + 0x95, 0x02, // Report Count (2) + 0x75, 0x10, // Report Size (16) # endif 0x81, 0x06, // Input (Data, Variable, Relative) @@ -548,15 +548,15 @@ const PROGMEM uchar shared_hid_report[] = { // Vertical wheel (1 or 2 bytes) 0x09, 0x38, // Usage (Wheel) # ifndef WHEEL_EXTENDED_REPORT - 0x15, 0x81, // Logical Minimum (-127) - 0x25, 0x7F, // Logical Maximum (127) - 0x95, 0x01, // Report Count (1) - 0x75, 0x08, // Report Size (8) + 0x15, MOUSE_REPORT_HV_MIN, // Logical Minimum (-127) + 0x25, MOUSE_REPORT_HV_MAX, // Logical Maximum (127) + 0x95, 0x01, // Report Count (1) + 0x75, 0x08, // Report Size (8) # else - 0x16, 0x01, 0x80, // Logical Minimum (-32767) - 0x26, 0xFF, 0x7F, // Logical Maximum (32767) - 0x95, 0x01, // Report Count (1) - 0x75, 0x10, // Report Size (16) + 0x16, 0x01, HID_VALUE_16(MOUSE_REPORT_HV_MIN), // Logical Minimum (-32767) + 0x26, 0xFF, HID_VALUE_16(MOUSE_REPORT_HV_MAX), // Logical Maximum (32767) + 0x95, 0x01, // Report Count (1) + 0x75, 0x10, // Report Size (16) # endif 0x81, 0x06, // Input (Data, Variable, Relative) @@ -564,15 +564,15 @@ const PROGMEM uchar shared_hid_report[] = { 0x05, 0x0C, // Usage Page (Consumer) 0x0A, 0x38, 0x02, // Usage (AC Pan) # ifndef WHEEL_EXTENDED_REPORT - 0x15, 0x81, // Logical Minimum (-127) - 0x25, 0x7F, // Logical Maximum (127) - 0x95, 0x01, // Report Count (1) - 0x75, 0x08, // Report Size (8) + 0x15, MOUSE_REPORT_HV_MIN, // Logical Minimum (-127) + 0x25, MOUSE_REPORT_HV_MAX, // Logical Maximum (127) + 0x95, 0x01, // Report Count (1) + 0x75, 0x08, // Report Size (8) # else - 0x16, 0x01, 0x80, // Logical Minimum (-32767) - 0x26, 0xFF, 0x7F, // Logical Maximum (32767) - 0x95, 0x01, // Report Count (1) - 0x75, 0x10, // Report Size (16) + 0x16, 0x01, HID_VALUE_16(MOUSE_REPORT_HV_MIN), // Logical Minimum (-32767) + 0x26, 0xFF, HID_VALUE_16(MOUSE_REPORT_HV_MAX), // Logical Maximum (32767) + 0x95, 0x01, // Report Count (1) + 0x75, 0x10, // Report Size (16) # endif 0x81, 0x06, // Input (Data, Variable, Relative) From 7b51d7e6655bc5cf1be8d8966b9efac921c4fe63 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 29 May 2026 07:56:36 +0100 Subject: [PATCH 45/48] Add API version assertion for split_data_sync module (#26237) --- keyboards/handwired/splittest/keymaps/data_sync/keymap.c | 8 ++++++++ .../handwired/splittest/keymaps/data_sync/keymap.json | 5 +++++ modules/qmk/split_data_sync/split_data_sync.c | 3 +++ 3 files changed, 16 insertions(+) create mode 100644 keyboards/handwired/splittest/keymaps/data_sync/keymap.c create mode 100644 keyboards/handwired/splittest/keymaps/data_sync/keymap.json diff --git a/keyboards/handwired/splittest/keymaps/data_sync/keymap.c b/keyboards/handwired/splittest/keymaps/data_sync/keymap.c new file mode 100644 index 00000000000..fcef718983e --- /dev/null +++ b/keyboards/handwired/splittest/keymaps/data_sync/keymap.c @@ -0,0 +1,8 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT(KC_L, KC_R) +}; diff --git a/keyboards/handwired/splittest/keymaps/data_sync/keymap.json b/keyboards/handwired/splittest/keymaps/data_sync/keymap.json new file mode 100644 index 00000000000..832fd82e532 --- /dev/null +++ b/keyboards/handwired/splittest/keymaps/data_sync/keymap.json @@ -0,0 +1,5 @@ +{ + "modules": [ + "qmk/split_data_sync" + ] +} diff --git a/modules/qmk/split_data_sync/split_data_sync.c b/modules/qmk/split_data_sync/split_data_sync.c index cf0a93c3502..4b70f7808a9 100644 --- a/modules/qmk/split_data_sync/split_data_sync.c +++ b/modules/qmk/split_data_sync/split_data_sync.c @@ -3,6 +3,9 @@ #include "debug.h" #include "timer.h" #include "transactions.h" +#include "community_modules.h" + +ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 1, 2); typedef struct _master_to_slave_t { int m2s_data; From a9efff322c17f51fed6b962097fd7589db0b6f1c Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 29 May 2026 20:32:28 +0100 Subject: [PATCH 46/48] Fail when a duplicate module name is detected (#26238) --- lib/python/qmk/info.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index d162551b542..44fed0843ce 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -1137,4 +1137,17 @@ def get_modules(keyboard, keymap_filename): if keymap_json: modules.extend(keymap_json.get('modules', [])) - return list(dict.fromkeys(modules)) # remove dupes + # remove duplicates while maintaining the current order + ret = list(dict.fromkeys(modules)) + + # We currently do not support duplicate module names + # e.g.: ['foo/hello_world', 'bar/hello_world'] will fail + seen = set() + for module in ret: + module_slug = Path(module).name.lower() + if module_slug in seen: + duplicates = list(filter(lambda m: module_slug == Path(m).name.lower(), ret)) + raise Exception(f'Duplicate module name detected: "{module_slug}" - {duplicates}') + seen.add(module_slug) + + return ret From 58d4decf483378a95af7fe33823d0f70571d4d80 Mon Sep 17 00:00:00 2001 From: zvecr Date: Mon, 1 Jun 2026 02:21:41 +0100 Subject: [PATCH 47/48] Stub out changelog --- docs/ChangeLog/20260531.md | 122 +++++++++++++++++++++++++++++++ docs/_sidebar.json | 2 +- docs/breaking_changes.md | 20 ++--- docs/breaking_changes_history.md | 1 + 4 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 docs/ChangeLog/20260531.md diff --git a/docs/ChangeLog/20260531.md b/docs/ChangeLog/20260531.md new file mode 100644 index 00000000000..fc173bf581e --- /dev/null +++ b/docs/ChangeLog/20260531.md @@ -0,0 +1,122 @@ +# QMK Breaking Changes - 2026 May 31 Changelog + +## Notable Changes {#notable-changes} + +## Deprecation Notices + +In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here. + +### Removal of deprecated isLeftHand ([25897](https://github.com/qmk/qmk_firmware/pull/25897)) + +Users must migrate to `is_keyboard_left()` found in `split_util.h` instead. For example: + +```diff +oled_rotation_t oled_init_user(oled_rotation_t rotation) { +- return isLeftHand ? OLED_ROTATION_180 : OLED_ROTATION_0; ++ return is_keyboard_left() ? OLED_ROTATION_180 : OLED_ROTATION_0; +} +``` + +### Removal of `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262)) + +Unpicking the assumption that only USB can do NKRO, forcing of NKRO on every boot has been deprecated. As this setting persists, it produces unnecessary user confusion when the various NKRO keycodes (for example `NK_TOGG`) do not behave as expected. + +The new defaults can be configured in the following ways: + +:::::tabs + +==== keyboard.json + +```json [keyboard.json] +{ + "host": { // [!code focus] + "default": { // [!code focus] + "nkro": true // [!code focus] + } // [!code focus] + } // [!code focus] +} + +``` + +==== keymap.json + +```json [keymap.json] +{ + "config": { + "host": { // [!code focus] + "default": { // [!code focus] + "nkro": true // [!code focus] + } // [!code focus] + } // [!code focus] + } +} + +``` + +==== config.h + +```c [config.h] +#pragma once + +#define NKRO_DEFAULT_ON true // [!code focus] +``` + +::::: + +## Full changelist + +Core: +* Remove deprecated `isLeftHand` ([#25897](https://github.com/qmk/qmk_firmware/pull/25897)) +* Either output Unicode or insert in Leader sequence ([#25940](https://github.com/qmk/qmk_firmware/pull/25940)) +* Add resolution information to digitizer ([#25958](https://github.com/qmk/qmk_firmware/pull/25958)) +* Always generate .map files. ([#25961](https://github.com/qmk/qmk_firmware/pull/25961)) +* Add an `mcu_reset` impl for the kiibohd bootloader. ([#25963](https://github.com/qmk/qmk_firmware/pull/25963)) +* VIA v13 ([#26001](https://github.com/qmk/qmk_firmware/pull/26001)) +* Added PixArt PMW-3325 mouse sensor driver ([#26065](https://github.com/qmk/qmk_firmware/pull/26065)) +* Update WL backing store from 16 to 32-bit for AT32 ([#26066](https://github.com/qmk/qmk_firmware/pull/26066)) +* Refactor Pixel Fractal effect ([#26071](https://github.com/qmk/qmk_firmware/pull/26071)) +* Minor combo code optimisation ([#26073](https://github.com/qmk/qmk_firmware/pull/26073)) +* Options to constrain Speculative Hold: `SPECULATIVE_HOLD_ONE_KEY` and `SPECULATIVE_HOLD_FLOW_TERM`. ([#26099](https://github.com/qmk/qmk_firmware/pull/26099)) +* Add includes for std::setw ([#26153](https://github.com/qmk/qmk_firmware/pull/26153)) +* Bind gtest colour to QMKs 'COLOR' variable ([#26159](https://github.com/qmk/qmk_firmware/pull/26159)) +* Print correct test names ([#26160](https://github.com/qmk/qmk_firmware/pull/26160)) +* Ignore Uninteresting test warnings during test teardown ([#26161](https://github.com/qmk/qmk_firmware/pull/26161)) +* Remove FORCE_NKRO ([#26206](https://github.com/qmk/qmk_firmware/pull/26206)) + +CLI: +* Update lint to check all keymaps within the repo ([#25970](https://github.com/qmk/qmk_firmware/pull/25970)) +* Fail when a duplicate module name is detected ([#26238](https://github.com/qmk/qmk_firmware/pull/26238)) + +Submodule updates: +* Update ChibiOS, ChibiOS-Contrib. ([#25730](https://github.com/qmk/qmk_firmware/pull/25730)) +* Revert "Update ChibiOS, ChibiOS-Contrib." ([#26074](https://github.com/qmk/qmk_firmware/pull/26074)) +* ChibiOS, ChibiOS-Contrib updates (redux) ([#26079](https://github.com/qmk/qmk_firmware/pull/26079)) +* Bump googletest to v1.16.0 ([#26154](https://github.com/qmk/qmk_firmware/pull/26154)) + +Keyboards: +* Require "url" field to not be empty ([#25152](https://github.com/qmk/qmk_firmware/pull/25152)) +* Add nomis/rpi_pico_25x1 macropad ([#25346](https://github.com/qmk/qmk_firmware/pull/25346)) +* Remove override of QK_{LED,RGB}_MATRIX_TOGGLE keycode ([#25672](https://github.com/qmk/qmk_firmware/pull/25672)) +* Add reverse layout to SouthPad v2 ([#25707](https://github.com/qmk/qmk_firmware/pull/25707)) +* Adding Handwired Bouvet Macropad ([#26040](https://github.com/qmk/qmk_firmware/pull/26040)) +* Remove blockader user keymap ([#26075](https://github.com/qmk/qmk_firmware/pull/26075)) +* Remove deprecated audio pin defines ([#26111](https://github.com/qmk/qmk_firmware/pull/26111)) +* Remove `OLED_DISPLAY_128X32` config ([#26190](https://github.com/qmk/qmk_firmware/pull/26190)) +* Migrate SPLIT_OLED_ENABLE ([#26194](https://github.com/qmk/qmk_firmware/pull/26194)) +* Add API version assertion for split_data_sync module ([#26237](https://github.com/qmk/qmk_firmware/pull/26237)) + +Others: +* Bump vitepress to 1.6.4 ([#26067](https://github.com/qmk/qmk_firmware/pull/26067)) +* Add usage clarifications to docs/features/unicode.md ([#26156](https://github.com/qmk/qmk_firmware/pull/26156)) + +Bugs: +* Fix `USER_PRINT` stripping out `uprintf` ([#25919](https://github.com/qmk/qmk_firmware/pull/25919)) +* Fix possible repeat key infinite recursion ([#25926](https://github.com/qmk/qmk_firmware/pull/25926)) +* Fix `cc-option` on arm-none-eabi-gcc ([#26114](https://github.com/qmk/qmk_firmware/pull/26114)) +* Fix color diagnostics for arm-none-eabi-gcc ([#26115](https://github.com/qmk/qmk_firmware/pull/26115)) +* Mask out active mods when unregistering after retro tapping ([#26127](https://github.com/qmk/qmk_firmware/pull/26127)) +* fix `make test:all` failures seen on macOS Tahoe ([#26136](https://github.com/qmk/qmk_firmware/pull/26136)) +* Add workaround for undefined reference to weak function under mingw ([#26167](https://github.com/qmk/qmk_firmware/pull/26167)) +* fix(ws2812-pwm): allow WS2812_PWM_TICK_FREQUENCY override ([#26186](https://github.com/qmk/qmk_firmware/pull/26186)) +* Clip mouse report values to the logical range from the USB descriptor. ([#26195](https://github.com/qmk/qmk_firmware/pull/26195)) +* Align Mouse USB descriptor ([#26230](https://github.com/qmk/qmk_firmware/pull/26230)) diff --git a/docs/_sidebar.json b/docs/_sidebar.json index 13982765e43..357574fe7e9 100644 --- a/docs/_sidebar.json +++ b/docs/_sidebar.json @@ -214,7 +214,7 @@ { "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" }, { "text": "Most Recent ChangeLog", - "link": "/ChangeLog/20260222" + "link": "/ChangeLog/20260531" }, { "text": "Past Breaking Changes", "link": "/breaking_changes_history" }, { "text": "Deprecation Policy", "link": "/support_deprecation_policy" } diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md index af11445291a..3b169498b87 100644 --- a/docs/breaking_changes.md +++ b/docs/breaking_changes.md @@ -10,25 +10,25 @@ Practically, this means QMK merges the `develop` branch into the `master` branch ## What has been included in past Breaking Changes? +* [2026 May 31](ChangeLog/20260531) * [2026 Feb 22](ChangeLog/20260222) * [2025 Nov 30](ChangeLog/20251130) -* [2025 Aug 31](ChangeLog/20250831) * [Older Breaking Changes](breaking_changes_history) ## When is the next Breaking Change? -The next Breaking Change is scheduled for May 31, 2026. +The next Breaking Change is scheduled for Aug 30, 2026. ### Important Dates -* 2025 Feb 22 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions. -* 2026 May 3 - `develop` closed to new PRs. -* 2026 May 3 - Call for testers. -* 2026 May 17 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes -* 2026 May 24 - `develop` is locked, only critical bugfix PRs merged. -* 2026 May 29 - `master` is locked, no PRs merged. -* 2026 May 31 - Merge `develop` to `master`. -* 2026 May 31 - `master` is unlocked. PRs can be merged again. +* 2025 May 31 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions. +* 2026 Aug 2 - `develop` closed to new PRs. +* 2026 Aug 2 - Call for testers. +* 2026 Aug 16 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes +* 2026 Aug 23 - `develop` is locked, only critical bugfix PRs merged. +* 2026 Aug 28 - `master` is locked, no PRs merged. +* 2026 Aug 30 - Merge `develop` to `master`. +* 2026 Aug 30 - `master` is unlocked. PRs can be merged again. ## What changes will be included? diff --git a/docs/breaking_changes_history.md b/docs/breaking_changes_history.md index c3c2a8f1b73..f313ea63286 100644 --- a/docs/breaking_changes_history.md +++ b/docs/breaking_changes_history.md @@ -2,6 +2,7 @@ This page links to all previous changelogs from the QMK Breaking Changes process. +* [2026 May 31](ChangeLog/20260531) - version 0.33.0 * [2026 Feb 22](ChangeLog/20260222) - version 0.32.0 * [2025 Nov 30](ChangeLog/20251130) - version 0.31.0 * [2025 Aug 31](ChangeLog/20250831) - version 0.30.0 From 6b54261fa5ea53c28eeab9fc2b4b12847ed38ad0 Mon Sep 17 00:00:00 2001 From: zvecr Date: Mon, 1 Jun 2026 02:24:35 +0100 Subject: [PATCH 48/48] Merge point for 2026q2 breaking changes. --- readme.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/readme.md b/readme.md index e5c0d41b7b3..62aed120662 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,3 @@ -# THIS IS THE DEVELOP BRANCH - -Warning- This is the `develop` branch of QMK Firmware. You may encounter broken code here. Please see [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) for more information. - # Quantum Mechanical Keyboard Firmware [![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)