From bc01ec0e4b02c1c02771ac076803fc903f80b8f8 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Thu, 5 Mar 2020 12:29:17 -0600 Subject: [PATCH] Update Thermaltake Riing controller for resizable channels --- .../ThermaltakeRiingController.cpp | 8 +- .../ThermaltakeRiingController.h | 2 +- OpenRGB.cpp | 2 +- OpenRGB.pro | 8 +- .../RGBController_ThermaltakeRiing.cpp | 102 +++++------------- .../RGBController_ThermaltakeRiing.h | 5 + 6 files changed, 40 insertions(+), 87 deletions(-) diff --git a/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp b/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp index 13fc594a..5e6c294d 100644 --- a/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp +++ b/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp @@ -29,11 +29,11 @@ ThermaltakeRiingController::~ThermaltakeRiingController() } -void ThermaltakeRiingController::SetChannelLEDs(unsigned char channel, std::vector colors) +void ThermaltakeRiingController::SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors) { - unsigned char* color_data = new unsigned char[3 * colors.size()]; + unsigned char* color_data = new unsigned char[3 * num_colors]; - for(int color = 0; color < colors.size(); color++) + for(int color = 0; color < num_colors; color++) { int color_idx = color * 3; color_data[color_idx + 0] = RGBGetGValue(colors[color]); @@ -41,7 +41,7 @@ void ThermaltakeRiingController::SetChannelLEDs(unsigned char channel, std::vect color_data[color_idx + 2] = RGBGetBValue(colors[color]); } - SendRGB(channel, current_mode, current_speed, colors.size(), color_data); + SendRGB(channel, current_mode, current_speed, num_colors, color_data); delete[] color_data; } diff --git a/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h b/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h index 892a4cf9..b6426833 100644 --- a/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h +++ b/Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h @@ -48,7 +48,7 @@ public: ThermaltakeRiingController(libusb_device_handle* dev_handle); ~ThermaltakeRiingController(); - void SetChannelLEDs(unsigned char channel, std::vector colors); + void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors); void SetMode(unsigned char mode, unsigned char speed); unsigned int channel_leds[5]; diff --git a/OpenRGB.cpp b/OpenRGB.cpp index b37691b6..6fc850b6 100644 --- a/OpenRGB.cpp +++ b/OpenRGB.cpp @@ -339,7 +339,7 @@ void DetectRGBControllers(void) //DetectCorsairCmdrProControllers(rgb_controllers); //DetectCorsairKeyboardControllers(rgb_controllers); DetectCorsairNodeProControllers(rgb_controllers); - //DetectThermaltakeRiingControllers(rgb_controllers); + DetectThermaltakeRiingControllers(rgb_controllers); //DetectRGBFusion2Controllers(rgb_controllers); //DetectE131Controllers(rgb_controllers); diff --git a/OpenRGB.pro b/OpenRGB.pro index d955f752..51079dd9 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -51,7 +51,7 @@ INCLUDEPATH += \ # Controllers/RGBFusionController/ \ # Controllers/RGBFusion2Controller/ \ # Controllers/RGBFusionGPUController/ \ -# Controllers/ThermaltakeRiingController/ \ + Controllers/ThermaltakeRiingController/ \ RGBController/ \ qt/ @@ -120,8 +120,8 @@ SOURCES += \ # Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \ # Controllers/RGBFusionGPUController/RGBFusionGPUController.cpp \ # Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp \ -# Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \ -# Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \ + Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \ + Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \ RGBController/RGBController.cpp \ # RGBController/E131ControllerDetect.cpp \ # RGBController/RGBController_AMDWraithPrism.cpp \ @@ -148,7 +148,7 @@ SOURCES += \ # RGBController/RGBController_RGBFusion.cpp \ # RGBController/RGBController_RGBFusion2.cpp \ # RGBController/RGBController_RGBFusionGPU.cpp \ -# RGBController/RGBController_ThermaltakeRiing.cpp \ + RGBController/RGBController_ThermaltakeRiing.cpp \ HEADERS += \ ProfileManager.h \ diff --git a/RGBController/RGBController_ThermaltakeRiing.cpp b/RGBController/RGBController_ThermaltakeRiing.cpp index 9ba10e43..424e687c 100644 --- a/RGBController/RGBController_ThermaltakeRiing.cpp +++ b/RGBController/RGBController_ThermaltakeRiing.cpp @@ -101,20 +101,20 @@ RGBController_ThermaltakeRiing::RGBController_ThermaltakeRiing(ThermaltakeRiingC Static.colors.resize(1); modes.push_back(Static); + SetupZones(); +} + +void RGBController_ThermaltakeRiing::SetupZones() +{ /*-------------------------------------------------*\ - | Set size of colors array | + | Clear any existing zone/LED configuration | \*-------------------------------------------------*/ - unsigned int led_count = 0; - for (unsigned int channel_idx = 0; channel_idx < 5; channel_idx++) - { - led_count += riing->channel_leds[channel_idx]; - } - colors.resize(led_count); + leds.clear(); + zones.clear(); /*-------------------------------------------------*\ | Set zones and leds | \*-------------------------------------------------*/ - unsigned int led_idx = 0; for (unsigned int channel_idx = 0; channel_idx < 5; channel_idx++) { if(riing->channel_leds[channel_idx] > 0) @@ -128,7 +128,9 @@ RGBController_ThermaltakeRiing::RGBController_ThermaltakeRiing(ThermaltakeRiingC new_zone->name.append(ch_idx_string); new_zone->type = ZONE_TYPE_LINEAR; - std::vector *new_zone_map = new std::vector(); + new_zone->leds_min = 0; + new_zone->leds_max = 60; + new_zone->leds_count = riing->channel_leds[channel_idx]; for (unsigned int led_ch_idx = 0; led_ch_idx < riing->channel_leds[channel_idx]; led_ch_idx++) { @@ -143,79 +145,40 @@ RGBController_ThermaltakeRiing::RGBController_ThermaltakeRiing(ThermaltakeRiingC leds.push_back(new_led); leds_channel.push_back(channel_idx + 1); - - new_zone_map->push_back(led_idx); - led_idx++; } - new_zone->map.push_back(*new_zone_map); zones.push_back(*new_zone); - zones_channel.push_back(channel_idx + 1); } } + + SetupColors(); +} + +void RGBController_ThermaltakeRiing::ResizeZone(int zone, int new_size) +{ + riing->channel_leds[zone] = new_size; + + SetupZones(); } void RGBController_ThermaltakeRiing::UpdateLEDs() { for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++) { - unsigned int channel = zones_channel[zone_idx]; - - std::vector channel_colors; - - for(std::size_t color = 0; color < colors.size(); color++) - { - if(leds_channel[color] == channel) - { - channel_colors.push_back(colors[color]); - } - } - - if(channel_colors.size() > 0) - { - riing->SetChannelLEDs(channel, channel_colors); - } + riing->SetChannelLEDs(zone_idx, zones[zone_idx].colors, zones[zone_idx].leds_count); } } void RGBController_ThermaltakeRiing::UpdateZoneLEDs(int zone) { - unsigned int channel = zones_channel[zone]; - - std::vector channel_colors; - - for(std::size_t color = 0; color < colors.size(); color++) - { - if(leds_channel[color] == channel) - { - channel_colors.push_back(colors[color]); - } - } - - if(channel_colors.size() > 0) - { - riing->SetChannelLEDs(channel, channel_colors); - } + riing->SetChannelLEDs(zone, zones[zone].colors, zones[zone].leds_count); } void RGBController_ThermaltakeRiing::UpdateSingleLED(int led) { unsigned int channel = leds_channel[led]; - std::vector channel_colors; - - for(std::size_t color = 0; color < colors.size(); color++) - { - if(leds_channel[color] == channel) - { - channel_colors.push_back(colors[color]); - } - } - - if(channel_colors.size() > 0) - { - riing->SetChannelLEDs(channel, channel_colors); - } + riing->SetChannelLEDs(channel, zones[channel].colors, zones[channel].leds_count); } void RGBController_ThermaltakeRiing::SetCustomMode() @@ -227,22 +190,7 @@ void RGBController_ThermaltakeRiing::UpdateMode() { for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++) { - unsigned int channel = zones_channel[zone_idx]; - - std::vector channel_colors; - - for(std::size_t color = 0; color < colors.size(); color++) - { - if(leds_channel[color] == channel) - { - channel_colors.push_back(colors[color]); - } - } - - if(channel_colors.size() > 0) - { - riing->SetMode(modes[active_mode].value, modes[active_mode].speed); - riing->SetChannelLEDs(channel, channel_colors); - } + riing->SetMode(modes[active_mode].value, modes[active_mode].speed); + riing->SetChannelLEDs(zone_idx, zones[zone_idx].colors, zones[zone_idx].leds_count); } } diff --git a/RGBController/RGBController_ThermaltakeRiing.h b/RGBController/RGBController_ThermaltakeRiing.h index aa0cdb3f..1dd2ca1a 100644 --- a/RGBController/RGBController_ThermaltakeRiing.h +++ b/RGBController/RGBController_ThermaltakeRiing.h @@ -15,6 +15,11 @@ class RGBController_ThermaltakeRiing : public RGBController { public: RGBController_ThermaltakeRiing(ThermaltakeRiingController* riing_ptr); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + void UpdateLEDs(); void UpdateZoneLEDs(int zone); void UpdateSingleLED(int led);