feat(q5_max): enable Keychron RGB and fix EEPROM persistence #18
Reference in New Issue
Block a user
Delete Branch "feat/keychron-rgb-persistence"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
KEYCHRON_RGB_ENABLEfor the Q5 Max, wiring upPER_KEY_RGBandMIXED_RGBeffects with proper defaults (default_per_key_led[],default_region[])VIA_EEPROM_MAGIC_ADDRto a fixed offset so future Keychron EEPROM growth can't silently corrupt the stored keymapChanges by file
rules.mkKEYCHRON_RGB_ENABLE = yes— master flag enabling all Keychron custom RGB codeeeconfig_kb.h#undef EECONFIG_KB_DATA_SIZEbefore the Keychron redefinition to suppress redefinition of QMK's default-zero valuekeychron_rgb.c— four EEPROM bug fixesretail_demo_enablenever written to EEPROM —eeconfig_reset_custom_rgb()usedeeprom_read_blockinstead ofeeprom_update_block, leaving0xFFon freshly-flashed boards;retail_demo_task()treats any non-zero value as "demo active" and forces the mode toCUSTOM_MIXED_RGBevery scan, preventing any other mode from stickingretail_demo_enable > 1to0to recover boards already affected by the aboveeeprom_update_dword(EECONFIG_KEYBOARD, ...)moved fromeeconfig_init_custom_rgb()(load) toeeconfig_reset_custom_rgb()(write), so the version is only stamped when valid defaults are actually committed to EEPROMkc_rgb_save()now callseeconfig_update_rgb_matrix()so the current mode (e.g.CUSTOM_MIXED_RGB) is saved alongside Keychron data; without this,rgb_matrix_init()on transport change reloads the compile-time defaultRGB_MATRIX_TYPING_HEATMAPmixed_rgb.c/rgb_matrix_kb.inc#include "eeconfig_custom_rgb.h"soEECONFIG_SIZE_CUSTOM_RGBis in scope for the compile guards that gate the custom effectsansi_encoder.cdefault_per_key_led[](red Esc/CapsLock, yellow modifiers, blue alpha keys) anddefault_region[](all keys in region 0) — both areextern'd bykeychron_rgb.cq5_max.ceeconfig_init_custom_rgb()inkeyboard_post_init_kb()so Keychron RGB arrays are loaded from EEPROM on boot instead of being zero-initialisedwireless_enter_connected_kb()hook: re-applies the EEPROM-saved QMK RGB mode after BT/2.4G reconnect in case the reconnect sequence resets the in-RAM mode before the display settleskeymap.crgb_matrix_mode()/rgb_matrix_sethsv()calls (which write to EEPROM and overwrite the Launcher-configured mode) with adip_win_activeflag;rgb_matrix_indicators_advanced_user()paints all LEDs white each frame when the flag is set, leaving the active effect and EEPROM untouchedQK_CLEAR_EEPROMto the KEEB_CTL layer as an escape hatch for EEPROM recoveryconfig.hVIA_EEPROM_MAGIC_ADDR 544to anchor VIA keymap storage at a fixed EEPROM offset; without this, growth inEECONFIG_KB_DATA_SIZEsilently shifts the keymap block, corrupting stored layouts (observed as layer-0 keys reverting toKC_NONEon boot)Test plan
QK_CLEAR_EEPROMon KEEB_CTL layer resets EEPROM as expected