Add support for Capellix Elite Pump lighting control

This commit is contained in:
Jason Russo 2023-05-27 22:25:12 +00:00 committed by Adam Honse
parent eb08ceb1e7
commit 7d37f58407
3 changed files with 15 additions and 5 deletions

View file

@ -14,7 +14,7 @@
using namespace std::chrono_literals;
CorsairCommanderCoreController::CorsairCommanderCoreController(hid_device* dev_handle, const char* path)
CorsairCommanderCoreController::CorsairCommanderCoreController(hid_device* dev_handle, const char* path, int pid)
{
dev = dev_handle;
location = path;
@ -22,6 +22,7 @@ CorsairCommanderCoreController::CorsairCommanderCoreController(hid_device* dev_h
controller_ready = 0;
packet_size = CORSAIR_COMMANDER_CORE_PACKET_SIZE_V2;
command_res_size = packet_size - 4;
this->pid = pid;
/*-----------------------------------------------------*\
| Initialize controller |
@ -62,11 +63,15 @@ void CorsairCommanderCoreController::InitController()
version[2] = res[2];
delete[] res;
if(version[0] == 1)
if (pid == 0x0C1C && version[0] == 1)
{
packet_size = CORSAIR_COMMANDER_CORE_PACKET_SIZE_V1;
command_res_size = packet_size - 4;
}
else if (pid == 0x0C32)
{
packet_size = CORSAIR_COMMANDER_CORE_PACKET_SIZE_V3;
}
/*-----------------------------------------------------*\
| Wake up device |

View file

@ -17,6 +17,8 @@
#define CORSAIR_COMMANDER_CORE_PACKET_SIZE_V1 1025 // First bit is the report bit
#define CORSAIR_COMMANDER_CORE_PACKET_SIZE_V2 97 // First bit is the report bit
#define CORSAIR_COMMANDER_CORE_PACKET_SIZE_V3 65 // First bit is the report bit
#define CORSAIR_COMMANDER_CORE_RGB_DATA_LENGTH 699
#define CORSAIR_QL_FAN_ZONE_OFFSET 102
#define CORSAIR_COMMANDER_CORE_NUM_CHANNELS 6
@ -29,7 +31,7 @@ enum
class CorsairCommanderCoreController
{
public:
CorsairCommanderCoreController(hid_device* dev_handle, const char* path);
CorsairCommanderCoreController(hid_device* dev_handle, const char* path, int pid);
~CorsairCommanderCoreController();
std::string GetFirmwareString();
@ -55,6 +57,7 @@ private:
unsigned short int version[3] = {0, 0, 0};
int packet_size;
int command_res_size;
int pid;
std::chrono::time_point<std::chrono::steady_clock> last_commit_time;
void SendCommand(unsigned char command[2], unsigned char data[], unsigned short int data_len, unsigned char res[]);

View file

@ -14,6 +14,7 @@
| Commander Core product IDs |
\*-----------------------------------------------------*/
#define CORSAIR_COMMANDER_CORE_PID 0x0C1C
#define CORSAIR_COMMANDER_CORE2_PID 0x0C32
/******************************************************************************************\
* *
@ -29,7 +30,7 @@ void DetectCorsairCapellixHIDControllers(hid_device_info* info, const std::strin
if(dev)
{
CorsairCommanderCoreController* controller = new CorsairCommanderCoreController(dev, info->path);
CorsairCommanderCoreController* controller = new CorsairCommanderCoreController(dev, info->path, info->product_id);
RGBController_CorsairCommanderCore* rgb_controller = new RGBController_CorsairCommanderCore(controller);
rgb_controller->name = name;
@ -38,4 +39,5 @@ void DetectCorsairCapellixHIDControllers(hid_device_info* info, const std::strin
}
}
REGISTER_HID_DETECTOR_IPU("Corsair Commander Core", DetectCorsairCapellixHIDControllers, CORSAIR_VID, CORSAIR_COMMANDER_CORE_PID, 0x00, 0xFF42, 0x01);
REGISTER_HID_DETECTOR_IPU("Corsair Commander Core", DetectCorsairCapellixHIDControllers, CORSAIR_VID, CORSAIR_COMMANDER_CORE_PID, 0x00, 0xFF42, 0x01);
REGISTER_HID_DETECTOR_IPU("Corsair Commander Core", DetectCorsairCapellixHIDControllers, CORSAIR_VID, CORSAIR_COMMANDER_CORE2_PID, 0x00, 0xFF42, 0x01);