Files
OpenRGB/Controllers/LightSaltController/LightSaltController.h

110 lines
2.8 KiB
C++

/*---------------------------------------------------------*\
| LightSaltController.h |
| |
| Driver for LightSalt Peripherals |
| |
| James Buren (braewoods) 23 Jul 2024 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*---------------------------------------------------------*/
#pragma once
#include <string>
#include <hidapi.h>
#include "RGBController.h"
#define LIGHTSALT_PACKET_LENGTH 32
#define LIGHTSALT_WRITE_LENGTH (LIGHTSALT_PACKET_LENGTH + 1)
#define LIGHTSALT_READ_LENGTH (LIGHTSALT_PACKET_LENGTH)
enum
{
LIGHTSALT_TYPE_KEYBOARD,
LIGHTSALT_TYPE_KEYPAD,
LIGHTSALT_TYPE_MAXIMUM
};
enum
{
LIGHTSALT_MODE_CUSTOM,
LIGHTSALT_MODE_POINT,
LIGHTSALT_MODE_AREA,
LIGHTSALT_MODE_COLLAPSE,
LIGHTSALT_MODE_EXPAND,
LIGHTSALT_MODE_EXPLODE,
LIGHTSALT_MODE_DART,
LIGHTSALT_MODE_FLAME,
LIGHTSALT_MODE_LASER,
LIGHTSALT_MODE_BREATHING,
LIGHTSALT_MODE_TRICOLOR_RADAR,
LIGHTSALT_MODE_WHEEL_1,
LIGHTSALT_MODE_WHEEL_2,
LIGHTSALT_MODE_WAVE_1,
LIGHTSALT_MODE_WAVE_2,
LIGHTSALT_MODE_WAVE_3,
LIGHTSALT_MODE_RAINBOW_1,
LIGHTSALT_MODE_RAINBOW_2,
LIGHTSALT_MODE_MAXIMUM
};
enum
{
LIGHTSALT_SETS_MAX = 4,
LIGHTSALT_ROWS_MAX = 9,
LIGHTSALT_COLUMNS_MAX = 10
};
enum
{
LIGHTSALT_SPEED_MINIMUM = 0x01,
LIGHTSALT_SPEED_MAXIMUM = 0x32,
LIGHTSALT_SPEED_DEFAULT = 0x19
};
enum
{
LIGHTSALT_BRIGHTNESS_MINIMUM = 0x00,
LIGHTSALT_BRIGHTNESS_MAXIMUM = 0xFF,
LIGHTSALT_BRIGHTNESS_DEFAULT = 0x80
};
class LightSaltController
{
public:
LightSaltController(hid_device* dev_handle, const hid_device_info& info);
~LightSaltController();
std::string GetDeviceLocation();
std::string GetSerial();
std::string GetManufacturer();
std::string GetProduct();
std::string GetDeviceModel();
std::string GetDeviceClass();
std::string GetFirmwareVersion();
int GetDeviceType();
void SetColors(RGBColor* colors, int sets, int rows, int columns);
void ApplyColors(int sets);
void SaveColors(int sets);
void SetMode(int mode, int direction, int speed);
void SetFilter(RGBColor color);
void SetBrightness(uint8_t brightness);
private:
hid_device* dev;
std::string device_location;
std::string manufacturer;
std::string product;
std::string device_model;
std::string device_class;
std::string firmware_version;
int device_type;
void QueryDeviceModel();
void QueryDeviceClass();
void SetDeviceType();
};