Publish LumaOps source
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUController.cpp |
|
||||
| |
|
||||
| Driver for MSI GPU |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "MSIGPUController.h"
|
||||
#include <cstring>
|
||||
|
||||
MSIGPUController::MSIGPUController(i2c_smbus_interface* bus, msi_gpu_dev_id dev, std::string dev_name)
|
||||
{
|
||||
this->bus = bus;
|
||||
this->dev = dev;
|
||||
this->name = dev_name;
|
||||
}
|
||||
|
||||
MSIGPUController::~MSIGPUController()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string MSIGPUController::GetDeviceLocation()
|
||||
{
|
||||
std::string return_string(bus->device_name);
|
||||
char addr[5];
|
||||
snprintf(addr, 5, "0x%02X", dev);
|
||||
return_string.append(", address ");
|
||||
return_string.append(addr);
|
||||
return("I2C: " + return_string);
|
||||
}
|
||||
|
||||
std::string MSIGPUController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
void MSIGPUController::SetRGB1(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_R1, red);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_G1, green);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_B1, blue);
|
||||
}
|
||||
|
||||
void MSIGPUController::SetRGB2(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_R2, red);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_G2, green);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_B2, blue);
|
||||
}
|
||||
|
||||
void MSIGPUController::SetRGB3(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_R3, red);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_G3, green);
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_B3, blue);
|
||||
}
|
||||
|
||||
void MSIGPUController::SetMode(unsigned char mode)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_MODE, mode);
|
||||
}
|
||||
|
||||
void MSIGPUController::Save()
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_REG_SAVE, 0x01);
|
||||
}
|
||||
|
||||
unsigned char MSIGPUController::MSIGPURegisterRead(unsigned char reg)
|
||||
{
|
||||
return(bus->i2c_smbus_read_byte_data(dev, reg));
|
||||
}
|
||||
|
||||
void MSIGPUController::MSIGPURegisterWrite(unsigned char reg, unsigned char val)
|
||||
{
|
||||
bus->i2c_smbus_write_byte_data(dev, reg, val);
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUController.h |
|
||||
| |
|
||||
| Driver for MSI GPU |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "i2c_smbus.h"
|
||||
|
||||
typedef unsigned char msi_gpu_dev_id;
|
||||
|
||||
#define MSI_GPU_SPEED_MIN 0
|
||||
#define MSI_GPU_SPEED_MID 1
|
||||
#define MSI_GPU_SPEED_MAX 2
|
||||
#define MSI_GPU_BRIGHTNESS_MIN 0
|
||||
#define MSI_GPU_BRIGHTNESS_MAX 5
|
||||
#define MSI_GPU_BRIGHTNESS_MULTI 20
|
||||
|
||||
enum
|
||||
{
|
||||
MSI_GPU_REG_BRIGHTNESS = 0x36, /* MSI GPU Brightness Register */
|
||||
MSI_GPU_REG_SPEED = 0x38, /* MSI GPU Speed Register */
|
||||
MSI_GPU_REG_UNKNOWN = 0x26, /* MSI GPU Unknown Register */
|
||||
MSI_GPU_REG_R1 = 0x30, /* MSI GPU R1 Register */
|
||||
MSI_GPU_REG_G1 = 0x31, /* MSI GPU G1 Register */
|
||||
MSI_GPU_REG_B1 = 0x32, /* MSI GPU B1 Register */
|
||||
MSI_GPU_REG_R2 = 0x27, /* MSI GPU R2 Register */
|
||||
MSI_GPU_REG_G2 = 0x28, /* MSI GPU G2 Register */
|
||||
MSI_GPU_REG_B2 = 0x29, /* MSI GPU B2 Register */
|
||||
MSI_GPU_REG_R3 = 0x2A, /* MSI GPU R3 Register */
|
||||
MSI_GPU_REG_G3 = 0x2B, /* MSI GPU G3 Register */
|
||||
MSI_GPU_REG_B3 = 0x2C, /* MSI GPU B3 Register */
|
||||
MSI_GPU_REG_MODE = 0x22, /* MSI GPU Mode Selection Register */
|
||||
MSI_GPU_REG_SAVE = 0x3F, /* MSI GPU Save Changes Register */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MSI_GPU_MODE_OFF = 0x01, /* OFF mode */
|
||||
MSI_GPU_MODE_RAINBOW = 0x08, /* Rainbow effect mode */
|
||||
MSI_GPU_MODE_STATIC = 0x13, /* Static color mode */
|
||||
MSI_GPU_MODE_RAINDROP = 0x1A, /* Raindrop effect mode */
|
||||
MSI_GPU_MODE_MAGIC = 0x07, /* Magic effect mode */
|
||||
MSI_GPU_MODE_PATROLLING = 0x05, /* Patrolling effect mode */
|
||||
MSI_GPU_MODE_STREAMING = 0x06, /* Streaming effect mode */
|
||||
MSI_GPU_MODE_LIGHTNING = 0x15, /* Lightning effect mode */
|
||||
MSI_GPU_MODE_WAVE = 0x1F, /* Wave effect mode */
|
||||
MSI_GPU_MODE_METEOR = 0x16, /* Meteor effect mode */
|
||||
MSI_GPU_MODE_STACK = 0x0D, /* Stack effect mode */
|
||||
MSI_GPU_MODE_RHYTHM = 0x0B, /* Rhythm effect mode */
|
||||
MSI_GPU_MODE_FLOWING = 0x09, /* Flowing effect mode */
|
||||
MSI_GPU_MODE_WHIRLING = 0x0F, /* Whirling effect mode */
|
||||
MSI_GPU_MODE_TWISTING = 0x11, /* Twisting effect mode */
|
||||
MSI_GPU_MODE_LAMINATING = 0x1D, /* Laminating effect mode */
|
||||
MSI_GPU_MODE_FADEIN = 0x14, /* Fadein effect mode */
|
||||
MSI_GPU_MODE_BREATHING = 0x04, /* Breathing effect mode */
|
||||
MSI_GPU_MODE_FLASHING = 0x02, /* Flashing effect mode */
|
||||
MSI_GPU_MODE_DOUBLEFLASHING = 0x03, /* Doubleflashing effect mode */
|
||||
};
|
||||
|
||||
class MSIGPUController
|
||||
{
|
||||
public:
|
||||
MSIGPUController(i2c_smbus_interface* bus, msi_gpu_dev_id dev, std::string dev_name);
|
||||
~MSIGPUController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
|
||||
void SetRGB1(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetRGB2(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetRGB3(unsigned char red, unsigned char green, unsigned char blue);
|
||||
|
||||
void SetMode(unsigned char mode);
|
||||
void Save();
|
||||
|
||||
unsigned char MSIGPURegisterRead(unsigned char reg);
|
||||
void MSIGPURegisterWrite(unsigned char reg, unsigned char val);
|
||||
|
||||
private:
|
||||
i2c_smbus_interface * bus;
|
||||
msi_gpu_dev_id dev;
|
||||
std::string name;
|
||||
};
|
||||
@@ -0,0 +1,133 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for MSI GPU |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "MSIGPUController.h"
|
||||
#include "RGBController_MSIGPU.h"
|
||||
#include "i2c_amd_gpu.h"
|
||||
#include "i2c_smbus.h"
|
||||
#include "pci_ids.h"
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
* DetectMSIGPUControllers *
|
||||
* *
|
||||
* Detect MSI GPU controllers on the enumerated I2C busses. *
|
||||
* *
|
||||
\******************************************************************************************/
|
||||
|
||||
void DetectMSIGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name)
|
||||
{
|
||||
if(bus->pci_vendor == NVIDIA_VEN && bus->port_id != 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MSIGPUController* controller = new MSIGPUController(bus, i2c_addr, name);
|
||||
RGBController_MSIGPU* rgb_controller = new RGBController_MSIGPU(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
|
||||
} /* DetectMSIGPUControllers() */
|
||||
|
||||
/*-----------------------------------------*\
|
||||
| Nvidia GPUs |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1070 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, MSI_SUB_VEN, MSI_GTX1070_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660_DEV, MSI_SUB_VEN, MSI_GTX1660_GAMING_X_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 Ti Gaming", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660TI_DEV, MSI_SUB_VEN, MSI_GTX1660TI_GAMING_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 Ti Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660TI_DEV, MSI_SUB_VEN, MSI_GTX1660TI_GAMING_X_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 SUPER Gaming", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, MSI_SUB_VEN, MSI_GTX1660S_GAMING_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 SUPER Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660S_DEV, MSI_SUB_VEN, MSI_GTX1660S_GAMING_X_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2060 Gaming Z", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU104_DEV, MSI_SUB_VEN, MSI_RTX2060_GAMING_Z_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2060 Gaming Z", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, MSI_SUB_VEN, MSI_RTX2060_GAMING_Z_6G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2060 Gaming Z", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU106_DEV, MSI_SUB_VEN, MSI_RTX2060_GAMING_Z_6G_SUB_DEV_2, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2060 SUPER Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, MSI_SUB_VEN, MSI_RTX2060S_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2060 SUPER ARMOR OC", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, MSI_SUB_VEN, MSI_RTX2060S_ARMOR_OC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 Gaming Z", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, MSI_SUB_VEN, MSI_RTX2070_GAMING_Z_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 Gaming", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_DEV, MSI_SUB_VEN, MSI_RTX2070_GAMING_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 ARMOR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_DEV, MSI_SUB_VEN, MSI_RTX2070_ARMOR_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 ARMOR OC", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, MSI_SUB_VEN, MSI_RTX2070_ARMOR_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER ARMOR OC", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_ARMOR_OC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER Gaming", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_GAMING_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER Gaming Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2070 SUPER Gaming Z Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, MSI_SUB_VEN, MSI_RTX2070S_GAMING_Z_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Gaming Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_DEV, MSI_SUB_VEN, MSI_RTX2080_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, MSI_SUB_VEN, MSI_RTX2080_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, MSI_SUB_VEN, MSI_RTX2080_GAMING_X_TRIO_SUB_DEV_2, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Sea Hawk EK X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, MSI_SUB_VEN, MSI_RTX2080_SEA_HAWK_EK_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Duke OC", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, MSI_SUB_VEN, MSI_RTX2080_DUKE_OC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 SUPER Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, MSI_SUB_VEN, MSI_RTX2080S_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, MSI_SUB_VEN, MSI_RTX2080TI_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Ti Gaming Z Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, MSI_SUB_VEN, MSI_RTX2080TI_GAMING_Z_TRIO_SUB_DEV, 0X68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, MSI_SUB_VEN, MSI_RTX2080TI_11G_GAMING_X_TRIO_SUB_DEV,0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 2080 Ti Sea Hawk EK X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, MSI_SUB_VEN, MSI_RTX2080TI_SEA_HAWK_EK_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3050 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3050_DEV, MSI_SUB_VEN, MSI_RTX3060_GAMING_X_8G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_DEV, MSI_SUB_VEN, MSI_RTX3060_GAMING_X_12G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming X LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, MSI_SUB_VEN, MSI_RTX3060_GAMING_X_12G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming X (GA104)", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_GA104_DEV, MSI_SUB_VEN, MSI_RTX3060_GAMING_X_12G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming X Trio LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Gaming Z Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_GA104_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_DEV, MSI_SUB_VEN, MSI_RTX3060TI_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti Gaming X LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, MSI_SUB_VEN, MSI_RTX3060TI_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti Gaming X Trio LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti SUPER 3X OC", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_GDDR6X_DEV,MSI_SUB_VEN, MSI_RTX3060TI_SUPER_3X_OC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3060 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_GDDR6X_DEV,MSI_SUB_VEN, MSI_RTX3060TI_GAMING_X_TRIO_8G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Gaming Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, MSI_SUB_VEN, MSI_RTX3070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Suprim", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, MSI_SUB_VEN, MSI_RTX3070_SUPRIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Suprim LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_SUPRIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_DEV, MSI_SUB_VEN, MSI_RTX3070_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Suprim X LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Suprim X GODZILLA LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, MSI_SUB_VEN, MSI_RTX3070_SUPRIM_X_GODZILLA_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, MSI_SUB_VEN, MSI_RTX3070TI_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3070 Ti Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3070TI_DEV, MSI_SUB_VEN, MSI_RTX3070TI_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Gaming Z Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_DEV, MSI_SUB_VEN, MSI_RTX3080_GAMING_Z_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Gaming Z Trio LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, MSI_SUB_VEN, MSI_RTX3080_GAMING_Z_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_DEV, MSI_SUB_VEN, MSI_RTX3080_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_DEV, MSI_SUB_VEN, MSI_RTX3080_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Suprim X LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_LHR_DEV, MSI_SUB_VEN, MSI_RTX3080_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 12GB Suprim X LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_12G_LHR_DEV, MSI_SUB_VEN, MSI_RTX3080_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 12GB Gaming Z Trio LHR", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080_12G_LHR_DEV, MSI_SUB_VEN, MSI_RTX3080_12G_GAMING_Z_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080TI_DEV, MSI_SUB_VEN, MSI_RTX3080TI_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3080 Ti Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3080TI_DEV, MSI_SUB_VEN, MSI_RTX3080TI_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090_DEV, MSI_SUB_VEN, MSI_RTX3090_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Suprim", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090_DEV, MSI_SUB_VEN, MSI_RTX3090_SUPRIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090_DEV, MSI_SUB_VEN, MSI_RTX3090_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Ti Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090TI_DEV, MSI_SUB_VEN, MSI_RTX3090TI_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090TI_DEV, MSI_SUB_VEN, MSI_RTX3090TI_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
|
||||
/*-----------------------------------------*\
|
||||
| AMD GPUs |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 5600 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, MSI_SUB_VEN, MSI_RX5600XT_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6600 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV, MSI_SUB_VEN, MSI_RX6600XT_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6650 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV1, MSI_SUB_VEN, MSI_RX6650XT_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6700 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI22_DEV, MSI_SUB_VEN, MSI_RX6700XT_GAMING_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6750 XT Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI22_DEV, MSI_SUB_VEN, MSI_RX6750XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6800 Gaming Z Trio v1", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6800_GAMING_Z_TRIO_V1_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6800 Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6800_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6800 XT Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6800XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6800 XT Gaming Z Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6800XT_GAMING_Z_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6900 XT Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6900XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6900 XT Gaming Z Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV2, MSI_SUB_VEN, MSI_RX6950XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6950 XT Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV1, MSI_SUB_VEN, MSI_RX6950XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6950 XT Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI21_DEV3, MSI_SUB_VEN, MSI_RX6950XT_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 7900 XTX Gaming X Trio", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI31_DEV, MSI_SUB_VEN, MSI_RX7900XTX_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 7900 XT Gaming Trio Classic", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI31_DEV, MSI_SUB_VEN, MSI_RX7900XT_GAMING_TRIO_CLASSIC_SUB_DEV,0x68);
|
||||
@@ -0,0 +1,444 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_MSIGPU.cpp |
|
||||
| |
|
||||
| RGBController for MSI GPU |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <array>
|
||||
#include "RGBController_MSIGPU.h"
|
||||
|
||||
static const std::array<unsigned char, 3> speed_values = { 0x04, 0x02, 0x01 };
|
||||
|
||||
int RGBController_MSIGPU::GetDeviceMode()
|
||||
{
|
||||
unsigned char dev_mode = controller->MSIGPURegisterRead(MSI_GPU_REG_MODE);
|
||||
|
||||
for(std::size_t mode = 0; mode < modes.size(); mode++)
|
||||
{
|
||||
if(modes[mode].value == dev_mode)
|
||||
{
|
||||
active_mode = (int)mode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(active_mode);
|
||||
}
|
||||
|
||||
int RGBController_MSIGPU::GetModeSpeed()
|
||||
{
|
||||
unsigned char mode_speed = controller->MSIGPURegisterRead(MSI_GPU_REG_SPEED);
|
||||
|
||||
for(std::size_t speed = 0; speed < speed_values.size(); speed++)
|
||||
{
|
||||
if(speed_values[speed] == mode_speed)
|
||||
{
|
||||
return((int)speed);
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name MSI GPU
|
||||
@category GPU
|
||||
@type I2C
|
||||
@save :white_check_mark:
|
||||
@direct :white_check_mark:
|
||||
@effects :white_check_mark:
|
||||
@detectors DetectMSIGPUControllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_MSIGPU::RGBController_MSIGPU(MSIGPUController * controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "MSI";
|
||||
type = DEVICE_TYPE_GPU;
|
||||
description = name;
|
||||
location = controller->GetDeviceLocation();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = MSI_GPU_MODE_STATIC;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
Direct.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Direct.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Direct.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
modes.push_back(Direct);
|
||||
|
||||
mode Rainbow;
|
||||
Rainbow.name = "Rainbow";
|
||||
Rainbow.value = MSI_GPU_MODE_RAINBOW;
|
||||
Rainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Rainbow.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Rainbow.speed = MSI_GPU_SPEED_MID;
|
||||
Rainbow.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Rainbow.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Rainbow.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Rainbow.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Rainbow.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Rainbow);
|
||||
|
||||
mode Raindrop;
|
||||
Raindrop.name = "Raindrop";
|
||||
Raindrop.value = MSI_GPU_MODE_RAINDROP;
|
||||
Raindrop.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Raindrop.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Raindrop.speed = MSI_GPU_SPEED_MID;
|
||||
Raindrop.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Raindrop.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Raindrop.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Raindrop.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Raindrop.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Raindrop);
|
||||
|
||||
mode Magic;
|
||||
Magic.name = "Magic";
|
||||
Magic.value = MSI_GPU_MODE_MAGIC;
|
||||
Magic.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Magic.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Magic.speed = MSI_GPU_SPEED_MID;
|
||||
Magic.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Magic.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Magic.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Magic.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Magic.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Magic);
|
||||
|
||||
mode Patrolling;
|
||||
Patrolling.name = "Patrolling";
|
||||
Patrolling.value = MSI_GPU_MODE_PATROLLING;
|
||||
Patrolling.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Patrolling.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Patrolling.speed = MSI_GPU_SPEED_MID;
|
||||
Patrolling.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Patrolling.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Patrolling.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Patrolling.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Patrolling.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Patrolling);
|
||||
|
||||
mode Streaming;
|
||||
Streaming.name = "Streaming";
|
||||
Streaming.value = MSI_GPU_MODE_STREAMING;
|
||||
Streaming.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Streaming.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Streaming.speed = MSI_GPU_SPEED_MID;
|
||||
Streaming.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Streaming.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Streaming.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Streaming.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Streaming.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Streaming);
|
||||
|
||||
mode Lightning;
|
||||
Lightning.name = "Lightning";
|
||||
Lightning.value = MSI_GPU_MODE_LIGHTNING;
|
||||
Lightning.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Lightning.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Lightning.speed = MSI_GPU_SPEED_MID;
|
||||
Lightning.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Lightning.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Lightning.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Lightning.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Lightning.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Lightning);
|
||||
|
||||
mode Wave;
|
||||
Wave.name = "Wave";
|
||||
Wave.value = MSI_GPU_MODE_WAVE;
|
||||
Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Wave.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Wave.speed = MSI_GPU_SPEED_MID;
|
||||
Wave.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Wave.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Wave.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Wave.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Wave.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Wave);
|
||||
|
||||
mode Meteor;
|
||||
Meteor.name = "Meteor";
|
||||
Meteor.value = MSI_GPU_MODE_METEOR;
|
||||
Meteor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Meteor.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Meteor.speed = MSI_GPU_SPEED_MID;
|
||||
Meteor.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Meteor.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Meteor.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Meteor.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Meteor.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Meteor);
|
||||
|
||||
mode Stack;
|
||||
Stack.name = "Stack";
|
||||
Stack.value = MSI_GPU_MODE_STACK;
|
||||
Stack.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Stack.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Stack.speed = MSI_GPU_SPEED_MID;
|
||||
Stack.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Stack.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Stack.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Stack.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Stack.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Stack);
|
||||
|
||||
mode Rhythm;
|
||||
Rhythm.name = "Rhythm";
|
||||
Rhythm.value = MSI_GPU_MODE_RHYTHM;
|
||||
Rhythm.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Rhythm.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Rhythm.speed = MSI_GPU_SPEED_MID;
|
||||
Rhythm.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Rhythm.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Rhythm.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Rhythm.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Rhythm.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Rhythm);
|
||||
|
||||
mode Flowing;
|
||||
Flowing.name = "Flowing";
|
||||
Flowing.value = MSI_GPU_MODE_FLOWING;
|
||||
Flowing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Flowing.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Flowing.speed = MSI_GPU_SPEED_MID;
|
||||
Flowing.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Flowing.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Flowing.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Flowing.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Flowing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Flowing);
|
||||
|
||||
mode Whirling;
|
||||
Whirling.name = "Whirling";
|
||||
Whirling.value = MSI_GPU_MODE_WHIRLING;
|
||||
Whirling.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Whirling.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Whirling.speed = MSI_GPU_SPEED_MID;
|
||||
Whirling.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Whirling.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Whirling.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Whirling.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Whirling.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Whirling);
|
||||
|
||||
mode Twisting;
|
||||
Twisting.name = "Twisting";
|
||||
Twisting.value = MSI_GPU_MODE_TWISTING;
|
||||
Twisting.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Twisting.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Twisting.speed = MSI_GPU_SPEED_MID;
|
||||
Twisting.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Twisting.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Twisting.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Twisting.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Twisting.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Twisting);
|
||||
|
||||
mode Laminating;
|
||||
Laminating.name = "Laminating";
|
||||
Laminating.value = MSI_GPU_MODE_LAMINATING;
|
||||
Laminating.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Laminating.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Laminating.speed = MSI_GPU_SPEED_MID;
|
||||
Laminating.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Laminating.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Laminating.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Laminating.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Laminating.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Laminating);
|
||||
|
||||
mode Fadein;
|
||||
Fadein.name = "Fadein";
|
||||
Fadein.value = MSI_GPU_MODE_FADEIN;
|
||||
Fadein.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Fadein.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Fadein.speed = MSI_GPU_SPEED_MID;
|
||||
Fadein.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Fadein.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Fadein.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Fadein.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Fadein.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Fadein);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = MSI_GPU_MODE_BREATHING;
|
||||
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Breathing.speed_min = MSI_GPU_SPEED_MIN;
|
||||
Breathing.speed = MSI_GPU_SPEED_MID;
|
||||
Breathing.speed_max = MSI_GPU_SPEED_MAX;
|
||||
Breathing.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
Breathing.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Breathing.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
Breathing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Breathing);
|
||||
|
||||
mode flashing;
|
||||
flashing.name = "Flashing";
|
||||
flashing.value = MSI_GPU_MODE_FLASHING;
|
||||
flashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
flashing.speed_min = MSI_GPU_SPEED_MIN;
|
||||
flashing.speed = MSI_GPU_SPEED_MID;
|
||||
flashing.speed_max = MSI_GPU_SPEED_MAX;
|
||||
flashing.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
flashing.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
flashing.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
flashing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(flashing);
|
||||
|
||||
mode doubleflashing;
|
||||
doubleflashing.name = "Doubleflashing";
|
||||
doubleflashing.value = MSI_GPU_MODE_DOUBLEFLASHING;
|
||||
doubleflashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
doubleflashing.speed_min = 0;
|
||||
doubleflashing.speed = 0;
|
||||
doubleflashing.speed_max = 2;
|
||||
doubleflashing.brightness_min = MSI_GPU_BRIGHTNESS_MIN;
|
||||
doubleflashing.brightness = MSI_GPU_BRIGHTNESS_MAX;
|
||||
doubleflashing.brightness_max = MSI_GPU_BRIGHTNESS_MAX;
|
||||
doubleflashing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(doubleflashing);
|
||||
|
||||
mode Off;
|
||||
Off.name = "Off";
|
||||
Off.value = MSI_GPU_MODE_OFF;
|
||||
Off.flags = MODE_FLAG_MANUAL_SAVE;
|
||||
Off.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Off);
|
||||
|
||||
SetupZones();
|
||||
|
||||
active_mode = GetDeviceMode();
|
||||
modes[active_mode].speed = GetModeSpeed();
|
||||
modes[active_mode].brightness = controller->MSIGPURegisterRead(MSI_GPU_REG_BRIGHTNESS) / MSI_GPU_BRIGHTNESS_MULTI;
|
||||
}
|
||||
|
||||
RGBController_MSIGPU::~RGBController_MSIGPU()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::SetupZones()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up zone |
|
||||
\*---------------------------------------------------------*/
|
||||
zone msi_gpu_zone;
|
||||
msi_gpu_zone.name = "GPU";
|
||||
msi_gpu_zone.type = ZONE_TYPE_SINGLE;
|
||||
msi_gpu_zone.leds_min = 1;
|
||||
msi_gpu_zone.leds_max = 1;
|
||||
msi_gpu_zone.leds_count = 3;
|
||||
msi_gpu_zone.matrix_map = NULL;
|
||||
zones.push_back(msi_gpu_zone);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up LED |
|
||||
\*---------------------------------------------------------*/
|
||||
led led1;
|
||||
led1.name = "Color 1";
|
||||
leds.push_back(led1);
|
||||
led led2;
|
||||
led2.name = "Color 2";
|
||||
leds.push_back(led2);
|
||||
led led3;
|
||||
led3.name = "Color 3";
|
||||
leds.push_back(led3);
|
||||
|
||||
SetupColors();
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Initialize color |
|
||||
\*---------------------------------------------------------*/
|
||||
unsigned char r1 = controller->MSIGPURegisterRead(MSI_GPU_REG_R1);
|
||||
unsigned char g1 = controller->MSIGPURegisterRead(MSI_GPU_REG_G1);
|
||||
unsigned char b1 = controller->MSIGPURegisterRead(MSI_GPU_REG_B1);
|
||||
unsigned char r2 = controller->MSIGPURegisterRead(MSI_GPU_REG_R2);
|
||||
unsigned char g2 = controller->MSIGPURegisterRead(MSI_GPU_REG_G2);
|
||||
unsigned char b2 = controller->MSIGPURegisterRead(MSI_GPU_REG_B2);
|
||||
unsigned char r3 = controller->MSIGPURegisterRead(MSI_GPU_REG_R3);
|
||||
unsigned char g3 = controller->MSIGPURegisterRead(MSI_GPU_REG_G3);
|
||||
unsigned char b3 = controller->MSIGPURegisterRead(MSI_GPU_REG_B3);
|
||||
|
||||
colors[0] = ToRGBColor(r1, g1, b1);
|
||||
colors[1] = ToRGBColor(r2, g2, b2);
|
||||
colors[2] = ToRGBColor(r3, g3, b3);
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
bool RGBController_MSIGPU::TimeToSend()
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Rate limit is 1000(ms) / wait_time in Frames Per Sec |
|
||||
\*-----------------------------------------------------*/
|
||||
const uint8_t wait_time = 33;
|
||||
return (std::chrono::steady_clock::now() - last_commit_time) > std::chrono::milliseconds(wait_time);
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::DeviceUpdateLEDs()
|
||||
{
|
||||
if(TimeToSend())
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_REG_UNKNOWN, 0x00);
|
||||
|
||||
if(modes[active_mode].value == MSI_GPU_MODE_FADEIN)
|
||||
{
|
||||
controller->SetRGB2(RGBGetRValue(colors[1]), RGBGetGValue(colors[1]), RGBGetBValue(colors[1]));
|
||||
controller->SetRGB3(RGBGetRValue(colors[2]), RGBGetGValue(colors[2]), RGBGetBValue(colors[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
controller->SetRGB1(RGBGetRValue(colors[0]), RGBGetGValue(colors[0]), RGBGetBValue(colors[0]));
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Update last commit time |
|
||||
\*-----------------------------------------------------*/
|
||||
last_commit_time = std::chrono::steady_clock::now();
|
||||
}
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::UpdateSingleLED(int /*led*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::DeviceUpdateMode()
|
||||
{
|
||||
if(modes[active_mode].flags & MODE_FLAG_HAS_BRIGHTNESS)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_REG_BRIGHTNESS, modes[active_mode].brightness * MSI_GPU_BRIGHTNESS_MULTI);
|
||||
|
||||
if(modes[active_mode].flags & MODE_FLAG_HAS_SPEED)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_REG_SPEED, speed_values[modes[active_mode].speed]);
|
||||
}
|
||||
|
||||
controller->SetMode(modes[active_mode].value);
|
||||
}
|
||||
}
|
||||
|
||||
void RGBController_MSIGPU::DeviceSaveMode()
|
||||
{
|
||||
controller->Save();
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_MSIGPU.h |
|
||||
| |
|
||||
| RGBController for MSI GPU |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "MSIGPUController.h"
|
||||
|
||||
class RGBController_MSIGPU : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_MSIGPU(MSIGPUController* controller_ptr);
|
||||
~RGBController_MSIGPU();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
void DeviceSaveMode();
|
||||
|
||||
private:
|
||||
MSIGPUController* controller;
|
||||
std::chrono::time_point<std::chrono::steady_clock> last_commit_time;
|
||||
|
||||
bool TimeToSend();
|
||||
int GetDeviceMode();
|
||||
int GetModeSpeed();
|
||||
};
|
||||
@@ -0,0 +1,104 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUv2Controller.cpp |
|
||||
| |
|
||||
| Driver for MSI V2 GPU (ITE9) |
|
||||
| |
|
||||
| Wojciech Lazarski 03 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <cstring>
|
||||
#include <chrono>
|
||||
#include "MSIGPUv2Controller.h"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
MSIGPUv2Controller::MSIGPUv2Controller(i2c_smbus_interface* bus, msi_gpu_dev_id dev, std::string dev_name)
|
||||
{
|
||||
this->bus = bus;
|
||||
this->dev = dev;
|
||||
this->name = dev_name;
|
||||
}
|
||||
|
||||
MSIGPUv2Controller::~MSIGPUv2Controller()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string MSIGPUv2Controller::GetDeviceLocation()
|
||||
{
|
||||
std::string return_string(bus->device_name);
|
||||
char addr[5];
|
||||
snprintf(addr, 5, "0x%02X", dev);
|
||||
return_string.append(", address ");
|
||||
return_string.append(addr);
|
||||
return("I2C: " + return_string);
|
||||
}
|
||||
|
||||
std::string MSIGPUv2Controller::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::SetRGB1(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_V2_REG_R1, red);
|
||||
MSIGPURegisterWrite(MSI_GPU_V2_REG_G1, green);
|
||||
MSIGPURegisterWrite(MSI_GPU_V2_REG_B1, blue);
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::SetRGB1V2(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
unsigned char buffer[3];
|
||||
buffer[2]=red;
|
||||
buffer[1]=green;
|
||||
buffer[0]=blue;
|
||||
MSIGPUBlockWrite(MSI_GPU_V2_REG_COLOR_BLOCK1_BASE, &buffer[0], sizeof(buffer));
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::SetRGB2V2(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
unsigned char buffer[3];
|
||||
buffer[2]=red;
|
||||
buffer[1]=green;
|
||||
buffer[0]=blue;
|
||||
MSIGPUBlockWrite(MSI_GPU_V2_REG_COLOR_BLOCK2_BASE, &buffer[0], sizeof(buffer));
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::SetRGB3V2(unsigned char red, unsigned char green, unsigned char blue)
|
||||
{
|
||||
unsigned char buffer[3];
|
||||
buffer[2]=red;
|
||||
buffer[1]=green;
|
||||
buffer[0]=blue;
|
||||
MSIGPUBlockWrite(MSI_GPU_V2_REG_COLOR_BLOCK3_BASE, &buffer[0], sizeof(buffer));
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::SetMode(unsigned char mode)
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, mode);
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::Save()
|
||||
{
|
||||
MSIGPURegisterWrite(MSI_GPU_V2_REG_SAVE, 0x00);
|
||||
}
|
||||
|
||||
unsigned char MSIGPUv2Controller::MSIGPURegisterRead(unsigned char reg)
|
||||
{
|
||||
return bus->i2c_smbus_read_byte_data(dev, reg);
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::MSIGPURegisterWrite(unsigned char reg, unsigned char val)
|
||||
{
|
||||
bus->i2c_smbus_write_byte_data(dev, reg, val);
|
||||
std::this_thread::sleep_for(20ms);
|
||||
}
|
||||
|
||||
void MSIGPUv2Controller::MSIGPUBlockWrite(unsigned char reg, unsigned char *val, unsigned char len)
|
||||
{
|
||||
bus->i2c_smbus_interface::i2c_smbus_write_i2c_block_data(dev, reg, len, val);
|
||||
std::this_thread::sleep_for(20ms);
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUv2Controller.h |
|
||||
| |
|
||||
| Driver for MSI V2 GPU (ITE9) |
|
||||
| |
|
||||
| Wojciech Lazarski 03 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "i2c_smbus.h"
|
||||
|
||||
typedef unsigned char msi_gpu_dev_id;
|
||||
|
||||
#define MSI_GPU_V2_SPEED_MIN 0
|
||||
#define MSI_GPU_V2_SPEED_MID 1
|
||||
#define MSI_GPU_V2_SPEED_MAX 2
|
||||
#define MSI_GPU_V2_BRIGHTNESS_MIN 1
|
||||
#define MSI_GPU_V2_BRIGHTNESS_MAX 5
|
||||
#define MSI_GPU_V2_BRIGHTNESS_MULTI 20
|
||||
|
||||
enum
|
||||
{
|
||||
MSI_GPU_V2_REG_BRIGHTNESS = 0x36, /* MSI GPU Brightness Register */
|
||||
MSI_GPU_V2_REG_SPEED = 0x38, /* MSI GPU Speed Register */
|
||||
MSI_GPU_V2_REG_UNKNOWN = 0x2E, /* MSI GPU Unknown Register */
|
||||
MSI_GPU_V2_REG_R1 = 0x30, /* MSI GPU R1 Register */
|
||||
MSI_GPU_V2_REG_G1 = 0x31, /* MSI GPU G1 Register */
|
||||
MSI_GPU_V2_REG_B1 = 0x32, /* MSI GPU B1 Register */
|
||||
MSI_GPU_V2_REG_COLOR_BLOCK1_BASE = 0x27, /* MSI GPU 1 Color block register */
|
||||
MSI_GPU_V2_REG_COLOR_BLOCK2_BASE = 0x28, /* MSI GPU 2 Color block register */
|
||||
MSI_GPU_V2_REG_COLOR_BLOCK3_BASE = 0x29, /* MSI GPU 3 Color block register */
|
||||
MSI_GPU_V2_REG_MODE = 0x22, /* MSI GPU Mode Selection Register */
|
||||
MSI_GPU_V2_REG_SAVE = 0x3F, /* MSI GPU Commit Changes Register */
|
||||
MSI_GPU_V2_REG_CONTROL = 0x46, /* MSI GPU Direction Register */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MSI_GPU_V2_CONTROL_DIRECTION_RIGHT = 0x00, /* Right direction light effects */
|
||||
MSI_GPU_V2_CONTROL_DIRECTION_LEFT = 0x02, /* Left direction light effects */
|
||||
MSI_GPU_V2_CONTROL_NON_RGBMODE = 0x01, /* Non RGB Mode - programming colors */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MSI_GPU_V2_MODE_IDLE = 0x1C, /* Idle mode for programing ? */
|
||||
MSI_GPU_V2_MODE_OFF = 0x01, /* OFF mode */
|
||||
MSI_GPU_V2_MODE_RAINBOW = 0x08, /* Rainbow effect mode */
|
||||
MSI_GPU_V2_MODE_STATIC = 0x13, /* Static color mode */
|
||||
MSI_GPU_V2_MODE_RAINDROP = 0x1A, /* Raindrop effect mode */
|
||||
MSI_GPU_V2_MODE_MAGIC = 0x07, /* Magic effect mode */
|
||||
MSI_GPU_V2_MODE_PATROLLING = 0x05, /* Patrolling effect mode */
|
||||
MSI_GPU_V2_MODE_STREAMING = 0x06, /* Streaming effect mode */
|
||||
MSI_GPU_V2_MODE_LIGHTNING = 0x15, /* Lightning effect mode */
|
||||
MSI_GPU_V2_MODE_WAVE = 0x1F, /* Wave effect mode */
|
||||
MSI_GPU_V2_MODE_METEOR = 0x16, /* Meteor effect mode */
|
||||
MSI_GPU_V2_MODE_STACK = 0x0D, /* Stack effect mode */
|
||||
MSI_GPU_V2_MODE_RHYTHM = 0x0C, /* Rhythm effect mode */
|
||||
MSI_GPU_V2_MODE_FLOWING = 0x09, /* Flowing effect mode */
|
||||
MSI_GPU_V2_MODE_FLOWING2 = 0x0A, /* Flowing effect mode V2 */
|
||||
MSI_GPU_V2_MODE_WHIRLING = 0x0F, /* Whirling effect mode */
|
||||
MSI_GPU_V2_MODE_TWISTING = 0x11, /* Twisting effect mode */
|
||||
MSI_GPU_V2_MODE_LAMINATING = 0x1D, /* Laminating effect mode */
|
||||
MSI_GPU_V2_MODE_FADEIN = 0x14, /* Fadein effect mode */
|
||||
MSI_GPU_V2_MODE_BREATHING = 0x04, /* Breathing effect mode */
|
||||
MSI_GPU_V2_MODE_FLASHING = 0x02, /* Flashing effect mode */
|
||||
MSI_GPU_V2_MODE_DOUBLEFLASHING = 0x03, /* Doubleflashing effect mode */
|
||||
};
|
||||
|
||||
class MSIGPUv2Controller
|
||||
{
|
||||
public:
|
||||
MSIGPUv2Controller(i2c_smbus_interface* bus, msi_gpu_dev_id dev, std::string dev_name);
|
||||
~MSIGPUv2Controller();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
|
||||
void SetRGB1(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetRGB1V2(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetRGB2V2(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetRGB3V2(unsigned char red, unsigned char green, unsigned char blue);
|
||||
|
||||
void SetMode(unsigned char mode);
|
||||
void Save();
|
||||
|
||||
unsigned char MSIGPURegisterRead(unsigned char reg);
|
||||
void MSIGPURegisterWrite(unsigned char reg, unsigned char val);
|
||||
void MSIGPUBlockWrite(unsigned char reg,unsigned char *val, unsigned char len);
|
||||
|
||||
private:
|
||||
i2c_smbus_interface * bus;
|
||||
msi_gpu_dev_id dev;
|
||||
std::string name;
|
||||
};
|
||||
@@ -0,0 +1,81 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| MSIGPUv2ControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for MSI V2 GPU (ITE9) |
|
||||
| |
|
||||
| Wojciech Lazarski 03 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "LogManager.h"
|
||||
#include "i2c_smbus.h"
|
||||
#include "RGBController_MSIGPUv2.h"
|
||||
#include "MSIGPUv2Controller.h"
|
||||
|
||||
/*-----------------------------------------------------------------------------------------*\
|
||||
| |
|
||||
| DetectMSI GPU V2 Controllers |
|
||||
| |
|
||||
| Detect MSI GPU v2 controllers on the enumerated I2C busses. |
|
||||
| |
|
||||
\*-----------------------------------------------------------------------------------------*/
|
||||
|
||||
void DetectMSIGPUv2Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name)
|
||||
{
|
||||
if(bus->pci_vendor == NVIDIA_VEN && bus->port_id != 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int msi_gpu_id = bus->pci_subsystem_device | bus->pci_device << 16;
|
||||
MSIGPUv2Controller* controller = new MSIGPUv2Controller(bus, i2c_addr, name);
|
||||
RGBController_MSIGPUv2* rgb_controller = new RGBController_MSIGPUv2(controller, msi_gpu_id);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
} /* DetectMSIGPUv2Controllers() */
|
||||
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Gaming X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060_DEV, MSI_SUB_VEN, MSI_RTX4060_GAMING_X_8G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Gaming X NV Edition", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060_DEV, MSI_SUB_VEN, MSI_RTX4060_GAMING_X_NV_EDITION_8G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Ti Gaming X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060TI_DEV, MSI_SUB_VEN, MSI_RTX4060TI_GAMING_X_8G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Ti 16GB Gaming X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060TI_16G_DEV, MSI_SUB_VEN, MSI_RTX4060TI_GAMING_X_16G_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Ti 16GB Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060TI_16G_DEV, MSI_SUB_VEN, MSI_RTX4060TI_GAMING_X_16G_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Gaming X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070_DEV, MSI_SUB_VEN, MSI_RTX4070_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Gaming X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070_DEV, MSI_SUB_VEN, MSI_RTX4070S_GAMING_X_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070_DEV, MSI_SUB_VEN, MSI_RTX4070S_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 SUPER Gaming X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070S_DEV, MSI_SUB_VEN, MSI_RTX4070S_GAMING_X_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 SUPER Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070S_DEV, MSI_SUB_VEN, MSI_RTX4070S_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 SUPER Gaming X Slim MLG", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070S_DEV, MSI_SUB_VEN, MSI_RTX4070S_GAMING_X_SLIM_MLG_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti Gaming X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, MSI_SUB_VEN, MSI_RTX4070TI_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti Gaming X Trio White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, MSI_SUB_VEN, MSI_RTX4070TI_GAMING_X_TRIO_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, MSI_SUB_VEN, MSI_RTX4070TI_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti Suprim X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, MSI_SUB_VEN, MSI_RTX4070TI_SUPRIM_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti SUPER Gaming X Trio White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_DEV, MSI_SUB_VEN, MSI_RTX4070TI_GAMING_X_TRIO_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti SUPER Gaming Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_DEV, MSI_SUB_VEN, MSI_RTX4070TIS_GAMING_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti SUPER Gaming X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_DEV, MSI_SUB_VEN, MSI_RTX4070TIS_GAMING_X_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4070 Ti SUPER Gaming White X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4070TIS_DEV, MSI_SUB_VEN, MSI_RTX4070TIS_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, MSI_SUB_VEN, MSI_RTX4080S_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 Gaming X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, MSI_SUB_VEN, MSI_RTX4080_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 Gaming X Trio White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, MSI_SUB_VEN, MSI_RTX4080_GAMING_X_TRIO_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 Suprim X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080_DEV, MSI_SUB_VEN, MSI_RTX4080_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 SUPER Gaming X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080S_DEV, MSI_SUB_VEN, MSI_RTX4080S_GAMING_X_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 SUPER Gaming X Slim White", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080S_DEV, MSI_SUB_VEN, MSI_RTX4080S_GAMING_X_SLIM_WHITE_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 SUPER Suprim X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080S_DEV, MSI_SUB_VEN, MSI_RTX4080_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4080 SUPER Gaming X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4080S_DEV, MSI_SUB_VEN, MSI_RTX4080S_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4090 Gaming X Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, MSI_SUB_VEN, MSI_RTX4090_GAMING_X_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4090 Gaming X Slim", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, MSI_SUB_VEN, MSI_RTX4090_GAMING_X_SLIM_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4090 Suprim Liquid X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, MSI_SUB_VEN, MSI_RTX4090_SUPRIM_LIQUID_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4090 Suprim X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4090_DEV, MSI_SUB_VEN, MSI_RTX4090_SUPRIM_X_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5070 Gaming Trio", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5070_DEV, MSI_SUB_VEN, MSI_RTX5070_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5070 Ti Gaming Trio OC Plus", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, MSI_SUB_VEN, MSI_RTX5070TI_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5070 Ti VANGUARD SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, MSI_SUB_VEN, MSI_RTX5070TI_VANGUARD_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5080 Gaming Trio OC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, MSI_SUB_VEN, MSI_RTX5080_GAMING_TRIO_OC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5080 VANGUARD OC SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, MSI_SUB_VEN, MSI_RTX5080_VANGUARD_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5080 SUPRIM SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, MSI_SUB_VEN, MSI_RTX5080_SUPRIM_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5080 SUPRIM LIQUID SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, MSI_SUB_VEN, MSI_RTX5080_SUPRIM_LIQUID_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5090 Gaming Trio OC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, MSI_SUB_VEN, MSI_RTX5090_GAMING_TRIO_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5090 VANGUARD SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, MSI_SUB_VEN, MSI_RTX5090_VANGUARD_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5090 SUPRIM SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, MSI_SUB_VEN, MSI_RTX5090_SUPRIM_SOC_SUB_DEV, 0x68);
|
||||
REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 5090 SUPRIM LIQUID SOC", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, MSI_SUB_VEN, MSI_RTX5090_SUPRIM_LIQUID_SOC_SUB_DEV, 0x68);
|
||||
@@ -0,0 +1,488 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_MSIGPUv2.cpp |
|
||||
| |
|
||||
| RGBController for MSI V2 GPU (ITE9) |
|
||||
| |
|
||||
| Wojciech Lazarski 03 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <array>
|
||||
#include "RGBController_MSIGPUv2.h"
|
||||
|
||||
static const unsigned char speed_values[3] = { 0x04, 0x02, 0x01 };
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name MSI GPU v2
|
||||
@category GPU
|
||||
@type I2C
|
||||
@save :white_check_mark:
|
||||
@direct :white_check_mark:
|
||||
@effects :white_check_mark:
|
||||
@detectors DetectMSIGPUv2Controllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_MSIGPUv2::RGBController_MSIGPUv2(MSIGPUv2Controller * controller_ptr, int msi_gpu_id)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "MSI";
|
||||
type = DEVICE_TYPE_GPU;
|
||||
description = "MSI GPU V2 Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
|
||||
mode Off;
|
||||
Off.name = "Off";
|
||||
Off.value = MSI_GPU_V2_MODE_OFF;
|
||||
Off.flags = MODE_FLAG_MANUAL_SAVE;
|
||||
Off.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Off);
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = MSI_GPU_V2_MODE_STATIC;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
Direct.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Direct.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Direct.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
mode Rainbow;
|
||||
Rainbow.name = "Rainbow Wave";
|
||||
Rainbow.value = MSI_GPU_V2_MODE_RAINBOW;
|
||||
Rainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Rainbow.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Rainbow.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Rainbow.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Rainbow.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Rainbow.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Rainbow.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Rainbow.color_mode = MODE_COLORS_RANDOM;
|
||||
modes.push_back(Rainbow);
|
||||
|
||||
mode Magic;
|
||||
Magic.name = "Magic";
|
||||
Magic.value = MSI_GPU_V2_MODE_MAGIC;
|
||||
Magic.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Magic.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Magic.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Magic.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Magic.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Magic.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Magic.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Magic.color_mode = MODE_COLORS_RANDOM;
|
||||
modes.push_back(Magic);
|
||||
|
||||
mode ColorCycle;
|
||||
ColorCycle.name = "Color Cycle";
|
||||
ColorCycle.value = MSI_GPU_V2_MODE_MAGIC;
|
||||
ColorCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
ColorCycle.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
ColorCycle.speed = MSI_GPU_V2_SPEED_MID;
|
||||
ColorCycle.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
ColorCycle.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
ColorCycle.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
ColorCycle.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
ColorCycle.colors_min = 1;
|
||||
ColorCycle.colors_max = 3;
|
||||
ColorCycle.colors.resize(3);
|
||||
ColorCycle.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
modes.push_back(ColorCycle);
|
||||
|
||||
|
||||
mode Patrolling;
|
||||
Patrolling.name = "Patrolling";
|
||||
Patrolling.value = MSI_GPU_V2_MODE_PATROLLING;
|
||||
Patrolling.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Patrolling.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Patrolling.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Patrolling.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Patrolling.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Patrolling.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Patrolling.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Patrolling.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Patrolling);
|
||||
|
||||
mode Streaming;
|
||||
Streaming.name = "Streaming";
|
||||
Streaming.value = MSI_GPU_V2_MODE_STREAMING;
|
||||
Streaming.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Streaming.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Streaming.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Streaming.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Streaming.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Streaming.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Streaming.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Streaming.color_mode = MODE_COLORS_RANDOM;
|
||||
modes.push_back(Streaming);
|
||||
|
||||
mode Lightning;
|
||||
Lightning.name = "Lightning";
|
||||
Lightning.value = MSI_GPU_V2_MODE_LIGHTNING;
|
||||
Lightning.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Lightning.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Lightning.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Lightning.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Lightning.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Lightning.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Lightning.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Lightning.color_mode = MODE_COLORS_RANDOM;
|
||||
modes.push_back(Lightning);
|
||||
|
||||
mode Wave;
|
||||
Wave.name = "Wave";
|
||||
Wave.value = MSI_GPU_V2_MODE_RAINBOW; //Rainbow has two modes now
|
||||
Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE;
|
||||
Wave.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Wave.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Wave.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Wave.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Wave.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Wave.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Wave.colors_min = 1;
|
||||
Wave.colors_max = 3;
|
||||
Wave.colors.resize(3);
|
||||
Wave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
modes.push_back(Wave);
|
||||
|
||||
mode Meteor;
|
||||
Meteor.name = "Meteor";
|
||||
Meteor.value = MSI_GPU_V2_MODE_METEOR;
|
||||
Meteor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Meteor.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Meteor.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Meteor.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Meteor.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Meteor.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Meteor.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Meteor.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Meteor);
|
||||
|
||||
switch(msi_gpu_id)
|
||||
{
|
||||
case MSI_RTX4060TI_GAMING_X_16G_SLIM_WHITE_SUB_DEV | NVIDIA_RTX4060TI_16G_DEV << 16:
|
||||
case MSI_RTX4070S_GAMING_X_SLIM_SUB_DEV | NVIDIA_RTX4070S_DEV << 16:
|
||||
case MSI_RTX4070TI_GAMING_X_TRIO_WHITE_SUB_DEV | NVIDIA_RTX4070TIS_DEV << 16:
|
||||
case MSI_RTX4080S_GAMING_X_TRIO_SUB_DEV | NVIDIA_RTX4080S_DEV << 16:
|
||||
case MSI_RTX4080S_GAMING_X_SLIM_WHITE_SUB_DEV | NVIDIA_RTX4080_DEV << 16:
|
||||
case MSI_RTX4080S_GAMING_X_SLIM_WHITE_SUB_DEV | NVIDIA_RTX4080S_DEV << 16:
|
||||
break;
|
||||
|
||||
default:
|
||||
mode Stack;
|
||||
Stack.name = "Stack";
|
||||
Stack.value = MSI_GPU_V2_MODE_STACK;
|
||||
Stack.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Stack.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Stack.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Stack.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Stack.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Stack.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Stack.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Stack.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Stack);
|
||||
|
||||
mode Rhythm;
|
||||
Rhythm.name = "Rhythm";
|
||||
Rhythm.value = MSI_GPU_V2_MODE_RHYTHM;
|
||||
Rhythm.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Rhythm.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Rhythm.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Rhythm.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Rhythm.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Rhythm.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Rhythm.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Rhythm.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Rhythm);
|
||||
}
|
||||
|
||||
mode Flowing;
|
||||
Flowing.name = "Flowing";
|
||||
Flowing.value = MSI_GPU_V2_MODE_FLOWING;
|
||||
Flowing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Flowing.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Flowing.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Flowing.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Flowing.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Flowing.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Flowing.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Flowing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Flowing);
|
||||
|
||||
mode Whirling;
|
||||
Whirling.name = "Whirling";
|
||||
Whirling.value = MSI_GPU_V2_MODE_WHIRLING;
|
||||
Whirling.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Whirling.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Whirling.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Whirling.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Whirling.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Whirling.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Whirling.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Whirling.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Whirling);
|
||||
|
||||
mode Fadein;
|
||||
Fadein.name = "Fade In";
|
||||
Fadein.value = MSI_GPU_V2_MODE_FADEIN;
|
||||
Fadein.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Fadein.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Fadein.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Fadein.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Fadein.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Fadein.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Fadein.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Fadein.colors_min = 1;
|
||||
Fadein.colors_max = 2;
|
||||
Fadein.colors.resize(2);
|
||||
Fadein.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
modes.push_back(Fadein);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = MSI_GPU_V2_MODE_BREATHING;
|
||||
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
Breathing.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
Breathing.speed = MSI_GPU_V2_SPEED_MID;
|
||||
Breathing.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
Breathing.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
Breathing.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Breathing.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 2;
|
||||
Breathing.colors.resize(2);
|
||||
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
modes.push_back(Breathing);
|
||||
|
||||
mode flashing;
|
||||
flashing.name = "Flashing";
|
||||
flashing.value = MSI_GPU_V2_MODE_FLASHING;
|
||||
flashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
flashing.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
flashing.speed = MSI_GPU_V2_SPEED_MID;
|
||||
flashing.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
flashing.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
flashing.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
flashing.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
flashing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(flashing);
|
||||
|
||||
mode doubleflashing;
|
||||
doubleflashing.name = "Double Flashing";
|
||||
doubleflashing.value = MSI_GPU_V2_MODE_DOUBLEFLASHING;
|
||||
doubleflashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
|
||||
doubleflashing.speed_min = MSI_GPU_V2_SPEED_MIN;
|
||||
doubleflashing.speed = MSI_GPU_V2_SPEED_MID;
|
||||
doubleflashing.speed_max = MSI_GPU_V2_SPEED_MAX;
|
||||
doubleflashing.brightness_min = MSI_GPU_V2_BRIGHTNESS_MIN;
|
||||
doubleflashing.brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
doubleflashing.brightness_max = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
doubleflashing.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(doubleflashing);
|
||||
|
||||
SetupZones();
|
||||
|
||||
modes[active_mode].speed = MSI_GPU_V2_SPEED_MID;
|
||||
modes[active_mode].brightness = MSI_GPU_V2_BRIGHTNESS_MAX;
|
||||
}
|
||||
|
||||
RGBController_MSIGPUv2::~RGBController_MSIGPUv2()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::SetupZones()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up zone |
|
||||
\*---------------------------------------------------------*/
|
||||
zone msi_gpu_zone;
|
||||
msi_gpu_zone.name = "GPU";
|
||||
msi_gpu_zone.type = ZONE_TYPE_SINGLE;
|
||||
msi_gpu_zone.leds_min = 1;
|
||||
msi_gpu_zone.leds_max = 1;
|
||||
msi_gpu_zone.leds_count = 1;
|
||||
msi_gpu_zone.matrix_map = NULL;
|
||||
zones.push_back(msi_gpu_zone);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up LED |
|
||||
\*---------------------------------------------------------*/
|
||||
led led1;
|
||||
led1.name = "Color";
|
||||
leds.push_back(led1);
|
||||
|
||||
SetupColors();
|
||||
|
||||
/*-------------------------------------------------------------*\
|
||||
| Initialize colors |
|
||||
| This controller doesn't support reading colors from device |
|
||||
\*-------------------------------------------------------------*/
|
||||
colors[0] = ToRGBColor(0xFF, 0, 0);
|
||||
|
||||
for(unsigned int mode_idx = 0; mode_idx < modes.size(); mode_idx++)
|
||||
{
|
||||
if(modes[mode_idx].color_mode == MODE_COLORS_MODE_SPECIFIC)
|
||||
{
|
||||
if(modes[mode_idx].colors.size()>2)
|
||||
{
|
||||
modes[mode_idx].colors[2] = ToRGBColor(0, 0, 0xFF);
|
||||
}
|
||||
if(modes[mode_idx].colors.size()>1)
|
||||
{
|
||||
modes[mode_idx].colors[1] = ToRGBColor(0, 0xFF, 0);
|
||||
}
|
||||
modes[mode_idx].colors[0] = ToRGBColor(0xFF, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::DeviceUpdateAll(const mode& current_mode)
|
||||
{
|
||||
switch(current_mode.value)
|
||||
{
|
||||
case MSI_GPU_V2_MODE_RAINBOW:
|
||||
if(current_mode.flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR)
|
||||
{
|
||||
if(current_mode.direction == MODE_DIRECTION_LEFT)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
|
||||
}
|
||||
else
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
|
||||
}
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
|
||||
controller->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
|
||||
controller->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
|
||||
controller->SetRGB3V2(RGBGetRValue(current_mode.colors[2]), RGBGetGValue(current_mode.colors[2]), RGBGetBValue(current_mode.colors[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(current_mode.direction == MODE_DIRECTION_LEFT)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT);
|
||||
}
|
||||
else
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT);
|
||||
}
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case MSI_GPU_V2_MODE_MAGIC:
|
||||
if(current_mode.flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_NON_RGBMODE);
|
||||
|
||||
controller->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
|
||||
controller->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
|
||||
controller->SetRGB3V2(RGBGetRValue(current_mode.colors[2]), RGBGetGValue(current_mode.colors[2]), RGBGetBValue(current_mode.colors[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case MSI_GPU_V2_MODE_BREATHING:
|
||||
case MSI_GPU_V2_MODE_FADEIN:
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
|
||||
controller->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
|
||||
controller->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
|
||||
break;
|
||||
|
||||
case MSI_GPU_V2_MODE_FLOWING:
|
||||
case MSI_GPU_V2_MODE_WHIRLING:
|
||||
case MSI_GPU_V2_MODE_PATROLLING:
|
||||
case MSI_GPU_V2_MODE_FLASHING:
|
||||
case MSI_GPU_V2_MODE_DOUBLEFLASHING:
|
||||
case MSI_GPU_V2_MODE_STATIC:
|
||||
case MSI_GPU_V2_MODE_RHYTHM:
|
||||
case MSI_GPU_V2_MODE_STACK:
|
||||
case MSI_GPU_V2_MODE_METEOR:
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
controller->SetRGB1(RGBGetRValue(colors[0]), RGBGetGValue(colors[0]), RGBGetBValue(colors[0]));
|
||||
break;
|
||||
|
||||
case MSI_GPU_V2_MODE_STREAMING:
|
||||
case MSI_GPU_V2_MODE_LIGHTNING:
|
||||
case MSI_GPU_V2_MODE_OFF:
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
break;
|
||||
|
||||
default:
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
|
||||
controller->SetMode(MSI_GPU_V2_MODE_OFF);
|
||||
}
|
||||
|
||||
|
||||
if(current_mode.flags & MODE_FLAG_HAS_BRIGHTNESS)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_BRIGHTNESS, MSI_GPU_V2_BRIGHTNESS_MULTI * modes[active_mode].brightness);
|
||||
if(modes[active_mode].flags & MODE_FLAG_HAS_SPEED)
|
||||
{
|
||||
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_SPEED, speed_values[current_mode.speed]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
controller->SetMode(current_mode.value);
|
||||
}
|
||||
|
||||
|
||||
void RGBController_MSIGPUv2::DeviceUpdateLEDs()
|
||||
{
|
||||
DeviceUpdateAll(modes[active_mode]);
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateAll(modes[active_mode]);
|
||||
}
|
||||
|
||||
|
||||
void RGBController_MSIGPUv2::UpdateSingleLED(int /*led*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support updating single LEDs |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::DeviceUpdateMode()
|
||||
{
|
||||
DeviceUpdateAll(modes[active_mode]);
|
||||
}
|
||||
|
||||
void RGBController_MSIGPUv2::DeviceSaveMode()
|
||||
{
|
||||
controller->Save();
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_MSIGPUv2.h |
|
||||
| |
|
||||
| RGBController for MSI V2 GPU (ITE9) |
|
||||
| |
|
||||
| Wojciech Lazarski 03 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "pci_ids.h"
|
||||
#include "RGBController.h"
|
||||
#include "MSIGPUv2Controller.h"
|
||||
|
||||
class RGBController_MSIGPUv2 : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_MSIGPUv2(MSIGPUv2Controller* controller_ptr, int msi_gpu_id);
|
||||
~RGBController_MSIGPUv2();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
void DeviceSaveMode();
|
||||
|
||||
private:
|
||||
MSIGPUv2Controller* controller;
|
||||
|
||||
void DeviceUpdateAll(const mode& current_mode);
|
||||
};
|
||||
Reference in New Issue
Block a user