More MSI Mystic Light cleanup

This commit is contained in:
Adam Honse
2020-07-06 03:45:45 -05:00
parent 6626321e80
commit 950a3be01d
4 changed files with 450 additions and 295 deletions

View File

@@ -35,25 +35,34 @@ MSIMysticLightController::~MSIMysticLightController()
}
}
unsigned int MSIMysticLightController::GetZoneMinLedCount(ZONE /*zone*/)
unsigned int MSIMysticLightController::GetZoneMinLedCount
(
MSI_ZONE /*zone*/
)
{
return 1u;
return 1;
}
unsigned int MSIMysticLightController::GetZoneMaxLedCount(ZONE zone)
unsigned int MSIMysticLightController::GetZoneMaxLedCount
(
MSI_ZONE zone
)
{
switch (zone)
switch(zone)
{
case J_RAINBOW_1:
case J_RAINBOW_2:
case J_CORSAIR:
return 4u; // TODO: It can be different by zone and by mobo
case MSI_ZONE_J_RAINBOW_1:
case MSI_ZONE_J_RAINBOW_2:
case MSI_ZONE_J_CORSAIR:
return 4; // TODO: It can be different by zone and by mobo
default:
return 1u;
return 1;
}
}
unsigned int MSIMysticLightController::GetZoneLedCount(ZONE zone)
unsigned int MSIMysticLightController::GetZoneLedCount
(
MSI_ZONE zone
)
{
RainbowZoneData *requestedZone = GetRainbowZoneData(zone);
@@ -65,7 +74,11 @@ unsigned int MSIMysticLightController::GetZoneLedCount(ZONE zone)
return requestedZone->cycle_or_led_num;
}
void MSIMysticLightController::SetZoneLedCount(ZONE zone, unsigned int led_count)
void MSIMysticLightController::SetZoneLedCount
(
MSI_ZONE zone,
unsigned int led_count
)
{
RainbowZoneData *requestedZone = GetRainbowZoneData(zone);
@@ -78,7 +91,14 @@ void MSIMysticLightController::SetZoneLedCount(ZONE zone, unsigned int led_count
requestedZone->cycle_or_led_num = led_count;
}
void MSIMysticLightController::SetMode(ZONE zone, EFFECT mode, SPEED speed, BRIGHTNESS brightness, bool rainbow_color)
void MSIMysticLightController::SetMode
(
MSI_ZONE zone,
MSI_MODE mode,
MSI_SPEED speed,
MSI_BRIGHTNESS brightness,
bool rainbow_color
)
{
ZoneData* zoneData = GetZoneData(zone);
if(!zoneData)
@@ -132,26 +152,40 @@ void MSIMysticLightController::SaveOnUpdate(bool save)
data.save_data = save;
}
void MSIMysticLightController::SetZoneColor(ZONE zone, unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2)
void MSIMysticLightController::SetZoneColor
(
MSI_ZONE zone,
unsigned char red1,
unsigned char grn1,
unsigned char blu1,
unsigned char red2,
unsigned char grn2,
unsigned char blu2
)
{
ZoneData* zoneData = GetZoneData(zone);
if(!zoneData)
{
return;
}
zoneData->color.R = r1;
zoneData->color.G = g1;
zoneData->color.B = b1;
zoneData->color.R = red1;
zoneData->color.G = grn1;
zoneData->color.B = blu1;
zoneData->color2.R = r2;
zoneData->color2.G = g2;
zoneData->color2.B = b2;
zoneData->color2.R = red2;
zoneData->color2.G = grn2;
zoneData->color2.B = blu2;
}
std::pair<Color, Color> MSIMysticLightController::GetZoneColor(ZONE zone)
std::pair<Color, Color> MSIMysticLightController::GetZoneColor
(
MSI_ZONE zone
)
{
ZoneData *zoneData = GetZoneData(zone);
if (!zoneData)
{
return std::make_pair(Color{}, Color{});
@@ -164,61 +198,67 @@ std::pair<Color, Color> MSIMysticLightController::GetZoneColor(ZONE zone)
Color{zoneData->color2.R, zoneData->color2.G, zoneData->color2.B});
}
ZoneData *MSIMysticLightController::GetZoneData(ZONE zone)
ZoneData *MSIMysticLightController::GetZoneData
(
MSI_ZONE zone
)
{
switch (zone)
switch(zone)
{
case J_RGB_1:
case MSI_ZONE_J_RGB_1:
return &data.j_rgb_1;
case J_RGB_2:
case MSI_ZONE_J_RGB_2:
return &data.j_rgb_2;
case J_RAINBOW_1:
case MSI_ZONE_J_RAINBOW_1:
return &data.j_rainbow_1;
case J_RAINBOW_2:
case MSI_ZONE_J_RAINBOW_2:
return &data.j_rainbow_2;
case J_PIPE_1:
case MSI_ZONE_J_PIPE_1:
return &data.j_pipe_1;
case J_PIPE_2:
case MSI_ZONE_J_PIPE_2:
return &data.j_pipe_2;
case ON_BOARD_LED:
case MSI_ZONE_ON_BOARD_LED:
return &data.on_board_led;
case ON_BOARD_LED_1:
case MSI_ZONE_ON_BOARD_LED_1:
return &data.on_board_led_1;
case ON_BOARD_LED_2:
case MSI_ZONE_ON_BOARD_LED_2:
return &data.on_board_led_2;
case ON_BOARD_LED_3:
case MSI_ZONE_ON_BOARD_LED_3:
return &data.on_board_led_3;
case ON_BOARD_LED_4:
case MSI_ZONE_ON_BOARD_LED_4:
return &data.on_board_led_4;
case ON_BOARD_LED_5:
case MSI_ZONE_ON_BOARD_LED_5:
return &data.on_board_led_5;
case ON_BOARD_LED_6:
case MSI_ZONE_ON_BOARD_LED_6:
return &data.on_board_led_6;
case ON_BOARD_LED_7:
case MSI_ZONE_ON_BOARD_LED_7:
return &data.on_board_led_7;
case ON_BOARD_LED_8:
case MSI_ZONE_ON_BOARD_LED_8:
return &data.on_board_led_8;
case ON_BOARD_LED_9:
case MSI_ZONE_ON_BOARD_LED_9:
return &data.on_board_led_9;
case J_CORSAIR_OUTERLL120:
case MSI_ZONE_J_CORSAIR_OUTERLL120:
return &data.j_corsair_outerll120;
default:
case J_CORSAIR:
case MSI_ZONE_J_CORSAIR:
break;
}
return nullptr;
}
RainbowZoneData *MSIMysticLightController::GetRainbowZoneData(ZONE zone)
RainbowZoneData *MSIMysticLightController::GetRainbowZoneData
(
MSI_ZONE zone
)
{
switch (zone)
switch(zone)
{
case J_RAINBOW_1:
case MSI_ZONE_J_RAINBOW_1:
return &data.j_rainbow_1;
case J_RAINBOW_2:
case MSI_ZONE_J_RAINBOW_2:
return &data.j_rainbow_2;
case J_CORSAIR:
case MSI_ZONE_J_CORSAIR:
default:
return nullptr;
}
@@ -349,18 +389,29 @@ void MSIMysticLightController::ReadName()
name.append(" ").append(std::string(wname.begin(), wname.end()));
}
void MSIMysticLightController::SetDeviceSettings(bool is_fan, FAN_TYPE fan_type,
unsigned char corsair_device_quantity,
bool is_LL120Outer_individual)
void MSIMysticLightController::SetDeviceSettings
(
bool is_fan,
MSI_FAN_TYPE fan_type,
unsigned char corsair_device_quantity,
bool is_LL120Outer_individual
)
{
// If is_fan false, it is a stripe
CorsairZoneData &settingsZone = data.j_corsair;
settingsZone.fan_flags = (settingsZone.fan_flags & 128u) | fan_type << 1u | is_fan;
settingsZone.corsair_quantity = corsair_device_quantity << 2u;
settingsZone.is_individual = BitSet(settingsZone.is_individual, is_LL120Outer_individual, 0u);
/*-----------------------------------------------------*\
| If is_fan is false, it is an LED strip |
\*-----------------------------------------------------*/
CorsairZoneData &settingsZone = data.j_corsair;
settingsZone.fan_flags = (settingsZone.fan_flags & 0x80) | fan_type << 1 | is_fan;
settingsZone.corsair_quantity = corsair_device_quantity << 2;
settingsZone.is_individual = BitSet(settingsZone.is_individual, is_LL120Outer_individual, 0);
}
bool MSIMysticLightController::SetVolume(unsigned char main, unsigned char left, unsigned char right)
bool MSIMysticLightController::SetVolume
(
unsigned char main,
unsigned char left,
unsigned char right
)
{
unsigned char packet[64];
std::fill_n(packet, sizeof packet, 204u);
@@ -391,13 +442,13 @@ bool MSIMysticLightController::SetVolume(unsigned char main, unsigned char left,
void MSIMysticLightController::SetBoardSyncSettings
(
bool onboard_sync,
bool combine_JRGB,
bool combine_JPIPE1,
bool combine_JPIPE2,
bool combine_JRAINBOW1,
bool combine_JRAINBOW2,
bool combine_crossair
bool onboard_sync,
bool combine_JRGB,
bool combine_JPIPE1,
bool combine_JPIPE2,
bool combine_JRAINBOW1,
bool combine_JRAINBOW2,
bool combine_crossair
)
{
ZoneData &syncZone = data.on_board_led;
@@ -417,10 +468,10 @@ void MSIMysticLightController::SetBoardSyncSettings
void MSIMysticLightController::GetMode
(
ZONE zone,
EFFECT &mode,
SPEED &speed,
BRIGHTNESS &brightness,
MSI_ZONE zone,
MSI_MODE &mode,
MSI_SPEED &speed,
MSI_BRIGHTNESS &brightness,
bool &rainbow_color
)
{
@@ -440,18 +491,27 @@ void MSIMysticLightController::GetMode
/*-----------------------------------------------------*\
| Update pointers with data |
\*-----------------------------------------------------*/
mode = (EFFECT)(zoneData->effect);
speed = (SPEED)(zoneData->speedAndBrightnessFlags & 0x03);
brightness = (BRIGHTNESS)((zoneData->speedAndBrightnessFlags >> 2) & 0x1F);
mode = (MSI_MODE)(zoneData->effect);
speed = (MSI_SPEED)(zoneData->speedAndBrightnessFlags & 0x03);
brightness = (MSI_BRIGHTNESS)((zoneData->speedAndBrightnessFlags >> 2) & 0x1F);
rainbow_color = (zoneData->colorFlags & 0x80) >> 7;
}
unsigned char MSIMysticLightController::BitSet(unsigned char value, bool bit, unsigned int position)
unsigned char MSIMysticLightController::BitSet
(
unsigned char value,
bool bit,
unsigned int position
)
{
return static_cast<unsigned char>(std::bitset<8>(value).set(position, bit).to_ulong());
}
void MSIMysticLightController::SetCycleCount(ZONE zone, unsigned char cycle_num)
void MSIMysticLightController::SetCycleCount
(
MSI_ZONE zone,
unsigned char cycle_num
)
{
RainbowZoneData *requestedZone = GetRainbowZoneData(zone);
@@ -463,7 +523,10 @@ void MSIMysticLightController::SetCycleCount(ZONE zone, unsigned char cycle_num)
requestedZone->cycle_or_led_num = cycle_num;
}
unsigned char MSIMysticLightController::GetCycleCount(ZONE zone)
unsigned char MSIMysticLightController::GetCycleCount
(
MSI_ZONE zone
)
{
RainbowZoneData *requestedZone = GetRainbowZoneData(zone);
@@ -477,13 +540,13 @@ unsigned char MSIMysticLightController::GetCycleCount(ZONE zone)
void MSIMysticLightController::GetBoardSyncSettings
(
bool &onboard_sync,
bool &combine_JRGB,
bool &combine_JPIPE1,
bool &combine_JPIPE2,
bool &combine_JRAINBOW1,
bool &combine_JRAINBOW2,
bool &combine_crossair
bool &onboard_sync,
bool &combine_JRGB,
bool &combine_JPIPE1,
bool &combine_JPIPE2,
bool &combine_JRAINBOW1,
bool &combine_JRAINBOW2,
bool &combine_crossair
)
{
ZoneData &syncZone = data.on_board_led;
@@ -501,13 +564,17 @@ void MSIMysticLightController::GetBoardSyncSettings
combine_JRGB = (syncZone.speedAndBrightnessFlags & 0x80) >> 7;
}
void MSIMysticLightController::GetDeviceSettings(bool &stripe_or_fan, FAN_TYPE &fan_type,
unsigned char &corsair_device_quantity,
bool &is_LL120Outer_individual)
void MSIMysticLightController::GetDeviceSettings
(
bool &stripe_or_fan,
MSI_FAN_TYPE &fan_type,
unsigned char &corsair_device_quantity,
bool &is_LL120Outer_individual
)
{
CorsairZoneData &settingsZone = data.j_corsair;
stripe_or_fan = settingsZone.fan_flags & 1u;
fan_type = static_cast<FAN_TYPE >((settingsZone.fan_flags & 14u) >> 1u);
corsair_device_quantity = (settingsZone.corsair_quantity & 252u) >> 2u;
is_LL120Outer_individual = settingsZone.is_individual & 1u;
CorsairZoneData &settingsZone = data.j_corsair;
stripe_or_fan = settingsZone.fan_flags & 0x01;
fan_type = (MSI_FAN_TYPE )((settingsZone.fan_flags & 14u) >> 1);
corsair_device_quantity = (settingsZone.corsair_quantity & 0xFC) >> 2;
is_LL120Outer_individual = settingsZone.is_individual & 0x01;
}

View File

@@ -14,105 +14,105 @@
#pragma once
enum ZONE
enum MSI_ZONE
{
J_RGB_1 = 1,
J_RGB_2 = 174,
J_PIPE_1 = 11,
J_PIPE_2 = 21,
J_RAINBOW_1 = 31,
J_RAINBOW_2 = 42,
J_CORSAIR = 53,
J_CORSAIR_OUTERLL120 = 64,
ON_BOARD_LED = 74,
ON_BOARD_LED_1 = 84,
ON_BOARD_LED_2 = 94,
ON_BOARD_LED_3 = 104,
ON_BOARD_LED_4 = 114,
ON_BOARD_LED_5 = 124,
ON_BOARD_LED_6 = 134,
ON_BOARD_LED_7 = 144,
ON_BOARD_LED_8 = 154,
ON_BOARD_LED_9 = 164
MSI_ZONE_J_RGB_1 = 1,
MSI_ZONE_J_RGB_2 = 174,
MSI_ZONE_J_PIPE_1 = 11,
MSI_ZONE_J_PIPE_2 = 21,
MSI_ZONE_J_RAINBOW_1 = 31,
MSI_ZONE_J_RAINBOW_2 = 42,
MSI_ZONE_J_CORSAIR = 53,
MSI_ZONE_J_CORSAIR_OUTERLL120 = 64,
MSI_ZONE_ON_BOARD_LED = 74,
MSI_ZONE_ON_BOARD_LED_1 = 84,
MSI_ZONE_ON_BOARD_LED_2 = 94,
MSI_ZONE_ON_BOARD_LED_3 = 104,
MSI_ZONE_ON_BOARD_LED_4 = 114,
MSI_ZONE_ON_BOARD_LED_5 = 124,
MSI_ZONE_ON_BOARD_LED_6 = 134,
MSI_ZONE_ON_BOARD_LED_7 = 144,
MSI_ZONE_ON_BOARD_LED_8 = 154,
MSI_ZONE_ON_BOARD_LED_9 = 164
};
struct ZoneDescription
{
std::string name;
ZONE value;
MSI_ZONE value;
};
enum EFFECT
enum MSI_MODE
{
DISABLE,
STATIC,
BREATHING,
FLASHING,
DOUBLE_FLASHING,
LIGHTNING,
MSI_MARQUEE,
METEOR,
WATER_DROP,
MSI_RAINBOW,
POP,
RAP,
JAZZ,
PLAY,
MOVIE,
COLOR_RING,
PLANETARY,
DOUBLE_METEOR,
ENERGY,
BLINK,
CLOCK,
COLOR_PULSE,
COLOR_SHIFT,
COLOR_WAVE,
MARQUEE,
RAINBOW,
RAINBOW_WAVE,
VISOR,
JRAINBOW,
RAINBOW_FLASHING,
RAINBOW_DOUBLE_FLASHING,
RANDOM,
FAN_CONTROL,
DISABLE_2,
COLOR_RING_FLASHING,
COLOR_RING_DOUBLE_FLASHING,
STACK,
CORSAIR_QUE,
FIRE,
LAVA
MSI_MODE_DISABLE = 0,
MSI_MODE_STATIC = 1,
MSI_MODE_BREATHING = 2,
MSI_MODE_FLASHING = 3,
MSI_MODE_DOUBLE_FLASHING = 4,
MSI_MODE_LIGHTNING = 5,
MSI_MODE_MSI_MARQUEE = 6,
MSI_MODE_METEOR = 7,
MSI_MODE_WATER_DROP = 8,
MSI_MODE_MSI_RAINBOW = 9,
MSI_MODE_POP = 10,
MSI_MODE_RAP = 11,
MSI_MODE_JAZZ = 12,
MSI_MODE_PLAY = 13,
MSI_MODE_MOVIE = 14,
MSI_MODE_COLOR_RING = 15,
MSI_MODE_PLANETARY = 16,
MSI_MODE_DOUBLE_METEOR = 17,
MSI_MODE_ENERGY = 18,
MSI_MODE_BLINK = 19,
MSI_MODE_CLOCK = 20,
MSI_MODE_COLOR_PULSE = 21,
MSI_MODE_COLOR_SHIFT = 22,
MSI_MODE_COLOR_WAVE = 23,
MSI_MODE_MARQUEE = 24,
MSI_MODE_RAINBOW = 25,
MSI_MODE_RAINBOW_WAVE = 26,
MSI_MODE_VISOR = 27,
MSI_MODE_JRAINBOW = 28,
MSI_MODE_RAINBOW_FLASHING = 29,
MSI_MODE_RAINBOW_DOUBLE_FLASHING = 30,
MSI_MODE_RANDOM = 31,
MSI_MODE_FAN_CONTROL = 32,
MSI_MODE_DISABLE_2 = 33,
MSI_MODE_COLOR_RING_FLASHING = 34,
MSI_MODE_COLOR_RING_DOUBLE_FLASHING = 35,
MSI_MODE_STACK = 36,
MSI_MODE_CORSAIR_QUE = 37,
MSI_MODE_FIRE = 38,
MSI_MODE_LAVA = 39,
};
enum SPEED
enum MSI_SPEED
{
LOW,
MEDIUM,
HIGH
MSI_SPEED_LOW = 0,
MSI_SPEED_MEDIUM = 1,
MSI_SPEED_HIGH = 2,
};
enum FAN_TYPE
enum MSI_FAN_TYPE
{
SP,
HD,
LL
MSI_FAN_TYPE_SP = 0,
MSI_FAN_TYPE_HD = 1,
MSI_FAN_TYPE_LL = 2,
};
enum BRIGHTNESS
enum MSI_BRIGHTNESS
{
OFF,
LEVEL_10,
LEVEL_20,
LEVEL_30,
LEVEL_40,
LEVEL_50,
LEVEL_60,
LEVEL_70,
LEVEL_80,
LEVEL_90,
LEVEL_100
MSI_BRIGHTNESS_OFF = 0,
MSI_BRIGHTNESS_LEVEL_10 = 1,
MSI_BRIGHTNESS_LEVEL_20 = 2,
MSI_BRIGHTNESS_LEVEL_30 = 3,
MSI_BRIGHTNESS_LEVEL_40 = 4,
MSI_BRIGHTNESS_LEVEL_50 = 5,
MSI_BRIGHTNESS_LEVEL_60 = 6,
MSI_BRIGHTNESS_LEVEL_70 = 7,
MSI_BRIGHTNESS_LEVEL_80 = 8,
MSI_BRIGHTNESS_LEVEL_90 = 9,
MSI_BRIGHTNESS_LEVEL_100 = 10,
};
struct Color
@@ -124,54 +124,51 @@ struct Color
struct CorsairZoneData
{
unsigned char effect = EFFECT::STATIC;
Color color { std::numeric_limits<unsigned char>::max(), 0, 0 };
unsigned char fan_flags = 40;
unsigned char effect = MSI_MODE_STATIC;
Color color { 0, 0, 0 };
unsigned char fan_flags = 40;
unsigned char corsair_quantity;
unsigned char padding[3];
unsigned char is_individual = 0;
unsigned char is_individual = 0;
};
struct ZoneData
{
unsigned char effect = EFFECT::STATIC;
Color color { std::numeric_limits<unsigned char>::max(), 0u, 0u };
unsigned char speedAndBrightnessFlags = 40u;
Color color2 { 0, std::numeric_limits<unsigned char>::max(), 0u };
unsigned char colorFlags = 128u;
const unsigned char padding = 0u;
unsigned char effect = MSI_MODE_STATIC;
Color color { 0, 0, 0 };
unsigned char speedAndBrightnessFlags = 40;
Color color2 { 0, 0, 0 };
unsigned char colorFlags = 128;
const unsigned char padding = 0;
};
struct RainbowZoneData : ZoneData
{
unsigned char cycle_or_led_num = 20u;
unsigned char cycle_or_led_num = 20;
};
struct FeaturePacket
{
const unsigned char report_id = 82u; // Report ID
ZoneData j_rgb_1; // 1
ZoneData j_pipe_1; // 11
ZoneData j_pipe_2; // 21
RainbowZoneData j_rainbow_1; // 31
RainbowZoneData j_rainbow_2; // 42
CorsairZoneData j_corsair; // 53
ZoneData j_corsair_outerll120; // 64
ZoneData on_board_led; // 74
ZoneData on_board_led_1; // 84
ZoneData on_board_led_2; // 94
ZoneData on_board_led_3; // 104
ZoneData on_board_led_4; // 114
ZoneData on_board_led_5; // 124
ZoneData on_board_led_6; // 134
ZoneData on_board_led_7; // 144
ZoneData on_board_led_8; // 154
ZoneData on_board_led_9; // 164
ZoneData j_rgb_2; // 174
unsigned char save_data = 0u; // 184
const unsigned char report_id = 0x52; // Report ID
ZoneData j_rgb_1; // 1
ZoneData j_pipe_1; // 11
ZoneData j_pipe_2; // 21
RainbowZoneData j_rainbow_1; // 31
RainbowZoneData j_rainbow_2; // 42
CorsairZoneData j_corsair; // 53
ZoneData j_corsair_outerll120; // 64
ZoneData on_board_led; // 74
ZoneData on_board_led_1; // 84
ZoneData on_board_led_2; // 94
ZoneData on_board_led_3; // 104
ZoneData on_board_led_4; // 114
ZoneData on_board_led_5; // 124
ZoneData on_board_led_6; // 134
ZoneData on_board_led_7; // 144
ZoneData on_board_led_8; // 154
ZoneData on_board_led_9; // 164
ZoneData j_rgb_2; // 174
unsigned char save_data = 0; // 184
};
@@ -181,25 +178,116 @@ public:
MSIMysticLightController(hid_device* handle, const char *path);
~MSIMysticLightController();
unsigned int GetZoneMinLedCount(ZONE zone);
unsigned int GetZoneMaxLedCount(ZONE zone);
unsigned int GetZoneLedCount(ZONE zone);
void SetZoneLedCount(ZONE zone, unsigned int led_count);
unsigned int GetZoneMinLedCount
(
MSI_ZONE zone
);
unsigned int GetZoneMaxLedCount
(
MSI_ZONE zone
);
unsigned int GetZoneLedCount
(
MSI_ZONE zone
);
void SetZoneLedCount
(
MSI_ZONE zone,
unsigned int led_count
);
void SetMode
(
MSI_ZONE zone,
MSI_MODE mode,
MSI_SPEED speed,
MSI_BRIGHTNESS brightness,
bool rainbow_color
);
void GetMode
(
MSI_ZONE zone,
MSI_MODE &mode,
MSI_SPEED &speed,
MSI_BRIGHTNESS &brightness,
bool &rainbow_color
);
void SetZoneColor
(
MSI_ZONE zone,
unsigned char red1,
unsigned char grn1,
unsigned char blu1,
unsigned char red2,
unsigned char grn2,
unsigned char blu2
);
void SetCycleCount
(
MSI_ZONE zone,
unsigned char cycle_num
);
unsigned char GetCycleCount
(
MSI_ZONE zone
);
void SetMode(ZONE zone, EFFECT mode, SPEED speed, BRIGHTNESS brightness, bool rainbow_color);
void GetMode(ZONE zone, EFFECT &mode, SPEED &speed, BRIGHTNESS &brightness, bool &rainbow_color);
void SetZoneColor(ZONE zone, unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2);
void SetCycleCount(ZONE zone, unsigned char cycle_num);
unsigned char GetCycleCount(ZONE zone);
std::pair<Color, Color>
GetZoneColor(ZONE zone);
GetZoneColor(MSI_ZONE zone);
bool Update();
void SetDeviceSettings(bool stripe_or_fan, FAN_TYPE fan_type, unsigned char corsair_device_quantity, bool is_LL120Outer_individual);
void GetDeviceSettings(bool &stripe_or_fan, FAN_TYPE &fan_type, unsigned char &corsair_device_quantity, bool &is_LL120Outer_individual);
bool SetVolume(unsigned char main, unsigned char left, unsigned char right);
void SetBoardSyncSettings(bool onboard_sync, bool combine_JRGB, bool combine_JPIPE1, bool combine_JPIPE2, bool combine_JRAINBOW1, bool combine_JRAINBOW2, bool combine_crossair);
void GetBoardSyncSettings(bool &onboard_sync, bool &combine_JRGB, bool &combine_JPIPE1, bool &combine_JPIPE2, bool &combine_JRAINBOW1, bool &combine_JRAINBOW2, bool &combine_crossair);
void SetDeviceSettings
(
bool stripe_or_fan,
MSI_FAN_TYPE fan_type,
unsigned char corsair_device_quantity,
bool is_LL120Outer_individual
);
void GetDeviceSettings
(
bool &stripe_or_fan,
MSI_FAN_TYPE &fan_type,
unsigned char &corsair_device_quantity,
bool &is_LL120Outer_individual
);
bool SetVolume
(
unsigned char main,
unsigned char left,
unsigned char right
);
void SetBoardSyncSettings
(
bool onboard_sync,
bool combine_JRGB,
bool combine_JPIPE1,
bool combine_JPIPE2,
bool combine_JRAINBOW1,
bool combine_JRAINBOW2,
bool combine_crossair
);
void GetBoardSyncSettings
(
bool &onboard_sync,
bool &combine_JRGB,
bool &combine_JPIPE1,
bool &combine_JPIPE2,
bool &combine_JRAINBOW1,
bool &combine_JRAINBOW2,
bool &combine_crossair
);
std::string GetDeviceName();
std::string GetDeviceLocation();
@@ -212,9 +300,9 @@ private:
bool ReadFwVersion();
void ReadSerial();
void ReadName();
ZoneData* GetZoneData(ZONE zone);
ZoneData* GetZoneData(MSI_ZONE zone);
RainbowZoneData*
GetRainbowZoneData(ZONE zone);
GetRainbowZoneData(MSI_ZONE zone);
static unsigned char BitSet(unsigned char value, bool bit, unsigned int position);
hid_device* dev;

View File

@@ -12,24 +12,24 @@
static const std::array<ZoneDescription, 18> led_zones
{
ZoneDescription{"JRGB1", J_RGB_1},
ZoneDescription{"JRGB2", J_RGB_2},
ZoneDescription{"JRAINBOW1", J_RAINBOW_1},
ZoneDescription{"JRAINBOW2", J_RAINBOW_2},
ZoneDescription{"JPIPE1", J_PIPE_1},
ZoneDescription{"JPIPE2", J_PIPE_2},
ZoneDescription{"JCORSAIR", J_CORSAIR},
ZoneDescription{"JCORSAIR Outer", J_CORSAIR_OUTERLL120},
ZoneDescription{"OnboardLED", ON_BOARD_LED},
ZoneDescription{"OnboardLED1", ON_BOARD_LED_1},
ZoneDescription{"OnboardLED2", ON_BOARD_LED_2},
ZoneDescription{"OnboardLED3", ON_BOARD_LED_3},
ZoneDescription{"OnboardLED4", ON_BOARD_LED_4},
ZoneDescription{"OnboardLED5", ON_BOARD_LED_5},
ZoneDescription{"OnboardLED6", ON_BOARD_LED_6},
ZoneDescription{"OnboardLED7", ON_BOARD_LED_7},
ZoneDescription{"OnboardLED8", ON_BOARD_LED_8},
ZoneDescription{"OnboardLED9", ON_BOARD_LED_9},
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{"JCORSAIR Outer", MSI_ZONE_J_CORSAIR_OUTERLL120},
ZoneDescription{"Onboard LED 0", MSI_ZONE_ON_BOARD_LED},
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},
};
RGBController_MSIMysticLight::RGBController_MSIMysticLight(MSIMysticLightController* controller_ptr)
@@ -93,10 +93,10 @@ void RGBController_MSIMysticLight::SetupZones()
void RGBController_MSIMysticLight::ResizeZone(int zone, int new_size)
{
ZONE zon = ZoneFromPos(zone);
unsigned int max_count = controller->GetZoneMaxLedCount(zon),
min_count = controller->GetZoneMinLedCount(zon),
new_siz = new_size;
MSI_ZONE zon = ZoneFromPos(zone);
unsigned int max_count = controller->GetZoneMaxLedCount(zon);
unsigned int min_count = controller->GetZoneMinLedCount(zon);
unsigned int new_siz = new_size;
new_siz = std::min(std::max(new_siz, min_count), max_count); // std::clamp only from C++17
/// TODO: Update LED count
}
@@ -138,68 +138,68 @@ void RGBController_MSIMysticLight::SetupModes()
constexpr unsigned int RANDOM_ONLY = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR;
constexpr unsigned int COMMON = RANDOM_ONLY | MODE_FLAG_HAS_PER_LED_COLOR;
SetupMode("Static", STATIC, MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR);
SetupMode("Off", DISABLE, 0);
SetupMode("Breathing", BREATHING, COMMON);
SetupMode("Flashing", FLASHING, COMMON);
SetupMode("Double flashing", DOUBLE_FLASHING, COMMON);
SetupMode("Lightning", LIGHTNING, COMMON);
SetupMode("MSI Marquee", MSI_MARQUEE, COMMON);
SetupMode("Meteor", METEOR, COMMON);
SetupMode("Water drop", WATER_DROP, COMMON);
SetupMode("MSI Rainbow", MSI_RAINBOW, RANDOM_ONLY);
SetupMode("Pop", POP, COMMON);
SetupMode("Rap", RAP, COMMON);
SetupMode("Jazz", JAZZ, COMMON);
SetupMode("Play", PLAY, COMMON);
SetupMode("Movie", MOVIE, COMMON);
SetupMode("Color ring", COLOR_RING, COMMON);
SetupMode("Planetary", PLANETARY, COMMON);
SetupMode("Double meteor", DOUBLE_METEOR, COMMON);
SetupMode("Energy", ENERGY, COMMON);
SetupMode("Blink", BLINK, COMMON);
SetupMode("Clock", CLOCK, COMMON);
SetupMode("Color pulse", COLOR_PULSE, COMMON);
SetupMode("Color shift", COLOR_SHIFT, COMMON);
SetupMode("Color wave", COLOR_WAVE, COMMON);
SetupMode("Marquee", MARQUEE, COMMON);
SetupMode("Rainbow", RAINBOW, COMMON);
SetupMode("Rainbow wave", RAINBOW_WAVE, COMMON);
SetupMode("Visor", VISOR, COMMON);
SetupMode("JRainbow", JRAINBOW, COMMON);
SetupMode("Rainbow flashing", RAINBOW_FLASHING, COMMON);
SetupMode("Rainbow double flashing", RAINBOW_DOUBLE_FLASHING, COMMON);
SetupMode("Random", RANDOM, COMMON);
SetupMode("Fan control", FAN_CONTROL, COMMON);
SetupMode("Off 2", DISABLE_2, COMMON);
SetupMode("Color ring flashing", COLOR_RING_FLASHING, COMMON);
SetupMode("Color ring double flashing", COLOR_RING_DOUBLE_FLASHING, COMMON);
SetupMode("Stack", STACK, COMMON);
SetupMode("Corsair Que", CORSAIR_QUE, COMMON);
SetupMode("Fire", FIRE, COMMON);
SetupMode("Lava", LAVA, COMMON);
SetupMode("Static", MSI_MODE_STATIC, MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR);
SetupMode("Off", MSI_MODE_DISABLE, 0);
SetupMode("Breathing", MSI_MODE_BREATHING, COMMON);
SetupMode("Flashing", MSI_MODE_FLASHING, COMMON);
SetupMode("Double flashing", MSI_MODE_DOUBLE_FLASHING, COMMON);
SetupMode("Lightning", MSI_MODE_LIGHTNING, COMMON);
SetupMode("MSI Marquee", MSI_MODE_MSI_MARQUEE, COMMON);
SetupMode("Meteor", MSI_MODE_METEOR, COMMON);
SetupMode("Water drop", MSI_MODE_WATER_DROP, COMMON);
SetupMode("MSI Rainbow", MSI_MODE_MSI_RAINBOW, RANDOM_ONLY);
SetupMode("Pop", MSI_MODE_POP, COMMON);
SetupMode("Rap", MSI_MODE_RAP, COMMON);
SetupMode("Jazz", MSI_MODE_JAZZ, COMMON);
SetupMode("Play", MSI_MODE_PLAY, COMMON);
SetupMode("Movie", MSI_MODE_MOVIE, COMMON);
SetupMode("Color ring", MSI_MODE_COLOR_RING, COMMON);
SetupMode("Planetary", MSI_MODE_PLANETARY, COMMON);
SetupMode("Double meteor", MSI_MODE_DOUBLE_METEOR, COMMON);
SetupMode("Energy", MSI_MODE_ENERGY, COMMON);
SetupMode("Blink", MSI_MODE_BLINK, COMMON);
SetupMode("Clock", MSI_MODE_CLOCK, COMMON);
SetupMode("Color pulse", MSI_MODE_COLOR_PULSE, COMMON);
SetupMode("Color shift", MSI_MODE_COLOR_SHIFT, COMMON);
SetupMode("Color wave", MSI_MODE_COLOR_WAVE, COMMON);
SetupMode("Marquee", MSI_MODE_MARQUEE, COMMON);
SetupMode("Rainbow", MSI_MODE_RAINBOW, COMMON);
SetupMode("Rainbow wave", MSI_MODE_RAINBOW_WAVE, COMMON);
SetupMode("Visor", MSI_MODE_VISOR, COMMON);
SetupMode("JRainbow", MSI_MODE_JRAINBOW, COMMON);
SetupMode("Rainbow flashing", MSI_MODE_RAINBOW_FLASHING, COMMON);
SetupMode("Rainbow double flashing", MSI_MODE_RAINBOW_DOUBLE_FLASHING, COMMON);
SetupMode("Random", MSI_MODE_RANDOM, COMMON);
SetupMode("Fan control", MSI_MODE_FAN_CONTROL, COMMON);
SetupMode("Off 2", MSI_MODE_DISABLE_2, COMMON);
SetupMode("Color ring flashing", MSI_MODE_COLOR_RING_FLASHING, COMMON);
SetupMode("Color ring double flashing", MSI_MODE_COLOR_RING_DOUBLE_FLASHING, COMMON);
SetupMode("Stack", MSI_MODE_STACK, COMMON);
SetupMode("Corsair Que", MSI_MODE_CORSAIR_QUE, COMMON);
SetupMode("Fire", MSI_MODE_FIRE, COMMON);
SetupMode("Lava", MSI_MODE_LAVA, COMMON);
}
void RGBController_MSIMysticLight::UpdateLed(int zone, int led)
{
bool random = modes[active_mode].color_mode == MODE_COLORS_RANDOM;
unsigned char red = RGBGetRValue(zones[zone].colors[led]);
unsigned char grn = RGBGetGValue(zones[zone].colors[led]);
unsigned char blu = RGBGetBValue(zones[zone].colors[led]);
EFFECT mode = static_cast<EFFECT>(modes[active_mode].value);
SPEED speed = static_cast<SPEED>(modes[active_mode].speed);
ZONE zon = ZoneFromPos(zone);
bool random = modes[active_mode].color_mode == MODE_COLORS_RANDOM;
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);
controller->SetMode(zon, mode, speed, BRIGHTNESS::LEVEL_100, random);
controller->SetMode(zon, mode, speed, MSI_BRIGHTNESS_LEVEL_100, random);
controller->SetZoneColor(zon, red, grn, blu, red, grn, blu);
}
ZONE RGBController_MSIMysticLight::ZoneFromPos(int zone)
MSI_ZONE RGBController_MSIMysticLight::ZoneFromPos(int zone)
{
return led_zones[zone].value;
}
void RGBController_MSIMysticLight::SetupMode(const char *name, EFFECT mod, unsigned int flags)
void RGBController_MSIMysticLight::SetupMode(const char *name, MSI_MODE mod, unsigned int flags)
{
mode Mode;
Mode.name = name;
@@ -216,9 +216,9 @@ void RGBController_MSIMysticLight::SetupMode(const char *name, EFFECT mod, unsig
if(flags & MODE_FLAG_HAS_SPEED)
{
Mode.speed = SPEED::MEDIUM;
Mode.speed_max = SPEED::HIGH;
Mode.speed_min = SPEED::LOW;
Mode.speed = MSI_SPEED_MEDIUM;
Mode.speed_max = MSI_SPEED_HIGH;
Mode.speed_min = MSI_SPEED_LOW;
}
modes.push_back(Mode);

View File

@@ -32,8 +32,8 @@ public:
private:
void SetupModes();
void UpdateLed(int zone, int led);
ZONE ZoneFromPos(int zone);
void SetupMode(const char *name, EFFECT mode, unsigned int flags);
MSI_ZONE ZoneFromPos(int zone);
void SetupMode(const char *name, MSI_MODE mode, unsigned int flags);
MSIMysticLightController* controller;
};