CorsairPeripherals: add hardware modes
This commit is contained in:
parent
e1e9af2f5d
commit
f870ad20f2
5 changed files with 371 additions and 40 deletions
|
|
@ -338,18 +338,48 @@ void CorsairPeripheralController::SetName(std::string device_name)
|
|||
name = device_name;
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SwitchMode(bool software)
|
||||
{
|
||||
if(software)
|
||||
{
|
||||
if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT || logical_layout == CORSAIR_TYPE_K70_MK2 || logical_layout == CORSAIR_TYPE_K68)
|
||||
{
|
||||
SpecialFunctionControl();
|
||||
}
|
||||
|
||||
LightingControl();
|
||||
|
||||
if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT || logical_layout == CORSAIR_TYPE_K70_MK2 || logical_layout == CORSAIR_TYPE_K68)
|
||||
{
|
||||
SetupK55AndK95LightingControl();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
usb_buf[1] = CORSAIR_COMMAND_WRITE;
|
||||
usb_buf[2] = CORSAIR_PROPERTY_SPECIAL_FUNCTION;
|
||||
usb_buf[3] = CORSAIR_LIGHTING_CONTROL_HARDWARE;
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------*\
|
||||
| Private packet sending functions. |
|
||||
\*-------------------------------------------------------------------------------------------------*/
|
||||
|
||||
void CorsairPeripheralController::LightingControl()
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Lighting Control packet |
|
||||
|
|
@ -386,7 +416,7 @@ void CorsairPeripheralController::LightingControl()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
|
|
@ -395,12 +425,12 @@ void CorsairPeripheralController::LightingControl()
|
|||
|
||||
void CorsairPeripheralController::SetupK55AndK95LightingControl()
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up a packet |
|
||||
|
|
@ -415,7 +445,7 @@ void CorsairPeripheralController::SetupK55AndK95LightingControl()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
unsigned int* skipped_identifiers = key_mapping_k95_plat_ansi;
|
||||
int skipped_identifiers_count = sizeof(key_mapping_k95_plat_ansi) / sizeof(key_mapping_k95_plat_ansi[0]);
|
||||
|
|
@ -440,7 +470,7 @@ void CorsairPeripheralController::SetupK55AndK95LightingControl()
|
|||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up a packet - a sequence of 120 ids |
|
||||
|
|
@ -467,18 +497,18 @@ void CorsairPeripheralController::SetupK55AndK95LightingControl()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SpecialFunctionControl()
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Lighting Control packet |
|
||||
|
|
@ -491,19 +521,19 @@ void CorsairPeripheralController::SpecialFunctionControl()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::ReadFirmwareInfo()
|
||||
{
|
||||
int actual;
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
char offset = 0;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Read Firmware Info packet |
|
||||
|
|
@ -517,15 +547,15 @@ void CorsairPeripheralController::ReadFirmwareInfo()
|
|||
| If that fails, repeat the send and read the reply as |
|
||||
| a feature report. |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char*)usb_buf, 65);
|
||||
actual = hid_read_timeout(dev, (unsigned char*)usb_buf, 65, 1000);
|
||||
hid_write(dev, (unsigned char*)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
actual = hid_read_timeout(dev, (unsigned char*)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH, 1000);
|
||||
|
||||
if(actual == 0)
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Set up Read Firmware Info packet |
|
||||
|
|
@ -534,8 +564,8 @@ void CorsairPeripheralController::ReadFirmwareInfo()
|
|||
usb_buf[0x01] = CORSAIR_COMMAND_READ;
|
||||
usb_buf[0x02] = CORSAIR_PROPERTY_FIRMWARE_INFO;
|
||||
|
||||
hid_send_feature_report(dev, (unsigned char*)usb_buf, 65);
|
||||
actual = hid_get_feature_report(dev, (unsigned char*)usb_buf, 65);
|
||||
hid_send_feature_report(dev, (unsigned char*)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
actual = hid_get_feature_report(dev, (unsigned char*)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
offset = 1;
|
||||
}
|
||||
|
||||
|
|
@ -659,12 +689,12 @@ void CorsairPeripheralController::StreamPacket
|
|||
unsigned char* data_ptr
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Stream packet |
|
||||
|
|
@ -682,7 +712,107 @@ void CorsairPeripheralController::StreamPacket
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SetHardwareMode
|
||||
(
|
||||
int mode_value,
|
||||
unsigned int color_mode,
|
||||
std::vector<RGBColor> colors,
|
||||
unsigned int speed,
|
||||
unsigned int direction,
|
||||
unsigned char brightness
|
||||
)
|
||||
{
|
||||
unsigned char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set the brightness |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[1] = CORSAIR_COMMAND_WRITE;
|
||||
usb_buf[2] = 0x05;
|
||||
usb_buf[3] = 0x02;
|
||||
usb_buf[5] = brightness;
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send "lght_00.d" |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
usb_buf[1] = CORSAIR_COMMAND_WRITE;
|
||||
usb_buf[2] = 0x17;
|
||||
usb_buf[3] = 0x05;
|
||||
usb_buf[5] = 0x6c;
|
||||
usb_buf[6] = 0x67;
|
||||
usb_buf[7] = 0x68;
|
||||
usb_buf[8] = 0x74;
|
||||
usb_buf[9] = 0x5F;
|
||||
usb_buf[10] = 0x30;
|
||||
usb_buf[11] = 0x30;
|
||||
usb_buf[12] = 0x2E;
|
||||
usb_buf[13] = 0x64;
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Stream the mode data |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
usb_buf[1] = CORSAIR_COMMAND_STREAM;
|
||||
usb_buf[2] = 0x01;
|
||||
usb_buf[3] = 0x0D;
|
||||
usb_buf[5] = mode_value;
|
||||
usb_buf[8] = direction;
|
||||
|
||||
if(mode_value == CORSAIR_HW_MODE_TYPE_KEY_VALUE)
|
||||
{
|
||||
usb_buf[9] = speed;
|
||||
}
|
||||
else
|
||||
{
|
||||
usb_buf[6] = speed;
|
||||
}
|
||||
|
||||
if(color_mode == MODE_COLORS_RANDOM)
|
||||
{
|
||||
usb_buf[7] = 0x01;
|
||||
}
|
||||
else if (color_mode == MODE_COLORS_MODE_SPECIFIC)
|
||||
{
|
||||
usb_buf[7] = 0x03;
|
||||
|
||||
usb_buf[10] = RGBGetRValue(colors[0]);
|
||||
usb_buf[11] = RGBGetGValue(colors[0]);
|
||||
usb_buf[12] = RGBGetBValue(colors[0]);
|
||||
usb_buf[13] = 0xFF;
|
||||
|
||||
usb_buf[14] = RGBGetRValue(colors[1]);
|
||||
usb_buf[15] = RGBGetGValue(colors[1]);
|
||||
usb_buf[16] = RGBGetBValue(colors[1]);
|
||||
usb_buf[17] = 0xFF;
|
||||
}
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Stop stream and commit |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
usb_buf[1] = CORSAIR_COMMAND_WRITE;
|
||||
usb_buf[2] = 0x17;
|
||||
usb_buf[3] = 0x09;
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
usb_buf[3] = 0x08;
|
||||
|
||||
hid_write(dev, usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SubmitKeyboardFullColors
|
||||
|
|
@ -692,12 +822,12 @@ void CorsairPeripheralController::SubmitKeyboardFullColors
|
|||
unsigned char finish_val
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Submit Keyboard 24-Bit Colors packet |
|
||||
|
|
@ -712,7 +842,7 @@ void CorsairPeripheralController::SubmitKeyboardFullColors
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SubmitKeyboardZonesColors
|
||||
|
|
@ -722,7 +852,7 @@ void CorsairPeripheralController::SubmitKeyboardZonesColors
|
|||
RGBColor right
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -750,7 +880,7 @@ void CorsairPeripheralController::SubmitKeyboardZonesColors
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SubmitKeyboardLimitedColors
|
||||
|
|
@ -758,7 +888,7 @@ void CorsairPeripheralController::SubmitKeyboardLimitedColors
|
|||
unsigned char byte_count
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -776,7 +906,7 @@ void CorsairPeripheralController::SubmitKeyboardLimitedColors
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SubmitMouseColors
|
||||
|
|
@ -785,12 +915,12 @@ void CorsairPeripheralController::SubmitMouseColors
|
|||
RGBColor * color_data
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Submit Mouse Colors packet |
|
||||
|
|
@ -815,7 +945,7 @@ void CorsairPeripheralController::SubmitMouseColors
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
||||
void CorsairPeripheralController::SubmitMousematColors
|
||||
|
|
@ -824,12 +954,12 @@ void CorsairPeripheralController::SubmitMousematColors
|
|||
RGBColor * color_data
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
char usb_buf[CORSAIR_PERIPHERAL_PACKET_LENGTH];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
memset(usb_buf, 0x00, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Submit Mouse Colors packet |
|
||||
|
|
@ -854,5 +984,5 @@ void CorsairPeripheralController::SubmitMousematColors
|
|||
| Send packet using feature reports, as headset stand |
|
||||
| seems to not update completely using HID writes |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, (unsigned char *)usb_buf, CORSAIR_PERIPHERAL_PACKET_LENGTH);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define CORSAIR_PERIPHERAL_PACKET_LENGTH 65
|
||||
|
||||
enum
|
||||
{
|
||||
CORSAIR_COMMAND_WRITE = 0x07,
|
||||
|
|
@ -67,6 +69,28 @@ enum
|
|||
CORSAIR_TYPE_K68 = 5
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CORSAIR_MODE_DIRECT_VALUE = 0xFF,
|
||||
CORSAIR_HW_MODE_COLOR_PULSE_VALUE = 0x01,
|
||||
CORSAIR_HW_MODE_COLOR_SHIFT_VALUE = 0x00,
|
||||
CORSAIR_HW_MODE_COLOR_WAVE_VALUE = 0x04,
|
||||
CORSAIR_HW_MODE_RAINBOW_WAVE_VALUE = 0x03,
|
||||
CORSAIR_HW_MODE_RAIN_VALUE = 0x06,
|
||||
CORSAIR_HW_MODE_SPIRAL_VALUE = 0x02,
|
||||
CORSAIR_HW_MODE_TYPE_KEY_VALUE = 0x08,
|
||||
CORSAIR_HW_MODE_TYPE_RIPPLE_VALUE = 0x09,
|
||||
CORSAIR_HW_MODE_VISOR_VALUE = 0x05
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CORSAIR_HW_MODE_SPEED_MIN = 0x01,
|
||||
CORSAIR_HW_MODE_SPEED_MAX = 0x03,
|
||||
CORSAIR_HW_MODE_BRIGHTNESS_MIN = 0x00,
|
||||
CORSAIR_HW_MODE_BRIGHTNESS_MAX = 0x03
|
||||
};
|
||||
|
||||
class CorsairPeripheralController
|
||||
{
|
||||
public:
|
||||
|
|
@ -87,6 +111,18 @@ public:
|
|||
void SetLEDsMouse(std::vector<RGBColor> colors);
|
||||
void SetLEDsMousemat(std::vector<RGBColor> colors);
|
||||
void SetName(std::string device_name);
|
||||
void SetHardwareMode
|
||||
(
|
||||
int mode_value,
|
||||
unsigned int color_mode,
|
||||
std::vector<RGBColor> colors,
|
||||
unsigned int speed,
|
||||
unsigned int direction,
|
||||
unsigned char brightness
|
||||
);
|
||||
|
||||
|
||||
void SwitchMode(bool software);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
|
|
|
|||
|
|
@ -179,7 +179,11 @@ void DetectCorsairPeripheralControllers(hid_device_info* info, const std::string
|
|||
|
||||
if(controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN)
|
||||
{
|
||||
RGBController_CorsairPeripheral* rgb_controller = new RGBController_CorsairPeripheral(controller);
|
||||
bool supports_hardware_modes =
|
||||
(info->product_id == CORSAIR_K70_RGB_MK2_PID) ||
|
||||
(info->product_id == CORSAIR_K70_RGB_MK2_LP_PID);
|
||||
|
||||
RGBController_CorsairPeripheral* rgb_controller = new RGBController_CorsairPeripheral(controller, supports_hardware_modes);
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*-----------------------------------------*\
|
||||
/*-----------------------------------------*\
|
||||
| RGBController_CorsairPeripheral.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for Corsair RGB |
|
||||
|
|
@ -760,12 +760,16 @@ static const char* corsair_harpoon_pro_leds[] =
|
|||
@type USB
|
||||
@save :x:
|
||||
@direct :white_check_mark:
|
||||
@effects :x:
|
||||
@effects :tools:
|
||||
@detectors DetectCorsairPeripheralControllers
|
||||
@comment
|
||||
All controllers support `Direct` mode
|
||||
Currently HW modes are implemented for the following devices:
|
||||
* Corsair K70 RGB MK.2
|
||||
* Corsair K70 RGB MK.2 Low Profile
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_CorsairPeripheral::RGBController_CorsairPeripheral(CorsairPeripheralController* controller_ptr)
|
||||
RGBController_CorsairPeripheral::RGBController_CorsairPeripheral(CorsairPeripheralController* controller_ptr, bool supports_hardware_modes)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
|
|
@ -782,11 +786,142 @@ RGBController_CorsairPeripheral::RGBController_CorsairPeripheral(CorsairPeripher
|
|||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = 0;
|
||||
Direct.value = CORSAIR_MODE_DIRECT_VALUE;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
if(supports_hardware_modes)
|
||||
{
|
||||
mode ColorPulse;
|
||||
ColorPulse.name = "ColorPulse";
|
||||
ColorPulse.value = CORSAIR_HW_MODE_COLOR_PULSE_VALUE;
|
||||
ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
ColorPulse.color_mode = MODE_COLORS_RANDOM;
|
||||
ColorPulse.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorPulse.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorPulse.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
ColorPulse.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
ColorPulse.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
ColorPulse.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
ColorPulse.colors.resize(2);
|
||||
modes.push_back(ColorPulse);
|
||||
|
||||
mode ColorShift;
|
||||
ColorShift.name = "ColorShift";
|
||||
ColorShift.value = CORSAIR_HW_MODE_COLOR_SHIFT_VALUE;
|
||||
ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
ColorShift.color_mode = MODE_COLORS_RANDOM;
|
||||
ColorShift.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorShift.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorShift.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
ColorShift.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
ColorShift.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
ColorShift.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
ColorShift.colors.resize(2);
|
||||
modes.push_back(ColorShift);
|
||||
|
||||
mode ColorWave;
|
||||
ColorWave.name = "ColorWave";
|
||||
ColorWave.value = CORSAIR_HW_MODE_COLOR_WAVE_VALUE;
|
||||
ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
ColorWave.color_mode = MODE_COLORS_RANDOM;
|
||||
ColorWave.direction = MODE_DIRECTION_LEFT;
|
||||
ColorWave.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorWave.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
ColorWave.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
ColorWave.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
ColorWave.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
ColorWave.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
ColorWave.colors.resize(2);
|
||||
modes.push_back(ColorWave);
|
||||
|
||||
mode RainbowWave;
|
||||
RainbowWave.name = "RainbowWave";
|
||||
RainbowWave.value = CORSAIR_HW_MODE_RAINBOW_WAVE_VALUE;
|
||||
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
RainbowWave.color_mode = MODE_COLORS_NONE;
|
||||
RainbowWave.direction = MODE_DIRECTION_LEFT;
|
||||
RainbowWave.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
RainbowWave.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
RainbowWave.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
RainbowWave.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
RainbowWave.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
RainbowWave.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
modes.push_back(RainbowWave);
|
||||
|
||||
mode Rain;
|
||||
Rain.name = "Rain";
|
||||
Rain.value = CORSAIR_HW_MODE_RAIN_VALUE;
|
||||
Rain.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Rain.color_mode = MODE_COLORS_RANDOM;
|
||||
Rain.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Rain.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Rain.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
Rain.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
Rain.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
Rain.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
Rain.colors.resize(2);
|
||||
modes.push_back(Rain);
|
||||
|
||||
mode Spiral;
|
||||
Spiral.name = "Spiral";
|
||||
Spiral.value = CORSAIR_HW_MODE_SPIRAL_VALUE;
|
||||
Spiral.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Spiral.color_mode = MODE_COLORS_NONE;
|
||||
Spiral.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Spiral.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Spiral.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
Spiral.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
Spiral.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
Spiral.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
Spiral.direction = MODE_DIRECTION_LEFT;
|
||||
modes.push_back(Spiral);
|
||||
|
||||
mode TypeKey;
|
||||
TypeKey.name = "TypeKey";
|
||||
TypeKey.value = CORSAIR_HW_MODE_TYPE_KEY_VALUE;
|
||||
TypeKey.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
TypeKey.color_mode = MODE_COLORS_RANDOM;
|
||||
TypeKey.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
TypeKey.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
TypeKey.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
TypeKey.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
TypeKey.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
TypeKey.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
TypeKey.colors.resize(2);
|
||||
modes.push_back(TypeKey);
|
||||
|
||||
mode TypeRipple;
|
||||
TypeRipple.name = "TypeRipple";
|
||||
TypeRipple.value = CORSAIR_HW_MODE_TYPE_RIPPLE_VALUE;
|
||||
TypeRipple.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
TypeRipple.color_mode = MODE_COLORS_RANDOM;
|
||||
TypeRipple.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
TypeRipple.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
TypeRipple.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
TypeRipple.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
TypeRipple.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
TypeRipple.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
TypeRipple.colors.resize(2);
|
||||
modes.push_back(TypeRipple);
|
||||
|
||||
mode Visor;
|
||||
Visor.name = "Visor";
|
||||
Visor.value = CORSAIR_HW_MODE_VISOR_VALUE;
|
||||
Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Visor.color_mode = MODE_COLORS_RANDOM;
|
||||
Visor.speed = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Visor.speed_min = CORSAIR_HW_MODE_SPEED_MIN;
|
||||
Visor.speed_max = CORSAIR_HW_MODE_SPEED_MAX;
|
||||
Visor.brightness = CORSAIR_HW_MODE_BRIGHTNESS_MAX / 2;
|
||||
Visor.brightness_min = CORSAIR_HW_MODE_BRIGHTNESS_MIN;
|
||||
Visor.brightness_max = CORSAIR_HW_MODE_BRIGHTNESS_MAX;
|
||||
Visor.colors.resize(2);
|
||||
modes.push_back(Visor);
|
||||
}
|
||||
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
|
|
@ -1082,4 +1217,29 @@ void RGBController_CorsairPeripheral::SetCustomMode()
|
|||
void RGBController_CorsairPeripheral::DeviceUpdateMode()
|
||||
{
|
||||
|
||||
if(modes[active_mode].value == CORSAIR_MODE_DIRECT_VALUE)
|
||||
{
|
||||
controller->SwitchMode(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
const mode& active = modes[active_mode];
|
||||
|
||||
unsigned int direction = active.direction;
|
||||
|
||||
if(active.flags & MODE_FLAG_HAS_DIRECTION_LR || active.flags & MODE_FLAG_HAS_DIRECTION_UD)
|
||||
{
|
||||
direction += 1;
|
||||
|
||||
if(active.value == CORSAIR_HW_MODE_SPIRAL_VALUE)
|
||||
{
|
||||
direction += 4;
|
||||
}
|
||||
}
|
||||
|
||||
controller->SetHardwareMode(active.value, active.color_mode, active.colors, active.speed, direction, active.brightness);
|
||||
|
||||
controller->SwitchMode(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
class RGBController_CorsairPeripheral : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_CorsairPeripheral(CorsairPeripheralController* controller_ptr);
|
||||
RGBController_CorsairPeripheral(CorsairPeripheralController* controller_ptr, bool supports_hardware_modes);
|
||||
~RGBController_CorsairPeripheral();
|
||||
|
||||
int physical_layout;
|
||||
|
|
@ -31,6 +31,7 @@ public:
|
|||
void SetCustomMode();
|
||||
void DeviceUpdateMode();
|
||||
|
||||
|
||||
private:
|
||||
CorsairPeripheralController* controller;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue