Skip to content

Commit ec1624a

Browse files
TheRogueZetaTheRogueZeta
authored andcommitted
Add brightness and manual saving to EVGA v2 controller
1 parent 99a6604 commit ec1624a

File tree

4 files changed

+86
-95
lines changed

4 files changed

+86
-95
lines changed

Controllers/EVGAGPUController/EVGAGPUv2Controller.cpp

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,9 @@ unsigned char EVGAGPUv2Controller::GetMode()
7171
}
7272
break;
7373

74-
case EVGA_GPU_V2_MODE_DIRECT:
74+
case EVGA_GPU_V2_MODE_STATIC:
7575
{
76-
//No way to detect static so just return direct.
77-
return_mode = EVGA_GPU_V2_RGB_MODE_DIRECT;
76+
return_mode = EVGA_GPU_V2_RGB_MODE_STATIC;
7877
}
7978
break;
8079

@@ -121,40 +120,31 @@ unsigned char EVGAGPUv2Controller::GetSpeed()
121120
return (unsigned char) speed_16.u16;
122121
}
123122

124-
void EVGAGPUv2Controller::SetMode(unsigned char mode, RGBColor color1, RGBColor color2, unsigned int speed)
123+
void EVGAGPUv2Controller::SetMode(uint8_t mode, RGBColor color1, RGBColor color2, uint16_t speed, uint8_t brightness)
125124
{
126-
bool boolSave = false;
127125

128126
EnableWrite(true);
129127
switch (mode)
130128
{
131129
case EVGA_GPU_V2_RGB_MODE_OFF:
132130
{
133131
SendMode(EVGA_GPU_V2_MODE_OFF);
134-
boolSave = true;
135132
}
136133
break;
137134

138-
case EVGA_GPU_V2_RGB_MODE_DIRECT:
139135
case EVGA_GPU_V2_RGB_MODE_STATIC:
140136
{
141-
SendMode(EVGA_GPU_V2_MODE_DIRECT);
142-
//Static is mode 0x01 but with SaveSettings()
143-
boolSave = (mode == EVGA_GPU_V2_RGB_MODE_STATIC);
144-
145-
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(color1), RGBGetGValue(color1), RGBGetBValue(color1));
137+
SendMode(EVGA_GPU_V2_MODE_STATIC);
138+
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(color1), RGBGetGValue(color1), RGBGetBValue(color1), brightness);
146139
}
147140
break;
148141

149142
case EVGA_GPU_V2_RGB_MODE_RAINBOW:
150143
{
151144
SendMode(EVGA_GPU_V2_MODE_RAINBOW);
152-
//OpenRGB does not do brightness yet
153-
SendBrightness(0x64); //Default = 0x64
145+
SendBrightness(brightness); //Default = 0x64
154146
// Set Rainbow speed? No control in the GUI but this register is only set in Ranbow mode.
155-
bus->i2c_smbus_write_byte_data(dev, 0x19, 0x11);
156-
157-
boolSave = true;
147+
bus->i2c_smbus_write_byte_data(dev, 0x19, 0x11);;
158148
}
159149
break;
160150

@@ -169,8 +159,8 @@ void EVGAGPUv2Controller::SetMode(unsigned char mode, RGBColor color1, RGBColor
169159
| inspection is required. |
170160
\*---------------------------------------------------------*/
171161

172-
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(color1), RGBGetGValue(color1), RGBGetBValue(color1));
173-
SendColor(EVGA_GPU_V2_REG_COLOR_B_RED, RGBGetRValue(color2), RGBGetGValue(color2), RGBGetBValue(color2));
162+
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(color1), RGBGetGValue(color1), RGBGetBValue(color1), brightness);
163+
SendColor(EVGA_GPU_V2_REG_COLOR_B_RED, RGBGetRValue(color2), RGBGetGValue(color2), RGBGetBValue(color2), brightness);
174164

175165
/*-----------------------------------------------------------------*\
176166
| Breathing mode speeds are consistent for B_TO_A and A_TO_B |
@@ -185,22 +175,15 @@ void EVGAGPUv2Controller::SetMode(unsigned char mode, RGBColor color1, RGBColor
185175
// 0x6A and 0x6B = 0x00
186176
bus->i2c_smbus_write_byte_data(dev, 0x6A, 0x00);
187177
bus->i2c_smbus_write_byte_data(dev, 0x6B, 0x00);
188-
189-
boolSave = true;
190178
}
191179
break;
192180

193181
default:
194182
break;
195183
}
196184

197-
//Disable writes and Save (if applicable)
185+
//Disable writes
198186
EnableWrite(false);
199-
200-
if(boolSave)
201-
{
202-
SaveSettings();
203-
}
204187
}
205188

206189
void EVGAGPUv2Controller::EnableWrite(bool boolEnable)
@@ -232,20 +215,20 @@ void EVGAGPUv2Controller::SaveSettings()
232215
bus->i2c_smbus_write_byte_data(dev, 0x0E, 0xE0);
233216
}
234217

235-
void EVGAGPUv2Controller::SendBrightness(unsigned char brightness)
218+
void EVGAGPUv2Controller::SendBrightness(uint8_t brightness)
236219
{
237220
bus->i2c_smbus_write_byte_data(dev, EVGA_GPU_V2_REG_COLOR_A_BRIGHTNESS, brightness);
238221
}
239222

240-
void EVGAGPUv2Controller::SendColor(unsigned char start_register, unsigned char red, unsigned char green, unsigned char blue, unsigned char brightness)
223+
void EVGAGPUv2Controller::SendColor(uint8_t start_register, uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness)
241224
{
242225
bus->i2c_smbus_write_byte_data(dev, start_register, red);
243226
bus->i2c_smbus_write_byte_data(dev, (start_register + 1), green);
244227
bus->i2c_smbus_write_byte_data(dev, (start_register + 2), blue);
245228
bus->i2c_smbus_write_byte_data(dev, (start_register + 3), brightness);
246229
}
247230

248-
void EVGAGPUv2Controller::SendMode(unsigned char mode)
231+
void EVGAGPUv2Controller::SendMode(uint8_t mode)
249232
{
250233
bus->i2c_smbus_write_byte_data(dev, EVGA_GPU_V2_REG_MODE, mode);
251234
}
@@ -264,15 +247,10 @@ void EVGAGPUv2Controller::SendSpeed(u16_to_u8 aOnTime, u16_to_u8 bOnTime, u16_to
264247
bus->i2c_smbus_write_byte_data(dev, EVGA_GPU_V2_REG_COLOR_A_ONTIME_MSB, (unsigned char) aOnTime.MSB );
265248
}
266249

267-
void EVGAGPUv2Controller::SetColor(RGBColor colorA, RGBColor colorB, bool boolSave)
250+
void EVGAGPUv2Controller::SetColor(RGBColor colorA, RGBColor colorB, uint8_t brightness)
268251
{
269252
EnableWrite(true);
270-
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(colorA), RGBGetGValue(colorA), RGBGetBValue(colorA), 0x64);
271-
SendColor(EVGA_GPU_V2_REG_COLOR_B_RED, RGBGetRValue(colorB), RGBGetGValue(colorB), RGBGetBValue(colorB), 0x64);
253+
SendColor(EVGA_GPU_V2_REG_COLOR_A_RED, RGBGetRValue(colorA), RGBGetGValue(colorA), RGBGetBValue(colorA), brightness);
254+
SendColor(EVGA_GPU_V2_REG_COLOR_B_RED, RGBGetRValue(colorB), RGBGetGValue(colorB), RGBGetBValue(colorB), brightness);
272255
EnableWrite(false);
273-
274-
if(boolSave)
275-
{
276-
SaveSettings();
277-
}
278256
}

Controllers/EVGAGPUController/EVGAGPUv2Controller.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515

1616
typedef unsigned char evga_dev_id;
1717

18-
#define SPEED_MULTIPLIER 10
18+
#define SPEED_MULTIPLIER 10
19+
#define EVGA_GPU_V2_BRIGHTNESS_MIN 0x01
20+
#define EVGA_GPU_V2_BRIGHTNESS_DEFAULT 0x64
21+
#define EVGA_GPU_V2_BRIGHTNESS_MAX 0x64
1922

2023
enum
2124
{
@@ -43,17 +46,16 @@ enum
4346
enum
4447
{
4548
EVGA_GPU_V2_RGB_MODE_OFF = 0x00,
46-
EVGA_GPU_V2_RGB_MODE_DIRECT = 0x01,
47-
EVGA_GPU_V2_RGB_MODE_STATIC = 0x02,
48-
EVGA_GPU_V2_RGB_MODE_RAINBOW = 0x03,
49-
EVGA_GPU_V2_RGB_MODE_BREATHING = 0x04,
50-
EVGA_GPU_V2_RGB_MODE_PULSE = 0x05,
49+
EVGA_GPU_V2_RGB_MODE_STATIC = 0x01,
50+
EVGA_GPU_V2_RGB_MODE_RAINBOW = 0x02,
51+
EVGA_GPU_V2_RGB_MODE_BREATHING = 0x03,
52+
EVGA_GPU_V2_RGB_MODE_PULSE = 0x04,
5153
};
5254

5355
enum
5456
{
5557
EVGA_GPU_V2_MODE_OFF = 0x00,
56-
EVGA_GPU_V2_MODE_DIRECT = 0x01,
58+
EVGA_GPU_V2_MODE_STATIC = 0x01,
5759
EVGA_GPU_V2_MODE_RAINBOW = 0x0F,
5860
EVGA_GPU_V2_MODE_BREATHING = 0x22,
5961
};
@@ -92,15 +94,15 @@ class EVGAGPUv2Controller
9294
unsigned char GetMode();
9395
unsigned char GetSpeed();
9496

95-
void SetColor(RGBColor colorA, RGBColor colorB, bool boolSave);
96-
void SetMode(unsigned char mode, RGBColor color1, RGBColor color2, unsigned int speed);
97+
void SetColor(RGBColor colorA, RGBColor colorB, uint8_t brightness);
98+
void SetMode(uint8_t mode, RGBColor color1, RGBColor color2, uint16_t speed, uint8_t brightness);
99+
void SaveSettings();
97100

98101
private:
99102
void EnableWrite(bool enable);
100-
void SaveSettings();
101-
void SendBrightness(unsigned char brightness = 0x64);
102-
void SendColor(unsigned char start_register, unsigned char red, unsigned char green, unsigned char blue, unsigned char brightness = 0x64);
103-
void SendMode(unsigned char mode);
103+
void SendBrightness(uint8_t brightness);
104+
void SendColor(uint8_t start_register, uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness);
105+
void SendMode(uint8_t mode);
104106
void SendSpeed(u16_to_u8 aOnTime, u16_to_u8 bOnTime, u16_to_u8 b2a, u16_to_u8 a2b, u16_to_u8 speed_un);
105107

106108
i2c_smbus_interface* bus;

Controllers/EVGAGPUController/RGBController_EVGAGPUv2.cpp

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,60 +21,64 @@ RGBController_EVGAGPUv2::RGBController_EVGAGPUv2(EVGAGPUv2Controller* evga_ptr)
2121
type = DEVICE_TYPE_GPU;
2222

2323
mode Off;
24-
Off.name = "Off";
25-
Off.value = EVGA_GPU_V2_RGB_MODE_OFF;
26-
Off.flags = 0; //pretty sure not needed
27-
Off.color_mode = MODE_COLORS_NONE;
24+
Off.name = "Off";
25+
Off.value = EVGA_GPU_V2_RGB_MODE_OFF;
26+
Off.flags = 0; //pretty sure not needed
27+
Off.color_mode = MODE_COLORS_NONE;
2828
modes.push_back(Off);
2929

30-
mode Direct;
31-
Direct.name = "Direct";
32-
Direct.value = EVGA_GPU_V2_RGB_MODE_DIRECT;
33-
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
34-
Direct.color_mode = MODE_COLORS_PER_LED;
35-
Direct.colors_min = 1;
36-
Direct.colors_max = 1;
37-
modes.push_back(Direct);
38-
3930
mode Static;
40-
Static.name = "Static";
41-
Static.value = EVGA_GPU_V2_RGB_MODE_STATIC;
42-
Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
43-
Static.color_mode = MODE_COLORS_PER_LED;
44-
Static.colors_min = 1;
45-
Static.colors_max = 1;
31+
Static.name = "Direct";
32+
Static.value = EVGA_GPU_V2_RGB_MODE_STATIC;
33+
Static.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE;
34+
Static.color_mode = MODE_COLORS_PER_LED;
35+
Static.colors_min = 1;
36+
Static.colors_max = 1;
37+
Static.brightness_min = EVGA_GPU_V2_BRIGHTNESS_MIN;
38+
Static.brightness = EVGA_GPU_V2_BRIGHTNESS_DEFAULT;
39+
Static.brightness_max = EVGA_GPU_V2_BRIGHTNESS_MAX;
40+
4641
modes.push_back(Static);
4742

4843
mode Rainbow;
49-
Rainbow.name = "Spectrum Cycle";
50-
Rainbow.value = EVGA_GPU_V2_RGB_MODE_RAINBOW;
51-
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS;
52-
Rainbow.color_mode = MODE_COLORS_NONE;
44+
Rainbow.name = "Spectrum Cycle";
45+
Rainbow.value = EVGA_GPU_V2_RGB_MODE_RAINBOW;
46+
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
47+
Rainbow.color_mode = MODE_COLORS_NONE;
48+
Rainbow.brightness_min = EVGA_GPU_V2_BRIGHTNESS_MIN;
49+
Rainbow.brightness = EVGA_GPU_V2_BRIGHTNESS_DEFAULT;
50+
Rainbow.brightness_max = EVGA_GPU_V2_BRIGHTNESS_MAX;
5351
modes.push_back(Rainbow);
5452

5553
mode Breathing;
56-
Breathing.name = "Breathing";
57-
Breathing.value = EVGA_GPU_V2_RGB_MODE_BREATHING;
58-
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
59-
Breathing.speed_min = EVGA_GPU_V2_SPEED_BREATHING_SLOWEST;
60-
Breathing.speed = EVGA_GPU_V2_SPEED_BREATHING_NORMAL;
61-
Breathing.speed_max = EVGA_GPU_V2_SPEED_BREATHING_FASTEST;
62-
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
63-
Breathing.colors_min = 1;
64-
Breathing.colors_max = 2;
54+
Breathing.name = "Breathing";
55+
Breathing.value = EVGA_GPU_V2_RGB_MODE_BREATHING;
56+
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE;
57+
Breathing.speed_min = EVGA_GPU_V2_SPEED_BREATHING_SLOWEST;
58+
Breathing.speed = EVGA_GPU_V2_SPEED_BREATHING_NORMAL;
59+
Breathing.speed_max = EVGA_GPU_V2_SPEED_BREATHING_FASTEST;
60+
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
61+
Breathing.brightness_min = EVGA_GPU_V2_BRIGHTNESS_MIN;
62+
Breathing.brightness = EVGA_GPU_V2_BRIGHTNESS_DEFAULT;
63+
Breathing.brightness_max = EVGA_GPU_V2_BRIGHTNESS_MAX;
64+
Breathing.colors_min = 1;
65+
Breathing.colors_max = 2;
6566
Breathing.colors.resize(1);
6667
modes.push_back(Breathing);
6768

6869
mode Pulse;
69-
Pulse.name = "Flashing";
70-
Pulse.value = EVGA_GPU_V2_RGB_MODE_PULSE;
71-
Pulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
72-
Pulse.speed_min = EVGA_GPU_V2_SPEED_PULSE_SLOWEST;
73-
Pulse.speed = EVGA_GPU_V2_SPEED_PULSE_NORMAL;
74-
Pulse.speed_max = EVGA_GPU_V2_SPEED_PULSE_FASTEST;
75-
Pulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
76-
Pulse.colors_min = 1;
77-
Pulse.colors_max = 2;
70+
Pulse.name = "Flashing";
71+
Pulse.value = EVGA_GPU_V2_RGB_MODE_PULSE;
72+
Pulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE;
73+
Pulse.speed_min = EVGA_GPU_V2_SPEED_PULSE_SLOWEST;
74+
Pulse.speed = EVGA_GPU_V2_SPEED_PULSE_NORMAL;
75+
Pulse.speed_max = EVGA_GPU_V2_SPEED_PULSE_FASTEST;
76+
Pulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
77+
Pulse.colors_min = 1;
78+
Pulse.colors_max = 2;
79+
Pulse.brightness_min = EVGA_GPU_V2_BRIGHTNESS_MIN;
80+
Pulse.brightness = EVGA_GPU_V2_BRIGHTNESS_DEFAULT;
81+
Pulse.brightness_max = EVGA_GPU_V2_BRIGHTNESS_MAX;
7882
Pulse.colors.resize(1);
7983
modes.push_back(Pulse);
8084

@@ -108,6 +112,7 @@ RGBController_EVGAGPUv2::RGBController_EVGAGPUv2(EVGAGPUv2Controller* evga_ptr)
108112

109113
// Load speed settings from the card:
110114
modes[active_mode].speed = evga->GetSpeed();
115+
modes[active_mode].brightness = evga->GetBrightnessA();
111116
}
112117

113118
RGBController_EVGAGPUv2::~RGBController_EVGAGPUv2()
@@ -169,7 +174,7 @@ void RGBController_EVGAGPUv2::DeviceUpdateLEDs()
169174
| modes and as such colorB will always be black (0x000000) |
170175
\*---------------------------------------------------------*/
171176

172-
evga->SetColor(colors[0], 0, (modes[active_mode].value != EVGA_GPU_V2_RGB_MODE_DIRECT) );
177+
evga->SetColor(colors[0], /* colorB*/ 0, modes[active_mode].brightness);
173178
}
174179

175180
void RGBController_EVGAGPUv2::UpdateZoneLEDs(int /*zone*/)
@@ -184,7 +189,7 @@ void RGBController_EVGAGPUv2::UpdateSingleLED(int /*led*/)
184189

185190
void RGBController_EVGAGPUv2::SetCustomMode()
186191
{
187-
active_mode = getModeIndex(EVGA_GPU_V2_RGB_MODE_DIRECT);
192+
active_mode = getModeIndex(EVGA_GPU_V2_RGB_MODE_STATIC);
188193
}
189194

190195
void RGBController_EVGAGPUv2::DeviceUpdateMode()
@@ -204,5 +209,10 @@ void RGBController_EVGAGPUv2::DeviceUpdateMode()
204209
colorB = (modes[active_mode].colors.size() == 2) ? modes[active_mode].colors[1] : 0 ;
205210
}
206211

207-
evga->SetMode( modes[active_mode].value, colorA, colorB, modes[active_mode].speed);
212+
evga->SetMode( modes[active_mode].value, colorA, colorB, modes[active_mode].speed, modes[active_mode].brightness);
213+
}
214+
215+
void RGBController_EVGAGPUv2::DeviceSaveMode()
216+
{
217+
evga->SaveSettings();
208218
}

Controllers/EVGAGPUController/RGBController_EVGAGPUv2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class RGBController_EVGAGPUv2 : public RGBController
2828

2929
void SetCustomMode();
3030
void DeviceUpdateMode();
31+
void DeviceSaveMode();
3132

3233
private:
3334
int getModeIndex(unsigned char mode_value);

0 commit comments

Comments
 (0)