Update Thermaltake Riing controller for resizable channels
This commit is contained in:
parent
62518b5163
commit
bc01ec0e4b
6 changed files with 40 additions and 87 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue