Implement full protocol support for SapphireNitroGlowV1

This commit is contained in:
Nexrem 2023-02-24 01:35:30 +00:00 committed by Adam Honse
parent ddb7b141a3
commit b1f2231bc7
3 changed files with 84 additions and 19 deletions

View file

@ -22,28 +22,71 @@
RGBController_SapphireNitroGlowV1::RGBController_SapphireNitroGlowV1(SapphireNitroGlowV1Controller* controller_ptr)
{
controller = controller_ptr;
controller = controller_ptr;
name = "Sapphire Nitro Glow V1 Device";
vendor = "Sapphire";
description = "Sapphire Nitro Glow V1 Device";
location = controller->GetDeviceLocation();
type = DEVICE_TYPE_GPU;
name = "Sapphire Nitro Glow V1 Device";
vendor = "Sapphire";
description = "Sapphire Nitro Glow V1 Device";
location = controller->GetDeviceLocation();
type = DEVICE_TYPE_GPU;
mode Static;
Static.name = "Static";
Static.value = 0x04;
Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static);
mode Sapphire;
Sapphire.name = "Sapphire Blue";
Sapphire.value = SAPPHIRE_NITRO_GLOW_V1_MODE_SAPPHIRE_BLUE;
Sapphire.flags = MODE_FLAG_HAS_BRIGHTNESS;
Sapphire.color_mode = MODE_COLORS_NONE;
Sapphire.brightness_min = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN;
Sapphire.brightness_max = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
Sapphire.brightness = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
modes.push_back(Sapphire);
mode Rainbow;
Rainbow.name = "Rainbow Wave";
Rainbow.value = 0x01;
Rainbow.flags = 0;
Rainbow.color_mode = MODE_COLORS_NONE;
Rainbow.name = "Rainbow Wave";
Rainbow.value = SAPPHIRE_NITRO_GLOW_V1_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS;
Rainbow.color_mode = MODE_COLORS_NONE;
Rainbow.brightness_min = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN;
Rainbow.brightness_max = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
Rainbow.brightness = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
modes.push_back(Rainbow);
mode Temperature;
Temperature.name = "PCB Temperature";
Temperature.value = SAPPHIRE_NITRO_GLOW_V1_MODE_BOARD_TEMPERATURE;
Temperature.flags = MODE_FLAG_HAS_BRIGHTNESS;
Temperature.color_mode = MODE_COLORS_NONE;
Temperature.brightness_min = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN;
Temperature.brightness_max = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
Temperature.brightness = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
modes.push_back(Temperature);
mode FanSpeed;
FanSpeed.name = "Fan Speed";
FanSpeed.value = SAPPHIRE_NITRO_GLOW_V1_MODE_FAN_SPEED;
FanSpeed.flags = MODE_FLAG_HAS_BRIGHTNESS;
FanSpeed.color_mode = MODE_COLORS_NONE;
FanSpeed.brightness_min = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN;
FanSpeed.brightness_max = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
FanSpeed.brightness = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
modes.push_back(FanSpeed);
mode Static;
Static.name = "Static";
Static.value = SAPPHIRE_NITRO_GLOW_V1_MODE_CUSTOM;
Static.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
Static.color_mode = MODE_COLORS_PER_LED;
Static.brightness_min = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN;
Static.brightness_max = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
Static.brightness = SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX;
modes.push_back(Static);
mode Off;
Off.name = "Off";
Off.value = SAPPHIRE_NITRO_GLOW_V1_MODE_OFF;
Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
SetupZones();
ReadConfiguration();
@ -91,7 +134,7 @@ void RGBController_SapphireNitroGlowV1::ReadConfiguration()
switch(controller->GetMode())
{
case SAPPHIRE_NITRO_GLOW_V1_MODE_CUSTOM:
case SAPPHIRE_NITRO_GLOW_V1_MODE_SAPPHIRE_BLUE:
active_mode = 0;
break;
@ -107,15 +150,20 @@ void RGBController_SapphireNitroGlowV1::ReadConfiguration()
active_mode = 3;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_CUSTOM:
active_mode = 4;
break;
case SAPPHIRE_NITRO_GLOW_V1_MODE_OFF:
active_mode = 0;
colors[0] = ToRGBColor(0, 0, 0);
active_mode = 5;
break;
default:
active_mode = 0;
break;
}
modes[(unsigned int)active_mode].brightness = controller->GetBrightness();
}
void RGBController_SapphireNitroGlowV1::ResizeZone(int /*zone*/, int /*new_size*/)
@ -148,4 +196,5 @@ void RGBController_SapphireNitroGlowV1::UpdateSingleLED(int /*led*/)
void RGBController_SapphireNitroGlowV1::DeviceUpdateMode()
{
controller->SetMode((unsigned char)modes[(unsigned int)active_mode].value);
controller->SetBrightness((unsigned char)modes[(unsigned int)active_mode].brightness);
}

View file

@ -61,3 +61,13 @@ void SapphireNitroGlowV1Controller::SetMode(unsigned char mode)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_MODE, mode);
}
unsigned char SapphireNitroGlowV1Controller::GetBrightness()
{
return(bus->i2c_smbus_read_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_BRIGHTNESS));
}
void SapphireNitroGlowV1Controller::SetBrightness(unsigned char brightness)
{
bus->i2c_smbus_write_byte_data(dev, SAPPHIRE_NITRO_GLOW_V1_REG_BRIGHTNESS, brightness);
}

View file

@ -12,6 +12,9 @@
#pragma once
#define SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MIN 2;
#define SAPPHITE_NITRO_GLOW_V1_BRIGHTNESS_MAX 0;
typedef unsigned char sapphire_dev_id;
enum
@ -50,6 +53,9 @@ public:
unsigned char GetMode();
void SetMode(unsigned char mode);
unsigned char GetBrightness();
void SetBrightness(unsigned char brightness);
private:
i2c_smbus_interface* bus;
sapphire_dev_id dev;