Update Thermaltake Riing controller for resizable channels

This commit is contained in:
Adam Honse 2020-03-05 12:29:17 -06:00
parent 62518b5163
commit bc01ec0e4b
6 changed files with 40 additions and 87 deletions

View file

@ -29,11 +29,11 @@ ThermaltakeRiingController::~ThermaltakeRiingController()
}
void ThermaltakeRiingController::SetChannelLEDs(unsigned char channel, std::vector<RGBColor> 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;
}

View file

@ -48,7 +48,7 @@ public:
ThermaltakeRiingController(libusb_device_handle* dev_handle);
~ThermaltakeRiingController();
void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> 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];

View file

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

View file

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

View file

@ -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<int> *new_zone_map = new std::vector<int>();
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<RGBColor> 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<RGBColor> 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<RGBColor> 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<RGBColor> 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);
}
}

View file

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