SapphireGPUController: reimplement configuration readback

Commit amended for code style by Adam Honse <calcprogrammer1@gmail.com>
This commit is contained in:
K900 2021-02-03 11:23:25 +03:00 committed by Adam Honse
parent bae1e08732
commit 267dfff247
9 changed files with 239 additions and 52 deletions

View file

@ -36,8 +36,7 @@ RGBController_SapphireNitroGlowV1::RGBController_SapphireNitroGlowV1(SapphireNit
SetupZones();
// Initialize active mode
active_mode = 0;
ReadConfiguration();
}
RGBController_SapphireNitroGlowV1::~RGBController_SapphireNitroGlowV1()
@ -72,6 +71,43 @@ void RGBController_SapphireNitroGlowV1::SetupZones()
SetupColors();
}
void RGBController_SapphireNitroGlowV1::ReadConfiguration()
{
colors[0] = ToRGBColor(
sapphire->GetRed(),
sapphire->GetGreen(),
sapphire->GetBlue()
);
switch(sapphire->GetMode())
{
case SAPPHIRE_NITRO_GLOW_V1_MODE_CUSTOM:
active_mode = 0;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_RAINBOW:
active_mode = 1;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_BOARD_TEMPERATURE:
active_mode = 2;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_FAN_SPEED:
active_mode = 3;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_OFF:
active_mode = 0;
colors[0] = ToRGBColor(0, 0, 0);
break;
default:
active_mode = 0;
break;
}
}
void RGBController_SapphireNitroGlowV1::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
@ -106,5 +142,5 @@ void RGBController_SapphireNitroGlowV1::SetCustomMode()
void RGBController_SapphireNitroGlowV1::DeviceUpdateMode()
{
sapphire->SetMode((unsigned char)modes[(unsigned int)active_mode].value, (unsigned char)modes[(unsigned int)active_mode].speed);
sapphire->SetMode((unsigned char)modes[(unsigned int)active_mode].value);
}

View file

@ -31,4 +31,6 @@ public:
private:
SapphireNitroGlowV1Controller* sapphire;
void ReadConfiguration();
};

View file

@ -72,7 +72,7 @@ RGBController_SapphireNitroGlowV3::RGBController_SapphireNitroGlowV3(SapphireNit
SetupZones();
active_mode = 0;
ReadConfiguration();
}
RGBController_SapphireNitroGlowV3::~RGBController_SapphireNitroGlowV3()
@ -107,6 +107,58 @@ void RGBController_SapphireNitroGlowV3::SetupZones()
SetupColors();
}
void RGBController_SapphireNitroGlowV3::ReadConfiguration()
{
modes[1].speed = sapphire->GetRainbowAnimationSpeed();
modes[2].speed = sapphire->GetRunwayAnimationSpeed();
modes[3].speed = sapphire->GetColorCycleAnimationSpeed();
modes[4].speed = sapphire->GetSerialAnimationSpeed();
colors[0] = ToRGBColor(
sapphire->GetRed(),
sapphire->GetBlue(),
sapphire->GetGreen()
);
if(sapphire->GetExternalControl())
{
active_mode = 5;
return;
}
switch(sapphire->GetMode())
{
case SAPPHIRE_NITRO_GLOW_V3_MODE_CUSTOM:
active_mode = 0;
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_RAINBOW:
active_mode = 1;
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_RUNWAY:
active_mode = 2;
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_COLOR_CYCLE:
active_mode = 3;
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_SERIAL:
active_mode = 4;
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_OFF:
active_mode = 0;
colors[0] = ToRGBColor(0, 0, 0);
break;
default:
active_mode = 0;
break;
}
}
void RGBController_SapphireNitroGlowV3::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
@ -141,5 +193,41 @@ void RGBController_SapphireNitroGlowV3::SetCustomMode()
void RGBController_SapphireNitroGlowV3::DeviceUpdateMode()
{
sapphire->SetMode((unsigned char)modes[(unsigned int)active_mode].value, (unsigned char)modes[(unsigned int)active_mode].speed);
auto mode = modes[active_mode];
switch(mode.value)
{
case SAPPHIRE_NITRO_GLOW_V3_MODE_CUSTOM:
sapphire->SetExternalControl(false);
sapphire->SetMode(mode.value);
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_RAINBOW:
sapphire->SetExternalControl(false);
sapphire->SetRainbowAnimationSpeed(mode.speed);
sapphire->SetMode(mode.value);
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_RUNWAY:
sapphire->SetExternalControl(false);
sapphire->SetRunwayAnimationSpeed(mode.speed);
sapphire->SetMode(mode.value);
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_COLOR_CYCLE:
sapphire->SetExternalControl(false);
sapphire->SetColorCycleAnimationSpeed(mode.speed);
sapphire->SetMode(mode.value);
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_SERIAL:
sapphire->SetExternalControl(false);
sapphire->SetSerialAnimationSpeed(mode.speed);
sapphire->SetMode(mode.value);
break;
case SAPPHIRE_NITRO_GLOW_V3_MODE_EXTERNAL_CONTROL:
sapphire->SetExternalControl(true);
break;
}
}

View file

@ -31,4 +31,6 @@ public:
private:
SapphireNitroGlowV3Controller* sapphire;
void ReadConfiguration();
};

View file

@ -100,8 +100,6 @@ void DetectSapphireGPUControllers(std::vector<i2c_smbus_interface *> &busses, st
busses[bus]->pci_subsystem_vendor == device_list[dev_idx].pci_subsystem_vendor &&
busses[bus]->pci_subsystem_device == device_list[dev_idx].pci_subsystem_device)
{
RGBController *controller;
switch(device_list[dev_idx].version)
{
case SAPPHIRE_NITRO_GLOW_V1:

View file

@ -52,7 +52,12 @@ void SapphireNitroGlowV1Controller::SetColor(unsigned char red, unsigned char gr
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_BLUE, blue);
}
void SapphireNitroGlowV1Controller::SetMode(unsigned char mode, unsigned char /*speed*/)
unsigned char SapphireNitroGlowV1Controller::GetMode()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_MODE));
}
void SapphireNitroGlowV1Controller::SetMode(unsigned char mode)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_MODE, mode);
}
}

View file

@ -46,10 +46,12 @@ public:
unsigned char GetBlue();
void SetColor(unsigned char red, unsigned char green, unsigned char blue);
void SetMode(unsigned char mode, unsigned char speed);
unsigned char GetMode();
void SetMode(unsigned char mode);
private:
i2c_smbus_interface* bus;
sapphire_dev_id dev;
};
};

View file

@ -52,51 +52,82 @@ void SapphireNitroGlowV3Controller::SetColor(unsigned char red, unsigned char gr
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_BLUE, blue);
}
void SapphireNitroGlowV3Controller::SetMode(unsigned char mode, unsigned char speed)
unsigned char SapphireNitroGlowV3Controller::GetMode()
{
switch(mode)
{
case SAPPHIRE_NITRO_GLOW_V3_MODE_RAINBOW:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 0);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RAINBOW_ANIMATION_SPEED, speed);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
break;
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE));
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_RUNWAY:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 0);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_SPEED, speed);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_REPEAT_COUNT, 5);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
break;
void SapphireNitroGlowV3Controller::SetMode(unsigned char mode)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_COLOR_CYCLE:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 0);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_COLOR_CYCLE_ANIMATION_SPEED, speed);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
break;
bool SapphireNitroGlowV3Controller::GetExternalControl()
{
return((bool)bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL));
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_SERIAL:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 0);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_SERIAL_ANIMATION_SPEED, speed);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
break;
void SapphireNitroGlowV3Controller::SetExternalControl(bool enabled)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, (unsigned char)enabled);
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_SAPPHIRE_BLUE:
break;
unsigned char SapphireNitroGlowV3Controller::GetBrightness()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE));
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_AUDIO_VISUALIZATION:
break;
void SapphireNitroGlowV3Controller::SetBrightness(unsigned char brightness)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_BRIGHTNESS, brightness);
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_CUSTOM:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 0);
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_MODE, mode);
break;
unsigned char SapphireNitroGlowV3Controller::GetRainbowAnimationSpeed()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RAINBOW_ANIMATION_SPEED));
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_OFF:
break;
void SapphireNitroGlowV3Controller::SetRainbowAnimationSpeed(unsigned char speed)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RAINBOW_ANIMATION_SPEED, speed);
}
case SAPPHIRE_NITRO_GLOW_V3_MODE_EXTERNAL_CONTROL:
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_EXTERNAL_CONTROL, 1);
break;
}
}
unsigned char SapphireNitroGlowV3Controller::GetRunwayAnimationSpeed()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_SPEED));
}
void SapphireNitroGlowV3Controller::SetRunwayAnimationSpeed(unsigned char speed)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_SPEED, speed);
}
unsigned char SapphireNitroGlowV3Controller::GetRunwayAnimationRepeatCount()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_REPEAT_COUNT));
}
void SapphireNitroGlowV3Controller::SetRunwayAnimationRepeatCount(unsigned char count)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_RUNWAY_ANIMATION_REPEAT_COUNT, count);
}
unsigned char SapphireNitroGlowV3Controller::GetColorCycleAnimationSpeed()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_COLOR_CYCLE_ANIMATION_SPEED));
}
void SapphireNitroGlowV3Controller::SetColorCycleAnimationSpeed(unsigned char speed)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_COLOR_CYCLE_ANIMATION_SPEED, speed);
}
unsigned char SapphireNitroGlowV3Controller::GetSerialAnimationSpeed()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_SERIAL_ANIMATION_SPEED));
}
void SapphireNitroGlowV3Controller::SetSerialAnimationSpeed(unsigned char speed)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V3_REG_SERIAL_ANIMATION_SPEED, speed);
}

View file

@ -56,10 +56,33 @@ public:
unsigned char GetBlue();
void SetColor(unsigned char red, unsigned char green, unsigned char blue);
void SetMode(unsigned char mode, unsigned char speed);
unsigned char GetMode();
void SetMode(unsigned char mode);
bool GetExternalControl();
void SetExternalControl(bool enabled);
unsigned char GetBrightness();
void SetBrightness(unsigned char brightness);
unsigned char GetRainbowAnimationSpeed();
void SetRainbowAnimationSpeed(unsigned char speed);
unsigned char GetRunwayAnimationSpeed();
void SetRunwayAnimationSpeed(unsigned char speed);
unsigned char GetRunwayAnimationRepeatCount();
void SetRunwayAnimationRepeatCount(unsigned char count);
unsigned char GetColorCycleAnimationSpeed();
void SetColorCycleAnimationSpeed(unsigned char speed);
unsigned char GetSerialAnimationSpeed();
void SetSerialAnimationSpeed(unsigned char speed);
private:
i2c_smbus_interface* bus;
sapphire_dev_id dev;
};
};