From 62518b5163f5a4fa183d6d1e02803ea5434aa238 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 4 Mar 2020 19:29:58 -0600 Subject: [PATCH] Update RGBController API and GUI to handle resizable zones. All controllers except for CorsairNodePro have been disabled pending rework --- .../CorsairNodeProController.cpp | 29 +-- .../CorsairNodeProController.h | 3 +- OpenRGB.cpp | 50 ++--- OpenRGB.pro | 184 +++++++++--------- RGBController/RGBController.cpp | 49 ++++- RGBController/RGBController.h | 19 +- .../RGBController_CorsairNodePro.cpp | 88 +++------ RGBController/RGBController_CorsairNodePro.h | 5 + RGBController/RGBController_Dummy.cpp | 12 +- RGBController/RGBController_Dummy.h | 7 +- qt/OpenRGBDevicePage.cpp | 85 ++++---- 11 files changed, 272 insertions(+), 259 deletions(-) diff --git a/Controllers/CorsairNodeProController/CorsairNodeProController.cpp b/Controllers/CorsairNodeProController/CorsairNodeProController.cpp index dbe2796f..3e1aab53 100644 --- a/Controllers/CorsairNodeProController/CorsairNodeProController.cpp +++ b/Controllers/CorsairNodeProController/CorsairNodeProController.cpp @@ -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 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) diff --git a/Controllers/CorsairNodeProController/CorsairNodeProController.h b/Controllers/CorsairNodeProController/CorsairNodeProController.h index eff8dfc0..d044a8f5 100644 --- a/Controllers/CorsairNodeProController/CorsairNodeProController.h +++ b/Controllers/CorsairNodeProController/CorsairNodeProController.h @@ -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 colors); + void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors); unsigned int channel_leds[CORSAIR_NODE_PRO_NUM_CHANNELS]; void KeepaliveThread(); diff --git a/OpenRGB.cpp b/OpenRGB.cpp index ee00f85e..b37691b6 100644 --- a/OpenRGB.cpp +++ b/OpenRGB.cpp @@ -313,42 +313,42 @@ void DetectRGBFusion2Controllers(std::vector &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 | \*-------------------------------------*/ diff --git a/OpenRGB.pro b/OpenRGB.pro index b3e54a1b..d955f752 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -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 \ diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index c369c18c..7bba2935 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -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); diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h index 48197ef7..bdba3c93 100644 --- a/RGBController/RGBController.h +++ b/RGBController/RGBController.h @@ -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> - 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; diff --git a/RGBController/RGBController_CorsairNodePro.cpp b/RGBController/RGBController_CorsairNodePro.cpp index 5b8d2a99..ea43f5bf 100644 --- a/RGBController/RGBController_CorsairNodePro.cpp +++ b/RGBController/RGBController_CorsairNodePro.cpp @@ -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 *new_zone_map = new std::vector(); + 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 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 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 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, diff --git a/RGBController/RGBController_CorsairNodePro.h b/RGBController/RGBController_CorsairNodePro.h index a781daee..e9390855 100644 --- a/RGBController/RGBController_CorsairNodePro.h +++ b/RGBController/RGBController_CorsairNodePro.h @@ -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); diff --git a/RGBController/RGBController_Dummy.cpp b/RGBController/RGBController_Dummy.cpp index 184bc8bd..a425d8f8 100644 --- a/RGBController/RGBController_Dummy.cpp +++ b/RGBController/RGBController_Dummy.cpp @@ -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() { -} \ No newline at end of file +} diff --git a/RGBController/RGBController_Dummy.h b/RGBController/RGBController_Dummy.h index 236c3c39..cc3a4639 100644 --- a/RGBController/RGBController_Dummy.h +++ b/RGBController/RGBController_Dummy.h @@ -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(); -}; \ No newline at end of file +}; diff --git a/qt/OpenRGBDevicePage.cpp b/qt/OpenRGBDevicePage.cpp index 86aef1a2..c91fe963 100644 --- a/qt/OpenRGBDevicePage.cpp +++ b/qt/OpenRGBDevicePage.cpp @@ -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;