mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2025-12-31 03:07:49 -05:00
288 lines
12 KiB
C++
288 lines
12 KiB
C++
/*-----------------------------------------*\
|
|
| RGBController_GloriousModelO.cpp |
|
|
| |
|
|
| Definitions and types for Glorious |
|
|
| and other Mice |
|
|
| |
|
|
| Niels Westphal (crashniels) 20/5/2020 |
|
|
\*-----------------------------------------*/
|
|
|
|
#include "GloriousModelOController.h"
|
|
#include <cstring>
|
|
|
|
#ifdef WIN32
|
|
#include <Windows.h>
|
|
#else
|
|
#include <unistd.h>
|
|
|
|
static void Sleep(unsigned int milliseconds)
|
|
{
|
|
usleep(1000 * milliseconds);
|
|
}
|
|
#endif
|
|
|
|
GloriousModelOController::GloriousModelOController(hid_device* dev_handle)
|
|
{
|
|
dev = dev_handle;
|
|
|
|
strcpy(device_name, "Glorious Mouse");
|
|
led_count = 1;
|
|
|
|
current_mode = GLORIOUS_MODE_STATIC;
|
|
current_speed = GLORIOUS_SPEED_NORMAL;
|
|
current_direction = GLORIOUS_DIRECTION_UP;
|
|
|
|
}
|
|
|
|
GloriousModelOController::~GloriousModelOController()
|
|
{
|
|
|
|
}
|
|
|
|
std::string GloriousModelOController::GetDeviceName()
|
|
{
|
|
return(device_name);
|
|
}
|
|
|
|
|
|
|
|
unsigned int GloriousModelOController::GetLEDCount()
|
|
{
|
|
return(led_count);
|
|
}
|
|
|
|
void GloriousModelOController::SetLEDColor(RGBColor* color_buf)
|
|
{
|
|
unsigned char usb_buf[520] =
|
|
{
|
|
0x04, 0x11, 0x00, 0x7b,
|
|
0x00, 0x00, 0x00, 0x00, 0x64, 0x06, 0x04, 0x24,
|
|
0xf0, 0x03, 0x07, 0x0f, 0x1f, 0x31, 0x63, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x02, 0x41, 0x01, 0x40, 0xff, 0xff, 0xff,
|
|
0x42, 0x07, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x43,
|
|
0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x42, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x42, 0x02, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00
|
|
};
|
|
|
|
usb_buf[0x0B] = 0x24;
|
|
usb_buf[0x35] = GLORIOUS_MODE_STATIC;
|
|
usb_buf[0x38] = 0x40; //max brightness
|
|
usb_buf[0x39] = RGBGetRValue(color_buf[0]);
|
|
usb_buf[0x3A] = RGBGetBValue(color_buf[0]);
|
|
usb_buf[0x3B] = RGBGetGValue(color_buf[0]);
|
|
|
|
//DPI Button
|
|
/*
|
|
usb_buf[0x0B] = 0x44; //third DPI
|
|
usb_buf[0x26] = red;
|
|
usb_buf[0x27] = blue;
|
|
usb_buf[0x28] = green;
|
|
*/
|
|
|
|
hid_send_feature_report(dev, usb_buf, sizeof(usb_buf));
|
|
Sleep(1);
|
|
}
|
|
|
|
void GloriousModelOController::SetMode(unsigned char mode,
|
|
unsigned char speed,
|
|
unsigned char direction,
|
|
RGBColor* color_buf)
|
|
{
|
|
unsigned char usb_buf[520] =
|
|
{
|
|
0x04, 0x11, 0x00, 0x7b,
|
|
0x00, 0x00, 0x00, 0x00, 0x64, 0x06, 0x04, 0x24,
|
|
0xf0, 0x03, 0x07, 0x0f, 0x1f, 0x31, 0x63, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x02, 0x41, 0x01, 0x40, 0xff, 0xff, 0xff,
|
|
0x42, 0x07, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x43,
|
|
0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x42, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x42, 0x02, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00
|
|
};
|
|
|
|
usb_buf[0x35] = mode;
|
|
|
|
switch (mode)
|
|
{
|
|
case GLORIOUS_MODE_OFF:
|
|
usb_buf[0x81] = 0x00; //mode 0 either 0x00 or 0x03
|
|
break;
|
|
case GLORIOUS_MODE_RAINBOW:
|
|
usb_buf[0x36] = speed;
|
|
usb_buf[0x37] = direction;
|
|
break;
|
|
case GLORIOUS_MODE_SPECTRUM_BREATING:
|
|
//colours not yet researched
|
|
usb_buf[0x3C] = speed; //speed for mode 3
|
|
usb_buf[0x3D] = 0x07; //maybe some kind of bank change?+
|
|
//usb_buf[0x3D] = 0x06;
|
|
usb_buf[0x3E] = RGBGetRValue(color_buf[0]); //mode 3 red 1
|
|
usb_buf[0x3F] = RGBGetBValue(color_buf[0]); //mode 3 blue 1
|
|
usb_buf[0x40] = RGBGetGValue(color_buf[0]); //mode 3 green 1
|
|
usb_buf[0x41] = RGBGetRValue(color_buf[1]); //mode 3 red 2
|
|
usb_buf[0x42] = RGBGetBValue(color_buf[1]); //mode 3 blue 2
|
|
usb_buf[0x43] = RGBGetGValue(color_buf[1]); //mode 3 green 2
|
|
usb_buf[0x44] = RGBGetRValue(color_buf[2]); //mode 3 red 3
|
|
usb_buf[0x45] = RGBGetBValue(color_buf[2]); //mode 3 blue 3
|
|
usb_buf[0x46] = RGBGetGValue(color_buf[2]); //mode 3 green 3
|
|
usb_buf[0x47] = RGBGetRValue(color_buf[3]); //mode 3 red 4
|
|
usb_buf[0x48] = RGBGetBValue(color_buf[3]); //mode 3 blue 4
|
|
usb_buf[0x49] = RGBGetGValue(color_buf[3]); //mode 3 green 4
|
|
usb_buf[0x4A] = RGBGetRValue(color_buf[4]); //mode 3 red 5
|
|
usb_buf[0x4B] = RGBGetBValue(color_buf[4]); //mode 3 blue 5
|
|
usb_buf[0x4C] = RGBGetGValue(color_buf[4]); //mode 3 green 5
|
|
usb_buf[0x4D] = RGBGetRValue(color_buf[5]); //mode 3 red 6
|
|
usb_buf[0x4E] = RGBGetBValue(color_buf[5]); //mode 3 blue 6
|
|
usb_buf[0x4F] = RGBGetGValue(color_buf[5]); //mode 3 green 6
|
|
usb_buf[0x50] = RGBGetRValue(color_buf[6]); //mode 3 red 7
|
|
usb_buf[0x51] = RGBGetBValue(color_buf[6]); //mode 3 blue 7
|
|
usb_buf[0x52] = RGBGetGValue(color_buf[6]); //mode 3 green 7
|
|
break;
|
|
case GLORIOUS_MODE_TAIL:
|
|
usb_buf[0x53] = speed; //Speed for mode 4
|
|
break;
|
|
case GLORIOUS_MODE_SPECTRUM_CYCLE:
|
|
usb_buf[0x54] = speed; //Speed for mode 1,2,5
|
|
break;
|
|
case GLORIOUS_MODE_RAVE:
|
|
usb_buf[0x74] = speed; //Speed for mode 7
|
|
usb_buf[0x75] = RGBGetRValue(color_buf[0]); //mode 7 red 1
|
|
usb_buf[0x76] = RGBGetBValue(color_buf[0]); //mode 7 blue 1
|
|
usb_buf[0x77] = RGBGetGValue(color_buf[0]); //mode 7 green 1
|
|
usb_buf[0x78] = RGBGetRValue(color_buf[1]); //mode 7 red 2
|
|
usb_buf[0x79] = RGBGetBValue(color_buf[1]); //mode 7 blue 2
|
|
usb_buf[0x7A] = RGBGetGValue(color_buf[1]); //mode 7 green 2
|
|
break;
|
|
case GLORIOUS_MODE_WAVE:
|
|
usb_buf[0x7C] = speed; //Speed for mode 9
|
|
break;
|
|
case GLORIOUS_MODE_BREATHING:
|
|
usb_buf[0x7D] = speed;
|
|
usb_buf[0x7E] = RGBGetRValue(color_buf[0]); //mode 0a red
|
|
usb_buf[0x7F] = RGBGetBValue(color_buf[0]); //mode 0a blue
|
|
usb_buf[0x80] = RGBGetGValue(color_buf[0]); //mode 0a green
|
|
default:
|
|
break;
|
|
}
|
|
|
|
hid_send_feature_report(dev, usb_buf, sizeof(usb_buf));
|
|
Sleep(1);
|
|
}
|