Add digital modes to RGB Fusion 2 SMBus controller

This commit is contained in:
Ferrah Aiko Wolf
2021-08-01 00:31:24 -03:00
committed by Adam Honse
parent 3605e53d83
commit 8534b3d8dc
3 changed files with 146 additions and 9 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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