Store name in MSIGPUv2Controller to avoid setting it in detector

This commit is contained in:
Adam Honse 2025-08-15 16:57:02 -05:00
parent 5db766cfa0
commit 5190274004
5 changed files with 63 additions and 57 deletions

View file

@ -15,10 +15,11 @@
using namespace std::chrono_literals;
MSIGPUv2Controller::MSIGPUv2Controller(i2c_smbus_interface* bus, msi_gpu_dev_id dev)
MSIGPUv2Controller::MSIGPUv2Controller(i2c_smbus_interface* bus, msi_gpu_dev_id dev, std::string dev_name)
{
this->bus = bus;
this->dev = dev;
this->bus = bus;
this->dev = dev;
this->name = dev_name;
}
MSIGPUv2Controller::~MSIGPUv2Controller()
@ -36,6 +37,11 @@ std::string MSIGPUv2Controller::GetDeviceLocation()
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);

View file

@ -75,10 +75,11 @@ enum
class MSIGPUv2Controller
{
public:
MSIGPUv2Controller(i2c_smbus_interface* bus, msi_gpu_dev_id dev);
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);
@ -95,4 +96,5 @@ public:
private:
i2c_smbus_interface * bus;
msi_gpu_dev_id dev;
std::string name;
};

View file

@ -30,13 +30,11 @@ void DetectMSIGPUv2Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const
return;
}
int msi_gpu_id = bus->pci_subsystem_device | bus->pci_device << 16;
MSIGPUv2Controller* controller = new MSIGPUv2Controller(bus, i2c_addr);
RGBController_MSIGPUv2* rgb_controller = new RGBController_MSIGPUv2(controller, msi_gpu_id);
rgb_controller->name = name;
ResourceManager::get()->RegisterRGBController(rgb_controller);
LOG_TRACE("MSI GPU Controler using ITE9 chip");
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);

View file

@ -25,18 +25,17 @@ static const unsigned char speed_values[3] = { 0x04, 0x02, 0x01 };
@comment
\*-------------------------------------------------------------------*/
RGBController_MSIGPUv2::RGBController_MSIGPUv2(MSIGPUv2Controller * msi_gpu_ptr, int msi_gpu_id)
RGBController_MSIGPUv2::RGBController_MSIGPUv2(MSIGPUv2Controller * controller_ptr, int msi_gpu_id)
{
msi_gpu = msi_gpu_ptr;
controller = controller_ptr;
name = "MSI GPU Device";
vendor = "MSI";
type = DEVICE_TYPE_GPU;
description = name;
location = msi_gpu->GetDeviceLocation();
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;
@ -294,7 +293,7 @@ RGBController_MSIGPUv2::RGBController_MSIGPUv2(MSIGPUv2Controller * msi_gpu_ptr,
RGBController_MSIGPUv2::~RGBController_MSIGPUv2()
{
delete msi_gpu;
delete controller;
}
void RGBController_MSIGPUv2::SetupZones()
@ -360,62 +359,62 @@ void RGBController_MSIGPUv2::DeviceUpdateAll(const mode& current_mode)
{
if(current_mode.direction == MODE_DIRECTION_LEFT)
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
}
else
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT | MSI_GPU_V2_CONTROL_NON_RGBMODE);
}
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
msi_gpu->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
msi_gpu->SetRGB3V2(RGBGetRValue(current_mode.colors[2]), RGBGetGValue(current_mode.colors[2]), RGBGetBValue(current_mode.colors[2]));
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)
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_LEFT);
}
else
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT);
}
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
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)
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, 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->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_NON_RGBMODE);
msi_gpu->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
msi_gpu->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
msi_gpu->SetRGB3V2(RGBGetRValue(current_mode.colors[2]), RGBGetGValue(current_mode.colors[2]), RGBGetBValue(current_mode.colors[2]));
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
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_CONTROL, MSI_GPU_V2_CONTROL_DIRECTION_RIGHT);
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:
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->SetRGB1V2(RGBGetRValue(current_mode.colors[0]), RGBGetGValue(current_mode.colors[0]), RGBGetBValue(current_mode.colors[0]));
msi_gpu->SetRGB2V2(RGBGetRValue(current_mode.colors[1]), RGBGetGValue(current_mode.colors[1]), RGBGetBValue(current_mode.colors[1]));
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:
@ -427,36 +426,36 @@ void RGBController_MSIGPUv2::DeviceUpdateAll(const mode& current_mode)
case MSI_GPU_V2_MODE_RHYTHM:
case MSI_GPU_V2_MODE_STACK:
case MSI_GPU_V2_MODE_METEOR:
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->SetRGB1(RGBGetRValue(colors[0]), RGBGetGValue(colors[0]), RGBGetBValue(colors[0]));
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:
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
break;
default:
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_UNKNOWN, 0x00);
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_MODE, MSI_GPU_V2_MODE_IDLE);
msi_gpu->SetMode(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);
controller->SetMode(MSI_GPU_V2_MODE_OFF);
}
if(current_mode.flags & MODE_FLAG_HAS_BRIGHTNESS)
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_BRIGHTNESS, MSI_GPU_V2_BRIGHTNESS_MULTI * modes[active_mode].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)
{
msi_gpu->MSIGPURegisterWrite(MSI_GPU_V2_REG_SPEED, speed_values[current_mode.speed]);
controller->MSIGPURegisterWrite(MSI_GPU_V2_REG_SPEED, speed_values[current_mode.speed]);
}
}
msi_gpu->SetMode(current_mode.value);
controller->SetMode(current_mode.value);
}
@ -485,5 +484,5 @@ void RGBController_MSIGPUv2::DeviceUpdateMode()
void RGBController_MSIGPUv2::DeviceSaveMode()
{
msi_gpu->Save();
controller->Save();
}

View file

@ -18,7 +18,7 @@
class RGBController_MSIGPUv2 : public RGBController
{
public:
RGBController_MSIGPUv2(MSIGPUv2Controller* msi_gpu_ptr, int msi_gpu_id);
RGBController_MSIGPUv2(MSIGPUv2Controller* controller_ptr, int msi_gpu_id);
~RGBController_MSIGPUv2();
void SetupZones();
@ -32,6 +32,7 @@ public:
void DeviceSaveMode();
private:
MSIGPUv2Controller* msi_gpu;
MSIGPUv2Controller* controller;
void DeviceUpdateAll(const mode& current_mode);
};