/*---------------------------------------------------------*\ | CorsairICueLinkController.h | | | | Driver for Corsair iCue Link System Hub | | | | Aiden Vigue (acvigue) 02 Mar 2025 | | Adam Honse 01 Aug 2025 | | Nikola Jurkovic 11 Aug 2025 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ #pragma once #include #include #include #include "CorsairICueLinkProtocol.h" #include "DeviceGuardManager.h" #include "RGBController.h" class CorsairICueLinkController { public: CorsairICueLinkController(hid_device* dev_handle, const char* path, std::string name); ~CorsairICueLinkController(); std::string GetFirmwareString(); std::string GetNameString(); std::string GetLocationString(); std::string GetSerialString(); std::vector GetEndpoints(); void UpdateLights(RGBColor* colors, std::size_t num_colors); private: hid_device* dev; std::string name; std::string location; std::string serial; std::vector version; DeviceGuardManager* guard_manager_ptr; std::vector endpoints; void GetControllerFirmware(); void GetControllerDevices(); void SetControllerSoftwareMode(); void SetControllerHardwareMode(); std::vector> ProcessMultiChunkPacket(const std::vector& data, size_t max_chunk_size); std::vector SendCommand(std::vector command, std::vector data, std::vector waitForDataType); std::vector Read(std::vector endpoint, std::vector data_type); void Write(std::vector endpoint, std::vector data_type, std::vector data, CORSAIR_ICUE_ENDPOINT_TYPE endpoint_type); };