mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-07-29 14:36:06 -04:00
571 lines
27 KiB
C++
571 lines
27 KiB
C++
/*---------------------------------------------------------*\
|
|
| RGBController_MSIMonitor72.cpp |
|
|
| |
|
|
| RGBController for MSI monitors using the 0x72 dual |
|
|
| control block layout (MPG 322URX QD-OLED) |
|
|
| |
|
|
| Ken Sanislo 19 Jul 2026 |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-or-later |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#include <algorithm>
|
|
#include "RGBController_MSIMonitor72.h"
|
|
|
|
/**------------------------------------------------------------------*\
|
|
@name MSIMonitor72
|
|
@category Accessory
|
|
@type USB
|
|
@save :robot:
|
|
@direct :white_check_mark:
|
|
@effects :white_check_mark:
|
|
@detectors DetectMSIMonitorController
|
|
@comment Developed with MSI MPG 322URX QD-OLED
|
|
\*-------------------------------------------------------------------*/
|
|
RGBController_MSIMonitor72::RGBController_MSIMonitor72(MSIMonitorController* controller_ptr, unsigned int count, unsigned int direction, bool dual)
|
|
{
|
|
controller = controller_ptr;
|
|
led_count = count;
|
|
reverse_order = (direction == MSI_MONITOR_72_DIR_RIGHT_TO_LEFT);
|
|
dual_block = dual;
|
|
|
|
name = controller->GetNameString();
|
|
vendor = "MSI";
|
|
type = DEVICE_TYPE_MONITOR;
|
|
description = "MSI Monitor (Gaming Controller)";
|
|
location = controller->GetDeviceLocation();
|
|
serial = controller->GetSerialString();
|
|
|
|
/*-----------------------------------------------------*\
|
|
| This layout has no Advanced mode, so Direct is Static |
|
|
| driven from the inline per LED colour arrays. |
|
|
\*-----------------------------------------------------*/
|
|
mode Direct;
|
|
Direct.name = "Direct";
|
|
Direct.value = MSI_MONITOR_72_MODE_STATIC;
|
|
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Direct.brightness_min = 0;
|
|
Direct.brightness_max = 100;
|
|
Direct.brightness = 100;
|
|
Direct.color_mode = MODE_COLORS_PER_LED;
|
|
modes.push_back(Direct);
|
|
|
|
mode Static;
|
|
Static.name = "Static";
|
|
Static.value = MSI_MONITOR_72_MODE_STATIC;
|
|
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Static.colors_min = 1;
|
|
Static.colors_max = 1;
|
|
Static.colors.resize(1);
|
|
Static.brightness_min = 0;
|
|
Static.brightness_max = 100;
|
|
Static.brightness = 100;
|
|
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Static);
|
|
|
|
mode Breathing;
|
|
Breathing.name = "Breathing";
|
|
Breathing.value = MSI_MONITOR_72_MODE_BREATHING;
|
|
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Breathing.colors_min = 1;
|
|
Breathing.colors_max = 1;
|
|
Breathing.colors.resize(1);
|
|
Breathing.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Breathing.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Breathing.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Breathing.brightness_min = 0;
|
|
Breathing.brightness_max = 100;
|
|
Breathing.brightness = 100;
|
|
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Breathing);
|
|
|
|
mode Flashing;
|
|
Flashing.name = "Flashing";
|
|
Flashing.value = MSI_MONITOR_72_MODE_FLASHING;
|
|
Flashing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Flashing.colors_min = 2;
|
|
Flashing.colors_max = 2;
|
|
Flashing.colors.resize(2);
|
|
Flashing.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Flashing.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Flashing.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Flashing.brightness_min = 0;
|
|
Flashing.brightness_max = 100;
|
|
Flashing.brightness = 100;
|
|
Flashing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Flashing);
|
|
|
|
mode DoubleFlashing;
|
|
DoubleFlashing.name = "Double Flashing";
|
|
DoubleFlashing.value = MSI_MONITOR_72_MODE_DOUBLE_FLASHING;
|
|
DoubleFlashing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
DoubleFlashing.colors_min = 2;
|
|
DoubleFlashing.colors_max = 2;
|
|
DoubleFlashing.colors.resize(2);
|
|
DoubleFlashing.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
DoubleFlashing.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
DoubleFlashing.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
DoubleFlashing.brightness_min = 0;
|
|
DoubleFlashing.brightness_max = 100;
|
|
DoubleFlashing.brightness = 100;
|
|
DoubleFlashing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(DoubleFlashing);
|
|
|
|
mode Lightning;
|
|
Lightning.name = "Lightning";
|
|
Lightning.value = MSI_MONITOR_72_MODE_LIGHTNING;
|
|
Lightning.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Lightning.colors_min = 1;
|
|
Lightning.colors_max = 1;
|
|
Lightning.colors.resize(1);
|
|
Lightning.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Lightning.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Lightning.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Lightning.brightness_min = 0;
|
|
Lightning.brightness_max = 100;
|
|
Lightning.brightness = 100;
|
|
Lightning.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Lightning);
|
|
|
|
mode Scanner;
|
|
Scanner.name = "Scanner";
|
|
Scanner.value = MSI_MONITOR_72_MODE_SCANNER;
|
|
Scanner.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Scanner.colors_min = 1;
|
|
Scanner.colors_max = 1;
|
|
Scanner.colors.resize(1);
|
|
Scanner.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Scanner.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Scanner.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Scanner.brightness_min = 0;
|
|
Scanner.brightness_max = 100;
|
|
Scanner.brightness = 100;
|
|
Scanner.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Scanner);
|
|
|
|
mode Meteor;
|
|
Meteor.name = "Meteor";
|
|
Meteor.value = MSI_MONITOR_72_MODE_METEOR;
|
|
Meteor.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Meteor.colors_min = 1;
|
|
Meteor.colors_max = 1;
|
|
Meteor.colors.resize(1);
|
|
Meteor.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Meteor.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Meteor.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Meteor.brightness_min = 0;
|
|
Meteor.brightness_max = 100;
|
|
Meteor.brightness = 100;
|
|
Meteor.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Meteor);
|
|
|
|
mode WaterDrop;
|
|
WaterDrop.name = "Water Drop";
|
|
WaterDrop.value = MSI_MONITOR_72_MODE_WATER_DROP;
|
|
WaterDrop.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
WaterDrop.colors_min = 1;
|
|
WaterDrop.colors_max = 1;
|
|
WaterDrop.colors.resize(1);
|
|
WaterDrop.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
WaterDrop.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
WaterDrop.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
WaterDrop.brightness_min = 0;
|
|
WaterDrop.brightness_max = 100;
|
|
WaterDrop.brightness = 100;
|
|
WaterDrop.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(WaterDrop);
|
|
|
|
mode RainbowMSI;
|
|
RainbowMSI.name = "Rainbow";
|
|
RainbowMSI.value = MSI_MONITOR_72_MODE_RAINBOW_MSI;
|
|
RainbowMSI.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
RainbowMSI.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
RainbowMSI.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
RainbowMSI.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
RainbowMSI.brightness_min = 0;
|
|
RainbowMSI.brightness_max = 100;
|
|
RainbowMSI.brightness = 100;
|
|
RainbowMSI.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(RainbowMSI);
|
|
|
|
mode ColorRing;
|
|
ColorRing.name = "Color Ring";
|
|
ColorRing.value = MSI_MONITOR_72_MODE_COLOR_RING;
|
|
ColorRing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
ColorRing.colors_min = 1;
|
|
ColorRing.colors_max = 1;
|
|
ColorRing.colors.resize(1);
|
|
ColorRing.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
ColorRing.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
ColorRing.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
ColorRing.brightness_min = 0;
|
|
ColorRing.brightness_max = 100;
|
|
ColorRing.brightness = 100;
|
|
ColorRing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(ColorRing);
|
|
|
|
mode Planetary;
|
|
Planetary.name = "Planetary";
|
|
Planetary.value = MSI_MONITOR_72_MODE_PLANETARY;
|
|
Planetary.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Planetary.colors_min = 1;
|
|
Planetary.colors_max = 1;
|
|
Planetary.colors.resize(1);
|
|
Planetary.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Planetary.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Planetary.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Planetary.brightness_min = 0;
|
|
Planetary.brightness_max = 100;
|
|
Planetary.brightness = 100;
|
|
Planetary.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Planetary);
|
|
|
|
mode DoubleMeteor;
|
|
DoubleMeteor.name = "Double Meteor";
|
|
DoubleMeteor.value = MSI_MONITOR_72_MODE_DOUBLE_METEOR;
|
|
DoubleMeteor.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
DoubleMeteor.colors_min = 1;
|
|
DoubleMeteor.colors_max = 1;
|
|
DoubleMeteor.colors.resize(1);
|
|
DoubleMeteor.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
DoubleMeteor.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
DoubleMeteor.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
DoubleMeteor.brightness_min = 0;
|
|
DoubleMeteor.brightness_max = 100;
|
|
DoubleMeteor.brightness = 100;
|
|
DoubleMeteor.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(DoubleMeteor);
|
|
|
|
mode Energy;
|
|
Energy.name = "Energy";
|
|
Energy.value = MSI_MONITOR_72_MODE_ENERGY;
|
|
Energy.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Energy.colors_min = 1;
|
|
Energy.colors_max = 1;
|
|
Energy.colors.resize(1);
|
|
Energy.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Energy.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Energy.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Energy.brightness_min = 0;
|
|
Energy.brightness_max = 100;
|
|
Energy.brightness = 100;
|
|
Energy.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Energy);
|
|
|
|
mode Blink;
|
|
Blink.name = "Blink";
|
|
Blink.value = MSI_MONITOR_72_MODE_BLINK;
|
|
Blink.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Blink.colors_min = 1;
|
|
Blink.colors_max = 1;
|
|
Blink.colors.resize(1);
|
|
Blink.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Blink.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Blink.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Blink.brightness_min = 0;
|
|
Blink.brightness_max = 100;
|
|
Blink.brightness = 100;
|
|
Blink.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Blink);
|
|
|
|
mode Clock;
|
|
Clock.name = "Clock";
|
|
Clock.value = MSI_MONITOR_72_MODE_CLOCK;
|
|
Clock.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Clock.colors_min = 1;
|
|
Clock.colors_max = 1;
|
|
Clock.colors.resize(1);
|
|
Clock.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Clock.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Clock.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Clock.brightness_min = 0;
|
|
Clock.brightness_max = 100;
|
|
Clock.brightness = 100;
|
|
Clock.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Clock);
|
|
|
|
mode ColorPulse;
|
|
ColorPulse.name = "Color Pulse";
|
|
ColorPulse.value = MSI_MONITOR_72_MODE_COLOR_PULSE;
|
|
ColorPulse.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
ColorPulse.colors_min = 1;
|
|
ColorPulse.colors_max = 1;
|
|
ColorPulse.colors.resize(1);
|
|
ColorPulse.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
ColorPulse.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
ColorPulse.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
ColorPulse.brightness_min = 0;
|
|
ColorPulse.brightness_max = 100;
|
|
ColorPulse.brightness = 100;
|
|
ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(ColorPulse);
|
|
|
|
mode ColorShift;
|
|
ColorShift.name = "Color Shift";
|
|
ColorShift.value = MSI_MONITOR_72_MODE_COLOR_SHIFT;
|
|
ColorShift.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
ColorShift.colors_min = 2;
|
|
ColorShift.colors_max = 2;
|
|
ColorShift.colors.resize(2);
|
|
ColorShift.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
ColorShift.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
ColorShift.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
ColorShift.brightness_min = 0;
|
|
ColorShift.brightness_max = 100;
|
|
ColorShift.brightness = 100;
|
|
ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(ColorShift);
|
|
|
|
mode ColorWave;
|
|
ColorWave.name = "Color Wave";
|
|
ColorWave.value = MSI_MONITOR_72_MODE_COLOR_WAVE;
|
|
ColorWave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
ColorWave.colors_min = 2;
|
|
ColorWave.colors_max = 2;
|
|
ColorWave.colors.resize(2);
|
|
ColorWave.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
ColorWave.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
ColorWave.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
ColorWave.brightness_min = 0;
|
|
ColorWave.brightness_max = 100;
|
|
ColorWave.brightness = 100;
|
|
ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(ColorWave);
|
|
|
|
/*-----------------------------------------------------*\
|
|
| Mode 24 marquee behaviour is model dependent. On the |
|
|
| dual block / richer boards it wants the marker bytes |
|
|
| plus a per LED array of separate colours (a user |
|
|
| defined marquee). The vendor app does not even offer |
|
|
| it for version 34, but the firmware still runs it as |
|
|
| a one colour rolling band, so we expose that. |
|
|
\*-----------------------------------------------------*/
|
|
mode Marquee;
|
|
Marquee.name = "Marquee";
|
|
Marquee.value = MSI_MONITOR_72_MODE_MARQUEE;
|
|
Marquee.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Marquee.colors_min = 1;
|
|
Marquee.colors_max = 1;
|
|
Marquee.colors.resize(1);
|
|
Marquee.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Marquee.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Marquee.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Marquee.brightness_min = 0;
|
|
Marquee.brightness_max = 100;
|
|
Marquee.brightness = 100;
|
|
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Marquee);
|
|
|
|
mode SpectrumCycle;
|
|
SpectrumCycle.name = "Spectrum Cycle";
|
|
SpectrumCycle.value = MSI_MONITOR_72_MODE_RAINBOW;
|
|
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
SpectrumCycle.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
SpectrumCycle.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
SpectrumCycle.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
SpectrumCycle.brightness_min = 0;
|
|
SpectrumCycle.brightness_max = 100;
|
|
SpectrumCycle.brightness = 100;
|
|
SpectrumCycle.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(SpectrumCycle);
|
|
|
|
mode RainbowWave;
|
|
RainbowWave.name = "Rainbow Wave";
|
|
RainbowWave.value = MSI_MONITOR_72_MODE_RAINBOW_WAVE;
|
|
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
RainbowWave.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
RainbowWave.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
RainbowWave.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
RainbowWave.brightness_min = 0;
|
|
RainbowWave.brightness_max = 100;
|
|
RainbowWave.brightness = 100;
|
|
RainbowWave.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(RainbowWave);
|
|
|
|
mode Visor;
|
|
Visor.name = "Visor";
|
|
Visor.value = MSI_MONITOR_72_MODE_VISOR;
|
|
Visor.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Visor.colors_min = 1;
|
|
Visor.colors_max = 1;
|
|
Visor.colors.resize(1);
|
|
Visor.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
Visor.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
Visor.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
Visor.brightness_min = 0;
|
|
Visor.brightness_max = 100;
|
|
Visor.brightness = 100;
|
|
Visor.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Visor);
|
|
|
|
mode JRainbow;
|
|
JRainbow.name = "JRainbow";
|
|
JRainbow.value = MSI_MONITOR_72_MODE_JRAINBOW;
|
|
JRainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
JRainbow.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
JRainbow.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
JRainbow.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
JRainbow.brightness_min = 0;
|
|
JRainbow.brightness_max = 100;
|
|
JRainbow.brightness = 100;
|
|
JRainbow.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(JRainbow);
|
|
|
|
mode RainbowFlash;
|
|
RainbowFlash.name = "Rainbow Flashing";
|
|
RainbowFlash.value = MSI_MONITOR_72_MODE_RAINBOW_FLASH;
|
|
RainbowFlash.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
RainbowFlash.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
RainbowFlash.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
RainbowFlash.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
RainbowFlash.brightness_min = 0;
|
|
RainbowFlash.brightness_max = 100;
|
|
RainbowFlash.brightness = 100;
|
|
RainbowFlash.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(RainbowFlash);
|
|
|
|
mode RainbowDblFlash;
|
|
RainbowDblFlash.name = "Rainbow Double Flashing";
|
|
RainbowDblFlash.value = MSI_MONITOR_72_MODE_RAINBOW_DBLFLASH;
|
|
RainbowDblFlash.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
RainbowDblFlash.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
RainbowDblFlash.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
RainbowDblFlash.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
RainbowDblFlash.brightness_min = 0;
|
|
RainbowDblFlash.brightness_max = 100;
|
|
RainbowDblFlash.brightness = 100;
|
|
RainbowDblFlash.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(RainbowDblFlash);
|
|
|
|
mode RainbowLine;
|
|
RainbowLine.name = "Rainbow Line";
|
|
RainbowLine.value = MSI_MONITOR_72_MODE_RAINBOW_LINE;
|
|
RainbowLine.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
RainbowLine.speed_min = MSI_MONITOR_72_SPEED_LOW;
|
|
RainbowLine.speed_max = MSI_MONITOR_72_SPEED_HIGH;
|
|
RainbowLine.speed = MSI_MONITOR_72_SPEED_MEDIUM;
|
|
RainbowLine.brightness_min = 0;
|
|
RainbowLine.brightness_max = 100;
|
|
RainbowLine.brightness = 100;
|
|
RainbowLine.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(RainbowLine);
|
|
|
|
mode Off;
|
|
Off.name = "Off";
|
|
Off.value = MSI_MONITOR_72_MODE_OFF;
|
|
Off.flags = MODE_FLAG_MANUAL_SAVE;
|
|
Off.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(Off);
|
|
|
|
SetupZones();
|
|
}
|
|
|
|
RGBController_MSIMonitor72::~RGBController_MSIMonitor72()
|
|
{
|
|
Shutdown();
|
|
|
|
delete controller;
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::SetupZones()
|
|
{
|
|
zone new_zone;
|
|
|
|
new_zone.name = "Rear";
|
|
new_zone.type = ZONE_TYPE_LINEAR;
|
|
new_zone.leds_min = led_count;
|
|
new_zone.leds_max = led_count;
|
|
new_zone.leds_count = led_count;
|
|
|
|
zones.emplace_back(new_zone);
|
|
|
|
for(unsigned int led_idx = 0; led_idx < led_count; led_idx++)
|
|
{
|
|
led new_led;
|
|
new_led.name = "LED " + std::to_string(led_idx + 1);
|
|
leds.push_back(new_led);
|
|
}
|
|
|
|
SetupColors();
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::DeviceUpdateLEDs()
|
|
{
|
|
DeviceUpdateMode();
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::DeviceUpdateZoneLEDs(int /*zone*/)
|
|
{
|
|
DeviceUpdateLEDs();
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::DeviceUpdateSingleLED(int /*led*/)
|
|
{
|
|
DeviceUpdateLEDs();
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::ApplyMode(bool save)
|
|
{
|
|
const mode& active = modes[active_mode];
|
|
|
|
RGBColor color1 = 0;
|
|
RGBColor color2 = 0;
|
|
bool user_palette = false;
|
|
std::vector<RGBColor> led_colors;
|
|
|
|
if(active.color_mode == MODE_COLORS_PER_LED)
|
|
{
|
|
user_palette = true;
|
|
led_colors = colors;
|
|
|
|
if(led_colors.size() > 0)
|
|
{
|
|
color1 = led_colors[0];
|
|
}
|
|
}
|
|
else if(active.color_mode == MODE_COLORS_MODE_SPECIFIC)
|
|
{
|
|
user_palette = true;
|
|
|
|
if(active.colors.size() > 0)
|
|
{
|
|
color1 = active.colors[0];
|
|
|
|
if(active.colors.size() > 1)
|
|
{
|
|
color2 = active.colors[1];
|
|
}
|
|
}
|
|
|
|
led_colors.assign(led_count, color1);
|
|
}
|
|
|
|
/*-----------------------------------------------------*\
|
|
| RightToLeft layouts start at the right end, so mirror |
|
|
| the per LED order to keep OpenRGB LED 0 on the left. |
|
|
| Uniform colour modes are unaffected by the order. |
|
|
\*-----------------------------------------------------*/
|
|
if(reverse_order)
|
|
{
|
|
std::reverse(led_colors.begin(), led_colors.end());
|
|
}
|
|
|
|
controller->SetMode72((uint8_t)active.value, (uint8_t)active.speed, (uint8_t)active.brightness, color1, color2, user_palette, save, led_colors, dual_block);
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::DeviceUpdateMode()
|
|
{
|
|
/*-----------------------------------------------------*\
|
|
| Updates are volatile. Persisting to flash is the |
|
|
| Save To Device button (DeviceSaveMode), so live edits |
|
|
| do not burn flash write cycles. |
|
|
\*-----------------------------------------------------*/
|
|
ApplyMode(false);
|
|
}
|
|
|
|
void RGBController_MSIMonitor72::DeviceSaveMode()
|
|
{
|
|
ApplyMode(true);
|
|
}
|