mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2025-12-26 08:47:50 -05:00
109 lines
3.2 KiB
C++
109 lines
3.2 KiB
C++
/*-------------------------------------------------------------------*\
|
|
| TecknetController.cpp |
|
|
| |
|
|
| Driver for Technet Devices |
|
|
| |
|
|
| Chris M (Dr_No) 29th Jul 2020 |
|
|
| |
|
|
\*-------------------------------------------------------------------*/
|
|
|
|
#include "TecknetController.h"
|
|
|
|
static unsigned char tecknet_colour_mode_data[][16] =
|
|
{
|
|
{ 0x02, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00 }, // Direct
|
|
{ 0x02, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00 }, // Breathing
|
|
};
|
|
|
|
static unsigned char tecknet_speed_mode_data[][9] =
|
|
{
|
|
{ 0x00, 0x00, 0x00, 0x00 }, // Direct
|
|
{ 0x00, 0x06, 0x03, 0x01 }, // Breathing
|
|
};
|
|
|
|
TecknetController::TecknetController(hid_device* dev_handle, char *_path)
|
|
{
|
|
const int szTemp = 256;
|
|
wchar_t tmpName[szTemp];
|
|
|
|
dev = dev_handle;
|
|
|
|
hid_get_manufacturer_string(dev, tmpName, szTemp);
|
|
std::wstring wName = std::wstring(tmpName);
|
|
device_name = std::string(wName.begin(), wName.end());
|
|
|
|
hid_get_product_string(dev, tmpName, szTemp);
|
|
wName = std::wstring(tmpName);
|
|
device_name.append(" ").append(std::string(wName.begin(), wName.end()));
|
|
|
|
hid_get_serial_number_string(dev, tmpName, szTemp);
|
|
wName = std::wstring(tmpName);
|
|
serial = std::string(wName.begin(), wName.end());
|
|
|
|
location = _path;
|
|
|
|
current_mode = TECKNET_MODE_DIRECT;
|
|
current_speed = TECKNET_SPEED_NORMAL;
|
|
current_brightness = TECKNET_BRIGHTNESS_HIGH;
|
|
}
|
|
|
|
TecknetController::~TecknetController()
|
|
{
|
|
hid_close(dev);
|
|
}
|
|
|
|
std::string TecknetController::GetDeviceName()
|
|
{
|
|
return device_name;
|
|
}
|
|
|
|
std::string TecknetController::GetSerial()
|
|
{
|
|
return serial;
|
|
}
|
|
|
|
std::string TecknetController::GetLocation()
|
|
{
|
|
return("HID: " + location);
|
|
}
|
|
|
|
void TecknetController::SetMode(unsigned char mode, unsigned char speed, unsigned char brightness)
|
|
{
|
|
current_mode = mode;
|
|
current_speed = speed;
|
|
current_brightness = brightness;
|
|
|
|
SendUpdate();
|
|
}
|
|
|
|
void TecknetController::SetColor(unsigned char red, unsigned char green, unsigned char blue)
|
|
{
|
|
//The Tecknet mouse expects inverted colours in sent packets
|
|
current_red = 255 - red;
|
|
current_green = 255 - green;
|
|
current_blue = 255 - blue;
|
|
|
|
SendUpdate();
|
|
}
|
|
|
|
void TecknetController::SendUpdate()
|
|
{
|
|
unsigned char buffer[TECKNET_PACKET_LENGTH] = { 0x00 };
|
|
int buffer_size = (sizeof(buffer) / sizeof(buffer[0]));
|
|
|
|
for(std::size_t i = 0; i < TECKNET_COLOUR_MODE_DATA_SIZE; i++)
|
|
{
|
|
buffer[i] = tecknet_colour_mode_data[current_mode][i];
|
|
}
|
|
|
|
//Set the relevant colour info
|
|
buffer[TECKNET_RED_BYTE] = current_red;
|
|
buffer[TECKNET_GREEN_BYTE] = current_green;
|
|
buffer[TECKNET_BLUE_BYTE] = current_blue;
|
|
buffer[TECKNET_BRIGHTNESS_BYTE] = current_brightness;
|
|
buffer[TECKNET_SPEED_BYTE] = tecknet_speed_mode_data[current_mode][current_speed];
|
|
|
|
hid_send_feature_report(dev, buffer, buffer_size);
|
|
}
|
|
|