From dc2b41a0e232f12fab6df01623f531ea3ea06ad4 Mon Sep 17 00:00:00 2001 From: k1-801 Date: Thu, 12 Nov 2020 09:45:44 +0400 Subject: [PATCH] Massive HID detectors update Commit amended to undo change to device list management, still working through that merge request. Want to work this one in first. Changes by Adam Honse --- .../AMDWraithPrismControllerDetect.cpp | 42 +- .../AsusAuraCoreControllerDetect.cpp | 37 +- .../AsusAuraUSBControllerDetect.cpp | 180 ++----- .../CoolerMasterControllerDetect.cpp | 95 +--- .../CorsairLightingNodeControllerDetect.cpp | 67 +-- .../CorsairPeripheralController.cpp | 5 +- .../CorsairPeripheralControllerDetect.cpp | 139 ++--- .../DuckyKeyboardControllerDetect.cpp | 63 +-- .../EKController/EKControllerDetect.cpp | 66 +-- ...GigabyteAorusCPUCoolerControllerDetect.cpp | 66 +-- .../GigabyteRGBFusion2USBControllerDetect.cpp | 62 +-- .../HoltekControllerDetect.cpp | 76 +-- .../HyperXKeyboardControllerDetect.cpp | 126 ++--- .../HyperXMouseControllerDetect.cpp | 77 +-- .../HyperXMousematControllerDetect.cpp | 61 +-- .../LogitechControllerDetect.cpp | 485 +++++++----------- .../RGBController_LogitechG203L.cpp | 2 +- .../MSI3ZoneControllerDetect.cpp | 36 +- .../MSIMysticLightControllerDetect.cpp | 145 +++--- .../NZXTHue2ControllerDetect.cpp | 111 ++-- .../NZXTKrakenControllerDetect.cpp | 60 +-- .../RedragonControllerDetect.cpp | 125 ++--- .../RoccatControllerDetect.cpp | 63 +-- .../SonyDS4ControllerDetect.cpp | 34 +- .../SteelSeriesControllerDetect.cpp | 228 ++++---- .../TecknetControllerDetect.cpp | 61 +-- ...hermaltakePoseidonZRGBControllerDetect.cpp | 40 +- .../ThermaltakeRiingControllerDetect.cpp | 59 +-- Detector.h | 12 +- DeviceDetector.h | 9 + ResourceManager.cpp | 172 ++++++- ResourceManager.h | 34 +- 32 files changed, 945 insertions(+), 1893 deletions(-) diff --git a/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp b/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp index c620b2f1..a4ff3ff6 100644 --- a/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp +++ b/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp @@ -2,8 +2,8 @@ #include "AMDWraithPrismController.h" #include "RGBController.h" #include "RGBController_AMDWraithPrism.h" -#include #include + #define AMD_WRAITH_PRISM_VID 0x2516 #define AMD_WRAITH_PRISM_PID 0x0051 @@ -15,40 +15,16 @@ * * \******************************************************************************************/ -void DetectAMDWraithPrismControllers(std::vector& rgb_controllers) +void DetectAMDWraithPrismControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - info = hid_enumerate(AMD_WRAITH_PRISM_VID, AMD_WRAITH_PRISM_PID); - - //Look for AMD Wraith Prism - while(info) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - if((info->vendor_id == AMD_WRAITH_PRISM_VID) - &&(info->product_id == AMD_WRAITH_PRISM_PID) -#if USE_HID_USAGE - &&(info->interface_number == 1) - &&(info->usage_page == 0xFF00)) -#else - &&(info->interface_number == 1)) -#endif - { - dev = hid_open_path(info->path); - - if( dev ) - { - AMDWraithPrismController* controller = new AMDWraithPrismController(dev, info->path); - - RGBController_AMDWraithPrism* rgb_controller = new RGBController_AMDWraithPrism(controller); - - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; + AMDWraithPrismController* controller = new AMDWraithPrismController(dev, info->path); + RGBController_AMDWraithPrism* rgb_controller = new RGBController_AMDWraithPrism(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } } -REGISTER_DETECTOR("AMD Wraith Prism", DetectAMDWraithPrismControllers); +REGISTER_HID_DETECTOR_IP("AMD Wraith Prism", DetectAMDWraithPrismControllers, AMD_WRAITH_PRISM_VID, AMD_WRAITH_PRISM_PID, 1, 0xFF00); diff --git a/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp b/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp index 0d3522a5..fbb279dc 100644 --- a/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp +++ b/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp @@ -2,19 +2,10 @@ #include "AsusAuraCoreController.h" #include "RGBController.h" #include "RGBController_AsusAuraCore.h" -#include #include #define AURA_CORE_VID 0x0B05 -#define NUM_PIDS 3 -static const unsigned short pid_table[] = - { - 0x1854, - 0x1869, - 0x1866 - }; - /******************************************************************************************\ * * * DetectAuraCoreControllers * @@ -23,26 +14,18 @@ static const unsigned short pid_table[] = * * \******************************************************************************************/ -void DetectAsusAuraCoreControllers(std::vector& rgb_controllers) +void DetectAsusAuraCoreControllers(hid_device_info* info, const std::string&) { - hid_device* dev; - - //Look for Asus ROG Aura Core RGB controller - hid_init(); - - for(int pid_idx = 0; pid_idx < NUM_PIDS; pid_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = hid_open(AURA_CORE_VID, pid_table[pid_idx], 0); - - if( dev ) - { - AuraCoreController* controller = new AuraCoreController(dev); - - RGBController_AuraCore* rgb_controller = new RGBController_AuraCore(controller); - - rgb_controllers.push_back(rgb_controller); - } + AuraCoreController* controller = new AuraCoreController(dev); + RGBController_AuraCore* rgb_controller = new RGBController_AuraCore(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } } -REGISTER_DETECTOR("ASUS Aura Core", DetectAsusAuraCoreControllers); +REGISTER_HID_DETECTOR("ASUS Aura Core", DetectAsusAuraCoreControllers, AURA_CORE_VID, 0x1854); +REGISTER_HID_DETECTOR("ASUS Aura Core", DetectAsusAuraCoreControllers, AURA_CORE_VID, 0x1866); +REGISTER_HID_DETECTOR("ASUS Aura Core", DetectAsusAuraCoreControllers, AURA_CORE_VID, 0x1869); diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 7d47bac3..9194fdc7 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -5,7 +5,6 @@ #include "RGBController.h" #include "RGBController_AsusAuraUSB.h" #include "RGBController_AsusAuraMouse.h" -#include #include #include @@ -21,150 +20,57 @@ #define AURA_ROG_GLADIUS_II_PID 0x1845 #define AURA_ROG_GLADIUS_II_ORIGIN_PID 0x1877 -typedef struct +void DetectAsusAuraUSBAddressable(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned short usb_interface; - const char * name; -} aura_device; + hid_device* dev = hid_open_path(info->path); -#define ADDRESSABLE_NUM_DEVICES (sizeof(addressable_device_list) / sizeof(addressable_device_list[ 0 ])) - -static const aura_device addressable_device_list[] = -{ -/*---------------------------------------------------------------------------------*\ -| ASUS AURA Addressable | -\*---------------------------------------------------------------------------------*/ - { AURA_USB_VID, AURA_TERMINAL_PID, 0, "ASUS ROG AURA Terminal" }, - { AURA_USB_VID, AURA_ADDRESSABLE_1_PID, 0, "ASUS Aura Addressable" }, - { AURA_USB_VID, AURA_ADDRESSABLE_2_PID, 0, "ASUS Aura Addressable" }, - { AURA_USB_VID, AURA_ADDRESSABLE_3_PID, 0, "ASUS Aura Addressable" }, - { AURA_USB_VID, AURA_ADDRESSABLE_4_PID, 0, "ASUS Aura Addressable" }, -}; - -#define MOTHERBOARD_NUM_DEVICES (sizeof(motherboard_device_list) / sizeof(motherboard_device_list[ 0 ])) - -static const aura_device motherboard_device_list[] = -{ -/*---------------------------------------------------------------------------------*\ -| ASUS AURA Motherboard | -\*---------------------------------------------------------------------------------*/ - { AURA_USB_VID, AURA_MOTHERBOARD_1_PID, 0, "ASUS Aura Motherboard" }, - { AURA_USB_VID, AURA_MOTHERBOARD_2_PID, 0, "ASUS Aura Motherboard" }, -}; - -#define MOUSE_NUM_DEVICES (sizeof(mouse_device_list) / sizeof(mouse_device_list[ 0 ])) - -static const aura_device mouse_device_list[] = -{ - { AURA_USB_VID, AURA_ROG_GLADIUS_II_CORE_PID, 0, "ASUS ROG Gladius II Core" }, - { AURA_USB_VID, AURA_ROG_GLADIUS_II_PID, 2, "ASUS ROG Gladius II" }, - { AURA_USB_VID, AURA_ROG_GLADIUS_II_ORIGIN_PID, 2, "ASUS ROG Gladius II Origin" }, -}; - -void DetectAsusAuraUSBControllers(std::vector& rgb_controllers) -{ - hid_device_info* info = NULL; - - hid_init(); - - /*ASUS AURA Addressable*/ - for(unsigned int pid_idx = 0; pid_idx < ADDRESSABLE_NUM_DEVICES; pid_idx++) + if(dev) { - info = hid_enumerate(addressable_device_list[pid_idx].usb_vid, addressable_device_list[pid_idx].usb_pid); + AuraAddressableController* controller = new AuraAddressableController(dev, info->path); + RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} - while(info) +void DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + try { - hid_device* dev = NULL; - - if((info->vendor_id == addressable_device_list[pid_idx].usb_vid) - &&(info->product_id == addressable_device_list[pid_idx].usb_pid)) - { - dev = hid_open_path(info->path); - - if(dev) - { - AuraAddressableController* controller = new AuraAddressableController(dev, info->path); - RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); - rgb_controller->name = addressable_device_list[pid_idx].name; - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; + AuraMainboardController* controller = new AuraMainboardController(dev, info->path); + RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } + catch(std::runtime_error&) + { + // reading the config table failed } } +} - info = NULL; - - /*ASUS AURA Motherboard*/ - for(unsigned int pid_idx = 0; pid_idx < MOTHERBOARD_NUM_DEVICES; pid_idx++) +void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) { - info = hid_enumerate(motherboard_device_list[pid_idx].usb_vid, motherboard_device_list[pid_idx].usb_pid); - - while(info) - { - hid_device* dev = NULL; - - if((info->vendor_id == motherboard_device_list[pid_idx].usb_vid) - &&(info->product_id == motherboard_device_list[pid_idx].usb_pid)) - { - dev = hid_open_path(info->path); - - if(dev) - { - try - { - AuraMainboardController* controller = new AuraMainboardController(dev, info->path); - RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); - rgb_controller->name = motherboard_device_list[pid_idx].name; - rgb_controllers.push_back(rgb_controller); - } - catch(std::runtime_error&) - { - // reading the config table failed - } - } - } - - info = info->next; - } + AuraMouseController* controller = new AuraMouseController(dev, info->path); + RGBController_AuraMouse* rgb_controller = new RGBController_AuraMouse(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } +} - /*ASUS AURA Mouse*/ - for(unsigned int pid_idx = 0; pid_idx < MOUSE_NUM_DEVICES; pid_idx++) - { - info = hid_enumerate(mouse_device_list[pid_idx].usb_vid, mouse_device_list[pid_idx].usb_pid); - - while(info) - { - hid_device* dev = NULL; - - if((info->vendor_id == mouse_device_list[pid_idx].usb_vid) - &&(info->product_id == mouse_device_list[pid_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == mouse_device_list[pid_idx].usb_interface ) - &&(info->usage_page == 0xFF01)) -#else - &&(info->interface_number == mouse_device_list[pid_idx].usb_interface )) -#endif - { - dev = hid_open_path(info->path); - - if(dev) - { - AuraMouseController* controller = new AuraMouseController(dev, info->path); - RGBController_AuraMouse* rgb_controller = new RGBController_AuraMouse(controller); - rgb_controller->name = mouse_device_list[pid_idx].name; - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; - } - } - -} /* DetectAuraUSBControllers() */ - -REGISTER_DETECTOR("ASUS Aura USB", DetectAsusAuraUSBControllers); +REGISTER_HID_DETECTOR ("ASUS ROG AURA Terminal", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_TERMINAL_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_1_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_2_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_3_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_4_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_1_PID); +REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAsusAuraUSBMotherboards, AURA_USB_VID, AURA_MOTHERBOARD_2_PID); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Core", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_CORE_PID, 0, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_PID, 2, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Origin", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_ORIGIN_PID, 2, 0xFF01); diff --git a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp index aea0066a..c6394f6c 100644 --- a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp +++ b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp @@ -12,24 +12,6 @@ #define COOLERMASTER_MP750_MEDIUM_PID 0x0105 #define COOLERMASTER_ARGB_PID 0x1011 -#define COOLERMASTER_NUM_DEVICES (sizeof(cm_pids) / sizeof(cm_pids[ 0 ])) - -struct coolermaster_device -{ - unsigned int product_id; - unsigned short interface; - unsigned int usage_page; - unsigned int usage; - device_type type; -}; - -static const coolermaster_device cm_pids[] = -{ // PID, Interface, Usage_Page, Usage, Device_Type - { COOLERMASTER_MP750_XL_PID, 0x00, 0xFF00, 0x01, DEVICE_TYPE_MOUSEMAT }, //Coolermaster MP750 (Extra Large) - { COOLERMASTER_MP750_MEDIUM_PID, 0x00, 0xFF00, 0x01, DEVICE_TYPE_MOUSEMAT }, //Coolermaster MP750 (Medium) - { COOLERMASTER_ARGB_PID, 0x00, 0xFF00, 0x01, DEVICE_TYPE_LEDSTRIP } //Coolermaster ARGB Controller -}; - /******************************************************************************************\ * * * DetectCoolerMasterControllers * @@ -38,60 +20,33 @@ static const coolermaster_device cm_pids[] = * * \******************************************************************************************/ -void DetectCoolerMasterControllers(std::vector& rgb_controllers) +void DetectCoolerMasterMousemats(hid_device_info* info, const std::string&) { - hid_device_info* info; - - //Look for the passed in cm_pids - hid_init(); - info = hid_enumerate(COOLERMASTER_VID, 0x0); - - while(info) + hid_device* dev = hid_open_path(info->path); + if(dev) { - hid_device* dev = NULL; - device_type dev_type; - - if(info->vendor_id == COOLERMASTER_VID) - { - for(unsigned int cm_pid_idx = 0; cm_pid_idx < COOLERMASTER_NUM_DEVICES; cm_pid_idx++) - { - if((info->product_id == cm_pids[cm_pid_idx].product_id) -#ifdef USE_HID_USAGE - &&(info->usage == cm_pids[cm_pid_idx].usage) //Usage and usage page required to get the correct interface - &&(info->usage_page == cm_pids[cm_pid_idx].usage_page)) -#else - &&(info->interface_number == cm_pids[cm_pid_idx].interface)) -#endif //USE_HID_USAGE - { - dev = hid_open_path(info->path); - dev_type = cm_pids[cm_pid_idx].type; - break; - } - } - } - - if(dev) - { - if (dev_type == DEVICE_TYPE_MOUSEMAT) - { - CMMP750Controller* controller = new CMMP750Controller(dev, info->path); - RGBController_CMMP750Controller* rgb_controller = new RGBController_CMMP750Controller(controller); - rgb_controllers.push_back(rgb_controller); - } - else if(dev_type == DEVICE_TYPE_LEDSTRIP) - { - for(std::size_t i = 0; i < CM_ARGB_HEADER_DATA_SIZE; i++) - { - CMARGBController* controller = new CMARGBController(dev, info->path, i); - RGBController_CMARGBController* rgb_controller = new RGBController_CMARGBController(controller); - rgb_controllers.push_back(rgb_controller); - } - } - } - info = info->next; + CMMP750Controller* controller = new CMMP750Controller(dev, info->path); + RGBController_CMMP750Controller* rgb_controller = new RGBController_CMMP750Controller(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } - hid_free_enumeration(info); +} -} /* DetectCoolerMasterControllers() */ +void DetectCoolerMasterARGB(hid_device_info* info, const std::string&) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + for(std::size_t i = 0; i < CM_ARGB_HEADER_DATA_SIZE; i++) + { + CMARGBController* controller = new CMARGBController(dev, info->path, i); + RGBController_CMARGBController* rgb_controller = new RGBController_CMARGBController(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); + } + } +} -REGISTER_DETECTOR("Cooler Master", DetectCoolerMasterControllers); +REGISTER_HID_DETECTOR_IPU("Cooler Master MP750 XL", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_XL_PID, 0, 0xFF00, 1); +REGISTER_HID_DETECTOR_IPU("Cooler Master MP750 Medium", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_MEDIUM_PID, 0, 0xFF00, 1); +REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB", DetectCoolerMasterARGB, COOLERMASTER_VID, COOLERMASTER_ARGB_PID, 0, 0xFF00, 1); diff --git a/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp b/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp index 81f77c52..0555fd24 100644 --- a/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp +++ b/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp @@ -13,26 +13,6 @@ #define CORSAIR_1000D_OBSIDIAN_PID 0x1D00 #define CORSAIR_SPEC_OMEGA_RGB_PID 0x1D04 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char channel_count; - const char * name; -} corsair_node_device; - -#define CORSAIR_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const corsair_node_device device_list[] = -{ - { CORSAIR_VID, CORSAIR_LIGHTING_NODE_CORE_PID, 1, "Corsair Lighting Node Core" }, - { CORSAIR_VID, CORSAIR_LIGHTING_NODE_PRO_PID, 2, "Corsair Lighting Node Pro" }, - { CORSAIR_VID, CORSAIR_COMMANDER_PRO_PID, 2, "Corsair Commander Pro" }, - { CORSAIR_VID, CORSAIR_LS100_PID, 1, "Corsair LS100 Lighting Kit" }, - { CORSAIR_VID, CORSAIR_1000D_OBSIDIAN_PID, 2, "Corsair 1000D Obsidian" }, - { CORSAIR_VID, CORSAIR_SPEC_OMEGA_RGB_PID, 2, "Corsair SPEC OMEGA RGB" } -}; - /******************************************************************************************\ * * * DetectCorsairLightingNodeControllers * @@ -41,42 +21,21 @@ static const corsair_node_device device_list[] = * * \******************************************************************************************/ -void DetectCorsairLightingNodeControllers(std::vector &rgb_controllers) +void DetectCorsairLightingNodeControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < CORSAIR_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for Corsair Lighting Node Devices - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - CorsairLightingNodeController* controller = new CorsairLightingNodeController(dev, info->path); - - RGBController_CorsairLightingNode* rgb_controller = new RGBController_CorsairLightingNode(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; - } + CorsairLightingNodeController* controller = new CorsairLightingNodeController(dev, info->path); + RGBController_CorsairLightingNode* rgb_controller = new RGBController_CorsairLightingNode(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectCorsairLightingNodeControllers() */ -REGISTER_DETECTOR("Corsair Lighting Node", DetectCorsairLightingNodeControllers); +REGISTER_HID_DETECTOR("Corsair Lighting Node Core", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_LIGHTING_NODE_CORE_PID); // 1 channel +REGISTER_HID_DETECTOR("Corsair Lighting Node Pro", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_LIGHTING_NODE_PRO_PID); // 2 channels +REGISTER_HID_DETECTOR("Corsair Commander Pro", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_COMMANDER_PRO_PID); // 2 channels +REGISTER_HID_DETECTOR("Corsair LS100 Lighting Kit", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_LS100_PID); // 1 channel +REGISTER_HID_DETECTOR("Corsair 1000D Obsidian", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_1000D_OBSIDIAN_PID); // 2 channels +REGISTER_HID_DETECTOR("Corsair SPEC OMEGA RGB", DetectCorsairLightingNodeControllers, CORSAIR_VID, CORSAIR_SPEC_OMEGA_RGB_PID); // 2 channels diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp index 96ae91af..3ea0024e 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp @@ -60,7 +60,10 @@ CorsairPeripheralController::CorsairPeripheralController(hid_device* dev_handle, CorsairPeripheralController::~CorsairPeripheralController() { - + if(dev) + { + hid_close(dev); + } } device_type CorsairPeripheralController::GetDeviceType() diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp index 4d0a94ee..180a495d 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp @@ -2,7 +2,6 @@ #include "CorsairPeripheralController.h" #include "RGBController.h" #include "RGBController_CorsairPeripheral.h" -#include #include /*-----------------------------------------------------*\ @@ -60,56 +59,6 @@ \*-----------------------------------------------------*/ #define CORSAIR_ST100_PID 0x0A34 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - const char * name; -} corsair_node_device; - -#define CORSAIR_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const corsair_node_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*-----------------------------------------------------------------------------------------------------*/ -// { CORSAIR_VID, CORSAIR_K55_RGB_PID, 1, "Corsair K55 RGB" }, //Not per-key, disabled for now - { CORSAIR_VID, CORSAIR_K65_RGB_PID, 1, "Corsair K65 RGB" }, - { CORSAIR_VID, CORSAIR_K65_LUX_RGB_PID, 1, "Corsair K65 LUX RGB" }, - { CORSAIR_VID, CORSAIR_K65_RGB_RAPIDFIRE_PID, 1, "Corsair K65 RGB RAPIDFIRE" }, - { CORSAIR_VID, CORSAIR_K68_RGB, 1, "Corsair K68 RGB" }, - { CORSAIR_VID, CORSAIR_K70_RGB_PID, 1, "Corsair K70 RGB" }, - { CORSAIR_VID, CORSAIR_K70_LUX_RGB_PID, 1, "Corsair K70 LUX RGB" }, - { CORSAIR_VID, CORSAIR_K70_RGB_RAPIDFIRE_PID, 1, "Corsair K70 RGB RAPIDFIRE" }, - { CORSAIR_VID, CORSAIR_K70_RGB_MK2_PID, 1, "Corsair K70 RGB MK.2" }, - { CORSAIR_VID, CORSAIR_K70_RGB_MK2_SE_PID, 1, "Corsair K70 RGB MK.2 SE" }, - { CORSAIR_VID, CORSAIR_K70_RGB_MK2_LP_PID, 1, "Corsair K70 RGB MK.2 Low Profile" }, - { CORSAIR_VID, CORSAIR_K95_RGB_PID, 1, "Corsair K95 RGB" }, - { CORSAIR_VID, CORSAIR_K95_PLATINUM_PID, 1, "Corsair K95 RGB PLATINUM" }, - { CORSAIR_VID, CORSAIR_STRAFE_PID, 1, "Corsair Strafe" }, - { CORSAIR_VID, CORSAIR_STRAFE_MK2_PID, 1, "Corsair Strafe MK.2" }, - /*-----------------------------------------------------------------------------------------------------*\ - | Mice | - \*-----------------------------------------------------------------------------------------------------*/ - { CORSAIR_VID, CORSAIR_GLAIVE_RGB_PRO_PID, 1, "Corsair Glaive RGB PRO" }, - { CORSAIR_VID, CORSAIR_HARPOON_RGB_PID, 1, "Corsair Harpoon RGB" }, - { CORSAIR_VID, CORSAIR_HARPOON_RGB_PRO_PID, 1, "Corsair Harpoon RGB PRO" }, - { CORSAIR_VID, CORSAIR_M65_PRO_PID, 1, "Corsair M65 PRO" }, - { CORSAIR_VID, CORSAIR_M65_RGB_ELITE_PID, 1, "Corsair M65 RGB Elite" }, - { CORSAIR_VID, CORSAIR_SCIMITAR_PRO_RGB_PID, 1, "Corsair Scimitar PRO RGB" }, - { CORSAIR_VID, CORSAIR_SABRE_RGB_PID, 1, "Corsair Sabre RGB" }, - /*-----------------------------------------------------------------------------------------------------*\ - | Mousemats | - \*-----------------------------------------------------------------------------------------------------*/ - { CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0, "Corsair MM800 RGB Polaris" }, - /*-----------------------------------------------------------------------------------------------------*\ - | Headset Stands | - \*-----------------------------------------------------------------------------------------------------*/ - { CORSAIR_VID, CORSAIR_ST100_PID, 0, "Corsair ST100 RGB" } -}; - /******************************************************************************************\ * * * DetectCorsairPeripheralControllers * @@ -118,50 +67,58 @@ static const corsair_node_device device_list[] = * * \******************************************************************************************/ -void DetectCorsairPeripheralControllers(std::vector& rgb_controllers) +void DetectCorsairPeripheralControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < CORSAIR_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for Corsair RGB Peripheral - while(info) + CorsairPeripheralController* controller = new CorsairPeripheralController(dev, info->path); + if(controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN) { - if((info->vendor_id == device_list[device_idx].usb_vid) -#ifdef USE_HID_USAGE - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->usage_page == 0xFFC2)) -#else - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - dev = hid_open_path(info->path); - - if( dev ) - { - CorsairPeripheralController* controller = new CorsairPeripheralController(dev, info->path); - - if(controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN) - { - RGBController_CorsairPeripheral* rgb_controller = new RGBController_CorsairPeripheral(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - } - info = info->next; + RGBController_CorsairPeripheral* rgb_controller = new RGBController_CorsairPeripheral(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } + else + { + delete controller; } } } /* DetectCorsairPeripheralControllers() */ -REGISTER_DETECTOR("Corsair Peripheral", DetectCorsairPeripheralControllers); +/*-----------------------------------------------------------------------------------------------------*\ +| Keyboards | +\*-----------------------------------------------------------------------------------------------------*/ +//REGISTER_HID_DETECTOR_IP("Corsair K55 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K55_RGB_PID, 1, 0xFFC2); // Not per-key, disabled for now +REGISTER_HID_DETECTOR_IP("Corsair K65 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K65_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K65 LUX RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K65_LUX_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K65 RGB RAPIDFIRE", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K65_RGB_RAPIDFIRE_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K68 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K68_RGB, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 LUX RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_LUX_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 RGB RAPIDFIRE", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_RGB_RAPIDFIRE_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 RGB MK.2", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_RGB_MK2_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 RGB MK.2 SE", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_RGB_MK2_SE_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K70 RGB MK.2 Low Profile", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K70_RGB_MK2_LP_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K95 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K95_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair K95 RGB PLATINUM", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K95_PLATINUM_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Strafe", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_STRAFE_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Strafe MK.2", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_STRAFE_MK2_PID, 1, 0xFFC2); +/*-----------------------------------------------------------------------------------------------------*\ +| Mice | +\*-----------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IP("Corsair Glaive RGB PRO", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_GLAIVE_RGB_PRO_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Harpoon RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_HARPOON_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Harpoon RGB PRO", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_HARPOON_RGB_PRO_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair M65 PRO", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_M65_PRO_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair M65 RGB Elite" , DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_M65_RGB_ELITE_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Scimitar PRO RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SCIMITAR_PRO_RGB_PID, 1, 0xFFC2); +REGISTER_HID_DETECTOR_IP("Corsair Sabre RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SABRE_RGB_PID, 1, 0xFFC2); +/*-----------------------------------------------------------------------------------------------------*\ +| Mousemats | +\*-----------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IP("Corsair MM800 RGB Polaris", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0, 0xFFC2); +/*-----------------------------------------------------------------------------------------------------*\ +| Headset Stands | +\*-----------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IP("Corsair ST100 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_ST100_PID, 0, 0xFFC2); diff --git a/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp b/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp index 16ea3aae..28d4be99 100644 --- a/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp +++ b/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp @@ -2,7 +2,6 @@ #include "DuckyKeyboardController.h" #include "RGBController.h" #include "RGBController_DuckyKeyboard.h" -#include #include /*-----------------------------------------------------*\ @@ -16,25 +15,6 @@ #define DUCKY_SHINE_7_ONE_2_RGB_PID 0x0348 #define DUCKY_ONE_2_RGB_TKL_PID 0x0356 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - const char * name; -} ducky_device; - -#define DUCKY_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const ducky_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*-----------------------------------------------------------------------------------------------------*/ - { DUCKY_VID, DUCKY_SHINE_7_ONE_2_RGB_PID, 1, "Ducky Shine 7/Ducky One 2 RGB" }, - { DUCKY_VID, DUCKY_ONE_2_RGB_TKL_PID, 1, "Ducky One 2 RGB TKL" }, -}; - /******************************************************************************************\ * * * DetectDuckyKeyboardControllers * @@ -43,42 +23,17 @@ static const ducky_device device_list[] = * * \******************************************************************************************/ -void DetectDuckyKeyboardControllers(std::vector& rgb_controllers) +void DetectDuckyKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < DUCKY_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for Ducky RGB Peripheral - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->interface_number == device_list[device_idx].usb_interface)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - DuckyKeyboardController* controller = new DuckyKeyboardController(dev, info->path); - - RGBController_DuckyKeyboard* rgb_controller = new RGBController_DuckyKeyboard(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; - } + DuckyKeyboardController* controller = new DuckyKeyboardController(dev, info->path); + RGBController_DuckyKeyboard* rgb_controller = new RGBController_DuckyKeyboard(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectDuckyKeyboardControllers() */ -REGISTER_DETECTOR("Ducky Keyboard", DetectDuckyKeyboardControllers); +REGISTER_HID_DETECTOR_I("Ducky Shine 7/Ducky One 2 RGB", DetectDuckyKeyboardControllers, DUCKY_VID, DUCKY_SHINE_7_ONE_2_RGB_PID, 1); +REGISTER_HID_DETECTOR_I("Ducky One 2 RGB TKL", DetectDuckyKeyboardControllers, DUCKY_VID, DUCKY_ONE_2_RGB_TKL_PID, 1); diff --git a/Controllers/EKController/EKControllerDetect.cpp b/Controllers/EKController/EKControllerDetect.cpp index 65e11b7b..ff262156 100644 --- a/Controllers/EKController/EKControllerDetect.cpp +++ b/Controllers/EKController/EKControllerDetect.cpp @@ -4,25 +4,8 @@ #include "RGBController_EKController.h" #include -#define EK_VID 0x0483 - -#define EK_LOOP_CONNECT_PID 0x5750 - -#define EK_NUM_DEVICES (sizeof(ek_pids) / sizeof(ek_pids[ 0 ])) - -struct ek_device -{ - unsigned int product_id; - unsigned short interface; - unsigned int usage_page; - unsigned int usage; - device_type type; -}; - -static const ek_device ek_pids[] = -{ // PID, Interface, Usage_Page, Usage, Device_Type - { EK_LOOP_CONNECT_PID, 0x00, 0xFFA0, 0x01, DEVICE_TYPE_LEDSTRIP } //EK Loop Connect -}; +#define EK_VID 0x0483 +#define EK_LOOP_CONNECT 0x5750 /******************************************************************************************\ * * @@ -32,44 +15,17 @@ static const ek_device ek_pids[] = * * \******************************************************************************************/ -void DetectEKControllers(std::vector& rgb_controllers) +void DetectEKControllers(hid_device_info* info, const std::string&) { - hid_device_info* info = NULL; - - //Look for the passed in ek_pids - hid_init(); - info = hid_enumerate(0, 0x0); - - while(info) + hid_device* dev = hid_open_path(info->path); + if(dev) { - hid_device* dev = NULL; - if(info->vendor_id == EK_VID) - { - for(unsigned int ek_pid_idx = 0; ek_pid_idx < EK_NUM_DEVICES; ek_pid_idx++) - { - if((info->product_id == ek_pids[ek_pid_idx].product_id) -#ifdef USE_HID_USAGE - &&(info->usage == ek_pids[ek_pid_idx].usage) //Usage and usage page required to get the correct interface - &&(info->usage_page == ek_pids[ek_pid_idx].usage_page)) -#else - &&(info->interface_number == ek_pids[ek_pid_idx].interface)) -#endif //USE_HID_USAGE - { - dev = hid_open_path(info->path); - break; - } - } - } - - if(dev) - { - EKController* controller = new EKController(dev, info->path); - RGBController_EKController* rgb_controller = new RGBController_EKController(controller); - rgb_controllers.push_back(rgb_controller); - } - info = info->next; + EKController* controller = new EKController(dev, info->path); + RGBController_EKController* rgb_controller = new RGBController_EKController(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } - hid_free_enumeration(info); + info = info->next; } /* DetectEKControllers() */ -REGISTER_DETECTOR("EK", DetectEKControllers); +REGISTER_HID_DETECTOR_IPU("EK Loop Connect", DetectEKControllers, EK_VID, EK_LOOP_CONNECT, 0, 0xFFA0, 1); diff --git a/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp b/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp index 454a01e7..55e6314a 100644 --- a/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp +++ b/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp @@ -2,7 +2,6 @@ #include "RGBController.h" #include "ATC800Controller.h" #include "RGBController_AorusATC800.h" -#include #include /*-----------------------------------------------------*\ @@ -15,22 +14,6 @@ \*-----------------------------------------------------*/ #define ATC_800_CONTROLLER_PID 0x7A42 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - char usb_interface; - device_type type; - const char * name; -} device; - -#define NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const device device_list[] = -{ - { HOLTEK_VID, ATC_800_CONTROLLER_PID, 0, DEVICE_TYPE_KEYBOARD, "Aorus ATC800 CPU Cooler" }, -}; - /******************************************************************************************\ * * * DetectAorusCPUCoolerControllers * @@ -39,49 +22,16 @@ static const device device_list[] = * * \******************************************************************************************/ -void DetectAorusCPUCoolerControllers(std::vector& rgb_controllers) +void DetectGigabyteAorusCPUCoolerControllers(hid_device_info* info, const std::string& name) { - hid_init(); - - for(unsigned int device_idx = 0; device_idx < NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if(dev) { - hid_device_info* info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF01) - &&(info->usage == 1)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - switch(device_list[device_idx].usb_pid) - { - case ATC_800_CONTROLLER_PID: - { - ATC800Controller* controller = new ATC800Controller(dev, info->path); - - RGBController_AorusATC800* rgb_controller = new RGBController_AorusATC800(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - } - } - } - info = info->next; - } - hid_free_enumeration(info); + ATC800Controller* controller = new ATC800Controller(dev, info->path); + RGBController_AorusATC800* rgb_controller = new RGBController_AorusATC800(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } -REGISTER_DETECTOR("Gigabyte Aorus CPU Coolers", DetectAorusCPUCoolerControllers); +REGISTER_HID_DETECTOR_IPU("Aorus CPU Coolers", DetectGigabyteAorusCPUCoolerControllers, HOLTEK_VID, ATC_800_CONTROLLER_PID, 0, 0xFF01, 1); diff --git a/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp b/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp index 64a612a3..62ce6094 100644 --- a/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp @@ -7,13 +7,6 @@ #define IT8297_IFC 0 #define IT8297_U 0xCC #define IT8297_UPG 0xFF89 -#define COUNT_RGBFUSION2_PIDS (sizeof(RGBFusion2_pids) / sizeof(RGBFusion2_pids[ 0 ])) - -static const unsigned short RGBFusion2_pids[] = -{ - 0x8297, //PID for the ITE 8595 found on the X570 - 0x5702 //PID for the ITE 8595 found on the B550 -}; /******************************************************************************************\ * * @@ -23,51 +16,18 @@ static const unsigned short RGBFusion2_pids[] = * * \******************************************************************************************/ -void DetectGigabyteRGBFusion2USBControllers(std::vector &rgb_controllers) +void DetectGigabyteRGBFusion2USBControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_device* dev; - DMIInfo MB_info; - unsigned short tmpPID; - - if (hid_init() < 0) + DMIInfo MB_info; + hid_device* dev = hid_open_path(info->path); + if (dev) { - return; + RGBFusion2USBController * controller = new RGBFusion2USBController(dev, info->path, MB_info.getMainboard()); + RGBController_RGBFusion2USB * rgb_controller = new RGBController_RGBFusion2USB(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } +} /* DetectRGBFusion2USBControllers() */ - for(unsigned int dev_idx = 0; dev_idx < COUNT_RGBFUSION2_PIDS; dev_idx++) - { - dev = NULL; - - tmpPID = RGBFusion2_pids[dev_idx]; - info = hid_enumerate(IT8297_VID, tmpPID); - - while(info) - { - if((info->vendor_id == IT8297_VID) -#ifdef USE_HID_USAGE - &&(info->product_id == tmpPID) - &&(info->usage == IT8297_U) //Usage and usage page required to get the correct interface - &&(info->usage_page == IT8297_UPG)) -#else - &&(info->interface_number == IT8297_IFC) //Interface is only valid on Windows where there is > 1 interface - &&(info->product_id == tmpPID)) -#endif - { - dev = hid_open_path(info->path); - - if (dev) - { - RGBFusion2USBController * controller = new RGBFusion2USBController(dev, info->path, MB_info.getMainboard()); - RGBController_RGBFusion2USB * rgb_controller = new RGBController_RGBFusion2USB(controller); - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; - } - } - - hid_free_enumeration(info); -} /* DetectGigabyteRGBFusion2USBControllers() */ - -REGISTER_DETECTOR("Gigabyte RGB Fusion 2 USB", DetectGigabyteRGBFusion2USBControllers); +REGISTER_HID_DETECTOR_IPU("Gigabyte RGB Fusion 2 USB", DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x8297, IT8297_IFC, IT8297_UPG, IT8297_U); +REGISTER_HID_DETECTOR_IPU("Gigabyte RGB Fusion 2 USB", DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x5702, IT8297_IFC, IT8297_UPG, IT8297_U); diff --git a/Controllers/HoltekController/HoltekControllerDetect.cpp b/Controllers/HoltekController/HoltekControllerDetect.cpp index c85cabd7..bc9e780b 100644 --- a/Controllers/HoltekController/HoltekControllerDetect.cpp +++ b/Controllers/HoltekController/HoltekControllerDetect.cpp @@ -14,76 +14,16 @@ \*-----------------------------------------------------*/ #define HOLTEK_A070_PID 0xA070 -typedef struct +void DetectHoltekControllers(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - device_type type; - const char * name; -} holtek_device; - -#define HOLTEK_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const holtek_device device_list[] = -{ - /*-------------------------------------------------------------------------------------------------------------*\ - | Mice | - \*-------------------------------------------------------------------------------------------------------------*/ - { HOLTEK_VID, HOLTEK_A070_PID, 1, DEVICE_TYPE_MOUSE, "Holtek USB Gaming Mouse" }, -}; - -void DetectHoltekControllers(std::vector& rgb_controllers) -{ - hid_init(); - - for(unsigned int device_idx = 0; device_idx < HOLTEK_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if(dev) { - switch(device_list[device_idx].type) - { - case DEVICE_TYPE_MOUSE: - { - hid_device_info* info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF00) - &&(info->usage == 2)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - switch(device_list[device_idx].usb_pid) - { - case HOLTEK_A070_PID: - { - HoltekA070Controller* controller = new HoltekA070Controller(dev, info->path); - - RGBController_HoltekA070* rgb_controller = new RGBController_HoltekA070(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - } - } - } - info = info->next; - } - hid_free_enumeration(info); - } - break; - } - + HoltekA070Controller* controller = new HoltekA070Controller(dev, info->path); + RGBController_HoltekA070* rgb_controller = new RGBController_HoltekA070(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectHoltekControllers() */ -REGISTER_DETECTOR("Holtek", DetectHoltekControllers); +REGISTER_HID_DETECTOR_IPU("Holtek USB Gaming Mouse", DetectHoltekControllers, HOLTEK_VID, HOLTEK_A070_PID, 1, 0xFF00, 2); diff --git a/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp b/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp index e6facf93..ecb778f5 100644 --- a/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp +++ b/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp @@ -4,7 +4,6 @@ #include "RGBController.h" #include "RGBController_HyperXAlloyOrigins.h" #include "RGBController_HyperXKeyboard.h" -#include #include /*-----------------------------------------------------*\ @@ -16,102 +15,37 @@ #define HYPERX_ALLOY_ORIGINS_PID 0x16E5 #define HYPERX_ALLOY_ORIGINS_CORE_PID 0x16E6 -typedef struct +void DetectHyperXKeyboards(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - const char * name; -} hyperx_device; - -#define HYPERX_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const hyperx_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*-----------------------------------------------------------------------------------------------------*/ - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ELITE_PID, 2, "HyperX Alloy Elite RGB" }, - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_FPS_RGB_PID, 2, "HyperX Alloy FPS RGB" }, -#ifdef _WIN32 - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_PID, 3, "HyperX Alloy Origins" }, - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_CORE_PID, 3, "HyperX Alloy Origins Core" }, -#else - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_PID, 0, "HyperX Alloy Origins" }, - { HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_CORE_PID, 0, "HyperX Alloy Origins Core" }, -#endif -}; - -/******************************************************************************************\ -* * -* DetectHyperXKeyboardControllers * -* * -* Tests the USB address to see if a HyperX Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectHyperXKeyboardControllers(std::vector& rgb_controllers) -{ - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < HYPERX_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for HyperX RGB Peripheral - while(info) - { - if((device_list[device_idx].usb_pid != HYPERX_ALLOY_ORIGINS_PID) - &&(info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF01)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - dev = hid_open_path(info->path); - - if( dev ) - { - HyperXKeyboardController* controller = new HyperXKeyboardController(dev, info->path); - - RGBController_HyperXKeyboard* rgb_controller = new RGBController_HyperXKeyboard(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - - if((device_list[device_idx].usb_pid == HYPERX_ALLOY_ORIGINS_PID) - &&(info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->interface_number == device_list[device_idx].usb_interface)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - HyperXAlloyOriginsController* controller = new HyperXAlloyOriginsController(dev, info->path); - - RGBController_HyperXAlloyOrigins* rgb_controller = new RGBController_HyperXAlloyOrigins(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; - } + HyperXKeyboardController* controller = new HyperXKeyboardController(dev, info->path); + RGBController_HyperXKeyboard* rgb_controller = new RGBController_HyperXKeyboard(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectHyperXKeyboardControllers() */ +} -REGISTER_DETECTOR("HyperX Keyboard", DetectHyperXKeyboardControllers); +void DetectHyperXAlloyOrigins(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if( dev ) + { + HyperXAlloyOriginsController* controller = new HyperXAlloyOriginsController(dev, info->path); + RGBController_HyperXAlloyOrigins* rgb_controller = new RGBController_HyperXAlloyOrigins(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +REGISTER_HID_DETECTOR_IP("HyperX Alloy Elite RGB", DetectHyperXKeyboards, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ELITE_PID, 2, 0xFF01); +REGISTER_HID_DETECTOR_IP("HyperX Alloy FPS RGB", DetectHyperXKeyboards, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_FPS_RGB_PID, 2, 0xFF01); + +#ifdef _WIN32 +REGISTER_HID_DETECTOR_IP("HyperX Alloy Origins Core", DetectHyperXKeyboards, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_CORE_PID, 3, 0xFF01); +REGISTER_HID_DETECTOR_IP("HyperX Alloy Origins", DetectHyperXAlloyOrigins, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_PID, 3, 0xFF01); +#else +REGISTER_HID_DETECTOR_IP("HyperX Alloy Origins Core", DetectHyperXKeyboards, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_CORE_PID, 0, 0xFF01); +REGISTER_HID_DETECTOR_IP("HyperX Alloy Origins", DetectHyperXAlloyOrigins, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ORIGINS_PID, 0, 0xFF01); +#endif \ No newline at end of file diff --git a/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp index f4e52e4a..f975cb71 100644 --- a/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp +++ b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp @@ -2,83 +2,24 @@ #include "HyperXPulsefireSurgeController.h" #include "RGBController.h" #include "RGBController_HyperXPulsefireSurge.h" -#include #include /*-----------------------------------------------------*\ -| HyperX keyboard vendor IDs | +| HyperX mouse vendor IDs | \*-----------------------------------------------------*/ #define HYPERX_VID 0x0951 #define HYPERX_PULSEFIRE_SURGE_PID 0x16D3 -typedef struct +void DetectHyperXMouseControllers(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - const char * name; -} hyperx_device; - -#define HYPERX_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const hyperx_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | Mice | - \*-----------------------------------------------------------------------------------------------------*/ - { HYPERX_VID, HYPERX_PULSEFIRE_SURGE_PID, 1, "HyperX Pulsefire Surge" }, -}; - -/******************************************************************************************\ -* * -* DetectHyperXMouseControllers * -* * -* Tests the USB address to see if a HyperX Mouse controller exists there. * -* * -\******************************************************************************************/ - -void DetectHyperXMouseControllers(std::vector& rgb_controllers) -{ - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < HYPERX_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for HyperX RGB Peripheral - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) - #ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF01)) - #else - &&(info->interface_number == device_list[device_idx].usb_interface)) - #endif - { - dev = hid_open_path(info->path); - - if( dev ) - { - HyperXPulsefireSurgeController* controller = new HyperXPulsefireSurgeController(dev, info->path); - - RGBController_HyperXPulsefireSurge* rgb_controller = new RGBController_HyperXPulsefireSurge(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; - } + HyperXPulsefireSurgeController* controller = new HyperXPulsefireSurgeController(dev, info->path); + RGBController_HyperXPulsefireSurge* rgb_controller = new RGBController_HyperXPulsefireSurge(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectHyperXMouseControllers() */ -REGISTER_DETECTOR("HyperX Mouse", DetectHyperXMouseControllers); +REGISTER_HID_DETECTOR_IP("HyperX Pulsefire Surge", DetectHyperXMouseControllers, HYPERX_VID, HYPERX_PULSEFIRE_SURGE_PID, 1, 0xFF01); diff --git a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp index 371447fd..05c2a3b3 100644 --- a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp +++ b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp @@ -11,24 +11,6 @@ #define HYPERX_VID 0x0951 #define HYPERX_FURY_ULTRA_PID 0x1705 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - const char * name; -} hyperx_device; - -#define HYPERX_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const hyperx_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | Mousemats | - \*-----------------------------------------------------------------------------------------------------*/ - { HYPERX_VID, HYPERX_FURY_ULTRA_PID, 0, "HyperX Fury Ultra" }, -}; - /******************************************************************************************\ * * * DetectHyperXMousematControllers * @@ -37,43 +19,16 @@ static const hyperx_device device_list[] = * * \******************************************************************************************/ -void DetectHyperXMousematControllers(std::vector& rgb_controllers) +void DetectHyperXMousematControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < HYPERX_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for HyperX RGB Peripheral - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->interface_number == device_list[device_idx].usb_interface)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - HyperXMousematController* controller = new HyperXMousematController(dev, info->path); - - RGBController_HyperXMousemat* rgb_controller = new RGBController_HyperXMousemat(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; - } + HyperXMousematController* controller = new HyperXMousematController(dev, info->path); + RGBController_HyperXMousemat* rgb_controller = new RGBController_HyperXMousemat(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectHyperXMousematControllers() */ -REGISTER_DETECTOR("HyperX Mousemat", DetectHyperXMousematControllers); +REGISTER_HID_DETECTOR_I("HyperX Fury Ultra", DetectHyperXMousematControllers, HYPERX_VID, HYPERX_FURY_ULTRA_PID, 0); diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index c5822829..89946dde 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -50,316 +50,183 @@ \*-----------------------------------------------------*/ #define LOGITECH_G_LIGHTSPEED_POWERPLAY_PID 0xC53A -typedef struct +void DetectLogitechKeyboardG810(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - device_type type; - const char * name; -} logitech_device; - -#define LOGITECH_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const logitech_device device_list[] = -{ - /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*-------------------------------------------------------------------------------------------------------------------------------------------------*/ - { LOGITECH_VID, LOGITECH_G213_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G213" }, - { LOGITECH_VID, LOGITECH_G512_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G512" }, - { LOGITECH_VID, LOGITECH_G512_RGB_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G512 RGB" }, - { LOGITECH_VID, LOGITECH_G610_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G610 Orion" }, - { LOGITECH_VID, LOGITECH_G810_1_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G810 Orion Spectrum" }, - { LOGITECH_VID, LOGITECH_G810_2_PID, 1, DEVICE_TYPE_KEYBOARD, "Logitech G810 Orion Spectrum" }, - /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Mice | - \*-------------------------------------------------------------------------------------------------------------------------------------------------*/ - { LOGITECH_VID, LOGITECH_G203_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G203 Prodigy" }, - { LOGITECH_VID, LOGITECH_G203L_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G203 Lightsync" }, - { LOGITECH_VID, LOGITECH_G403_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G403 Prodigy" }, - { LOGITECH_VID, LOGITECH_G403H_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G403 Hero" }, - { LOGITECH_VID, LOGITECH_G502_PS_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G502 Proteus Spectrum" }, - { LOGITECH_VID, LOGITECH_G502H_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G502 Hero" }, - { LOGITECH_VID, LOGITECH_GPRO_WIRED_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G Pro Gaming Mouse" }, - { LOGITECH_VID, LOGITECH_GPRO_HERO_WIRED_PID, 1, DEVICE_TYPE_MOUSE, "Logitech G Pro (HERO) Gaming Mouse" }, - { LOGITECH_VID, LOGITECH_G_LIGHTSPEED_WIRELESS_PID, 2, DEVICE_TYPE_MOUSE, "Logitech G Lightspeed Wireless Gaming Mouse" }, - { LOGITECH_VID, LOGITECH_GPRO_WIRELESS_PID, 2, DEVICE_TYPE_MOUSE, "Logitech G Pro Wireless Gaming Mouse (Wired)" }, - /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Mousemats | - \*-------------------------------------------------------------------------------------------------------------------------------------------------*/ - { LOGITECH_VID, LOGITECH_G_LIGHTSPEED_POWERPLAY_PID, 2, DEVICE_TYPE_MOUSEMAT, "Logitech G Powerplay Mousepad with Lightspeed" }, -}; - -/******************************************************************************************\ -* * -* DetectLogitechControllers * -* * -* Tests the USB address to see if a Logitech RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectLogitechControllers(std::vector& rgb_controllers) -{ - hid_init(); - - for(unsigned int device_idx = 0; device_idx < LOGITECH_NUM_DEVICES; device_idx++) + /*-------------------------------------------------------------------------------------------------*\ + | Logitech keyboards use two different usages, one for 20-byte packets and one for 64-byte packets | + | Usage 0x0602 for 20 byte, usage 0x0604 for 64 byte, both are on usage page 0xFF43 | + \*-------------------------------------------------------------------------------------------------*/ +#ifdef _WIN32 + hid_device* dev_usage_0x0602 = nullptr; + hid_device* dev_usage_0x0604 = nullptr; + hid_device_info* info_temp = info; + while(info_temp) + { + if(info_temp->vendor_id == info->vendor_id // constant LOGITECH_VID + && info_temp->product_id == info->product_id // NON-constant + && info_temp->interface_number == info->interface_number // constant 1 + && info_temp->usage_page == info->usage_page) // constant 0xFF43 + { + if(info_temp->usage == 0x0602) + { + dev_usage_0x0602 = hid_open_path(info_temp->path); + } + else if(info_temp->usage == 0x0604) + { + dev_usage_0x0604 = hid_open_path(info_temp->path); + } + } + if(dev_usage_0x0602 && dev_usage_0x0604) + { + break; + } + info_temp = info_temp->next; + } + if(dev_usage_0x0602 && dev_usage_0x0604) + { + LogitechG810Controller* controller = new LogitechG810Controller(dev_usage_0x0602, dev_usage_0x0604); + RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } + else + { + // Not all of them could be opened, do some cleanup + if(dev_usage_0x0602) + { + hid_close(dev_usage_0x0602); + } + if(dev_usage_0x0604) + { + hid_close(dev_usage_0x0604); + } + } +#else + hid_device* dev = hid_open_path(info->path); + if(dev) { - switch(device_list[device_idx].type) - { - /*-------------------------------------------------------------------------------------------------*\ - | Logitech keyboards use two different usages, one for 20-byte packets and one for 64-byte packets | - | Usage 0x0602 for 20 byte, usage 0x0604 for 64 byte, both are on usage page 0xFF43 | - \*-------------------------------------------------------------------------------------------------*/ - case DEVICE_TYPE_KEYBOARD: - { - hid_device_info* info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF43) - &&(info->usage == 0x0602)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - hid_device* dev_usage_0x0602 = hid_open_path(info->path); - - if(dev_usage_0x0602) - { -#ifdef USE_HID_USAGE - switch(device_list[device_idx].usb_pid) - { - case LOGITECH_G213_PID: - { - LogitechG213Controller* controller = new LogitechG213Controller(dev_usage_0x0602); - - RGBController_LogitechG213* rgb_controller = new RGBController_LogitechG213(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_G512_PID: - case LOGITECH_G512_RGB_PID: - case LOGITECH_G610_PID: - case LOGITECH_G810_1_PID: - case LOGITECH_G810_2_PID: - { - hid_device_info* tmp_info_0x0604 = info; - - while(tmp_info_0x0604) - { - if((tmp_info_0x0604->vendor_id == device_list[device_idx].usb_vid) - &&(tmp_info_0x0604->product_id == device_list[device_idx].usb_pid) - &&(tmp_info_0x0604->interface_number == device_list[device_idx].usb_interface) - &&(tmp_info_0x0604->usage_page == 0xFF43) - &&(tmp_info_0x0604->usage == 0x0604)) - { - hid_device* dev_usage_0x0604 = hid_open_path(tmp_info_0x0604->path); - - if(dev_usage_0x0604) - { - LogitechG810Controller* controller = new LogitechG810Controller(dev_usage_0x0602, dev_usage_0x0604); - - RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - } - tmp_info_0x0604 = tmp_info_0x0604->next; - } - } - break; - } -#else - switch(device_list[device_idx].usb_pid) - { - case LOGITECH_G213_PID: - { - LogitechG213Controller* controller = new LogitechG213Controller(dev_usage_0x0602); - - RGBController_LogitechG213* rgb_controller = new RGBController_LogitechG213(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_G512_PID: - case LOGITECH_G512_RGB_PID: - case LOGITECH_G610_PID: - case LOGITECH_G810_1_PID: - case LOGITECH_G810_2_PID: - { - LogitechG810Controller* controller = new LogitechG810Controller(dev_usage_0x0602, dev_usage_0x0602); - - RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - } -#endif - } - } - info = info->next; - } - hid_free_enumeration(info); - } - break; - - /*-------------------------------------------------------------------------------------------------*\ - | Logitech mice use a single usage on page 0xFF00 | - \*-------------------------------------------------------------------------------------------------*/ - case DEVICE_TYPE_MOUSE: - { - hid_device_info* info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF00) - &&(info->usage == 2)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - switch(device_list[device_idx].usb_pid) - { - case LOGITECH_G203_PID: - case LOGITECH_GPRO_WIRED_PID: - case LOGITECH_GPRO_HERO_WIRED_PID: - { - LogitechG203Controller* controller = new LogitechG203Controller(dev, info->path); - - RGBController_LogitechG203* rgb_controller = new RGBController_LogitechG203(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_G203L_PID: - { - LogitechG203LController* controller = new LogitechG203LController(dev, info->path); - - RGBController_LogitechG203L* rgb_controller = new RGBController_LogitechG203L(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_G403_PID: - case LOGITECH_G403H_PID: - { - LogitechG403Controller* controller = new LogitechG403Controller(dev, info->path); - - RGBController_LogitechG403* rgb_controller = new RGBController_LogitechG403(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_G502_PS_PID: - case LOGITECH_G502H_PID: - { - LogitechG502PSController* controller = new LogitechG502PSController(dev, info->path); - - RGBController_LogitechG502PS* rgb_controller = new RGBController_LogitechG502PS(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case LOGITECH_GPRO_WIRELESS_PID: - case LOGITECH_G_LIGHTSPEED_WIRELESS_PID: - { - LogitechGProWirelessController* controller = new LogitechGProWirelessController(dev, info->path); - - RGBController_LogitechGProWireless* rgb_controller = new RGBController_LogitechGProWireless(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - } - } - } - info = info->next; - } - hid_free_enumeration(info); - } - break; - case DEVICE_TYPE_MOUSEMAT: - { - hid_device_info* info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == 0xFF00) - &&(info->usage == 2)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - hid_device* dev = hid_open_path(info->path); - - if(dev) - { - switch(device_list[device_idx].usb_pid) - { - case LOGITECH_G_LIGHTSPEED_POWERPLAY_PID: - { - //Add mouse - LogitechGProWirelessController* mouse_controller = new LogitechGProWirelessController(dev, info->path); - - RGBController_LogitechGProWireless* mouse_rgb_controller = new RGBController_LogitechGProWireless(mouse_controller); - - mouse_rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(mouse_rgb_controller); - - //Add Powerplay mousemat - LogitechGPowerPlayController* mousemat_controller = new LogitechGPowerPlayController(dev, info->path); - - RGBController_LogitechGPowerPlay* mousemat_rgb_controller = new RGBController_LogitechGPowerPlay(mousemat_controller); - - mousemat_rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(mousemat_rgb_controller); - } - break; - } - } - } - info = info->next; - } - hid_free_enumeration(info); - } - break; - } - + LogitechG810Controller* controller = new LogitechG810Controller(dev, dev); + RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectLogitechControllers() */ +#endif +} -REGISTER_DETECTOR("Logitech", DetectLogitechControllers); +void DetectLogitechKeyboardG213(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechG213Controller* controller = new LogitechG213Controller(dev); + RGBController_LogitechG213* rgb_controller = new RGBController_LogitechG213(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseG203(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechG203Controller* controller = new LogitechG203Controller(dev, info->path); + RGBController_LogitechG203* rgb_controller = new RGBController_LogitechG203(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseG203L(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechG203LController* controller = new LogitechG203LController(dev, info->path); + RGBController_LogitechG203L* rgb_controller = new RGBController_LogitechG203L(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseG403(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechG403Controller* controller = new LogitechG403Controller(dev, info->path); + RGBController_LogitechG403* rgb_controller = new RGBController_LogitechG403(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseG502PS(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechG502PSController* controller = new LogitechG502PSController(dev, info->path); + RGBController_LogitechG502PS* rgb_controller = new RGBController_LogitechG502PS(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseGPRO(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + LogitechGProWirelessController* controller = new LogitechGProWirelessController(dev, info->path); + RGBController_LogitechGProWireless* rgb_controller = new RGBController_LogitechGProWireless(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectLogitechMouseGLS(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + //Add mouse + LogitechGProWirelessController* mouse_controller = new LogitechGProWirelessController(dev, info->path); + RGBController_LogitechGProWireless* mouse_rgb_controller = new RGBController_LogitechGProWireless(mouse_controller); + mouse_rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(mouse_rgb_controller); + + //Add Powerplay mousemat + LogitechGPowerPlayController* mousemat_controller = new LogitechGPowerPlayController(dev, info->path); + RGBController_LogitechGPowerPlay* mousemat_rgb_controller = new RGBController_LogitechGPowerPlay(mousemat_controller); + mousemat_rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(mousemat_rgb_controller); + } +} + +/*-------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Keyboards | +\*-------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IPU("Logitech G213", DetectLogitechKeyboardG213, LOGITECH_VID, LOGITECH_G213_PID, 1, 0xFF43, 0x0602); +REGISTER_HID_DETECTOR_IP ("Logitech G512", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G512_PID, 1, 0xFF43); +REGISTER_HID_DETECTOR_IP ("Logitech G512 RGB", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G512_RGB_PID, 1, 0xFF43); +REGISTER_HID_DETECTOR_IP ("Logitech G610 Orion", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G610_PID, 1, 0xFF43); +REGISTER_HID_DETECTOR_IP ("Logitech G810 Orion Spectrum", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G810_1_PID, 1, 0xFF43); +REGISTER_HID_DETECTOR_IP ("Logitech G810 Orion Spectrum", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G810_2_PID, 1, 0xFF43); +/*-------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Mice | +\*-------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IPU("Logitech G203 Prodigy", DetectLogitechMouseG203, LOGITECH_VID, LOGITECH_G203_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G203 Lightsync", DetectLogitechMouseG203L, LOGITECH_VID, LOGITECH_G203L_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G403 Prodigy", DetectLogitechMouseG403, LOGITECH_VID, LOGITECH_G403_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G403 Hero", DetectLogitechMouseG403, LOGITECH_VID, LOGITECH_G403H_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G502 Proteus Spectrum", DetectLogitechMouseG502PS, LOGITECH_VID, LOGITECH_G502_PS_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G502 Hero", DetectLogitechMouseG502PS, LOGITECH_VID, LOGITECH_G502H_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G Pro Gaming Mouse", DetectLogitechMouseG203, LOGITECH_VID, LOGITECH_GPRO_WIRED_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G Pro (HERO) Gaming Mouse", DetectLogitechMouseG203, LOGITECH_VID, LOGITECH_GPRO_HERO_WIRED_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G Lightspeed Wireless Gaming Mouse", DetectLogitechMouseGPRO, LOGITECH_VID, LOGITECH_G_LIGHTSPEED_WIRELESS_PID, 2, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G Pro Wireless Gaming Mouse (Wired)", DetectLogitechMouseGPRO, LOGITECH_VID, LOGITECH_GPRO_WIRELESS_PID, 2, 0xFF00, 2); +/*-------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Mousemats | +\*-------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IPU("Logitech G Powerplay Mousepad with Lightspeed", DetectLogitechMouseGLS, LOGITECH_VID, LOGITECH_G_LIGHTSPEED_POWERPLAY_PID, 2, 0xFF00, 2); diff --git a/Controllers/LogitechController/RGBController_LogitechG203L.cpp b/Controllers/LogitechController/RGBController_LogitechG203L.cpp index 610c1460..6cecda02 100644 --- a/Controllers/LogitechController/RGBController_LogitechG203L.cpp +++ b/Controllers/LogitechController/RGBController_LogitechG203L.cpp @@ -166,4 +166,4 @@ void RGBController_LogitechG203L::DeviceUpdateMode() { logitech->SetMode(modes[active_mode].value, modes[active_mode].speed, val, dir, red, grn, blu); } -} \ No newline at end of file +} diff --git a/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp b/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp index 9c7890dd..9b254be5 100644 --- a/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp +++ b/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp @@ -2,7 +2,6 @@ #include "MSI3ZoneController.h" #include "RGBController.h" #include "RGBController_MSI3Zone.h" -#include #include #define MSI_3_ZONE_KEYBOARD_VID 0x1770 @@ -17,35 +16,16 @@ * * \******************************************************************************************/ -void DetectMSI3ZoneControllers(std::vector& rgb_controllers) +void DetectMSI3ZoneControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - info = hid_enumerate(MSI_3_ZONE_KEYBOARD_VID, MSI_3_ZONE_KEYBOARD_PID); - - //Look for MSI/Steelseries 3-zone Keyboard - while(info) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - if((info->vendor_id == MSI_3_ZONE_KEYBOARD_VID) - &&(info->product_id == MSI_3_ZONE_KEYBOARD_PID)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - MSI3ZoneController* controller = new MSI3ZoneController(dev, info->path); - - RGBController_MSI3Zone* rgb_controller = new RGBController_MSI3Zone(controller); - - rgb_controllers.push_back(rgb_controller); - } - } - - info = info->next; + MSI3ZoneController* controller = new MSI3ZoneController(dev, info->path); + RGBController_MSI3Zone* rgb_controller = new RGBController_MSI3Zone(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectMSI3ZoneControllers() */ -REGISTER_DETECTOR("MSI 3-Zone Laptop", DetectMSI3ZoneControllers); +REGISTER_HID_DETECTOR("MSI 3-Zone Laptop", DetectMSI3ZoneControllers, MSI_3_ZONE_KEYBOARD_VID, MSI_3_ZONE_KEYBOARD_PID); diff --git a/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp b/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp index c659d6fc..c5b0c17c 100644 --- a/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp +++ b/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp @@ -4,56 +4,6 @@ #define MSI_USB_VID 0x1462 -#define NUM_MSI_PIDS 41 - -static const unsigned short msi_pid_table[] = -{ - 0x3EA4, // MS_3EA4 - 0x4559, // MS_4459 - - 0x7B10, // MS_7B10 - 0x7B93, // MSI B450 Gaming Pro Carbon AC - 0x7B94, // MS_7B94 - 0x7B96, // MS_7B96 - - 0x7C34, // MS_7C34 - 0x7C35, // MS_7C35 - 0x7C36, // MS_7C36 - 0x7C37, // MS_7C37 - 0x7C42, // MS_7C42 - 0x7C56, // MS_7C56 - 0x7C59, // MS_7C59 - 0x7C60, // MS_7C60 - 0x7C67, // MS_7C67 - 0x7C70, // MS_7C70 - 0x7C71, // MS_7C71 - 0x7C73, // MS_7C73 - 0x7C75, // MS_7C75 - 0x7C76, // MS_7C76 - 0x7C77, // MS_7C77 - 0x7C79, // MS_7C79 - 0x7C80, // MS_7C80 - 0x7C81, // MS_7C81 - 0x7C82, // MS_7C82 - 0x7C83, // MS_7C83 - 0x7C84, // MS_7C84 - 0x7C85, // MS_7C85 - 0x7C86, // MS_7C86 - 0x7C87, // MS_7C87 - 0x7C88, // MS_7C88 - 0x7C89, // MS_7C89 - 0x7C90, // MS_7C90 - 0x7C91, // MS_7C91 - 0x7C92, // MS_7C92 - 0x7C94, // MS_7C94 - 0x7C95, // MS_7C95 - 0x7C96, // MS_7C96 - 0x7C98, // MS_7C98 - 0x7C99, // MS_7C99 - - 0x905D // MS_905D -}; - /******************************************************************************************\ * * * DetectMSIMysticLightControllers * @@ -62,45 +12,68 @@ static const unsigned short msi_pid_table[] = * * \******************************************************************************************/ -void DetectMSIMysticLightControllers(std::vector &rgb_controllers) +// WARNING! +// +// The MSI Mystic Light controller is disabled due to bricking risk +// Uncomment this line to enable. Do so at your own risk. +// #define ENABLE_MYSTIC_LIGHT + +void DetectMSIMysticLightControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; + hid_device* dev = hid_open_path(info->path); - hid_init(); - - for(int device_idx = 0; device_idx < NUM_MSI_PIDS; device_idx++) + if( dev ) { - dev = NULL; - - info = hid_enumerate(MSI_USB_VID, msi_pid_table[device_idx]); - - //Look for MSI Mystic Light Controller - while(info) - { - if((info->vendor_id == MSI_USB_VID) - &&(info->product_id == msi_pid_table[device_idx])) - { - dev = hid_open_path(info->path); - break; - } - else - { - info = info->next; - } - } - - if( dev ) - { - MSIMysticLightController * controller = new MSIMysticLightController(dev, info->path); - - RGBController_MSIMysticLight * rgb_controller = new RGBController_MSIMysticLight(controller); - - rgb_controllers.push_back(rgb_controller); - } + MSIMysticLightController * controller = new MSIMysticLightController(dev, info->path); + RGBController_MSIMysticLight * rgb_controller = new RGBController_MSIMysticLight(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectMSIMysticLightControllers() */ -// The MSI Mystic Light controller is disabled due to bricking risk -// Uncomment this line to enable. Do so at your own risk. -//REGISTER_DETECTOR("MSI Mystic Light", DetectMSIMysticLightControllers); +#ifdef ENABLE_MYSTIC_LIGHT +REGISTER_HID_DETECTOR("MSI Mystic Light MS_3EA4", DetectMSIMysticLightControllers, MSI_USB_VID, 0x3EA4); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_4459", DetectMSIMysticLightControllers, MSI_USB_VID, 0x4459); + +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7B10", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7B10); +REGISTER_HID_DETECTOR("MSI B450 Pro Carbon AC", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7B93); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7B94", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7B94); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7B96", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7B96); + +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C34", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C34); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C35", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C35); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C36", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C36); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C37", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C37); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C42", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C42); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C56", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C56); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C59", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C59); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C60", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C60); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C67", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C67); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C70", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C70); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C71", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C71); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C73", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C73); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C75", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C75); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C76", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C76); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C77", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C77); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C79", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C79); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C80", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C80); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C81", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C81); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C82", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C82); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C83", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C83); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C84", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C84); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C85", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C85); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C86", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C86); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C87", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C87); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C88", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C88); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C89", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C89); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C90", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C90); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C91", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C91); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C92", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C92); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C94", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C94); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C95", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C95); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C96", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C96); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C98", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C98); +REGISTER_HID_DETECTOR("MSI Mystic Light MS_7C99", DetectMSIMysticLightControllers, MSI_USB_VID, 0x7C99); + +REGISTER_HID_DETECTOR("MSI Mystic Light MS_905D", DetectMSIMysticLightControllers, MSI_USB_VID, 0x905D); +#endif diff --git a/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp b/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp index 2104b555..5c6fbc09 100644 --- a/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp +++ b/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp @@ -2,7 +2,6 @@ #include "NZXTHue2Controller.h" #include "RGBController.h" #include "RGBController_NZXTHue2.h" -#include #include #define NZXT_VID 0x1E71 @@ -13,73 +12,51 @@ #define NZXT_KRAKEN_X3_PID 0x2007 #define NZXT_RGB_FAN_CONTROLLER_PID 0x2009 -typedef struct +static void spawn_hue(hid_device_info* info, const std::string& name, int rgb_channels, int fan_channels) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned int num_rgb_channels; - unsigned int num_fan_channels; - const char * name; -} nzxt_hue_2_device; - -#define NZXT_HUE_2_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const nzxt_hue_2_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | NZXT Hue 2 devices | - \*-----------------------------------------------------------------------------------------------------*/ - { NZXT_VID, NZXT_HUE_2_PID, 4, 0, "NZXT Hue 2" }, - { NZXT_VID, NZXT_HUE_2_AMBIENT_PID, 2, 0, "NZXT Hue 2 Ambient" }, - { NZXT_VID, NZXT_MOTHERBOARD_DEVICE_PID, 2, 3, "NZXT Hue 2 Motherboard" }, - { NZXT_VID, NZXT_SMART_DEVICE_V2_PID, 2, 3, "NZXT Smart Device V2" }, - { NZXT_VID, NZXT_KRAKEN_X3_PID, 4, 0, "NZXT Kraken X3" }, - { NZXT_VID, NZXT_RGB_FAN_CONTROLLER_PID, 2, 3, "NZXT RGB & Fan Controller" }, -}; - -/******************************************************************************************\ -* * -* DetectNZXTHue2Controllers * -* * -* Detect devices supported by the NZXT Hue 2 driver * -* * -\******************************************************************************************/ - -void DetectNZXTHue2Controllers(std::vector &rgb_controllers) -{ - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < NZXT_HUE_2_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if(dev) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for NZXT Hue 2 devices - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - NZXTHue2Controller* controller = new NZXTHue2Controller(dev, device_list[device_idx].num_rgb_channels, device_list[device_idx].num_fan_channels, info->path); - - RGBController_NZXTHue2* rgb_controller = new RGBController_NZXTHue2(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; - } + NZXTHue2Controller* controller = new NZXTHue2Controller(dev, rgb_channels, fan_channels, info->path); + RGBController_NZXTHue2* rgb_controller = new RGBController_NZXTHue2(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectNZXTHue2Controllers() */ +} -REGISTER_DETECTOR("NZXT Hue 2", DetectNZXTHue2Controllers); +void DetectNZXTHue2(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 4, 0); +} + +void DetectNZXTHue2Ambient(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 2, 0); +} + +void DetectNZXTHue2Motherboard(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 2, 3); +} + +void DetectNZXTSmartDeviceV2(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 2, 3); +} + +void DetectNZXTKrakenX3(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 4, 0); +} + +void DetectNZXTFanController(hid_device_info* info, const std::string& name) +{ + spawn_hue(info, name, 2, 3); +} + +REGISTER_HID_DETECTOR("NZXT Hue 2", DetectNZXTHue2, NZXT_VID, NZXT_HUE_2_PID); +REGISTER_HID_DETECTOR("NZXT Hue 2 Ambient", DetectNZXTHue2Ambient, NZXT_VID, NZXT_HUE_2_AMBIENT_PID); +REGISTER_HID_DETECTOR("NZXT Hue 2 Motherboard", DetectNZXTHue2Motherboard, NZXT_VID, NZXT_MOTHERBOARD_DEVICE_PID); +REGISTER_HID_DETECTOR("NZXT Smart Device V2", DetectNZXTSmartDeviceV2, NZXT_VID, NZXT_SMART_DEVICE_V2_PID); +REGISTER_HID_DETECTOR("NZXT Kraken X3", DetectNZXTKrakenX3, NZXT_VID, NZXT_KRAKEN_X3_PID); +REGISTER_HID_DETECTOR("NZXT RGB & Fan Controller", DetectNZXTFanController, NZXT_VID, NZXT_RGB_FAN_CONTROLLER_PID); diff --git a/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp b/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp index eba72f0b..d5f09880 100644 --- a/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp +++ b/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp @@ -9,24 +9,6 @@ #define NZXT_KRAKEN_X2_PID 0x170E #define NZXT_KRAKEN_M2_PID 0x1715 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - const char * name; -} nzxt_kraken_device; - -#define NZXT_KRAKEN_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const nzxt_kraken_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------*\ - | NZXT Hue 2 devices | - \*-----------------------------------------------------------------------------------------------------*/ - { NZXT_KRAKEN_VID, NZXT_KRAKEN_X2_PID, "NZXT Kraken X2" }, - { NZXT_KRAKEN_VID, NZXT_KRAKEN_M2_PID, "NZXT Kraken M2" }, -}; - /******************************************************************************************\ * * * DetectNZXTKrakenControllers * @@ -35,41 +17,17 @@ static const nzxt_kraken_device device_list[] = * * \******************************************************************************************/ -void DetectNZXTKrakenControllers(std::vector &rgb_controllers) +void DetectNZXTKrakenControllers(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(std::size_t device_idx = 0; device_idx < NZXT_KRAKEN_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for NZXT Kraken devices - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid)) - { - dev = hid_open_path(info->path); - - if( dev ) - { - NZXTKrakenController* controller = new NZXTKrakenController(dev, info->path); - - RGBController_NZXTKraken* rgb_controller = new RGBController_NZXTKraken(controller); - - rgb_controller->name = device_list[device_idx].name; - - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; - } + NZXTKrakenController* controller = new NZXTKrakenController(dev, info->path); + RGBController_NZXTKraken* rgb_controller = new RGBController_NZXTKraken(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectNZXTKrakenControllers() */ -REGISTER_DETECTOR("NZXT Kraken", DetectNZXTKrakenControllers); +REGISTER_HID_DETECTOR("NZXT Kraken X2", DetectNZXTKrakenControllers, NZXT_KRAKEN_VID, NZXT_KRAKEN_X2_PID); +REGISTER_HID_DETECTOR("NZXT Kraken M2", DetectNZXTKrakenControllers, NZXT_KRAKEN_VID, NZXT_KRAKEN_M2_PID); diff --git a/Controllers/RedragonController/RedragonControllerDetect.cpp b/Controllers/RedragonController/RedragonControllerDetect.cpp index 44c8ef73..225a82b6 100644 --- a/Controllers/RedragonController/RedragonControllerDetect.cpp +++ b/Controllers/RedragonController/RedragonControllerDetect.cpp @@ -26,38 +26,6 @@ #define REDRAGON_M711_PID 0xFC30 #define REDRAGON_M715_PID 0xFC39 -typedef struct -{ - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - unsigned short usb_usage_page; - device_type type; - const char * name; -} redragon_device; - -#define REDRAGON_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const redragon_device device_list[] = -{ - /*---------------------------------------------------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*---------------------------------------------------------------------------------------------------------------------------------------------*/ - { REDRAGON_KEYBOARD_VID, REDRAGON_K550_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE, DEVICE_TYPE_KEYBOARD, "Redragon K550 Yama" }, - { REDRAGON_KEYBOARD_VID, REDRAGON_K552_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE, DEVICE_TYPE_KEYBOARD, "Redragon K552 Kumara" }, - { REDRAGON_KEYBOARD_VID, REDRAGON_K556_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE, DEVICE_TYPE_KEYBOARD, "Redragon K556 Devarajas" }, - { REDRAGON_KEYBOARD_VID, TECWARE_PHANTOM_ELITE_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE, DEVICE_TYPE_KEYBOARD, "Tecware Phantom Elite" }, - { REDRAGON_KEYBOARD_VID, WARRIOR_KANE_TC235, 1, REDRAGON_KEYBOARD_USAGE_PAGE, DEVICE_TYPE_KEYBOARD, "Warrior Kane TC235" }, - /*---------------------------------------------------------------------------------------------------------------------------------------------*\ - | Mice | - \*---------------------------------------------------------------------------------------------------------------------------------------------*/ - { REDRAGON_MOUSE_VID, REDRAGON_M711_PID, 2, REDRAGON_MOUSE_USAGE_PAGE, DEVICE_TYPE_MOUSE, "Redragon M711 Cobra" }, - { REDRAGON_MOUSE_VID, REDRAGON_M715_PID, 2, REDRAGON_MOUSE_USAGE_PAGE, DEVICE_TYPE_MOUSE, "Redragon M715 Dagger" }, - /*---------------------------------------------------------------------------------------------------------------------------------------------*\ - | Mousemats | - \*---------------------------------------------------------------------------------------------------------------------------------------------*/ -}; - /******************************************************************************************\ * * * DetectRedragonControllers * @@ -66,64 +34,43 @@ static const redragon_device device_list[] = * * \******************************************************************************************/ -void DetectRedragonControllers(std::vector& rgb_controllers) +void DetectRedragonKeyboards(hid_device_info* info, const std::string& name) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(unsigned int device_idx = 0; device_idx < REDRAGON_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for Redragon RGB Peripheral - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) -#ifdef USE_HID_USAGE - &&(info->interface_number == device_list[device_idx].usb_interface) - &&(info->usage_page == device_list[device_idx].usb_usage_page)) -#else - &&(info->interface_number == device_list[device_idx].usb_interface)) -#endif - { - dev = hid_open_path(info->path); - - if( dev ) - { - switch(device_list[device_idx].type) - { - case DEVICE_TYPE_KEYBOARD: - { - RedragonK556Controller* controller = new RedragonK556Controller(dev, info->path); - - RGBController_RedragonK556* rgb_controller = new RGBController_RedragonK556(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case DEVICE_TYPE_MOUSE: - { - RedragonM711Controller* controller = new RedragonM711Controller(dev, info->path); - - RGBController_RedragonM711* rgb_controller = new RGBController_RedragonM711(controller); - - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - } - } - } - info = info->next; - } + RedragonK556Controller* controller = new RedragonK556Controller(dev, info->path); + RGBController_RedragonK556* rgb_controller = new RGBController_RedragonK556(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectRedragonControllers() */ +} -REGISTER_DETECTOR("Redragon Peripheral", DetectRedragonControllers); +void DetectRedragonMice(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if( dev ) + { + RedragonM711Controller* controller = new RedragonM711Controller(dev, info->path); + RGBController_RedragonM711* rgb_controller = new RGBController_RedragonM711(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IP("Redragon K550 Yama", DetectRedragonKeyboards, REDRAGON_KEYBOARD_VID, REDRAGON_K550_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE); +REGISTER_HID_DETECTOR_IP("Redragon K552 Kumara", DetectRedragonKeyboards, REDRAGON_KEYBOARD_VID, REDRAGON_K552_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE); +REGISTER_HID_DETECTOR_IP("Redragon K556 Devarajas", DetectRedragonKeyboards, REDRAGON_KEYBOARD_VID, REDRAGON_K556_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE); +REGISTER_HID_DETECTOR_IP("Tecware Phantom Elite", DetectRedragonKeyboards, REDRAGON_KEYBOARD_VID, TECWARE_PHANTOM_ELITE_PID, 1, REDRAGON_KEYBOARD_USAGE_PAGE); +REGISTER_HID_DETECTOR_IP("Warrior Kane TC235", DetectRedragonKeyboards, REDRAGON_KEYBOARD_VID, WARRIOR_KANE_TC235, 1, REDRAGON_KEYBOARD_USAGE_PAGE); +/*---------------------------------------------------------------------------------------------------------------------------------------------*\ +| Mice | +\*---------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_IP("Redragon M711 Cobra", DetectRedragonMice, REDRAGON_MOUSE_VID, REDRAGON_M711_PID, 2, REDRAGON_MOUSE_USAGE_PAGE); +REGISTER_HID_DETECTOR_IP("Redragon M715 Dagger", DetectRedragonMice, REDRAGON_MOUSE_VID, REDRAGON_M715_PID, 2, REDRAGON_MOUSE_USAGE_PAGE); +/*---------------------------------------------------------------------------------------------------------------------------------------------*\ +| Mousemats | +\*---------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/Controllers/RoccatController/RoccatControllerDetect.cpp b/Controllers/RoccatController/RoccatControllerDetect.cpp index bb6579ff..0bc6165e 100644 --- a/Controllers/RoccatController/RoccatControllerDetect.cpp +++ b/Controllers/RoccatController/RoccatControllerDetect.cpp @@ -10,66 +10,21 @@ #include "RoccatKoneAimoController.h" #include "RGBController.h" #include "RGBController_RoccatKoneAimo.h" -#include #include #define ROCCAT_VID 0x1E7D -#define ROCCAT_KONE_AIMO_IFC 0 -#define ROCCAT_KONE_AIMO_U 0x0 -#define ROCCAT_KONE_AIMO_UP 0x0B -#define COUNT_ROCCATKONEAIMO_PIDS (sizeof(RoccatKoneAimo_pids) / sizeof(RoccatKoneAimo_pids[ 0 ])) -static const unsigned short RoccatKoneAimo_pids[] = +void DetectRoccatControllers(hid_device_info* info, const std::string& name) { - 0x2E2C, // Roccat Kone Aimo 16K - 0x2E27 // Roccat Kone Aimo -}; - -void DetectRoccatControllers(std::vector& rgb_controllers) -{ - hid_device_info* info; - hid_device* dev; - unsigned short tmpPID; - - if (hid_init() < 0) + hid_device* dev = hid_open_path(info->path); + if (dev) { - return; + RoccatKoneAimoController * controller = new RoccatKoneAimoController(dev, info->path); + RGBController_RoccatKoneAimo * rgb_controller = new RGBController_RoccatKoneAimo(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } - - for(unsigned int dev_idx = 0; dev_idx < COUNT_ROCCATKONEAIMO_PIDS; dev_idx++) - { - dev = NULL; - - tmpPID = RoccatKoneAimo_pids[dev_idx]; - info = hid_enumerate(ROCCAT_VID, tmpPID); - - while(info) - { - if((info->vendor_id == ROCCAT_VID) -#ifdef USE_HID_USAGE - &&(info->product_id == tmpPID) - &&(info->usage == ROCCAT_KONE_AIMO_U) //Usage and usage page required to get the correct interface - &&(info->usage_page == ROCCAT_KONE_AIMO_UP)) -#else - &&(info->interface_number == ROCCAT_KONE_AIMO_IFC) //Interface is only valid on Windows where there is > 1 interface - &&(info->product_id == tmpPID)) -#endif - { - dev = hid_open_path(info->path); - - if (dev) - { - RoccatKoneAimoController * controller = new RoccatKoneAimoController(dev, info->path); - RGBController_RoccatKoneAimo * rgb_controller = new RGBController_RoccatKoneAimo(controller); - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; - } - } - - hid_free_enumeration(info); - } /* DetectRoccatControllers() */ -REGISTER_DETECTOR("Roccat", DetectRoccatControllers); +REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo 16K", DetectRoccatControllers, ROCCAT_VID, 0x2E2C, 0, 0x0B, 0); +REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo", DetectRoccatControllers, ROCCAT_VID, 0x2E27, 0, 0x0B, 0); diff --git a/Controllers/SonyDS4Controller/SonyDS4ControllerDetect.cpp b/Controllers/SonyDS4Controller/SonyDS4ControllerDetect.cpp index ffdab6fa..97208ee8 100644 --- a/Controllers/SonyDS4Controller/SonyDS4ControllerDetect.cpp +++ b/Controllers/SonyDS4Controller/SonyDS4ControllerDetect.cpp @@ -16,33 +16,17 @@ const unsigned short vendor_id = 0x054C; const unsigned short product_id_v1 = 0x05C4; const unsigned short product_id_v2 = 0x09CC; -void DetectSonyDS4Controllers(std::vector& rgb_controllers) +void DetectSonyDS4Controllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_init(); - - info = hid_enumerate(0x00, 0x00); - - while (info) + hid_device* dev = hid_open_path(info->path); + if(dev) { - if(info->vendor_id == vendor_id) - { - if(info->product_id == product_id_v1 || info->product_id == product_id_v2) - { - hid_device* dev = hid_open_path(info->path); - - if (dev != NULL) - { - SonyDS4Controller* controller = new SonyDS4Controller(dev, info->path); - RGBController_SonyDS4* rgb_controller = new RGBController_SonyDS4(controller); - rgb_controllers.push_back(rgb_controller); - } - } - } - info = info->next; + SonyDS4Controller* controller = new SonyDS4Controller(dev, info->path); + RGBController_SonyDS4* rgb_controller = new RGBController_SonyDS4(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } - - hid_free_enumeration(info); } -REGISTER_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers); +REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, vendor_id, product_id_v1); +REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, vendor_id, product_id_v2); diff --git a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp index f0df3f1d..91c6f0ba 100644 --- a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp +++ b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp @@ -8,7 +8,6 @@ #include "RGBController_SteelSeriesRival.h" #include "RGBController_SteelSeriesSiberia.h" #include "RGBController_SteelSeriesApex.h" -#include #include /*-----------------------------------------------------*\ @@ -44,138 +43,103 @@ #define STEELSERIES_APEX_PRO_TKL_PID 0x1614 #define STEELSERIES_APEX_M750_PID 0x0616 -typedef struct +void DetectSteelSeriesApex(hid_device_info* info, const std::string& name) { - unsigned short usb_vid; - unsigned short usb_pid; - unsigned char usb_interface; - device_type type; - steelseries_type proto_type; - const char * name; -} steelseries_device; - -#define STEELSERIES_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const steelseries_device device_list[] = -{ - /*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Mice | - \*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ - { STEELSERIES_VID, STEELSERIES_RIVAL_100_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_100, "SteelSeries Rival 100" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_100_DOTA_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_100, "SteelSeries Rival 100 DotA 2 Edition" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_105_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_100, "SteelSeries Rival 105" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_110_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_100, "SteelSeries Rival 110" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300" }, - { STEELSERIES_VID, ACER_PREDATOR_RIVAL_300_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "Acer Predator Gaming Mouse (Rival 300)" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 CS:GO Fade Edition" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_STM32_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 CS:GO Fade Edition (stm32)" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 CS:GO Hyperbeast Edition" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_DOTA_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 Dota 2 Edition" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_HP_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 HP Omen Edition" }, - { STEELSERIES_VID, STEELSERIES_RIVAL_300_BLACKOPS_PID, 0, DEVICE_TYPE_MOUSE, RIVAL_300, "SteelSeries Rival 300 Black Ops Edition" }, - /*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Headsets | - \*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ - { STEELSERIES_VID, STEELSERIES_SIBERIA_350_PID, 3, DEVICE_TYPE_HEADSET, SIBERIA_350, "SteelSeries Siberia 350" }, - /*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ - | Keyboards | - \*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ - { STEELSERIES_VID, STEELSERIES_APEX_5_PID, 1, DEVICE_TYPE_KEYBOARD, APEX, "SteelSeries Apex 5" }, - { STEELSERIES_VID, STEELSERIES_APEX_7_PID, 1, DEVICE_TYPE_KEYBOARD, APEX, "SteelSeries Apex 7" }, - { STEELSERIES_VID, STEELSERIES_APEX_7_TKL_PID, 1, DEVICE_TYPE_KEYBOARD, APEX_TKL, "SteelSeries Apex 7 TKL" }, - { STEELSERIES_VID, STEELSERIES_APEX_PRO_PID, 1, DEVICE_TYPE_KEYBOARD, APEX, "SteelSeries Apex Pro" }, - { STEELSERIES_VID, STEELSERIES_APEX_PRO_TKL_PID, 1, DEVICE_TYPE_KEYBOARD, APEX_TKL, "SteelSeries Apex Pro TKL" }, - { STEELSERIES_VID, STEELSERIES_APEX_M750_PID, 2, DEVICE_TYPE_KEYBOARD, APEX_M, "SteelSeries Apex M750" }, -}; - -/******************************************************************************************\ -* * -* DetectSteelSeriesControllers * -* * -* Tests the USB address to find a SteelSeries Rival Mouse, Headset or Keyboard * -* * -\******************************************************************************************/ - -void DetectSteelSeriesControllers(std::vector& rgb_controllers) -{ - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(unsigned int device_idx = 0; device_idx < STEELSERIES_NUM_DEVICES; device_idx++) + hid_device* dev = hid_open_path(info->path); + if(dev) { - dev = NULL; - - info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); - - //Look for SteelSeries RGB Peripheral - while(info) - { - if((info->vendor_id == device_list[device_idx].usb_vid) - &&(info->product_id == device_list[device_idx].usb_pid) - &&(info->interface_number == device_list[device_idx].usb_interface)) - { - dev = hid_open_path(info->path); - break; - } - else - { - info = info->next; - } - } - - if(dev) - { - switch(device_list[device_idx].type) - { - case DEVICE_TYPE_KEYBOARD: - { - if ((device_list[device_idx].proto_type == APEX) || (device_list[device_idx].proto_type == APEX_TKL)) { - SteelSeriesApexController* controller = new SteelSeriesApexController(dev, device_list[device_idx].proto_type, info->path); - - RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - else - { - SteelSeriesApexMController* controller = new SteelSeriesApexMController(dev, device_list[device_idx].proto_type, info->path); - - RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - - } - break; - - case DEVICE_TYPE_HEADSET: - { - SteelSeriesSiberiaController* controller = new SteelSeriesSiberiaController(dev, info->path); - - RGBController_SteelSeriesSiberia* rgb_controller = new RGBController_SteelSeriesSiberia(controller); - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case DEVICE_TYPE_MOUSE: - { - SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, device_list[device_idx].proto_type, info->path); - - RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - rgb_controller->name = device_list[device_idx].name; - rgb_controllers.push_back(rgb_controller); - } - break; - - case DEVICE_TYPE_MOUSEMAT: - /* Not yet supported */ - break; - } - } + SteelSeriesApexController* controller = new SteelSeriesApexController(dev, APEX, info->path); + RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectSteelSeriesControllers() */ +} -REGISTER_DETECTOR("SteelSeries", DetectSteelSeriesControllers); +void DetectSteelSeriesApexTKL(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + SteelSeriesApexController* controller = new SteelSeriesApexController(dev, APEX_TKL, info->path); + RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectSteelSeriesApexM(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + SteelSeriesApexMController* controller = new SteelSeriesApexMController(dev, APEX_M, info->path); + RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectSteelSeriesHeadset(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + SteelSeriesSiberiaController* controller = new SteelSeriesSiberiaController(dev, info->path); + RGBController_SteelSeriesSiberia* rgb_controller = new RGBController_SteelSeriesSiberia(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectSteelSeriesRival100(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_100, info->path); + RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +void DetectSteelSeriesRival300(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_300, info->path); + RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Mice | +\*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_I("SteelSeries Rival 100", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 100 DotA 2 Edition", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_DOTA_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 105", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_105_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 110", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_110_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_PID, 0); +REGISTER_HID_DETECTOR_I("Acer Predator Gaming Mouse (Rival 300)", DetectSteelSeriesRival300, STEELSERIES_VID, ACER_PREDATOR_RIVAL_300_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition (stm32)", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_STM32_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Hyperbeast Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Dota 2 Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_DOTA_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 HP Omen Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_HP_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Black Ops Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_BLACKOPS_PID, 0); +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Headsets | +\*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_I("SteelSeries Siberia 350", DetectSteelSeriesHeadset, STEELSERIES_VID, STEELSERIES_SIBERIA_350_PID, 3); +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*\ +| Keyboards | +\*-----------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_I("SteelSeries Apex 5", DetectSteelSeriesApex, STEELSERIES_VID, STEELSERIES_APEX_5_PID, 1); +REGISTER_HID_DETECTOR_I("SteelSeries Apex 7", DetectSteelSeriesApex, STEELSERIES_VID, STEELSERIES_APEX_7_PID, 1); +REGISTER_HID_DETECTOR_I("SteelSeries Apex 7 TKL", DetectSteelSeriesApexTKL, STEELSERIES_VID, STEELSERIES_APEX_7_TKL_PID, 1); +REGISTER_HID_DETECTOR_I("SteelSeries Apex Pro", DetectSteelSeriesApex, STEELSERIES_VID, STEELSERIES_APEX_PRO_PID, 1); +REGISTER_HID_DETECTOR_I("SteelSeries Apex Pro TKL", DetectSteelSeriesApexTKL, STEELSERIES_VID, STEELSERIES_APEX_PRO_TKL_PID, 1); +REGISTER_HID_DETECTOR_I("SteelSeries Apex M750", DetectSteelSeriesApexM, STEELSERIES_VID, STEELSERIES_APEX_M750_PID, 2); diff --git a/Controllers/TecknetController/TecknetControllerDetect.cpp b/Controllers/TecknetController/TecknetControllerDetect.cpp index bf4c8b94..2430d65e 100644 --- a/Controllers/TecknetController/TecknetControllerDetect.cpp +++ b/Controllers/TecknetController/TecknetControllerDetect.cpp @@ -19,21 +19,6 @@ #define TECKNET_M0008_U 0x01 //Usage 01 #define TECKNET_M0008_UPG 0xFFA0 //Vendor Defined Usage Page -#define TECKNET_NUM_DEVICES (sizeof(tecknet_pids) / sizeof(tecknet_pids[ 0 ])) - -enum -{ - TECKNET_PID = 0, - TECKNET_INTERFACE = 1, - TECKNET_USAGE = 2, - TECKNET_USAGE_PAGE = 3 -}; - -static const int tecknet_pids[][4] = -{ // PID, Interface, Usage, Usage_Page - { TECKNET_M0008_PID, 0, TECKNET_M0008_U, TECKNET_M0008_UPG } //Tecknet M008 Mouse -}; - /******************************************************************************************\ * * * DetectTecknetControllers * @@ -42,46 +27,16 @@ static const int tecknet_pids[][4] = * * \******************************************************************************************/ -void DetectTecknetControllers(std::vector& rgb_controllers) +void DetectTecknetControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - - //Look for the passed in tecknet_pids - hid_init(); - info = hid_enumerate(TECKNET_VID, 0x0); - - while(info) + hid_device* dev = hid_open_path(info->path); + if(dev) { - hid_device* dev = NULL; - if(info->vendor_id == TECKNET_VID) - { - for(unsigned int pid_idx = 0; pid_idx < TECKNET_NUM_DEVICES; pid_idx++) - { - if((info->vendor_id == TECKNET_VID) -#ifdef USE_HID_USAGE - &&(info->usage == tecknet_pids[pid_idx][TECKNET_USAGE]) - &&(info->usage_page == tecknet_pids[pid_idx][TECKNET_USAGE_PAGE]) - &&(info->product_id == tecknet_pids[pid_idx][TECKNET_PID])) -#else - &&(info->interface_number == tecknet_pids[pid_idx][TECKNET_INTERFACE]) //Interface is only valid on Windows where there is > 1 interface - &&(info->product_id == tecknet_pids[pid_idx][TECKNET_PID])) -#endif - { - dev = hid_open_path(info->path); - break; - } - } - } - - if(dev) - { - TecknetController* controller = new TecknetController(dev, info->path); - RGBController_Tecknet* rgb_controller = new RGBController_Tecknet(controller); - rgb_controllers.push_back(rgb_controller); - } - info = info->next; + TecknetController* controller = new TecknetController(dev, info->path); + RGBController_Tecknet* rgb_controller = new RGBController_Tecknet(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } - hid_free_enumeration(info); } /* DetectTecknetControllers) */ -REGISTER_DETECTOR("Tecknet", DetectTecknetControllers); +REGISTER_HID_DETECTOR_IPU("Tecknet M0008", DetectTecknetControllers, TECKNET_VID, TECKNET_M0008_PID, 0, TECKNET_M0008_UPG, TECKNET_M0008_U); diff --git a/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp b/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp index 0cc0f74b..a7dfcdef 100644 --- a/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp +++ b/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp @@ -17,40 +17,16 @@ * * \******************************************************************************************/ -void DetectPoseidonZRGBControllers(std::vector& rgb_controllers) +void DetectPoseidonZRGBControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_device* dev = NULL; - - hid_init(); - - info = hid_enumerate(TT_POSEIDON_Z_RGB_VID, TT_POSEIDON_Z_RGB_PID); - - //Look for Thermaltake Poseidon Z RGB, Interface 2 - while(info) + hid_device* dev = hid_open_path(info->path); + if( dev ) { - if((info->vendor_id == TT_POSEIDON_Z_RGB_VID) - &&(info->product_id == TT_POSEIDON_Z_RGB_PID) -#ifdef USE_HID_USAGE - &&(info->interface_number == 1) - &&(info->usage_page == 0xFF01)) -#else - &&(info->interface_number == 1)) -#endif - { - dev = hid_open_path(info->path); - if( dev ) - { - PoseidonZRGBController* controller = new PoseidonZRGBController(dev, info->path); - - RGBController_PoseidonZRGB* rgb_controller = new RGBController_PoseidonZRGB(controller); - - rgb_controllers.push_back(rgb_controller); - } - } - info = info->next; + PoseidonZRGBController* controller = new PoseidonZRGBController(dev, info->path); + RGBController_PoseidonZRGB* rgb_controller = new RGBController_PoseidonZRGB(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } - } /* DetectPoseidonZRGBControllers() */ -REGISTER_DETECTOR("Thermaltake Poseidon Z RGB", DetectPoseidonZRGBControllers); +REGISTER_HID_DETECTOR_IP("Thermaltake Poseidon Z RGB", DetectPoseidonZRGBControllers, TT_POSEIDON_Z_RGB_VID, TT_POSEIDON_Z_RGB_PID, 1, 0xFF01); diff --git a/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp b/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp index faf97621..cd1fce78 100644 --- a/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp +++ b/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp @@ -17,43 +17,32 @@ * * \******************************************************************************************/ -void DetectThermaltakeRiingControllers(std::vector& rgb_controllers) +void DetectThermaltakeRiingControllers(hid_device_info* info, const std::string&) { - hid_device_info* info; - hid_device* dev; - - hid_init(); - - for(int pid = THERMALTAKE_RIING_PID_BEGIN; pid <= THERMALTAKE_RIING_PID_END; pid++) + hid_device* dev = hid_open_path(info->path); + if(dev) { - dev = NULL; - - info = hid_enumerate(THERMALTAKE_RIING_VID, pid); - - //Look for Thermaltake Riing device - while(info) - { - if((info->vendor_id == THERMALTAKE_RIING_VID) - &&(info->product_id == pid)) - { - dev = hid_open_path(info->path); - break; - } - else - { - info = info->next; - } - } - - if(dev) - { - ThermaltakeRiingController* controller = new ThermaltakeRiingController(dev, info->path); - - RGBController_ThermaltakeRiing* rgb_controller = new RGBController_ThermaltakeRiing(controller); - - rgb_controllers.push_back(rgb_controller); - } + ThermaltakeRiingController* controller = new ThermaltakeRiingController(dev, info->path); + RGBController_ThermaltakeRiing* rgb_controller = new RGBController_ThermaltakeRiing(controller); + // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } } /* DetectThermaltakeRiingControllers() */ -REGISTER_DETECTOR("Thermaltake Riing", DetectThermaltakeRiingControllers); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA5)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA5); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA6)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA6); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA7)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA7); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA8)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA8); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA9)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA9); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAA)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAA); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAB)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAB); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAC)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAC); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAD)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAD); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAE)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAE); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FAF)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FAF); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB0)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB0); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB1)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB1); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB2)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB2); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB3)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB3); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB4)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB4); +REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FB5)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FB5); diff --git a/Detector.h b/Detector.h index e77d1d2e..07306c0b 100644 --- a/Detector.h +++ b/Detector.h @@ -2,6 +2,12 @@ #include "DeviceDetector.h" -#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj(name, func) -#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj(name, func) -#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj(func) +#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj_##func(name, func) +#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func) +#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj_##func(func) +#define REGISTER_HID_DETECTOR(name, func, vid, pid) static HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_I(name, func, vid, pid, interface) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_IP(name, func, vid, pid, interface, page) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) +#define REGISTER_HID_DETECTOR_P(name, func, vid, pid, page) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, HID_INTERFACE_ANY, pid, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_PU(name, func, vid, pid, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) diff --git a/DeviceDetector.h b/DeviceDetector.h index 3483fff7..7565f814 100644 --- a/DeviceDetector.h +++ b/DeviceDetector.h @@ -32,3 +32,12 @@ public: ResourceManager::get()->RegisterI2CBusDetector(detector); } }; + +class HIDDeviceDetector +{ +public: + HIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, uint16_t vid, uint16_t pid, int64_t interface, int usage_page, int usage) + { + ResourceManager::get()->RegisterHIDDeviceDetector(name, detector, vid, pid, interface, usage_page, usage); + } +}; diff --git a/ResourceManager.cpp b/ResourceManager.cpp index e4320bd7..91503673 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -16,6 +16,7 @@ #include #include #include +#include std::unique_ptr ResourceManager::instance; @@ -76,7 +77,7 @@ std::vector & ResourceManager::GetI2CBusses() void ResourceManager::RegisterRGBController(RGBController *rgb_controller) { - rgb_controllers.push_back(rgb_controller); + rgb_controllers_hw.push_back(rgb_controller); DeviceListChanged(); } @@ -102,6 +103,27 @@ void ResourceManager::RegisterDeviceDetector(std::string name, DeviceDetectorFun device_detectors.push_back(detector); } +void ResourceManager::RegisterHIDDeviceDetector(std::string name, + HIDDeviceDetectorFunction detector, + uint16_t vid, + uint16_t pid, + int interface, + int usage_page, + int usage) +{ + HIDDeviceDetectorBlock block; + + block.name = name; + block.address = (vid << 16) | pid; + block.function = detector; + block.interface = interface; + block.usage_page = usage_page; + block.usage = usage; + + hid_device_detectors.push_back(block); + hid_device_detector_strings.push_back(name); +} + void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg) { DeviceListChangeCallbacks.push_back(new_callback); @@ -344,11 +366,15 @@ void ResourceManager::DetectDevicesThreadFunction() { DetectDeviceMutex.lock(); - unsigned int prev_count = 0; - float percent = 0.0f; - std::vector size_used; + hid_device_info* current_hid_device; + float percent = 0.0f; + float percent_denominator = 0.0f; json detector_settings; - bool save_settings = false; + unsigned int hid_device_count = 0; + hid_device_info* hid_devices = hid_enumerate(0, 0); + unsigned int prev_count = 0; + bool save_settings = false; + std::vector size_used; size_used.resize(rgb_controllers_sizes.size()); @@ -357,6 +383,25 @@ void ResourceManager::DetectDevicesThreadFunction() size_used[size_idx] = false; } + /*-------------------------------------------------*\ + | Calculate the percentage denominator by adding | + | the number of I2C and miscellaneous detectors and | + | the number of enumerated HID devices | + | | + | Start by iterating through all HID devices in | + | list to get a total count | + \*-------------------------------------------------*/ + current_hid_device = hid_devices; + + while(current_hid_device) + { + hid_device_count++; + + current_hid_device = current_hid_device->next; + } + + percent_denominator = i2c_device_detectors.size() + device_detectors.size() + hid_device_count; + /*-------------------------------------------------*\ | Open device disable list and read in disabled | | device strings | @@ -382,8 +427,11 @@ void ResourceManager::DetectDevicesThreadFunction() for(unsigned int i2c_detector_idx = 0; i2c_detector_idx < i2c_device_detectors.size() && detection_is_required.load(); i2c_detector_idx++) { detection_string = i2c_device_detector_strings[i2c_detector_idx].c_str(); - DetectionProgressChanged(); + /*-------------------------------------------------*\ + | Check if this detector is enabled or needs to be | + | added to the settings list | + \*-------------------------------------------------*/ bool this_device_enabled = true; if(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)) { @@ -397,6 +445,8 @@ void ResourceManager::DetectDevicesThreadFunction() if(this_device_enabled) { + DetectionProgressChanged(); + i2c_device_detectors[i2c_detector_idx](busses, rgb_controllers_hw); } @@ -418,19 +468,118 @@ void ResourceManager::DetectDevicesThreadFunction() } prev_count = rgb_controllers_hw.size(); - percent = (i2c_detector_idx + 1.0f) / (i2c_device_detectors.size() + device_detectors.size()); + /*-------------------------------------------------*\ + | Update detection percent | + \*-------------------------------------------------*/ + percent = (i2c_detector_idx + 1.0f) / percent_denominator; detection_percent = percent * 100.0f; } + /*-------------------------------------------------*\ + | Detect HID devices | + | | + | Reset current device pointer to first device | + \*-------------------------------------------------*/ + current_hid_device = hid_devices; + + /*-------------------------------------------------*\ + | Loop through all HID detectors and see if any | + | need to be saved to the settings | + \*-------------------------------------------------*/ + for(unsigned int hid_detector_idx = 0; hid_detector_idx < hid_device_detectors.size(); hid_detector_idx++) + { + detection_string = hid_device_detectors[hid_detector_idx].name.c_str(); + + if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) + { + detector_settings["detectors"][detection_string] = true; + save_settings = true; + } + } + + /*-------------------------------------------------*\ + | Iterate through all devices in list and run | + | detectors | + \*-------------------------------------------------*/ + hid_device_count = 0; + + while(current_hid_device) + { + detection_string = ""; + DetectionProgressChanged(); + + unsigned int addr = (current_hid_device->vendor_id << 16) | current_hid_device->product_id; + + /*-----------------------------------------------------------------------------*\ + | Loop through all available detectors. If all required information matches, | + | run the detector | + \*-----------------------------------------------------------------------------*/ + for(unsigned int hid_detector_idx = 0; hid_detector_idx < hid_device_detectors.size() && detection_is_required.load(); hid_detector_idx++) + { + if(( hid_device_detectors[hid_detector_idx].address == addr ) + && ( ( hid_device_detectors[hid_detector_idx].interface == HID_INTERFACE_ANY ) + || ( hid_device_detectors[hid_detector_idx].interface == current_hid_device->interface_number ) ) +#ifdef USE_HID_USAGE + && ( ( hid_device_detectors[hid_detector_idx].usage_page == HID_USAGE_PAGE_ANY ) + || ( hid_device_detectors[hid_detector_idx].usage_page == current_hid_device->usage_page ) ) + && ( ( hid_device_detectors[hid_detector_idx].usage == HID_USAGE_ANY ) + || ( hid_device_detectors[hid_detector_idx].usage == current_hid_device->usage ) ) +#endif + ) + { + detection_string = hid_device_detectors[hid_detector_idx].name.c_str(); + + /*-------------------------------------------------*\ + | Check if this detector is enabled or needs to be | + | added to the settings list | + \*-------------------------------------------------*/ + bool this_device_enabled = true; + if(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)) + { + this_device_enabled = detector_settings["detectors"][detection_string]; + } + + if(this_device_enabled) + { + DetectionProgressChanged(); + + hid_device_detectors[hid_detector_idx].function(current_hid_device, hid_device_detectors[hid_detector_idx].name); + } + } + } + + /*-------------------------------------------------*\ + | Update detection percent | + \*-------------------------------------------------*/ + hid_device_count++; + + percent = (i2c_device_detectors.size() + hid_device_count) / percent_denominator; + + detection_percent = percent * 100.0f; + + /*-------------------------------------------------*\ + | Move on to the next HID device | + \*-------------------------------------------------*/ + current_hid_device = current_hid_device->next; + } + + /*-------------------------------------------------*\ + | Done using the device list, free it | + \*-------------------------------------------------*/ + hid_free_enumeration(hid_devices); + /*-------------------------------------------------*\ | Detect other devices | \*-------------------------------------------------*/ for(unsigned int detector_idx = 0; detector_idx < device_detectors.size() && detection_is_required.load(); detector_idx++) { detection_string = device_detector_strings[detector_idx].c_str(); - DetectionProgressChanged(); + /*-------------------------------------------------*\ + | Check if this detector is enabled or needs to be | + | added to the settings list | + \*-------------------------------------------------*/ bool this_device_enabled = true; if(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string)) { @@ -444,6 +593,8 @@ void ResourceManager::DetectDevicesThreadFunction() if(this_device_enabled) { + DetectionProgressChanged(); + device_detectors[detector_idx](rgb_controllers_hw); } @@ -465,7 +616,10 @@ void ResourceManager::DetectDevicesThreadFunction() } prev_count = rgb_controllers_hw.size(); - percent = (detector_idx + 1.0f + i2c_device_detectors.size()) / (i2c_device_detectors.size() + device_detectors.size()); + /*-------------------------------------------------*\ + | Update detection percent | + \*-------------------------------------------------*/ + percent = (i2c_device_detectors.size() + hid_device_count + detector_idx + 1.0f) / percent_denominator; detection_percent = percent * 100.0f; } diff --git a/ResourceManager.h b/ResourceManager.h index fd007b23..f5d9da0c 100644 --- a/ResourceManager.h +++ b/ResourceManager.h @@ -24,9 +24,27 @@ #include "RGBController.h" #include "SettingsManager.h" +#define HID_INTERFACE_ANY -1 +#define HID_USAGE_ANY -1 +#define HID_USAGE_PAGE_ANY -1L + +#define CONTROLLER_LIST_HID 0 + +struct hid_device_info; + typedef std::function&)> I2CBusDetectorFunction; typedef std::function&)> DeviceDetectorFunction; typedef std::function&, std::vector&)> I2CDeviceDetectorFunction; +typedef std::function HIDDeviceDetectorFunction; +typedef struct +{ + std::string name; + HIDDeviceDetectorFunction function; + unsigned int address; + int interface; + int usage_page; + int usage; +} HIDDeviceDetectorBlock; typedef void (*DeviceListChangeCallback)(void *); typedef void (*DetectionProgressCallback)(void *); @@ -42,12 +60,20 @@ public: void RegisterI2CBus(i2c_smbus_interface *); std::vector & GetI2CBusses(); - void RegisterRGBController(RGBController *); + void RegisterRGBController(RGBController *rgb_controller); + std::vector & GetRGBControllers(); void RegisterI2CBusDetector (I2CBusDetectorFunction detector); void RegisterDeviceDetector (std::string name, DeviceDetectorFunction detector); void RegisterI2CDeviceDetector (std::string name, I2CDeviceDetectorFunction detector); + void RegisterHIDDeviceDetector (std::string name, + HIDDeviceDetectorFunction detector, + uint16_t vid, + uint16_t pid, + int interface = HID_INTERFACE_ANY, + int usage_page = HID_USAGE_PAGE_ANY, + int usage = HID_USAGE_ANY); void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg); void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg); @@ -70,13 +96,13 @@ public: void DetectDevices(); - void DetectDevicesThreadFunction(); - void StopDeviceDetection(); void WaitForDeviceDetection(); private: + void DetectDevicesThreadFunction(); + static std::unique_ptr instance; /*-------------------------------------------------------------------------------------*\ @@ -119,6 +145,8 @@ private: std::vector i2c_bus_detectors; std::vector i2c_device_detectors; std::vector i2c_device_detector_strings; + std::vector hid_device_detectors; + std::vector hid_device_detector_strings; /*-------------------------------------------------------------------------------------*\ | Detection Thread and Detection State |