OpenRGB/Controllers/SinowealthController/SinowealthGMOWController/SinowealthGMOWController.h

85 lines
2.3 KiB
C++

/*---------------------------------------------------------*\
| SinowealthGMOWController.h |
| |
| Driver for Glorious Model O Wireless |
| |
| Matt Silva (thesilvanator) May 2022 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#include <vector>
#include <hidapi/hidapi.h>
#include "RGBController.h"
#define GMOW_PACKET_SIZE 64 + 1
enum
{
GMOW_MODE_OFF = 0x00,
GMOW_MODE_RAINBOW_WAVE = 0x01,
GMOW_MODE_SPECTRUM_CYCLE = 0x02,
GMOW_MODE_CUSTOM_BREATHING = 0x03,
GMOW_MODE_STATIC = 0x04,
GMOW_MODE_BREATHING = 0x05,
GMOW_MODE_TAIL = 0x06,
GMOW_MODE_RAVE = 0x07,
GMOW_MODE_WAVE = 0x08,
};
enum
{
GMOW_SPEED1_MIN = 0x14,
GMOW_SPEED1_MID = 0x0B,
GMOW_SPEED1_MAX = 0x01,
GMOW_SPEED2_MIN = 0xC8,
GMOW_SPEED2_MID = 0x6E,
GMOW_SPEED2_MAX = 0x0A,
};
enum
{
GMOW_BRIGHTNESS_MIN = 0x00,
GMOW_BRIGHTNESS_MID = 0x7F,
GMOW_BRIGHTNESS_MAX = 0xFF,
};
enum
{
GMOW_CABLE_CONNECTED,
GMOW_DONGLE_CONNECTED
};
class SinowealthGMOWController
{
public:
SinowealthGMOWController(hid_device* dev_handle, char *_path, int type);
~SinowealthGMOWController();
std::string GetLocation();
std::string GetSerialString();
void SetMode(unsigned char mode,
unsigned char speed,
unsigned char wired_brightness,
unsigned char less_brightness,
RGBColor* color_buf,
unsigned char color_count);
std::string GetFirmwareVersion();
private:
hid_device* dev;
unsigned char mode_packet[GMOW_PACKET_SIZE];
unsigned char wired_packet[GMOW_PACKET_SIZE];
unsigned char less_packet[GMOW_PACKET_SIZE];
std::string location;
int type;
};