mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2025-12-23 23:37:48 -05:00
100 lines
2.3 KiB
C++
100 lines
2.3 KiB
C++
/*---------------------------------------------------------*\
|
|
| MadCatzCyborgController.cpp |
|
|
| |
|
|
| Driver for MadCatz Cyborg Gaming Light |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-or-later |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#include "MadCatzCyborgController.h"
|
|
#include "StringUtils.h"
|
|
#include <cstring>
|
|
|
|
MadCatzCyborgController::MadCatzCyborgController(hid_device* dev_handle, const char* path)
|
|
{
|
|
dev = dev_handle;
|
|
location = path;
|
|
}
|
|
|
|
MadCatzCyborgController::~MadCatzCyborgController()
|
|
{
|
|
if(dev != nullptr)
|
|
{
|
|
hid_close(dev);
|
|
dev = nullptr;
|
|
}
|
|
}
|
|
|
|
std::string MadCatzCyborgController::GetDeviceLocation()
|
|
{
|
|
return(location);
|
|
}
|
|
|
|
std::string MadCatzCyborgController::GetSerialString()
|
|
{
|
|
wchar_t serial_string[128];
|
|
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
|
|
|
if(ret != 0)
|
|
{
|
|
return("");
|
|
}
|
|
|
|
return(StringUtils::wstring_to_string(serial_string));
|
|
}
|
|
|
|
void MadCatzCyborgController::Initialize()
|
|
{
|
|
if(dev == nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Enable the device
|
|
unsigned char enable_buf[2] = { CMD_ENABLE, 0x00 };
|
|
hid_send_feature_report(dev, enable_buf, 2);
|
|
}
|
|
|
|
void MadCatzCyborgController::SetLEDColor(unsigned char red, unsigned char green, unsigned char blue)
|
|
{
|
|
if(dev == nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Format: [CMD_COLOR][0x00][R][G][B][0x00][0x00][0x00][0x00]
|
|
unsigned char usb_buf[9] =
|
|
{
|
|
CMD_COLOR,
|
|
0x00,
|
|
red,
|
|
green,
|
|
blue,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00
|
|
};
|
|
|
|
hid_send_feature_report(dev, usb_buf, 9);
|
|
}
|
|
|
|
void MadCatzCyborgController::SetIntensity(unsigned char intensity)
|
|
{
|
|
if(dev == nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Clamp intensity to 0-100
|
|
if(intensity > 100)
|
|
{
|
|
intensity = 100;
|
|
}
|
|
|
|
// Format: [CMD_INTENSITY][0x00][intensity_value]
|
|
unsigned char usb_buf[3] = { CMD_INTENSITY, 0x00, intensity };
|
|
hid_send_feature_report(dev, usb_buf, 3);
|
|
}
|