RGBController API Overhaul

* Reorganize and clean up RGBController API functions
    * Add functions to get protected RGBController member values
    * Make NetworkClient, ProfileManager, and ResourceManager friend classes so they can access protected members
    * Protected previously-public RGBController members
        * Information strings (name, vendor, description, version, serial location)
        * Device type
        * Active mode
        * Flags
        * LEDs vector
        * LED alternate names vector
        * Modes vector
        * Colors vector
        * Zones vector
    * Add CONTROLLER_FLAG_HIDDEN to allow plugins to hide controllers from control GUI
    * Add update reason codes to RGBController update callback and signal updates on more RGBController events
    * Add loop zone types and segmented zone type
    * Add matrix map field to segments
    * Rework matrix_map_type from using pointers to vector to prevent memory leaks
    * Rework KeyboardLayoutManager to return new matrix_map_type
    * Add access mutex to RGBController API
    * Add per-zone modes ot RGBController API
    * Add JSON description functions to RGBController API
This commit is contained in:
Adam Honse
2025-09-23 20:38:37 -05:00
parent fa20f4319a
commit dfd8656d9f
655 changed files with 9459 additions and 9022 deletions

View File

@@ -293,7 +293,6 @@ void RGBController_LianLiGAIITrinity::SetupZones()
gaii_trinity.leds_min = 2;
gaii_trinity.leds_max = 2;
gaii_trinity.leds_count = 2;
gaii_trinity.matrix_map = NULL;
zones.push_back(gaii_trinity);
led inner_led;
@@ -311,13 +310,6 @@ void RGBController_LianLiGAIITrinity::SetupZones()
zones[0].colors[1] = ToRGBColor(0, 0, 255);
}
void RGBController_LianLiGAIITrinity::ResizeZone(int /* zone */, int /* new_size */)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_LianLiGAIITrinity::DeviceUpdateLEDs()
{
switch(modes[active_mode].value)
@@ -402,12 +394,12 @@ void RGBController_LianLiGAIITrinity::DeviceUpdateLEDs()
}
}
void RGBController_LianLiGAIITrinity::UpdateZoneLEDs(int /* zone */)
void RGBController_LianLiGAIITrinity::DeviceUpdateZoneLEDs(int /* zone */)
{
DeviceUpdateLEDs();
}
void RGBController_LianLiGAIITrinity::UpdateSingleLED(int /* led */)
void RGBController_LianLiGAIITrinity::DeviceUpdateSingleLED(int /* led */)
{
DeviceUpdateLEDs();
}

View File

@@ -22,11 +22,9 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -166,7 +166,6 @@ void RGBController_LianLiStrimerLConnect::Init_Controller()
new_zone.leds_min = 20;
new_zone.leds_max = 20;
new_zone.leds_count = new_zone.leds_max;
new_zone.matrix_map = NULL;
zones.push_back(new_zone);
}
@@ -179,7 +178,6 @@ void RGBController_LianLiStrimerLConnect::Init_Controller()
new_zone.leds_min = 27;
new_zone.leds_max = 27;
new_zone.leds_count = new_zone.leds_max;
new_zone.matrix_map = NULL;
zones.push_back(new_zone);
}
}
@@ -211,13 +209,6 @@ void RGBController_LianLiStrimerLConnect::SetupZones()
SetupColors();
}
void RGBController_LianLiStrimerLConnect::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
bool RGBController_LianLiStrimerLConnect::TimeToSend()
{
/*-----------------------------------------------------*\
@@ -235,7 +226,7 @@ void RGBController_LianLiStrimerLConnect::DeviceUpdateLEDs()
for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
UpdateZoneLEDs((int)zone_idx);
DeviceUpdateZoneLEDs((int)zone_idx);
}
controller->SendApply();
@@ -247,7 +238,7 @@ void RGBController_LianLiStrimerLConnect::DeviceUpdateLEDs()
}
}
void RGBController_LianLiStrimerLConnect::UpdateZoneLEDs(int zone)
void RGBController_LianLiStrimerLConnect::DeviceUpdateZoneLEDs(int zone)
{
mode current_mode = modes[active_mode];
@@ -255,9 +246,9 @@ void RGBController_LianLiStrimerLConnect::UpdateZoneLEDs(int zone)
controller->SetMode(current_mode.value, zone, current_mode.speed, current_mode.brightness, current_mode.direction, false);
}
void RGBController_LianLiStrimerLConnect::UpdateSingleLED(int led)
void RGBController_LianLiStrimerLConnect::DeviceUpdateSingleLED(int led)
{
UpdateZoneLEDs(GetLED_Zone(led));
DeviceUpdateZoneLEDs(GetLED_Zone(led));
controller->SendApply();
}

View File

@@ -23,11 +23,10 @@ public:
~RGBController_LianLiStrimerLConnect();
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -355,17 +355,6 @@ RGBController_LianLiUniHubAL::RGBController_LianLiUniHubAL(LianLiUniHubALControl
RGBController_LianLiUniHubAL::~RGBController_LianLiUniHubAL()
{
/*---------------------------------------------------------*\
| Delete the matrix map |
\*---------------------------------------------------------*/
for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++)
{
if(zones[zone_index].matrix_map != NULL)
{
delete zones[zone_index].matrix_map;
}
}
delete controller;
}
@@ -403,10 +392,7 @@ void RGBController_LianLiUniHubAL::SetupZones()
zones[channel_idx].type = ZONE_TYPE_MATRIX;
zones[channel_idx].leds_min = 0;
zones[channel_idx].leds_max = UNIHUB_AL_CHAN_LED_COUNT;
zones[channel_idx].matrix_map = new matrix_map_type;
zones[channel_idx].matrix_map->height = 8;
zones[channel_idx].matrix_map->width = 35;
zones[channel_idx].matrix_map->map = (unsigned int *)&matrix_map;
zones[channel_idx].matrix_map.Set(8, 35, (unsigned int *)&matrix_map);
}
else // Treat as regular LED strip
{
@@ -436,7 +422,7 @@ void RGBController_LianLiUniHubAL::SetupZones()
SetupColors();
}
void RGBController_LianLiUniHubAL::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHubAL::DeviceResizeZone(int zone, int new_size)
{
if((size_t) zone >= zones.size())
{
@@ -467,7 +453,7 @@ void RGBController_LianLiUniHubAL::DeviceUpdateLEDs()
}
}
void RGBController_LianLiUniHubAL::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHubAL::DeviceUpdateZoneLEDs(int zone)
{
if(!initializedMode)
{
@@ -479,7 +465,7 @@ void RGBController_LianLiUniHubAL::UpdateZoneLEDs(int zone)
controller->SetChannelLEDs(zone, zones[zone].colors, zones[zone].leds_count, brightness_scale);
}
void RGBController_LianLiUniHubAL::UpdateSingleLED(int /* led */)
void RGBController_LianLiUniHubAL::DeviceUpdateSingleLED(int /* led */)
{
DeviceUpdateMode();

View File

@@ -25,11 +25,11 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -265,14 +265,12 @@ void RGBController_LianLiUniHub::SetupZones()
leds.push_back(new_led);
}
zones[channel_idx].matrix_map = NULL;
}
SetupColors();
}
void RGBController_LianLiUniHub::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHub::DeviceResizeZone(int zone, int new_size)
{
if((size_t) zone >= zones.size())
{
@@ -303,7 +301,7 @@ void RGBController_LianLiUniHub::DeviceUpdateLEDs()
controller->Synchronize();
}
void RGBController_LianLiUniHub::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHub::DeviceUpdateZoneLEDs(int zone)
{
if(!initializedMode)
{
@@ -318,7 +316,7 @@ void RGBController_LianLiUniHub::UpdateZoneLEDs(int zone)
controller->Synchronize();
}
void RGBController_LianLiUniHub::UpdateSingleLED(int led)
void RGBController_LianLiUniHub::DeviceUpdateSingleLED(int led)
{
if(!initializedMode)
{

View File

@@ -22,11 +22,11 @@ public:
RGBController_LianLiUniHub(LianLiUniHubController* controller_ptr);
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -87,11 +87,11 @@ void LianLiUniHubSLController::UpdateMode(const std::vector<zone> &zones, const
for (size_t channel = 0; channel < zones.size(); channel++)
{
UpdateZoneLEDs(channel, zones[channel], active);
DeviceUpdateZoneLEDs(channel, zones[channel], active);
}
}
void LianLiUniHubSLController::UpdateZoneLEDs(size_t channel, const zone &z, const mode &active)
void LianLiUniHubSLController::DeviceUpdateZoneLEDs(size_t channel, const zone &z, const mode &active)
{
/*---------------------------------*\
| Handle per-LED color mode |

View File

@@ -93,7 +93,7 @@ public:
std::string GetLocation() { return this->location; };
void UpdateMode(const std::vector<zone> &zones, const mode &active);
void UpdateZoneLEDs(size_t channel, const zone &z, const mode &active);
void DeviceUpdateZoneLEDs(size_t channel, const zone &z, const mode &active);
private:
hid_device *device;
@@ -109,11 +109,11 @@ private:
unsigned char ConvertBrightness(unsigned int brightness);
unsigned char ConvertSpeed(unsigned int speed);
unsigned char ConvertDirection(unsigned int direction);
void SendActivate(size_t channel, unsigned char num_fans);
void SendMerge();
void SendColor(size_t channel, const unsigned char *color_buf, size_t color_buf_len);
void SendMode(size_t channel, const mode &active);
void LogBuffer(const char *operation, const unsigned char *buf, size_t len);
};

View File

@@ -305,7 +305,6 @@ void RGBController_LianLiUniHubSL::SetupZones()
zones[zone_idx].name = "Channel ";
zones[zone_idx].name.append(std::to_string(zone_idx + 1));
zones[zone_idx].type = ZONE_TYPE_LINEAR;
zones[zone_idx].matrix_map = NULL;
zones[zone_idx].leds_min = 0;
zones[zone_idx].leds_max = UNIHUB_SL_MAX_FAN_PER_CHANNEL;
@@ -330,7 +329,7 @@ void RGBController_LianLiUniHubSL::SetupZones()
SetupColors();
}
void RGBController_LianLiUniHubSL::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHubSL::DeviceResizeZone(int zone, int new_size)
{
if((size_t)zone >= zones.size())
{
@@ -350,16 +349,16 @@ void RGBController_LianLiUniHubSL::DeviceUpdateLEDs()
DeviceUpdateMode();
}
void RGBController_LianLiUniHubSL::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHubSL::DeviceUpdateZoneLEDs(int zone)
{
if(!initialized)
{
return DeviceUpdateMode();
}
controller->UpdateZoneLEDs(zone, zones[zone], modes[active_mode]);
controller->DeviceUpdateZoneLEDs(zone, zones[zone], modes[active_mode]);
}
void RGBController_LianLiUniHubSL::UpdateSingleLED(int /* led */)
void RGBController_LianLiUniHubSL::DeviceUpdateSingleLED(int /* led */)
{
DeviceUpdateMode();
}

View File

@@ -23,11 +23,11 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -369,7 +369,7 @@ void RGBController_LianLiUniHubSLInfinity::SetupZones()
SetupColors();
}
void RGBController_LianLiUniHubSLInfinity::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHubSLInfinity::DeviceResizeZone(int zone, int new_size)
{
if((size_t) zone >= zones.size())
{
@@ -400,7 +400,7 @@ void RGBController_LianLiUniHubSLInfinity::DeviceUpdateLEDs()
}
}
void RGBController_LianLiUniHubSLInfinity::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHubSLInfinity::DeviceUpdateZoneLEDs(int zone)
{
if(!initializedMode)
{
@@ -412,7 +412,7 @@ void RGBController_LianLiUniHubSLInfinity::UpdateZoneLEDs(int zone)
controller->SetChannelLEDs(zone, zones[zone].colors, zones[zone].leds_count, brightness_scale);
}
void RGBController_LianLiUniHubSLInfinity::UpdateSingleLED(int /* led */)
void RGBController_LianLiUniHubSLInfinity::DeviceUpdateSingleLED(int /* led */)
{
DeviceUpdateMode();

View File

@@ -27,11 +27,11 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -368,7 +368,7 @@ void RGBController_LianLiUniHubSLV2::SetupZones()
SetupColors();
}
void RGBController_LianLiUniHubSLV2::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHubSLV2::DeviceResizeZone(int zone, int new_size)
{
if((size_t) zone >= zones.size())
{
@@ -399,7 +399,7 @@ void RGBController_LianLiUniHubSLV2::DeviceUpdateLEDs()
}
}
void RGBController_LianLiUniHubSLV2::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHubSLV2::DeviceUpdateZoneLEDs(int zone)
{
if(!initializedMode)
{
@@ -411,7 +411,7 @@ void RGBController_LianLiUniHubSLV2::UpdateZoneLEDs(int zone)
controller->SetChannelLEDs(zone, zones[zone].colors, zones[zone].leds_count, brightness_scale);
}
void RGBController_LianLiUniHubSLV2::UpdateSingleLED(int /* led */)
void RGBController_LianLiUniHubSLV2::DeviceUpdateSingleLED(int /* led */)
{
DeviceUpdateMode();

View File

@@ -26,11 +26,11 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -403,14 +403,12 @@ void RGBController_LianLiUniHub_AL10::SetupZones()
leds.push_back(new_led);
}
zones[channel_idx].matrix_map = NULL;
}
SetupColors();
}
void RGBController_LianLiUniHub_AL10::ResizeZone(int zone, int new_size)
void RGBController_LianLiUniHub_AL10::DeviceResizeZone(int zone, int new_size)
{
if((size_t) zone >= zones.size())
{
@@ -441,7 +439,7 @@ void RGBController_LianLiUniHub_AL10::DeviceUpdateLEDs()
controller->Synchronize();
}
void RGBController_LianLiUniHub_AL10::UpdateZoneLEDs(int zone)
void RGBController_LianLiUniHub_AL10::DeviceUpdateZoneLEDs(int zone)
{
if(!initializedMode)
{
@@ -456,7 +454,7 @@ void RGBController_LianLiUniHub_AL10::UpdateZoneLEDs(int zone)
controller->Synchronize();
}
void RGBController_LianLiUniHub_AL10::UpdateSingleLED(int led)
void RGBController_LianLiUniHub_AL10::DeviceUpdateSingleLED(int led)
{
if(!initializedMode)
{

View File

@@ -24,11 +24,11 @@ public:
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();

View File

@@ -53,7 +53,6 @@ void RGBController_LianLiUniversalScreen::SetupZones()
Screen.leds_min = 60;
Screen.leds_max = 60;
Screen.leds_count = 60;
Screen.matrix_map = NULL;
zones.push_back(Screen);
for(std::size_t led_idx = 0; led_idx < Screen.leds_count; led_idx++)
@@ -69,22 +68,17 @@ void RGBController_LianLiUniversalScreen::SetupZones()
SetupColors();
}
void RGBController_LianLiUniversalScreen::ResizeZone(int /*zone*/, int /*new_size*/)
{
}
void RGBController_LianLiUniversalScreen::DeviceUpdateLEDs()
{
controller->SetLedColors(colors.data(), colors.size());
}
void RGBController_LianLiUniversalScreen::UpdateZoneLEDs(int /*zone*/)
void RGBController_LianLiUniversalScreen::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_LianLiUniversalScreen::UpdateSingleLED(int /*led*/)
void RGBController_LianLiUniversalScreen::DeviceUpdateSingleLED(int /*led*/)
{
DeviceUpdateLEDs();
}

View File

@@ -20,11 +20,10 @@ public:
RGBController_LianLiUniversalScreen(LianLiUniversalScreenController* controller_ptr);
void SetupZones();
void ResizeZone(int zone, int new_size);
void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void DeviceUpdateZoneLEDs(int zone);
void DeviceUpdateSingleLED(int led);
void DeviceUpdateMode();