From 7e77edb8d6fa5e15c7ea2797dc00acaab59efe92 Mon Sep 17 00:00:00 2001 From: TheRogueZeta <6479694-TheRogueZeta@users.noreply.gitlab.com> Date: Mon, 2 Aug 2021 21:34:30 -0700 Subject: [PATCH] Fix K70 Mk2 keymap and software direct mode --- .../CorsairPeripheralController.cpp | 26 ++- .../CorsairPeripheralController.h | 3 +- .../RGBController_CorsairPeripheral.cpp | 176 ++++++++++++++++++ 3 files changed, 202 insertions(+), 3 deletions(-) diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp index 69bf5151..8bd3c9b3 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp @@ -22,6 +22,15 @@ static unsigned int keys[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x 116, 117, 120, 121, 122, 123, 124, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 139, 140, 141, 0x10, 114}; +static unsigned int keys_k70_mk2[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x12, + 0x14, 0x15, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x2A, 0x2B, 0x2C, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x42, 0x43, 0x44, 0x45, 0x48, 73, 74, 75, 76, 78, + 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 115, + 116, 117, 120, 121, 122, 123, 124, 126, 127, 128, 129, 132, 133, 134, 135, + 136, 137, 139, 140, 141, 16, 114, 47, 59, 125 }; + static unsigned int keys_k95_plat[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x12, 0x14, 0x15, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x24, 0x25, 0x26, @@ -61,14 +70,14 @@ CorsairPeripheralController::CorsairPeripheralController(hid_device* dev_handle, /*-----------------------------------------------------*\ | K55 and K95 Platinum require additional steps | \*-----------------------------------------------------*/ - if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT) + if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT || logical_layout == CORSAIR_TYPE_K70_MK2) { SpecialFunctionControl(); } LightingControl(); - if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT) + if (logical_layout == CORSAIR_TYPE_K55 || logical_layout == CORSAIR_TYPE_K95_PLAT || logical_layout == CORSAIR_TYPE_K70_MK2) { SetupK55AndK95LightingControl(); } @@ -204,6 +213,12 @@ void CorsairPeripheralController::SetLEDsKeyboardFull(std::vector colo blu_val[keys_k95[color_idx]] = RGBGetBValue(color); data_sz = 48; //untested } + else if (logical_layout = CORSAIR_TYPE_K70_MK2) + { + red_val[keys_k70_mk2[color_idx]] = RGBGetRValue(color); + grn_val[keys_k70_mk2[color_idx]] = RGBGetGValue(color); + blu_val[keys_k70_mk2[color_idx]] = RGBGetBValue(color); + } else { red_val[keys[color_idx]] = RGBGetRValue(color); @@ -541,6 +556,13 @@ void CorsairPeripheralController::ReadFirmwareInfo() logical_layout = CORSAIR_TYPE_K55; break; + case 0x1B38: + case 0x1B49: + case 0x1B6B: + case 0x1B55: + logical_layout = CORSAIR_TYPE_K70_MK2; + break; + default: logical_layout = CORSAIR_TYPE_NORMAL; } diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralController.h b/Controllers/CorsairPeripheralController/CorsairPeripheralController.h index 714289d6..cbd34772 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralController.h +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralController.h @@ -62,7 +62,8 @@ enum CORSAIR_TYPE_NORMAL = 0, CORSAIR_TYPE_K95_PLAT = 1, CORSAIR_TYPE_K95 = 2, - CORSAIR_TYPE_K55 = 3 + CORSAIR_TYPE_K55 = 3, + CORSAIR_TYPE_K70_MK2 = 4 }; class CorsairPeripheralController diff --git a/Controllers/CorsairPeripheralController/RGBController_CorsairPeripheral.cpp b/Controllers/CorsairPeripheralController/RGBController_CorsairPeripheral.cpp index f61f33ff..1f65a50d 100644 --- a/Controllers/CorsairPeripheralController/RGBController_CorsairPeripheral.cpp +++ b/Controllers/CorsairPeripheralController/RGBController_CorsairPeripheral.cpp @@ -20,6 +20,15 @@ static unsigned int matrix_map[6][23] = { 4, 111, 22, 32, 40, 50, NA, 59, NA, 68, 78, 88, 97, 106, 61, NA, NA, 81, NA, 73, 83, 92, 109 }, { 5, 14, 23, NA, NA, NA, NA, 41, NA, NA, NA, NA, 69, 79, 89, 71, 90, 99, 108, 101, NA, 110, NA } }; +static unsigned int matrix_map_k70_mk2[7][23] = + { { NA, NA, NA, 115, 107, 8, NA, NA, NA, NA, NA, 113, 114, NA, NA, NA, NA, NA, NA, 16, NA, NA, NA,}, + { 0, NA, 10, 18, 28, 36, NA, 46, 55, 64, 74, NA, 84, 93, 102, 6, 15, 24, 33, 26, 35, 44, 53 }, + { 1, 11, 19, 29, 37, 47, 56, 65, 75, 85, 94, NA, 103, 7, 25, NA, 42, 51, 60, 62, 72, 82, 91 }, + { 2, NA, 12, 20, 30, 38, NA, 48, 57, 66, 76, 86, 95, 104, 70, 80, 34, 43, 52, 9, 17, 27, 100 }, + { 3, NA, 13, 21, 31, 39, NA, 49, 58, 67, 77, 87, 96, 105, 98, 112, NA, NA, NA, 45, 54, 63, NA }, + { 4, 111, 22, 32, 40, 50, NA, 59, NA, 68, 78, 88, 97, 106, 61, NA, NA, 81, NA, 73, 83, 92, 109 }, + { 5, 14, 23, NA, NA, NA, NA, 41, NA, NA, NA, NA, 69, 79, 89, 71, 90, 99, 108, 101, NA, 110, NA } }; + static unsigned int matrix_map_k95_platinum[7][24] = { { NA, NA, NA, 119, 107, 8, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16, NA, NA, NA,}, { 113, 0, NA, 10, 18, 28, 36, NA, 46, 55, 64, 74, NA, 84, 93, 102, 6, 15, 24, 33, 26, 35, 44, 53 }, @@ -56,6 +65,24 @@ static const zone_type zone_types[] = ZONE_TYPE_MATRIX, }; +/*---------------------------------------------------------*\ +| K70 MK2 Corsair Layout | +\*---------------------------------------------------------*/ +static const char* zone_names_k70_mk2[] = +{ + "Keyboard", +}; + +static const unsigned int zone_sizes_k70_mk2[] = +{ + 116 +}; + +static const zone_type zone_types_k70_mk2[] = +{ + ZONE_TYPE_MATRIX, +}; + /*---------------------------------------------------------*\ | K95 Platinum | \*---------------------------------------------------------*/ @@ -236,6 +263,131 @@ static const char* led_names[] = "Key: \\ (ISO)", }; +static const char* led_names_k70_mk2[] = +{ + "Key: Escape", //0 + "Key: `", //1 + "Key: Tab", //2 + "Key: Caps Lock", //3 + "Key: Left Shift", //4 + "Key: Left Control", //5 + "Key: F12", //6 + "Key: =", //7 + "Key: Lock", //8 + "Key: Number Pad 7", //9 + "Key: F1", //12 + "Key: 1", //13 + "Key: Q", //14 + "Key: A", //15 + //"Key: / (ISO)", //16 + "Key: Left Windows", //17 + "Key: Print Screen", //18 + "Key: Media Mute", //20 + "Key: Number Pad 8", //21 + "Key: F2", //24 + "Key: 2", //25 + "Key: W", //26 + "Key: S", //27 + "Key: Z", //28 + "Key: Left Alt", //29 + "Key: Scroll Lock", //30 + "Key: Backspace", //31 + "Key: Media Stop", //32 + "Key: Number Pad 9", //33 + "Key: F3", //36 + "Key: 3", //37 + "Key: E", //38 + "Key: D", //39 + "Key: X", //40 + "Key: Pause/Break", //42 + "Key: Delete", //43 + "Key: Media Previous", //44 + //"Key: Logo Left", //047 + "Key: F4", //48 + "Key: 4", //49 + "Key: R", //50 + "Key: F", //51 + "Key: C", //52 + "Key: Space", //53 + "Key: Insert", //54 + "Key: End", //55 + "Key: Media Play/Pause",//56 + "Key: Number Pad 4", //57 + //"Key: Logo Right", //059 + "Key: F5", //60 + "Key: 5", //61 + "Key: T", //62 + "Key: G", //63 + "Key: V", //64 + "Key: Home", //66 + "Key: Page Down", //67 + "Key: Media Next", //68 + "Key: Number Pad 5", //69 + "Key: F6", //72 + "Key: 6", //73 + "Key: Y", //74 + "Key: H", //75 + "Key: B", //76 + "Key: Page Up", //78 + "Key: Right Shift", //79 + "Key: Num Lock", //80 + "Key: Number Pad 6", //81 + "Key: F7", //84 + "Key: 7", //85 + "Key: U", //86 + "Key: J", //87 + "Key: N", //88 + "Key: Right Alt", //89 + "Key: ]", //90 + "Key: Right Control", //91 + "Key: Number Pad /", //92 + "Key: Number Pad 1", //93 + "Key: F8", //96 + "Key: 8", //97 + "Key: I", //98 + "Key: K", //99 + "Key: M", //100 + "Key: Right Windows", //101 + "Key: \\ (ANSI)", //102 + "Key: Up Arrow", //103 + "Key: Number Pad *", //104 + "Key: Number Pad 2", //105 + "Key: F9", //108 + "Key: 9", //109 + "Key: O", //110 + "Key: L", //111 + "Key: ,", //112 + "Key: Menu", //113 + //"Key: \\ (ISO)", //114 + "Key: Left Arrow", //115 + "Key: Number Pad -", //116 + "Key: Number Pad 3", //117 + "Key: F10", //120 + "Key: 0", //121 + "Key: P", //122 + "Key: ;", //123 + //"Key: Profile", //125 + "Key: .", //124 + "Key: Enter", //126 + "Key: Down Arrow", //127 + "Key: Number Pad +", //128 + "Key: Number Pad 0", //129 + "Key: F11", //132 + "Key: -", //133 + "Key: [", //134 + "Key: '", //135 + "Key: /", //136 + "Key: Brightness", //137 + "Key: Right Arrow", //139 + "Key: Number Pad Enter",//140 + "Key: Number Pad .", //141 + "Key: / (ISO)", //16 + "Key: \\ (ISO)", //114 + "Key: Logo Left", //047 + "Key: Logo Right", //059 + "Key: Profile", //125 +}; + static const char* led_names_k95_plat[] = { "Key: Escape", //0 @@ -735,6 +887,26 @@ void RGBController_CorsairPeripheral::SetupZones() new_zone.leds_count = zone_sizes_k55[zone_idx]; new_zone.matrix_map = NULL; } + else if (logical_layout == CORSAIR_TYPE_K70_MK2) + { + new_zone.name = zone_names_k70_mk2[zone_idx]; + new_zone.type = zone_types_k70_mk2[zone_idx]; + new_zone.leds_min = zone_sizes_k70_mk2[zone_idx]; + new_zone.leds_max = zone_sizes_k70_mk2[zone_idx]; + new_zone.leds_count = zone_sizes_k70_mk2[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 = 23; + new_zone.matrix_map->map = (unsigned int *)&matrix_map_k70_mk2; + } + else + { + new_zone.matrix_map = NULL; + } + } else //default layout { new_zone.name = zone_names[zone_idx]; @@ -822,6 +994,10 @@ void RGBController_CorsairPeripheral::SetupZones() { new_led.name = led_names_k55[led_idx]; } + else if(logical_layout == CORSAIR_TYPE_K70_MK2) + { + new_led.name = led_names_k70_mk2[led_idx]; + } else { new_led.name = led_names[led_idx];