[WIP] Add per-zone modes to RGBController API

This commit is contained in:
Adam Honse
2025-12-15 12:28:41 -06:00
parent c3fc33d61e
commit 8c7b230646
3 changed files with 617 additions and 147 deletions

View File

@@ -189,6 +189,24 @@ void RGBController::SetHidden(bool hidden)
/*---------------------------------------------------------*\
| Zone Functions |
\*---------------------------------------------------------*/
int RGBController::GetZoneActiveMode(unsigned int zone)
{
int active_mode;
AccessMutex.lock_shared();
if(zone < zones.size())
{
active_mode = zones[zone].active_mode;
}
else
{
active_mode = 0;
}
AccessMutex.unlock_shared();
return(active_mode);
}
RGBColor RGBController::GetZoneColor(unsigned int zone, unsigned int color_index)
{
RGBColor color;
@@ -373,6 +391,294 @@ unsigned int RGBController::GetZoneMatrixMapWidth(unsigned int zone)
return(width);
}
std::size_t RGBController::GetZoneModeCount(unsigned int zone)
{
std::size_t mode_count;
AccessMutex.lock_shared();
if(zone < zones.size())
{
mode_count = zones[zone].modes.size();
}
else
{
mode_count = 0;
}
AccessMutex.unlock_shared();
return(mode_count);
}
unsigned int RGBController::GetZoneModeBrightness(unsigned int zone, unsigned int mode)
{
unsigned int brightness;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
brightness = zones[zone].modes[mode].brightness;
}
else
{
brightness = 0;
}
AccessMutex.unlock_shared();
return(brightness);
}
unsigned int RGBController::GetZoneModeBrightnessMax(unsigned int zone, unsigned int mode)
{
unsigned int brightness_max;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
brightness_max = zones[zone].modes[mode].brightness_max;
}
else
{
brightness_max = 0;
}
AccessMutex.unlock_shared();
return(brightness_max);
}
unsigned int RGBController::GetZoneModeBrightnessMin(unsigned int zone, unsigned int mode)
{
unsigned int brightness_min;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
brightness_min = zones[zone].modes[mode].brightness_min;
}
else
{
brightness_min = 0;
}
AccessMutex.unlock_shared();
return(brightness_min);
}
RGBColor RGBController::GetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index)
{
RGBColor color;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()) && (color_index < zones[zone].modes[mode].colors.size()))
{
color = zones[zone].modes[mode].colors[color_index];
}
else
{
color = 0;
}
AccessMutex.unlock_shared();
return(color);
}
unsigned int RGBController::GetZoneModeColorMode(unsigned int zone, unsigned int mode)
{
unsigned int color_mode;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
color_mode = zones[zone].modes[mode].color_mode;
}
else
{
color_mode = 0;
}
AccessMutex.unlock_shared();
return(color_mode);
}
std::size_t RGBController::GetZoneModeColorsCount(unsigned int zone, unsigned int mode)
{
std::size_t colors_count;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
colors_count = zones[zone].modes[mode].colors.size();
}
else
{
colors_count = 0;
}
AccessMutex.unlock_shared();
return(colors_count);
}
unsigned int RGBController::GetZoneModeColorsMax(unsigned int zone, unsigned int mode)
{
unsigned int colors_max;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
colors_max = zones[zone].modes[mode].colors_max;
}
else
{
colors_max = 0;
}
AccessMutex.unlock_shared();
return(colors_max);
}
unsigned int RGBController::GetZoneModeColorsMin(unsigned int zone, unsigned int mode)
{
unsigned int colors_min;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
colors_min = zones[zone].modes[mode].colors_min;
}
else
{
colors_min = 0;
}
AccessMutex.unlock_shared();
return(colors_min);
}
unsigned int RGBController::GetZoneModeDirection(unsigned int zone, unsigned int mode)
{
unsigned int direction;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
direction = zones[zone].modes[mode].direction;
}
else
{
direction = 0;
}
AccessMutex.unlock_shared();
return(direction);
}
unsigned int RGBController::GetZoneModeFlags(unsigned int zone, unsigned int mode)
{
unsigned int flags;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
flags = zones[zone].modes[mode].flags;
}
else
{
flags = 0;
}
AccessMutex.unlock_shared();
return(flags);
}
std::string RGBController::GetZoneModeName(unsigned int zone, unsigned int mode)
{
std::string name;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
name = zones[zone].modes[mode].name;
}
else
{
name = "";
}
AccessMutex.unlock_shared();
return(name);
}
unsigned int RGBController::GetZoneModeSpeed(unsigned int zone, unsigned int mode)
{
unsigned int speed;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
speed = zones[zone].modes[mode].speed;
}
else
{
speed = 0;
}
AccessMutex.unlock_shared();
return(speed);
}
unsigned int RGBController::GetZoneModeSpeedMax(unsigned int zone, unsigned int mode)
{
unsigned int speed_max;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
speed_max = zones[zone].modes[mode].speed_max;
}
else
{
speed_max = 0;
}
AccessMutex.unlock_shared();
return(speed_max);
}
unsigned int RGBController::GetZoneModeSpeedMin(unsigned int zone, unsigned int mode)
{
unsigned int speed_min;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
speed_min = zones[zone].modes[mode].speed_min;
}
else
{
speed_min = 0;
}
AccessMutex.unlock_shared();
return(speed_min);
}
int RGBController::GetZoneModeValue(unsigned int zone, unsigned int mode)
{
unsigned int value;
AccessMutex.lock_shared();
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
value = zones[zone].modes[mode].value;
}
else
{
value = 0;
}
AccessMutex.unlock_shared();
return(value);
}
std::string RGBController::GetZoneName(unsigned int zone)
{
std::string name;
@@ -627,6 +933,64 @@ unsigned int RGBController::GetLEDsInZone(unsigned int zone)
return(leds_count);
}
void RGBController::SetZoneActiveMode(unsigned int zone, int mode)
{
if(zone < zones.size())
{
zones[zone].active_mode = mode;
UpdateMode();
}
}
void RGBController::SetZoneModeBrightness(unsigned int zone, unsigned int mode, unsigned int brightness)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
zones[zone].modes[mode].brightness = brightness;
}
}
void RGBController::SetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index, RGBColor color)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()) && (color_index < zones[zone].modes[mode].colors.size()))
{
zones[zone].modes[mode].colors[color_index] = color;
}
}
void RGBController::SetZoneModeColorMode(unsigned int zone, unsigned int mode, unsigned int color_mode)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
zones[zone].modes[mode].color_mode = color_mode;
}
}
void RGBController::SetZoneModeColorsCount(unsigned int zone, unsigned int mode, std::size_t count)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
zones[zone].modes[mode].colors.resize(count);
}
}
void RGBController::SetZoneModeDirection(unsigned int zone, unsigned int mode, unsigned int direction)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
zones[zone].modes[mode].direction = direction;
}
}
void RGBController::SetZoneModeSpeed(unsigned int zone, unsigned int mode, unsigned int speed)
{
if((zone < zones.size()) && (mode < zones[zone].modes.size()))
{
zones[zone].modes[mode].speed = speed;
}
}
/*---------------------------------------------------------*\
| Mode Functions |
\*---------------------------------------------------------*/

View File

@@ -49,6 +49,8 @@ enum
MODE_FLAG_HAS_RANDOM_COLOR = (1 << 7), /* Mode has random color option */
MODE_FLAG_MANUAL_SAVE = (1 << 8), /* Mode can manually be saved */
MODE_FLAG_AUTOMATIC_SAVE = (1 << 9), /* Mode automatically saves */
MODE_FLAG_REQUIRES_ENTIRE_DEVICE = (1 << 10),/* Mode always applies to entire */
/* device, overrides per-zone modes */
};
/*---------------------------------------------------------*\
@@ -195,6 +197,8 @@ public:
matrix_map_type * matrix_map; /* Matrix map pointer */
std::vector<segment> segments; /* Segments in zone */
unsigned int flags; /* Zone flags bitfield */
std::vector<mode> modes; /* Zone-specific modes */
int active_mode; /* Active zone-specific mode*/
/*-----------------------------------------------------*\
| Zone Constructor / Destructor |
@@ -280,159 +284,184 @@ public:
/*-----------------------------------------------------*\
| Controller Information |
\*-----------------------------------------------------*/
virtual std::string GetName() = 0;
virtual std::string GetVendor() = 0;
virtual std::string GetDescription() = 0;
virtual std::string GetVersion() = 0;
virtual std::string GetSerial() = 0;
virtual std::string GetLocation() = 0;
virtual std::string GetName() = 0;
virtual std::string GetVendor() = 0;
virtual std::string GetDescription() = 0;
virtual std::string GetVersion() = 0;
virtual std::string GetSerial() = 0;
virtual std::string GetLocation() = 0;
virtual device_type GetDeviceType() = 0;
virtual unsigned int GetFlags() = 0;
virtual device_type GetDeviceType() = 0;
virtual unsigned int GetFlags() = 0;
/*-----------------------------------------------------*\
| Hidden Flag Functions |
\*-----------------------------------------------------*/
virtual bool GetHidden() = 0;
virtual void SetHidden(bool hidden) = 0;
virtual bool GetHidden() = 0;
virtual void SetHidden(bool hidden) = 0;
/*-----------------------------------------------------*\
| Zone Functions |
\*-----------------------------------------------------*/
virtual RGBColor GetZoneColor(unsigned int zone, unsigned int color_index) = 0;
virtual RGBColor* GetZoneColorsPointer(unsigned int zone) = 0;
virtual std::size_t GetZoneCount() = 0;
virtual unsigned int GetZoneFlags(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsCount(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsMax(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsMin(unsigned int zone) = 0;
virtual bool GetZoneMatrixMapAvailable(unsigned int zone) = 0;
virtual unsigned int GetZoneMatrixMapHeight(unsigned int zone) = 0;
virtual const unsigned int * GetZoneMatrixMap(unsigned int zone) = 0;
virtual unsigned int GetZoneMatrixMapWidth(unsigned int zone) = 0;
virtual std::string GetZoneName(unsigned int zone) = 0;
virtual std::size_t GetZoneSegmentCount(unsigned int zone) = 0;
virtual unsigned int GetZoneSegmentLEDsCount(unsigned int zone, unsigned int segment) = 0;
virtual bool GetZoneSegmentMatrixMapAvailable(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentMatrixMapHeight(unsigned int zone, unsigned int segment) = 0;
virtual const unsigned int * GetZoneSegmentMatrixMap(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentMatrixMapWidth(unsigned int zone, unsigned int segment) = 0;
virtual std::string GetZoneSegmentName(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentStartIndex(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentType(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneStartIndex(unsigned int zone) = 0;
virtual zone_type GetZoneType(unsigned int zone) = 0;
virtual int GetZoneActiveMode(unsigned int zone) = 0;
virtual RGBColor GetZoneColor(unsigned int zone, unsigned int color_index) = 0;
virtual RGBColor* GetZoneColorsPointer(unsigned int zone) = 0;
virtual std::size_t GetZoneCount() = 0;
virtual unsigned int GetZoneFlags(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsCount(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsMax(unsigned int zone) = 0;
virtual unsigned int GetZoneLEDsMin(unsigned int zone) = 0;
virtual bool GetZoneMatrixMapAvailable(unsigned int zone) = 0;
virtual unsigned int GetZoneMatrixMapHeight(unsigned int zone) = 0;
virtual const unsigned int * GetZoneMatrixMap(unsigned int zone) = 0;
virtual unsigned int GetZoneMatrixMapWidth(unsigned int zone) = 0;
virtual std::size_t GetZoneModeCount(unsigned int zone) = 0;
virtual unsigned int GetZoneModeBrightness(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeBrightnessMax(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeBrightnessMin(unsigned int zone, unsigned int mode) = 0;
virtual RGBColor GetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index) = 0;
virtual unsigned int GetZoneModeColorMode(unsigned int zone, unsigned int mode) = 0;
virtual std::size_t GetZoneModeColorsCount(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeColorsMax(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeColorsMin(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeDirection(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeFlags(unsigned int zone, unsigned int mode) = 0;
virtual std::string GetZoneModeName(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeSpeed(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeSpeedMax(unsigned int zone, unsigned int mode) = 0;
virtual unsigned int GetZoneModeSpeedMin(unsigned int zone, unsigned int mode) = 0;
virtual int GetZoneModeValue(unsigned int zone, unsigned int mode) = 0;
virtual std::string GetZoneName(unsigned int zone) = 0;
virtual std::size_t GetZoneSegmentCount(unsigned int zone) = 0;
virtual unsigned int GetZoneSegmentLEDsCount(unsigned int zone, unsigned int segment) = 0;
virtual bool GetZoneSegmentMatrixMapAvailable(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentMatrixMapHeight(unsigned int zone, unsigned int segment) = 0;
virtual const unsigned int * GetZoneSegmentMatrixMap(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentMatrixMapWidth(unsigned int zone, unsigned int segment) = 0;
virtual std::string GetZoneSegmentName(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentStartIndex(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneSegmentType(unsigned int zone, unsigned int segment) = 0;
virtual unsigned int GetZoneStartIndex(unsigned int zone) = 0;
virtual zone_type GetZoneType(unsigned int zone) = 0;
virtual unsigned int GetLEDsInZone(unsigned int zone) = 0;
virtual unsigned int GetLEDsInZone(unsigned int zone) = 0;
virtual void SetZoneActiveMode(unsigned int zone, int mode) = 0;
virtual void SetZoneModeBrightness(unsigned int zone, unsigned int mode, unsigned int brightness) = 0;
virtual void SetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index, RGBColor color) = 0;
virtual void SetZoneModeColorMode(unsigned int zone, unsigned int mode, unsigned int color_mode) = 0;
virtual void SetZoneModeColorsCount(unsigned int zone, unsigned int mode, std::size_t count) = 0;
virtual void SetZoneModeDirection(unsigned int zone, unsigned int mode, unsigned int direction) = 0;
virtual void SetZoneModeSpeed(unsigned int zone, unsigned int mode, unsigned int speed) = 0;
/*-----------------------------------------------------*\
| Mode Functions |
\*-----------------------------------------------------*/
virtual std::size_t GetModeCount() = 0;
virtual unsigned int GetModeBrightness(unsigned int mode) = 0;
virtual unsigned int GetModeBrightnessMax(unsigned int mode) = 0;
virtual unsigned int GetModeBrightnessMin(unsigned int mode) = 0;
virtual RGBColor GetModeColor(unsigned int mode, unsigned int color_index) = 0;
virtual unsigned int GetModeColorMode(unsigned int mode) = 0;
virtual std::size_t GetModeColorsCount(unsigned int mode) = 0;
virtual unsigned int GetModeColorsMax(unsigned int mode) = 0;
virtual unsigned int GetModeColorsMin(unsigned int mode) = 0;
virtual unsigned int GetModeDirection(unsigned int mode) = 0;
virtual unsigned int GetModeFlags(unsigned int mode) = 0;
virtual std::string GetModeName(unsigned int mode) = 0;
virtual unsigned int GetModeSpeed(unsigned int mode) = 0;
virtual unsigned int GetModeSpeedMax(unsigned int mode) = 0;
virtual unsigned int GetModeSpeedMin(unsigned int mode) = 0;
virtual int GetModeValue(unsigned int mode) = 0;
virtual std::size_t GetModeCount() = 0;
virtual unsigned int GetModeBrightness(unsigned int mode) = 0;
virtual unsigned int GetModeBrightnessMax(unsigned int mode) = 0;
virtual unsigned int GetModeBrightnessMin(unsigned int mode) = 0;
virtual RGBColor GetModeColor(unsigned int mode, unsigned int color_index) = 0;
virtual unsigned int GetModeColorMode(unsigned int mode) = 0;
virtual std::size_t GetModeColorsCount(unsigned int mode) = 0;
virtual unsigned int GetModeColorsMax(unsigned int mode) = 0;
virtual unsigned int GetModeColorsMin(unsigned int mode) = 0;
virtual unsigned int GetModeDirection(unsigned int mode) = 0;
virtual unsigned int GetModeFlags(unsigned int mode) = 0;
virtual std::string GetModeName(unsigned int mode) = 0;
virtual unsigned int GetModeSpeed(unsigned int mode) = 0;
virtual unsigned int GetModeSpeedMax(unsigned int mode) = 0;
virtual unsigned int GetModeSpeedMin(unsigned int mode) = 0;
virtual int GetModeValue(unsigned int mode) = 0;
virtual void SetModeBrightness(unsigned int mode, unsigned int brightness) = 0;
virtual void SetModeColor(unsigned int mode, unsigned int color_index, RGBColor color) = 0;
virtual void SetModeColorMode(unsigned int mode, unsigned int color_mode) = 0;
virtual void SetModeColorsCount(unsigned int mode, std::size_t count) = 0;
virtual void SetModeDirection(unsigned int mode, unsigned int direction) = 0;
virtual void SetModeSpeed(unsigned int mode, unsigned int speed) = 0;
virtual void SetModeBrightness(unsigned int mode, unsigned int brightness) = 0;
virtual void SetModeColor(unsigned int mode, unsigned int color_index, RGBColor color) = 0;
virtual void SetModeColorMode(unsigned int mode, unsigned int color_mode) = 0;
virtual void SetModeColorsCount(unsigned int mode, std::size_t count) = 0;
virtual void SetModeDirection(unsigned int mode, unsigned int direction) = 0;
virtual void SetModeSpeed(unsigned int mode, unsigned int speed) = 0;
virtual int GetActiveMode() = 0;
virtual void SetActiveMode(int mode) = 0;
virtual void SetCustomMode() = 0;
virtual int GetActiveMode() = 0;
virtual void SetActiveMode(int mode) = 0;
virtual void SetCustomMode() = 0;
/*-----------------------------------------------------*\
| LED Functions |
\*-----------------------------------------------------*/
virtual std::size_t GetLEDCount() = 0;
virtual std::string GetLEDName(unsigned int led) = 0;
virtual unsigned int GetLEDValue(unsigned int led) = 0;
virtual std::size_t GetLEDCount() = 0;
virtual std::string GetLEDName(unsigned int led) = 0;
virtual unsigned int GetLEDValue(unsigned int led) = 0;
virtual std::string GetLEDDisplayName(unsigned int led) = 0;
virtual std::string GetLEDDisplayName(unsigned int led) = 0;
/*-----------------------------------------------------*\
| Color Functions |
\*-----------------------------------------------------*/
virtual RGBColor GetColor(unsigned int led) = 0;
virtual RGBColor* GetColorsPointer() = 0;
virtual void SetColor(unsigned int led, RGBColor color) = 0;
virtual RGBColor GetColor(unsigned int led) = 0;
virtual RGBColor* GetColorsPointer() = 0;
virtual void SetColor(unsigned int led, RGBColor color) = 0;
virtual void SetAllColors(RGBColor color) = 0;
virtual void SetAllZoneColors(int zone, RGBColor color) = 0;
virtual void SetAllColors(RGBColor color) = 0;
virtual void SetAllZoneColors(int zone, RGBColor color) = 0;
/*-----------------------------------------------------*\
| Serialized Description Functions |
\*-----------------------------------------------------*/
virtual unsigned char * GetDeviceDescription(unsigned int protocol_version) = 0;
virtual void ReadDeviceDescription(unsigned char* data_buf, unsigned int protocol_version) = 0;
virtual unsigned char * GetDeviceDescription(unsigned int protocol_version) = 0;
virtual void ReadDeviceDescription(unsigned char* data_buf, unsigned int protocol_version) = 0;
virtual unsigned char * GetModeDescription(int mode, unsigned int protocol_version) = 0;
virtual void SetModeDescription(unsigned char* data_buf, unsigned int protocol_version) = 0;
virtual unsigned char * GetModeDescription(int mode, unsigned int protocol_version) = 0;
virtual void SetModeDescription(unsigned char* data_buf, unsigned int protocol_version) = 0;
virtual unsigned char * GetColorDescription() = 0;
virtual void SetColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetColorDescription() = 0;
virtual void SetColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetZoneColorDescription(int zone) = 0;
virtual void SetZoneColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetZoneColorDescription(int zone) = 0;
virtual void SetZoneColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetSingleLEDColorDescription(int led) = 0;
virtual void SetSingleLEDColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetSingleLEDColorDescription(int led) = 0;
virtual void SetSingleLEDColorDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetSegmentDescription(int zone, segment new_segment) = 0;
virtual void SetSegmentDescription(unsigned char* data_buf) = 0;
virtual unsigned char * GetSegmentDescription(int zone, segment new_segment) = 0;
virtual void SetSegmentDescription(unsigned char* data_buf) = 0;
/*-----------------------------------------------------*\
| JSON Description Functions |
\*-----------------------------------------------------*/
virtual nlohmann::json GetDeviceDescriptionJSON() = 0;
virtual nlohmann::json GetLEDDescriptionJSON(int led) = 0;
virtual nlohmann::json GetModeDescriptionJSON(int mode) = 0;
virtual nlohmann::json GetSegmentDescriptionJSON(int zone, int segment) = 0;
virtual nlohmann::json GetZoneDescriptionJSON(int zone) = 0;
virtual nlohmann::json GetDeviceDescriptionJSON() = 0;
virtual nlohmann::json GetLEDDescriptionJSON(int led) = 0;
virtual nlohmann::json GetModeDescriptionJSON(int mode) = 0;
virtual nlohmann::json GetSegmentDescriptionJSON(int zone, int segment) = 0;
virtual nlohmann::json GetZoneDescriptionJSON(int zone) = 0;
virtual void SetDeviceDescriptionJSON(nlohmann::json controller_json) = 0;
virtual led SetLEDDescriptionJSON(nlohmann::json led_json) = 0;
virtual mode SetModeDescriptionJSON(nlohmann::json mode_json) = 0;
virtual segment SetSegmentDescriptionJSON(nlohmann::json segment_json) = 0;
virtual zone SetZoneDescriptionJSON(nlohmann::json zone_json) = 0;
virtual void SetDeviceDescriptionJSON(nlohmann::json controller_json) = 0;
virtual led SetLEDDescriptionJSON(nlohmann::json led_json) = 0;
virtual mode SetModeDescriptionJSON(nlohmann::json mode_json) = 0;
virtual segment SetSegmentDescriptionJSON(nlohmann::json segment_json) = 0;
virtual zone SetZoneDescriptionJSON(nlohmann::json zone_json) = 0;
/*-----------------------------------------------------*\
| Update Callback Functions |
\*-----------------------------------------------------*/
virtual void RegisterUpdateCallback(RGBControllerCallback new_callback, void * new_callback_arg) = 0;
virtual void UnregisterUpdateCallback(void * callback_arg) = 0;
virtual void ClearCallbacks() = 0;
virtual void SignalUpdate(unsigned int update_reason) = 0;
virtual void RegisterUpdateCallback(RGBControllerCallback new_callback, void * new_callback_arg) = 0;
virtual void UnregisterUpdateCallback(void * callback_arg) = 0;
virtual void ClearCallbacks() = 0;
virtual void SignalUpdate(unsigned int update_reason) = 0;
/*-----------------------------------------------------*\
| Device Update Functions |
\*-----------------------------------------------------*/
virtual void UpdateLEDs() = 0;
virtual void UpdateZoneLEDs(int zone) = 0;
virtual void UpdateSingleLED(int led) = 0;
virtual void UpdateLEDs() = 0;
virtual void UpdateZoneLEDs(int zone) = 0;
virtual void UpdateSingleLED(int led) = 0;
virtual void UpdateMode() = 0;
virtual void SaveMode() = 0;
virtual void UpdateMode() = 0;
virtual void SaveMode() = 0;
virtual void ClearSegments(int zone) = 0;
virtual void AddSegment(int zone, segment new_segment) = 0;
virtual void ClearSegments(int zone) = 0;
virtual void AddSegment(int zone, segment new_segment) = 0;
virtual void ResizeZone(int zone, int new_size) = 0;
virtual void ResizeZone(int zone, int new_size) = 0;
};
class RGBController : public RGBControllerInterface
@@ -466,6 +495,7 @@ public:
/*-----------------------------------------------------*\
| Zone Functions |
\*-----------------------------------------------------*/
int GetZoneActiveMode(unsigned int zone);
RGBColor GetZoneColor(unsigned int zone, unsigned int color_index);
RGBColor* GetZoneColorsPointer(unsigned int zone);
std::size_t GetZoneCount();
@@ -477,6 +507,22 @@ public:
unsigned int GetZoneMatrixMapHeight(unsigned int zone);
const unsigned int* GetZoneMatrixMap(unsigned int zone);
unsigned int GetZoneMatrixMapWidth(unsigned int zone);
std::size_t GetZoneModeCount(unsigned int zone);
unsigned int GetZoneModeBrightness(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeBrightnessMax(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeBrightnessMin(unsigned int zone, unsigned int mode);
RGBColor GetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index);
unsigned int GetZoneModeColorMode(unsigned int zone, unsigned int mode);
std::size_t GetZoneModeColorsCount(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeColorsMax(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeColorsMin(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeDirection(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeFlags(unsigned int zone, unsigned int mode);
std::string GetZoneModeName(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeSpeed(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeSpeedMax(unsigned int zone, unsigned int mode);
unsigned int GetZoneModeSpeedMin(unsigned int zone, unsigned int mode);
int GetZoneModeValue(unsigned int zone, unsigned int mode);
std::string GetZoneName(unsigned int zone);
std::size_t GetZoneSegmentCount(unsigned int zone);
unsigned int GetZoneSegmentLEDsCount(unsigned int zone, unsigned int segment);
@@ -492,6 +538,14 @@ public:
unsigned int GetLEDsInZone(unsigned int zone);
void SetZoneActiveMode(unsigned int zone, int mode);
void SetZoneModeBrightness(unsigned int zone, unsigned int mode, unsigned int brightness);
void SetZoneModeColor(unsigned int zone, unsigned int mode, unsigned int color_index, RGBColor color);
void SetZoneModeColorMode(unsigned int zone, unsigned int mode, unsigned int color_mode);
void SetZoneModeColorsCount(unsigned int zone, unsigned int mode, std::size_t count);
void SetZoneModeDirection(unsigned int zone, unsigned int mode, unsigned int direction);
void SetZoneModeSpeed(unsigned int zone, unsigned int mode, unsigned int speed);
/*-----------------------------------------------------*\
| Mode Functions |
\*-----------------------------------------------------*/

View File

@@ -726,45 +726,97 @@ void OpenRGBDevicePage::UpdateModeUi()
unsigned int selected_mode = (unsigned int)ui->ModeBox->currentIndex();
/*-----------------------------------------------------*\
| Don't update the UI if the current mode is invalid |
| Determine what is selected, either all zones, a zone, |
| or a segment |
\*-----------------------------------------------------*/
if(selected_mode < device->GetModeCount())
{
bool supports_per_led = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_PER_LED_COLOR );
bool supports_mode_specific = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR );
bool supports_random = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_RANDOM_COLOR );
bool supports_speed = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_SPEED );
bool supports_brightness = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_BRIGHTNESS);
bool supports_dir_lr = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_DIRECTION_LR );
bool supports_dir_ud = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_DIRECTION_UD );
bool supports_dir_hv = ( device->GetModeFlags(selected_mode) & MODE_FLAG_HAS_DIRECTION_HV );
bool per_led = device->GetModeColorMode(selected_mode) == MODE_COLORS_PER_LED;
bool mode_specific = device->GetModeColorMode(selected_mode) == MODE_COLORS_MODE_SPECIFIC;
bool random = device->GetModeColorMode(selected_mode) == MODE_COLORS_RANDOM;
unsigned int dir = device->GetModeDirection(selected_mode);
bool manual_save = ( device->GetModeFlags(selected_mode) & MODE_FLAG_MANUAL_SAVE );
bool automatic_save = ( device->GetModeFlags(selected_mode) & MODE_FLAG_AUTOMATIC_SAVE );
bool selected_all_zones;
int selected_zone;
int selected_segment;
getSelectedZone(&selected_all_zones, &selected_zone, &selected_segment);
/*-----------------------------------------------------*\
| Read mode variables |
\*-----------------------------------------------------*/
unsigned int brightness;
unsigned int brightness_min;
unsigned int brightness_max;
unsigned int color_mode;
unsigned int direction;
unsigned int flags;
unsigned int speed;
unsigned int speed_min;
unsigned int speed_max;
if((!selected_all_zones) && (selected_mode < device->GetZoneModeCount(selected_zone)))
{
brightness = device->GetZoneModeBrightness(selected_zone, selected_mode);
brightness_min = device->GetZoneModeBrightnessMin(selected_zone, selected_mode);
brightness_max = device->GetZoneModeBrightnessMax(selected_zone, selected_mode);
color_mode = device->GetZoneModeColorMode(selected_zone, selected_mode);
direction = device->GetZoneModeDirection(selected_zone, selected_mode);
flags = device->GetZoneModeFlags(selected_zone, selected_mode);
speed = device->GetZoneModeSpeed(selected_zone, selected_mode);
speed_min = device->GetZoneModeSpeedMin(selected_zone, selected_mode);
speed_max = device->GetZoneModeSpeedMax(selected_zone, selected_mode);
}
else if(selected_mode < device->GetModeCount())
{
brightness = device->GetModeBrightness(selected_mode);
brightness_min = device->GetModeBrightnessMin(selected_mode);
brightness_max = device->GetModeBrightnessMax(selected_mode);
color_mode = device->GetModeColorMode(selected_mode);
direction = device->GetModeDirection(selected_mode);
flags = device->GetModeFlags(selected_mode);
speed = device->GetModeSpeed(selected_mode);
speed_min = device->GetModeSpeedMin(selected_mode);
speed_max = device->GetModeSpeedMax(selected_mode);
}
else
{
/*-------------------------------------------------*\
| Don't update the UI if the current mode is invalid|
\*-------------------------------------------------*/
return;
}
/*-----------------------------------------------------*\
| Read mode flags |
\*-----------------------------------------------------*/
bool supports_per_led = flags & MODE_FLAG_HAS_PER_LED_COLOR;
bool supports_mode_specific = flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
bool supports_random = flags & MODE_FLAG_HAS_RANDOM_COLOR;
bool supports_speed = flags & MODE_FLAG_HAS_SPEED;
bool supports_brightness = flags & MODE_FLAG_HAS_BRIGHTNESS;
bool supports_dir_lr = flags & MODE_FLAG_HAS_DIRECTION_LR;
bool supports_dir_ud = flags & MODE_FLAG_HAS_DIRECTION_UD;
bool supports_dir_hv = flags & MODE_FLAG_HAS_DIRECTION_HV;
bool per_led = color_mode == MODE_COLORS_PER_LED;
bool mode_specific = color_mode == MODE_COLORS_MODE_SPECIFIC;
bool random = color_mode == MODE_COLORS_RANDOM;
bool manual_save = flags & MODE_FLAG_MANUAL_SAVE;
bool automatic_save = flags & MODE_FLAG_AUTOMATIC_SAVE;
if(supports_speed)
{
ui->SpeedSlider->blockSignals(true);
int current_speed;
InvertedSpeed = device->GetModeSpeedMin(selected_mode) > device->GetModeSpeedMax(selected_mode);
InvertedSpeed = speed_min > speed_max;
if(InvertedSpeed)
{
/*-----------------------------------------------------*\
| If Speed Slider is inverted, invert value |
\*-----------------------------------------------------*/
ui->SpeedSlider->setMinimum(device->GetModeSpeedMax(selected_mode));
ui->SpeedSlider->setMaximum(device->GetModeSpeedMin(selected_mode));
current_speed = device->GetModeSpeedMin(selected_mode) - device->GetModeSpeed(selected_mode) + device->GetModeSpeedMax(selected_mode);
ui->SpeedSlider->setMinimum(speed_max);
ui->SpeedSlider->setMaximum(speed_min);
current_speed = speed_min - speed + speed_max;
}
else
{
ui->SpeedSlider->setMinimum(device->GetModeSpeedMin(selected_mode));
ui->SpeedSlider->setMaximum(device->GetModeSpeedMax(selected_mode));
current_speed = device->GetModeSpeed(selected_mode);
ui->SpeedSlider->setMinimum(speed_min);
ui->SpeedSlider->setMaximum(speed_max);
current_speed = speed;
}
ui->SpeedSlider->setValue(current_speed);
@@ -782,22 +834,22 @@ void OpenRGBDevicePage::UpdateModeUi()
{
ui->BrightnessSlider->blockSignals(true);
int current_brightness;
InvertedBrightness = device->GetModeBrightnessMin(selected_mode) > device->GetModeBrightnessMax(selected_mode);
InvertedBrightness = brightness_min > brightness_max;
if(InvertedBrightness)
{
/*-----------------------------------------------------*\
| If Brightness Slider is inverted, invert value |
\*-----------------------------------------------------*/
ui->BrightnessSlider->setMinimum(device->GetModeBrightnessMax(selected_mode));
ui->BrightnessSlider->setMaximum(device->GetModeBrightnessMin(selected_mode));
current_brightness = device->GetModeBrightnessMin(selected_mode) - device->GetModeBrightness(selected_mode) + device->GetModeBrightnessMax(selected_mode);
ui->BrightnessSlider->setMinimum(brightness_max);
ui->BrightnessSlider->setMaximum(brightness_min);
current_brightness = brightness_min - brightness + brightness_max;
}
else
{
ui->BrightnessSlider->setMinimum(device->GetModeBrightnessMin(selected_mode));
ui->BrightnessSlider->setMaximum(device->GetModeBrightnessMax(selected_mode));
current_brightness = device->GetModeBrightness(selected_mode);
ui->BrightnessSlider->setMinimum(brightness_min);
ui->BrightnessSlider->setMaximum(brightness_max);
current_brightness = brightness;
}
ui->BrightnessSlider->setValue(current_brightness);
@@ -835,41 +887,41 @@ void OpenRGBDevicePage::UpdateModeUi()
if(supports_dir_lr || supports_dir_ud || supports_dir_hv)
{
if((supports_dir_lr)
&&((dir == MODE_DIRECTION_LEFT)
||(dir == MODE_DIRECTION_RIGHT)))
&&((direction == MODE_DIRECTION_LEFT)
||(direction == MODE_DIRECTION_RIGHT)))
{
ui->DirectionBox->setCurrentIndex(dir);
ui->DirectionBox->setCurrentIndex(direction);
}
if((supports_dir_ud)
&&((dir == MODE_DIRECTION_UP)
||(dir == MODE_DIRECTION_DOWN)))
&&((direction == MODE_DIRECTION_UP)
||(direction == MODE_DIRECTION_DOWN)))
{
if(supports_dir_lr)
{
ui->DirectionBox->setCurrentIndex(dir);
ui->DirectionBox->setCurrentIndex(direction);
}
else
{
ui->DirectionBox->setCurrentIndex(dir - 2);
ui->DirectionBox->setCurrentIndex(direction - 2);
}
}
if((supports_dir_hv)
&&((dir == MODE_DIRECTION_HORIZONTAL)
||(dir == MODE_DIRECTION_VERTICAL)))
&&((direction == MODE_DIRECTION_HORIZONTAL)
||(direction == MODE_DIRECTION_VERTICAL)))
{
if(supports_dir_lr && supports_dir_ud)
{
ui->DirectionBox->setCurrentIndex(dir);
ui->DirectionBox->setCurrentIndex(direction);
}
else if(supports_dir_lr || supports_dir_ud)
{
ui->DirectionBox->setCurrentIndex(dir - 2);
ui->DirectionBox->setCurrentIndex(direction - 2);
}
else
{
ui->DirectionBox->setCurrentIndex(dir - 4);
ui->DirectionBox->setCurrentIndex(direction - 4);
}
}
@@ -946,7 +998,7 @@ void OpenRGBDevicePage::UpdateModeUi()
/*-----------------------------------------------------*\
| Fill in the zone box based on color mode |
\*-----------------------------------------------------*/
switch(device->GetModeColorMode(selected_mode))
switch(color_mode)
{
case MODE_COLORS_NONE:
case MODE_COLORS_RANDOM:
@@ -1046,7 +1098,7 @@ void OpenRGBDevicePage::UpdateModeUi()
ui->ApplyColorsButton->setEnabled(true);
break;
}
}
}
void OpenRGBDevicePage::UpdateMode()