From e3b08fc15de8350fbe5b2a1eaaf0cef200ea8617 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Thu, 25 Jun 2026 00:30:59 -0500 Subject: [PATCH] Move Corsair K57 (Wired) to CorsairPeripheralV2Controller as it uses the same protocol --- .../CorsairPeripheralV2Controller.cpp | 5 + .../CorsairPeripheralV2ControllerDetect.cpp | 1 + .../CorsairPeripheralV2Devices.cpp | 64 +++- .../CorsairPeripheralV2Devices.h | 2 + .../CorsairWirelessController.cpp | 217 ----------- .../CorsairWirelessController.h | 45 --- .../CorsairWirelessControllerDetect.cpp | 62 ---- .../RGBController_CorsairWireless.cpp | 342 ------------------ .../RGBController_CorsairWireless.h | 43 --- 9 files changed, 69 insertions(+), 712 deletions(-) delete mode 100644 Controllers/CorsairWirelessController/CorsairWirelessController.cpp delete mode 100644 Controllers/CorsairWirelessController/CorsairWirelessController.h delete mode 100644 Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp delete mode 100644 Controllers/CorsairWirelessController/RGBController_CorsairWireless.cpp delete mode 100644 Controllers/CorsairWirelessController/RGBController_CorsairWireless.h diff --git a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Controller.cpp b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Controller.cpp index d4aee86b9..62f62ad46 100644 --- a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Controller.cpp +++ b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Controller.cpp @@ -35,6 +35,11 @@ CorsairPeripheralV2Controller::CorsairPeripheralV2Controller(hid_device* dev_han write_cmd = CORSAIR_V2_WRITE_WIRELESS_ID; pid = GetAddress(0x12); break; + + case CORSAIR_K57_RGB_WIRED_PID: + write_cmd = 0x80; + light_ctrl = CORSAIR_V2_LIGHT_CTRL1; + break; } /*---------------------------------------------------------*\ diff --git a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp index fddde99c2..fe7f8a0a4 100644 --- a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp +++ b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp @@ -57,6 +57,7 @@ void DetectCorsairV2SoftwareControllers(hid_device_info* info, const std::string | Keyboards | \*-----------------------------------------------------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair K55 RGB PRO", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K55_RGB_PRO_PID, 1, 0xFF42); +REGISTER_HID_DETECTOR_IP("Corsair K57 RGB (Wired)", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K57_RGB_WIRED_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO Low Profile", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_LP_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO TKL Black", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_TKL_B_PID, 1, 0xFF42); diff --git a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.cpp b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.cpp index 21ba4df22..a0bd16a2b 100644 --- a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.cpp +++ b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.cpp @@ -48,6 +48,31 @@ std::vector corsair_full_size_values = /*-------------------------------------------------------------------------*\ | KEYMAPS | \*-------------------------------------------------------------------------*/ +keyboard_keymap_overlay_values corsair_K57_layout +{ + KEYBOARD_SIZE::KEYBOARD_SIZE_FULL, + { + corsair_full_size_values, + { + /* Add more regional layout fixes here */ + } + }, + { + /*-------------------------------------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Name, Alternate Name, OpCode | + \*-------------------------------------------------------------------------------------------------------------------------------------*/ + { 0, 0, 17, 0, "Power/Wireless Indicator", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, }, // Insert Profile into new row + { 0, 0, 18, 1, "Lock/Macro Indicator", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Light key + { 0, 1, 0, 131, "Key: G1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G1 key + { 0, 2, 0, 132, "Key: G2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G2 key + { 0, 3, 0, 133, "Key: G3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G3 key + { 0, 4, 0, 134, "Key: G4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G4 key + { 0, 5, 0, 135, "Key: G5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G5 key + { 0, 6, 0, 136, "Key: G6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert G6 key + } +}; + keyboard_keymap_overlay_values corsair_K60_layout { KEYBOARD_SIZE::KEYBOARD_SIZE_FULL, @@ -167,10 +192,10 @@ keyboard_keymap_overlay_values corsair_K70_CORE_TKL_layout | Edit Keys | | Zone, Row, Column, Value, Name, Alternate Name, OpCode, | \*-------------------------------------------------------------------------------------------------------------------------------------*/ - { 0, 0, 14, 70, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PRSC with Mute + { 0, 0, 14, 70, KEY_EN_MEDIA_MUTE, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PRSC with Mute { 0, 0, 15, 71, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove SCLK - { 0, 0, 16, 72, KEY_EN_MEDIA_VOLUME_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PSBK with Volume Potion Up - + { 0, 0, 16, 72, KEY_EN_MEDIA_VOLUME_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PSBK with Volume Potion Up + } }; @@ -772,6 +797,38 @@ static const corsair_v2_device k55_rgb_pro_device = nullptr }; +/*-------------------------------------------------------------*\ +| Corsair K57 RGB (Wired) 1B1C:1B6E | +| | +| Zone "Keyboard" | +| Matrix | +| 7 Rows, 22 Columns | +\*-------------------------------------------------------------*/ +static const corsair_v2_zone k57_rgb_wired_zone = +{ + ZONE_EN_KEYBOARD, + ZONE_TYPE_MATRIX, + 7, + 22 +}; + +static const corsair_v2_device k57_rgb_wired_device = +{ + CORSAIR_K57_RGB_WIRED_PID, + DEVICE_TYPE_KEYBOARD, + 7, + 22, + { + &k57_rgb_wired_zone, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr + }, + &corsair_K57_layout +}; + /*-------------------------------------------------------------*\ | Corsair K60 RGB Pro 1B1C:1BA0 | | | @@ -1461,6 +1518,7 @@ const corsair_v2_device* corsair_v2_device_list_data[] = | KEYBOARDS | \*-----------------------------------------------------------------*/ &k55_rgb_pro_device, + &k57_rgb_wired_device, &k60_rgb_pro_device, &k60_rgb_pro_lp_device, &k60_rgb_pro_tkl_device_b, diff --git a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.h b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.h index 32ddf69c7..8a49ad4c8 100644 --- a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.h +++ b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2Devices.h @@ -69,6 +69,8 @@ typedef struct | Corsair V2 Protocol Keyboards | \*-----------------------------------------------------*/ #define CORSAIR_K55_RGB_PRO_PID 0x1BA4 +#define CORSAIR_K57_RGB_WIRED_PID 0x1B6E +#define CORSAIR_K57_RGB_WIRELESS_PID 0x1B62 #define CORSAIR_K60_RGB_PRO_PID 0x1BA0 #define CORSAIR_K60_RGB_PRO_LP_PID 0x1BAD #define CORSAIR_K60_RGB_PRO_TKL_B_PID 0x1BC7 diff --git a/Controllers/CorsairWirelessController/CorsairWirelessController.cpp b/Controllers/CorsairWirelessController/CorsairWirelessController.cpp deleted file mode 100644 index af84be7c2..000000000 --- a/Controllers/CorsairWirelessController/CorsairWirelessController.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/*---------------------------------------------------------*\ -| CorsairWirelessController.cpp | -| | -| Driver for Corsair wireless keyboard | -| | -| Adam Honse (CalcProgrammer1) 08 May 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include -#include "CorsairWirelessController.h" -#include "StringUtils.h" - -using namespace std::chrono_literals; - -CorsairWirelessController::CorsairWirelessController(hid_device* dev_handle, const char* path) -{ - dev = dev_handle; - location = path; - - type = DEVICE_TYPE_KEYBOARD; - - EnterDirectMode(); -} - -CorsairWirelessController::~CorsairWirelessController() -{ - hid_close(dev); -} - -device_type CorsairWirelessController::GetDeviceType() -{ - return type; -} - -std::string CorsairWirelessController::GetDeviceLocation() -{ - return("HID: " + location); -} - -std::string CorsairWirelessController::GetFirmwareString() -{ - return firmware_version; -} - -std::string CorsairWirelessController::GetName() -{ - return name; -} - -std::string CorsairWirelessController::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 CorsairWirelessController::SetLEDs(std::vectorcolors) -{ - unsigned char buf[3 * 137]; - - for(int color = 0; color < 137; color++) - { - buf[0 + color] = RGBGetRValue(colors[color]); - buf[137 + color] = RGBGetGValue(colors[color]); - buf[274+color] = RGBGetBValue(colors[color]); - } - - StartDirectMode(); - - SendDirectFrame(true, &buf[0]); - SendDirectFrame(false, &buf[57]); - SendDirectFrame(false, &buf[118]); - SendDirectFrame(false, &buf[179]); - SendDirectFrame(false, &buf[240]); - SendDirectFrame(false, &buf[301]); - SendDirectFrame(false, &buf[362]); -} - -void CorsairWirelessController::SetName(std::string device_name) -{ - name = device_name; -} - -/*-------------------------------------------------------------------------------------------------*\ -| Private packet sending functions. | -\*-------------------------------------------------------------------------------------------------*/ - -void CorsairWirelessController::EnterDirectMode() -{ - unsigned char usb_buf[65]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Submit Mouse Colors packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x00; - usb_buf[0x01] = 0x80; - usb_buf[0x02] = 0x01; - usb_buf[0x03] = 0x03; - usb_buf[0x04] = 0x00; - usb_buf[0x05] = 0x02; - - /*-----------------------------------------------------*\ - | Send packet using feature reports, as headset stand | - | seems to not update completely using HID writes | - \*-----------------------------------------------------*/ - hid_write(dev, usb_buf, 65); - -} - -void CorsairWirelessController::StartDirectMode() -{ - unsigned char usb_buf[65]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Submit Mouse Colors packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x00; - usb_buf[0x01] = 0x80; - usb_buf[0x02] = 0x0D; - usb_buf[0x03] = 0x00; - usb_buf[0x04] = 0x01; - - /*-----------------------------------------------------*\ - | Send packet using feature reports, as headset stand | - | seems to not update completely using HID writes | - \*-----------------------------------------------------*/ - hid_write(dev, usb_buf, 65); - -} - -void CorsairWirelessController::ExitDirectMode() -{ - unsigned char usb_buf[65]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Submit Mouse Colors packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x00; - usb_buf[0x01] = 0x80; - usb_buf[0x02] = 0x01; - usb_buf[0x03] = 0x03; - usb_buf[0x04] = 0x00; - usb_buf[0x05] = 0x01; - - /*-----------------------------------------------------*\ - | Send packet using feature reports, as headset stand | - | seems to not update completely using HID writes | - \*-----------------------------------------------------*/ - hid_write(dev, usb_buf, 65); - -} - -void CorsairWirelessController::SendDirectFrame(bool first_frame, unsigned char* data) -{ - unsigned char usb_buf[65]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Submit Mouse Colors packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x00; - usb_buf[0x01] = 0x80; - usb_buf[0x02] = first_frame ? 0x06 : 0x07; - usb_buf[0x03] = 0x00; - - if(first_frame) - { - usb_buf[0x04] = 0x9B; - usb_buf[0x05] = 0x01; - } - - /*-----------------------------------------------------*\ - | Copy in colors in order | - \*-----------------------------------------------------*/ - if(first_frame) - { - memcpy(&usb_buf[0x08], data, 57); - } - else - { - memcpy(&usb_buf[0x04], data, 61); - } - - /*-----------------------------------------------------*\ - | Send packet using feature reports, as headset stand | - | seems to not update completely using HID writes | - \*-----------------------------------------------------*/ - hid_write(dev, usb_buf, 65); -} diff --git a/Controllers/CorsairWirelessController/CorsairWirelessController.h b/Controllers/CorsairWirelessController/CorsairWirelessController.h deleted file mode 100644 index dcb5c59d3..000000000 --- a/Controllers/CorsairWirelessController/CorsairWirelessController.h +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------*\ -| CorsairWirelessController.h | -| | -| Driver for Corsair wireless keyboard | -| | -| Adam Honse (CalcProgrammer1) 08 May 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include -#include -#include "RGBController.h" - -class CorsairWirelessController -{ -public: - CorsairWirelessController(hid_device* dev_handle, const char* path); - ~CorsairWirelessController(); - - device_type GetDeviceType(); - std::string GetDeviceLocation(); - std::string GetFirmwareString(); - std::string GetName(); - std::string GetSerialString(); - - void SetLEDs(std::vector colors); - void SetName(std::string device_name); - -private: - hid_device* dev; - - std::string firmware_version; - std::string location; - std::string name; - device_type type; - - void EnterDirectMode(); - void ExitDirectMode(); - void StartDirectMode(); - void SendDirectFrame(bool first_frame, unsigned char* data); -}; diff --git a/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp b/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp deleted file mode 100644 index dfc98fde6..000000000 --- a/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/*---------------------------------------------------------*\ -| CorsairWirelessControllerDetect.cpp | -| | -| Detector for Corsair wireless keyboard | -| | -| Adam Honse (CalcProgrammer1) 08 May 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include -#include "Detector.h" -#include "CorsairWirelessController.h" -#include "RGBController.h" -#include "RGBController_CorsairWireless.h" - -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ -#define CORSAIR_VID 0x1B1C - -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ -#define CORSAIR_K57_RGB_WIRED_PID 0x1B6E -#define CORSAIR_K57_RGB_WIRELESS_PID 0x1B62 - -/******************************************************************************************\ -* * -* DetectCorsairWirelessControllers * -* * -* Tests the USB address to see if a Corsair RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectCorsairWirelessControllers(hid_device_info* info, const std::string& name) -{ - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - CorsairWirelessController* controller = new CorsairWirelessController(dev, info->path); - controller->SetName(name); - - if(controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN) - { - RGBController_CorsairWireless* rgb_controller = new RGBController_CorsairWireless(controller); - ResourceManager::get()->RegisterRGBController(rgb_controller); - } - else - { - delete controller; - } - } -} /* DetectCorsairWirelessControllers() */ - -/*-----------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*-----------------------------------------------------------------------------------------------------*/ -REGISTER_HID_DETECTOR_IPU("Corsair K57 RGB (Wired)", DetectCorsairWirelessControllers, CORSAIR_VID, CORSAIR_K57_RGB_WIRED_PID, 1, 0xFF42, 1); -//REGISTER_HID_DETECTOR_IPU("Corsair K57 RGB (Wireless)", DetectCorsairWirelessControllers, CORSAIR_VID, CORSAIR_K57_RGB_WIRELESS_PID, 1, 0xFF42, 1); diff --git a/Controllers/CorsairWirelessController/RGBController_CorsairWireless.cpp b/Controllers/CorsairWirelessController/RGBController_CorsairWireless.cpp deleted file mode 100644 index 4097fdae3..000000000 --- a/Controllers/CorsairWirelessController/RGBController_CorsairWireless.cpp +++ /dev/null @@ -1,342 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_CorsairWireless.cpp | -| | -| RGBController for Corsair wireless keyboard | -| | -| Adam Honse (CalcProgrammer1) 08 May 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include "RGBControllerKeyNames.h" -#include "RGBController_CorsairWireless.h" - -using namespace std::chrono_literals; - -//0xFFFFFFFF indicates an unused entry in matrix -#define NA 0xFFFFFFFF - -static unsigned int matrix_map[7][24] = - { { NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1, NA, NA, NA }, - { 131, 41, NA, 58, 59, 60, 61, NA, 62, 63, 64, 65, NA, 66, 67, 68, 69, 70, 71, 72, NA, NA, NA, NA }, - { 132, 53, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NA, 45, 46, 42, NA, 73, 74, 75, 83, 84, 85, 86 }, - { 133, 43, NA, 20, 26, 8, 21, NA, 23, 28, 24, 12, 18, 19, 47, 48, 49, 76, 77, 78, 95, 96, 97, 87 }, - { 134, 57, NA, 4, 22, 7, 9, NA, 10, 11, 13, 14, 15, 51, 52, NA, 40, NA, NA, NA, 92, 93, 94, NA }, - { 135, 106, NA, 29, 27, 6, 25, NA, 5, NA, 17, 16, 54, 55, 56, 110, NA, NA, 82, NA, 89, 90, 91, 88 }, - { 136, 105, 108, 107, NA, NA, NA, NA, 44, NA, NA, NA, NA, 111, 122, 101, 109, 80, 81, 79, 98, NA, 99, NA } }; - -static const char* zone_names[] = -{ - ZONE_EN_KEYBOARD, -}; - -static const unsigned int zone_sizes[] = -{ - 137 -}; - -static const zone_type zone_types[] = -{ - ZONE_TYPE_MATRIX, -}; - -static const char* led_names[] = -{ - "Power/Wireless Indicator", - "Lock/Macro Indicator", - "N/A", - "N/A", - KEY_EN_A, - KEY_EN_B, - KEY_EN_C, - KEY_EN_D, - KEY_EN_E, - KEY_EN_F, - KEY_EN_G, - KEY_EN_H, - KEY_EN_I, - KEY_EN_J, - KEY_EN_K, - KEY_EN_L, - KEY_EN_M, - KEY_EN_N, - KEY_EN_O, - KEY_EN_P, - KEY_EN_Q, - KEY_EN_R, - KEY_EN_S, - KEY_EN_T, - KEY_EN_U, - KEY_EN_V, - KEY_EN_W, - KEY_EN_X, - KEY_EN_Y, - KEY_EN_Z, - KEY_EN_1, - KEY_EN_2, - KEY_EN_3, - KEY_EN_4, - KEY_EN_5, - KEY_EN_6, - KEY_EN_7, - KEY_EN_8, - KEY_EN_9, - KEY_EN_0, - KEY_EN_ANSI_ENTER, - KEY_EN_ESCAPE, - KEY_EN_BACKSPACE, - KEY_EN_TAB, - KEY_EN_SPACE, - KEY_EN_MINUS, - KEY_EN_EQUALS, - KEY_EN_LEFT_BRACKET, - KEY_EN_RIGHT_BRACKET, - KEY_EN_ANSI_BACK_SLASH, - KEY_EN_UNUSED, - KEY_EN_SEMICOLON, - KEY_EN_QUOTE, - KEY_EN_BACK_TICK, - KEY_EN_COMMA, - KEY_EN_PERIOD, - KEY_EN_FORWARD_SLASH, - KEY_EN_CAPS_LOCK, - KEY_EN_F1, - KEY_EN_F2, - KEY_EN_F3, - KEY_EN_F4, - KEY_EN_F5, - KEY_EN_F6, - KEY_EN_F7, - KEY_EN_F8, - KEY_EN_F9, - KEY_EN_F10, - KEY_EN_F11, - KEY_EN_F12, - KEY_EN_PRINT_SCREEN, - KEY_EN_SCROLL_LOCK, - KEY_EN_PAUSE_BREAK, - KEY_EN_INSERT, - KEY_EN_HOME, - KEY_EN_PAGE_UP, - KEY_EN_DELETE, - KEY_EN_END, - KEY_EN_PAGE_DOWN, - KEY_EN_RIGHT_ARROW, - KEY_EN_LEFT_ARROW, - KEY_EN_DOWN_ARROW, - KEY_EN_UP_ARROW, - KEY_EN_NUMPAD_LOCK, - KEY_EN_NUMPAD_DIVIDE, - KEY_EN_NUMPAD_TIMES, - KEY_EN_NUMPAD_MINUS, - KEY_EN_NUMPAD_PLUS, - KEY_EN_NUMPAD_ENTER, - KEY_EN_NUMPAD_1, - KEY_EN_NUMPAD_2, - KEY_EN_NUMPAD_3, - KEY_EN_NUMPAD_4, - KEY_EN_NUMPAD_5, - KEY_EN_NUMPAD_6, - KEY_EN_NUMPAD_7, - KEY_EN_NUMPAD_8, - KEY_EN_NUMPAD_9, - KEY_EN_NUMPAD_0, - KEY_EN_NUMPAD_PERIOD, - KEY_EN_UNUSED, - KEY_EN_MENU, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_LEFT_CONTROL, - KEY_EN_LEFT_SHIFT, - KEY_EN_LEFT_ALT, - KEY_EN_LEFT_WINDOWS, - KEY_EN_RIGHT_CONTROL, - KEY_EN_RIGHT_SHIFT, - KEY_EN_RIGHT_ALT, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_RIGHT_FUNCTION, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - "Key: G1", - "Key: G2", - "Key: G3", - "Key: G4", - "Key: G5", - "Key: G6", -}; - -/**------------------------------------------------------------------*\ - @name Corsair Wireless Peripheral - @category Keyboard - @type USB - @save :x: - @direct :white_check_mark: - @effects :x: - @detectors DetectCorsairWirelessControllers - @comment -\*-------------------------------------------------------------------*/ - -RGBController_CorsairWireless::RGBController_CorsairWireless(CorsairWirelessController* controller_ptr) -{ - controller = controller_ptr; - - name = controller->GetName(); - vendor = "Corsair"; - description = "Corsair RGB Peripheral Device"; - type = controller->GetDeviceType(); - version = controller->GetFirmwareString(); - location = controller->GetDeviceLocation(); - serial = controller->GetSerialString(); - - mode Direct; - Direct.name = "Direct"; - Direct.value = 0; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); - - SetupZones(); - - /*-----------------------------------------------------*\ - | The Corsair Lighting Node Pro requires a packet within| - | 20 seconds of sending the lighting change in order | - | to not revert back into rainbow mode. Start a thread | - | to continuously send a keepalive packet every 5s | - \*-----------------------------------------------------*/ - keepalive_thread_run = true; - keepalive_thread = new std::thread(&RGBController_CorsairWireless::KeepaliveThread, this); -} - -RGBController_CorsairWireless::~RGBController_CorsairWireless() -{ - /*-----------------------------------------------------*\ - | Close keepalive thread | - \*-----------------------------------------------------*/ - keepalive_thread_run = false; - keepalive_thread->join(); - delete keepalive_thread; - - /*---------------------------------------------------------*\ - | Delete the matrix map | - \*---------------------------------------------------------*/ - for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) - { - if(zones[zone_index].matrix_map != NULL) - { - delete zones[zone_index].matrix_map; - } - } - - delete controller; -} - -void RGBController_CorsairWireless::SetupZones() -{ - /*---------------------------------------------------------*\ - | Determine number of zones | - | For now, keyboard has 2 zones and mousemat has 1 | - \*---------------------------------------------------------*/ - unsigned int num_zones = 1; - - /*---------------------------------------------------------*\ - | Set up zones | - \*---------------------------------------------------------*/ - unsigned int total_led_count = 0; - for(unsigned int zone_idx = 0; zone_idx < num_zones; zone_idx++) - { - zone new_zone; - - new_zone.name = zone_names[zone_idx]; - new_zone.type = zone_types[zone_idx]; - new_zone.leds_min = zone_sizes[zone_idx]; - new_zone.leds_max = zone_sizes[zone_idx]; - new_zone.leds_count = zone_sizes[zone_idx]; - - if(zone_types[zone_idx] == ZONE_TYPE_MATRIX) - { - new_zone.matrix_map = new matrix_map_type; - new_zone.matrix_map->height = 7; - new_zone.matrix_map->width = 24; - new_zone.matrix_map->map = (unsigned int *)&matrix_map; - } - else - { - new_zone.matrix_map = NULL; - } - - zones.push_back(new_zone); - total_led_count += new_zone.leds_count; - } - - for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++) - { - led new_led; - - new_led.name = led_names[led_idx]; - - leds.push_back(new_led); - } - - SetupColors(); -} - -void RGBController_CorsairWireless::ResizeZone(int /*zone*/, int /*new_size*/) -{ - /*---------------------------------------------------------*\ - | This device does not support resizing zones | - \*---------------------------------------------------------*/ -} - -void RGBController_CorsairWireless::DeviceUpdateLEDs() -{ - last_update_time = std::chrono::steady_clock::now(); - - controller->SetLEDs(colors); -} - -void RGBController_CorsairWireless::UpdateZoneLEDs(int /*zone*/) -{ - controller->SetLEDs(colors); -} - -void RGBController_CorsairWireless::UpdateSingleLED(int /*led*/) -{ - controller->SetLEDs(colors); -} - -void RGBController_CorsairWireless::DeviceUpdateMode() -{ - -} - -void RGBController_CorsairWireless::KeepaliveThread() -{ - while(keepalive_thread_run.load()) - { - if(active_mode == 0) - { - if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(5000)) - { - DeviceUpdateLEDs(); - } - } - std::this_thread::sleep_for(1000ms); - } -} diff --git a/Controllers/CorsairWirelessController/RGBController_CorsairWireless.h b/Controllers/CorsairWirelessController/RGBController_CorsairWireless.h deleted file mode 100644 index bcadb44b6..000000000 --- a/Controllers/CorsairWirelessController/RGBController_CorsairWireless.h +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_CorsairWireless.h | -| | -| RGBController for Corsair wireless keyboard | -| | -| Adam Honse (CalcProgrammer1) 08 May 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include "RGBController.h" -#include "CorsairWirelessController.h" - -class RGBController_CorsairWireless : public RGBController -{ -public: - RGBController_CorsairWireless(CorsairWirelessController* controller_ptr); - ~RGBController_CorsairWireless(); - - int physical_layout; - int logical_layout; - - void SetupZones(); - - void ResizeZone(int zone, int new_size); - - void DeviceUpdateLEDs(); - void UpdateZoneLEDs(int zone); - void UpdateSingleLED(int led); - - void DeviceUpdateMode(); - - void KeepaliveThread(); - -private: - CorsairWirelessController* controller; - std::thread* keepalive_thread; - std::atomic keepalive_thread_run; - std::chrono::time_point last_update_time; -};