Files
OpenRGB/Controllers/LianLiController/StrimerLConnectController.h
Chris 40ed7bdf83 Initial commit for the Lian Li Strimer L Connect to resolve #2563
+ Adding StrimerLConnectController
+ Adding RGBController_StrimerLConnect
+ Adding ENEUSBControllersDetect.cpp to register StrimerLConnect detector
2022-07-21 00:14:58 +10:00

94 lines
4.0 KiB
C++

/*---------------------------------------------------------------------*\
| StrimerLConnectController.h |
| |
| Driver for StrimerLConnect USB Controller |
| |
| Chris M (Dr_No) 03 Jul 2022 |
| |
\*---------------------------------------------------------------------*/
#include <string>
#include <hidapi/hidapi.h>
#include "LogManager.h"
#include "RGBController.h"
#pragma once
#define HID_MAX_STR 255
#define STRIMERLCONNECT_PACKET_SIZE 255 //Buffer requires a prepended ReportID hence + 1
#define STRIMERLCONNECT_BRIGHTNESS_MIN 0 //Brightness indexes not values
#define STRIMERLCONNECT_BRIGHTNESS_MAX 4
#define STRIMERLCONNECT_STRIP_COUNT 12
enum
{
STRIMERLCONNECT_MODE_OFF = 0x00, //Turn off - All leds off
STRIMERLCONNECT_MODE_DIRECT = 0x01, //Direct Led Control - Independently set LEDs in zone
STRIMERLCONNECT_MODE_BREATHING = 0x02, //Breathing Mode - Fades between fully off and fully on.
STRIMERLCONNECT_MODE_FLASHING = 0x03, //Flashing Mode - Abruptly changing between fully off and fully on.
STRIMERLCONNECT_MODE_RAINBOWMORPH = 0x04, //Rainbow Morph Mode
STRIMERLCONNECT_MODE_RAINBOW = 0x05, //Rainbow Wave Mode - Cycle thru the color spectrum as a wave across all LEDs
STRIMERLCONNECT_MODE_BREATHCYCLE = 0x06, //Spectrum Cycle Mode - Cycles through the color spectrum on all lights on the device
STRIMERLCONNECT_MODE_SNOOKER = 0x19, //Snooker Mode
STRIMERLCONNECT_MODE_MIXING = 0x1A, //Mixing Mode
STRIMERLCONNECT_MODE_PINGPONG = 0x1B, //Ping Pong Mode
STRIMERLCONNECT_MODE_RUNWAY = 0x1C, //Runway Mode
STRIMERLCONNECT_MODE_PAINTING = 0x1D, //Painting Mode
STRIMERLCONNECT_MODE_TIDE = 0x1E, //Tide Mode
STRIMERLCONNECT_MODE_BLOWUP = 0x1F, //Blow Up Mode
STRIMERLCONNECT_MODE_METEOR = 0x20, //Meteor Mode
STRIMERLCONNECT_MODE_SHOCKWAVE = 0x21, //Shock Wave Mode
STRIMERLCONNECT_MODE_RIPPLE = 0x22, //Ripple Mode
STRIMERLCONNECT_MODE_VOICE = 0x23, //Voice Mode
STRIMERLCONNECT_MODE_BULLETSTACK = 0x24, //Bullet Stack Mode
STRIMERLCONNECT_MODE_DRIZZLING = 0x25, //Drizzling Mode
STRIMERLCONNECT_MODE_FADEOUT = 0x26, //Fade Out Mode
STRIMERLCONNECT_MODE_COLORTRANSFER = 0x27, //Color Transfer Mode
STRIMERLCONNECT_MODE_CROSSOVER = 0x28, //Cross Over Mode
STRIMERLCONNECT_MODE_TWINKLE = 0x29, //Twinkle Mode
STRIMERLCONNECT_MODE_CONTEST = 0x2A, //Contest Mode
STRIMERLCONNECT_MODE_PARALLEL = 0x2B, //Parallel Mode
};
enum
{
STRIMERLCONNECT_COMMAND_BYTE = 1,
STRIMERLCONNECT_DATA_BYTE = 2,
STRIMERLCONNECT_SPEED_BYTE = 3,
STRIMERLCONNECT_DIRECTION_BYTE = 4,
STRIMERLCONNECT_BRIGHTNESS_BYTE = 5,
STRIMERLCONNECT_MODE_COMMAND = 0x10,
STRIMERLCONNECT_COLOUR_COMMAND = 0x30,
STRIMERLCONNECT_REPORT_ID = 0xE0,
};
enum
{
STRIMERLCONNECT_SPEED_SLOWEST = 0,
STRIMERLCONNECT_SPEED_NORMAL = 2,
STRIMERLCONNECT_SPEED_FASTEST = 4,
};
class StrimerLConnectController
{
public:
StrimerLConnectController(hid_device* dev_handle, const char* path);
~StrimerLConnectController();
std::string GetDeviceName();
std::string GetSerial();
std::string GetLocation();
void SendApply();
void SetMode(uint8_t mode, uint8_t zone, uint8_t speed, uint8_t brightness, uint8_t direction, bool random_colours);
void SetLedsDirect(uint8_t zone, RGBColor *led_colours, uint8_t led_count);
private:
std::string device_name;
std::string location;
hid_device* dev;
};