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 |
| |
| 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<RGBColor> 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++;

View file

@ -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<RGBColor> colors);
bool HaveRgbFan();
private:
hid_device* dev;
@ -49,6 +51,7 @@ private:
std::string name;
std::atomic<unsigned int> sequence_number;
DeviceGuardManager* guard_manager_ptr;
bool have_rgb_fan = true;
void SendMagic(const uint8_t* magic, 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 |
| |
| 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 <hidapi.h>
#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 <hidapi.h>
#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 );

View file

@ -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()
{
}

View file

@ -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();
};