Add resizing to RGB Fusion 2 USB controller addressable headers

This commit is contained in:
Adam Honse
2020-04-06 16:31:09 -05:00
parent 1249814e93
commit 5db52e5dc2
4 changed files with 38 additions and 23 deletions

View File

@@ -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
}

View File

@@ -186,7 +186,6 @@ private:
hid_device* dev;
int mode;
unsigned int led_count;
IT8297Report report;
std::string name;
std::string loc;

View File

@@ -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()

View File

@@ -40,6 +40,5 @@ public:
private:
RGBFusion2USBController* controller;
IT8297Report report;
unsigned int per_strip_led_cnt;
IT8297Report report;
};