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

@@ -257,13 +257,7 @@ RGBController_QMKOpenRGBRev9::RGBController_QMKOpenRGBRev9(QMKOpenRGBRev9Control
RGBController_QMKOpenRGBRev9::~RGBController_QMKOpenRGBRev9()
{
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;
}
void RGBController_QMKOpenRGBRev9::SetupZones()
@@ -350,10 +344,7 @@ void RGBController_QMKOpenRGBRev9::SetupZones()
keys_zone.leds_min = number_of_key_leds;
keys_zone.leds_max = keys_zone.leds_min;
keys_zone.leds_count = keys_zone.leds_min;
keys_zone.matrix_map = new matrix_map_type;
keys_zone.matrix_map->width = (unsigned int)matrix_map[0].size();
keys_zone.matrix_map->height = (unsigned int)matrix_map.size();
keys_zone.matrix_map->map = flat_matrix_map.data();
keys_zone.matrix_map.Set((unsigned int)matrix_map.size(), (unsigned int)matrix_map[0].size(), flat_matrix_map.data());
zones.push_back(keys_zone);
/*---------------------------------------------------------*\
@@ -367,10 +358,7 @@ void RGBController_QMKOpenRGBRev9::SetupZones()
underglow_zone.leds_min = number_of_underglow_leds;
underglow_zone.leds_max = underglow_zone.leds_min;
underglow_zone.leds_count = underglow_zone.leds_min;
underglow_zone.matrix_map = new matrix_map_type;
underglow_zone.matrix_map->width = (unsigned int)underglow_map[0].size();
underglow_zone.matrix_map->height = (unsigned int)underglow_map.size();
underglow_zone.matrix_map->map = flat_underglow_map.data();
underglow_zone.matrix_map.Set((unsigned int)underglow_map.size(), (unsigned int)underglow_map[0].size(), flat_underglow_map.data());
zones.push_back(underglow_zone);
}
@@ -404,24 +392,17 @@ void RGBController_QMKOpenRGBRev9::SetupZones()
}
}
void RGBController_QMKOpenRGBRev9::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_QMKOpenRGBRev9::DeviceUpdateLEDs()
{
controller->DirectModeSetLEDs(colors, controller->GetTotalNumberOfLEDs());
}
void RGBController_QMKOpenRGBRev9::UpdateZoneLEDs(int /*zone*/)
void RGBController_QMKOpenRGBRev9::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_QMKOpenRGBRev9::UpdateSingleLED(int led)
void RGBController_QMKOpenRGBRev9::DeviceUpdateSingleLED(int led)
{
RGBColor color = colors[led];
unsigned char red = RGBGetRValue(color);

View File

@@ -31,11 +31,10 @@ public:
~RGBController_QMKOpenRGBRev9();
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

@@ -259,13 +259,7 @@ RGBController_QMKOpenRGBRevB::RGBController_QMKOpenRGBRevB(QMKOpenRGBRevBControl
RGBController_QMKOpenRGBRevB::~RGBController_QMKOpenRGBRevB()
{
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;
}
void RGBController_QMKOpenRGBRevB::SetupZones()
@@ -349,10 +343,7 @@ void RGBController_QMKOpenRGBRevB::SetupZones()
keys_zone.leds_min = number_of_key_leds;
keys_zone.leds_max = keys_zone.leds_min;
keys_zone.leds_count = keys_zone.leds_min;
keys_zone.matrix_map = new matrix_map_type;
keys_zone.matrix_map->width = (unsigned int)matrix_map[0].size();
keys_zone.matrix_map->height = (unsigned int)matrix_map.size();
keys_zone.matrix_map->map = flat_matrix_map.data();
keys_zone.matrix_map.Set((unsigned int)matrix_map.size(), (unsigned int)matrix_map[0].size(), flat_matrix_map.data());
zones.push_back(keys_zone);
/*---------------------------------------------------------*\
@@ -366,10 +357,7 @@ void RGBController_QMKOpenRGBRevB::SetupZones()
underglow_zone.leds_min = number_of_underglow_leds;
underglow_zone.leds_max = underglow_zone.leds_min;
underglow_zone.leds_count = underglow_zone.leds_min;
underglow_zone.matrix_map = new matrix_map_type;
underglow_zone.matrix_map->width = (unsigned int)underglow_map[0].size();
underglow_zone.matrix_map->height = (unsigned int)underglow_map.size();
underglow_zone.matrix_map->map = flat_underglow_map.data();
underglow_zone.matrix_map.Set((unsigned int)underglow_map.size(), (unsigned int)underglow_map[0].size(), flat_underglow_map.data());
zones.push_back(underglow_zone);
}
@@ -403,24 +391,17 @@ void RGBController_QMKOpenRGBRevB::SetupZones()
}
}
void RGBController_QMKOpenRGBRevB::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_QMKOpenRGBRevB::DeviceUpdateLEDs()
{
controller->DirectModeSetLEDs(colors, controller->GetTotalNumberOfLEDs());
}
void RGBController_QMKOpenRGBRevB::UpdateZoneLEDs(int /*zone*/)
void RGBController_QMKOpenRGBRevB::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_QMKOpenRGBRevB::UpdateSingleLED(int led)
void RGBController_QMKOpenRGBRevB::DeviceUpdateSingleLED(int led)
{
RGBColor color = colors[led];
unsigned char red = RGBGetRValue(color);

View File

@@ -31,11 +31,10 @@ public:
~RGBController_QMKOpenRGBRevB();
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();
void DeviceSaveMode();

View File

@@ -258,13 +258,7 @@ RGBController_QMKOpenRGBRevD::RGBController_QMKOpenRGBRevD(QMKOpenRGBRevDControl
RGBController_QMKOpenRGBRevD::~RGBController_QMKOpenRGBRevD()
{
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;
}
void RGBController_QMKOpenRGBRevD::SetupZones()
@@ -344,10 +338,7 @@ void RGBController_QMKOpenRGBRevD::SetupZones()
keys_zone.leds_min = number_of_key_leds;
keys_zone.leds_max = keys_zone.leds_min;
keys_zone.leds_count = keys_zone.leds_min;
keys_zone.matrix_map = new matrix_map_type;
keys_zone.matrix_map->width = (unsigned int)matrix_map[0].size();
keys_zone.matrix_map->height = (unsigned int)matrix_map.size();
keys_zone.matrix_map->map = flat_matrix_map.data();
keys_zone.matrix_map.Set((unsigned int)matrix_map.size(), (unsigned int)matrix_map[0].size(), flat_matrix_map.data());
zones.push_back(keys_zone);
/*---------------------------------------------------------*\
@@ -361,10 +352,7 @@ void RGBController_QMKOpenRGBRevD::SetupZones()
underglow_zone.leds_min = number_of_underglow_leds;
underglow_zone.leds_max = underglow_zone.leds_min;
underglow_zone.leds_count = underglow_zone.leds_min;
underglow_zone.matrix_map = new matrix_map_type;
underglow_zone.matrix_map->width = (unsigned int)underglow_map[0].size();
underglow_zone.matrix_map->height = (unsigned int)underglow_map.size();
underglow_zone.matrix_map->map = flat_underglow_map.data();
underglow_zone.matrix_map.Set((unsigned int)underglow_map.size(), (unsigned int)underglow_map[0].size(), flat_underglow_map.data());
zones.push_back(underglow_zone);
}
@@ -404,24 +392,17 @@ void RGBController_QMKOpenRGBRevD::SetupZones()
}
}
void RGBController_QMKOpenRGBRevD::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_QMKOpenRGBRevD::DeviceUpdateLEDs()
{
controller->DirectModeSetLEDs(colors, controller->GetTotalNumberOfLEDs());
}
void RGBController_QMKOpenRGBRevD::UpdateZoneLEDs(int /*zone*/)
void RGBController_QMKOpenRGBRevD::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_QMKOpenRGBRevD::UpdateSingleLED(int led)
void RGBController_QMKOpenRGBRevD::DeviceUpdateSingleLED(int led)
{
RGBColor color = colors[led];
unsigned char red = RGBGetRValue(color);

View File

@@ -30,11 +30,10 @@ public:
~RGBController_QMKOpenRGBRevD();
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();
void DeviceSaveMode();

View File

@@ -274,13 +274,7 @@ RGBController_QMKOpenRGBRevE::RGBController_QMKOpenRGBRevE(QMKOpenRGBRevDControl
RGBController_QMKOpenRGBRevE::~RGBController_QMKOpenRGBRevE()
{
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;
}
void RGBController_QMKOpenRGBRevE::SetupZones()
@@ -360,10 +354,7 @@ void RGBController_QMKOpenRGBRevE::SetupZones()
keys_zone.leds_min = number_of_key_leds;
keys_zone.leds_max = keys_zone.leds_min;
keys_zone.leds_count = keys_zone.leds_min;
keys_zone.matrix_map = new matrix_map_type;
keys_zone.matrix_map->width = (unsigned int)matrix_map[0].size();
keys_zone.matrix_map->height = (unsigned int)matrix_map.size();
keys_zone.matrix_map->map = flat_matrix_map.data();
keys_zone.matrix_map.Set((unsigned int)matrix_map.size(), (unsigned int)matrix_map[0].size(), flat_matrix_map.data());
zones.push_back(keys_zone);
/*---------------------------------------------------------*\
@@ -377,10 +368,7 @@ void RGBController_QMKOpenRGBRevE::SetupZones()
underglow_zone.leds_min = number_of_underglow_leds;
underglow_zone.leds_max = underglow_zone.leds_min;
underglow_zone.leds_count = underglow_zone.leds_min;
underglow_zone.matrix_map = new matrix_map_type;
underglow_zone.matrix_map->width = (unsigned int)underglow_map[0].size();
underglow_zone.matrix_map->height = (unsigned int)underglow_map.size();
underglow_zone.matrix_map->map = flat_underglow_map.data();
underglow_zone.matrix_map.Set((unsigned int)underglow_map.size(), (unsigned int)underglow_map[0].size(), flat_underglow_map.data());
zones.push_back(underglow_zone);
}
@@ -420,24 +408,17 @@ void RGBController_QMKOpenRGBRevE::SetupZones()
}
}
void RGBController_QMKOpenRGBRevE::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_QMKOpenRGBRevE::DeviceUpdateLEDs()
{
controller->DirectModeSetLEDs(colors, controller->GetTotalNumberOfLEDs());
}
void RGBController_QMKOpenRGBRevE::UpdateZoneLEDs(int /*zone*/)
void RGBController_QMKOpenRGBRevE::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_QMKOpenRGBRevE::UpdateSingleLED(int led)
void RGBController_QMKOpenRGBRevE::DeviceUpdateSingleLED(int led)
{
RGBColor color = colors[led];
unsigned char red = RGBGetRValue(color);

View File

@@ -31,11 +31,10 @@ public:
~RGBController_QMKOpenRGBRevE();
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();
void DeviceSaveMode();

View File

@@ -194,15 +194,12 @@ void RGBController_QMKVialRGB::SetupZones()
\*-----------------------------------------------------*/
zone keyboard;
keyboard.name = "Keyboard";
keyboard.type = ZONE_TYPE_MATRIX;
keyboard.leds_min = controller->GetLEDCount();
keyboard.leds_max = controller->GetLEDCount();
keyboard.leds_count = controller->GetLEDCount();
keyboard.matrix_map = new matrix_map_type;
keyboard.matrix_map->height = height;
keyboard.matrix_map->width = width;
keyboard.matrix_map->map = matrix_map;
keyboard.name = "Keyboard";
keyboard.type = ZONE_TYPE_MATRIX;
keyboard.leds_min = controller->GetLEDCount();
keyboard.leds_max = controller->GetLEDCount();
keyboard.leds_count = controller->GetLEDCount();
keyboard.matrix_map.Set(height, width, matrix_map);
zones.push_back(keyboard);
@@ -220,22 +217,17 @@ void RGBController_QMKVialRGB::SetupZones()
SetupColors();
}
void RGBController_QMKVialRGB::ResizeZone(int /*zone*/, int /*new_size*/)
{
}
void RGBController_QMKVialRGB::DeviceUpdateLEDs()
{
controller->SendLEDs((unsigned short)colors.size(), colors.data());
}
void RGBController_QMKVialRGB::UpdateZoneLEDs(int /*zone*/)
void RGBController_QMKVialRGB::DeviceUpdateZoneLEDs(int /*zone*/)
{
DeviceUpdateLEDs();
}
void RGBController_QMKVialRGB::UpdateSingleLED(int /*led*/)
void RGBController_QMKVialRGB::DeviceUpdateSingleLED(int /*led*/)
{
DeviceUpdateLEDs();
}

View File

@@ -21,11 +21,10 @@ public:
~RGBController_QMKVialRGB();
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();