Skip to content

1.3.0

Choose a tag to compare

@zerodice0 zerodice0 released this 30 Nov 08:02

Release Notes - November 30, 2025

Summary

This release focuses on Split Keyboard Communication Stability improvements and Firmware Size Optimization. The update resolves an issue where the slave keyboard stops responding during LED effect switching on Iris CE, implements power consumption limits, enables split watchdog for automatic recovery, and reduces duplicate RGB effect switching keys.


Key Changes

1. Split Keyboard Communication Stability πŸ”§

Problem Solved: When switching LED effects on Iris CE split keyboard, the slave (right) half would stop responding entirely. The issue persisted until the keyboard cable was physically reconnected.

Root Cause Analysis:

  1. Power Overconsumption: RGB Matrix brightness at 120 (default) draws excessive current during effect transitions
  2. Communication Overload: Three duplicate RM_NEXT keys in _BOTH_UNDER layer triggered simultaneous effect changes
  3. No Recovery Mechanism: Split watchdog was disabled, preventing automatic recovery from communication failures

Solution Implemented:

config.h Changes:

// Split Keyboard Stability Settings
#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100  // Reduced from 120 to limit power consumption
#define SPLIT_WATCHDOG_TIMEOUT 3000        // Auto-recovery after 3 seconds of communication loss

rules.mk Changes:

SPLIT_WATCHDOG_ENABLE = yes  # Enable automatic recovery from communication failures

keymap.c Changes:

  • Removed duplicate RM_NEXT keys from _BOTH_UNDER layer (3 β†’ 1)
  • Kept single RM_NEXT at top-left position (ESC key location)

Technical Details:

Setting Before After Impact
RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 100 ~17% power reduction
SPLIT_WATCHDOG_ENABLE no yes Auto-recovery enabled
SPLIT_WATCHDOG_TIMEOUT N/A 3000ms 3-second recovery window
RM_NEXT keys in _BOTH_UNDER 3 1 Reduced communication load

2. Firmware Size Optimization πŸ“¦

Current Build Statistics:

  • Firmware Size: 26,918 / 28,672 bytes (93%)
  • Free Space: 1,754 bytes
  • Improvement: From 98% to 93% utilization

Optimizations Applied:

Optimization Impact
CONSOLE_ENABLE = no ~1,000-1,500 bytes saved
const β†’ #define conversion Minor savings
RGB Matrix effects: 45 β†’ 30 Significant savings
SPLIT_WATCHDOG_ENABLE = yes Minimal overhead added

RGB Matrix Effects (30 Enabled):

  • Basic (5): Solid Color, Alpha Mods, Gradient Up/Down, Gradient Left/Right, Breathing
  • Cycle (8): All, Left/Right, Up/Down, Out/In, Out/In Dual, Pinwheel, Spiral, Rainbow Moving Chevron
  • Hue (3): Breathing, Pendulum, Wave
  • Special (7): Raindrops, Jellybean Raindrops, Pixel Rain, Pixel Flow, Pixel Fractal, Typing Heatmap, Digital Rain
  • Reactive (7): Simple, Standard, Wide, Cross, Nexus, Splash, Solid Splash

3. Layer 3 (_BOTH_UNDER) Layout Update 🎹

Before (3 RM_NEXT keys):

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚RM_NEXT β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚KC_LPRN β”‚KC_RPRN β”‚ KC_EQL β”‚ KC_GT  β”‚KC_LCBR β”‚KC_RCBR β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ _______β”‚ _______β”‚KC_MINS β”‚ KC_GT  β”‚ _______β”‚ _______β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚RM_NEXT β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚QK_BOOT β”‚  ← Was RM_NEXT
        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
        β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
        β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚RM_NEXT β”‚ _______β”‚  ← Was RM_NEXT
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

After (1 RM_NEXT key):

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚RM_NEXT β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚  ← Single RM_NEXT
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚KC_LPRN β”‚KC_RPRN β”‚ KC_EQL β”‚ KC_GT  β”‚KC_LCBR β”‚KC_RCBR β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ _______β”‚ _______β”‚KC_MINS β”‚ KC_GT  β”‚ _______β”‚ _______β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚QK_BOOT β”‚  ← Now _______
        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
        β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
        β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚ _______β”‚  ← Now _______
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technical Specifications

Platform Support

  • βœ… Iris Rev7 (ATmega32u4): HEX file output
  • βœ… Iris CE Rev1 (RP2040): UF2 file output

Build Specifications

  • Firmware Size: 26,918 / 28,672 bytes (93%)
  • Free Space: 1,754 bytes
  • QMK Version: Compatible with QMK 0.24.0+

Configuration Changes Summary

config.h:

#pragma once

// Split Keyboard Stability Settings
#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100
#define SPLIT_WATCHDOG_TIMEOUT 3000

// RGB Matrix Effects (30 total)
// Basic (5), Cycle (8), Hue (3), Special (7), Reactive (7)

rules.mk:

SPLIT_WATCHDOG_ENABLE = yes  # Auto-recovery from communication failures

Build Commands

# Iris Rev7 (ATmega32u4 - HEX file)
qmk compile -kb keebio/iris/rev7 -km zerodice0

# Iris CE Rev1 (RP2040 - UF2 file)
qmk compile -kb keebio/iris_ce/rev1 -km zerodice0

Flash Firmware

# Rev7
qmk flash -kb keebio/iris/rev7 -km zerodice0

# CE Rev1 - Copy UF2 to RPI-RP2 drive

Testing Guide

Split Keyboard Stability Test

  1. Flash firmware to both keyboard halves
  2. Connect keyboard via USB
  3. Rapidly switch LED effects using RM_NEXT key (FN1 + FN2 + ESC)
  4. Verify slave keyboard remains responsive
  5. If communication drops, wait 3 seconds for auto-recovery

Verification Checklist

  • LED effects switch smoothly on both halves
  • Slave keyboard responds to keypresses after effect changes
  • No cable reconnection required during normal use
  • Auto-recovery works after intentional cable disconnect/reconnect

Migration Guide

From Previous Version

No Breaking Changes: All existing functionality preserved.

New Behavior:

  • RGB brightness reduced from 120 to 100 (slightly dimmer, more stable)
  • Split watchdog enables automatic recovery from communication failures
  • Single RM_NEXT key in _BOTH_UNDER layer (top-left position)

Testing Recommendations:

  1. Test LED effect switching extensively
  2. Verify both halves respond during effect transitions
  3. Test communication recovery by briefly disconnecting/reconnecting cable

Known Issues & Limitations

Resolved Issues

  • βœ… Slave keyboard unresponsive during LED effect switching: Fixed with brightness limit + watchdog + RM_NEXT deduplication

Current Limitations

  • ℹ️ Brightness reduced: RGB effects are ~17% dimmer for stability
  • ℹ️ Single RM_NEXT key: Effect switching now only from left-hand side (FN1 + FN2 + ESC)

μš”μ•½

이 λ¦΄λ¦¬μ¦ˆλŠ” Split ν‚€λ³΄λ“œ 톡신 μ•ˆμ •μ„± κ°œμ„ κ³Ό νŽŒμ›¨μ–΄ μš©λŸ‰ μ΅œμ ν™”μ— 쀑점을 λ‘‘λ‹ˆλ‹€. Iris CEμ—μ„œ LED 효과 μ „ν™˜ μ‹œ slave ν‚€λ³΄λ“œκ°€ μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ” 문제λ₯Ό ν•΄κ²°ν•˜κ³ , μ „λ ₯ μ†ŒλΉ„ μ œν•œμ„ κ΅¬ν˜„ν•˜λ©°, μžλ™ 볡ꡬλ₯Ό μœ„ν•œ split watchdog을 ν™œμ„±ν™”ν•˜κ³ , μ€‘λ³΅λœ RGB 효과 μ „ν™˜ ν‚€λ₯Ό μ€„μ˜€μŠ΅λ‹ˆλ‹€.


μ£Όμš” 변경사항

1. Split ν‚€λ³΄λ“œ 톡신 μ•ˆμ •μ„± πŸ”§

ν•΄κ²°λœ 문제: Iris CE split ν‚€λ³΄λ“œμ—μ„œ LED 효과λ₯Ό μ „ν™˜ν•  λ•Œ slave(였λ₯Έμͺ½) 절반이 μ™„μ „νžˆ μ‘λ‹΅ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ν‚€λ³΄λ“œ 케이블을 물리적으둜 μž¬μ—°κ²°ν•˜κΈ° μ „κΉŒμ§€ λ¬Έμ œκ°€ μ§€μ†λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ·Όλ³Έ 원인 뢄석:

  1. μ „λ ₯ κ³Όλ‹€ μ†ŒλΉ„: RGB Matrix 밝기 120(κΈ°λ³Έκ°’)이 효과 μ „ν™˜ 쀑 κ³Όλ„ν•œ μ „λ₯˜ μ†ŒλΉ„
  2. 톡신 κ³ΌλΆ€ν•˜: _BOTH_UNDER λ ˆμ΄μ–΄μ˜ 3개 쀑볡 RM_NEXT ν‚€κ°€ λ™μ‹œ 효과 λ³€κ²½ 트리거
  3. 볡ꡬ λ©”μ»€λ‹ˆμ¦˜ μ—†μŒ: Split watchdog이 λΉ„ν™œμ„±ν™”λ˜μ–΄ 톡신 μ‹€νŒ¨ μ‹œ μžλ™ 볡ꡬ λΆˆκ°€

κ΅¬ν˜„λœ ν•΄κ²°μ±…:

μ„€μ • 이전 이후 영ν–₯
RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 100 ~17% μ „λ ₯ κ°μ†Œ
SPLIT_WATCHDOG_ENABLE no yes μžλ™ 볡ꡬ ν™œμ„±ν™”
SPLIT_WATCHDOG_TIMEOUT N/A 3000ms 3초 볡ꡬ 창
_BOTH_UNDER의 RM_NEXT ν‚€ 3개 1개 톡신 λΆ€ν•˜ κ°μ†Œ

2. νŽŒμ›¨μ–΄ μš©λŸ‰ μ΅œμ ν™” πŸ“¦

ν˜„μž¬ λΉŒλ“œ 톡계:

  • νŽŒμ›¨μ–΄ 크기: 26,918 / 28,672 bytes (93%)
  • μ—¬μœ  곡간: 1,754 bytes
  • κ°œμ„ : 98%μ—μ„œ 93% μ‚¬μš©λ₯ λ‘œ κ°μ†Œ

적용된 μ΅œμ ν™”:

μ΅œμ ν™” 효과
CONSOLE_ENABLE = no ~1,000-1,500 bytes 절감
const β†’ #define λ³€ν™˜ μ†Œν­ 절감
RGB Matrix 효과: 45 β†’ 30 μƒλ‹Ήν•œ 절감
SPLIT_WATCHDOG_ENABLE = yes μ΅œμ†Œ μ˜€λ²„ν—€λ“œ μΆ”κ°€

3. λ ˆμ΄μ–΄ 3 (_BOTH_UNDER) λ ˆμ΄μ•„μ›ƒ μ—…λ°μ΄νŠΈ 🎹

  • RM_NEXT ν‚€ 3κ°œμ—μ„œ 1개둜 κ°μ†Œ
  • 단일 RM_NEXT ν‚€λŠ” μ™Όμͺ½ 상단 μœ„μΉ˜ (ESC ν‚€ μœ„μΉ˜)에 μœ μ§€

ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ

Split ν‚€λ³΄λ“œ μ•ˆμ •μ„± ν…ŒμŠ€νŠΈ

  1. μ–‘μͺ½ ν‚€λ³΄λ“œ μ ˆλ°˜μ— νŽŒμ›¨μ–΄ ν”Œλž˜μ‹œ
  2. USB둜 ν‚€λ³΄λ“œ μ—°κ²°
  3. RM_NEXT ν‚€ (FN1 + FN2 + ESC)둜 LED 효과 λΉ λ₯΄κ²Œ μ „ν™˜
  4. slave ν‚€λ³΄λ“œκ°€ 응닡을 μœ μ§€ν•˜λŠ”μ§€ 확인
  5. 톡신이 λŠμ–΄μ§€λ©΄ μžλ™ 볡ꡬλ₯Ό μœ„ν•΄ 3초 λŒ€κΈ°

확인 체크리슀트

  • LED νš¨κ³Όκ°€ μ–‘μͺ½μ—μ„œ λΆ€λ“œλŸ½κ²Œ μ „ν™˜λ¨
  • 효과 λ³€κ²½ ν›„ slave ν‚€λ³΄λ“œκ°€ ν‚€ μž…λ ₯에 응닡함
  • 정상 μ‚¬μš© 쀑 케이블 μž¬μ—°κ²°μ΄ ν•„μš” μ—†μŒ
  • μ˜λ„μ μΈ 케이블 뢄리/μž¬μ—°κ²° ν›„ μžλ™ 볡ꡬ μž‘λ™

μ•Œλ €μ§„ 문제 및 μ œν•œμ‚¬ν•­

ν•΄κ²°λœ 문제

  • βœ… LED 효과 μ „ν™˜ 쀑 slave ν‚€λ³΄λ“œ 무응닡: 밝기 μ œν•œ + watchdog + RM_NEXT 쀑볡 제거둜 ν•΄κ²°

ν˜„μž¬ μ œν•œμ‚¬ν•­

  • ℹ️ 밝기 κ°μ†Œ: RGB νš¨κ³Όκ°€ μ•ˆμ •μ„±μ„ μœ„ν•΄ ~17% μ–΄λ‘μ›Œμ§
  • ℹ️ 단일 RM_NEXT ν‚€: 효과 μ „ν™˜μ€ 이제 왼손 μͺ½μ—μ„œλ§Œ κ°€λŠ₯ (FN1 + FN2 + ESC)