From d7a6f2ebba25b0fcd0bf8aa6772642a020c99a4d Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 28 Jan 2022 23:04:55 +1100 Subject: [PATCH] Fixing `Direct` mode assignment for Coolermaster ARGB Small controller to resolve #2174 * Only adding `Direct` mode for controllers with FW0012 or newer * Changing the value assignment to an index in `SetCustomMode()` --- .../RGBController_CMSmallARGBController.cpp | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/Controllers/CoolerMasterController/RGBController_CMSmallARGBController.cpp b/Controllers/CoolerMasterController/RGBController_CMSmallARGBController.cpp index 6bbd6819..b805a7a7 100644 --- a/Controllers/CoolerMasterController/RGBController_CMSmallARGBController.cpp +++ b/Controllers/CoolerMasterController/RGBController_CMSmallARGBController.cpp @@ -22,6 +22,19 @@ RGBController_CMSmallARGBController::RGBController_CMSmallARGBController(CMSmall serial = controller->GetSerial(); location = controller->GetLocation(); + if(serial >= CM_SMALL_ARGB_FW0012) + { + mode Direct; + Direct.name = "Direct"; + Direct.value = CM_SMALL_ARGB_MODE_DIRECT; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Direct.brightness_min = 0; + Direct.brightness_max = CM_SMALL_ARGB_BRIGHTNESS_MAX; + Direct.brightness = CM_SMALL_ARGB_BRIGHTNESS_MAX; + Direct.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Direct); + } + mode Off; Off.name = "Turn Off"; Off.value = CM_SMALL_ARGB_MODE_OFF; @@ -118,16 +131,6 @@ RGBController_CMSmallARGBController::RGBController_CMSmallARGBController(CMSmall Spectrum.speed = speed; modes.push_back(Spectrum); - mode Direct; - Direct.name = "Direct"; - Direct.value = CM_SMALL_ARGB_MODE_DIRECT; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Direct.brightness_min = 0; - Direct.brightness_max = CM_SMALL_ARGB_BRIGHTNESS_MAX; - Direct.brightness = CM_SMALL_ARGB_BRIGHTNESS_MAX; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); - mode PassThru; PassThru.name = "Pass Thru"; PassThru.value = CM_SMALL_ARGB_MODE_PASSTHRU; @@ -266,8 +269,16 @@ void RGBController_CMSmallARGBController::SetCustomMode() { /*-------------------------------------------------*\ | The small ARGB may not support "Direct" mode | + | in which case this will select "Pass Thru" | \*-------------------------------------------------*/ - active_mode = CM_SMALL_ARGB_MODE_DIRECT; + if(serial >= CM_SMALL_ARGB_FW0012) + { + active_mode = 0; + } + else + { + active_mode = 7; + } } void RGBController_CMSmallARGBController::DeviceUpdateMode()