From 4f4af7347c3ca8a35c151c5e97e3bd85ae6623f4 Mon Sep 17 00:00:00 2001 From: openshwprojects <85486843+openshwprojects@users.noreply.github.com> Date: Wed, 7 Jan 2026 15:43:11 +0100 Subject: [PATCH] resend LED driver currents on currents change (do not wait for colors change) (#1932) * test * add missing --- src/cmnds/cmd_newLEDDriver.c | 9 +++++++++ src/cmnds/cmd_public.h | 1 + src/driver/drv_bp1658cj.c | 2 ++ src/driver/drv_bp5758d.c | 1 + src/driver/drv_kp18058.c | 1 + src/driver/drv_sm2135.c | 1 + src/driver/drv_sm2235.c | 1 + 7 files changed, 16 insertions(+) diff --git a/src/cmnds/cmd_newLEDDriver.c b/src/cmnds/cmd_newLEDDriver.c index 8ed8add3b..73112e490 100644 --- a/src/cmnds/cmd_newLEDDriver.c +++ b/src/cmnds/cmd_newLEDDriver.c @@ -396,6 +396,15 @@ void LED_RunQuickColorLerp(int deltaMS) { LED_I2CDriver_WriteRGBCW(led_rawLerpCurrent); } +void LED_ResendCurrentColors() { + if (CFG_HasFlag(OBK_FLAG_LED_SMOOTH_TRANSITIONS)) { + LED_I2CDriver_WriteRGBCW(led_rawLerpCurrent); + } + else { + LED_I2CDriver_WriteRGBCW(finalColors); + } +} + int led_gamma_enable_channel_messages = 0; diff --git a/src/cmnds/cmd_public.h b/src/cmnds/cmd_public.h index c3f7cc2b4..b08935a62 100644 --- a/src/cmnds/cmd_public.h +++ b/src/cmnds/cmd_public.h @@ -306,6 +306,7 @@ OBK_Publish_Result LED_SendCurrentLightModeParam_TempOrColor(); void LED_ResetGlobalVariablesToDefaults(); extern float led_temperature_min; extern float led_temperature_max; +void LED_ResendCurrentColors(); #endif // cmd_test.c diff --git a/src/driver/drv_bp1658cj.c b/src/driver/drv_bp1658cj.c index b31ce7bda..efbca5ea0 100644 --- a/src/driver/drv_bp1658cj.c +++ b/src/driver/drv_bp1658cj.c @@ -76,6 +76,8 @@ commandResult_t BP1658CJ_Current(const void *context, const char *cmd, const cha g_currentRGB = Tokenizer_GetArgInteger(0); g_currentCW = Tokenizer_GetArgInteger(1); + LED_ResendCurrentColors(); + return CMD_RES_OK; } // startDriver BP1658CJ diff --git a/src/driver/drv_bp5758d.c b/src/driver/drv_bp5758d.c index b682b4fe4..92e5dd1cc 100644 --- a/src/driver/drv_bp5758d.c +++ b/src/driver/drv_bp5758d.c @@ -59,6 +59,7 @@ static void BP5758D_SetCurrent(byte curValRGB, byte curValCW) { BP5758D_WriteCurrents(); Soft_I2C_Stop(&g_softI2C); usleep(SM2135_DELAY); + LED_ResendCurrentColors(); } static void BP5758D_PreInit() { HAL_PIN_Setup_Output(g_softI2C.pin_clk); diff --git a/src/driver/drv_kp18058.c b/src/driver/drv_kp18058.c index bcf463b38..4096bedac 100644 --- a/src/driver/drv_kp18058.c +++ b/src/driver/drv_kp18058.c @@ -89,6 +89,7 @@ commandResult_t KP18058_Current(const void *context, const char *cmd, const char g_current_RGB = Tokenizer_GetArgIntegerRange(0, 0, 31); g_current_CW = Tokenizer_GetArgIntegerRange(1, 0, 31); + LED_ResendCurrentColors(); return CMD_RES_OK; } diff --git a/src/driver/drv_sm2135.c b/src/driver/drv_sm2135.c index 62edcd80d..1ff89fce5 100644 --- a/src/driver/drv_sm2135.c +++ b/src/driver/drv_sm2135.c @@ -143,6 +143,7 @@ commandResult_t CMD_LEDDriver_Map(const void *context, const char *cmd, const ch static void SM2135_SetCurrent(int curValRGB, int curValCW) { g_current_setting_rgb = curValRGB; g_current_setting_cw = curValCW; + LED_ResendCurrentColors(); } static commandResult_t SM2135_Current(const void *context, const char *cmd, const char *args, int flags){ diff --git a/src/driver/drv_sm2235.c b/src/driver/drv_sm2235.c index 1df5f6a0d..538cb5fbf 100644 --- a/src/driver/drv_sm2235.c +++ b/src/driver/drv_sm2235.c @@ -70,6 +70,7 @@ void SM2235_Write(float *rgbcw) { static void SM2235_SetCurrent(int curValRGB, int curValCW) { g_cur_RGB = curValRGB; g_cur_CW = curValCW; + LED_ResendCurrentColors(); } static commandResult_t SM2235_Current(const void *context, const char *cmd, const char *args, int flags){