Add color buffer vector to all RGBController drivers, so that color patterns may be filled in by the application and updated all at once via an UpdateLEDs function

This commit is contained in:
Adam Honse 2019-08-23 01:31:39 -05:00
parent 5bc80cce96
commit 63bf13faac
13 changed files with 85 additions and 38 deletions

View file

@ -50,10 +50,11 @@ typedef struct
class RGBController
{
public:
std::string name; /* controller name */
std::vector<led> leds; /* LEDs */
std::vector<zone> zones; /* Zones */
std::vector<mode> modes; /* Modes */
std::string name; /* controller name */
std::vector<led> leds; /* LEDs */
std::vector<zone> zones; /* Zones */
std::vector<mode> modes; /* Modes */
std::vector<RGBColor> colors; /* Color buffer */
virtual int GetMode() = 0;
virtual void SetMode(int mode) = 0;
@ -61,4 +62,5 @@ public:
virtual void SetAllLEDs(RGBColor color) = 0;
virtual void SetAllZoneLEDs(int zone, RGBColor color) = 0;
virtual void SetLED(int led, RGBColor color) = 0;
virtual void UpdateLEDs() = 0;
};

View file

@ -93,6 +93,25 @@ void RGBController_Aura::SetLED(int led, RGBColor color)
}
}
void RGBController_Aura::UpdateLEDs()
{
for(int led = 0; led < colors.size(); led++)
{
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
if (GetMode() == 0)
{
aura->SetLEDColorDirect(led, red, grn, blu);
}
else
{
aura->SetLEDColorEffect(led, red, grn, blu);
}
}
}
RGBController_Aura::RGBController_Aura(AuraController * aura_ptr)
{
std::vector<unsigned char> aura_channels;
@ -133,6 +152,7 @@ RGBController_Aura::RGBController_Aura(AuraController * aura_ptr)
new_led->name = aura->GetChannelName(i);
leds.push_back(*new_led);
colors.push_back(0x00000000);
}
std::vector<unsigned char> aura_zones;

View file

@ -22,6 +22,7 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
private:
AuraController* aura;

View file

@ -57,6 +57,11 @@ void RGBController_Corsair::SetLED(int led, RGBColor color)
corsair->SetLEDColor(led, red, grn, blu);
}
void RGBController_Corsair::UpdateLEDs()
{
}
RGBController_Corsair::RGBController_Corsair(CorsairController* corsair_ptr)
{
corsair = corsair_ptr;
@ -81,6 +86,7 @@ RGBController_Corsair::RGBController_Corsair(CorsairController* corsair_ptr)
new_led->name = "Corsair LED";
leds.push_back(*new_led);
colors.push_back(0x00000000);
}
zone new_zone;

View file

@ -22,6 +22,7 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
private:
CorsairController* corsair;

View file

@ -93,6 +93,11 @@ void RGBController_CorsairPro::SetLED(int led, RGBColor color)
corsair->ApplyColors();
}
void RGBController_CorsairPro::UpdateLEDs()
{
}
RGBController_CorsairPro::RGBController_CorsairPro(CorsairProController* corsair_ptr)
{
corsair = corsair_ptr;
@ -124,6 +129,7 @@ RGBController_CorsairPro::RGBController_CorsairPro(CorsairProController* corsair
new_led->name = "Corsair Pro LED";
leds.push_back(*new_led);
colors.push_back(0x00000000);
}
zone new_zone;

View file

@ -22,6 +22,7 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
private:
CorsairProController* corsair;

View file

@ -57,6 +57,11 @@ void RGBController_HyperX::SetLED(int led, RGBColor color)
hyperx->SetLEDColor(led, red, grn, blu);
}
void RGBController_HyperX::UpdateLEDs()
{
}
RGBController_HyperX::RGBController_HyperX(HyperXController* hyperx_ptr)
{
hyperx = hyperx_ptr;
@ -86,6 +91,7 @@ RGBController_HyperX::RGBController_HyperX(HyperXController* hyperx_ptr)
new_led->name = "HyperX LED";
leds.push_back(*new_led);
colors.push_back(0x00000000);
}
zone new_zone;

View file

@ -22,6 +22,7 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
private:
HyperXController* hyperx;

View file

@ -78,5 +78,10 @@ void RGBController_LEDStrip::SetLED(int led, RGBColor color)
{
colors[led] = color;
strip->SetLEDs(colors);
}
void RGBController_LEDStrip::UpdateLEDs()
{
strip->SetLEDs(colors);
}

View file

@ -22,8 +22,8 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
private:
std::vector<RGBColor> colors;
LEDStripController* strip;
};

View file

@ -90,7 +90,7 @@ void RGBController_OpenRazer::SetCustomMode()
SetMode(RAZER_MODE_CUSTOM);
}
void RGBController_OpenRazer::Output()
void RGBController_OpenRazer::UpdateLEDs()
{
switch(type)
{
@ -107,7 +107,7 @@ void RGBController_OpenRazer::Output()
}
else
{
output_array_size = 3 + (color_buffer.size() * 3);
output_array_size = 3 + (colors.size() * 3);
output_offset = 3;
}
@ -118,14 +118,14 @@ void RGBController_OpenRazer::Output()
{
output_array[0] = 0;
output_array[1] = 0;
output_array[2] = color_buffer.size() - 1;
output_array[2] = colors.size() - 1;
}
for(int i = 0; i < color_buffer.size(); i++)
for(int i = 0; i < colors.size(); i++)
{
output_array[(i * 3) + 0 + output_offset] = (char)RGBGetRValue(color_buffer[i]);
output_array[(i * 3) + 1 + output_offset] = (char)RGBGetGValue(color_buffer[i]);
output_array[(i * 3) + 2 + output_offset] = (char)RGBGetBValue(color_buffer[i]);
output_array[(i * 3) + 0 + output_offset] = (char)RGBGetRValue(colors[i]);
output_array[(i * 3) + 1 + output_offset] = (char)RGBGetGValue(colors[i]);
output_array[(i * 3) + 2 + output_offset] = (char)RGBGetBValue(colors[i]);
}
if(type == RAZER_TYPE_MATRIX_NOFRAME)
@ -149,14 +149,14 @@ void RGBController_OpenRazer::Output()
char output_array[output_array_size];
char update_value = 0;
output_array[0] = (char)RGBGetRValue(color_buffer[0]);
output_array[1] = (char)RGBGetGValue(color_buffer[0]);
output_array[2] = (char)RGBGetBValue(color_buffer[0]);
output_array[0] = (char)RGBGetRValue(colors[0]);
output_array[1] = (char)RGBGetGValue(colors[0]);
output_array[2] = (char)RGBGetBValue(colors[0]);
logo_led_rgb.write(output_array, output_array_size);
output_array[0] = (char)RGBGetRValue(color_buffer[1]);
output_array[1] = (char)RGBGetGValue(color_buffer[1]);
output_array[2] = (char)RGBGetBValue(color_buffer[1]);
output_array[0] = (char)RGBGetRValue(colors[1]);
output_array[1] = (char)RGBGetGValue(colors[1]);
output_array[2] = (char)RGBGetBValue(colors[1]);
scroll_led_rgb.write(output_array, output_array_size);
logo_led_rgb.flush();
@ -173,12 +173,12 @@ void RGBController_OpenRazer::Output()
void RGBController_OpenRazer::SetAllLEDs(RGBColor color)
{
for(int i = 0; i < color_buffer.size(); i++)
for(int i = 0; i < colors.size(); i++)
{
color_buffer[i] = color;
colors[i] = color;
}
Output();
UpdateLEDs();
}
void RGBController_OpenRazer::SetAllZoneLEDs(int zone, RGBColor color)
@ -187,18 +187,18 @@ void RGBController_OpenRazer::SetAllZoneLEDs(int zone, RGBColor color)
{
for (int y = 0; y < zones[zone].map[x].size(); y++)
{
color_buffer[zones[zone].map[x][y]] = color;
colors[zones[zone].map[x][y]] = color;
}
}
Output();
UpdateLEDs();
}
void RGBController_OpenRazer::SetLED(int led, RGBColor color)
{
color_buffer[led] = color;
colors[led] = color;
Output();
UpdateLEDs();
}
static std::string GetDeviceTypeString(std::string dev_path)
@ -339,7 +339,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 16; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 7; i++)
@ -414,7 +414,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 21; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 9; i++)
@ -489,7 +489,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 2; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
led logo_led;
@ -525,7 +525,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for(int i = 0; i < 12; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 12; i++)
@ -555,7 +555,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 1; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
led logo_led;
@ -579,7 +579,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for(int i = 0; i < 9; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 1; i++)
@ -627,7 +627,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for(int i = 0; i < 15; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 15; i++)
@ -657,7 +657,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 1; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
led logo_led;
@ -681,7 +681,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for(int i = 0; i < 15; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
for (int i = 0; i < 15; i++)
@ -712,7 +712,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (int i = 0; i < 1; i++)
{
RGBColor new_color = 0x00000000;
color_buffer.push_back(new_color);
colors.push_back(new_color);
}
led logo_led;

View file

@ -66,16 +66,14 @@ public:
void SetAllLEDs(RGBColor color);
void SetAllZoneLEDs(int zone, RGBColor color);
void SetLED(int led, RGBColor color);
void UpdateLEDs();
unsigned int device;
private:
std::vector<RGBColor> color_buffer;
void SetupMatrixDevice(std::string dev_path);
void SetupNonMatrixDevice(std::string dev_path);
unsigned int GetTypeFromDeviceName(std::string dev_name);
void Output();
unsigned int type;