From 408020c244e4aba8970d10f77eb50c9cf5af584a Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sat, 7 Mar 2020 01:10:26 -0600 Subject: [PATCH] Update Gigabyte RGB Fusion 1.0 controller to new RGBController API --- OpenRGB.cpp | 2 +- OpenRGB.pro | 8 +- RGBController/RGBController_RGBFusion.cpp | 133 +++++++++++++--------- RGBController/RGBController_RGBFusion.h | 5 + 4 files changed, 88 insertions(+), 60 deletions(-) diff --git a/OpenRGB.cpp b/OpenRGB.cpp index d2c543b8d..794df59ed 100644 --- a/OpenRGB.cpp +++ b/OpenRGB.cpp @@ -324,7 +324,7 @@ void DetectRGBControllers(void) //DetectPolychromeControllers(busses, rgb_controllers); DetectRGBFusionGPUControllers(busses, rgb_controllers); - //DetectRGBFusionControllers(busses, rgb_controllers); + DetectRGBFusionControllers(busses, rgb_controllers); //DetectMSIRGBControllers(rgb_controllers); //DetectLEDStripControllers(rgb_controllers); diff --git a/OpenRGB.pro b/OpenRGB.pro index 5f16e451d..4a7b47286 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -47,7 +47,7 @@ INCLUDEPATH += \ # Controllers/PatriotViperController/ \ # Controllers/PolychromeController/ \ # Controllers/PoseidonZRGBController/ \ -# Controllers/RGBFusionController/ \ + Controllers/RGBFusionController/ \ # Controllers/RGBFusion2Controller/ \ Controllers/RGBFusionGPUController/ \ Controllers/ThermaltakeRiingController/ \ @@ -111,8 +111,8 @@ SOURCES += \ # Controllers/PolychromeController/PolychromeControllerDetect.cpp \ # Controllers/PoseidonZRGBController/PoseidonZRGBController.cpp \ # Controllers/PoseidonZRGBController/PoseidonZRGBControllerDetect.cpp \ -# Controllers/RGBFusionController/RGBFusionController.cpp \ -# Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \ + Controllers/RGBFusionController/RGBFusionController.cpp \ + Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \ # Controllers/RGBFusion2Controller/RGBFusion2Controller.cpp \ # Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \ Controllers/RGBFusionGPUController/RGBFusionGPUController.cpp \ @@ -141,7 +141,7 @@ SOURCES += \ # RGBController/RGBController_PatriotViper.cpp \ # RGBController/RGBController_Polychrome.cpp \ # RGBController/RGBController_PoseidonZRGB.cpp \ -# RGBController/RGBController_RGBFusion.cpp \ + RGBController/RGBController_RGBFusion.cpp \ # RGBController/RGBController_RGBFusion2.cpp \ RGBController/RGBController_RGBFusionGPU.cpp \ RGBController/RGBController_ThermaltakeRiing.cpp \ diff --git a/RGBController/RGBController_RGBFusion.cpp b/RGBController/RGBController_RGBFusion.cpp index 0bc1bc322..7e213163e 100644 --- a/RGBController/RGBController_RGBFusion.cpp +++ b/RGBController/RGBController_RGBFusion.cpp @@ -9,35 +9,6 @@ #include "RGBController_RGBFusion.h" - -void RGBController_RGBFusion::UpdateLEDs() -{ - for (std::size_t led = 0; led < colors.size(); led++) - { - RGBColor color = colors[led]; - unsigned char red = RGBGetRValue(color); - unsigned char grn = RGBGetGValue(color); - unsigned char blu = RGBGetBValue(color); - - rgb_fusion->SetLEDColor(led, red, grn, blu); - } -} - -void RGBController_RGBFusion::UpdateZoneLEDs(int zone) -{ - RGBColor color = colors[zone]; - unsigned char red = RGBGetRValue(color); - unsigned char grn = RGBGetGValue(color); - unsigned char blu = RGBGetBValue(color); - - rgb_fusion->SetLEDColor(zone, red, grn, blu); -} - -void RGBController_RGBFusion::UpdateSingleLED(int led) -{ - UpdateZoneLEDs(led); -} - static const char* rgb_fusion_zone_names[] = { "Motherboard", @@ -81,37 +52,89 @@ RGBController_RGBFusion::RGBController_RGBFusion(RGBFusionController* rgb_fusion Flashing.color_mode = MODE_COLORS_PER_LED; modes.push_back(Flashing); - colors.resize(rgb_fusion->GetLEDCount()); - - // Search through all LEDs and create zones for each channel type - for (unsigned int i = 0; i < rgb_fusion->GetLEDCount(); i++) - { - zone* new_zone = new zone(); - led* new_led = new led(); - - std::vector* zone_row = new std::vector(); - - // Set zone name to channel name - new_zone->name = rgb_fusion_zone_names[i]; - new_led->name = rgb_fusion_zone_names[i]; - - zone_row->push_back(i); - - // Aura devices can be either single or linear, never matrix - // That means only one row is needed - new_zone->map.push_back(*zone_row); - - // Push new LED to LEDs vector - leds.push_back(*new_led); - - // Push new zone to zones vector - zones.push_back(*new_zone); - } + SetupZones(); // Initialize active mode active_mode = GetDeviceMode(); } +void RGBController_RGBFusion::SetupZones() +{ + /*---------------------------------------------------------*\ + | Search through all LEDs and create zones for each channel | + | type | + \*---------------------------------------------------------*/ + for(unsigned int zone_idx = 0; zone_idx < rgb_fusion->GetLEDCount(); zone_idx++) + { + zone* new_zone = new zone(); + + /*---------------------------------------------------------*\ + | Set zone name to channel name | + \*---------------------------------------------------------*/ + new_zone->name = rgb_fusion_zone_names[zone_idx]; + new_zone->leds_min = 1; + new_zone->leds_max = 1; + new_zone->leds_count = 1; + + /*---------------------------------------------------------*\ + | Push new zone to zones vector | + \*---------------------------------------------------------*/ + zones.push_back(*new_zone); + } + + for(unsigned int led_idx = 0; led_idx < zones.size(); led_idx++) + { + led* new_led = new led(); + + /*---------------------------------------------------------*\ + | Set LED name to channel name | + \*---------------------------------------------------------*/ + new_led->name = rgb_fusion_zone_names[led_idx]; + + /*---------------------------------------------------------*\ + | Push new LED to LEDs vector | + \*---------------------------------------------------------*/ + leds.push_back(*new_led); + } + + SetupColors(); +} + +void RGBController_RGBFusion::ResizeZone(int /*zone*/, int /*new_size*/) +{ + /*---------------------------------------------------------*\ + | This device does not support resizing zones | + \*---------------------------------------------------------*/ +} + +void RGBController_RGBFusion::UpdateLEDs() +{ + for (std::size_t led = 0; led < colors.size(); led++) + { + RGBColor color = colors[led]; + unsigned char red = RGBGetRValue(color); + unsigned char grn = RGBGetGValue(color); + unsigned char blu = RGBGetBValue(color); + + rgb_fusion->SetLEDColor(led, red, grn, blu); + } +} + +void RGBController_RGBFusion::UpdateZoneLEDs(int zone) +{ + RGBColor color = colors[zone]; + unsigned char red = RGBGetRValue(color); + unsigned char grn = RGBGetGValue(color); + unsigned char blu = RGBGetBValue(color); + + rgb_fusion->SetLEDColor(zone, red, grn, blu); +} + +void RGBController_RGBFusion::UpdateSingleLED(int led) +{ + UpdateZoneLEDs(led); +} + int RGBController_RGBFusion::GetDeviceMode() { int dev_mode = rgb_fusion->GetMode(); diff --git a/RGBController/RGBController_RGBFusion.h b/RGBController/RGBController_RGBFusion.h index b75170046..743fa5835 100644 --- a/RGBController/RGBController_RGBFusion.h +++ b/RGBController/RGBController_RGBFusion.h @@ -16,6 +16,11 @@ class RGBController_RGBFusion : public RGBController { public: RGBController_RGBFusion(RGBFusionController* rgb_fusion_ptr); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + void UpdateLEDs(); void UpdateZoneLEDs(int zone); void UpdateSingleLED(int led);