From 950a3be01d281d126f4acd76734b36121b1f40b4 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 6 Jul 2020 03:45:45 -0500 Subject: [PATCH] More MSI Mystic Light cleanup --- .../MSIMysticLightController.cpp | 239 +++++++----- .../MSIMysticLightController.h | 352 +++++++++++------- .../RGBController_MSIMysticLight.cpp | 150 ++++---- RGBController/RGBController_MSIMysticLight.h | 4 +- 4 files changed, 450 insertions(+), 295 deletions(-) diff --git a/Controllers/MSIMysticLightController/MSIMysticLightController.cpp b/Controllers/MSIMysticLightController/MSIMysticLightController.cpp index 4eeba9583..c8f248800 100644 --- a/Controllers/MSIMysticLightController/MSIMysticLightController.cpp +++ b/Controllers/MSIMysticLightController/MSIMysticLightController.cpp @@ -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 MSIMysticLightController::GetZoneColor(ZONE zone) +std::pair MSIMysticLightController::GetZoneColor + ( + MSI_ZONE zone + ) { ZoneData *zoneData = GetZoneData(zone); + if (!zoneData) { return std::make_pair(Color{}, Color{}); @@ -164,61 +198,67 @@ std::pair 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(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((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; } diff --git a/Controllers/MSIMysticLightController/MSIMysticLightController.h b/Controllers/MSIMysticLightController/MSIMysticLightController.h index 32143b3ff..7799bfe8f 100644 --- a/Controllers/MSIMysticLightController/MSIMysticLightController.h +++ b/Controllers/MSIMysticLightController/MSIMysticLightController.h @@ -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::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::max(), 0u, 0u }; - unsigned char speedAndBrightnessFlags = 40u; - Color color2 { 0, std::numeric_limits::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 - 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; diff --git a/RGBController/RGBController_MSIMysticLight.cpp b/RGBController/RGBController_MSIMysticLight.cpp index dd0bafe4b..c4581b551 100644 --- a/RGBController/RGBController_MSIMysticLight.cpp +++ b/RGBController/RGBController_MSIMysticLight.cpp @@ -12,24 +12,24 @@ static const std::array 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(modes[active_mode].value); - SPEED speed = static_cast(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); diff --git a/RGBController/RGBController_MSIMysticLight.h b/RGBController/RGBController_MSIMysticLight.h index 5e65769de..cb81c4232 100644 --- a/RGBController/RGBController_MSIMysticLight.h +++ b/RGBController/RGBController_MSIMysticLight.h @@ -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; };