From 4ddf8ff8781aa1f7d01310692c56dced81c4d952 Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:20:08 +0900 Subject: [PATCH 1/7] feat: prepare GeaconSolstice ZMK 0.4 validation baseline --- boards/shields/GeaconSolstice/Solstice_L.conf | 7 ++ .../shields/GeaconSolstice/Solstice_L.overlay | 4 ++ boards/shields/GeaconSolstice/Solstice_R.conf | 10 +-- .../shields/GeaconSolstice/Solstice_R.overlay | 15 ++-- build.yaml | 18 ++--- config/west.yml | 69 ++++++++++--------- docs/zmk-0.4-validation.md | 18 +++++ snippets/Solstice_JIS/Solstice_JIS.conf | 11 --- snippets/Solstice_US/Solstice_US.conf | 11 --- snippets/cdc-boot/cdc-boot.conf | 1 + snippets/cdc-boot/cdc-boot.overlay | 6 ++ snippets/cdc-boot/snippet.yml | 4 ++ 12 files changed, 97 insertions(+), 77 deletions(-) create mode 100644 docs/zmk-0.4-validation.md create mode 100644 snippets/cdc-boot/cdc-boot.conf create mode 100644 snippets/cdc-boot/cdc-boot.overlay create mode 100644 snippets/cdc-boot/snippet.yml diff --git a/boards/shields/GeaconSolstice/Solstice_L.conf b/boards/shields/GeaconSolstice/Solstice_L.conf index fc8f86d..c77576c 100644 --- a/boards/shields/GeaconSolstice/Solstice_L.conf +++ b/boards/shields/GeaconSolstice/Solstice_L.conf @@ -64,3 +64,10 @@ CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE=10000 CONFIG_ZMK_BLE_MANAGEMENT_STUDIO_RPC=y CONFIG_ZMK_SPLIT_RELAY_EVENT=y CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE=768 +CONFIG_ZMK_USB=y +CONFIG_ZMK_USB_LOGGING=y +CONFIG_ZMK_STUDIO=y +CONFIG_ZMK_STUDIO_LOCKING=n +CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y +CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y +CONFIG_RGBLED_WIDGET_BATTERY_SHOW_PERIPHERALS=y diff --git a/boards/shields/GeaconSolstice/Solstice_L.overlay b/boards/shields/GeaconSolstice/Solstice_L.overlay index 5a4a2e9..f4cccfb 100644 --- a/boards/shields/GeaconSolstice/Solstice_L.overlay +++ b/boards/shields/GeaconSolstice/Solstice_L.overlay @@ -187,3 +187,7 @@ &xiao_serial { status = "disabled"; }; &uart0 { status = "disabled";}; + +&uicr { + nfct-pins-as-gpios; +}; diff --git a/boards/shields/GeaconSolstice/Solstice_R.conf b/boards/shields/GeaconSolstice/Solstice_R.conf index 82d3378..5cea7e7 100644 --- a/boards/shields/GeaconSolstice/Solstice_R.conf +++ b/boards/shields/GeaconSolstice/Solstice_R.conf @@ -1,11 +1,7 @@ CONFIG_SPI=y -CONFIG_PMW3610=y -CONFIG_PMW3610_SWAP_XY=n -CONFIG_PMW3610_INVERT_X=n -CONFIG_PMW3610_INVERT_Y=y -CONFIG_PMW3610_REPORT_INTERVAL_MIN=12 -CONFIG_PMW3610_INIT_POWER_UP_EXTRA_DELAY_MS=1000 +CONFIG_INPUT_PMW3610=y +CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE=2048 # CONFIG_BT_BAS=y # CONFIG_BT_PERIPHERAL_PREF_MIN_INT=12 @@ -32,4 +28,4 @@ CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE=10000 # CONFIG_ZMK_BATTERY_HISTORY=y CONFIG_ZMK_SETTINGS_RPC=y -CONFIG_ZMK_SPLIT_RELAY_EVENT=y \ No newline at end of file +CONFIG_ZMK_SPLIT_RELAY_EVENT=y diff --git a/boards/shields/GeaconSolstice/Solstice_R.overlay b/boards/shields/GeaconSolstice/Solstice_R.overlay index 5749a46..572d20a 100644 --- a/boards/shields/GeaconSolstice/Solstice_R.overlay +++ b/boards/shields/GeaconSolstice/Solstice_R.overlay @@ -32,11 +32,12 @@ compatible = "pixart,pmw3610"; reg = <0>; spi-max-frequency = <2000000>; - irq-gpios = <&xiao_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - cpi = <800>; - evt-type = ; - x-input-code = ; - y-input-code = ; + motion-gpios = <&xiao_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + res-cpi = <800>; + zephyr,axis-x = ; + zephyr,axis-y = ; + invert-y; + smart-mode; force-awake; }; }; @@ -62,3 +63,7 @@ &xiao_serial { status = "disabled"; }; &xiao_i2c { status = "disabled"; }; &uart0 { status = "disabled";}; + +&uicr { + nfct-pins-as-gpios; +}; diff --git a/build.yaml b/build.yaml index 79bb7c1..02f9d27 100644 --- a/build.yaml +++ b/build.yaml @@ -1,25 +1,25 @@ --- include: - - board: seeeduino_xiao_ble + - board: xiao_ble//zmk shield: Solstice_L rgbled_adapter dongle_display - snippet: zmk-usb-logging studio-rpc-usb-uart Solstice_US + snippet: zmk-usb-logging studio-rpc-usb-uart cdc-boot battery-voltage-divider-oversampling Solstice_US artifact-name: Solstice_L_US - - board: seeeduino_xiao_ble + - board: xiao_ble//zmk shield: Solstice_R rgbled_adapter - snippet: zmk-usb-logging studio-rpc-usb-uart Solstice_US + snippet: Solstice_US artifact-name: Solstice_R_US - - board: seeeduino_xiao_ble + - board: xiao_ble//zmk shield: Solstice_L rgbled_adapter dongle_display - snippet: zmk-usb-logging studio-rpc-usb-uart Solstice_JIS + snippet: zmk-usb-logging studio-rpc-usb-uart cdc-boot battery-voltage-divider-oversampling Solstice_JIS artifact-name: Solstice_L_JIS - - board: seeeduino_xiao_ble + - board: xiao_ble//zmk shield: Solstice_R rgbled_adapter - snippet: zmk-usb-logging studio-rpc-usb-uart Solstice_JIS + snippet: Solstice_JIS artifact-name: Solstice_R_JIS - - board: seeeduino_xiao_ble + - board: xiao_ble//zmk shield: settings_reset diff --git a/config/west.yml b/config/west.yml index 41a3325..4184db9 100644 --- a/config/west.yml +++ b/config/west.yml @@ -23,56 +23,57 @@ manifest: - name: yamaryu211 url-base: https://github.com/yamaryu211 projects: - - name: zmk + - name: zmk # remote: zmkfirmware remote: te9no - revision: v0.3-branch+dya + revision: afe241df80b05c3f4e0cc95ada7584d24422a893 import: app/west.yml - - name: zmk-rgbled-widget - remote: caksoylar - revision: v0.3 - - name: zmk-pmw3610-driver - remote: efogdev - # remote: badjeff - revision: main - # revision: zmk-0.3 + - name: zmk-rgbled-widget + remote: caksoylar + revision: e6b467792a1dabef8cfa5c9fd26bfefc9c16662b - name: zmk-analog-input-driver remote: badjeff - revision: main + revision: 2684f22ee7e2168d4393f7e63676912210a796fc - name: zmk-module-analoginput-rpc remote: te9no - revision: main + revision: e065461e907fa924c0029e1d4c94cec1d9093e17 - name: zmk-dongle-display remote: te9no - revision: main - - name: zmk-input-processor-keybind - remote: te9no - # remote: te9no - revision: main - - name: zmk-layout-shift - remote: kot149 - revision: v1 - - name: zmk-input-processor-temp-layer-threshold - remote: yamaryu211 - revision: main + revision: fbcd8b6a4148cf2b44a3813a7acc0400fdbb1088 + - name: zmk-input-processor-keybind + remote: te9no + # remote: te9no + revision: 10ad463f2e3c7a7dfb4b7cffd6bddd0e9e8b5bae + - name: zmk-layout-shift + remote: kot149 + revision: 4d71f7cb743256ac619873dd44f510e9e9562739 + - name: zmk-input-processor-temp-layer-threshold + remote: yamaryu211 + revision: e7f39d5a61bc697d4f7e9a28212568fbda81d676 # - name: prospector-zmk-module # remote: prospector # revision: v1.1.1 # path: modules/prospector-zmk-module - - name: zmk-module-runtime-input-processor - remote: cormoran - revision: main - - name: zmk-module-battery-history - remote: cormoran - revision: main - - name: zmk-module-ble-management - remote: cormoran - revision: main + - name: zmk-module-runtime-input-processor + remote: te9no + revision: 72387b5212264d26d704dbc43c765f6485470a77 + - name: zmk-module-battery-history + remote: cormoran + revision: 307755dd2ad4d320e14de162e8e5ef018f29d929 + - name: zmk-module-ble-management + remote: cormoran + revision: 57738cc4fc6ba80e82a7ac57741a0339cb186cd4 - name: zmk-module-settings-rpc remote: cormoran - revision: main + revision: 083a299dd8d31c275809c5a249b12486be24a7d2 - name: zmk-feature-module-physical-layout remote: cormoran - revision: main + revision: 4f18de45dc27820725d267916b4cdacc0e0b6cf9 + - name: zmk-feature-cdc-acm-bootloader-trigger + remote: te9no + revision: 1850754d269aab9ba73e4639371bfe59a4130e65 + - name: zmk-module-battery-nrf-vddh-oversampling + remote: te9no + revision: 59fc126f859d4e7700186c9906e4645379763c34 self: path: config diff --git a/docs/zmk-0.4-validation.md b/docs/zmk-0.4-validation.md new file mode 100644 index 0000000..83b57f4 --- /dev/null +++ b/docs/zmk-0.4-validation.md @@ -0,0 +1,18 @@ +# ZMK 0.4 validation + +The `codex/zmk-0.4-baseline` branch is a hardware-validation branch. A green CI +matrix proves build compatibility only and does not authorize merging to +`main`. + +Before promotion, verify: + +- left/right split pairing and normal key input for both US and JIS builds; +- left analog stick movement, scrolling, runtime processing, and Studio RPC; +- right PMW3610 movement, scrolling, wake behavior, and split transport; +- dongle display and RGB LED widget behavior on the left central; +- CDC UF2 entry and USB logging on the left central; +- battery reporting and voltage oversampling; +- idle sleep and reconnect behavior. + +Record the tested hardware revision and result on the pull request before +marking it ready for review. diff --git a/snippets/Solstice_JIS/Solstice_JIS.conf b/snippets/Solstice_JIS/Solstice_JIS.conf index a2782a9..0a832d1 100644 --- a/snippets/Solstice_JIS/Solstice_JIS.conf +++ b/snippets/Solstice_JIS/Solstice_JIS.conf @@ -1,13 +1,9 @@ -CONFIG_ZMK_USB=y CONFIG_ZMK_BLE=y CONFIG_ZMK_POINTING=y CONFIG_ZMK_MOUSE=y CONFIG_INPUT=y CONFIG_PINCTRL=y -CONFIG_NFCT_PINS_AS_GPIOS=y - -CONFIG_ZMK_USB_LOGGING=y CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 CONFIG_RGBLED_WIDGET=y @@ -16,21 +12,14 @@ CONFIG_RGBLED_WIDGET_BATTERY_LEVEL_HIGH=50 CONFIG_RGBLED_WIDGET_BATTERY_LEVEL_CRITICAL=10 CONFIG_RGBLED_WIDGET_SHOW_LAYER_CHANGE=y CONFIG_RGBLED_WIDGET_LAYER_COLOR=7 -CONFIG_RGBLED_WIDGET_BATTERY_SHOW_PERIPHERALS=y CONFIG_ZMK_BATTERY_REPORTING=y -CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y -CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y CONFIG_ZMK_BLE_THREAD_STACK_SIZE=2048 CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE=2048 CONFIG_INPUT_THREAD_STACK_SIZE=2048 -CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE=2048 -CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE=3096 CONFIG_BT_CTLR_PHY_2M=n -CONFIG_ZMK_STUDIO=y -CONFIG_ZMK_STUDIO_LOCKING=n CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5 CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=7 diff --git a/snippets/Solstice_US/Solstice_US.conf b/snippets/Solstice_US/Solstice_US.conf index a2782a9..0a832d1 100644 --- a/snippets/Solstice_US/Solstice_US.conf +++ b/snippets/Solstice_US/Solstice_US.conf @@ -1,13 +1,9 @@ -CONFIG_ZMK_USB=y CONFIG_ZMK_BLE=y CONFIG_ZMK_POINTING=y CONFIG_ZMK_MOUSE=y CONFIG_INPUT=y CONFIG_PINCTRL=y -CONFIG_NFCT_PINS_AS_GPIOS=y - -CONFIG_ZMK_USB_LOGGING=y CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=8000 CONFIG_RGBLED_WIDGET=y @@ -16,21 +12,14 @@ CONFIG_RGBLED_WIDGET_BATTERY_LEVEL_HIGH=50 CONFIG_RGBLED_WIDGET_BATTERY_LEVEL_CRITICAL=10 CONFIG_RGBLED_WIDGET_SHOW_LAYER_CHANGE=y CONFIG_RGBLED_WIDGET_LAYER_COLOR=7 -CONFIG_RGBLED_WIDGET_BATTERY_SHOW_PERIPHERALS=y CONFIG_ZMK_BATTERY_REPORTING=y -CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y -CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y CONFIG_ZMK_BLE_THREAD_STACK_SIZE=2048 CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE=2048 CONFIG_INPUT_THREAD_STACK_SIZE=2048 -CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE=2048 -CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE=3096 CONFIG_BT_CTLR_PHY_2M=n -CONFIG_ZMK_STUDIO=y -CONFIG_ZMK_STUDIO_LOCKING=n CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5 CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=7 diff --git a/snippets/cdc-boot/cdc-boot.conf b/snippets/cdc-boot/cdc-boot.conf new file mode 100644 index 0000000..2ae27ad --- /dev/null +++ b/snippets/cdc-boot/cdc-boot.conf @@ -0,0 +1 @@ +CONFIG_ZMK_CDC_ACM_BOOTLOADER_TRIGGER=y diff --git a/snippets/cdc-boot/cdc-boot.overlay b/snippets/cdc-boot/cdc-boot.overlay new file mode 100644 index 0000000..cd83f70 --- /dev/null +++ b/snippets/cdc-boot/cdc-boot.overlay @@ -0,0 +1,6 @@ +/ { + bootloader_trigger: bootloader_trigger { + compatible = "zmk,cdc-acm-bootloader-trigger"; + cdc-port = <&snippet_zmk_usb_logging_uart>; + }; +}; diff --git a/snippets/cdc-boot/snippet.yml b/snippets/cdc-boot/snippet.yml new file mode 100644 index 0000000..a5ec7f6 --- /dev/null +++ b/snippets/cdc-boot/snippet.yml @@ -0,0 +1,4 @@ +name: cdc-boot +append: + EXTRA_DTC_OVERLAY_FILE: cdc-boot.overlay + EXTRA_CONF_FILE: cdc-boot.conf From 576bde8a3e0b5103154861bcb43b85f006621acd Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:27:02 +0900 Subject: [PATCH 2/7] fix: pin LVGL 9 display support and stable artifacts --- .github/workflows/build.yml | 10 ++++++---- boards/shields/GeaconSolstice/Solstice_L.conf | 1 - build.yaml | 3 ++- config/west.yml | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4354939..b211320 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,10 +2,12 @@ on: workflow_dispatch: push: paths: - - config/** - - boards/** - - build.yaml + - config/** + - boards/** + - snippets/** + - build.yaml + - .github/workflows/build.yml jobs: build: - uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@v0.3 \ No newline at end of file + uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@v0.3 diff --git a/boards/shields/GeaconSolstice/Solstice_L.conf b/boards/shields/GeaconSolstice/Solstice_L.conf index c77576c..3e0cc3e 100644 --- a/boards/shields/GeaconSolstice/Solstice_L.conf +++ b/boards/shields/GeaconSolstice/Solstice_L.conf @@ -32,7 +32,6 @@ CONFIG_ZMK_RUNTIME_INPUT_PROCESSOR_STUDIO_RPC=y # Enable non-key physical devices in Dya/ZMK Studio. CONFIG_ZMK_PHYSICAL_LAYOUTS_FEATURE=y CONFIG_ZMK_PHYSICAL_LAYOUTS_FEATURE_STUDIO_RPC=y -CONFIG_COMPILER_OPT="-DDT_NODE_HASH(node_id)=DT_DEP_ORD(node_id)" # Enable dependencies CONFIG_SETTINGS=y diff --git a/build.yaml b/build.yaml index 02f9d27..6d86b58 100644 --- a/build.yaml +++ b/build.yaml @@ -21,5 +21,6 @@ include: artifact-name: Solstice_R_JIS - board: xiao_ble//zmk - shield: settings_reset + shield: settings_reset + artifact-name: settings_reset diff --git a/config/west.yml b/config/west.yml index 4184db9..2fa0b86 100644 --- a/config/west.yml +++ b/config/west.yml @@ -39,7 +39,7 @@ manifest: revision: e065461e907fa924c0029e1d4c94cec1d9093e17 - name: zmk-dongle-display remote: te9no - revision: fbcd8b6a4148cf2b44a3813a7acc0400fdbb1088 + revision: 51c1e536246638aa91deb3bd543e2db02c45ba6a - name: zmk-input-processor-keybind remote: te9no # remote: te9no From 81944841eda7b7bb38e40f43d1be57435fbfe96a Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:27:21 +0900 Subject: [PATCH 3/7] style: remove workflow trailing whitespace --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b211320..831ea2d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,4 +10,4 @@ on: jobs: build: - uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@v0.3 + uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@v0.3 From f7c279b4932aad1e1e23ba42fa68c439fd2d5e4d Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:32:07 +0900 Subject: [PATCH 4/7] fix: pin complete LVGL 9 dongle display migration --- config/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/west.yml b/config/west.yml index 2fa0b86..9c8a7b6 100644 --- a/config/west.yml +++ b/config/west.yml @@ -39,7 +39,7 @@ manifest: revision: e065461e907fa924c0029e1d4c94cec1d9093e17 - name: zmk-dongle-display remote: te9no - revision: 51c1e536246638aa91deb3bd543e2db02c45ba6a + revision: 4c5c935302221c428e0168ee5baa8ea8fec27e38 - name: zmk-input-processor-keybind remote: te9no # remote: te9no From 7c90009dede8812c00534451a3b2cf1b85443e5e Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:35:30 +0900 Subject: [PATCH 5/7] fix: pin corrected LVGL image descriptors --- config/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/west.yml b/config/west.yml index 9c8a7b6..b5a9cda 100644 --- a/config/west.yml +++ b/config/west.yml @@ -39,7 +39,7 @@ manifest: revision: e065461e907fa924c0029e1d4c94cec1d9093e17 - name: zmk-dongle-display remote: te9no - revision: 4c5c935302221c428e0168ee5baa8ea8fec27e38 + revision: b8361cf566d31705c371acfff3a8875c587bd7c9 - name: zmk-input-processor-keybind remote: te9no # remote: te9no From 2027a8d431e86c9b161d7492e9be137add7e0363 Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:39:33 +0900 Subject: [PATCH 6/7] fix: pin ZMK 0.4 temp-layer processor API --- config/west.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/west.yml b/config/west.yml index b5a9cda..c995320 100644 --- a/config/west.yml +++ b/config/west.yml @@ -48,8 +48,8 @@ manifest: remote: kot149 revision: 4d71f7cb743256ac619873dd44f510e9e9562739 - name: zmk-input-processor-temp-layer-threshold - remote: yamaryu211 - revision: e7f39d5a61bc697d4f7e9a28212568fbda81d676 + remote: te9no + revision: 89520778db4401aea543e45c3b52817a0068666d # - name: prospector-zmk-module # remote: prospector # revision: v1.1.1 From 1b64a3248dcfde13492c937e4ec6c211e882327b Mon Sep 17 00:00:00 2001 From: te9no Date: Fri, 21 Aug 2026 20:43:30 +0900 Subject: [PATCH 7/7] fix: pin ZMK 0.4 display endpoint API --- config/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/west.yml b/config/west.yml index c995320..3e00297 100644 --- a/config/west.yml +++ b/config/west.yml @@ -39,7 +39,7 @@ manifest: revision: e065461e907fa924c0029e1d4c94cec1d9093e17 - name: zmk-dongle-display remote: te9no - revision: b8361cf566d31705c371acfff3a8875c587bd7c9 + revision: f6c1c0d0b73ac7e579d6eaeec2d15a01c7c89d52 - name: zmk-input-processor-keybind remote: te9no # remote: te9no