130 lines
4.2 KiB
C++
130 lines
4.2 KiB
C++
/*-------------------------------------------------------------------*\
|
|
| QMKRGBMatrixController.h |
|
|
| |
|
|
| Driver for QMK keybaords using RGB Matrix |
|
|
| |
|
|
| Kasper 10th Octobber 2020 |
|
|
| |
|
|
\*-------------------------------------------------------------------*/
|
|
|
|
#include <string>
|
|
#include <array>
|
|
#include <hidapi/hidapi.h>
|
|
#include "RGBController.h"
|
|
#include "hsv.h"
|
|
|
|
#pragma once
|
|
|
|
enum CommandsId
|
|
{
|
|
QMK_RGBMATRIX_SET_SINGLE_LED = 3,
|
|
QMK_RGBMATRIX_SET_LEDS,
|
|
|
|
QMK_RGBMATRIX_SET_MODE,
|
|
QMK_RGBMATRIX_SET_MODE_AND_SPEED,
|
|
QMK_RGBMATRIX_SET_COLOR_MODE_AND_SPEED,
|
|
|
|
QMK_RGBMATRIX_GET_QMK_VERSION,
|
|
QMK_RGBMATRIX_GET_DEVICE_NAME,
|
|
QMK_RGBMATRIX_GET_ZONES_COUNT,
|
|
QMK_RGBMATRIX_GET_ZONE_NAME,
|
|
QMK_RGBMATRIX_GET_ZONE_TYPE,
|
|
QMK_RGBMATRIX_GET_ZONE_SIZE,
|
|
QMK_RGBMATRIX_GET_LED_NAME,
|
|
QMK_RGBMATRIX_GET_LED_MATRIX_COLUMNS,
|
|
QMK_RGBMATRIX_GET_LED_MATRIX_ROWS,
|
|
QMK_RGBMATRIX_GET_LED_VALUE_IN_MATRIX,
|
|
QMK_RGBMATRIX_GET_LED_COLOR,
|
|
QMK_RGBMATRIX_GET_HSV
|
|
};
|
|
|
|
enum EEPROMCommands
|
|
{
|
|
QMK_RGBMATRIX_EEPROM_SAVE,
|
|
QMK_RGBMATRIX_EEPROM_DONT_SAVE
|
|
};
|
|
|
|
enum ModeCommands
|
|
{
|
|
QMK_RGBMATRIX_MODE_HID_DIRECT = 1,
|
|
QMK_RGBMATRIX_MODE_STATIC,
|
|
QMK_RGBMATRIX_MODE_ALPHA_MOD,
|
|
QMK_RGBMATRIX_MODE_STATIC_GRADIENT_LEFT_RIGHT,
|
|
QMK_RGBMATRIX_MODE_STATIC_GRADIENT_UP_DOWN,
|
|
QMK_RGBMATRIX_MODE_BREATHING,
|
|
QMK_RGBMATRIX_MODE_BAND_SAT,
|
|
QMK_RGBMATRIX_MODE_BAND_VAL,
|
|
QMK_RGBMATRIX_MODE_BAND_PINWHEEL_SAT,
|
|
QMK_RGBMATRIX_MODE_BAND_PINWHEEL_VAL,
|
|
QMK_RGBMATRIX_MODE_BAND_SPIRAL_SAT,
|
|
QMK_RGBMATRIX_MODE_BAND_SPIRAL_VAL,
|
|
QMK_RGBMATRIX_MODE_CYCLE_ALL,
|
|
QMK_RGBMATRIX_MODE_CYCLE_LEFT_RIGHT,
|
|
QMK_RGBMATRIX_MODE_CYCLE_UP_DOWN,
|
|
QMK_RGBMATRIX_MODE_CYCLE_OUT_IN,
|
|
QMK_RGBMATRIX_MODE_CYCLE_OUT_IN_DUAL,
|
|
QMK_RGBMATRIX_MODE_RAINBOW_MOVING_CHEVRON,
|
|
QMK_RGBMATRIX_MODE_DUAL_BEACON,
|
|
QMK_RGBMATRIX_MODE_CYCLE_PINWHEEL,
|
|
QMK_RGBMATRIX_MODE_CYCLE_SPIRAL,
|
|
QMK_RGBMATRIX_MODE_RAINBOW_BEACON,
|
|
QMK_RGBMATRIX_MODE_RAINBOW_PINWHEELS,
|
|
QMK_RGBMATRIX_MODE_RAINDROPS,
|
|
QMK_RGBMATRIX_MODE_JELLYBEAN_RAINDROPS,
|
|
QMK_RGBMATRIX_MODE_TYPING_HEATMAP,
|
|
QMK_RGBMATRIX_MODE_DIGITAL_RAIN,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_SIMPLE,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_WIDE,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_MULTIWIDE,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_CROSS,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_MULTICROSS,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_NEXUS,
|
|
QMK_RGBMATRIX_MODE_SOLID_REACTIVE_MULTINEXUS,
|
|
QMK_RGBMATRIX_MODE_SPLASH,
|
|
QMK_RGBMATRIX_MODE_MULTISPLASH,
|
|
QMK_RGBMATRIX_MODE_SOLID_SPLASH,
|
|
QMK_RGBMATRIX_MODE_SOLID_MULTISPLASH,
|
|
};
|
|
|
|
enum SpeedCommands
|
|
{
|
|
QMK_RGBMATRIX_SPEED_SLOWEST = 0x00, /* Slowest speed */
|
|
QMK_RGBMATRIX_SPEED_NORMAL = 0x7F, /* Normal speed */
|
|
QMK_RGBMATRIX_SPEED_FASTEST = 0xFF, /* Fastest speed */
|
|
};
|
|
|
|
class QMKRGBMatrixController
|
|
{
|
|
public:
|
|
QMKRGBMatrixController(hid_device* dev_handle, const char* path);
|
|
~QMKRGBMatrixController();
|
|
|
|
void SetSingleLED(unsigned int led, unsigned char red, unsigned char green, unsigned char blue);
|
|
void SetLEDs(RGBColor* colors, unsigned int num_colors);
|
|
|
|
void SetMode(unsigned char mode);
|
|
void SetModeAndSpeed(unsigned char mode, unsigned char speed);
|
|
void SetColorModeAndSpeed(hsv_t hsv_color, unsigned char mode, unsigned char speed);
|
|
|
|
std::string GetLocation();
|
|
|
|
std::string GetVersion();
|
|
std::string GetName();
|
|
unsigned int GetZonesCount();
|
|
std::string GetZoneName(int zone);
|
|
unsigned int GetZoneType(int zone);
|
|
unsigned int GetZoneSize(int zone);
|
|
std::string GetLEDName(int led);
|
|
unsigned int GetLEDMatirxRows();
|
|
unsigned int GetLEDMatirxColumns();
|
|
unsigned int GetLEDValueInMatrix(int column, int row);
|
|
RGBColor GetLEDColor(unsigned int led);
|
|
unsigned int GetHSV();
|
|
|
|
protected:
|
|
hid_device* dev;
|
|
private:
|
|
std::string location;
|
|
};
|