Update RGBController API and GUI to handle resizable zones. All controllers except for CorsairNodePro have been disabled pending rework

This commit is contained in:
Adam Honse 2020-03-04 19:29:58 -06:00
parent 736e624366
commit 62518b5163
11 changed files with 272 additions and 259 deletions

View file

@ -80,6 +80,7 @@ void CorsairNodeProController::KeepaliveThread()
}
void CorsairNodeProController::SetChannelEffect(unsigned char channel,
unsigned char num_leds,
unsigned char mode,
unsigned char speed,
unsigned char direction,
@ -117,7 +118,7 @@ void CorsairNodeProController::SetChannelEffect(unsigned char channel,
(
channel,
0,
CORSAIR_CMDR_PRO_LED_TYPE_LED_STRIP,
num_leds,
mode,
speed,
direction,
@ -142,7 +143,7 @@ void CorsairNodeProController::SetChannelEffect(unsigned char channel,
SendCommit();
}
void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors)
void CorsairNodeProController::SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors)
{
unsigned char color_data[50];
unsigned char pkt_max;
@ -157,9 +158,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 50;
if(pkt_max > colors.size())
if(pkt_max > num_colors)
{
pkt_max = (unsigned char)colors.size();
pkt_max = (unsigned char)num_colors;
}
for(int idx = 0; idx < pkt_max; idx++)
@ -174,9 +175,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 0;
if (colors.size() > 50)
if (num_colors > 50)
{
pkt_max = (unsigned char)(colors.size() - 50);
pkt_max = (unsigned char)(num_colors - 50);
}
if(pkt_max > 0)
@ -194,9 +195,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 50;
if(pkt_max > colors.size())
if(pkt_max > num_colors)
{
pkt_max = (unsigned char)colors.size();
pkt_max = (unsigned char)num_colors;
}
for(int idx = 0; idx < pkt_max; idx++)
@ -211,9 +212,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 0;
if (colors.size() > 50)
if (num_colors > 50)
{
pkt_max = (unsigned char)(colors.size() - 50);
pkt_max = (unsigned char)(num_colors - 50);
}
if(pkt_max > 0)
@ -231,9 +232,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 50;
if(pkt_max > colors.size())
if(pkt_max > num_colors)
{
pkt_max = (unsigned char)colors.size();
pkt_max = (unsigned char)num_colors;
}
for(int idx = 0; idx < pkt_max; idx++)
@ -248,9 +249,9 @@ void CorsairNodeProController::SetChannelLEDs(unsigned char channel, std::vector
\*-----------------------------------------------------*/
pkt_max = 0;
if (colors.size() > 50)
if (num_colors > 50)
{
pkt_max = (unsigned char)(colors.size() - 50);
pkt_max = (unsigned char)(num_colors - 50);
}
if(pkt_max > 0)

View file

@ -90,6 +90,7 @@ public:
unsigned int GetStripsOnChannel(unsigned int channel);
void SetChannelEffect(unsigned char channel,
unsigned char num_leds,
unsigned char mode,
unsigned char speed,
unsigned char direction,
@ -105,7 +106,7 @@ public:
unsigned char blu3
);
void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors);
void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors);
unsigned int channel_leds[CORSAIR_NODE_PRO_NUM_CHANNELS];
void KeepaliveThread();

View file

@ -313,42 +313,42 @@ void DetectRGBFusion2Controllers(std::vector<RGBController*> &rgb_controllers);
#include "RGBController_Dummy.h"
void DetectRGBControllers(void)
{
DetectI2CBusses();
//DetectI2CBusses();
DetectAuraControllers(busses, rgb_controllers);
DetectAuraGPUControllers(busses, rgb_controllers);
DetectCorsairControllers(busses, rgb_controllers);
DetectCorsairProControllers(busses, rgb_controllers);
DetectCrucialControllers(busses, rgb_controllers);
DetectHyperXControllers(busses, rgb_controllers);
DetectPatriotViperControllers(busses, rgb_controllers);
DetectPolychromeControllers(busses, rgb_controllers);
DetectRGBFusionGPUControllers(busses, rgb_controllers);
//DetectAuraControllers(busses, rgb_controllers);
//DetectAuraGPUControllers(busses, rgb_controllers);
//DetectCorsairControllers(busses, rgb_controllers);
//DetectCorsairProControllers(busses, rgb_controllers);
//DetectCrucialControllers(busses, rgb_controllers);
//DetectHyperXControllers(busses, rgb_controllers);
//DetectPatriotViperControllers(busses, rgb_controllers);
//DetectPolychromeControllers(busses, rgb_controllers);
//DetectRGBFusionGPUControllers(busses, rgb_controllers);
DetectRGBFusionControllers(busses, rgb_controllers);
DetectMSIRGBControllers(rgb_controllers);
//DetectRGBFusionControllers(busses, rgb_controllers);
//DetectMSIRGBControllers(rgb_controllers);
DetectLEDStripControllers(rgb_controllers);
DetectHue2Controllers(rgb_controllers);
DetectHuePlusControllers(rgb_controllers);
//DetectLEDStripControllers(rgb_controllers);
//DetectHue2Controllers(rgb_controllers);
//DetectHuePlusControllers(rgb_controllers);
DetectAMDWraithPrismControllers(rgb_controllers);
DetectMSI3ZoneControllers(rgb_controllers);
DetectPoseidonZRGBControllers(rgb_controllers);
DetectHyperXKeyboardControllers(rgb_controllers);
DetectCorsairCmdrProControllers(rgb_controllers);
DetectCorsairKeyboardControllers(rgb_controllers);
//DetectAMDWraithPrismControllers(rgb_controllers);
//DetectMSI3ZoneControllers(rgb_controllers);
//DetectPoseidonZRGBControllers(rgb_controllers);
//DetectHyperXKeyboardControllers(rgb_controllers);
//DetectCorsairCmdrProControllers(rgb_controllers);
//DetectCorsairKeyboardControllers(rgb_controllers);
DetectCorsairNodeProControllers(rgb_controllers);
DetectThermaltakeRiingControllers(rgb_controllers);
DetectRGBFusion2Controllers(rgb_controllers);
//DetectThermaltakeRiingControllers(rgb_controllers);
//DetectRGBFusion2Controllers(rgb_controllers);
DetectE131Controllers(rgb_controllers);
//DetectE131Controllers(rgb_controllers);
/*-------------------------------------*\
| Windows-only devices |
\*-------------------------------------*/
#ifdef WIN32
DetectOpenRazerControllers(rgb_controllers);
//DetectOpenRazerControllers(rgb_controllers);
/*-------------------------------------*\
| Linux-only devices |
\*-------------------------------------*/

View file

@ -29,29 +29,29 @@ INCLUDEPATH += \
net_port/ \
serial_port/ \
super_io/ \
Controllers/AMDWraithPrismController/ \
Controllers/AuraController/ \
Controllers/AuraGPUController/ \
Controllers/CorsairController/ \
Controllers/CorsairCmdrProController/ \
Controllers/CorsairKeyboardController/ \
# Controllers/AMDWraithPrismController/ \
# Controllers/AuraController/ \
# Controllers/AuraGPUController/ \
# Controllers/CorsairController/ \
# Controllers/CorsairCmdrProController/ \
# Controllers/CorsairKeyboardController/ \
Controllers/CorsairNodeProController/ \
Controllers/CorsairProController/ \
Controllers/CrucialController/ \
Controllers/Hue2Controller/ \
Controllers/HuePlusController/ \
Controllers/HyperXController/ \
Controllers/HyperXKeyboardController/ \
Controllers/LEDStripController/ \
Controllers/MSI3ZoneController/ \
Controllers/MSIRGBController/ \
Controllers/PatriotViperController/ \
Controllers/PolychromeController/ \
Controllers/PoseidonZRGBController/ \
Controllers/RGBFusionController/ \
Controllers/RGBFusion2Controller/ \
Controllers/RGBFusionGPUController/ \
Controllers/ThermaltakeRiingController/ \
# Controllers/CorsairProController/ \
# Controllers/CrucialController/ \
# Controllers/Hue2Controller/ \
# Controllers/HuePlusController/ \
# Controllers/HyperXController/ \
# Controllers/HyperXKeyboardController/ \
# Controllers/LEDStripController/ \
# Controllers/MSI3ZoneController/ \
# Controllers/MSIRGBController/ \
# Controllers/PatriotViperController/ \
# Controllers/PolychromeController/ \
# Controllers/PoseidonZRGBController/ \
# Controllers/RGBFusionController/ \
# Controllers/RGBFusion2Controller/ \
# Controllers/RGBFusionGPUController/ \
# Controllers/ThermaltakeRiingController/ \
RGBController/ \
qt/
@ -76,79 +76,79 @@ SOURCES += \
qt/hsv.cpp \
serial_port/serial_port.cpp \
super_io/super_io.cpp \
Controllers/AMDWraithPrismController/AMDWraithPrismController.cpp \
Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp \
Controllers/AuraController/AuraController.cpp \
Controllers/AuraController/AuraControllerDetect.cpp \
Controllers/AuraGPUController/AuraGPUController.cpp \
Controllers/AuraGPUController/AuraGPUControllerDetect.cpp \
Controllers/CorsairController/CorsairController.cpp \
Controllers/CorsairController/CorsairControllerDetect.cpp \
Controllers/CorsairCmdrProController/CorsairCmdrProController.cpp \
Controllers/CorsairCmdrProController/CorsairCmdrProControllerDetect.cpp \
Controllers/CorsairKeyboardController/CorsairKeyboardController.cpp \
Controllers/CorsairKeyboardController/CorsairKeyboardControllerDetect.cpp \
# Controllers/AMDWraithPrismController/AMDWraithPrismController.cpp \
# Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp \
# Controllers/AuraController/AuraController.cpp \
# Controllers/AuraController/AuraControllerDetect.cpp \
# Controllers/AuraGPUController/AuraGPUController.cpp \
# Controllers/AuraGPUController/AuraGPUControllerDetect.cpp \
# Controllers/CorsairController/CorsairController.cpp \
# Controllers/CorsairController/CorsairControllerDetect.cpp \
# Controllers/CorsairCmdrProController/CorsairCmdrProController.cpp \
# Controllers/CorsairCmdrProController/CorsairCmdrProControllerDetect.cpp \
# Controllers/CorsairKeyboardController/CorsairKeyboardController.cpp \
# Controllers/CorsairKeyboardController/CorsairKeyboardControllerDetect.cpp \
Controllers/CorsairNodeProController/CorsairNodeProController.cpp \
Controllers/CorsairNodeProController/CorsairNodeProControllerDetect.cpp \
Controllers/CorsairProController/CorsairProController.cpp \
Controllers/CorsairProController/CorsairProControllerDetect.cpp \
Controllers/CrucialController/CrucialController.cpp \
Controllers/CrucialController/CrucialControllerDetect.cpp \
Controllers/Hue2Controller/Hue2Controller.cpp \
Controllers/Hue2Controller/Hue2ControllerDetect.cpp \
Controllers/HuePlusController/HuePlusController.cpp \
Controllers/HuePlusController/HuePlusControllerDetect.cpp \
Controllers/HyperXController/HyperXController.cpp \
Controllers/HyperXController/HyperXControllerDetect.cpp \
Controllers/HyperXKeyboardController/HyperXKeyboardController.cpp \
Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp \
Controllers/LEDStripController/LEDStripController.cpp \
Controllers/LEDStripController/LEDStripControllerDetect.cpp \
Controllers/MSI3ZoneController/MSI3ZoneController.cpp \
Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp \
Controllers/MSIRGBController/MSIRGBController.cpp \
Controllers/MSIRGBController/MSIRGBControllerDetect.cpp \
Controllers/PatriotViperController/PatriotViperController.cpp \
Controllers/PatriotViperController/PatriotViperControllerDetect.cpp \
Controllers/PolychromeController/PolychromeController.cpp \
Controllers/PolychromeController/PolychromeControllerDetect.cpp \
Controllers/PoseidonZRGBController/PoseidonZRGBController.cpp \
Controllers/PoseidonZRGBController/PoseidonZRGBControllerDetect.cpp \
Controllers/RGBFusionController/RGBFusionController.cpp \
Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \
Controllers/RGBFusion2Controller/RGBFusion2Controller.cpp \
Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \
Controllers/RGBFusionGPUController/RGBFusionGPUController.cpp \
Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp \
Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \
Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \
# Controllers/CorsairProController/CorsairProController.cpp \
# Controllers/CorsairProController/CorsairProControllerDetect.cpp \
# Controllers/CrucialController/CrucialController.cpp \
# Controllers/CrucialController/CrucialControllerDetect.cpp \
# Controllers/Hue2Controller/Hue2Controller.cpp \
# Controllers/Hue2Controller/Hue2ControllerDetect.cpp \
# Controllers/HuePlusController/HuePlusController.cpp \
# Controllers/HuePlusController/HuePlusControllerDetect.cpp \
# Controllers/HyperXController/HyperXController.cpp \
# Controllers/HyperXController/HyperXControllerDetect.cpp \
# Controllers/HyperXKeyboardController/HyperXKeyboardController.cpp \
# Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp \
# Controllers/LEDStripController/LEDStripController.cpp \
# Controllers/LEDStripController/LEDStripControllerDetect.cpp \
# Controllers/MSI3ZoneController/MSI3ZoneController.cpp \
# Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp \
# Controllers/MSIRGBController/MSIRGBController.cpp \
# Controllers/MSIRGBController/MSIRGBControllerDetect.cpp \
# Controllers/PatriotViperController/PatriotViperController.cpp \
# Controllers/PatriotViperController/PatriotViperControllerDetect.cpp \
# Controllers/PolychromeController/PolychromeController.cpp \
# Controllers/PolychromeController/PolychromeControllerDetect.cpp \
# Controllers/PoseidonZRGBController/PoseidonZRGBController.cpp \
# Controllers/PoseidonZRGBController/PoseidonZRGBControllerDetect.cpp \
# Controllers/RGBFusionController/RGBFusionController.cpp \
# Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \
# Controllers/RGBFusion2Controller/RGBFusion2Controller.cpp \
# Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \
# Controllers/RGBFusionGPUController/RGBFusionGPUController.cpp \
# Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp \
# Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \
# Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \
RGBController/RGBController.cpp \
RGBController/E131ControllerDetect.cpp \
RGBController/RGBController_AMDWraithPrism.cpp \
RGBController/RGBController_Aura.cpp \
RGBController/RGBController_AuraGPU.cpp \
RGBController/RGBController_Corsair.cpp \
RGBController/RGBController_CorsairCmdrPro.cpp \
RGBController/RGBController_CorsairKeyboard.cpp \
# RGBController/E131ControllerDetect.cpp \
# RGBController/RGBController_AMDWraithPrism.cpp \
# RGBController/RGBController_Aura.cpp \
# RGBController/RGBController_AuraGPU.cpp \
# RGBController/RGBController_Corsair.cpp \
# RGBController/RGBController_CorsairCmdrPro.cpp \
# RGBController/RGBController_CorsairKeyboard.cpp \
RGBController/RGBController_CorsairNodePro.cpp \
RGBController/RGBController_CorsairPro.cpp \
RGBController/RGBController_Crucial.cpp \
# RGBController/RGBController_CorsairPro.cpp \
# RGBController/RGBController_Crucial.cpp \
RGBController/RGBController_Dummy.cpp \
RGBController/RGBController_Hue2.cpp \
RGBController/RGBController_HuePlus.cpp \
RGBController/RGBController_HyperX.cpp \
RGBController/RGBController_HyperXKeyboard.cpp \
RGBController/RGBController_E131.cpp \
RGBController/RGBController_LEDStrip.cpp \
RGBController/RGBController_MSI3Zone.cpp \
RGBController/RGBController_MSIRGB.cpp \
RGBController/RGBController_PatriotViper.cpp \
RGBController/RGBController_Polychrome.cpp \
RGBController/RGBController_PoseidonZRGB.cpp \
RGBController/RGBController_RGBFusion.cpp \
RGBController/RGBController_RGBFusion2.cpp \
RGBController/RGBController_RGBFusionGPU.cpp \
RGBController/RGBController_ThermaltakeRiing.cpp \
# RGBController/RGBController_Hue2.cpp \
# RGBController/RGBController_HuePlus.cpp \
# RGBController/RGBController_HyperX.cpp \
# RGBController/RGBController_HyperXKeyboard.cpp \
# RGBController/RGBController_E131.cpp \
# RGBController/RGBController_LEDStrip.cpp \
# RGBController/RGBController_MSI3Zone.cpp \
# RGBController/RGBController_MSIRGB.cpp \
# RGBController/RGBController_PatriotViper.cpp \
# RGBController/RGBController_Polychrome.cpp \
# RGBController/RGBController_PoseidonZRGB.cpp \
# RGBController/RGBController_RGBFusion.cpp \
# RGBController/RGBController_RGBFusion2.cpp \
# RGBController/RGBController_RGBFusionGPU.cpp \
# RGBController/RGBController_ThermaltakeRiing.cpp \
HEADERS += \
ProfileManager.h \
@ -246,8 +246,8 @@ win32:SOURCES += \
i2c_smbus/i2c_smbus_piix4.cpp \
serial_port/find_usb_serial_port_win.cpp \
wmi/wmi.cpp \
RGBController/OpenRazerWindowsDetect.cpp \
RGBController/RGBController_OpenRazerWindows.cpp \
# RGBController/OpenRazerWindowsDetect.cpp \
# RGBController/RGBController_OpenRazerWindows.cpp \
win32:HEADERS += \
dependencies/inpout32_1501/Win32/inpout32.h \

View file

@ -3,6 +3,7 @@
unsigned char * RGBController::GetDeviceDescription()
{
#if 0
unsigned int data_ptr = 0;
unsigned int data_size = 0;
@ -359,10 +360,13 @@ unsigned char * RGBController::GetDeviceDescription()
delete[] zone_map_rows;
return(data_buf);
#endif
return(NULL);
}
void RGBController::ReadDeviceDescription(unsigned char* data_buf)
{
#if 0
unsigned int data_ptr = 0;
data_ptr += sizeof(unsigned int);
@ -654,6 +658,40 @@ void RGBController::ReadDeviceDescription(unsigned char* data_buf)
colors.push_back(new_color);
}
#endif
}
void RGBController::SetupColors()
{
unsigned int total_led_count;
/*---------------------------------------------------------*\
| Determine total number of LEDs on the device |
\*---------------------------------------------------------*/
total_led_count = 0;
for(int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
total_led_count += zones[zone_idx].leds_count;
}
/*---------------------------------------------------------*\
| Set the size of the color buffer to the number of LEDs |
\*---------------------------------------------------------*/
colors.resize(total_led_count);
/*---------------------------------------------------------*\
| Set the color buffer pointers on each zone |
\*---------------------------------------------------------*/
total_led_count = 0;
for(int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
zones[zone_idx].colors = &colors[total_led_count];
zones[zone_idx].leds = &leds[total_led_count];
total_led_count += zones[zone_idx].leds_count;
}
}
RGBColor RGBController::GetLED(int led)
@ -680,9 +718,9 @@ void RGBController::SetLED(int led, RGBColor color)
void RGBController::SetAllLEDs(RGBColor color)
{
for(int led = 0; led < colors.size(); led++)
for(int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
colors[led] = color;
SetAllZoneLEDs(zone_idx, color);
}
UpdateLEDs();
@ -690,12 +728,9 @@ void RGBController::SetAllLEDs(RGBColor color)
void RGBController::SetAllZoneLEDs(int zone, RGBColor color)
{
for (std::size_t x = 0; x < zones[zone].map.size(); x++)
for (std::size_t color_idx = 0; color_idx < zones[zone].leds_count; color_idx++)
{
for (std::size_t y = 0; y < zones[zone].map[x].size(); y++)
{
colors[zones[zone].map[x][y]] = color;
}
zones[zone].colors[color_idx] = color;
}
UpdateZoneLEDs(zone);

View file

@ -116,12 +116,13 @@ std::string device_type_to_str(device_type type);
typedef struct
{
std::string name; /* Zone name */
zone_type type; /* Zone type */
std::vector<std::vector<int>>
map; /* LED index map */
unsigned int leds_min;
unsigned int leds_max;
std::string name; /* Zone name */
zone_type type; /* Zone type */
led * leds; /* List of LEDs in zone */
RGBColor * colors; /* Colors of LEDs in zone */
unsigned int leds_count; /* Number of LEDs in zone */
unsigned int leds_min; /* Minimum number of LEDs */
unsigned int leds_max; /* Maximum number of LEDs */
} zone;
class RGBController
@ -144,6 +145,8 @@ public:
/*---------------------------------------------------------*\
| Generic functions implemented in RGBController.cpp |
\*---------------------------------------------------------*/
void SetupColors();
RGBColor GetLED(int led);
void SetLED(int led, RGBColor color);
void SetAllLEDs(RGBColor color);
@ -158,6 +161,10 @@ public:
/*---------------------------------------------------------*\
| Functions to be implemented in device implementation |
\*---------------------------------------------------------*/
virtual void SetupZones() = 0;
virtual void ResizeZone(int zone, int new_size) = 0;
virtual void UpdateLEDs() = 0;
virtual void UpdateZoneLEDs(int zone) = 0;
virtual void UpdateSingleLED(int led) = 0;

View file

@ -159,21 +159,21 @@ RGBController_CorsairNodePro::RGBController_CorsairNodePro(CorsairNodeProControl
Rainbow.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow);
SetupZones();
}
void RGBController_CorsairNodePro::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 < CORSAIR_NODE_PRO_NUM_CHANNELS; channel_idx++)
{
led_count += corsair->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 < CORSAIR_NODE_PRO_NUM_CHANNELS; channel_idx++)
{
if(corsair->channel_leds[channel_idx] > 0)
@ -186,10 +186,10 @@ RGBController_CorsairNodePro::RGBController_CorsairNodePro(CorsairNodeProControl
new_zone->name = "Corsair Channel ";
new_zone->name.append(ch_idx_string);
new_zone->type = ZONE_TYPE_LINEAR;
new_zone->leds_min = 0;
new_zone->leds_max = 40;
std::vector<int> *new_zone_map = new std::vector<int>();
new_zone->leds_min = 0;
new_zone->leds_max = 60;
new_zone->leds_count = corsair->channel_leds[channel_idx];
for (unsigned int led_ch_idx = 0; led_ch_idx < corsair->channel_leds[channel_idx]; led_ch_idx++)
{
@ -204,79 +204,40 @@ RGBController_CorsairNodePro::RGBController_CorsairNodePro(CorsairNodeProControl
leds.push_back(new_led);
leds_channel.push_back(channel_idx);
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);
}
}
SetupColors();
}
void RGBController_CorsairNodePro::ResizeZone(int zone, int new_size)
{
corsair->channel_leds[zone] = new_size;
SetupZones();
}
void RGBController_CorsairNodePro::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)
{
corsair->SetChannelLEDs(channel, channel_colors);
}
corsair->SetChannelLEDs(zone_idx, zones[zone_idx].colors, zones[zone_idx].leds_count);
}
}
void RGBController_CorsairNodePro::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)
{
corsair->SetChannelLEDs(channel, channel_colors);
}
corsair->SetChannelLEDs(zone, zones[zone].colors, zones[zone].leds_count);
}
void RGBController_CorsairNodePro::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)
{
corsair->SetChannelLEDs(channel, channel_colors);
}
corsair->SetChannelLEDs(channel, zones[channel].colors, zones[channel].leds_count);
}
void RGBController_CorsairNodePro::SetCustomMode()
@ -315,6 +276,7 @@ void RGBController_CorsairNodePro::UpdateMode()
}
corsair->SetChannelEffect(channel,
zones[channel].leds_count,
modes[active_mode].value,
modes[active_mode].speed,
direction,

View file

@ -15,6 +15,11 @@ class RGBController_CorsairNodePro : public RGBController
{
public:
RGBController_CorsairNodePro(CorsairNodeProController* corsair_ptr);
void SetupZones();
void ResizeZone(int zone, int new_size);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);

View file

@ -13,6 +13,16 @@ RGBController_Dummy::RGBController_Dummy()
}
void RGBController_Dummy::SetupZones()
{
}
void RGBController_Dummy::ResizeZone(int zone, int new_size)
{
}
void RGBController_Dummy::UpdateLEDs()
{
@ -36,4 +46,4 @@ void RGBController_Dummy::SetCustomMode()
void RGBController_Dummy::UpdateMode()
{
}
}

View file

@ -14,10 +14,15 @@ class RGBController_Dummy : public RGBController
{
public:
RGBController_Dummy();
void SetupZones();
void ResizeZone(int zone, int new_size);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
};
};

View file

@ -116,12 +116,9 @@ void Ui::OpenRGBDevicePage::on_ZoneBox_currentIndexChanged(int /*index*/)
{
selected_zone = selected_zone - 1;
for (std::size_t y = 0; y < device->zones[selected_zone].map.size(); y++)
for (std::size_t led_idx = 0; led_idx < device->zones[selected_zone].leds_count; led_idx++)
{
for(std::size_t x = 0; x < device->zones[selected_zone].map[y].size(); x++)
{
ui->LEDBox->addItem(device->leds[device->zones[selected_zone].map[y][x]].name.c_str());
}
ui->LEDBox->addItem(device->zones[selected_zone].leds[led_idx].name.c_str());
}
if(device->zones[selected_zone].leds_min == device->zones[selected_zone].leds_max)
@ -155,33 +152,22 @@ void Ui::OpenRGBDevicePage::on_LEDBox_currentIndexChanged(int index)
{
unsigned int selected_zone = ui->ZoneBox->currentIndex();
if(selected_zone > 0)
RGBColor color = 0x00000000;
if(selected_zone == 0)
{
color = device->GetLED(index);
}
else
{
selected_zone = selected_zone - 1;
unsigned int count = 0;
for (std::size_t y = 0; y < device->zones[selected_zone].map.size(); y++)
{
for(std::size_t x = 0; x < device->zones[selected_zone].map[y].size(); x++)
{
if(count == index)
{
index = device->zones[selected_zone].map[y][x];
break;
}
else
{
count++;
}
}
}
color = device->zones[selected_zone].colors[index];
}
/*-----------------------------------------------------*\
| Update color picker with color of selected LED |
\*-----------------------------------------------------*/
RGBColor color = device->GetLED(index);
UpdatingColor = true;
ui->RedSpinBox->setValue(RGBGetRValue(color));
ui->GreenSpinBox->setValue(RGBGetGValue(color));
@ -757,29 +743,6 @@ void Ui::OpenRGBDevicePage::on_SetLEDButton_clicked()
{
unsigned int selected_zone = ui->ZoneBox->currentIndex();
if(selected_zone > 0)
{
selected_zone = selected_zone - 1;
unsigned int count = 0;
for (std::size_t y = 0; y < device->zones[selected_zone].map.size(); y++)
{
for(std::size_t x = 0; x < device->zones[selected_zone].map[y].size(); x++)
{
if(count == index)
{
index = device->zones[selected_zone].map[y][x];
break;
}
else
{
count++;
}
}
}
}
/*-----------------------------------------------------*\
| Set the selected LED to the current color |
\*-----------------------------------------------------*/
@ -789,7 +752,16 @@ void Ui::OpenRGBDevicePage::on_SetLEDButton_clicked()
ui->BlueSpinBox->text().toInt()
);
device->SetLED(index, color);
if(selected_zone == 0)
{
device->SetLED(index, color);
}
else
{
selected_zone = selected_zone - 1;
device->zones[selected_zone].colors[index] = color;
}
}
break;
@ -970,9 +942,24 @@ void Ui::OpenRGBDevicePage::on_ResizeButton_clicked()
{
OpenRGBZoneResizeDialog dlg(device->zones[selected_zone].leds_min,
device->zones[selected_zone].leds_max,
device->zones[selected_zone].map[0].size());
device->zones[selected_zone].leds_count);
int new_size = dlg.show();
if(new_size >= 0)
{
device->ResizeZone(selected_zone, new_size);
/*-----------------------------------------------------*\
| Update LED box |
\*-----------------------------------------------------*/
on_ZoneBox_currentIndexChanged(selected_zone);
/*-----------------------------------------------------*\
| Update color picker with color of first LED |
\*-----------------------------------------------------*/
on_LEDBox_currentIndexChanged(0);
}
}
}
break;