AIO H1xx ELITE Series

This commit is contained in:
Nikola Jurkovic 2025-08-13 22:37:10 +00:00 committed by Adam Honse
parent 49e4f00aff
commit 2dd013a0a0
5 changed files with 357 additions and 249 deletions

View file

@ -4,6 +4,7 @@
| Driver for Corsair Hydro Platinum coolers | | Driver for Corsair Hydro Platinum coolers |
| | | |
| Kasper 28 Mar 2021 | | Kasper 28 Mar 2021 |
| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 |
| | | |
| This file is part of the OpenRGB project | | This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only | | 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] = static const uint8_t MAGIC_1[61] =
{ {
0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x7f, 0x7f, 0x7f, 0xff, 0x00, 0xff, 0xff, 0xff, 0x7F, 0x7F, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 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_2[61] = static const uint8_t MAGIC_2[61] =
{ {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 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, 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, 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] = 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, 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, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 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, 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; dev = dev_handle;
location = path; location = path;
name = dev_name; name = dev_name;
have_rgb_fan = dev_rgb_fan;
guard_manager_ptr = new DeviceGuardManager(new CorsairDeviceGuard()); guard_manager_ptr = new DeviceGuardManager(new CorsairDeviceGuard());
SendMagic(MAGIC_1, CORSAIR_HYDRO_PLATINUM_MAGIC_1); SendMagic(MAGIC_1, CORSAIR_HYDRO_PLATINUM_MAGIC_1);
@ -99,6 +149,14 @@ CorsairHydroPlatinumController::CorsairHydroPlatinumController(hid_device* dev_h
CorsairHydroPlatinumController::~CorsairHydroPlatinumController() 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); hid_close(dev);
delete guard_manager_ptr; delete guard_manager_ptr;
} }
@ -135,6 +193,11 @@ void CorsairHydroPlatinumController::SetupColors(std::vector<RGBColor> colors)
} }
} }
bool CorsairHydroPlatinumController::HaveRgbFan()
{
return(have_rgb_fan);
}
void CorsairHydroPlatinumController::SendMagic(const uint8_t* magic, unsigned int command) void CorsairHydroPlatinumController::SendMagic(const uint8_t* magic, unsigned int command)
{ {
unsigned char usb_buf[CORSAIR_HYDRO_PLATINUM_PACKET_SIZE]; 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 * pos = (uint8_t *) data;
uint8_t * end = pos + size; uint8_t * end = pos + size;
while (pos < end) while(pos < end)
{ {
val = CRC_TABLE[val ^ *pos]; val = CRC_TABLE[val ^ *pos];
pos++; pos++;

View file

@ -4,6 +4,7 @@
| Driver for Corsair Hydro Platinum coolers | | Driver for Corsair Hydro Platinum coolers |
| | | |
| Kasper 28 Mar 2021 | | Kasper 28 Mar 2021 |
| Nikola Jurkovic (jurkovic.nikola) 13 Aug 2025 |
| | | |
| This file is part of the OpenRGB project | | This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only | | SPDX-License-Identifier: GPL-2.0-only |
@ -34,13 +35,14 @@ enum
class CorsairHydroPlatinumController class CorsairHydroPlatinumController
{ {
public: 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(); ~CorsairHydroPlatinumController();
std::string GetLocation(); std::string GetLocation();
std::string GetFirmwareString(); std::string GetFirmwareString();
std::string GetName(); std::string GetName();
void SetupColors(std::vector<RGBColor> colors); void SetupColors(std::vector<RGBColor> colors);
bool HaveRgbFan();
private: private:
hid_device* dev; hid_device* dev;
@ -49,6 +51,7 @@ private:
std::string name; std::string name;
std::atomic<unsigned int> sequence_number; std::atomic<unsigned int> sequence_number;
DeviceGuardManager* guard_manager_ptr; DeviceGuardManager* guard_manager_ptr;
bool have_rgb_fan = true;
void SendMagic(const uint8_t* magic, unsigned int command); void SendMagic(const uint8_t* magic, unsigned int command);
void SendColors(std::vector<RGBColor> colors, unsigned int start, unsigned int end, unsigned int command); void SendColors(std::vector<RGBColor> colors, unsigned int start, unsigned int end, unsigned int command);

View file

@ -1,56 +1,84 @@
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| CorsairHydroPlatinumControllerDetect.cpp | | CorsairHydroPlatinumControllerDetect.cpp |
| | | |
| Detector for Corsair Hydro Platinum coolers | | Detector for Corsair Hydro Platinum coolers |
| | | |
| Kasper 28 Mar 2021 | | 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 | | This file is part of the OpenRGB project |
\*---------------------------------------------------------*/ | SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <hidapi.h>
#include "Detector.h" #include <hidapi.h>
#include "CorsairHydroPlatinumController.h" #include "Detector.h"
#include "RGBController_CorsairHydroPlatinum.h" #include "CorsairHydroPlatinumController.h"
#include "RGBController_CorsairHydroPlatinum.h"
/*-----------------------------------------------------*\
| Corsair vendor ID | /*-----------------------------------------------------*\
\*-----------------------------------------------------*/ | Corsair vendor ID |
#define CORSAIR_VID 0x1B1C \*-----------------------------------------------------*/
#define CORSAIR_VID 0x1B1C
/*-----------------------------------------------------*\
| Product IDs | /*-----------------------------------------------------*\
\*-----------------------------------------------------*/ | Product IDs |
#define CORSAIR_HYDRO_H100I_PLATINUM_PID 0x0C18 \*-----------------------------------------------------*/
#define CORSAIR_HYDRO_H100I_PLATINUM_SE_PID 0x0C19 #define CORSAIR_HYDRO_H100I_PLATINUM_PID 0x0C18
#define CORSAIR_HYDRO_H115I_PLATINUM_PID 0x0C17 #define CORSAIR_HYDRO_H100I_PLATINUM_SE_PID 0x0C19
#define CORSAIR_HYDRO_H60I_PRO_XT_PID 0x0C29 #define CORSAIR_HYDRO_H115I_PLATINUM_PID 0x0C17
#define CORSAIR_HYDRO_H100I_PRO_XT_PID 0x0C20 #define CORSAIR_HYDRO_H60I_PRO_XT_PID 0x0C29
#define CORSAIR_HYDRO_H100I_PRO_XT_V2_PID 0x0C2D #define CORSAIR_HYDRO_H100I_PRO_XT_PID 0x0C20
#define CORSAIR_HYDRO_H115I_PRO_XT_PID 0x0C21 #define CORSAIR_HYDRO_H100I_PRO_XT_V2_PID 0x0C2D
#define CORSAIR_HYDRO_H150I_PRO_XT_PID 0x0C22 #define CORSAIR_HYDRO_H115I_PRO_XT_PID 0x0C21
#define CORSAIR_HYDRO_H100I_ELITE_PID 0x0C40 #define CORSAIR_HYDRO_H150I_PRO_XT_PID 0x0C22
#define CORSAIR_HYDRO_H100I_ELITE_RGB_PID 0x0C35
void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name) #define CORSAIR_HYDRO_H115I_ELITE_RGB_PID 0x0C36
{ #define CORSAIR_HYDRO_H150I_ELITE_RGB_PID 0x0C37
hid_device* dev = hid_open_path(info->path); #define CORSAIR_HYDRO_H100I_ELITE_RGB_PID_WHITE 0x0C40
#define CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE 0x0C41
if(dev)
{ void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name)
CorsairHydroPlatinumController* controller = new CorsairHydroPlatinumController(dev, info->path, name); {
RGBController_CorsairHydroPlatinum* rgb_controller = new RGBController_CorsairHydroPlatinum(controller); uint16_t no_rgb_fan_models[] =
{
ResourceManager::get()->RegisterRGBController(rgb_controller); 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,
REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_PID ); CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE
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 ); hid_device* dev = hid_open_path(info->path);
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 ); if(dev)
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 ); bool dev_rgb_fan = true;
REGISTER_HID_DETECTOR("Corsair Hydro H100i Elite", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_ELITE_PID ); 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 );

View file

@ -1,135 +1,147 @@
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| RGBController_CorsairHydroPlatinum.cpp | | RGBController_CorsairHydroPlatinum.cpp |
| | | |
| RGBController for Corsair Hydro Platinum coolers | | RGBController for Corsair Hydro Platinum coolers |
| | | |
| Kasper 28 Mar 2021 | | 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 | | This file is part of the OpenRGB project |
\*---------------------------------------------------------*/ | SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include "RGBController_CorsairHydroPlatinum.h"
#include "RGBController_CorsairHydroPlatinum.h"
#define NA 0xFFFFFFFF
static unsigned int matrix_map[5][5] = #define NA 0xFFFFFFFF
{ static unsigned int matrix_map[5][5] =
{ NA, 11, 12, 13, NA }, {
{ 10, NA, 1, NA, 14 }, { NA, 11, 12, 13, NA },
{ 9, 0, NA, 2, 15 }, { 10, NA, 1, NA, 14 },
{ 8, NA, 3, NA, 4 }, { 9, 0, NA, 2, 15 },
{ NA, 7, 6, 5, NA } { 8, NA, 3, NA, 4 },
}; { NA, 7, 6, 5, NA }
};
/**------------------------------------------------------------------*\
@name Corsair Hydro Platinum /**------------------------------------------------------------------*\
@category Cooler @name Corsair Hydro Platinum
@type USB @category Cooler
@save :x: @type USB
@direct :white_check_mark: @save :x:
@effects :x: @direct :white_check_mark:
@detectors DetectCorsairHydroPlatinumControllers @effects :x:
@comment @detectors DetectCorsairHydroPlatinumControllers
\*-------------------------------------------------------------------*/ @comment
\*-------------------------------------------------------------------*/
RGBController_CorsairHydroPlatinum::RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr)
{ RGBController_CorsairHydroPlatinum::RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr)
controller = controller_ptr; {
controller = controller_ptr;
name = controller->GetName();
vendor = "Corsair"; name = controller->GetName();
description = "Corsair Hydro Platinum Series Device"; vendor = "Corsair";
type = DEVICE_TYPE_COOLER; description = "Corsair Hydro Platinum Series Device";
location = controller->GetLocation(); type = DEVICE_TYPE_COOLER;
version = controller->GetFirmwareString(); location = controller->GetLocation();
version = controller->GetFirmwareString();
mode Direct;
Direct.name = "Direct"; mode Direct;
Direct.value = 0; Direct.name = "Direct";
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; Direct.value = 0;
Direct.color_mode = MODE_COLORS_PER_LED; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
modes.push_back(Direct); Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
Init_Controller();
SetupZones(); Init_Controller();
} SetupZones();
}
void RGBController_CorsairHydroPlatinum::Init_Controller()
{ RGBController_CorsairHydroPlatinum::~RGBController_CorsairHydroPlatinum()
zone cpu_block_zone; {
cpu_block_zone.name = "CPU Block"; delete controller;
cpu_block_zone.type = ZONE_TYPE_MATRIX; }
cpu_block_zone.leds_min = 16;
cpu_block_zone.leds_max = 16; void RGBController_CorsairHydroPlatinum::Init_Controller()
cpu_block_zone.leds_count = 16; {
cpu_block_zone.matrix_map = new matrix_map_type; zone cpu_block_zone;
cpu_block_zone.matrix_map->height = 5; cpu_block_zone.name = "CPU Block";
cpu_block_zone.matrix_map->width = 5; cpu_block_zone.type = ZONE_TYPE_MATRIX;
cpu_block_zone.matrix_map->map = (unsigned int *)&matrix_map; cpu_block_zone.leds_min = 16;
zones.push_back(cpu_block_zone); cpu_block_zone.leds_max = 16;
cpu_block_zone.leds_count = 16;
zone fans_zone; cpu_block_zone.matrix_map = new matrix_map_type;
fans_zone.name = "Fans"; cpu_block_zone.matrix_map->height = 5;
fans_zone.type = ZONE_TYPE_LINEAR; cpu_block_zone.matrix_map->width = 5;
fans_zone.leds_min = 0; cpu_block_zone.matrix_map->map = (unsigned int *)&matrix_map;
fans_zone.leds_max = 32; zones.push_back(cpu_block_zone);
fans_zone.leds_count = 0;
fans_zone.matrix_map = NULL; /*-----------------------------------------------------*\
zones.push_back(fans_zone); | If the device is RGB fan-capable, set up fan zones. |
} \*-----------------------------------------------------*/
if(controller->HaveRgbFan())
void RGBController_CorsairHydroPlatinum::SetupZones() {
{ zone fans_zone;
/*-------------------------------------------------*\ fans_zone.name = "Fans";
| Clear any existing color/LED configuration | fans_zone.type = ZONE_TYPE_LINEAR;
\*-------------------------------------------------*/ fans_zone.leds_min = 0;
leds.clear(); fans_zone.leds_max = 32;
colors.clear(); fans_zone.leds_count = 0;
fans_zone.matrix_map = NULL;
for (unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++) zones.push_back(fans_zone);
{ }
for (unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++) }
{
led new_led; void RGBController_CorsairHydroPlatinum::SetupZones()
new_led.name = zones[zone_idx].name + " " + std::to_string(led_idx);; {
leds.push_back(new_led); /*-------------------------------------------------*\
} | Clear any existing color/LED configuration |
} \*-------------------------------------------------*/
leds.clear();
SetupColors(); colors.clear();
}
for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
void RGBController_CorsairHydroPlatinum::ResizeZone(int zone, int new_size) {
{ for(unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++)
if((size_t) zone >= zones.size()) {
{ led new_led;
return; new_led.name = zones[zone_idx].name + " " + std::to_string(led_idx);;
} leds.push_back(new_led);
}
if(((unsigned int)new_size >= zones[zone].leds_min) && ((unsigned int)new_size <= zones[zone].leds_max)) }
{
zones[zone].leds_count = new_size; SetupColors();
}
SetupZones();
} void RGBController_CorsairHydroPlatinum::ResizeZone(int zone, int new_size)
} {
if((size_t) zone >= zones.size())
void RGBController_CorsairHydroPlatinum::DeviceUpdateLEDs() {
{ return;
controller->SetupColors(colors); }
}
if(((unsigned int)new_size >= zones[zone].leds_min) && ((unsigned int)new_size <= zones[zone].leds_max))
void RGBController_CorsairHydroPlatinum::UpdateZoneLEDs(int /*zone*/) {
{ zones[zone].leds_count = new_size;
DeviceUpdateLEDs();
} SetupZones();
}
void RGBController_CorsairHydroPlatinum::UpdateSingleLED(int /*led*/) }
{
DeviceUpdateLEDs(); void RGBController_CorsairHydroPlatinum::DeviceUpdateLEDs()
} {
controller->SetupColors(colors);
void RGBController_CorsairHydroPlatinum::DeviceUpdateMode() }
{
void RGBController_CorsairHydroPlatinum::UpdateZoneLEDs(int /*zone*/)
} {
DeviceUpdateLEDs();
}
void RGBController_CorsairHydroPlatinum::UpdateSingleLED(int /*led*/)
{
DeviceUpdateLEDs();
}
void RGBController_CorsairHydroPlatinum::DeviceUpdateMode()
{
}

View file

@ -1,36 +1,38 @@
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| RGBController_CorsairHydroPlatinum.h | | RGBController_CorsairHydroPlatinum.h |
| | | |
| RGBController for Corsair Hydro Platinum coolers | | RGBController for Corsair Hydro Platinum coolers |
| | | |
| Kasper 28 Mar 2021 | | 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 | | This file is part of the OpenRGB project |
\*---------------------------------------------------------*/ | SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#pragma once
#pragma once
#include "RGBController.h"
#include "CorsairHydroPlatinumController.h" #include "RGBController.h"
#include "CorsairHydroPlatinumController.h"
class RGBController_CorsairHydroPlatinum : public RGBController
{ class RGBController_CorsairHydroPlatinum : public RGBController
public: {
RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr); public:
RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr);
void SetupZones(); ~RGBController_CorsairHydroPlatinum();
void ResizeZone(int zone, int new_size); void SetupZones();
void DeviceUpdateLEDs(); void ResizeZone(int zone, int new_size);
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led); void DeviceUpdateLEDs();
void UpdateZoneLEDs(int zone);
void DeviceUpdateMode(); void UpdateSingleLED(int led);
private: void DeviceUpdateMode();
CorsairHydroPlatinumController* controller;
private:
void Init_Controller(); CorsairHydroPlatinumController* controller;
};
void Init_Controller();
};