From 5db52e5dc298fdee25695bf1de528e972e9de545 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 6 Apr 2020 16:31:09 -0500 Subject: [PATCH] Add resizing to RGB Fusion 2 USB controller addressable headers --- .../RGBFusion2USBController.cpp | 1 - .../RGBFusion2USBController.h | 1 - RGBController/RGBController_RGBFusion2USB.cpp | 56 ++++++++++++------- RGBController/RGBController_RGBFusion2USB.h | 3 +- 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Controllers/RGBFusion2USBController/RGBFusion2USBController.cpp b/Controllers/RGBFusion2USBController/RGBFusion2USBController.cpp index ab76225c..15837c58 100644 --- a/Controllers/RGBFusion2USBController/RGBFusion2USBController.cpp +++ b/Controllers/RGBFusion2USBController/RGBFusion2USBController.cpp @@ -107,7 +107,6 @@ void RGBFusion2USBController::SetCalibration() void RGBFusion2USBController::SetLedCount(unsigned int count) { - led_count = count; LEDCount s0 = LedCountToEnum(count); SendPacket(0x34, s0 | (s0 << 4)); // D_LED1 | D_LED2 } diff --git a/Controllers/RGBFusion2USBController/RGBFusion2USBController.h b/Controllers/RGBFusion2USBController/RGBFusion2USBController.h index 8ac3e592..cba4ec2e 100644 --- a/Controllers/RGBFusion2USBController/RGBFusion2USBController.h +++ b/Controllers/RGBFusion2USBController/RGBFusion2USBController.h @@ -186,7 +186,6 @@ private: hid_device* dev; int mode; - unsigned int led_count; IT8297Report report; std::string name; std::string loc; diff --git a/RGBController/RGBController_RGBFusion2USB.cpp b/RGBController/RGBController_RGBFusion2USB.cpp index ac490b45..0dc2c4d6 100644 --- a/RGBController/RGBController_RGBFusion2USB.cpp +++ b/RGBController/RGBController_RGBFusion2USB.cpp @@ -142,6 +142,16 @@ RGBController_RGBFusion2USB::RGBController_RGBFusion2USB(RGBFusion2USBController void RGBController_RGBFusion2USB::SetupZones() { + /*-------------------------------------------------*\ + | Only set LED count on the first run | + \*-------------------------------------------------*/ + bool first_run = false; + + if(zones.size() == 0) + { + first_run = true; + } + /*---------------------------------------------------------*\ | Look up channel map based on device name | \*---------------------------------------------------------*/ @@ -151,46 +161,49 @@ void RGBController_RGBFusion2USB::SetupZones() it = known_channels.find("Generic"); } - /*---------------------------------------------------------*\ - | Get the default number of addressable LEDs for each strip | - \*---------------------------------------------------------*/ - per_strip_led_cnt = 64; // TODO needs GUI option - /*---------------------------------------------------------*\ | Get number of motherboard LEDs and set addressable LED | | count | \*---------------------------------------------------------*/ size_t mb_led_cnt = it->second[0].size(); - controller->SetLedCount(per_strip_led_cnt); - controller->DisableBuiltinEffect(0, 0x3); + /*-------------------------------------------------*\ + | Clear any existing color/LED configuration | + \*-------------------------------------------------*/ + leds.clear(); + colors.clear(); + zones.resize(led_zones.size()); /*---------------------------------------------------------*\ | Set up zones | \*---------------------------------------------------------*/ for(std::size_t zone_idx = 0; zone_idx < led_zones.size(); zone_idx++) { - zone new_zone; - new_zone.name = led_zones[zone_idx]; - new_zone.type = ZONE_TYPE_LINEAR; + zones[zone_idx].name = led_zones[zone_idx]; + zones[zone_idx].type = ZONE_TYPE_LINEAR; /*---------------------------------------------------------*\ | Zone index 0 is motherboard LEDs and has fixed size | \*---------------------------------------------------------*/ if(zone_idx == ZONE_MB) { - new_zone.leds_min = mb_led_cnt; - new_zone.leds_max = mb_led_cnt; - new_zone.leds_count = mb_led_cnt; + zones[zone_idx].leds_min = mb_led_cnt; + zones[zone_idx].leds_max = mb_led_cnt; + zones[zone_idx].leds_count = mb_led_cnt; } else { - new_zone.leds_min = 0; - new_zone.leds_max = per_strip_led_cnt; //TODO - per-channel LED counts - new_zone.leds_count = per_strip_led_cnt; + zones[zone_idx].leds_min = 0; + zones[zone_idx].leds_max = 1024; + + if(first_run) + { + zones[zone_idx].leds_count = 0; + } + + controller->SetLedCount(zones[zone_idx].leds_count); + controller->DisableBuiltinEffect(0, 0x3); } - - zones.push_back(new_zone); } /*---------------------------------------------------------*\ @@ -221,9 +234,14 @@ void RGBController_RGBFusion2USB::SetupZones() SetupColors(); } -void RGBController_RGBFusion2USB::ResizeZone(int /*zone*/, int /*new_size*/) +void RGBController_RGBFusion2USB::ResizeZone(int zone, int new_size) { + if(((unsigned int)new_size >= zones[zone].leds_min) && ((unsigned int)new_size <= zones[zone].leds_max)) + { + zones[zone].leds_count = new_size; + SetupZones(); + } } void RGBController_RGBFusion2USB::SetCustomMode() diff --git a/RGBController/RGBController_RGBFusion2USB.h b/RGBController/RGBController_RGBFusion2USB.h index e0068367..353e2f69 100644 --- a/RGBController/RGBController_RGBFusion2USB.h +++ b/RGBController/RGBController_RGBFusion2USB.h @@ -40,6 +40,5 @@ public: private: RGBFusion2USBController* controller; - IT8297Report report; - unsigned int per_strip_led_cnt; + IT8297Report report; };