diff --git a/Controllers/PatriotViperController/PatriotViperController.cpp b/Controllers/PatriotViperController/PatriotViperController.cpp index 36c0ff08..e4b5717c 100644 --- a/Controllers/PatriotViperController/PatriotViperController.cpp +++ b/Controllers/PatriotViperController/PatriotViperController.cpp @@ -85,7 +85,7 @@ void PatriotViperController::SetEffectColor(unsigned char red, unsigned char gre ViperRegisterWrite(VIPER_REG_LED3_EFFECT_COLOR, red, blue, green); ViperRegisterWrite(VIPER_REG_LED4_EFFECT_COLOR, red, blue, green); - ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, 0x0C); + ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, speed); ViperRegisterWrite(VIPER_REG_MODE, 0xAA, 0x00, 0x00); ViperRegisterWrite(VIPER_REG_MODE, 0xFA, 0x00, 0x00); } @@ -121,7 +121,7 @@ void PatriotViperController::SetLEDEffectColor(unsigned int led, unsigned char r ViperRegisterWrite(VIPER_REG_LED0_EFFECT_COLOR + led, red, blue, green); - ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, 0x0C); + ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, speed); ViperRegisterWrite(VIPER_REG_MODE, 0xAA, 0x00, 0x00); ViperRegisterWrite(VIPER_REG_MODE, 0xFA, 0x00, 0x00); } @@ -143,19 +143,20 @@ void PatriotViperController::SetLEDEffectColor(unsigned int slot, unsigned int l ViperRegisterWrite(VIPER_REG_LED0_EFFECT_COLOR + led, red, blue, green); - ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, 0x0C); + ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, speed); ViperRegisterWrite(VIPER_REG_MODE, 0xAA, 0x00, 0x00); ViperRegisterWrite(VIPER_REG_MODE, 0xFA, 0x00, 0x00); } -void PatriotViperController::SetMode(unsigned char new_mode) +void PatriotViperController::SetMode(unsigned char new_mode, unsigned char new_speed) { direct = false; - mode = new_mode; + mode = new_mode; + speed = new_speed; ViperRegisterWrite(VIPER_REG_START, 0xFF, 0xFF, 0xFF); ViperRegisterWrite(VIPER_REG_STATIC, 0x04, 0x00, 0x00); - ViperRegisterWrite(VIPER_REG_MODE, new_mode, 0x00, 0x0C); + ViperRegisterWrite(VIPER_REG_MODE, mode, 0x00, speed); ViperRegisterWrite(VIPER_REG_MODE, 0xAA, 0x00, 0x00); ViperRegisterWrite(VIPER_REG_MODE, 0xFA, 0x00, 0x00); } diff --git a/Controllers/PatriotViperController/PatriotViperController.h b/Controllers/PatriotViperController/PatriotViperController.h index 629503dc..bcbcd860 100644 --- a/Controllers/PatriotViperController/PatriotViperController.h +++ b/Controllers/PatriotViperController/PatriotViperController.h @@ -56,7 +56,7 @@ public: unsigned int GetLEDCount(); unsigned int GetSlotCount(); unsigned int GetMode(); - void SetMode(unsigned char new_mode); + void SetMode(unsigned char new_mode, unsigned char new_speed); void SetDirect(); void SetAllColors(unsigned char red, unsigned char green, unsigned char blue); @@ -75,5 +75,6 @@ private: unsigned char slots_valid; i2c_smbus_interface* bus; viper_dev_id dev; - unsigned int mode; + unsigned char mode; + unsigned char speed; }; diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h index c97a69a0..fd5cc2c6 100644 --- a/RGBController/RGBController.h +++ b/RGBController/RGBController.h @@ -46,7 +46,9 @@ typedef struct std::string name; /* Mode name */ int value; /* Device-specific mode value */ unsigned int flags; /* Mode flags bitfield */ - + unsigned int speed_min; /* speed minimum value */ + unsigned int speed_max; /* speed maximum value */ + /*--------------------------------------------------------------*\ | Mode Settings | \*--------------------------------------------------------------*/ diff --git a/RGBController/RGBController_CorsairPro.cpp b/RGBController/RGBController_CorsairPro.cpp index 586f608f..8ebca1d6 100644 --- a/RGBController/RGBController_CorsairPro.cpp +++ b/RGBController/RGBController_CorsairPro.cpp @@ -19,7 +19,7 @@ void RGBController_CorsairPro::SetMode(int mode) active_mode = mode; corsair->SetEffect(modes[active_mode].value, - CORSAIR_PRO_SPEED_MEDIUM, + modes[active_mode].speed, CORSAIR_PRO_DIRECTION_UP, modes[active_mode].random, RGBGetRValue(colors[0]), @@ -76,70 +76,103 @@ RGBController_CorsairPro::RGBController_CorsairPro(CorsairProController* corsair type = DEVICE_TYPE_DRAM; mode ColorShift; - ColorShift.name = "Color Shift"; - ColorShift.value = CORSAIR_PRO_MODE_COLOR_SHIFT; - ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - ColorShift.random = false; + ColorShift.name = "Color Shift"; + ColorShift.value = CORSAIR_PRO_MODE_COLOR_SHIFT; + ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + ColorShift.speed_min = CORSAIR_PRO_SPEED_SLOW; + ColorShift.speed_max = CORSAIR_PRO_SPEED_FAST; + ColorShift.random = false; + ColorShift.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(ColorShift); mode ColorPulse; - ColorPulse.name = "Color Pulse"; - ColorPulse.value = CORSAIR_PRO_MODE_COLOR_PULSE; - ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - ColorPulse.random = false; + ColorPulse.name = "Color Pulse"; + ColorPulse.value = CORSAIR_PRO_MODE_COLOR_PULSE; + ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + ColorPulse.speed_min = CORSAIR_PRO_SPEED_SLOW; + ColorPulse.speed_max = CORSAIR_PRO_SPEED_FAST; + ColorPulse.random = false; + ColorPulse.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(ColorPulse); mode RainbowWave; - RainbowWave.name = "Rainbow Wave"; - RainbowWave.value = CORSAIR_PRO_MODE_RAINBOW_WAVE; - RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD; - RainbowWave.random = false; + RainbowWave.name = "Rainbow Wave"; + RainbowWave.value = CORSAIR_PRO_MODE_RAINBOW_WAVE; + RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD; + RainbowWave.speed_min = CORSAIR_PRO_SPEED_SLOW; + RainbowWave.speed_max = CORSAIR_PRO_SPEED_FAST; + RainbowWave.random = false; + RainbowWave.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(RainbowWave); mode ColorWave; - ColorWave.name = "Color Wave"; - ColorWave.value = CORSAIR_PRO_MODE_COLOR_WAVE; - ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - ColorWave.random = false; + ColorWave.name = "Color Wave"; + ColorWave.value = CORSAIR_PRO_MODE_COLOR_WAVE; + ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + ColorWave.speed_min = CORSAIR_PRO_SPEED_SLOW; + ColorWave.speed_max = CORSAIR_PRO_SPEED_FAST; + ColorWave.random = false; + ColorWave.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(ColorWave); mode Visor; - Visor.name = "Visor"; - Visor.value = CORSAIR_PRO_MODE_VISOR; - Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - Visor.random = false; + Visor.name = "Visor"; + Visor.value = CORSAIR_PRO_MODE_VISOR; + Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + Visor.speed_min = CORSAIR_PRO_SPEED_SLOW; + Visor.speed_max = CORSAIR_PRO_SPEED_FAST; + Visor.random = false; + Visor.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(Visor); mode Rain; - Rain.name = "Rain"; - Rain.value = CORSAIR_PRO_MODE_RAIN; - Rain.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - Rain.random = false; + Rain.name = "Rain"; + Rain.value = CORSAIR_PRO_MODE_RAIN; + Rain.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + Rain.speed_min = CORSAIR_PRO_SPEED_SLOW; + Rain.speed_max = CORSAIR_PRO_SPEED_FAST; + Rain.random = false; + Rain.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(Rain); mode Marquee; - Marquee.name = "Marquee"; - Marquee.value = CORSAIR_PRO_MODE_MARQUEE; - Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + Marquee.name = "Marquee"; + Marquee.value = CORSAIR_PRO_MODE_MARQUEE; + Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + Marquee.speed_min = CORSAIR_PRO_SPEED_SLOW; + Marquee.speed_max = CORSAIR_PRO_SPEED_FAST; + Marquee.random = false; + Marquee.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(Marquee); mode Rainbow; - Rainbow.name = "Rainbow"; - Rainbow.value = CORSAIR_PRO_MODE_RAINBOW; - Rainbow.flags = MODE_FLAG_HAS_SPEED; + Rainbow.name = "Rainbow"; + Rainbow.value = CORSAIR_PRO_MODE_RAINBOW; + Rainbow.flags = MODE_FLAG_HAS_SPEED; + Rainbow.speed_min = CORSAIR_PRO_SPEED_SLOW; + Rainbow.speed_max = CORSAIR_PRO_SPEED_FAST; + Rainbow.random = false; + Rainbow.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(Rainbow); mode Sequential; - Sequential.name = "Sequential"; - Sequential.value = CORSAIR_PRO_MODE_SEQUENTIAL; - Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; - Sequential.random = false; + Sequential.name = "Sequential"; + Sequential.value = CORSAIR_PRO_MODE_SEQUENTIAL; + Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; + Sequential.speed_min = CORSAIR_PRO_SPEED_SLOW; + Sequential.speed_max = CORSAIR_PRO_SPEED_FAST; + Sequential.random = false; + Sequential.speed = CORSAIR_PRO_SPEED_SLOW; modes.push_back(Sequential); mode Static; - Static.name = "Static"; - Static.value = CORSAIR_PRO_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Static.name = "Static"; + Static.value = CORSAIR_PRO_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Static.speed_min = 0; + Static.speed_max = 0; + Static.random = false; + Static.speed = 0; modes.push_back(Static); active_mode = 9; diff --git a/RGBController/RGBController_PatriotViper.cpp b/RGBController/RGBController_PatriotViper.cpp index 808cea4c..3fa3ee6d 100644 --- a/RGBController/RGBController_PatriotViper.cpp +++ b/RGBController/RGBController_PatriotViper.cpp @@ -22,7 +22,7 @@ void RGBController_PatriotViper::SetMode(int mode) } else { - viper->SetMode(modes[mode].value); + viper->SetMode(modes[mode].value, modes[mode].speed); } } @@ -89,51 +89,83 @@ RGBController_PatriotViper::RGBController_PatriotViper(PatriotViperController* v type = DEVICE_TYPE_DRAM; mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Direct.name = "Direct"; + Direct.value = 0xFFFF; + Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Direct.speed_min = 0; + Direct.speed_max = 0; + Direct.random = false; + Direct.speed = 0; modes.push_back(Direct); mode Dark; - Dark.name = "Dark"; - Dark.value = VIPER_MODE_DARK; - Dark.flags = 0; + Dark.name = "Dark"; + Dark.value = VIPER_MODE_DARK; + Dark.flags = 0; + Dark.speed_min = 0; + Dark.speed_max = 0; + Dark.random = false; + Dark.speed = 0; modes.push_back(Dark); mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = VIPER_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Breathing.name = "Breathing"; + Breathing.value = VIPER_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Breathing.speed_min = 0x00; + Breathing.speed_max = 0xFF; + Breathing.random = false; + Breathing.speed = 0x0C; modes.push_back(Breathing); mode Viper; - Viper.name = "Viper"; - Viper.value = VIPER_MODE_VIPER; - Viper.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Viper.name = "Viper"; + Viper.value = VIPER_MODE_VIPER; + Viper.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Viper.speed_min = 0x14; + Viper.speed_max = 0xC8; + Viper.random = false; + Viper.speed = 0x64; modes.push_back(Viper); mode Heartbeat; - Heartbeat.name = "Heartbeat"; - Heartbeat.value = VIPER_MODE_HEARTBEAT; - Heartbeat.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Heartbeat.name = "Heartbeat"; + Heartbeat.value = VIPER_MODE_HEARTBEAT; + Heartbeat.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Heartbeat.speed_min = 0x14; + Heartbeat.speed_max = 0xC8; + Heartbeat.random = false; + Heartbeat.speed = 0x64; modes.push_back(Heartbeat); mode Marquee; - Marquee.name = "Marquee"; - Marquee.value = VIPER_MODE_MARQUEE; - Marquee.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Marquee.name = "Marquee"; + Marquee.value = VIPER_MODE_MARQUEE; + Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Marquee.speed_min = 0x14; + Marquee.speed_max = 0xC8; + Marquee.random = false; + Marquee.speed = 0x64; modes.push_back(Marquee); mode Raindrop; - Raindrop.name = "Raindrop"; - Raindrop.value = VIPER_MODE_RAINDROP; - Raindrop.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Raindrop.name = "Raindrop"; + Raindrop.value = VIPER_MODE_RAINDROP; + Raindrop.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Raindrop.speed_min = 0x14; + Raindrop.speed_max = 0xC8; + Raindrop.random = false; + Raindrop.speed = 0x64; modes.push_back(Raindrop); mode Aurora; - Aurora.name = "Aurora"; - Aurora.value = VIPER_MODE_AURORA; - Aurora.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Aurora.name = "Aurora"; + Aurora.value = VIPER_MODE_AURORA; + Aurora.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; + Aurora.speed_min = 0x14; + Aurora.speed_max = 0xC8; + Aurora.random = false; + Aurora.speed = 0x64; modes.push_back(Aurora); colors.resize(viper->GetLEDCount()); diff --git a/qt/OpenRGBDevicePage.cpp b/qt/OpenRGBDevicePage.cpp index 49548121..bff5e560 100644 --- a/qt/OpenRGBDevicePage.cpp +++ b/qt/OpenRGBDevicePage.cpp @@ -153,6 +153,14 @@ void Ui::OpenRGBDevicePage::on_RandomCheck_clicked() UpdateMode(); } +void Ui::OpenRGBDevicePage::on_SpeedSlider_valueChanged(int value) +{ + /*-----------------------------------------------------*\ + | Change device mode | + \*-----------------------------------------------------*/ + UpdateMode(); +} + void Ui::OpenRGBDevicePage::UpdateModeUi() { /*-----------------------------------------------------*\ @@ -167,8 +175,21 @@ void Ui::OpenRGBDevicePage::UpdateModeUi() { bool supports_random = ( device->modes[selected_mode].flags & MODE_FLAG_HAS_COLOR ) && ( device->modes[selected_mode].flags & MODE_FLAG_RANDOM_COLOR ); + bool supports_speed = ( device->modes[selected_mode].flags & MODE_FLAG_HAS_SPEED ); bool random = device->modes[selected_mode].random; + if(supports_speed) + { + ui->SpeedSlider->setEnabled(true); + ui->SpeedSlider->setMinimum(device->modes[selected_mode].speed_min); + ui->SpeedSlider->setMaximum(device->modes[selected_mode].speed_max); + ui->SpeedSlider->setValue( device->modes[selected_mode].speed ); + } + else + { + ui->SpeedSlider->setEnabled(false); + } + if(supports_random) { ui->RandomCheck->setEnabled(true); @@ -187,7 +208,7 @@ void Ui::OpenRGBDevicePage::UpdateMode() | Read user interface | \*-----------------------------------------------------*/ int current_mode = ui->ModeBox->currentIndex(); - int current_speed = 0; + int current_speed = ui->SpeedSlider->value(); bool current_random = ui->RandomCheck->checkState(); /*-----------------------------------------------------*\ diff --git a/qt/OpenRGBDevicePage.h b/qt/OpenRGBDevicePage.h index b191aaf2..a207d944 100644 --- a/qt/OpenRGBDevicePage.h +++ b/qt/OpenRGBDevicePage.h @@ -46,6 +46,8 @@ private slots: void on_RandomCheck_clicked(); + void on_SpeedSlider_valueChanged(int value); + private: Ui::OpenRGBDevicePageUi *ui; RGBController *device; diff --git a/qt/OpenRGBDevicePage.ui b/qt/OpenRGBDevicePage.ui index 51bfd48f..b1e22cca 100644 --- a/qt/OpenRGBDevicePage.ui +++ b/qt/OpenRGBDevicePage.ui @@ -394,6 +394,19 @@ Random Color + + + + 70 + 270 + 160 + 16 + + + + Qt::Horizontal + +