From 2dd013a0a046cc03eda4d3a6a2379bf8fa2e807c Mon Sep 17 00:00:00 2001 From: Nikola Jurkovic Date: Wed, 13 Aug 2025 22:37:10 +0000 Subject: [PATCH] AIO H1xx ELITE Series --- .../CorsairHydroPlatinumController.cpp | 105 +++++-- .../CorsairHydroPlatinumController.h | 5 +- .../CorsairHydroPlatinumControllerDetect.cpp | 140 +++++---- .../RGBController_CorsairHydroPlatinum.cpp | 282 +++++++++--------- .../RGBController_CorsairHydroPlatinum.h | 74 ++--- 5 files changed, 357 insertions(+), 249 deletions(-) diff --git a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.cpp b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.cpp index af0800a3..8f11aee2 100644 --- a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.cpp +++ b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.cpp @@ -4,6 +4,7 @@ | Driver for Corsair Hydro Platinum coolers | | | | Kasper 28 Mar 2021 | +| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-only | @@ -51,45 +52,94 @@ static const uint8_t CRC_TABLE[256] = static const uint8_t MAGIC_1[61] = { - 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, - 0x7f, 0x7f, 0x7f, 0xff, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff + 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x7F, 0x7F, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; static const uint8_t MAGIC_2[61] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; static const uint8_t MAGIC_3[61] = { - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -CorsairHydroPlatinumController::CorsairHydroPlatinumController(hid_device* dev_handle, const char* path, std::string dev_name) +static const uint8_t HARDWARE_MAGIC_1[61] = +{ + 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x09, 0x20, 0x07, 0x00, + 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +static const uint8_t HARDWARE_MAGIC_2[61] = +{ + 0x0A, 0x01, 0x04, 0x07, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0A, 0x0B, 0x00, 0x01, 0x02, 0x03, 0x04, + 0x01, 0x0A, 0x07, 0x04, 0x0B, 0x0A, 0x09, 0x08, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x01, 0x0A, 0x07, 0x04, 0x01, 0x0A, 0x09, 0x08, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +static const uint8_t HARDWARE_MAGIC_3[61] = +{ + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, + 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, + 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, + 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +static const uint8_t HARDWARE_MAGIC_4[61] = +{ + 0x00, 0x00, 0xFF, 0x00, 0x4A, 0xFF, 0x00, 0x94, + 0xFF, 0x00, 0xDF, 0xFF, 0x00, 0xFF, 0xAA, 0x00, + 0xFF, 0x15, 0x7F, 0x7F, 0x00, 0xFA, 0x00, 0x06, + 0xDB, 0x00, 0x32, 0xD7, 0x00, 0x58, 0xF6, 0x00, + 0x76, 0x94, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +CorsairHydroPlatinumController::CorsairHydroPlatinumController(hid_device* dev_handle, const char* path, bool dev_rgb_fan, std::string dev_name) { dev = dev_handle; location = path; name = dev_name; + have_rgb_fan = dev_rgb_fan; guard_manager_ptr = new DeviceGuardManager(new CorsairDeviceGuard()); SendMagic(MAGIC_1, CORSAIR_HYDRO_PLATINUM_MAGIC_1); @@ -99,6 +149,14 @@ CorsairHydroPlatinumController::CorsairHydroPlatinumController(hid_device* dev_h CorsairHydroPlatinumController::~CorsairHydroPlatinumController() { + /*-----------------------------------------------------*\ + | Hardware lights, 2,3,4,1 | + \*-----------------------------------------------------*/ + SendMagic(HARDWARE_MAGIC_2, CORSAIR_HYDRO_PLATINUM_MAGIC_2); + SendMagic(HARDWARE_MAGIC_3, CORSAIR_HYDRO_PLATINUM_MAGIC_3); + SendMagic(HARDWARE_MAGIC_4, CORSAIR_HYDRO_PLATINUM_SET_LIGHTING_1); + SendMagic(HARDWARE_MAGIC_1, CORSAIR_HYDRO_PLATINUM_MAGIC_1); + hid_close(dev); delete guard_manager_ptr; } @@ -135,6 +193,11 @@ void CorsairHydroPlatinumController::SetupColors(std::vector colors) } } +bool CorsairHydroPlatinumController::HaveRgbFan() +{ + return(have_rgb_fan); +} + void CorsairHydroPlatinumController::SendMagic(const uint8_t* magic, unsigned int command) { unsigned char usb_buf[CORSAIR_HYDRO_PLATINUM_PACKET_SIZE]; @@ -265,7 +328,7 @@ uint8_t CorsairHydroPlatinumController::ComputePEC(const void * data, size_t siz uint8_t * pos = (uint8_t *) data; uint8_t * end = pos + size; - while (pos < end) + while(pos < end) { val = CRC_TABLE[val ^ *pos]; pos++; diff --git a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.h b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.h index f59ab245..e730ac75 100644 --- a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.h +++ b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumController.h @@ -4,6 +4,7 @@ | Driver for Corsair Hydro Platinum coolers | | | | Kasper 28 Mar 2021 | +| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-only | @@ -34,13 +35,14 @@ enum class CorsairHydroPlatinumController { public: - CorsairHydroPlatinumController(hid_device* dev_handle, const char* path, std::string dev_name); + CorsairHydroPlatinumController(hid_device* dev_handle, const char* path, bool dev_rgb_fan, std::string dev_name); ~CorsairHydroPlatinumController(); std::string GetLocation(); std::string GetFirmwareString(); std::string GetName(); void SetupColors(std::vector colors); + bool HaveRgbFan(); private: hid_device* dev; @@ -49,6 +51,7 @@ private: std::string name; std::atomic sequence_number; DeviceGuardManager* guard_manager_ptr; + bool have_rgb_fan = true; void SendMagic(const uint8_t* magic, unsigned int command); void SendColors(std::vector colors, unsigned int start, unsigned int end, unsigned int command); diff --git a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp index bbc1055e..926a4ef2 100644 --- a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp +++ b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp @@ -1,56 +1,84 @@ -/*---------------------------------------------------------*\ -| CorsairHydroPlatinumControllerDetect.cpp | -| | -| Detector for Corsair Hydro Platinum coolers | -| | -| Kasper 28 Mar 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-only | -\*---------------------------------------------------------*/ - -#include -#include "Detector.h" -#include "CorsairHydroPlatinumController.h" -#include "RGBController_CorsairHydroPlatinum.h" - -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ -#define CORSAIR_VID 0x1B1C - -/*-----------------------------------------------------*\ -| Product IDs | -\*-----------------------------------------------------*/ -#define CORSAIR_HYDRO_H100I_PLATINUM_PID 0x0C18 -#define CORSAIR_HYDRO_H100I_PLATINUM_SE_PID 0x0C19 -#define CORSAIR_HYDRO_H115I_PLATINUM_PID 0x0C17 -#define CORSAIR_HYDRO_H60I_PRO_XT_PID 0x0C29 -#define CORSAIR_HYDRO_H100I_PRO_XT_PID 0x0C20 -#define CORSAIR_HYDRO_H100I_PRO_XT_V2_PID 0x0C2D -#define CORSAIR_HYDRO_H115I_PRO_XT_PID 0x0C21 -#define CORSAIR_HYDRO_H150I_PRO_XT_PID 0x0C22 -#define CORSAIR_HYDRO_H100I_ELITE_PID 0x0C40 - -void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name) -{ - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - CorsairHydroPlatinumController* controller = new CorsairHydroPlatinumController(dev, info->path, name); - RGBController_CorsairHydroPlatinum* rgb_controller = new RGBController_CorsairHydroPlatinum(controller); - - ResourceManager::get()->RegisterRGBController(rgb_controller); - } -} - -REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum SE", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_SE_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H115i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_PLATINUM_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H60i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H60I_PRO_XT_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PRO_XT_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT v2", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PRO_XT_V2_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H115i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_PRO_XT_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H150i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H150I_PRO_XT_PID ); -REGISTER_HID_DETECTOR("Corsair Hydro H100i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_ELITE_PID ); +/*---------------------------------------------------------*\ +| CorsairHydroPlatinumControllerDetect.cpp | +| | +| Detector for Corsair Hydro Platinum coolers | +| | +| Kasper 28 Mar 2021 | +| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-only | +\*---------------------------------------------------------*/ + +#include +#include "Detector.h" +#include "CorsairHydroPlatinumController.h" +#include "RGBController_CorsairHydroPlatinum.h" + +/*-----------------------------------------------------*\ +| Corsair vendor ID | +\*-----------------------------------------------------*/ +#define CORSAIR_VID 0x1B1C + +/*-----------------------------------------------------*\ +| Product IDs | +\*-----------------------------------------------------*/ +#define CORSAIR_HYDRO_H100I_PLATINUM_PID 0x0C18 +#define CORSAIR_HYDRO_H100I_PLATINUM_SE_PID 0x0C19 +#define CORSAIR_HYDRO_H115I_PLATINUM_PID 0x0C17 +#define CORSAIR_HYDRO_H60I_PRO_XT_PID 0x0C29 +#define CORSAIR_HYDRO_H100I_PRO_XT_PID 0x0C20 +#define CORSAIR_HYDRO_H100I_PRO_XT_V2_PID 0x0C2D +#define CORSAIR_HYDRO_H115I_PRO_XT_PID 0x0C21 +#define CORSAIR_HYDRO_H150I_PRO_XT_PID 0x0C22 +#define CORSAIR_HYDRO_H100I_ELITE_RGB_PID 0x0C35 +#define CORSAIR_HYDRO_H115I_ELITE_RGB_PID 0x0C36 +#define CORSAIR_HYDRO_H150I_ELITE_RGB_PID 0x0C37 +#define CORSAIR_HYDRO_H100I_ELITE_RGB_PID_WHITE 0x0C40 +#define CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE 0x0C41 + +void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name) +{ + uint16_t no_rgb_fan_models[] = + { + CORSAIR_HYDRO_H100I_ELITE_RGB_PID, + CORSAIR_HYDRO_H115I_ELITE_RGB_PID, + CORSAIR_HYDRO_H150I_ELITE_RGB_PID, + CORSAIR_HYDRO_H100I_ELITE_RGB_PID_WHITE, + CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE + }; + + hid_device* dev = hid_open_path(info->path); + + if(dev) + { + bool dev_rgb_fan = true; + for(uint16_t pid : no_rgb_fan_models) + { + if(info->product_id == pid) + { + dev_rgb_fan = false; + break; + } + } + + CorsairHydroPlatinumController* controller = new CorsairHydroPlatinumController(dev, info->path, dev_rgb_fan, name); + RGBController_CorsairHydroPlatinum* rgb_controller = new RGBController_CorsairHydroPlatinum(controller); + + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum SE", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_SE_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H115i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_PLATINUM_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H60i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H60I_PRO_XT_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PRO_XT_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT v2", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PRO_XT_V2_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H115i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_PRO_XT_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H150i Pro XT", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H150I_PRO_XT_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H100i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_ELITE_RGB_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H115i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H115I_ELITE_RGB_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H150i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H150I_ELITE_RGB_PID ); +REGISTER_HID_DETECTOR("Corsair Hydro H100i Elite White", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_ELITE_RGB_PID_WHITE ); +REGISTER_HID_DETECTOR("Corsair Hydro H150i Elite White", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE ); diff --git a/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.cpp b/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.cpp index 7cc081c4..295b77f7 100644 --- a/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.cpp +++ b/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.cpp @@ -1,135 +1,147 @@ -/*---------------------------------------------------------*\ -| RGBController_CorsairHydroPlatinum.cpp | -| | -| RGBController for Corsair Hydro Platinum coolers | -| | -| Kasper 28 Mar 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-only | -\*---------------------------------------------------------*/ - -#include "RGBController_CorsairHydroPlatinum.h" - -#define NA 0xFFFFFFFF -static unsigned int matrix_map[5][5] = -{ - { NA, 11, 12, 13, NA }, - { 10, NA, 1, NA, 14 }, - { 9, 0, NA, 2, 15 }, - { 8, NA, 3, NA, 4 }, - { NA, 7, 6, 5, NA } -}; - -/**------------------------------------------------------------------*\ - @name Corsair Hydro Platinum - @category Cooler - @type USB - @save :x: - @direct :white_check_mark: - @effects :x: - @detectors DetectCorsairHydroPlatinumControllers - @comment -\*-------------------------------------------------------------------*/ - -RGBController_CorsairHydroPlatinum::RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr) -{ - controller = controller_ptr; - - name = controller->GetName(); - vendor = "Corsair"; - description = "Corsair Hydro Platinum Series Device"; - type = DEVICE_TYPE_COOLER; - location = controller->GetLocation(); - version = controller->GetFirmwareString(); - - 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); - - Init_Controller(); - SetupZones(); -} - -void RGBController_CorsairHydroPlatinum::Init_Controller() -{ - zone cpu_block_zone; - cpu_block_zone.name = "CPU Block"; - cpu_block_zone.type = ZONE_TYPE_MATRIX; - cpu_block_zone.leds_min = 16; - cpu_block_zone.leds_max = 16; - cpu_block_zone.leds_count = 16; - cpu_block_zone.matrix_map = new matrix_map_type; - cpu_block_zone.matrix_map->height = 5; - cpu_block_zone.matrix_map->width = 5; - cpu_block_zone.matrix_map->map = (unsigned int *)&matrix_map; - zones.push_back(cpu_block_zone); - - zone fans_zone; - fans_zone.name = "Fans"; - fans_zone.type = ZONE_TYPE_LINEAR; - fans_zone.leds_min = 0; - fans_zone.leds_max = 32; - fans_zone.leds_count = 0; - fans_zone.matrix_map = NULL; - zones.push_back(fans_zone); -} - -void RGBController_CorsairHydroPlatinum::SetupZones() -{ - /*-------------------------------------------------*\ - | Clear any existing color/LED configuration | - \*-------------------------------------------------*/ - leds.clear(); - colors.clear(); - - for (unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++) - { - for (unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++) - { - led new_led; - new_led.name = zones[zone_idx].name + " " + std::to_string(led_idx);; - leds.push_back(new_led); - } - } - - SetupColors(); -} - -void RGBController_CorsairHydroPlatinum::ResizeZone(int zone, int new_size) -{ - if((size_t) zone >= zones.size()) - { - return; - } - - if(((unsigned int)new_size >= zones[zone].leds_min) && ((unsigned int)new_size <= zones[zone].leds_max)) - { - zones[zone].leds_count = new_size; - - SetupZones(); - } -} - -void RGBController_CorsairHydroPlatinum::DeviceUpdateLEDs() -{ - controller->SetupColors(colors); -} - -void RGBController_CorsairHydroPlatinum::UpdateZoneLEDs(int /*zone*/) -{ - DeviceUpdateLEDs(); -} - -void RGBController_CorsairHydroPlatinum::UpdateSingleLED(int /*led*/) -{ - DeviceUpdateLEDs(); -} - -void RGBController_CorsairHydroPlatinum::DeviceUpdateMode() -{ - -} +/*---------------------------------------------------------*\ +| RGBController_CorsairHydroPlatinum.cpp | +| | +| RGBController for Corsair Hydro Platinum coolers | +| | +| Kasper 28 Mar 2021 | +| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-only | +\*---------------------------------------------------------*/ + +#include "RGBController_CorsairHydroPlatinum.h" + +#define NA 0xFFFFFFFF +static unsigned int matrix_map[5][5] = +{ + { NA, 11, 12, 13, NA }, + { 10, NA, 1, NA, 14 }, + { 9, 0, NA, 2, 15 }, + { 8, NA, 3, NA, 4 }, + { NA, 7, 6, 5, NA } +}; + +/**------------------------------------------------------------------*\ + @name Corsair Hydro Platinum + @category Cooler + @type USB + @save :x: + @direct :white_check_mark: + @effects :x: + @detectors DetectCorsairHydroPlatinumControllers + @comment +\*-------------------------------------------------------------------*/ + +RGBController_CorsairHydroPlatinum::RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr) +{ + controller = controller_ptr; + + name = controller->GetName(); + vendor = "Corsair"; + description = "Corsair Hydro Platinum Series Device"; + type = DEVICE_TYPE_COOLER; + location = controller->GetLocation(); + version = controller->GetFirmwareString(); + + 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); + + Init_Controller(); + SetupZones(); +} + +RGBController_CorsairHydroPlatinum::~RGBController_CorsairHydroPlatinum() +{ + delete controller; +} + +void RGBController_CorsairHydroPlatinum::Init_Controller() +{ + zone cpu_block_zone; + cpu_block_zone.name = "CPU Block"; + cpu_block_zone.type = ZONE_TYPE_MATRIX; + cpu_block_zone.leds_min = 16; + cpu_block_zone.leds_max = 16; + cpu_block_zone.leds_count = 16; + cpu_block_zone.matrix_map = new matrix_map_type; + cpu_block_zone.matrix_map->height = 5; + cpu_block_zone.matrix_map->width = 5; + cpu_block_zone.matrix_map->map = (unsigned int *)&matrix_map; + zones.push_back(cpu_block_zone); + + /*-----------------------------------------------------*\ + | If the device is RGB fan-capable, set up fan zones. | + \*-----------------------------------------------------*/ + if(controller->HaveRgbFan()) + { + zone fans_zone; + fans_zone.name = "Fans"; + fans_zone.type = ZONE_TYPE_LINEAR; + fans_zone.leds_min = 0; + fans_zone.leds_max = 32; + fans_zone.leds_count = 0; + fans_zone.matrix_map = NULL; + zones.push_back(fans_zone); + } +} + +void RGBController_CorsairHydroPlatinum::SetupZones() +{ + /*-------------------------------------------------*\ + | Clear any existing color/LED configuration | + \*-------------------------------------------------*/ + leds.clear(); + colors.clear(); + + for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++) + { + for(unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++) + { + led new_led; + new_led.name = zones[zone_idx].name + " " + std::to_string(led_idx);; + leds.push_back(new_led); + } + } + + SetupColors(); +} + +void RGBController_CorsairHydroPlatinum::ResizeZone(int zone, int new_size) +{ + if((size_t) zone >= zones.size()) + { + return; + } + + if(((unsigned int)new_size >= zones[zone].leds_min) && ((unsigned int)new_size <= zones[zone].leds_max)) + { + zones[zone].leds_count = new_size; + + SetupZones(); + } +} + +void RGBController_CorsairHydroPlatinum::DeviceUpdateLEDs() +{ + controller->SetupColors(colors); +} + +void RGBController_CorsairHydroPlatinum::UpdateZoneLEDs(int /*zone*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_CorsairHydroPlatinum::UpdateSingleLED(int /*led*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_CorsairHydroPlatinum::DeviceUpdateMode() +{ + +} diff --git a/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.h b/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.h index 1deea7ce..7ae2ea53 100644 --- a/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.h +++ b/Controllers/CorsairHydroPlatinumController/RGBController_CorsairHydroPlatinum.h @@ -1,36 +1,38 @@ -/*---------------------------------------------------------*\ -| RGBController_CorsairHydroPlatinum.h | -| | -| RGBController for Corsair Hydro Platinum coolers | -| | -| Kasper 28 Mar 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-only | -\*---------------------------------------------------------*/ - -#pragma once - -#include "RGBController.h" -#include "CorsairHydroPlatinumController.h" - -class RGBController_CorsairHydroPlatinum : public RGBController -{ -public: - RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr); - - void SetupZones(); - - void ResizeZone(int zone, int new_size); - - void DeviceUpdateLEDs(); - void UpdateZoneLEDs(int zone); - void UpdateSingleLED(int led); - - void DeviceUpdateMode(); - -private: - CorsairHydroPlatinumController* controller; - - void Init_Controller(); -}; +/*---------------------------------------------------------*\ +| RGBController_CorsairHydroPlatinum.h | +| | +| RGBController for Corsair Hydro Platinum coolers | +| | +| Kasper 28 Mar 2021 | +| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-only | +\*---------------------------------------------------------*/ + +#pragma once + +#include "RGBController.h" +#include "CorsairHydroPlatinumController.h" + +class RGBController_CorsairHydroPlatinum : public RGBController +{ +public: + RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr); + ~RGBController_CorsairHydroPlatinum(); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + + void DeviceUpdateLEDs(); + void UpdateZoneLEDs(int zone); + void UpdateSingleLED(int led); + + void DeviceUpdateMode(); + +private: + CorsairHydroPlatinumController* controller; + + void Init_Controller(); +};