Group pipe and onboard LEDs into zones

This commit is contained in:
Adam Honse
2021-03-06 23:45:36 -06:00
parent 5695a55411
commit 7e06b7f3a5
2 changed files with 82 additions and 39 deletions

View File

@@ -9,8 +9,6 @@
#include "RGBController_MSIMysticLight162.h"
#define NUM_LED_ZONES (sizeof(led_zones) / sizeof(ZoneDescription))
struct ZoneDescription
{
std::string name;

View File

@@ -10,33 +10,75 @@
#include "RGBController_MSIMysticLight185.h"
#define NUM_LED_ZONES (sizeof(led_zones) / sizeof(ZoneDescription))
struct ZoneDescription
{
std::string name;
MSI_ZONE value;
std::string name;
const MSI_ZONE* leds;
};
static const MSI_ZONE ZoneList_JRGB1[] =
{
MSI_ZONE_J_RGB_1,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_JRGB2[] =
{
MSI_ZONE_J_RGB_2,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_JRainbow1[] =
{
MSI_ZONE_J_RAINBOW_1,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_JRainbow2[] =
{
MSI_ZONE_J_RAINBOW_2,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_JCorsair[] =
{
MSI_ZONE_J_CORSAIR,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_JPipe[] =
{
MSI_ZONE_J_PIPE_1,
MSI_ZONE_J_PIPE_2,
MSI_ZONE_NONE
};
static const MSI_ZONE ZoneList_Onboard[] =
{
MSI_ZONE_ON_BOARD_LED_0,
MSI_ZONE_ON_BOARD_LED_1,
MSI_ZONE_ON_BOARD_LED_2,
MSI_ZONE_ON_BOARD_LED_3,
MSI_ZONE_ON_BOARD_LED_4,
MSI_ZONE_ON_BOARD_LED_5,
MSI_ZONE_ON_BOARD_LED_6,
MSI_ZONE_ON_BOARD_LED_7,
MSI_ZONE_ON_BOARD_LED_8,
MSI_ZONE_ON_BOARD_LED_9,
MSI_ZONE_NONE
};
#define NUM_ZONES (sizeof(led_zones) / sizeof(led_zones[0]))
static const ZoneDescription led_zones[] =
{
ZoneDescription{"JRGB1", MSI_ZONE_J_RGB_1},
ZoneDescription{"JRGB2", MSI_ZONE_J_RGB_2},
ZoneDescription{"JRAINBOW1", MSI_ZONE_J_RAINBOW_1},
ZoneDescription{"JRAINBOW2", MSI_ZONE_J_RAINBOW_2},
ZoneDescription{"JPIPE1", MSI_ZONE_J_PIPE_1},
ZoneDescription{"JPIPE2", MSI_ZONE_J_PIPE_2},
ZoneDescription{"JCORSAIR", MSI_ZONE_J_CORSAIR},
ZoneDescription{"Onboard LED 0", MSI_ZONE_ON_BOARD_LED_0},
ZoneDescription{"Onboard LED 1", MSI_ZONE_ON_BOARD_LED_1},
ZoneDescription{"Onboard LED 2", MSI_ZONE_ON_BOARD_LED_2},
ZoneDescription{"Onboard LED 3", MSI_ZONE_ON_BOARD_LED_3},
ZoneDescription{"Onboard LED 4", MSI_ZONE_ON_BOARD_LED_4},
ZoneDescription{"Onboard LED 5", MSI_ZONE_ON_BOARD_LED_5},
ZoneDescription{"Onboard LED 6", MSI_ZONE_ON_BOARD_LED_6},
ZoneDescription{"Onboard LED 7", MSI_ZONE_ON_BOARD_LED_7},
ZoneDescription{"Onboard LED 8", MSI_ZONE_ON_BOARD_LED_8},
ZoneDescription{"Onboard LED 9", MSI_ZONE_ON_BOARD_LED_9},
ZoneDescription{"JRGB1", ZoneList_JRGB1 },
ZoneDescription{"JRGB2", ZoneList_JRGB2 },
ZoneDescription{"JRAINBOW1", ZoneList_JRainbow1 },
ZoneDescription{"JRAINBOW2", ZoneList_JRainbow2 },
ZoneDescription{"JCORSAIR", ZoneList_JCorsair },
ZoneDescription{"Pipe LEDs", ZoneList_JPipe },
ZoneDescription{"Onboard LEDs", ZoneList_Onboard },
};
RGBController_MSIMysticLight185::RGBController_MSIMysticLight185(MSIMysticLight185Controller* controller_ptr)
@@ -66,16 +108,25 @@ void RGBController_MSIMysticLight185::SetupZones()
/*---------------------------------------------------------*\
| Set up zones |
\*---------------------------------------------------------*/
for(std::size_t zone_idx = 0; zone_idx < NUM_LED_ZONES; zone_idx++)
for(std::size_t zone_idx = 0; zone_idx < NUM_ZONES; zone_idx++)
{
ZoneDescription zd = led_zones[zone_idx];
ZoneDescription zd = led_zones[zone_idx];
zone new_zone;
unsigned int led_count;
while(zd.leds[led_count] != MSI_ZONE_NONE)
{
led_count++;
}
new_zone.name = zd.name;
new_zone.type = ZONE_TYPE_LINEAR;
new_zone.leds_min = 1;
new_zone.leds_max = 1;
new_zone.leds_count = 1;
new_zone.leds_min = led_count;
new_zone.leds_max = led_count;
new_zone.leds_count = led_count;
new_zone.matrix_map = NULL;
zones.push_back(new_zone);
@@ -92,7 +143,7 @@ void RGBController_MSIMysticLight185::SetupZones()
new_led.name.append(std::to_string(led_idx + 1));
}
new_led.value = zone_idx;
new_led.value = zd.leds[led_idx];
leds.push_back(new_led);
}
@@ -192,17 +243,11 @@ void RGBController_MSIMysticLight185::UpdateLed(int zone, int led)
unsigned char red = RGBGetRValue(zones[zone].colors[led]);
unsigned char grn = RGBGetGValue(zones[zone].colors[led]);
unsigned char blu = RGBGetBValue(zones[zone].colors[led]);
MSI_MODE mode = (MSI_MODE)(modes[active_mode].value);
MSI_SPEED speed = (MSI_SPEED)(modes[active_mode].speed);
MSI_ZONE zon = ZoneFromPos(zone);
MSI_MODE mode = (MSI_MODE)(modes[active_mode].value);
MSI_SPEED speed = (MSI_SPEED)(modes[active_mode].speed);
controller->SetMode(zon, mode, speed, MSI_BRIGHTNESS_LEVEL_100, random);
controller->SetZoneColor(zon, red, grn, blu, red, grn, blu);
}
MSI_ZONE RGBController_MSIMysticLight185::ZoneFromPos(int zone)
{
return led_zones[zone].value;
controller->SetMode((MSI_ZONE)zones[zone].leds[led].value, mode, speed, MSI_BRIGHTNESS_LEVEL_100, random);
controller->SetZoneColor((MSI_ZONE)zones[zone].leds[led].value, red, grn, blu, red, grn, blu);
}
void RGBController_MSIMysticLight185::SetupMode(const char *name, MSI_MODE mod, unsigned int flags)