mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-01-02 04:07:48 -05:00
118 lines
3.6 KiB
C++
118 lines
3.6 KiB
C++
/*---------------------------------------------------------------*\
|
|
| GaiZhongGaiKeyboardController.cpp |
|
|
| |
|
|
| https://oshwlab.com/yangdsada/GaiZhongGai-Keyboard-68-4PRO |
|
|
| |
|
|
| An Yang 2022/6/12 |
|
|
\*---------------------------------------------------------------*/
|
|
|
|
#include <cstring>
|
|
#include "GaiZhongGaiKeyboardController.h"
|
|
|
|
GaiZhongGaiKeyboardController::GaiZhongGaiKeyboardController(hid_device* dev_handle, hid_device_info* info)
|
|
{
|
|
dev = dev_handle;
|
|
location = info->path;
|
|
usb_pid = info->product_id;
|
|
/*-----------------------------------------------------*\
|
|
| Obtaining the Firmware Version |
|
|
\*-----------------------------------------------------*/
|
|
char str[10];
|
|
sprintf(str, "Ver%04X", info->release_number);
|
|
version = str;
|
|
}
|
|
|
|
GaiZhongGaiKeyboardController::~GaiZhongGaiKeyboardController()
|
|
{
|
|
/*-----------------------------------------------------*\
|
|
| Restore built-in light effect |
|
|
\*-----------------------------------------------------*/
|
|
unsigned char usb_buf[65];
|
|
memset(usb_buf, 0x00, sizeof(usb_buf));
|
|
usb_buf[1] = 0xFF;
|
|
hid_write(dev, usb_buf, 65);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
|
|
|
hid_close(dev);
|
|
}
|
|
|
|
std::string GaiZhongGaiKeyboardController::GetDeviceLocation()
|
|
{
|
|
return("HID: " + location);
|
|
}
|
|
|
|
std::string GaiZhongGaiKeyboardController::GetSerialString()
|
|
{
|
|
wchar_t serial_string[128];
|
|
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
|
|
|
if(ret != 0)
|
|
{
|
|
return("");
|
|
}
|
|
|
|
std::wstring return_wstring = serial_string;
|
|
std::string return_string(return_wstring.begin(), return_wstring.end());
|
|
|
|
return(return_string);
|
|
}
|
|
|
|
std::string GaiZhongGaiKeyboardController::GetVersion()
|
|
{
|
|
return(version);
|
|
}
|
|
|
|
unsigned short GaiZhongGaiKeyboardController::GetUSBPID()
|
|
{
|
|
return(usb_pid);
|
|
}
|
|
|
|
void GaiZhongGaiKeyboardController::SendColors
|
|
(
|
|
unsigned char* color_data,
|
|
unsigned int /*color_data_size*/
|
|
)
|
|
{
|
|
unsigned char usb_buf[65];
|
|
|
|
memset(usb_buf, 0x00, sizeof(usb_buf));
|
|
|
|
switch(usb_pid)
|
|
{
|
|
case GAIZHONGGAI_17_TOUCH_PRO_PID: //17PAD+Touch
|
|
case GAIZHONGGAI_20_PRO_PID: //20PAD
|
|
usb_buf[1] = 0x10;
|
|
memcpy(usb_buf + 2, color_data + 68 * 3, 60);
|
|
hid_write(dev, usb_buf, 65);
|
|
break;
|
|
|
|
case GAIZHONGGAI_17_PRO_PID: //17PAD
|
|
usb_buf[1] = 0x10;
|
|
memcpy(usb_buf + 2, color_data + 68 * 3, 51);
|
|
hid_write(dev, usb_buf, 65);
|
|
break;
|
|
|
|
case GAIZHONGGAI_68_PRO_PID: //68%
|
|
usb_buf[1] = 0x10;
|
|
memcpy(usb_buf + 2, color_data + 0 * 3, 63);
|
|
hid_write(dev, usb_buf, 65);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
|
|
|
usb_buf[1] = 0x11;
|
|
memcpy(usb_buf + 2, color_data + 21 * 3, 63);
|
|
hid_write(dev, usb_buf, 65);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
|
|
|
usb_buf[1] = 0x12;
|
|
memcpy(usb_buf + 2, color_data + 42 * 3, 63);
|
|
hid_write(dev, usb_buf, 65);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
|
|
|
memset(usb_buf, 0x00, sizeof(usb_buf));
|
|
usb_buf[1] = 0x13;
|
|
memcpy(usb_buf + 2, color_data + 63 * 3, 15);
|
|
hid_write(dev, usb_buf, 65);
|
|
break;
|
|
}
|
|
}
|