Files
OpenRGB/Controllers/MSIVigorController/RGBController_MSIVigorGK30.cpp

202 lines
8.6 KiB
C++

/*-----------------------------------------*\
| RGBController_MSIVigorGK30.cpp |
| |
| Generic RGB Interface for OpenRGB |
| MSI Vigor GK30 USB Driver |
| |
| Guimard Morgan (morg) 6/01/2022 |
\*-----------------------------------------*/
#include "RGBController_MSIVigorGK30.h"
#include <thread>
#include <chrono>
/**------------------------------------------------------------------*\
@name MSI Vigor GK30
@category Keyboard
@type USB
@save :robot:
@direct :x:
@effects :white_check_mark:
@detectors DetectMSIVigorGK30Controllers
@comment This device does only support 7 different colors
\*-------------------------------------------------------------------*/
RGBController_MSIVigorGK30::RGBController_MSIVigorGK30(MSIVigorGK30Controller* controller_ptr)
{
controller = controller_ptr;
name = "MSI VigorGK30 USB Device";
vendor = "MSI";
type = DEVICE_TYPE_KEYBOARD;
description = name;
location = controller->GetDeviceLocation();
serial = controller->GetSerialString();
version = controller->GetFirmwareVersion();
mode Custom;
Custom.name = "Custom";
Custom.value = MSI_VIGOR_GK30_CUSTOM_MODE_VALUE;
Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
Custom.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Custom.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Custom.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Custom.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Custom);
mode Static;
Static.name = "Static";
Static.value = MSI_VIGOR_GK30_STATIC_MODE_VALUE;
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
Static.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Static.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Static.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static);
mode Off;
Off.name = "Off";
Off.value = MSI_VIGOR_GK30_OFF_MODE_VALUE;
Off.flags = MODE_FLAG_AUTOMATIC_SAVE;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = MSI_VIGOR_GK30_BREATHING_MODE_VALUE;
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE;
Breathing.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Breathing.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Breathing.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Breathing.speed = MSI_VIGOR_GK30_SPEED_MIN;
Breathing.speed_min = MSI_VIGOR_GK30_SPEED_MIN;
Breathing.speed_max = MSI_VIGOR_GK30_SPEED_MAX;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(1);
modes.push_back(Breathing);
mode Rainbow;
Rainbow.name = "Rainbow";
Rainbow.value = MSI_VIGOR_GK30_RAINBOW_MODE_VALUE;
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE | MODE_FLAG_HAS_DIRECTION_LR;
Rainbow.color_mode = MODE_COLORS_NONE;
Rainbow.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Rainbow.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Rainbow.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Rainbow.speed = MSI_VIGOR_GK30_SPEED_MIN;
Rainbow.speed_min = MSI_VIGOR_GK30_SPEED_MIN;
Rainbow.speed_max = MSI_VIGOR_GK30_SPEED_MAX;
Rainbow.direction = MODE_DIRECTION_LEFT;
modes.push_back(Rainbow);
mode Meteor;
Meteor.name = "Meteor";
Meteor.value = MSI_VIGOR_GK30_METEOR_MODE_VALUE;
Meteor.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE | MODE_FLAG_HAS_DIRECTION_LR;
Meteor.color_mode = MODE_COLORS_NONE;
Meteor.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Meteor.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Meteor.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Meteor.speed = MSI_VIGOR_GK30_SPEED_MIN;
Meteor.speed_min = MSI_VIGOR_GK30_SPEED_MIN;
Meteor.speed_max = MSI_VIGOR_GK30_SPEED_MAX;
Rainbow.direction = MODE_DIRECTION_LEFT;
modes.push_back(Meteor);
mode Ripple;
Ripple.name = "Ripple";
Ripple.value = MSI_VIGOR_GK30_RIPPLE_MODE_VALUE;
Ripple.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE;
Ripple.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Ripple.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Ripple.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Ripple.speed = MSI_VIGOR_GK30_SPEED_MIN;
Ripple.speed_min = MSI_VIGOR_GK30_SPEED_MIN;
Ripple.speed_max = MSI_VIGOR_GK30_SPEED_MAX;
Ripple.color_mode = MODE_COLORS_NONE;
modes.push_back(Ripple);
mode Dimming;
Dimming.name = "Dimming";
Dimming.value = MSI_VIGOR_GK30_DIMMING_MODE_VALUE;
Dimming.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE;
Dimming.brightness = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Dimming.brightness_min = MSI_VIGOR_GK30_BRIGHTNESS_MIN;
Dimming.brightness_max = MSI_VIGOR_GK30_BRIGHTNESS_MAX;
Dimming.speed = MSI_VIGOR_GK30_SPEED_MIN;
Dimming.speed_min = MSI_VIGOR_GK30_SPEED_MIN;
Dimming.speed_max = MSI_VIGOR_GK30_SPEED_MAX;
Dimming.color_mode = MODE_COLORS_MODE_SPECIFIC;
Dimming.colors.resize(1);
modes.push_back(Dimming);
SetupZones();
}
RGBController_MSIVigorGK30::~RGBController_MSIVigorGK30()
{
delete controller;
}
void RGBController_MSIVigorGK30::SetupZones()
{
zone new_zone;
new_zone.name = "Keyboard";
new_zone.type = ZONE_TYPE_LINEAR;
new_zone.leds_min = MSI_VIGOR_GK30_LEDS_COUNT;
new_zone.leds_max = MSI_VIGOR_GK30_LEDS_COUNT;
new_zone.leds_count = MSI_VIGOR_GK30_LEDS_COUNT;
new_zone.matrix_map = nullptr;
zones.emplace_back(new_zone);
leds.resize(new_zone.leds_count);
for(unsigned int i = 0; i < MSI_VIGOR_GK30_LEDS_COUNT; i++)
{
leds[i].name = "LED " + std::to_string(i);
}
SetupColors();
}
void RGBController_MSIVigorGK30::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_MSIVigorGK30::DeviceUpdateLEDs()
{
UpdateSingleLED(0);
}
void RGBController_MSIVigorGK30::UpdateZoneLEDs(int /*zone*/)
{
UpdateSingleLED(0);
}
void RGBController_MSIVigorGK30::UpdateSingleLED(int /*led*/)
{
const mode& active = modes[active_mode];
controller->SetMode(
active.color_mode == MODE_COLORS_MODE_SPECIFIC ? active.colors : colors,
active.brightness,
active.speed,
active.value,
active.flags,
active.color_mode,
active.direction
);
}
void RGBController_MSIVigorGK30::DeviceUpdateMode()
{
DeviceUpdateLEDs();
}