mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-02-14 17:21:26 -05:00
* 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
120 lines
4.3 KiB
C++
120 lines
4.3 KiB
C++
/*---------------------------------------------------------*\
|
|
| LianLiUniHubSLController.h |
|
|
| |
|
|
| Driver for Lian Li Uni Hub - SL |
|
|
| |
|
|
| Muhamad Visat 26 Jul 2025 |
|
|
| Original work by Luca Lovisa & Oliver P |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-only |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <hidapi.h>
|
|
#include "RGBController.h"
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_REPORT_ID = 0xE0,
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_MAX_CHANNEL = 4,
|
|
UNIHUB_SL_MAX_FAN_PER_CHANNEL = 4,
|
|
UNIHUB_SL_LED_PER_FAN = 16,
|
|
UNIHUB_SL_MAX_LED_PER_CHANNEL = 64,
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_LED_BRIGHTNESS_MIN = 0x00, // 0%
|
|
UNIHUB_SL_LED_BRIGHTNESS_MAX = 0x04, // 100%
|
|
UNIHUB_SL_LED_BRIGHTNESS_DEFAULT = 0x04, // 100%
|
|
|
|
UNIHUB_SL_LED_BRIGHTNESS_000 = 0x08, // Black (turned off)
|
|
UNIHUB_SL_LED_BRIGHTNESS_025 = 0x03, // Dark
|
|
UNIHUB_SL_LED_BRIGHTNESS_050 = 0x02, // Medium
|
|
UNIHUB_SL_LED_BRIGHTNESS_075 = 0x01, // Bright
|
|
UNIHUB_SL_LED_BRIGHTNESS_100 = 0x00, // Brightest
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_LED_SPEED_MIN = 0x00, // Slowest
|
|
UNIHUB_SL_LED_SPEED_MAX = 0x04, // Fastest
|
|
UNIHUB_SL_LED_SPEED_DEFAULT = 0x00, // Slowest
|
|
|
|
UNIHUB_SL_LED_SPEED_000 = 0x02, // Slowest
|
|
UNIHUB_SL_LED_SPEED_025 = 0x01, // Slow
|
|
UNIHUB_SL_LED_SPEED_050 = 0x00, // Medium
|
|
UNIHUB_SL_LED_SPEED_075 = 0xff, // Fast
|
|
UNIHUB_SL_LED_SPEED_100 = 0xfe, // Fastest
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_LED_DIRECTION_LTR = 0x00, // Left to right
|
|
UNIHUB_SL_LED_DIRECTION_RTL = 0x01, // Right to left
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_SL_LED_MODE_RAINBOW = 0x05,
|
|
UNIHUB_SL_LED_MODE_RAINBOW_MORPH = 0x04,
|
|
UNIHUB_SL_LED_MODE_STATIC = 0x01,
|
|
UNIHUB_SL_LED_MODE_BREATHING = 0x02,
|
|
UNIHUB_SL_LED_MODE_COLOR_CYCLE = 0x23,
|
|
UNIHUB_SL_LED_MODE_RUNWAY = 0x1c,
|
|
UNIHUB_SL_LED_MODE_RUNWAY_MERGED = 0x1c,
|
|
UNIHUB_SL_LED_MODE_STAGGERED = 0x18,
|
|
UNIHUB_SL_LED_MODE_TIDE = 0x1a,
|
|
UNIHUB_SL_LED_MODE_METEOR = 0x24,
|
|
UNIHUB_SL_LED_MODE_METEOR_MERGED = 0x24,
|
|
UNIHUB_SL_LED_MODE_MIXING = 0x1e,
|
|
UNIHUB_SL_LED_MODE_STACK = 0x20,
|
|
UNIHUB_SL_LED_MODE_STACK_MULTI_COLOR = 0x21,
|
|
UNIHUB_SL_LED_MODE_NEON = 0x22,
|
|
};
|
|
|
|
class LianLiUniHubSLController
|
|
{
|
|
public:
|
|
LianLiUniHubSLController(hid_device *device, const char *path);
|
|
~LianLiUniHubSLController();
|
|
|
|
std::string ReadVersion();
|
|
std::string ReadSerial();
|
|
|
|
std::string GetLocation() { return this->location; };
|
|
|
|
void UpdateMode(const std::vector<zone> &zones, const mode &active);
|
|
void DeviceUpdateZoneLEDs(size_t channel, const zone &z, const mode &active);
|
|
|
|
private:
|
|
hid_device *device;
|
|
std::string location;
|
|
|
|
bool is_merged_mode;
|
|
|
|
void SetPerLEDColor(size_t channel, const zone &z, const mode &active);
|
|
void SetModeSpecificColor(size_t channel, const mode &active);
|
|
void FillStaticColorBuffer(unsigned char *color_buf, const RGBColor *colors, size_t num_colors, float brightness_scale);
|
|
void FillDynamicColorBuffer(unsigned char *color_buf, const RGBColor *colors, size_t num_colors, float brightness_scale);
|
|
|
|
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);
|
|
};
|