From 8534b3d8dc52aca233e27854d9ba14db8804b2a8 Mon Sep 17 00:00:00 2001 From: Ferrah Aiko Wolf Date: Sun, 1 Aug 2021 00:31:24 -0300 Subject: [PATCH] Add digital modes to RGB Fusion 2 SMBus controller --- .../GigabyteRGBFusion2SMBusController.cpp | 56 +++++++++++++ .../GigabyteRGBFusion2SMBusController.h | 19 ++--- .../RGBController_GigabyteRGBFusion2SMBus.cpp | 80 +++++++++++++++++++ 3 files changed, 146 insertions(+), 9 deletions(-) diff --git a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.cpp b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.cpp index b2954eb66..041bb2911 100644 --- a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.cpp +++ b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.cpp @@ -122,6 +122,62 @@ void RGBFusion2SMBusController::SetLEDEffect led_data[led][RGB_FUSION_2_TIMER_2_MSB] = 0x03 * speed; break; + case RGB_FUSION_2_MODE_DIGITAL_WAVE: + // Timer 1: On time + // Timer 2: Off time + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x50 * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x01; + break; + + case RGB_FUSION_2_MODE_DIGITAL_A: + // Timer 1: Directly controls speed of LED sections + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x39 * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Setting this to any number other than 0 slows down the effect + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x01; // Doesn't do anything, but always defaults to 0x01 + break; + + case RGB_FUSION_2_MODE_DIGITAL_B: + // Timer 1: Direct control of section speed and pulsing + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x2d * speed; // Main effect speed + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Only sets to 0x01 in min speed. Makes light section blink for shorter periods + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Changes between 0x01 and 0x04 along with speed. Controls light trail length. + break; + + case RGB_FUSION_2_MODE_DIGITAL_C: + // Timer 1: Effect Speed + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x2d * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Like Digital A, slows down the effect, but never sets to another number. + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Fixed at 0x04. Does nothing. + break; + + case RGB_FUSION_2_MODE_DIGITAL_D: + // Timer 1: Effect Speed + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x2d * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Like Digital A, slows down the effect, but never sets to another number. + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Fixed at 0x04. Does nothing. + break; + + case RGB_FUSION_2_MODE_DIGITAL_E: + // Timer 1: Effect Speed + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x25 * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0; // Like Digital A, slows down the effect, but never sets to another number. + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Fixed at 0x04. Does nothing. + break; + + case RGB_FUSION_2_MODE_DIGITAL_F: + // Timer 1: Effect Speed + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x2d * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Like Digital A, slows down the effect, but never sets to another number. + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Fixed at 0x04. Does nothing. + break; + + case RGB_FUSION_2_MODE_DIGITAL_G: + // Timer 1: Effect Speed + led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x23 * speed; + led_data[led][RGB_FUSION_2_TIMER_1_MSB] = 0x00; // Like Digital A, slows down the effect, but never sets to another number. + led_data[led][RGB_FUSION_2_IDX_OPT_1] = 0x04; // Fixed at 0x04. Does nothing. + break; + case RGB_FUSION_2_MODE_COLOR_CYCLE: // Timer 1: Cycle time led_data[led][RGB_FUSION_2_TIMER_1_LSB] = 0x00; diff --git a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.h b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.h index 168092afb..9aa8e1947 100644 --- a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.h +++ b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusController.h @@ -54,15 +54,16 @@ enum RGB_FUSION_2_MODE_STATIC = 0x04, /* Static color mode */ RGB_FUSION_2_MODE_FLASHING = 0x05, /* Flashing / Double Flashing mode */ RGB_FUSION_2_MODE_TRANSITION = 0x09, /* Gradual transition from current */ - RGB_FUSION_2_MODE_DIGITAL_A = 0x0A, /* Wave mode */ - RGB_FUSION_2_MODE_DIGITAL_B = 0x0B, /* */ - RGB_FUSION_2_MODE_DIGITAL_C = 0x0C, /* */ - RGB_FUSION_2_MODE_DIGITAL_D = 0x0D, /* */ - RGB_FUSION_2_MODE_DIGITAL_E = 0x0E, /* */ - RGB_FUSION_2_MODE_DIGITAL_F = 0x0F, /* */ - RGB_FUSION_2_MODE_DIGITAL_G = 0x10, /* */ - RGB_FUSION_2_MODE_DIGITAL_H = 0x11, /* */ - RGB_FUSION_2_MODE_DIGITAL_I = 0x12, /* */ + RGB_FUSION_2_MODE_DIGITAL_WAVE = 0x0A, /* Wave mode */ + RGB_FUSION_2_MODE_DIGITAL_A = 0x0B, /* */ + RGB_FUSION_2_MODE_DIGITAL_B = 0x0C, /* */ + RGB_FUSION_2_MODE_DIGITAL_C = 0x0D, /* */ + RGB_FUSION_2_MODE_DIGITAL_D = 0x0F, /* */ + RGB_FUSION_2_MODE_DIGITAL_E = 0x10, /* */ + RGB_FUSION_2_MODE_DIGITAL_F = 0x11, /* */ + RGB_FUSION_2_MODE_DIGITAL_G = 0x12, /* */ +// RGB_FUSION_2_MODE_DIGITAL_H = 0x11, +// RGB_FUSION_2_MODE_DIGITAL_I = 0x12, They are variants of DIGITAL F and G }; enum diff --git a/Controllers/GigabyteRGBFusion2SMBusController/RGBController_GigabyteRGBFusion2SMBus.cpp b/Controllers/GigabyteRGBFusion2SMBusController/RGBController_GigabyteRGBFusion2SMBus.cpp index 94df99e0c..5f5958c6b 100644 --- a/Controllers/GigabyteRGBFusion2SMBusController/RGBController_GigabyteRGBFusion2SMBus.cpp +++ b/Controllers/GigabyteRGBFusion2SMBusController/RGBController_GigabyteRGBFusion2SMBus.cpp @@ -85,6 +85,86 @@ RGBController_RGBFusion2SMBus::RGBController_RGBFusion2SMBus(RGBFusion2SMBusCont ColorCycle.color_mode = MODE_COLORS_PER_LED; modes.push_back(ColorCycle); + mode DigitalWave; + DigitalWave.name = "Digital Wave"; + DigitalWave.value = RGB_FUSION_2_MODE_DIGITAL_WAVE; + DigitalWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalWave.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalWave.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalWave.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalWave.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalWave); + + mode DigitalA; + DigitalA.name = "Digital A"; + DigitalA.value = RGB_FUSION_2_MODE_DIGITAL_A; + DigitalA.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalA.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalA.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalA.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalA.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalA); + + mode DigitalB; + DigitalB.name = "Digital B"; + DigitalB.value = RGB_FUSION_2_MODE_DIGITAL_B; + DigitalB.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalB.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalB.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalB.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalB.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalB); + + mode DigitalC; + DigitalC.name = "Digital C"; + DigitalC.value = RGB_FUSION_2_MODE_DIGITAL_C; + DigitalC.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalC.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalC.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalC.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalC.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalC); + + mode DigitalD; + DigitalD.name = "Digital D"; + DigitalD.value = RGB_FUSION_2_MODE_DIGITAL_D; + DigitalD.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalD.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalD.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalD.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalD.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalD); + + mode DigitalE; + DigitalE.name = "Digital E"; + DigitalE.value = RGB_FUSION_2_MODE_DIGITAL_E; + DigitalE.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalE.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalE.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalE.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalE.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalE); + + mode DigitalF; + DigitalF.name = "Digital F"; + DigitalF.value = RGB_FUSION_2_MODE_DIGITAL_F; + DigitalF.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalF.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalF.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalF.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalF.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalF); + + mode DigitalG; + DigitalG.name = "Digital G"; + DigitalG.value = RGB_FUSION_2_MODE_DIGITAL_G; + DigitalG.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + DigitalG.speed_min = RGB_FUSION_2_SPEED_SLOW; + DigitalG.speed_max = RGB_FUSION_2_SPEED_FAST; + DigitalG.speed = RGB_FUSION_2_SPEED_NORMAL; + DigitalG.color_mode = MODE_COLORS_PER_LED; + modes.push_back(DigitalG); + SetupZones(); // Initialize active mode