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];

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

@ -4,6 +4,7 @@
| 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 |
@ -30,15 +31,38 @@
#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
#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)
{
CorsairHydroPlatinumController* controller = new CorsairHydroPlatinumController(dev, info->path, name);
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);
@ -53,4 +77,8 @@ REGISTER_HID_DETECTOR("Corsair Hydro H100i Pro XT", DetectCorsairHydroPl
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 );
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

@ -4,6 +4,7 @@
| 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 |
@ -54,6 +55,11 @@ RGBController_CorsairHydroPlatinum::RGBController_CorsairHydroPlatinum(CorsairHy
SetupZones();
}
RGBController_CorsairHydroPlatinum::~RGBController_CorsairHydroPlatinum()
{
delete controller;
}
void RGBController_CorsairHydroPlatinum::Init_Controller()
{
zone cpu_block_zone;
@ -68,6 +74,11 @@ void RGBController_CorsairHydroPlatinum::Init_Controller()
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;
@ -77,6 +88,7 @@ void RGBController_CorsairHydroPlatinum::Init_Controller()
fans_zone.matrix_map = NULL;
zones.push_back(fans_zone);
}
}
void RGBController_CorsairHydroPlatinum::SetupZones()
{

View file

@ -4,6 +4,7 @@
| 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 |
@ -18,6 +19,7 @@ class RGBController_CorsairHydroPlatinum : public RGBController
{
public:
RGBController_CorsairHydroPlatinum(CorsairHydroPlatinumController* controller_ptr);
~RGBController_CorsairHydroPlatinum();
void SetupZones();