mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-01-06 14:17:53 -05:00
230 lines
9.4 KiB
C++
230 lines
9.4 KiB
C++
/*-----------------------------------------*\
|
|
| LianLiHubALController.h |
|
|
| |
|
|
| Definitions and types for Lian Li AL120 |
|
|
| |
|
|
| Oliver P 04/26/2022 |
|
|
| Credit to Luca Lovisa for original work. |
|
|
\*-----------------------------------------*/
|
|
|
|
#include "RGBController.h"
|
|
|
|
#include <string>
|
|
#include <hidapi/hidapi.h>
|
|
|
|
#pragma once
|
|
|
|
/*----------------------------------------------------------------------------*\
|
|
| Global definitions. |
|
|
\*----------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------*\
|
|
| Definitions related to zone Sizes |
|
|
\*----------------------------------------------------------------------------*/
|
|
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_CHANNEL_COUNT = 0x04, /* Channel count */
|
|
UNIHUB_AL_CHAN_FANLED_COUNT = 0x20, /* Max-LED per channel count - 32 */
|
|
UNIHUB_AL_CHAN_EDGELED_COUNT = 0x30, /* Max-LED per channel count - 48 */
|
|
UNIHUB_AL_CHAN_LED_COUNT = 0x50, /* Max-LED per channel count - 80 */
|
|
};
|
|
|
|
/*----------------------------------------------------------------------------*\
|
|
| Definitions related to LED configuration. |
|
|
\*----------------------------------------------------------------------------*/
|
|
|
|
// Used for sync'd mode between Fan and Edge
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_LED_MODE_RAINBOW = 0x28, /* Rainbow mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_RAINBOW_MORPH = 0x35, /* Rainbow Morph mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_STATIC_COLOR = 0x01, /* Static Color mode */
|
|
UNIHUB_AL_LED_MODE_BREATHING = 0x02, /* Breathing mode */
|
|
UNIHUB_AL_LED_MODE_TAICHI = 0x2C, /* Neon mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_COLOR_CYCLE = 0x2B, /* Color Cycle mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_RUNWAY = 0x1A, /* Runway mode */
|
|
UNIHUB_AL_LED_MODE_METEOR = 0x19, /* Meteor mode */
|
|
UNIHUB_AL_LED_MODE_WARNING = 0x2D, /* Warning mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_VOICE = 0x2E, /* Voice mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_SPINNING_TEACUP = 0x38, /* Spinning Teacup mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_TORNADO = 0x36, /* Tornado mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_MIXING = 0x2F, /* Mixing mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_STACK = 0x30, /* Stack mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_STAGGGERED = 0x37, /* Stagggered mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_TIDE = 0x31, /* Tide mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_SCAN = 0x32, /* Scan mode - Calls Fan only */
|
|
UNIHUB_AL_LED_MODE_CONTEST = 0x33, /* Contest mode - Calls Fan only */
|
|
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_LED_SPEED_000 = 0x02, /* Very slow speed */
|
|
UNIHUB_AL_LED_SPEED_025 = 0x01, /* Rather slow speed */
|
|
UNIHUB_AL_LED_SPEED_050 = 0x00, /* Medium speed */
|
|
UNIHUB_AL_LED_SPEED_075 = 0xFF, /* Rather fast speed */
|
|
UNIHUB_AL_LED_SPEED_100 = 0xFE, /* Very fast speed */
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_LED_DIRECTION_LTR = 0x00, /* Left-to-Right direction */
|
|
UNIHUB_AL_LED_DIRECTION_RTL = 0x01, /* Right-to-Left direction */
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_LED_BRIGHTNESS_000 = 0x08, /* Very dark (off) */
|
|
UNIHUB_AL_LED_BRIGHTNESS_025 = 0x03, /* Rather dark */
|
|
UNIHUB_AL_LED_BRIGHTNESS_050 = 0x02, /* Medium bright */
|
|
UNIHUB_AL_LED_BRIGHTNESS_075 = 0x01, /* Rather bright */
|
|
UNIHUB_AL_LED_BRIGHTNESS_100 = 0x00, /* Very bright */
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_LED_LIMITER = 0x01 /* Limit the color white to 999999 as per manufacturer limits */
|
|
};
|
|
|
|
|
|
/*----------------------------------------------------------------------------*\
|
|
| Definitions related to packet configuration. |
|
|
\*----------------------------------------------------------------------------*/
|
|
|
|
enum
|
|
{
|
|
UNIHUB_AL_TRANSACTION_ID = 0xE0, /* Command value to start all packets */
|
|
};
|
|
|
|
/*----------------------------------------------------------------------------*\
|
|
| Uni Hub AL controller. |
|
|
\*----------------------------------------------------------------------------*/
|
|
|
|
class LianLiUniHubALController
|
|
{
|
|
|
|
|
|
public:
|
|
LianLiUniHubALController(hid_device* dev_handle, const char* path, unsigned short pid, std::string dev_name);
|
|
~LianLiUniHubALController();
|
|
|
|
std::string GetDeviceLocation();
|
|
std::string GetFirmwareVersionString();
|
|
std::string GetName();
|
|
std::string GetSerialString();
|
|
|
|
void SetChannelMode
|
|
(
|
|
unsigned char channel,
|
|
unsigned int mode_value,
|
|
std::vector<RGBColor> colors, // Not a pointer because the copy gets resized
|
|
unsigned int num_colors,
|
|
unsigned int num_fans,
|
|
bool upd_both_fan_edge,
|
|
unsigned int brightness,
|
|
unsigned int speed,
|
|
unsigned int direction
|
|
);
|
|
|
|
void SetChannelLEDs
|
|
(
|
|
unsigned char channel,
|
|
RGBColor * colors,
|
|
unsigned int num_colors,
|
|
float brightness
|
|
);
|
|
|
|
void SendStartAction
|
|
(
|
|
unsigned char channel,
|
|
unsigned int num_fans
|
|
);
|
|
|
|
void SendColorData
|
|
(
|
|
unsigned char channel, // Zone index
|
|
unsigned int fan_or_edge, // 1 (Fan) or 0 (Edge) modifer to channel
|
|
unsigned int num_leds,
|
|
unsigned char* led_data // Color data payload
|
|
);
|
|
|
|
void SendCommitAction
|
|
(
|
|
unsigned char channel, // Zone index
|
|
unsigned int fan_or_edge, // 1 (Fan) or 0 (Edge) modifer to channel
|
|
unsigned char effect,
|
|
unsigned char speed,
|
|
unsigned int direction,
|
|
unsigned int brightness
|
|
);
|
|
|
|
private:
|
|
/* The Uni Hub requires colors in RBG order */
|
|
struct Color
|
|
{
|
|
uint8_t r;
|
|
uint8_t b;
|
|
uint8_t g;
|
|
};
|
|
|
|
/* The values correspond to the definitions above */
|
|
struct Channel
|
|
{
|
|
uint8_t index;
|
|
|
|
uint8_t anyFanCountOffset;
|
|
uint8_t anyFanCount;
|
|
|
|
uint16_t ledActionAddress;
|
|
uint16_t ledCommitAddress;
|
|
uint16_t ledModeAddress;
|
|
uint16_t ledSpeedAddress;
|
|
uint16_t ledDirectionAddress;
|
|
uint16_t ledBrightnessAddress;
|
|
|
|
Color colors[UNIHUB_AL_CHAN_FANLED_COUNT];
|
|
|
|
uint8_t ledMode;
|
|
uint8_t ledSpeed;
|
|
uint8_t ledDirection;
|
|
uint8_t ledBrightness;
|
|
|
|
uint16_t fanHubActionAddress;
|
|
uint16_t fanHubCommitAddress;
|
|
|
|
uint16_t fanPwmActionAddress;
|
|
uint16_t fanPwmCommitAddress;
|
|
uint16_t fanRpmActionAddress;
|
|
|
|
uint16_t fanSpeed;
|
|
};
|
|
|
|
private:
|
|
hid_device* dev;
|
|
unsigned short dev_pid;
|
|
|
|
/*---------------------------------------------------------*\
|
|
| Device-specific protocol settings |
|
|
\*---------------------------------------------------------*/
|
|
unsigned char dev_transaction_id;
|
|
unsigned char dev_led_id;
|
|
|
|
/*---------------------------------------------------------*\
|
|
| Device information strings |
|
|
\*---------------------------------------------------------*/
|
|
std::string firmware_version;
|
|
std::string location;
|
|
std::string name;
|
|
device_type type;
|
|
|
|
/*---------------------------------------------------------*\
|
|
| HID report index for request and response |
|
|
\*---------------------------------------------------------*/
|
|
unsigned char report_index;
|
|
unsigned char response_index;
|
|
|
|
};
|