diff --git a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.cpp b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.cpp index 9461ea90..fd44221b 100644 --- a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.cpp +++ b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.cpp @@ -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 | diff --git a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.h b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.h index 17920c14..fe489193 100644 --- a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.h +++ b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreController.h @@ -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 last_commit_time; void SendCommand(unsigned char command[2], unsigned char data[], unsigned short int data_len, unsigned char res[]); diff --git a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp index 49be612d..f4e08956 100644 --- a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp +++ b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp @@ -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);