diff --git a/Makefile b/Makefile index fe6623fdf69..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 @@ -313,7 +314,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; \ 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/builddefs/common_rules.mk b/builddefs/common_rules.mk index c92ec6baba2..282cc6c6566 100644 --- a/builddefs/common_rules.mk +++ b/builddefs/common_rules.mk @@ -50,10 +50,14 @@ 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 +# 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 ---------------- @@ -66,9 +70,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 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== 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 diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index cd4a127844f..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"}, @@ -269,9 +271,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/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index d3a26923b54..ef2b4802a40 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", @@ -992,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"}, @@ -1001,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/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 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/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/docs/features/unicode.md b/docs/features/unicode.md index 7ed178c30d7..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,22 +18,25 @@ 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 | |------------------------|------------------|--------------------------------------------------------------------------------| |`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| +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 | |-------------------|-------|-----------------------------------------------------------| 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/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/drivers/sensors/pmw3325.c b/drivers/sensors/pmw3325.c new file mode 100644 index 00000000000..96f22888246 --- /dev/null +++ b/drivers/sensors/pmw3325.c @@ -0,0 +1,173 @@ +// 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/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/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/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/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/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/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/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/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/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/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/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/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 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/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/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/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/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/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 a3ed14b1ca4..3d1e6402de4 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) || 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/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/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/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 + ), +}; 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/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 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/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/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/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/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 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; diff --git a/keyboards/splitkb/aurora/corne/rev1/config.h b/keyboards/splitkb/aurora/corne/rev1/config.h deleted file mode 100644 index 5a5910d81cd..00000000000 --- a/keyboards/splitkb/aurora/corne/rev1/config.h +++ /dev/null @@ -1,23 +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 OLED_DISPLAY_128X32 -# 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/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/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 522bea4d5e1..00000000000 --- a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h +++ /dev/null @@ -1,20 +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 OLED_DISPLAY_128X32 -#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 5a5910d81cd..00000000000 --- a/keyboards/splitkb/aurora/sweep/rev1/config.h +++ /dev/null @@ -1,23 +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 OLED_DISPLAY_128X32 -# 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 } } }, 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/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 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/lib/googletest b/lib/googletest index e2239ee6043..6910c9d9165 160000 --- a/lib/googletest +++ b/lib/googletest @@ -1 +1 @@ -Subproject commit e2239ee6043f73722e7aa812a459f54a28552929 +Subproject commit 6910c9d9165801d8827d628cb72eb7ea9dd538c5 diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py index 99775067e9b..f9f40e74a80 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 @@ -173,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 """ @@ -297,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 @@ -366,6 +350,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 +370,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/info.py b/lib/python/qmk/info.py index 95a9b8ab439..44fed0843ce 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) @@ -1151,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 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) 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; 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/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/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(); + } +} 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/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) 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. */ /** 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/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/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}),) 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/action.c b/quantum/action.c index aacafbe2ffb..9be3fbe3448 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 @@ -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; 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/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/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 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") 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" 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 } 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/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 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/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); 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); 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/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 { 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 diff --git a/keyboards/splitkb/aurora/helix/rev1/config.h b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h similarity index 80% rename from keyboards/splitkb/aurora/helix/rev1/config.h rename to tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h index 522bea4d5e1..92b4e61b1d7 100644 --- a/keyboards/splitkb/aurora/helix/rev1/config.h +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_flow_term/config.h @@ -1,4 +1,5 @@ -/* Copyright 2023 splitkb.com +/* 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 @@ -16,5 +17,7 @@ #pragma once -#define OLED_DISPLAY_128X32 -#define SPLIT_OLED_ENABLE +#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/keyboards/splitkb/aurora/lily58/rev1/config.h b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h similarity index 77% rename from keyboards/splitkb/aurora/lily58/rev1/config.h rename to tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h index 5a5910d81cd..0ae84c2cac1 100644 --- a/keyboards/splitkb/aurora/lily58/rev1/config.h +++ b/tests/tap_hold_configurations/speculative_hold/speculative_hold_one_key/config.h @@ -1,4 +1,5 @@ -/* Copyright 2022 splitkb.com +/* 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 @@ -16,8 +17,8 @@ #pragma once -// Not yet available in `info.json` -#ifdef OLED_ENABLE -# define OLED_DISPLAY_128X32 -# define SPLIT_OLED_ENABLE -#endif +#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.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/keyboard_report_util.hpp b/tests/test_common/keyboard_report_util.hpp index 8a7d716869c..d4a4622c247 100644 --- a/tests/test_common/keyboard_report_util.hpp +++ b/tests/test_common/keyboard_report_util.hpp @@ -33,7 +33,11 @@ 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(std::vector({keys...}))); + return testing::MakeMatcher(new KeyboardReportMatcher({static_cast(keys)...})); } 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_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(); 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" 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 ceab9eef9ab..38abb3781cd 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 @@ -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 @@ -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), 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; } 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) 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