From 2dfde7e8cdf565ccd551a8a7fade7a336062145e Mon Sep 17 00:00:00 2001 From: Mola19 Date: Wed, 17 Jan 2024 21:29:35 +0100 Subject: [PATCH] add support for Roccat Vulcan Pro to resolve #3856 --- .../RGBController_RoccatVulcanKeyboard.cpp | 1 + .../RoccatController/RoccatControllerDetect.cpp | 2 ++ .../RoccatVulcanKeyboardController.cpp | 14 +++++++++++++- .../RoccatVulcanKeyboardController.h | 1 + .../RoccatController/RoccatVulcanKeyboardLayouts.h | 2 -- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Controllers/RoccatController/RGBController_RoccatVulcanKeyboard.cpp b/Controllers/RoccatController/RGBController_RoccatVulcanKeyboard.cpp index 3623ab48..34ed74bd 100644 --- a/Controllers/RoccatController/RGBController_RoccatVulcanKeyboard.cpp +++ b/Controllers/RoccatController/RGBController_RoccatVulcanKeyboard.cpp @@ -112,6 +112,7 @@ void RGBController_RoccatVulcanKeyboard::SetupZones() case ROCCAT_VULCAN_TKL_PID: keyboard_ptr = &RoccatVulcanTKLLayouts; break; + case ROCCAT_VULCAN_PRO_PID: case ROCCAT_PYRO_PID: keyboard_ptr = &RoccatPyroLayouts; break; diff --git a/Controllers/RoccatController/RoccatControllerDetect.cpp b/Controllers/RoccatController/RoccatControllerDetect.cpp index 2fc70bff..7b2706c0 100644 --- a/Controllers/RoccatController/RoccatControllerDetect.cpp +++ b/Controllers/RoccatController/RoccatControllerDetect.cpp @@ -99,6 +99,7 @@ void DetectRoccatVulcanKeyboardControllers(hid_device_info* info, const std::str switch (info->product_id) { + case ROCCAT_VULCAN_PRO_PID: case ROCCAT_PYRO_PID: case ROCCAT_MAGMA_PID: case ROCCAT_MAGMA_MINI_PID: @@ -275,6 +276,7 @@ REGISTER_HID_DETECTOR_IP ("Roccat Pyro", DetectRoccatVulcanKe REGISTER_HID_DETECTOR_IP ("Roccat Vulcan 100 Aimo", DetectRoccatVulcanKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_100_AIMO_PID, 1, 11); REGISTER_HID_DETECTOR_IP ("Roccat Vulcan 120-Series Aimo", DetectRoccatVulcanKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_120_AIMO_PID, 1, 11); REGISTER_HID_DETECTOR_IP ("Roccat Vulcan TKL", DetectRoccatVulcanKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_TKL_PID, 1, 11); +REGISTER_HID_DETECTOR_IP ("Roccat Vulcan Pro", DetectRoccatVulcanKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_PRO_PID, 1, 0xFF01); /*-----------------------------------------------------------------*\ | MICE | diff --git a/Controllers/RoccatController/RoccatVulcanKeyboardController.cpp b/Controllers/RoccatController/RoccatVulcanKeyboardController.cpp index 1d2277bf..06cabdf0 100644 --- a/Controllers/RoccatController/RoccatVulcanKeyboardController.cpp +++ b/Controllers/RoccatController/RoccatVulcanKeyboardController.cpp @@ -64,6 +64,7 @@ device_info RoccatVulcanKeyboardController::InitDeviceInfo() case ROCCAT_PYRO_PID: case ROCCAT_MAGMA_PID: case ROCCAT_MAGMA_MINI_PID: + case ROCCAT_VULCAN_PRO_PID: packet_length = 9; report_id = 0x09; break; @@ -116,6 +117,7 @@ void RoccatVulcanKeyboardController::EnableDirect(bool on_off_switch) case ROCCAT_PYRO_PID: case ROCCAT_MAGMA_PID: case ROCCAT_MAGMA_MINI_PID: + case ROCCAT_VULCAN_PRO_PID: buf = new uint8_t[5] { 0x0E, 0x05, on_off_switch, 0x00, 0x00 }; hid_send_feature_report(dev_ctrl, buf, 5); break; @@ -145,6 +147,11 @@ void RoccatVulcanKeyboardController::SendColors(std::vector colors) column_length = 1; protocol_version = 2; break; + case ROCCAT_VULCAN_PRO_PID: + packet_length = 384; + column_length = 12; + protocol_version = 2; + break; default: packet_length = 436; column_length = 12; @@ -246,7 +253,6 @@ void RoccatVulcanKeyboardController::SendColors(std::vector colors) AwaitResponse(20); } - void RoccatVulcanKeyboardController::SendMode(unsigned int mode, unsigned int speed, unsigned int brightness, std::vector colors) { if(speed == 0) speed = ROCCAT_VULCAN_SPEED_DEFAULT; @@ -269,6 +275,11 @@ void RoccatVulcanKeyboardController::SendMode(unsigned int mode, unsigned int sp packet_length = 26; column_length = 5; break; + case ROCCAT_VULCAN_PRO_PID: + protocol_version = 2; + packet_length = 371; + column_length = 12; + break; default: protocol_version = 1; packet_length = 443; @@ -351,6 +362,7 @@ void RoccatVulcanKeyboardController::WaitUntilReady() case ROCCAT_PYRO_PID: case ROCCAT_MAGMA_PID: case ROCCAT_MAGMA_MINI_PID: + case ROCCAT_VULCAN_PRO_PID: packet_length = 4; break; default: diff --git a/Controllers/RoccatController/RoccatVulcanKeyboardController.h b/Controllers/RoccatController/RoccatVulcanKeyboardController.h index 4cbc23a5..1e36445f 100644 --- a/Controllers/RoccatController/RoccatVulcanKeyboardController.h +++ b/Controllers/RoccatController/RoccatVulcanKeyboardController.h @@ -20,6 +20,7 @@ enum ROCCAT_VULCAN_100_AIMO_PID = 0x307A, ROCCAT_VULCAN_120_AIMO_PID = 0x3098, ROCCAT_VULCAN_TKL_PID = 0x2FEE, + ROCCAT_VULCAN_PRO_PID = 0x30F7, ROCCAT_PYRO_PID = 0x314C, ROCCAT_MAGMA_PID = 0x3124, ROCCAT_MAGMA_MINI_PID = 0x69A0, diff --git a/Controllers/RoccatController/RoccatVulcanKeyboardLayouts.h b/Controllers/RoccatController/RoccatVulcanKeyboardLayouts.h index c72eb56d..d8a4a9e7 100644 --- a/Controllers/RoccatController/RoccatVulcanKeyboardLayouts.h +++ b/Controllers/RoccatController/RoccatVulcanKeyboardLayouts.h @@ -49,7 +49,6 @@ static unsigned int ROCCAT_VULCAN_120_AIMO_LAYOUT_KEYS_104[6][24] = { 5, 7, 13, NA, NA, NA, 33, NA, NA, NA, 54, 60, 65, NA, 73, NA, 77, 82, 86, NA, 91, NA, 100, NA } }; - static unsigned int ROCCAT_VULCAN_120_AIMO_LAYOUT_KEYS_105[6][24] = { { 0, NA, 9, 15, 20, 25, NA, 35, 40, 45, 50, 56, 62, 67, 72, NA, 75, 79, 84, NA, NA, NA, NA, NA }, @@ -70,7 +69,6 @@ static unsigned int ROCCAT_VULCAN_TKL_LAYOUT_KEYS_104[6][19] = { 5, 7, 13, NA, NA, NA, 33, NA, NA, NA, 54, 60, 65, NA, 73, NA, 77, 81, 84 } }; - static unsigned int ROCCAT_VULCAN_TKL_LAYOUT_KEYS_105[6][19] = { { 0, NA, 9, 15, 20, 25, NA, 35, 40, 45, 50, 56, 62, 67, 72, NA, 75, NA, NA },