diff --git a/Controllers/A4TechController/A4Tech_Detector.cpp b/Controllers/A4TechController/A4Tech_Detector.cpp index f2c6f6385..63d4d6d39 100644 --- a/Controllers/A4TechController/A4Tech_Detector.cpp +++ b/Controllers/A4TechController/A4Tech_Detector.cpp @@ -10,47 +10,52 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| OpenRGB includes | -\*-----------------------------------------------------*/ #include +#include "BloodyB820RController.h" +#include "BloodyMouseController.h" #include "DetectionManager.h" - -/*-----------------------------------------------------*\ -| A4 Tech specific includes | -\*-----------------------------------------------------*/ -#include "RGBController_BloodyMouse.h" #include "RGBController_BloodyB820R.h" +#include "RGBController_BloodyMouse.h" -/*-----------------------------------------------------*\ -| A4 Tech USB vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| A4 Tech USB vendor ID | +\*---------------------------------------------------------*/ #define A4_TECH_VID 0x09DA -void DetectA4TechMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectA4TechMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - BloodyMouseController* controller = new BloodyMouseController(dev, info->path, info->product_id, name); + BloodyMouseController* controller = new BloodyMouseController(dev, info->path, info->product_id, name); RGBController_BloodyMouse* rgb_controller = new RGBController_BloodyMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectBloodyB820R(hid_device_info* info, const std::string& name) +DetectedControllers DetectBloodyB820R(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { BloodyB820RController* controller = new BloodyB820RController(dev, info->path, name); RGBController_BloodyB820R* rgb_controller = new RGBController_BloodyB820R(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529); diff --git a/Controllers/AMBXController/AMBXControllerDetect.cpp b/Controllers/AMBXController/AMBXControllerDetect.cpp index 7a398cdd3..d7765b090 100644 --- a/Controllers/AMBXController/AMBXControllerDetect.cpp +++ b/Controllers/AMBXController/AMBXControllerDetect.cpp @@ -7,8 +7,8 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" #include "AMBXController.h" +#include "DetectionManager.h" #include "RGBController.h" #include "RGBController_AMBX.h" @@ -18,66 +18,60 @@ #include #endif -/******************************************************************************************\ -* * -* DetectAMBXControllers * -* * -* Detect Philips amBX Gaming devices * -* * -\******************************************************************************************/ - -void DetectAMBXControllers() +DetectedControllers DetectAMBXControllers() { - libusb_context* ctx = NULL; + DetectedControllers detected_controllers; + libusb_context* ctx = NULL; - if(libusb_init(&ctx) < 0) + if(libusb_init(&ctx) >= 0) { - return; - } + libusb_device** devs; + ssize_t num_devs = libusb_get_device_list(ctx, &devs); - libusb_device** devs; - ssize_t num_devs = libusb_get_device_list(ctx, &devs); - - if(num_devs <= 0) - { - libusb_exit(ctx); - return; - } - - for(ssize_t i = 0; i < num_devs; i++) - { - libusb_device* dev = devs[i]; - libusb_device_descriptor desc; - - if(libusb_get_device_descriptor(dev, &desc) != 0) + if(num_devs > 0) { - continue; + for(ssize_t i = 0; i < num_devs; i++) + { + libusb_device* dev = devs[i]; + libusb_device_descriptor desc; + + if(libusb_get_device_descriptor(dev, &desc) != 0) + { + continue; + } + + if(desc.idVendor == AMBX_VID && desc.idProduct == AMBX_PID) + { + uint8_t bus = libusb_get_bus_number(dev); + uint8_t address = libusb_get_device_address(dev); + char device_path[32]; + snprintf(device_path, sizeof(device_path), "%d-%d", bus, address); + + // Use the AMBXController to handle opening and initializing + AMBXController* controller = new AMBXController(device_path); + + if(controller->IsInitialized()) + { + RGBController_AMBX* rgb_controller = new RGBController_AMBX(controller); + detected_controllers.push_back(rgb_controller); + } + else + { + delete controller; + } + } + } + + libusb_free_device_list(devs, 1); + libusb_exit(ctx); } - - if(desc.idVendor == AMBX_VID && desc.idProduct == AMBX_PID) + else { - uint8_t bus = libusb_get_bus_number(dev); - uint8_t address = libusb_get_device_address(dev); - char device_path[32]; - snprintf(device_path, sizeof(device_path), "%d-%d", bus, address); - - // Use the AMBXController to handle opening and initializing - AMBXController* controller = new AMBXController(device_path); - - if(controller->IsInitialized()) - { - RGBController_AMBX* rgb_controller = new RGBController_AMBX(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } - else - { - delete controller; - } + libusb_exit(ctx); } } - libusb_free_device_list(devs, 1); - libusb_exit(ctx); + return(detected_controllers); } REGISTER_DETECTOR("Philips amBX", DetectAMBXControllers); diff --git a/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp b/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp index a182104ee..14ddb323a 100644 --- a/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp +++ b/Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp @@ -10,8 +10,8 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "AMDWraithPrismController.h" +#include "DetectionManager.h" #include "RGBController_AMDWraithPrism.h" /*---------------------------------------------------------*\ @@ -24,25 +24,22 @@ \*---------------------------------------------------------*/ #define AMD_WRAITH_PRISM_PID 0x0051 -/******************************************************************************************\ -* * -* DetectAMDWraithPrismControllers * -* * -* Tests the USB address to see if an AMD Wraith Prism controller exists there. * -* * -\******************************************************************************************/ - -void DetectAMDWraithPrismControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectAMDWraithPrismControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AMDWraithPrismController* controller = new AMDWraithPrismController(dev, info->path); RGBController_AMDWraithPrism* rgb_controller = new RGBController_AMDWraithPrism(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IP("AMD Wraith Prism", DetectAMDWraithPrismControllers, AMD_WRAITH_PRISM_VID, AMD_WRAITH_PRISM_PID, 1, 0xFF00); diff --git a/Controllers/AOCKeyboardController/AOCKeyboardControllerDetect.cpp b/Controllers/AOCKeyboardController/AOCKeyboardControllerDetect.cpp index fa4abd43a..60dbcfc7b 100644 --- a/Controllers/AOCKeyboardController/AOCKeyboardControllerDetect.cpp +++ b/Controllers/AOCKeyboardController/AOCKeyboardControllerDetect.cpp @@ -13,32 +13,29 @@ #include "AOCKeyboardController.h" #include "RGBController_AOCKeyboard.h" -/*-----------------------------------------------------*\ -| AOC Keyboard IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| AOC Keyboard IDs | +\*---------------------------------------------------------*/ #define AOC_VID 0x3938 #define AOC_GK500_PID 0x1178 #define AOC_GK500_PID_2 0x1229 -/******************************************************************************************\ -* * -* DetectAOCKeyboardControllers * -* * -* Tests the USB address to see if an AOC Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectAOCKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAOCKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AOCKeyboardController* controller = new AOCKeyboardController(dev, info->path, name); RGBController_AOCKeyboard* rgb_controller = new RGBController_AOCKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("AOC GK500", DetectAOCKeyboardControllers, AOC_VID, AOC_GK500_PID, 0xFF19, 0xFF19); diff --git a/Controllers/AOCMouseController/AOCMouseControllerDetect.cpp b/Controllers/AOCMouseController/AOCMouseControllerDetect.cpp index df66c2090..aae3217ef 100644 --- a/Controllers/AOCMouseController/AOCMouseControllerDetect.cpp +++ b/Controllers/AOCMouseController/AOCMouseControllerDetect.cpp @@ -13,31 +13,28 @@ #include "AOCMouseController.h" #include "RGBController_AOCMouse.h" -/*-----------------------------------------------------*\ -| AOC Mouse IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| AOC Mouse IDs | +\*---------------------------------------------------------*/ #define AOC_VID 0x3938 #define AOC_GM500_PID 0x1179 -/******************************************************************************************\ -* * -* DetectAOCMouseControllers * -* * -* Tests the USB address to see if an AOC Mouse controller exists there. * -* * -\******************************************************************************************/ - -void DetectAOCMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAOCMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AOCMouseController* controller = new AOCMouseController(dev, info->path, name); RGBController_AOCMouse* rgb_controller = new RGBController_AOCMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("AOC GM500", DetectAOCMouseControllers, AOC_VID, AOC_GM500_PID, 1, 0xFF19, 0xFF19); diff --git a/Controllers/AOCMousematController/AOCMousematControllerDetect.cpp b/Controllers/AOCMousematController/AOCMousematControllerDetect.cpp index e250798e1..9849cf191 100644 --- a/Controllers/AOCMousematController/AOCMousematControllerDetect.cpp +++ b/Controllers/AOCMousematController/AOCMousematControllerDetect.cpp @@ -13,31 +13,28 @@ #include "AOCMousematController.h" #include "RGBController_AOCMousemat.h" -/*-----------------------------------------------------*\ -| AOC Mousemat IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| AOC Mousemat IDs | +\*---------------------------------------------------------*/ #define AOC_VID 0x3938 #define AOC_AMM700_PID 0x1162 -/******************************************************************************************\ -* * -* DetectAOCMousematControllers * -* * -* Tests the USB address to see if an AOC Mousemat controller exists there. * -* * -\******************************************************************************************/ - -void DetectAOCMousematControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAOCMousematControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AOCMousematController* controller = new AOCMousematController(dev, info->path, name); RGBController_AOCMousemat* rgb_controller = new RGBController_AOCMousemat(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("AOC AGON AMM700", DetectAOCMousematControllers, AOC_VID, AOC_AMM700_PID, 1, 0xFF19, 0xFF19); diff --git a/Controllers/ASRockPolychromeUSBController/ASRockPolychromeUSBControllerDetect.cpp b/Controllers/ASRockPolychromeUSBController/ASRockPolychromeUSBControllerDetect.cpp index cb46010d6..7baae0cdb 100644 --- a/Controllers/ASRockPolychromeUSBController/ASRockPolychromeUSBControllerDetect.cpp +++ b/Controllers/ASRockPolychromeUSBController/ASRockPolychromeUSBControllerDetect.cpp @@ -11,8 +11,8 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "ASRockPolychromeUSBController.h" +#include "DetectionManager.h" #include "RGBController_ASRockPolychromeUSB.h" /*---------------------------------------------------------*\ @@ -26,16 +26,22 @@ #define ASROCK_MOTHERBOARD_1_PID 0x01A2 #define ASROCK_DESKMINI_ADDRESSABLE_LED_STRIP_PID 0x01A6 -void DetectPolychromeUSBControllers(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectPolychromeUSBControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { PolychromeUSBController* controller = new PolychromeUSBController(dev, info->path); RGBController_PolychromeUSB* rgb_controller = new RGBController_PolychromeUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("ASRock Polychrome USB", DetectPolychromeUSBControllers, ASROCK_VID, ASROCK_MOTHERBOARD_1_PID); diff --git a/Controllers/ASRockSMBusController/ASRockSMBusControllerDetect.cpp b/Controllers/ASRockSMBusController/ASRockSMBusControllerDetect.cpp index dc9d1de7d..451328d97 100644 --- a/Controllers/ASRockSMBusController/ASRockSMBusControllerDetect.cpp +++ b/Controllers/ASRockSMBusController/ASRockSMBusControllerDetect.cpp @@ -22,15 +22,6 @@ #include "i2c_smbus.h" #include "pci_ids.h" -/*******************************************************************************************\ -* * -* TestForPolychromeSMBusController * -* * -* Tests the given address to see if an ASRock RGB controller exists there. * -* First does a quick write to test for a response * -* * -\*******************************************************************************************/ - #define ASROCK_DETECTOR_NAME "ASRock SMBus Detectector" #define VENDOR_NAME "ASRock" #define SMBUS_ADDRESS 0x6A @@ -67,7 +58,7 @@ bool TestForPolychromeSMBusController(i2c_smbus_interface* bus, uint8_t address) return(pass); -} /* TestForPolychromeController() */ +} uint16_t GetFirmwareVersion(i2c_smbus_interface* bus, uint8_t address) { @@ -94,20 +85,10 @@ uint16_t GetFirmwareVersion(i2c_smbus_interface* bus, uint8_t address) } } -/******************************************************************************************\ -* * -* DetectPolychromeControllers * -* * -* Detect ASRock Polychrome RGB SMBus controllers on the enumerated I2C busses at * -* address 0x6A. * -* * -* bus - pointer to i2c_smbus_interface where Polychrome device is connected * -* dev - I2C address of Polychrome device * -* * -\******************************************************************************************/ - -void DetectASRockSMBusControllers(std::vector& busses) +DetectedControllers DetectASRockSMBusControllers(std::vector& busses) { + DetectedControllers detected_controllers; + for(unsigned int bus = 0; bus < busses.size(); bus++) { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) @@ -123,7 +104,7 @@ void DetectASRockSMBusControllers(std::vector& busses) u16_to_u8 version; version.u16 = GetFirmwareVersion(busses[bus], SMBUS_ADDRESS); - switch (version.msb) + switch(version.msb) { case ASROCK_TYPE_ASRLED: { @@ -131,7 +112,7 @@ void DetectASRockSMBusControllers(std::vector& busses) ASRockASRRGBSMBusController* controller = new ASRockASRRGBSMBusController(busses[bus], SMBUS_ADDRESS); controller-> fw_version = version.u16; RGBController_ASRockASRRGBSMBus* rgb_controller = new RGBController_ASRockASRRGBSMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; @@ -141,7 +122,7 @@ void DetectASRockSMBusControllers(std::vector& busses) ASRockPolychromeV1SMBusController* controller = new ASRockPolychromeV1SMBusController(busses[bus], SMBUS_ADDRESS); controller-> fw_version = version.u16; RGBController_ASRockPolychromeV1SMBus* rgb_controller = new RGBController_ASRockPolychromeV1SMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; @@ -151,7 +132,7 @@ void DetectASRockSMBusControllers(std::vector& busses) ASRockPolychromeV2SMBusController* controller = new ASRockPolychromeV2SMBusController(busses[bus], SMBUS_ADDRESS); controller-> fw_version = version.u16; RGBController_ASRockPolychromeV2SMBus* rgb_controller = new RGBController_ASRockPolychromeV2SMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; @@ -172,6 +153,7 @@ void DetectASRockSMBusControllers(std::vector& busses) } } -} /* DetectSMBusPolychromeControllers() */ + return(detected_controllers); +} REGISTER_I2C_DETECTOR("ASRock Motherboard SMBus Controllers", DetectASRockSMBusControllers); diff --git a/Controllers/AlienwareController/AlienwareControllerDetect.cpp b/Controllers/AlienwareController/AlienwareControllerDetect.cpp index 03eb36d5a..17e97b5cb 100644 --- a/Controllers/AlienwareController/AlienwareControllerDetect.cpp +++ b/Controllers/AlienwareController/AlienwareControllerDetect.cpp @@ -7,8 +7,8 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" #include "AlienwareController.h" +#include "DetectionManager.h" #include "RGBController_Alienware.h" /*---------------------------------------------------------*\ @@ -22,17 +22,22 @@ #define ALIENWARE_G_SERIES_PID1 0x0550 #define ALIENWARE_G_SERIES_PID2 0x0551 -void DetectAlienwareControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAlienwareControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AlienwareController* controller = new AlienwareController(dev, *info, name); RGBController_Alienware* rgb_controller = new RGBController_Alienware(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID1); diff --git a/Controllers/AlienwareKeyboardController/AlienwareKeyboardControllerDetect.cpp b/Controllers/AlienwareKeyboardController/AlienwareKeyboardControllerDetect.cpp index d452b248d..5e2556718 100644 --- a/Controllers/AlienwareKeyboardController/AlienwareKeyboardControllerDetect.cpp +++ b/Controllers/AlienwareKeyboardController/AlienwareKeyboardControllerDetect.cpp @@ -9,54 +9,57 @@ #include #include "DetectionManager.h" -#include "AlienwareAW510KController.h" #include "AlienwareAW410KController.h" -#include "RGBController_AlienwareAW510K.h" +#include "AlienwareAW510KController.h" #include "RGBController_AlienwareAW410K.h" +#include "RGBController_AlienwareAW510K.h" -/*-----------------------------------------------------*\ -| Alienware vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Alienware vendor ID | +\*---------------------------------------------------------*/ #define ALIENWARE_VID 0x04F2 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define ALIENWARE_AW510K_PID 0x1830 #define ALIENWARE_AW410K_PID 0x1968 -/******************************************************************************************\ -* * -* DetectAlienwareKeyboardControllers * -* * -* Tests the USB address to see if a Alienware RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectAlienwareAW510KControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAlienwareAW510KControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - if( dev ) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { AlienwareAW510KController* controller = new AlienwareAW510KController(dev, info->path, name); RGBController_AlienwareAW510K* rgb_controller = new RGBController_AlienwareAW510K(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAlienwareAW410KControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAlienwareAW410KControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - if( dev ) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { AlienwareAW410KController* controller = new AlienwareAW410KController(dev, info->path, name); RGBController_AlienwareAW410K* rgb_controller = new RGBController_AlienwareAW410K(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -}/* DetectAlienwareKeyboardControllers() */ + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("Alienware AW510K", DetectAlienwareAW510KControllers, ALIENWARE_VID, ALIENWARE_AW510K_PID, 0x02, 0xFF00, 0x01); REGISTER_HID_DETECTOR_IPU("Alienware AW410K", DetectAlienwareAW410KControllers, ALIENWARE_VID, ALIENWARE_AW410K_PID, 0x02, 0xFF00, 0x01); diff --git a/Controllers/AlienwareMonitorController/AlienwareMonitorControllerDetect.cpp b/Controllers/AlienwareMonitorController/AlienwareMonitorControllerDetect.cpp index 98fa72f6c..4d40964be 100644 --- a/Controllers/AlienwareMonitorController/AlienwareMonitorControllerDetect.cpp +++ b/Controllers/AlienwareMonitorController/AlienwareMonitorControllerDetect.cpp @@ -9,12 +9,12 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" +#include #include "AlienwareAW3423DWFController.h" #include "AlienwareMonitorController.h" +#include "DetectionManager.h" #include "RGBController_AlienwareAW3423DWF.h" #include "RGBController_AlienwareMonitor.h" -#include /*---------------------------------------------------------*\ | Alienware Vendor ID | @@ -29,37 +29,40 @@ #define ALIENWARE_USAGE_PAGE 0xFFDA #define ALIENWARE_USAGE 0x00DA -/******************************************************************************************\ -* * -* AlienwareAW3423DWFControllerDetect * -* * -* Tests the USB address to see if an Alienware AW3423DWF exists there. * -* * -\******************************************************************************************/ - -void DetectAlienwareAW3423DWFControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectAlienwareAW3423DWFControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { AlienwareAW3423DWFController* controller = new AlienwareAW3423DWFController(dev, info->path); RGBController_AlienwareAW3423DWF* rgb_controller = new RGBController_AlienwareAW3423DWF(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAlienwareMonitorControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAlienwareMonitorControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AlienwareMonitorController* controller = new AlienwareMonitorController(dev, info->path, name); RGBController_AlienwareMonitor* rgb_controller = new RGBController_AlienwareMonitor(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Alienware AW3423DWF", DetectAlienwareAW3423DWFControllers, ALIENWARE_VID, ALIENWARE_AW3423DWF_PID); diff --git a/Controllers/AnnePro2Controller/AnnePro2ControllerDetect.cpp b/Controllers/AnnePro2Controller/AnnePro2ControllerDetect.cpp index e5df30f30..4477d48df 100644 --- a/Controllers/AnnePro2Controller/AnnePro2ControllerDetect.cpp +++ b/Controllers/AnnePro2Controller/AnnePro2ControllerDetect.cpp @@ -9,10 +9,10 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" -#include "AnnePro2Controller.h" -#include "RGBController_AnnePro2.h" #include +#include "AnnePro2Controller.h" +#include "DetectionManager.h" +#include "RGBController_AnnePro2.h" /*---------------------------------------------------------*\ | Anne Pro 2 vendor IDs | @@ -29,25 +29,22 @@ #define ANNE_PRO_2_PID_4 0xA293 #define ANNE_PRO_2_PID_5 0xA297 -/******************************************************************************************\ -* * -* DetectAnnePro2Controllers * -* * -* Tests the USB address to see if an Obins Lab AnnePro2 keyboard exists there. * -* * -\******************************************************************************************/ - -void DetectAnnePro2Controllers(hid_device_info* info, const std::string&) +DetectedControllers DetectAnnePro2Controllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AnnePro2Controller* controller = new AnnePro2Controller(dev, info->path); RGBController_AnnePro2* rgb_controller = new RGBController_AnnePro2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_I("Anne Pro 2", DetectAnnePro2Controllers, ANNE_PRO_2_VID_1, ANNE_PRO_2_PID_1, 1); diff --git a/Controllers/ArcticController/ArcticControllerDetect.cpp b/Controllers/ArcticController/ArcticControllerDetect.cpp index 6fa57e256..eb43328b4 100644 --- a/Controllers/ArcticController/ArcticControllerDetect.cpp +++ b/Controllers/ArcticController/ArcticControllerDetect.cpp @@ -10,17 +10,20 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "ArcticController.h" -#include "RGBController_Arctic.h" +#include "DetectionManager.h" #include "find_usb_serial_port.h" +#include "RGBController_Arctic.h" #define CH341_VID 0x1A86 #define CH341_PID 0x7523 -void DetectArcticControllers() +DetectedControllers DetectArcticControllers() { - std::vector ports = find_usb_serial_port(CH341_VID, CH341_PID); + DetectedControllers detected_controllers; + std::vector ports; + + ports = find_usb_serial_port(CH341_VID, CH341_PID); for(unsigned int device = 0; device < ports.size(); device++) { @@ -29,7 +32,7 @@ void DetectArcticControllers() if(controller->IsPresent()) { RGBController_Arctic *rgb_controller = new RGBController_Arctic(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -38,6 +41,8 @@ void DetectArcticControllers() delete ports[device]; } + + return(detected_controllers); } REGISTER_DETECTOR("Arctic RGB controller", DetectArcticControllers); diff --git a/Controllers/AresonController/AresonControllerDetect.cpp b/Controllers/AresonController/AresonControllerDetect.cpp index 25e3cf779..a90622be7 100644 --- a/Controllers/AresonController/AresonControllerDetect.cpp +++ b/Controllers/AresonController/AresonControllerDetect.cpp @@ -28,17 +28,22 @@ #define REDRAGON_M914_PID 0xFA7B #define REDRAGON_M914_WIRELESS_PID 0xFA7C -void DetectAresonControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAresonControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AresonController* controller = new AresonController(dev, *info, name); RGBController_Areson* rgb_controller = new RGBController_Areson(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("ZET GAMING Edge Air Pro (Wireless)", DetectAresonControllers, ARESON_VID, ZET_GAMING_EDGE_AIR_PRO_WIRELESS_PID, 1, 0xFF02, 2); diff --git a/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp b/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp index 2ab0034c5..f0a31e8aa 100644 --- a/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp +++ b/Controllers/AsusAuraCoreController/AsusAuraCoreControllerDetect.cpp @@ -19,17 +19,12 @@ #define AURA_CORE_VID 0x0B05 -/******************************************************************************************\ -* * -* DetectAuraCoreControllers * -* * -* Tests the USB address to see if an Asus ROG Aura Core controller exists there * -* * -\******************************************************************************************/ - -void DetectAsusAuraCoreControllers(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectAsusAuraCoreControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -38,26 +33,33 @@ void DetectAsusAuraCoreControllers(hid_device_info* info, const std::string& /*n if(rgb_controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN) { - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { delete rgb_controller; } } + + return(detected_controllers); } -void DetectAsusAuraCoreLaptopControllers(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectAsusAuraCoreLaptopControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AsusAuraCoreLaptopController* controller = new AsusAuraCoreLaptopController(dev, info->path); RGBController_AsusAuraCoreLaptop* rgb_controller = new RGBController_AsusAuraCoreLaptop(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } diff --git a/Controllers/AsusAuraGPUController/AsusAuraGPUControllerDetect.cpp b/Controllers/AsusAuraGPUController/AsusAuraGPUControllerDetect.cpp index f108f0048..8c5c91a69 100644 --- a/Controllers/AsusAuraGPUController/AsusAuraGPUControllerDetect.cpp +++ b/Controllers/AsusAuraGPUController/AsusAuraGPUControllerDetect.cpp @@ -19,14 +19,6 @@ #define ASUSGPU_CONTROLLER_NAME "ASUS Aura GPU" -/******************************************************************************************\ -* * -* TestForAuraGPUController * -* * -* Tests the given address to see if an Aura GPU controller exists there. * -* * -\******************************************************************************************/ - bool TestForAsusAuraGPUController(i2c_smbus_interface* bus, unsigned char address) { if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus)) @@ -48,31 +40,26 @@ bool TestForAsusAuraGPUController(i2c_smbus_interface* bus, unsigned char addres return(pass); -} /* TestForAuraGPUController() */ +} -/******************************************************************************************\ -* * -* DetectAuraGPUControllers * -* * -* Detect Aura GPU controllers on the enumerated I2C busses. * -* * -\******************************************************************************************/ - -void DetectAsusAuraGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectAsusAuraGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForAsusAuraGPUController(bus, i2c_addr)) { AuraGPUController* controller = new AuraGPUController(bus, i2c_addr, name); RGBController_AuraGPU* rgb_controller = new RGBController_AuraGPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectAsusAuraGPUControllers() */ -/*-----------------------------------------*\ -| Nvidia GPUs | -\*-----------------------------------------*/ + return(detected_controllers); +} +/*---------------------------------------------------------*\ +| Nvidia GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050_DEV, ASUS_SUB_VEN, ASUS_GTX1050_STRIX_O2G_GAMING, 0x29); REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Ti Gaming", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_4G_GAMING, 0x29); REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce GTX 1050 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_GTX1050TI_O4G_GAMING, 0x29); @@ -131,10 +118,9 @@ REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti A11G Gaming", REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 2080 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX2080TI_O11G_GAMING, 0x2A); REGISTER_I2C_PCI_DETECTOR("ASUS TUF GeForce RTX 3060 Ti Gaming OC", DetectAsusAuraGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_LHR_DEV, ASUS_SUB_VEN, ASUS_TUF_RTX_3060TI_O8G_OC, 0x2A); -/*-----------------------------------------*\ -| AMD GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| AMD GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("ASUS AREZ STRIX Radeon RX Vega 56 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_AREZ_STRIX_VEGA56_08G_GAMING, 0x29); REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon Vega 64", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_VEGA10_DEV, ASUS_SUB_VEN, ASUS_VEGA64_STRIX, 0x29); REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 470 Gaming OC", DetectAsusAuraGPUControllers, AMD_GPU_VEN, AMD_POLARIS_DEV, ASUS_SUB_VEN, ASUS_RX470_STRIX_O4G_GAMING, 0x29); diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 9ebfe4c04..6f570d182 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -143,22 +143,30 @@ AuraKeyboardMappingLayoutType GetKeyboardMappingLayoutType(int pid) } } -void DetectAsusAuraUSBTerminal(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBTerminal(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AuraAddressableController* controller = new AuraAddressableController(dev, info->path, name); RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBAddressable(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectAsusAuraUSBAddressable(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -166,13 +174,18 @@ void DetectAsusAuraUSBAddressable(hid_device_info* info, const std::string& /*na AuraAddressableController* controller = new AuraAddressableController(dev, info->path, "ASUS " + dmi.getMainboard() + " Addressable"); RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -182,7 +195,7 @@ void DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& /*n AuraMainboardController* controller = new AuraMainboardController(dev, info->path, "ASUS " + dmi.getMainboard()); RGBController_AuraMainboard* rgb_controller = new RGBController_AuraMainboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } catch(const std::runtime_error& ex) { @@ -190,11 +203,16 @@ void DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& /*n LOG_ERROR("[AsusAuraUSB] An error occured while reading the config table: %s", ex.what()); } } + + return(detected_controllers); } -void DetectAsusAuraUSBKeyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBKeyboards(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -202,13 +220,18 @@ void DetectAsusAuraUSBKeyboards(hid_device_info* info, const std::string& name) AuraKeyboardMappingLayoutType layout = GetKeyboardMappingLayoutType(info->product_id); RGBController_AuraKeyboard* rgb_controller = new RGBController_AuraKeyboard(controller, layout); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -216,125 +239,172 @@ void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) AuraMouseController* controller = new AuraMouseController(dev, info->path, pid, name); RGBController_AuraMouse* rgb_controller = new RGBController_AuraMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBMousemats(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBMousemats(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AuraMousematController* controller = new AuraMousematController(dev, info->path, name); RGBController_AuraMousemat* rgb_controller = new RGBController_AuraMousemat(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBROGStrixLC(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBROGStrixLC(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AsusROGStrixLCController* controller = new AsusROGStrixLCController(dev, info->path, name); RGBController_AsusROGStrixLC* rgb_controller = new RGBController_AsusROGStrixLC(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBRyuoAIO(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBRyuoAIO(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - AsusAuraRyuoAIOController* controller = new AsusAuraRyuoAIOController(dev, info->path, name); + AsusAuraRyuoAIOController* controller = new AsusAuraRyuoAIOController(dev, info->path, name); RGBController_AsusAuraRyuoAIO* rgb_controller = new RGBController_AsusAuraRyuoAIO(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBStrixEvolve(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBStrixEvolve(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - AsusAuraMouseGen1Controller* controller = new AsusAuraMouseGen1Controller(dev, info->path, info->product_id, name); + AsusAuraMouseGen1Controller* controller = new AsusAuraMouseGen1Controller(dev, info->path, info->product_id, name); RGBController_AsusROGStrixEvolve* rgb_controller = new RGBController_AsusROGStrixEvolve(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBSpatha(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBSpatha(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - AsusAuraMouseGen1Controller* controller = new AsusAuraMouseGen1Controller(dev, info->path, info->product_id, name); - RGBController_AsusROGSpatha* rgb_controller = new RGBController_AsusROGSpatha(controller); + AsusAuraMouseGen1Controller* controller = new AsusAuraMouseGen1Controller(dev, info->path, info->product_id, name); + RGBController_AsusROGSpatha* rgb_controller = new RGBController_AsusROGSpatha(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBHeadsetStand(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBHeadsetStand(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AuraHeadsetStandController* controller = new AuraHeadsetStandController(dev, info->path, name); RGBController_AuraHeadsetStand* rgb_controller = new RGBController_AuraHeadsetStand(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraTUFUSBKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraTUFUSBKeyboard(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AuraTUFKeyboardController* controller = new AuraTUFKeyboardController(dev, info->path, info->product_id, info->release_number, name); RGBController_AuraTUFKeyboard* rgb_controller = new RGBController_AuraTUFKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusAuraUSBMonitor(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusAuraUSBMonitor(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AuraMonitorController* controller = new AuraMonitorController(dev, info->path, info->product_id, name); RGBController_AuraMonitor* rgb_controller = new RGBController_AuraMonitor(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusROGAlly(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusROGAlly(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { ROGAllyController* controller = new ROGAllyController(dev, info->path, name); RGBController_AsusROGAlly* rgb_controller = new RGBController_AsusROGAlly(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*-----------------------------------------------------------------*\ diff --git a/Controllers/AsusLegacyUSBController/AsusLegacyUSBControllerDetect.cpp b/Controllers/AsusLegacyUSBController/AsusLegacyUSBControllerDetect.cpp index 11904cbef..2893c69ed 100644 --- a/Controllers/AsusLegacyUSBController/AsusLegacyUSBControllerDetect.cpp +++ b/Controllers/AsusLegacyUSBController/AsusLegacyUSBControllerDetect.cpp @@ -23,43 +23,58 @@ #define ASUS_SAGARIS_GK1100_PID 0x1835 #define ASUS_ROG_STRIX_CLAW_PID 0x1016 -void DetectAsusCerberusMech(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusCerberusMech(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AsusCerberusKeyboardController* controller = new AsusCerberusKeyboardController(dev, info->path, info->release_number, name); RGBController_AsusCerberusKeyboard* rgb_controller = new RGBController_AsusCerberusKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusSagarisKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusSagarisKeyboard(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AsusSagarisKeyboardController* controller = new AsusSagarisKeyboardController(dev, info->path, info->release_number, name); RGBController_AsusSagarisKeyboard* rgb_controller = new RGBController_AsusSagarisKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectAsusStrixClaw(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusStrixClaw(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { StrixClawController* controller = new StrixClawController(dev, info->path, name); RGBController_StrixClaw* rgb_controller = new RGBController_StrixClaw(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("ASUS Cerberus Mech", DetectAsusCerberusMech, ASUS_LEGACY_USB_VID, ASUS_CERBERUS_MECH_PID, 1, 0xFF01, 1); diff --git a/Controllers/AsusMonitorController/AsusMonitorControllerDetect.cpp b/Controllers/AsusMonitorController/AsusMonitorControllerDetect.cpp index f69ffd2be..909ddf76a 100644 --- a/Controllers/AsusMonitorController/AsusMonitorControllerDetect.cpp +++ b/Controllers/AsusMonitorController/AsusMonitorControllerDetect.cpp @@ -25,17 +25,22 @@ #define ASUS_ROG_SWIFT_XG27UCG_PID 0x1BB4 #define ASUS_ROG_SWIFT_PG32UCDM_PID 0x1B2B -void DetectAsusMonitorControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectAsusMonitorControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { AsusMonitorController* controller = new AsusMonitorController(dev, *info, name); RGBController_AsusMonitor* rgb_controller = new RGBController_AsusMonitor(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Asus ROG STRIX XG27AQDMG", DetectAsusMonitorControllers, ASUS_VID, ASUS_ROG_STRIX_XG27AQDMG_PID, 1, 0xFF72, 0x00A1); diff --git a/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Linux.cpp b/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Linux.cpp index 751413299..71e05a2ed 100644 --- a/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Linux.cpp +++ b/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Linux.cpp @@ -12,14 +12,15 @@ #include "DetectionManager.h" #include "RGBController_AsusTUFLaptop_Linux.h" -static void DetectAsusTUFLaptopLinuxControllers() +DetectedControllers DetectAsusTUFLaptopLinuxControllers() { /*-------------------------------------------------------------------------------------*\ | If /sys/devices/platform/asus-nb-wmi/leds/asus::kbd_backlight/kbd_rgb_mode exists, | | the kernel support TUF Laptop keyboard LED controlling. | \*-------------------------------------------------------------------------------------*/ + DetectedControllers detected_controllers; + std::string s = ""; - std::string s = ""; s.append(ASUS_KBD_BACKLIGHT_BASE_PATH); s.append(ASUS_KBD_BACKLIGHT_MODE_PATH); @@ -27,9 +28,11 @@ static void DetectAsusTUFLaptopLinuxControllers() { AsusTUFLaptopLinuxController* controller = new AsusTUFLaptopLinuxController(); RGBController_AsusTUFLaptopLinux* rgb_controller = new RGBController_AsusTUFLaptopLinux(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } - return; + + return(detected_controllers); } REGISTER_DETECTOR("ASUS TUF Laptop", DetectAsusTUFLaptopLinuxControllers); diff --git a/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Windows.cpp b/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Windows.cpp index 8ef85fd95..4001dbc8a 100644 --- a/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Windows.cpp +++ b/Controllers/AsusTUFLaptopController/AsusTUFLaptopDetect_Windows.cpp @@ -12,41 +12,38 @@ #include "RGBController_AsusTUFLaptop_Windows.h" #include "wmi.h" -static void DetectAsusTUFLaptopWMIControllers() +DetectedControllers DetectAsusTUFLaptopWMIControllers() { // Try to retrieve ProductID / Device name from WMI; Possibly can be rewritten to use wmi.cpp // IF you encounter false detection ( e.g. if your laptop keyboard backlight uses USB interface // instead of ACPI WMI) please add a WHITELIST by checking the // `name` variable for model substrings like "FX505DU" // For now, checking for "TUF Gaming" should suffice + DetectedControllers detected_controllers; + Wmi wmi; + std::vector systemProduct; - Wmi wmi; - - std::vector systemProduct; - if (wmi.query("SELECT * FROM Win32_ComputerSystemProduct", systemProduct)) + if(wmi.query("SELECT * FROM Win32_ComputerSystemProduct", systemProduct) != 0) { - return; + // There should only be one, a cycle is a precaution + if(systemProduct.size() == 1) + { + std::string& name = systemProduct[0]["Name"]; + + if(name.find("TUF Gaming") != name.npos) + { + AsusTUFLaptopController* controller = AsusTUFLaptopController::checkAndCreate(); + if(controller) + { + RGBController* rgb_controller = new RGBController_AsusTUFLaptopWMI(controller); + + detected_controllers.push_back(rgb_controller); + } + } + } } - // There should only be one, a cycle is a precaution - if(systemProduct.size() != 1) - { - return; - } - std::string& name = systemProduct[0]["Name"]; - - if(name.find("TUF Gaming") == name.npos) - { - return; - } - - AsusTUFLaptopController* controller = AsusTUFLaptopController::checkAndCreate(); - if(controller) - { - RGBController* new_controller = new RGBController_AsusTUFLaptopWMI(controller); - - DetectionManager::get()->RegisterRGBController(new_controller); - } + return(detected_controllers); } /* DetectAsusTUFLaptopWMIControllers() */ REGISTER_DETECTOR("ASUS TUF Laptop", DetectAsusTUFLaptopWMIControllers); diff --git a/Controllers/BlinkyTapeController/BlinkyTapeControllerDetect.cpp b/Controllers/BlinkyTapeController/BlinkyTapeControllerDetect.cpp index 9ac1e660c..1056280e7 100644 --- a/Controllers/BlinkyTapeController/BlinkyTapeControllerDetect.cpp +++ b/Controllers/BlinkyTapeController/BlinkyTapeControllerDetect.cpp @@ -15,23 +15,16 @@ #include "RGBController_BlinkyTape.h" #include "find_usb_serial_port.h" -/*-----------------------------------------------------*\ -| BlinkyTape VID and PID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| BlinkyTape VID and PID | +\*---------------------------------------------------------*/ #define BLINKINLABS_VID 0x1D50 #define BLINKYTAPE_PID 0x605E -/******************************************************************************************\ -* * -* DetectBlinkyTapeControllers * -* * -* Detect BlinkyTape devices * -* * -\******************************************************************************************/ - -void DetectBlinkyTapeControllers() +DetectedControllers DetectBlinkyTapeControllers() { - std::vector device_locations = find_usb_serial_port(BLINKINLABS_VID, BLINKYTAPE_PID); + DetectedControllers detected_controllers; + std::vector device_locations = find_usb_serial_port(BLINKINLABS_VID, BLINKYTAPE_PID); for(unsigned int device_idx = 0; device_idx < device_locations.size(); device_idx++) { @@ -39,8 +32,11 @@ void DetectBlinkyTapeControllers() controller->Initialize(*device_locations[device_idx]); RGBController_BlinkyTape* rgb_controller = new RGBController_BlinkyTape(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_DETECTOR("BlinkyTape", DetectBlinkyTapeControllers); diff --git a/Controllers/CherryKeyboardController/CherryKeyboardControllerDetect.cpp b/Controllers/CherryKeyboardController/CherryKeyboardControllerDetect.cpp index 1eafe2e2a..66333e1a9 100644 --- a/Controllers/CherryKeyboardController/CherryKeyboardControllerDetect.cpp +++ b/Controllers/CherryKeyboardController/CherryKeyboardControllerDetect.cpp @@ -14,35 +14,33 @@ #include "CherryKeyboardController.h" #include "RGBController_CherryKeyboard.h" -/*-----------------------------------------------------*\ -| Cherry keyboard VID and usage page | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Cherry keyboard VID and usage page | +\*---------------------------------------------------------*/ #define CHERRY_KEYBOARD_VID 0x046A #define CHERRY_KEYBOARD_USAGE_PAGE 0xFF1C -/******************************************************************************************\ -* * -* DetectCherryKeyboards * -* * -* Tests the USB address to see if an Cherry RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectCherryKeyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectCherryKeyboards(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - if( dev ) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { CherryKeyboardController* controller = new CherryKeyboardController(dev, info->path, name); RGBController_CherryKeyboard* rgb_controller = new RGBController_CherryKeyboard(controller, info->product_id); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -/*---------------------------------------------------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*---------------------------------------------------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 3.0S FL NBL", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_3_0S_FL_NBL_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE); REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 3.0S FL RGB", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_3_0S_FL_RGB_PID , 1, CHERRY_KEYBOARD_USAGE_PAGE); REGISTER_HID_DETECTOR_IP("Cherry Keyboard MX BOARD 3.0S FL RGB KOREAN", DetectCherryKeyboards, CHERRY_KEYBOARD_VID, MX_BOARD_3_0S_FL_RGB_KOR_PID, 1, CHERRY_KEYBOARD_USAGE_PAGE); diff --git a/Controllers/ColorfulGPUController/ColorfulGPUControllerDetect.cpp b/Controllers/ColorfulGPUController/ColorfulGPUControllerDetect.cpp index d80c03767..86222dc2d 100644 --- a/Controllers/ColorfulGPUController/ColorfulGPUControllerDetect.cpp +++ b/Controllers/ColorfulGPUController/ColorfulGPUControllerDetect.cpp @@ -7,12 +7,12 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" -#include "LogManager.h" #include "ColorfulGPUController.h" -#include "RGBController_ColorfulGPU.h" +#include "DetectionManager.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_ColorfulGPU.h" bool TestForColorfulGPU(i2c_smbus_interface* bus, uint8_t i2c_addr) { @@ -33,15 +33,19 @@ bool TestForColorfulGPU(i2c_smbus_interface* bus, uint8_t i2c_addr) return res >= 0 && (read_pkt[0] == 0xAA && read_pkt[1] == 0xEF && read_pkt[2] == 0x81); } -void DetectColorfulGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectColorfulGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForColorfulGPU(bus, i2c_addr)) { ColorfulGPUController* controller = new ColorfulGPUController(bus, i2c_addr, name); RGBController_ColorfulGPU* rgb_controller = new RGBController_ColorfulGPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 3060 Advanced OC 12G L-V", DetectColorfulGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_LHR_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_3060_ADVANCED_OC_12G_LV, 0x61); diff --git a/Controllers/ColorfulTuringGPUController/ColorfulTuringGPUControllerDetect.cpp b/Controllers/ColorfulTuringGPUController/ColorfulTuringGPUControllerDetect.cpp index e11fe61a2..5c757ba65 100644 --- a/Controllers/ColorfulTuringGPUController/ColorfulTuringGPUControllerDetect.cpp +++ b/Controllers/ColorfulTuringGPUController/ColorfulTuringGPUControllerDetect.cpp @@ -7,21 +7,25 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" #include "ColorfulTuringGPUController.h" -#include "RGBController_ColorfulTuringGPU.h" +#include "DetectionManager.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "RGBController_ColorfulTuringGPU.h" -void DetectColorfulTuringGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectColorfulTuringGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(bus->port_id == 1) { - ColorfulTuringGPUController* controller = new ColorfulTuringGPUController(bus, i2c_addr, name); + ColorfulTuringGPUController* controller = new ColorfulTuringGPUController(bus, i2c_addr, name); RGBController_ColorfulTuringGPU* rgb_controller = new RGBController_ColorfulTuringGPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_I2C_PCI_DETECTOR("iGame GeForce RTX 2070 SUPER Advanced OC-V", DetectColorfulTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, COLORFUL_SUB_VEN, COLORFUL_IGAME_RTX_2070_SUPER_ADVANCED_OCV, 0x50); diff --git a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp index 28431ae3d..188ba6ed8 100644 --- a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp +++ b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp @@ -7,16 +7,16 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| OpenRGB includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| OpenRGB includes | +\*---------------------------------------------------------*/ #include #include "DetectionManager.h" #include "LogManager.h" -/*-----------------------------------------------------*\ -| Coolermaster specific includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster specific includes | +\*---------------------------------------------------------*/ #include "RGBController_CMMMController.h" #include "RGBController_CMMM711Controller.h" #include "RGBController_CMMM712Controller.h" @@ -30,24 +30,24 @@ #include "RGBController_CMGD160Controller.h" #include "RGBController_CMKeyboardController.h" -/*-----------------------------------------------------*\ -| Coolermaster USB vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster USB vendor ID | +\*---------------------------------------------------------*/ #define COOLERMASTER_VID 0x2516 -/*-----------------------------------------------------*\ -| Coolermaster Keyboards | -| PIDs defined in `CMMKControllerV2.h` | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Keyboards | +| PIDs defined in `CMMKControllerV2.h` | +\*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| Coolermaster GPUs | -| PIDs defined in `CMR6000Controller.h` | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster GPUs | +| PIDs defined in `CMR6000Controller.h` | +\*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| Coolermaster LEDstrip controllers | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster LEDstrip controllers | +\*---------------------------------------------------------*/ #define COOLERMASTER_ARGB_PID 0x1011 #define COOLERMASTER_ARGB_GEN2_A1_PID 0x0173 #define COOLERMASTER_ARGB_GEN2_A1_V2_PID 0x01C9 @@ -55,9 +55,9 @@ #define COOLERMASTER_SMALL_ARGB_PID 0x1000 #define COOLERMASTER_RGB_PID 0x004F -/*-----------------------------------------------------*\ -| Coolermaster Mice | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Mice | +\*---------------------------------------------------------*/ #define COOLERMASTER_MM530_PID 0x0065 #define COOLERMASTER_MM531_PID 0x0097 #define COOLERMASTER_MM711_PID 0x0101 @@ -65,34 +65,29 @@ #define COOLERMASTER_MM720_PID 0x0141 #define COOLERMASTER_MM730_PID 0x0165 -/*-----------------------------------------------------*\ -| Coolermaster Mousemats | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Mousemats | +\*---------------------------------------------------------*/ #define COOLERMASTER_MP750_XL_PID 0x0109 #define COOLERMASTER_MP750_L_PID 0x0107 #define COOLERMASTER_MP750_MEDIUM_PID 0x0105 -/*-----------------------------------------------------*\ -| Coolermaster Monitors | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Monitors | +\*---------------------------------------------------------*/ #define COOLERMASTER_GM27_FQS_PID 0x01BB -/*-----------------------------------------------------*\ -| Coolermaster Desks | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Desks | +\*---------------------------------------------------------*/ #define COOLERMASTER_GD160_PID 0x01A9 -/******************************************************************************************\ -* * -* DetectCoolerMasterControllers * -* * -* Tests the USB address to see if any CoolerMaster controllers exists there. * -* * -\******************************************************************************************/ - -void DetectCoolerMasterARGB(hid_device_info* info, const std::string&) +DetectedControllers DetectCoolerMasterARGB(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -107,40 +102,55 @@ void DetectCoolerMasterARGB(hid_device_info* info, const std::string&) CMARGBController* controller = new CMARGBController(dev, info->path, i, cm_mutex); RGBController_CMARGBController* rgb_controller = new RGBController_CMARGBController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } -void DetectCoolerMasterARGBGen2A1(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterARGBGen2A1(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMARGBGen2A1controller* controller = new CMARGBGen2A1controller(dev, *info, name); RGBController_CMARGBGen2A1Controller* rgb_controller = new RGBController_CMARGBGen2A1Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterGPU(hid_device_info* info, const std::string&) +DetectedControllers DetectCoolerMasterGPU(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMR6000Controller* controller = new CMR6000Controller(dev, info->path, info->product_id); RGBController_CMR6000Controller* rgb_controller = new RGBController_CMR6000Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterV1Keyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterV1Keyboards(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -149,24 +159,29 @@ void DetectCoolerMasterV1Keyboards(hid_device_info* info, const std::string& nam case COOLERMASTER_KEYBOARD_PRO_L_PID: case COOLERMASTER_KEYBOARD_PRO_L_WHITE_PID: case COOLERMASTER_KEYBOARD_PRO_S_PID: - { - CMKeyboardV1Controller* controller = new CMKeyboardV1Controller(dev, info, name); - RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); + { + CMKeyboardV1Controller* controller = new CMKeyboardV1Controller(dev, info, name); + RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } - break; + detected_controllers.push_back(rgb_controller); + } + break; default: LOG_DEBUG("[%s] Controller not created as the product ID %04X is missing from detector switch", name.c_str(), info->product_id); - break; + break; } } + + return(detected_controllers); } -void DetectCoolerMasterV2Keyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterV2Keyboards(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -175,13 +190,13 @@ void DetectCoolerMasterV2Keyboards(hid_device_info* info, const std::string& nam case COOLERMASTER_KEYBOARD_PRO_L_PID: case COOLERMASTER_KEYBOARD_PRO_L_WHITE_PID: case COOLERMASTER_KEYBOARD_PRO_S_PID: - { - CMKeyboardV1Controller* controller = new CMKeyboardV1Controller(dev, info, name); - RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); + { + CMKeyboardV1Controller* controller = new CMKeyboardV1Controller(dev, info, name); + RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } - break; + detected_controllers.push_back(rgb_controller); + } + break; case COOLERMASTER_KEYBOARD_SK622B_PID: case COOLERMASTER_KEYBOARD_SK622W_PID: @@ -195,130 +210,172 @@ void DetectCoolerMasterV2Keyboards(hid_device_info* info, const std::string& nam case COOLERMASTER_KEYBOARD_CK552_V2_PID: case COOLERMASTER_KEYBOARD_MK730_PID: case COOLERMASTER_KEYBOARD_MK750_PID: - { - CMKeyboardV2Controller* controller = new CMKeyboardV2Controller(dev, info, name); - RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); + { + CMKeyboardV2Controller* controller = new CMKeyboardV2Controller(dev, info, name); + RGBController_CMKeyboardController* rgb_controller = new RGBController_CMKeyboardController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } - break; + detected_controllers.push_back(rgb_controller); + } + break; default: LOG_DEBUG("[%s] Controller not created as the product ID %04X is missing from detector switch", name.c_str(), info->product_id); - break; + break; } } + + return(detected_controllers); } -void DetectCoolerMasterMouse(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterMouse(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMMMController* controller = new CMMMController(dev, info->path, info->product_id, name); RGBController_CMMMController* rgb_controller = new RGBController_CMMMController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterMouse711(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectCoolerMasterMouse711(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMMM711Controller* controller = new CMMM711Controller(dev, info->path); RGBController_CMMM711Controller* rgb_controller = new RGBController_CMMM711Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterMouse712(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectCoolerMasterMouse712(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMMM712Controller* controller = new CMMM712Controller(dev, info->path); RGBController_CMMM712Controller* rgb_controller = new RGBController_CMMM712Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterMousemats(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectCoolerMasterMousemats(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMMP750Controller* controller = new CMMP750Controller(dev, info->path); RGBController_CMMP750Controller* rgb_controller = new RGBController_CMMP750Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterRGB(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectCoolerMasterRGB(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMRGBController* controller = new CMRGBController(dev, info->path); RGBController_CMRGBController* rgb_controller = new RGBController_CMRGBController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterSmallARGB(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectCoolerMasterSmallARGB(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMSmallARGBController* controller = new CMSmallARGBController(dev, info->path, 0); RGBController_CMSmallARGBController* rgb_controller = new RGBController_CMSmallARGBController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterMonitor(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterMonitor(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMMonitorController* controller = new CMMonitorController(dev, *info, name); RGBController_CMMonitorController* rgb_controller = new RGBController_CMMonitorController(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCoolerMasterGD160(hid_device_info* info, const std::string& name) +DetectedControllers DetectCoolerMasterGD160(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CMGD160Controller* controller = new CMGD160Controller(dev, *info, name); RGBController_CMGD160Controller* rgb_controller = new RGBController_CMGD160Controller(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -/*-----------------------------------------------------*\ -| Coolermaster Keyboards | -| PIDs defined in `CMKeyboardDevices.h` | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Keyboards | +| PIDs defined in `CMKeyboardDevices.h` | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro S", DetectCoolerMasterV1Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_PRO_S_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro L", DetectCoolerMasterV1Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_PRO_L_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro L White", DetectCoolerMasterV1Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_PRO_L_WHITE_PID, 1, 0xFF00, 1); @@ -338,9 +395,9 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master CK530 V2", DetectCooler REGISTER_HID_DETECTOR_IPU("Cooler Master CK550 V2", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_CK550_V2_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master CK550 V1 / CK552", DetectCoolerMasterV2Keyboards, COOLERMASTER_VID, COOLERMASTER_KEYBOARD_CK552_V2_PID, 1, 0xFF00, 1); -/*-----------------------------------------------------*\ -| Coolermaster LEDstrip controllers | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster LEDstrip controllers | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB", DetectCoolerMasterARGB, COOLERMASTER_VID, COOLERMASTER_ARGB_PID, 0, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1", DetectCoolerMasterARGBGen2A1, COOLERMASTER_VID, COOLERMASTER_ARGB_GEN2_A1_PID, 1, 0xFF01, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1 V2", DetectCoolerMasterARGBGen2A1, COOLERMASTER_VID, COOLERMASTER_ARGB_GEN2_A1_V2_PID, 1, 0xFF01, 1); @@ -348,9 +405,9 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master ARGB Gen 2 A1 Mini", DetectCooler REGISTER_HID_DETECTOR_IPU("Cooler Master RGB", DetectCoolerMasterRGB, COOLERMASTER_VID, COOLERMASTER_RGB_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master Small ARGB", DetectCoolerMasterSmallARGB, COOLERMASTER_VID, COOLERMASTER_SMALL_ARGB_PID, 0, 0xFF00, 1); -/*-----------------------------------------------------*\ -| Coolermaster Mice | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Mice | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Cooler Master MM530", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM530_PID, 1, 0xFF00, 1); //REGISTER_HID_DETECTOR_IPU("Cooler Master MM531", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM531_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master MM711", DetectCoolerMasterMouse711, COOLERMASTER_VID, COOLERMASTER_MM711_PID, 1, 0xFF00, 1); @@ -358,26 +415,26 @@ REGISTER_HID_DETECTOR_IPU("Cooler Master MM712", DetectCooler REGISTER_HID_DETECTOR_IPU("Cooler Master MM720", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM720_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master MM730", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM730_PID, 1, 0xFF00, 1); -/*-----------------------------------------------------*\ -| Coolermaster Mousemats | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Mousemats | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 XL", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_XL_PID, 0xFF00, 1); REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 Large", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_L_PID, 0xFF00, 1); REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 Medium", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_MEDIUM_PID, 0xFF00, 1); -/*-----------------------------------------------------*\ -| Coolermaster GPUs | -| PIDs defined in `CMR6000Controller.h` | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster GPUs | +| PIDs defined in `CMR6000Controller.h` | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_I ("Cooler Master Radeon RX 6000 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6000_PID, 1 ); REGISTER_HID_DETECTOR_I ("Cooler Master Radeon RX 6900 GPU", DetectCoolerMasterGPU, COOLERMASTER_VID, COOLERMASTER_RADEON_6900_PID, 1 ); -/*-----------------------------------------------------*\ -| Coolermaster Monitors | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Monitors | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Cooler Master GM27-FQS ARGB Monitor", DetectCoolerMasterMonitor, COOLERMASTER_VID, COOLERMASTER_GM27_FQS_PID, 0, 0xFF00, 1); -/*-----------------------------------------------------*\ -| Coolermaster Desks | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Coolermaster Desks | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Cooler Master GD160 ARGB Gaming Desk", DetectCoolerMasterGD160, COOLERMASTER_VID, COOLERMASTER_GD160_PID, 0, 0xFF00, 1); diff --git a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp index 2ef22912a..415600f6f 100644 --- a/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp +++ b/Controllers/CorsairCommanderCoreController/CorsairCommanderCoreControllerDetect.cpp @@ -10,8 +10,8 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "CorsairCommanderCoreController.h" +#include "DetectionManager.h" #include "RGBController_CorsairCommanderCore.h" /*-----------------------------------------------------*\ @@ -19,25 +19,22 @@ \*-----------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -/******************************************************************************************\ -* * -* DetectCorsairCommanderCoreControllers * -* * -* Tests the USB address to see if a Corsair RGB Cooler controller exists there. * -* * -\******************************************************************************************/ - -void DetectCorsairCommanderCoreControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairCommanderCoreControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairCommanderCoreController* controller = new CorsairCommanderCoreController(dev, info->path, info->product_id, name); RGBController_CorsairCommanderCore* rgb_controller = new RGBController_CorsairCommanderCore(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Corsair Commander Core", DetectCorsairCommanderCoreControllers, CORSAIR_VID, CORSAIR_COMMANDER_CORE_PID, 0x00, 0xFF42, 0x01); diff --git a/Controllers/CorsairDominatorPlatinumController/CorsairDominatorPlatinumControllerDetect.cpp b/Controllers/CorsairDominatorPlatinumController/CorsairDominatorPlatinumControllerDetect.cpp index c640d6260..ac0d745b1 100644 --- a/Controllers/CorsairDominatorPlatinumController/CorsairDominatorPlatinumControllerDetect.cpp +++ b/Controllers/CorsairDominatorPlatinumController/CorsairDominatorPlatinumControllerDetect.cpp @@ -93,22 +93,11 @@ bool TestForCorsairDominatorPlatinumController(i2c_smbus_interface *bus, unsigne return true; } -/******************************************************************************************\ -* * -* DetectCorsairDominatorPlatinumControllers * -* * -* Detect Corsair Dominator Platinum controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectCorsairDominatorPlatinumControllers(std::vector &busses) +DetectedControllers DetectCorsairDominatorPlatinumControllers(std::vector &busses) { - SettingsManager* settings_manager = ResourceManager::get()->GetSettingsManager(); - - json corsair_dominator_settings = settings_manager->GetSettings("CorsairDominatorSettings"); + DetectedControllers detected_controllers; + SettingsManager* settings_manager = ResourceManager::get()->GetSettingsManager(); + json corsair_dominator_settings = settings_manager->GetSettings("CorsairDominatorSettings"); if(!corsair_dominator_settings.contains("model")) { @@ -158,10 +147,10 @@ void DetectCorsairDominatorPlatinumControllers(std::vectorRegisterRGBController(rgbcontroller); + detected_controllers.push_back(rgb_controller); } std::this_thread::sleep_for(10ms); @@ -172,6 +161,8 @@ void DetectCorsairDominatorPlatinumControllers(std::vectorRegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_DETECTOR("Corsair H100i v2", DetectCorsairHydro2Controllers); diff --git a/Controllers/CorsairHydroController/CorsairHydroControllerDetect.cpp b/Controllers/CorsairHydroController/CorsairHydroControllerDetect.cpp index 9d87ce7dc..5f3f976e0 100644 --- a/Controllers/CorsairHydroController/CorsairHydroControllerDetect.cpp +++ b/Controllers/CorsairHydroController/CorsairHydroControllerDetect.cpp @@ -14,14 +14,14 @@ #include "CorsairHydroController.h" #include "RGBController_CorsairHydro.h" -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair vendor ID | +\*---------------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -/*-----------------------------------------------------*\ -| Keyboard Hydro Series product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard Hydro Series product IDs | +\*---------------------------------------------------------*/ #define CORSAIR_H115I_PRO_RGB_PID 0x0C13 #define CORSAIR_H100I_PRO_RGB_PID 0x0C15 #define CORSAIR_H150I_PRO_RGB_PID 0x0C12 @@ -46,16 +46,10 @@ static const corsair_hydro_device device_list[] = { CORSAIR_VID, CORSAIR_H150I_PRO_RGB_PID, 0, "Corsair H150i PRO RGB" }, }; -/******************************************************************************************\ -* * -* DetectCorsairHydroControllers * -* * -* Tests the USB address to see if a Corsair RGB Cooler controller exists there. * -* * -\******************************************************************************************/ - -void DetectCorsairHydroControllers() +DetectedControllers DetectCorsairHydroControllers() { + DetectedControllers detected_controllers; + libusb_init(NULL); #ifdef _WIN32 @@ -75,10 +69,12 @@ void DetectCorsairHydroControllers() CorsairHydroController* controller = new CorsairHydroController(dev, device_list[device_idx].name); RGBController_CorsairHydro* rgb_controller = new RGBController_CorsairHydro(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectCorsairHydroControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("Corsair Hydro Series", DetectCorsairHydroControllers); /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp index 4e28d6336..8f3196f7d 100644 --- a/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp +++ b/Controllers/CorsairHydroPlatinumController/CorsairHydroPlatinumControllerDetect.cpp @@ -11,18 +11,18 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "CorsairHydroPlatinumController.h" +#include "DetectionManager.h" #include "RGBController_CorsairHydroPlatinum.h" -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair vendor ID | +\*---------------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -/*-----------------------------------------------------*\ -| Product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Product IDs | +\*---------------------------------------------------------*/ #define CORSAIR_HYDRO_H100I_PLATINUM_PID 0x0C18 #define CORSAIR_HYDRO_H100I_PLATINUM_SE_PID 0x0C19 #define CORSAIR_HYDRO_H115I_PLATINUM_PID 0x0C17 @@ -37,7 +37,7 @@ #define CORSAIR_HYDRO_H100I_ELITE_RGB_PID_WHITE 0x0C40 #define CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE 0x0C41 -void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::string& name) { uint16_t no_rgb_fan_models[] = { @@ -48,7 +48,10 @@ void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::str CORSAIR_HYDRO_H150I_ELITE_RGB_PID_WHITE }; - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -65,8 +68,10 @@ void DetectCorsairHydroPlatinumControllers(hid_device_info* info, const std::str CorsairHydroPlatinumController* controller = new CorsairHydroPlatinumController(dev, info->path, dev_rgb_fan, name); RGBController_CorsairHydroPlatinum* rgb_controller = new RGBController_CorsairHydroPlatinum(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Corsair Hydro H100i Platinum", DetectCorsairHydroPlatinumControllers, CORSAIR_VID, CORSAIR_HYDRO_H100I_PLATINUM_PID ); diff --git a/Controllers/CorsairICueLinkController/CorsairICueLinkControllerDetect.cpp b/Controllers/CorsairICueLinkController/CorsairICueLinkControllerDetect.cpp index f7f1d2179..27ccb7333 100644 --- a/Controllers/CorsairICueLinkController/CorsairICueLinkControllerDetect.cpp +++ b/Controllers/CorsairICueLinkController/CorsairICueLinkControllerDetect.cpp @@ -19,17 +19,22 @@ #define CORSAIR_VID 0x1B1C #define CORSAIR_ICUE_LINK_SYSTEM_HUB_PID 0x0C3F -void DetectCorsairICueLinkControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairICueLinkControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairICueLinkController* controller = new CorsairICueLinkController(dev, info->path, name); RGBController_CorsairICueLink* rgb_controller = new RGBController_CorsairICueLink(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Corsair iCUE Link System Hub", DetectCorsairICueLinkControllers, CORSAIR_VID, CORSAIR_ICUE_LINK_SYSTEM_HUB_PID, 0x00, 0xFF42, 0x01); diff --git a/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp b/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp index 4508999a0..a14175d0a 100644 --- a/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp +++ b/Controllers/CorsairLightingNodeController/CorsairLightingNodeControllerDetect.cpp @@ -10,8 +10,8 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "CorsairLightingNodeController.h" +#include "DetectionManager.h" #include "RGBController_CorsairLightingNode.h" #define CORSAIR_VID 0x1B1C @@ -23,26 +23,23 @@ #define CORSAIR_SPEC_OMEGA_RGB_PID 0x1D04 #define CORSAIR_LT100_PID 0x0C23 -/******************************************************************************************\ -* * -* DetectCorsairLightingNodeControllers * -* * -* Detect devices supported by the Corsair Lighting Node Pro driver * -* * -\******************************************************************************************/ - -void DetectCorsairLightingNodeControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairLightingNodeControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairLightingNodeController* controller = new CorsairLightingNodeController(dev, info->path, name); RGBController_CorsairLightingNode* rgb_controller = new RGBController_CorsairLightingNode(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectCorsairLightingNodeControllers() */ + + return(detected_controllers); +} 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 diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp index d4083668b..2a528c77f 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp @@ -7,33 +7,33 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| OpenRGB includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| OpenRGB includes | +\*---------------------------------------------------------*/ #include #include "DetectionManager.h" #include "LogManager.h" #include "RGBController.h" -/*-----------------------------------------------------*\ -| Corsair Peripheral specific includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair Peripheral specific includes | +\*---------------------------------------------------------*/ #include "RGBController_CorsairPeripheral.h" #include "RGBController_CorsairK55RGBPROXT.h" #include "RGBController_CorsairK65Mini.h" #define CORSAIR_PERIPHERAL_CONTROLLER_NAME "Corsair peripheral" -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair vendor ID | +\*---------------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -/*-----------------------------------------------------*\ -| Keyboard product IDs | -| List taken from ckb-next | -| Non-RGB keyboards were omitted from this list | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +| List taken from ckb-next | +| Non-RGB keyboards were omitted from this list | +\*---------------------------------------------------------*/ #define CORSAIR_K55_RGB_PID 0x1B3D #define CORSAIR_K65_RGB_PID 0x1B17 @@ -57,17 +57,17 @@ #define CORSAIR_STRAFE_RED_PID 0x1B44 #define CORSAIR_STRAFE_MK2_PID 0x1B48 -/*-----------------------------------------------------*\ -| Non-RGB Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Non-RGB Keyboard product IDs | +\*---------------------------------------------------------*/ #define CORSAIR_K70_LUX_PID 0x1B36 #define CORSAIR_K68_RED_PID 0x1B3F #define CORSAIR_K68_RED_SHADOW_PID 0x1BA5 -/*-----------------------------------------------------*\ -| Mouse product IDs | -| List taken from ckb-next | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mouse product IDs | +| List taken from ckb-next | +\*---------------------------------------------------------*/ #define CORSAIR_GLAIVE_RGB_PID 0x1B34 #define CORSAIR_GLAIVE_RGB_PRO_PID 0x1B74 #define CORSAIR_HARPOON_RGB_PID 0x1B3C @@ -82,66 +82,72 @@ #define CORSAIR_SCIMITAR_ELITE_RGB_PID 0x1B8B #define CORSAIR_SABRE_RGB_PID 0x1B2F -/*-----------------------------------------------------*\ -| Mousepad product IDs | -| List taken from ckb-next | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mousepad product IDs | +| List taken from ckb-next | +\*---------------------------------------------------------*/ #define CORSAIR_MM800_RGB_POLARIS_PID 0x1B3B -/*-----------------------------------------------------*\ -| Headset Stand product IDs | -| List taken from ckb-next | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Headset Stand product IDs | +| List taken from ckb-next | +\*---------------------------------------------------------*/ #define CORSAIR_ST100_PID 0x0A34 -/*-----------------------------------------------------*\ -| Corsair K55 RGB PRO XT Keyboard product ID | -| This keyboard uses a separate driver | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair K55 RGB PRO XT Keyboard product ID | +| This keyboard uses a separate driver | +\*---------------------------------------------------------*/ #define CORSAIR_K55_RGB_PRO_XT_PID 0x1BA1 -/*-----------------------------------------------------*\ -| Corsair K65 Mini Keyboard product ID | -| This keyboard uses a separate driver | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair K65 Mini Keyboard product ID | +| This keyboard uses a separate driver | +\*---------------------------------------------------------*/ #define CORSAIR_K65_MINI_PID 0x1BAF -void DetectCorsairK55RGBPROXTControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairK55RGBPROXTControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - CorsairK55RGBPROXTController* controller = new CorsairK55RGBPROXTController(dev, info->path, name); + CorsairK55RGBPROXTController* controller = new CorsairK55RGBPROXTController(dev, info->path, name); RGBController_CorsairK55RGBPROXT* rgb_controller = new RGBController_CorsairK55RGBPROXT(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectCorsairK55RGBPROXTControllers() */ -void DetectCorsairK65MiniControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectCorsairK65MiniControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairK65MiniController* controller = new CorsairK65MiniController(dev, info->path, name); RGBController_CorsairK65Mini* rgb_controller = new RGBController_CorsairK65Mini(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectCorsairK65MiniControllers() */ -/******************************************************************************************\ -* * -* DetectCorsairPeripheralControllers * -* * -* Tests the USB address to see if a Corsair RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ -void DetectCorsairPeripheralControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectCorsairPeripheralControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -156,7 +162,8 @@ void DetectCorsairPeripheralControllers(hid_device_info* info, const std::string (info->product_id == CORSAIR_K70_RGB_MK2_LP_PID); RGBController_CorsairPeripheral* rgb_controller = new RGBController_CorsairPeripheral(controller, supports_hardware_modes); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } else { @@ -164,11 +171,13 @@ void DetectCorsairPeripheralControllers(hid_device_info* info, const std::string delete controller; } } -} /* DetectCorsairPeripheralControllers() */ -/*-----------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*-----------------------------------------------------------------------------------------------------*/ + return(detected_controllers); +} + +/*---------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair K55 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_K55_RGB_PID, 1, 0xFFC2); 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); @@ -189,9 +198,9 @@ REGISTER_HID_DETECTOR_IP("Corsair K95 RGB PLATINUM SE", DetectCorsairPeriphe REGISTER_HID_DETECTOR_IP("Corsair Strafe", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_STRAFE_PID, 1, 0xFFC2); REGISTER_HID_DETECTOR_IP("Corsair Strafe Red", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_STRAFE_RED_PID, 1, 0xFFC2); REGISTER_HID_DETECTOR_IP("Corsair Strafe MK.2", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_STRAFE_MK2_PID, 1, 0xFFC2); -/*-----------------------------------------------------------------------------------------------------*\ -| Mice | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mice | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair Glaive RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_GLAIVE_RGB_PID, 1, 0xFFC2); 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); @@ -206,29 +215,29 @@ REGISTER_HID_DETECTOR_IP("Corsair Scimitar PRO RGB", DetectCorsairPeriphe REGISTER_HID_DETECTOR_IP("Corsair Scimitar Elite RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SCIMITAR_ELITE_RGB_PID, 1, 0xFFC2); REGISTER_HID_DETECTOR_IP("Corsair Sabre RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SABRE_RGB_PID, 1, 0xFFC2); -/*-----------------------------------------------------------------------------------------------------*\ -| Mousemats | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mousemats | +\*---------------------------------------------------------*/ #ifdef USE_HID_USAGE REGISTER_HID_DETECTOR_P("Corsair MM800 RGB Polaris", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0xFFC2); #else REGISTER_HID_DETECTOR_I("Corsair MM800 RGB Polaris", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0); #endif -/*-----------------------------------------------------------------------------------------------------*\ -| Headset Stands | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Headset Stands | +\*---------------------------------------------------------*/ #ifdef USE_HID_USAGE REGISTER_HID_DETECTOR_P("Corsair ST100 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_ST100_PID, 0xFFC2); #else REGISTER_HID_DETECTOR_I("Corsair ST100 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_ST100_PID, 0); #endif -/*-----------------------------------------------------------------------------------------------------*\ -| Corsair K65 Mini Keyboard | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair K65 Mini Keyboard | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_I("Corsair K65 Mini", DetectCorsairK65MiniControllers, CORSAIR_VID, CORSAIR_K65_MINI_PID, 1); -/*-----------------------------------------------------------------------------------------------------*\ -| Corsair K55 RGB PRO XT Keyboard | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair K55 RGB PRO XT Keyboard | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair K55 RGB PRO XT", DetectCorsairK55RGBPROXTControllers, CORSAIR_VID, CORSAIR_K55_RGB_PRO_XT_PID, 1, 0xFF42); diff --git a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp index 2e0475f19..2ff2df6f7 100644 --- a/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp +++ b/Controllers/CorsairPeripheralV2Controller/CorsairPeripheralV2ControllerDetect.cpp @@ -7,55 +7,65 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -/*-----------------------------------------------------*\ -| OpenRGB includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| OpenRGB includes | +\*---------------------------------------------------------*/ #include #include "DetectionManager.h" -/*-----------------------------------------------------*\ -| Corsair Peripheral specific includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair Peripheral specific includes | +\*---------------------------------------------------------*/ #include "CorsairPeripheralV2Devices.h" #include "RGBController_CorsairV2Hardware.h" #include "RGBController_CorsairV2Software.h" #define CORSAIR_PERIPHERAL_CONTROLLER_NAME "Corsair V2 Peripheral" -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair vendor ID | +\*---------------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -void DetectCorsairV2HardwareControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairV2HardwareControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairPeripheralV2HWController* controller = new CorsairPeripheralV2HWController(dev, info->path, name); RGBController_CorsairV2HW* rgb_controller = new RGBController_CorsairV2HW(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectCorsairV2HardwareControllers() */ -void DetectCorsairV2SoftwareControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectCorsairV2SoftwareControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CorsairPeripheralV2SWController* controller = new CorsairPeripheralV2SWController(dev, info->path, name); RGBController_CorsairV2SW* rgb_controller = new RGBController_CorsairV2SW(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectCorsairV2SoftwareControllers() */ -/*-----------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*-----------------------------------------------------------------------------------------------------*/ + return(detected_controllers); +} + +/*---------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair K55 RGB PRO", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K55_RGB_PRO_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K60 RGB PRO Low Profile", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_K60_RGB_PRO_LP_PID, 1, 0xFF42); @@ -71,9 +81,9 @@ REGISTER_HID_DETECTOR_IP("Corsair K100 RGB Optical", DetectCorsai REGISTER_HID_DETECTOR_IP("Corsair K100 RGB Optical", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K100_OPTICAL_V2_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair K100 MX Red", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_K100_MXRED_PID, 1, 0xFF42); -/*-----------------------------------------------------------------------------------------------------*\ -| Mice | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mice | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair Dark Core RGB SE (Wired)", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_DARK_CORE_RGB_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair Dark Core RGB Pro SE (Wired)", DetectCorsairV2HardwareControllers, CORSAIR_VID, CORSAIR_DARK_CORE_RGB_PRO_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair Harpoon Wireless (Wired)", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_HARPOON_WIRELESS_PID, 1, 0xFF42); @@ -89,9 +99,8 @@ REGISTER_HID_DETECTOR_IP("Corsair Slipstream Wireless Receiver HW", DetectCorsai REGISTER_HID_DETECTOR_IP("Corsair Slipstream Wireless Receiver SW", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_SLIPSTREAM_WIRELESS_PID2, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair Slipstream Wireless Receiver HW", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_SLIPSTREAM_WIRELESS_V2_PID1, 1, 0xFF42); - -/*-----------------------------------------------------------------------------------------------------*\ -| Mousemat | -\*-----------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mousemat | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IP("Corsair MM700", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_MM700_PID, 1, 0xFF42); REGISTER_HID_DETECTOR_IP("Corsair MM700 3XL", DetectCorsairV2SoftwareControllers, CORSAIR_VID, CORSAIR_MM700_3XL_PID, 1, 0xFF42); diff --git a/Controllers/CorsairVengeanceController/CorsairVengeanceControllerDetect.cpp b/Controllers/CorsairVengeanceController/CorsairVengeanceControllerDetect.cpp index 1bff67f05..dfee6a3fa 100644 --- a/Controllers/CorsairVengeanceController/CorsairVengeanceControllerDetect.cpp +++ b/Controllers/CorsairVengeanceController/CorsairVengeanceControllerDetect.cpp @@ -11,19 +11,11 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "CorsairVengeanceController.h" -#include "RGBController_CorsairVengeance.h" +#include "DetectionManager.h" #include "i2c_smbus.h" #include "pci_ids.h" - -/******************************************************************************************\ -* * -* TestForCorsairVengeanceController * -* * -* Tests the given address to see if a Corsair controller exists there. * -* * -\******************************************************************************************/ +#include "RGBController_CorsairVengeance.h" bool TestForCorsairVengeanceController(i2c_smbus_interface* bus, unsigned char address) { @@ -48,21 +40,12 @@ bool TestForCorsairVengeanceController(i2c_smbus_interface* bus, unsigned char a return(pass); -} /* TestForCorsairVengeanceController() */ +} -/******************************************************************************************\ -* * -* DetectCorsairVengeanceControllers * -* * -* Detect Corsair controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where device is connected * -* slots - list of SPD entries with matching JEDEC ID * -* * -\******************************************************************************************/ - -void DetectCorsairVengeanceControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) +DetectedControllers DetectCorsairVengeanceControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) { + DetectedControllers detected_controllers; + for(SPDWrapper *slot : slots) { /*-------------------------------------------------*\ @@ -72,10 +55,10 @@ void DetectCorsairVengeanceControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(new_rgbcontroller); + detected_controllers.push_back(rgb_controller); } /*-------------------------------------------------*\ @@ -85,12 +68,14 @@ void DetectCorsairVengeanceControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(new_rgbcontroller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectCorsairVengeanceControllers() */ + + return(detected_controllers); +} REGISTER_I2C_DRAM_DETECTOR("Corsair Vengeance RGB DRAM", DetectCorsairVengeanceControllers, JEDEC_CORSAIR, SPD_DDR4_SDRAM); diff --git a/Controllers/CorsairVengeanceProController/CorsairVengeanceProControllerDetect.cpp b/Controllers/CorsairVengeanceProController/CorsairVengeanceProControllerDetect.cpp index 2ef5baf6a..35c4666b4 100644 --- a/Controllers/CorsairVengeanceProController/CorsairVengeanceProControllerDetect.cpp +++ b/Controllers/CorsairVengeanceProController/CorsairVengeanceProControllerDetect.cpp @@ -19,14 +19,6 @@ using namespace std::chrono_literals; -/******************************************************************************************\ -* * -* TestForCorsairVengeanceProController * -* * -* Tests the given address to see if a Corsair Pro controller exists there. * -* * -\******************************************************************************************/ - bool TestForCorsairVengeanceProController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -63,22 +55,11 @@ bool TestForCorsairVengeanceProController(i2c_smbus_interface* bus, unsigned cha std::this_thread::sleep_for(10ms); return(pass); +} -} /* TestForCorsairVengeanceProController() */ - -/******************************************************************************************\ -* * -* DetectCorsairVengeanceProControllers * -* * -* Detect Corsair Vengeance Pro controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectCorsairVengeanceProControllers(std::vector &busses) +DetectedControllers DetectCorsairVengeanceProControllers(std::vector &busses) { + DetectedControllers detected_controllers; for(unsigned int bus = 0; bus < busses.size(); bus++) { LOG_DEBUG("[%s] Testing bus %d", CORSAIR_VENGEANCE_RGB_PRO_NAME, bus); @@ -89,10 +70,10 @@ void DetectCorsairVengeanceProControllers(std::vector &bus { if(TestForCorsairVengeanceProController(busses[bus], addr)) { - CorsairVengeanceProController* new_controller = new CorsairVengeanceProController(busses[bus], addr); - RGBController_CorsairVengeancePro* new_rgbcontroller = new RGBController_CorsairVengeancePro(new_controller); + CorsairVengeanceProController* controller = new CorsairVengeanceProController(busses[bus], addr); + RGBController_CorsairVengeancePro* rgb_controller = new RGBController_CorsairVengeancePro(controller); - DetectionManager::get()->RegisterRGBController(new_rgbcontroller); + detected_controllers.push_back(rgb_controller); } } } @@ -102,6 +83,7 @@ void DetectCorsairVengeanceProControllers(std::vector &bus } } -} /* DetectCorsairVengeanceProControllers() */ + return(detected_controllers); +} REGISTER_I2C_DETECTOR("Corsair Vengeance Pro", DetectCorsairVengeanceProControllers); diff --git a/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp b/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp index 6959efa20..b9a47e051 100644 --- a/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp +++ b/Controllers/CorsairWirelessController/CorsairWirelessControllerDetect.cpp @@ -15,28 +15,23 @@ #include "RGBController.h" #include "RGBController_CorsairWireless.h" -/*-----------------------------------------------------*\ -| Corsair vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Corsair vendor ID | +\*---------------------------------------------------------*/ #define CORSAIR_VID 0x1B1C -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define CORSAIR_K57_RGB_WIRED_PID 0x1B6E #define CORSAIR_K57_RGB_WIRELESS_PID 0x1B62 -/******************************************************************************************\ -* * -* DetectCorsairWirelessControllers * -* * -* Tests the USB address to see if a Corsair RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectCorsairWirelessControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCorsairWirelessControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -46,17 +41,19 @@ void DetectCorsairWirelessControllers(hid_device_info* info, const std::string& if(controller->GetDeviceType() != DEVICE_TYPE_UNKNOWN) { RGBController_CorsairWireless* rgb_controller = new RGBController_CorsairWireless(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { delete controller; } } -} /* DetectCorsairWirelessControllers() */ -/*-----------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*-----------------------------------------------------------------------------------------------------*/ + return(detected_controllers); +} + +/*---------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Corsair K57 RGB (Wired)", DetectCorsairWirelessControllers, CORSAIR_VID, CORSAIR_K57_RGB_WIRED_PID, 1, 0xFF42, 1); //REGISTER_HID_DETECTOR_IPU("Corsair K57 RGB (Wireless)", DetectCorsairWirelessControllers, CORSAIR_VID, CORSAIR_K57_RGB_WIRELESS_PID, 1, 0xFF42, 1); diff --git a/Controllers/CougarController/CougarControllerDetect.cpp b/Controllers/CougarController/CougarControllerDetect.cpp index d9776d4dd..cee2a8977 100644 --- a/Controllers/CougarController/CougarControllerDetect.cpp +++ b/Controllers/CougarController/CougarControllerDetect.cpp @@ -7,46 +7,58 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ +#include "CougarKeyboardController.h" +#include "CougarRevengerSTController.h" #include "DetectionManager.h" #include "RGBController_CougarKeyboard.h" #include "RGBController_CougarRevengerST.h" -/*----------------------------------------------------------*\ -| Cougar vendor ID | -\*----------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Cougar vendor ID | +\*---------------------------------------------------------*/ #define COUGAR_VID 0x12CF #define COUGAR_VID_2 0x060B -/*----------------------------------------------------------*\ -| Product ID | -\*----------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Product ID | +\*---------------------------------------------------------*/ #define COUGAR_700K_EVO_PID 0x7010 #define COUGAR_REVENGER_ST_PID 0x0412 -void DetectCougarRevengerSTControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectCougarRevengerSTControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CougarRevengerSTController* controller = new CougarRevengerSTController(dev, *info, name); RGBController_CougarRevengerST* rgb_controller = new RGBController_CougarRevengerST(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectCougar700kEvo(hid_device_info* info, const std::string& name) +DetectedControllers DetectCougar700kEvo(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; - if (dev) + dev = hid_open_path(info->path); + + if(dev) { CougarKeyboardController* controller = new CougarKeyboardController(dev, info->path, name); RGBController_CougarKeyboard* rgb_controller = new RGBController_CougarKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Cougar 700K EVO Gaming Keyboard", DetectCougar700kEvo, COUGAR_VID_2, COUGAR_700K_EVO_PID, 3, 0xFF00, 1); diff --git a/Controllers/CreativeController/CreativeControllerDetect.cpp b/Controllers/CreativeController/CreativeControllerDetect.cpp index dfb6cd7ca..550c1060e 100644 --- a/Controllers/CreativeController/CreativeControllerDetect.cpp +++ b/Controllers/CreativeController/CreativeControllerDetect.cpp @@ -9,29 +9,35 @@ #include #include "CreativeSoundBlasterXG6Controller.h" -#include "RGBController_CreativeSoundBlasterXG6.h" #include "DetectionManager.h" +#include "RGBController_CreativeSoundBlasterXG6.h" -/*-----------------------------------------------------*\ -| Creative vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Creative vendor ID | +\*---------------------------------------------------------*/ #define CREATIVE_VID 0x041E -/*-----------------------------------------------------*\ -| SoundCards | -\*-----------------------------------------------------*/ + +/*---------------------------------------------------------*\ +| SoundCards | +\*---------------------------------------------------------*/ #define CREATIVE_SOUNDBLASTERX_G6_PID 0x3256 -void DetectCreativeDevice(hid_device_info* info, const std::string& name) +DetectedControllers DetectCreativeDevice(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CreativeSoundBlasterXG6Controller* controller = new CreativeSoundBlasterXG6Controller(dev, info->path, name); RGBController_CreativeSoundBlasterXG6* rgb_controller = new RGBController_CreativeSoundBlasterXG6(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/CreativeController/CreativeSoundBlasterAE5ControllerDetect_Windows.cpp b/Controllers/CreativeController/CreativeSoundBlasterAE5ControllerDetect_Windows.cpp index eacfcd17e..2bc67e8cd 100644 --- a/Controllers/CreativeController/CreativeSoundBlasterAE5ControllerDetect_Windows.cpp +++ b/Controllers/CreativeController/CreativeSoundBlasterAE5ControllerDetect_Windows.cpp @@ -9,11 +9,13 @@ #include "DetectionManager.h" #include "CreativeSoundBlasterAE5Controller_Windows.h" -#include "RGBController_CreativeSoundBlasterAE5_Windows.h" #include "LogManager.h" +#include "RGBController_CreativeSoundBlasterAE5_Windows.h" -void DetectCreativeAE5Device() +DetectedControllers DetectCreativeAE5Device() { + DetectedControllers detected_controllers; + LOG_INFO("[Creative SoundBlaster AE-5] Windows detection function called"); CreativeSoundBlasterAE5Controller_Windows* controller = new CreativeSoundBlasterAE5Controller_Windows(); @@ -22,13 +24,16 @@ void DetectCreativeAE5Device() { LOG_INFO("[Creative SoundBlaster AE-5] Device initialized successfully, registering controller"); RGBController_CreativeSoundBlasterAE5* rgb_controller = new RGBController_CreativeSoundBlasterAE5(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } else { LOG_WARNING("[Creative SoundBlaster AE-5] Device initialization failed"); delete controller; } + + return(detected_controllers); } REGISTER_DETECTOR("Creative SoundBlaster AE-5", DetectCreativeAE5Device); diff --git a/Controllers/CrucialController/CrucialControllerDetect.cpp b/Controllers/CrucialController/CrucialControllerDetect.cpp index c982943df..f8780535d 100644 --- a/Controllers/CrucialController/CrucialControllerDetect.cpp +++ b/Controllers/CrucialController/CrucialControllerDetect.cpp @@ -20,19 +20,20 @@ using namespace std::chrono_literals; -/*----------------------------------------------------------------------*\ -| This list contains the available SMBus addresses for Crucial RAM | -\*----------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| This list contains the available SMBus addresses for | +| Crucial RAM | +\*---------------------------------------------------------*/ #define CRUCIAL_ADDRESS_COUNT 8 static const unsigned char crucial_addresses[] = { -/*-----------------------------------------------------*\ -| These addresses have been disabled due to conflict | -| with ASUS Aura DRAM. Since the detection scheme is | -| the same, Aura RAM will be detected as Crucial. | -| We need to improve the Crucial detection scheme. | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| These addresses have been disabled due to conflict with | +| ENE DRAM. Since the detection scheme is the same, ENE | +| RAM will be detected as Crucial. We need to improve the | +| Crucial detection scheme. | +\*---------------------------------------------------------*/ 0x39, 0x3A, 0x3B, @@ -57,16 +58,6 @@ std::string concatHexArray(const unsigned char array[], int count, const char sp } #define TESTING_ADDRESSES concatHexArray(crucial_addresses, CRUCIAL_ADDRESS_COUNT, "|").c_str() -/******************************************************************************************\ -* * -* CrucialRegisterRead * -* * -* A standalone version of the AuraSMBusController::AuraRegisterRead function for * -* access to Aura devices without instancing the AuraSMBusController class or reading * -* the config table from the device. * -* * -\******************************************************************************************/ - unsigned char CrucialRegisterRead(i2c_smbus_interface* bus, crucial_dev_id dev, crucial_register reg) { //Write Aura register @@ -76,16 +67,6 @@ unsigned char CrucialRegisterRead(i2c_smbus_interface* bus, crucial_dev_id dev, return(bus->i2c_smbus_read_byte_data(dev, 0x81)); } -/******************************************************************************************\ -* * -* TestForCrucialController * -* * -* Tests the given address to see if an Crucial controller exists there. First does a* -* quick write to test for a response, and if so does a simple read at 0xA0 to test * -* for incrementing values 0...F which was observed at this location during data dump * -* * -\******************************************************************************************/ - bool TestForCrucialController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -145,8 +126,7 @@ bool TestForCrucialController(i2c_smbus_interface* bus, unsigned char address) } return(pass); - -} /* TestForCrucialController() */ +} void CrucialRegisterWrite(i2c_smbus_interface* bus, unsigned char dev, unsigned short reg, unsigned char val) { @@ -157,19 +137,10 @@ void CrucialRegisterWrite(i2c_smbus_interface* bus, unsigned char dev, unsigned bus->i2c_smbus_write_byte_data(dev, 0x01, val); } -/******************************************************************************************\ -* * -* DetectCrucialControllers * -* * -* Detect Crucial controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectCrucialControllers(std::vector &busses) +DetectedControllers DetectCrucialControllers(std::vector &busses) { + DetectedControllers detected_controllers; + for(unsigned int bus = 0; bus < busses.size(); bus++) { int address_list_idx = -1; @@ -223,7 +194,7 @@ void DetectCrucialControllers(std::vector &busses) CrucialController* controller = new CrucialController(busses[bus], crucial_addresses[address_list_idx]); RGBController_Crucial* rgb_controller = new RGBController_Crucial(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } std::this_thread::sleep_for(1ms); @@ -231,6 +202,7 @@ void DetectCrucialControllers(std::vector &busses) } } -} /* DetectCrucialControllers() */ + return(detected_controllers); +} REGISTER_I2C_DETECTOR("Crucial Ballistix", DetectCrucialControllers); diff --git a/Controllers/CryorigH7QuadLumiController/CryorigH7QuadLumiControllerDetect.cpp b/Controllers/CryorigH7QuadLumiController/CryorigH7QuadLumiControllerDetect.cpp index d07975175..857e7d725 100644 --- a/Controllers/CryorigH7QuadLumiController/CryorigH7QuadLumiControllerDetect.cpp +++ b/Controllers/CryorigH7QuadLumiController/CryorigH7QuadLumiControllerDetect.cpp @@ -10,27 +10,32 @@ \*---------------------------------------------------------*/ #include -#include "DetectionManager.h" #include "CryorigH7QuadLumiController.h" +#include "DetectionManager.h" #include "RGBController_CryorigH7QuadLumi.h" -/*-----------------------------------------------------*\ -| CRYORIG/NZXT USB IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| CRYORIG/NZXT USB IDs | +\*---------------------------------------------------------*/ #define NZXT_VID 0x1E71 #define CRYORIG_H7_QUAD_LUMI_PID 0x1712 -static void DetectCryorigH7QuadLumi(hid_device_info* info, const std::string& name) +DetectedControllers DetectCryorigH7QuadLumi(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { CryorigH7QuadLumiController* controller = new CryorigH7QuadLumiController(dev, info->path, name); RGBController_CryorigH7QuadLumi* rgb_controller = new RGBController_CryorigH7QuadLumi(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("CRYORIG H7 Quad Lumi", DetectCryorigH7QuadLumi, NZXT_VID, CRYORIG_H7_QUAD_LUMI_PID); diff --git a/Controllers/DDPController/DDPControllerDetect.cpp b/Controllers/DDPController/DDPControllerDetect.cpp index 27451add8..58da8a01b 100644 --- a/Controllers/DDPController/DDPControllerDetect.cpp +++ b/Controllers/DDPController/DDPControllerDetect.cpp @@ -19,11 +19,12 @@ using json = nlohmann::json; -void DetectDDPControllers() +DetectedControllers DetectDDPControllers() { - json ddp_settings; + DetectedControllers detected_controllers; + json ddp_settings; std::vector> device_lists; - DDPDevice dev; + DDPDevice dev; ddp_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("DDPDevices"); @@ -85,9 +86,11 @@ void DetectDDPControllers() for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++) { RGBController_DDP* rgb_controller = new RGBController_DDP(device_lists[list_idx]); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } REGISTER_DETECTOR("DDP", DetectDDPControllers); diff --git a/Controllers/DMXController/DMXControllerDetect.cpp b/Controllers/DMXController/DMXControllerDetect.cpp index 91d38d6aa..09e4c473e 100644 --- a/Controllers/DMXController/DMXControllerDetect.cpp +++ b/Controllers/DMXController/DMXControllerDetect.cpp @@ -15,36 +15,29 @@ #include "RGBController_DMX.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectDMXControllers * -* * -* Detect devices supported by the DMX driver * -* * -\******************************************************************************************/ - -void DetectDMXControllers() +DetectedControllers DetectDMXControllers() { + DetectedControllers detected_controllers; json dmx_settings; std::vector> device_lists; DMXDevice dev; - /*-------------------------------------------------*\ - | Get DMX settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get DMX settings from settings manager | + \*-----------------------------------------------------*/ dmx_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("DMXDevices"); - /*-------------------------------------------------*\ - | If the DMX settings contains devices, process | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the DMX settings contains devices, process | + \*-----------------------------------------------------*/ if(dmx_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < dmx_settings["devices"].size(); device_idx++) { - /*-------------------------------------------------*\ - | Clear DMX device data | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Clear DMX device data | + \*---------------------------------------------*/ dev.name = ""; dev.keepalive_time = 0; @@ -83,26 +76,28 @@ void DetectDMXControllers() dev.brightness_channel = dmx_settings["devices"][device_idx]["brightness_channel"]; } - /*---------------------------------------------------------*\ - | Determine whether to create a new list or add this device | - | to an existing list. A device is added to an existing | - | list if both devices share one or more universes for the | - | same output destination | - \*---------------------------------------------------------*/ + /*---------------------------------------------*\ + | Determine whether to create a new list or add | + | this device to an existing list. A device is | + | added to an existing list if both devices | + | share one or more universes for the same | + | output destination | + \*---------------------------------------------*/ bool device_added_to_existing_list = false; - /*---------------------------------------------------------*\ - | Track grouping for all controllers. | - \*---------------------------------------------------------*/ + /*---------------------------------------------*\ + | Track grouping for all controllers. | + \*---------------------------------------------*/ for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++) { for(unsigned int device_idx = 0; device_idx < device_lists[list_idx].size(); device_idx++) { - /*---------------------------------------------------------*\ - | Check if the port used by this new device is the same as | - | in the existing device. If so, add the new device to the | - | existing list. | - \*---------------------------------------------------------*/ + /*-------------------------------------*\ + | Check if the port used by this new | + | device is the same as in the existing | + | device. If so, add the new device to | + | the existing list. | + \*-------------------------------------*/ if(1) { device_lists[list_idx].push_back(dev); @@ -131,15 +126,16 @@ void DetectDMXControllers() } } - for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++) { RGBController_DMX* rgb_controller; rgb_controller = new RGBController_DMX(device_lists[list_idx]); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } -} /* DetectDMXControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("DMX", DetectDMXControllers); diff --git a/Controllers/DRGBController/DRGBControllerDetect.cpp b/Controllers/DRGBController/DRGBControllerDetect.cpp index 3ecee0595..96e8b47f9 100644 --- a/Controllers/DRGBController/DRGBControllerDetect.cpp +++ b/Controllers/DRGBController/DRGBControllerDetect.cpp @@ -14,9 +14,12 @@ #include "DRGBController.h" #include "RGBController_DRGB.h" -void DetectDRGBControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectDRGBControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -27,8 +30,10 @@ void DetectDRGBControllers(hid_device_info* info, const std::string& name) DRGBController* controller = new DRGBController(dev, info->path, info->product_id, name); RGBController_DRGB* rgb_controller = new RGBController_DRGB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("DeepRGB LED V4", DetectDRGBControllers, DRGBV4_VID, DRGB_LED_V4_PID); diff --git a/Controllers/DarkProject/DarkProjectControllerDetect.cpp b/Controllers/DarkProject/DarkProjectControllerDetect.cpp index 763b94f90..de770f1ab 100644 --- a/Controllers/DarkProject/DarkProjectControllerDetect.cpp +++ b/Controllers/DarkProject/DarkProjectControllerDetect.cpp @@ -22,17 +22,22 @@ \*---------------------------------------------------------*/ #define KD3B_V2_PID 0x2061 -void DetectDarkProjectKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectDarkProjectKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { DarkProjectKeyboardController* controller = new DarkProjectKeyboardController(dev, info->path, name); RGBController_DarkProjectKeyboard* rgb_controller = new RGBController_DarkProjectKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Dark Project KD3B V2", DetectDarkProjectKeyboardControllers, DARKPROJECT_VID, KD3B_V2_PID, 2, 0xFFC2, 4); diff --git a/Controllers/DasKeyboardController/DasKeyboardControllerDetect.cpp b/Controllers/DasKeyboardController/DasKeyboardControllerDetect.cpp index 927062239..66ec24073 100644 --- a/Controllers/DasKeyboardController/DasKeyboardControllerDetect.cpp +++ b/Controllers/DasKeyboardController/DasKeyboardControllerDetect.cpp @@ -14,34 +14,28 @@ #include "RGBController_DasKeyboard.h" #include -/*-----------------------------------------------------*\ -| Das Keyboard vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Das Keyboard vendor ID | +\*---------------------------------------------------------*/ #define DAS_KEYBOARD_VID 0x24F0 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define DAS_KEYBOARD_Q4_PID 0x2037 #define DAS_KEYBOARD_Q5_PID 0x2020 #define DAS_KEYBOARD_Q5S_PID 0x209A -/******************************************************************************************\ -* * -* DetectDasKeyboardControllers * -* * -* Tests the USB address to see if a Das Keyboard RGB controller exists there. * -* We need the second interface to communicate with the keyboard * -* * -\******************************************************************************************/ - -void DetectDasKeyboardControllers(hid_device_info *info, const std::string &name) +DetectedControllers DetectDasKeyboardControllers(hid_device_info *info, const std::string &name) { - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - DasKeyboardController *controller = new DasKeyboardController(dev, info->path, name); + DasKeyboardController* controller = new DasKeyboardController(dev, info->path, name); if(controller->GetLayoutString() == "NONE") { @@ -49,12 +43,14 @@ void DetectDasKeyboardControllers(hid_device_info *info, const std::string &name } else { - RGBController_DasKeyboard *rgb_controller = new RGBController_DasKeyboard(controller); + RGBController_DasKeyboard* rgb_controller = new RGBController_DasKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectDasKeyboardControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("Das Keyboard Q4 RGB", DetectDasKeyboardControllers, DAS_KEYBOARD_VID, DAS_KEYBOARD_Q4_PID, 1, 0x01, 0x80); REGISTER_HID_DETECTOR_I ("Das Keyboard Q5 RGB", DetectDasKeyboardControllers, DAS_KEYBOARD_VID, DAS_KEYBOARD_Q5_PID, 1); diff --git a/Controllers/DebugController/DebugControllerDetect.cpp b/Controllers/DebugController/DebugControllerDetect.cpp index 7dc4f547a..3910b4906 100644 --- a/Controllers/DebugController/DebugControllerDetect.cpp +++ b/Controllers/DebugController/DebugControllerDetect.cpp @@ -15,17 +15,10 @@ #include "RGBController_Debug.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectDebugControllers * -* * -* Add debug controllers based on the DebugDevices key in the settings json * -* * -\******************************************************************************************/ - -void DetectDebugControllers() +DetectedControllers DetectDebugControllers() { - json debug_settings; + DetectedControllers detected_controllers; + json debug_settings; /*-----------------------------------------------------*\ | Get Debug Device settings from settings manager | @@ -39,12 +32,13 @@ void DetectDebugControllers() { for(unsigned int device_idx = 0; device_idx < debug_settings["devices"].size(); device_idx++) { - RGBController_Debug * debug_controller = new RGBController_Debug(false, debug_settings["devices"][device_idx]); - DetectionManager::get()->RegisterRGBController(debug_controller); + RGBController_Debug * rgb_controller = new RGBController_Debug(false, debug_settings["devices"][device_idx]); + + detected_controllers.push_back(rgb_controller); } } - if (debug_settings.contains("CustomDevices")) + if(debug_settings.contains("CustomDevices")) { for(unsigned int device_idx = 0; device_idx < debug_settings["CustomDevices"].size(); device_idx++) { @@ -68,12 +62,14 @@ void DetectDebugControllers() } else { - RGBController_Debug * debug_controller = new RGBController_Debug(true, custom_device_settings); - DetectionManager::get()->RegisterRGBController(debug_controller); + RGBController_Debug * rgb_controller = new RGBController_Debug(true, custom_device_settings); + + detected_controllers.push_back(rgb_controller); } } } -} /* DetectDebugControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Debug Controllers", DetectDebugControllers); diff --git a/Controllers/DreamCheekyController/DreamCheekyControllerDetect.cpp b/Controllers/DreamCheekyController/DreamCheekyControllerDetect.cpp index f54ab00bc..2e1c0e572 100644 --- a/Controllers/DreamCheekyController/DreamCheekyControllerDetect.cpp +++ b/Controllers/DreamCheekyController/DreamCheekyControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define DREAM_CHEEKY_WEBMAIL_NOTIFIER_PID 0x0004 -void DetectDreamCheekyControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectDreamCheekyControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { DreamCheekyController* controller = new DreamCheekyController(dev, info->path, name); RGBController_DreamCheeky* rgb_controller = new RGBController_DreamCheeky(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR( "Dream Cheeky Webmail Notifier", DetectDreamCheekyControllers, DREAM_CHEEKY_VID, DREAM_CHEEKY_WEBMAIL_NOTIFIER_PID ); diff --git a/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp b/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp index 722cdfd46..577f70f9a 100644 --- a/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp +++ b/Controllers/DuckyKeyboardController/DuckyKeyboardControllerDetect.cpp @@ -9,31 +9,28 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ +#include #include "DetectionManager.h" #include "DuckyKeyboardController.h" #include "RGBController_DuckyKeyboard.h" -#include -/******************************************************************************************\ -* * -* DetectDuckyKeyboardControllers * -* * -* Tests the USB address to see if a Ducky RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectDuckyKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectDuckyKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { DuckyKeyboardController* controller = new DuckyKeyboardController(dev, info->path, info->product_id, name); RGBController_DuckyKeyboard* rgb_controller = new RGBController_DuckyKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectDuckyKeyboardControllers() */ + + return(detected_controllers); +} 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/DygmaRaiseController/DygmaRaiseControllerDetect.cpp b/Controllers/DygmaRaiseController/DygmaRaiseControllerDetect.cpp index b62bd82d9..18828e078 100644 --- a/Controllers/DygmaRaiseController/DygmaRaiseControllerDetect.cpp +++ b/Controllers/DygmaRaiseController/DygmaRaiseControllerDetect.cpp @@ -9,27 +9,19 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ +#include #include "DetectionManager.h" #include "DygmaRaiseController.h" -#include "RGBController_DygmaRaise.h" #include "find_usb_serial_port.h" -#include +#include "RGBController_DygmaRaise.h" #define DYGMA_RAISE_VID 0x1209 #define DYGMA_RAISE_PID 0x2201 -/******************************************************************************************\ -* * -* DetectDygmaRaiseControllers * -* * -* Tests the USB address to see if a DygmaRaise keyboard exists there. * -* Then opens a serial port to communicate with the KB * -* * -\******************************************************************************************/ - -void DetectDygmaRaiseControllers() +DetectedControllers DetectDygmaRaiseControllers() { - std::vector ports = find_usb_serial_port(DYGMA_RAISE_VID, DYGMA_RAISE_PID); + DetectedControllers detected_controllers; + std::vector ports = find_usb_serial_port(DYGMA_RAISE_VID, DYGMA_RAISE_PID); for(std::size_t i = 0; i < ports.size(); i++) { @@ -39,9 +31,12 @@ void DetectDygmaRaiseControllers() controller->Initialize((char *)ports[i]->c_str()); RGBController_DygmaRaise* rgb_controller = new RGBController_DygmaRaise(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } REGISTER_DETECTOR("Dygma Raise", DetectDygmaRaiseControllers); diff --git a/Controllers/E131Controller/E131ControllerDetect.cpp b/Controllers/E131Controller/E131ControllerDetect.cpp index bf0249ce1..b4871ba8c 100644 --- a/Controllers/E131Controller/E131ControllerDetect.cpp +++ b/Controllers/E131Controller/E131ControllerDetect.cpp @@ -16,36 +16,29 @@ #include "RGBController_E131.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectE131Controllers * -* * -* Detect devices supported by the E131 driver * -* * -\******************************************************************************************/ - -void DetectE131Controllers() +DetectedControllers DetectE131Controllers() { + DetectedControllers detected_controllers; json e131_settings; std::vector> device_lists; E131Device dev; - /*-------------------------------------------------*\ - | Get E1.31 settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get E1.31 settings from settings manager | + \*-----------------------------------------------------*/ e131_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("E131Devices"); - /*-------------------------------------------------*\ - | If the E1.31 settings contains devices, process | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the E1.31 settings contains devices, process | + \*-----------------------------------------------------*/ if(e131_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < e131_settings["devices"].size(); device_idx++) { - /*-------------------------------------------------*\ - | Clear E1.31 device data | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Clear E1.31 device data | + \*---------------------------------------------*/ dev.name = ""; dev.ip = ""; dev.type = ZONE_TYPE_SINGLE; @@ -211,28 +204,32 @@ void DetectE131Controllers() } } - /*---------------------------------------------------------*\ - | Determine whether to create a new list or add this device | - | to an existing list. A device is added to an existing | - | list if both devices share one or more universes for the | - | same output destination | - \*---------------------------------------------------------*/ + /*---------------------------------------------*\ + | Determine whether to create a new list or add | + | this device to an existing list. A device is | + | added to an existing list if both devices | + | share one or more universes for the same | + |output destination | + \*---------------------------------------------*/ bool device_added_to_existing_list = false; - /*---------------------------------------------------------*\ - | Track grouping for all controllers. | - \*---------------------------------------------------------*/ + /*---------------------------------------------*\ + | Track grouping for all controllers. | + \*---------------------------------------------*/ for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++) { for(unsigned int device_idx = 0; device_idx < device_lists[list_idx].size(); device_idx++) { - /*---------------------------------------------------------*\ - | Determine if there is any overlap between this device and | - | any existing device list | - | Offset the end by two - one because the range is 1-512 | - | rather than 0-511, and one because the start channel is | - | included in the first set of 3 channels. | - \*---------------------------------------------------------*/ + /*-------------------------------------*\ + | Determine if there is any overlap | + | between this device and any existing | + | device list | + | Offset the end by two - one because | + | the range is 1-512 rather than 0-511, | + | and one because the start channel is | + | included in the first set of 3 | + | channels. | + \*-------------------------------------*/ unsigned int dev_start = dev.start_universe; unsigned int list_start = device_lists[list_idx][device_idx].start_universe; unsigned int dev_end = dev.start_universe + ((dev.start_channel + (3 * dev.num_leds) - 2) / 512); @@ -242,11 +239,12 @@ void DetectE131Controllers() bool overlap = dev_ip == list_ip && !(dev_end < list_start || list_end < dev_start); - /*---------------------------------------------------------*\ - | Check if any universes used by this new device exist in | - | the existing device. If so, add the new device to the | - | existing list. | - \*---------------------------------------------------------*/ + /*-------------------------------------*\ + | Check if any universes used by this | + | new device exist in the existing | + | device. If so, add the new device to | + | the existing list. | + \*-------------------------------------*/ if(overlap) { device_lists[list_idx].push_back(dev); @@ -261,10 +259,10 @@ void DetectE131Controllers() } } - /*---------------------------------------------------------*\ - | If the device did not overlap with existing devices, | - | create a new list for it | - \*---------------------------------------------------------*/ + /*---------------------------------------------*\ + | If the device did not overlap with existing | + | devices, create a new list for it | + \*---------------------------------------------*/ if(!device_added_to_existing_list) { std::vector new_list; @@ -279,10 +277,12 @@ void DetectE131Controllers() { RGBController_E131* rgb_controller; rgb_controller = new RGBController_E131(device_lists[list_idx]); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } -} /* DetectE131Controllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("E1.31", DetectE131Controllers); diff --git a/Controllers/EKController/EKControllerDetect.cpp b/Controllers/EKController/EKControllerDetect.cpp index 5679c35e5..940271817 100644 --- a/Controllers/EKController/EKControllerDetect.cpp +++ b/Controllers/EKController/EKControllerDetect.cpp @@ -17,25 +17,22 @@ #define EK_VID 0x0483 #define EK_LOOP_CONNECT 0x5750 -/******************************************************************************************\ -* * -* DetectEKControllers * -* * -* Tests the USB address to see if any EK Controllers exists there. * -* * -\******************************************************************************************/ - -void DetectEKControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectEKControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { EKController* controller = new EKController(dev, info->path); RGBController_EKController* rgb_controller = new RGBController_EKController(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectEKControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("EK Loop Connect", DetectEKControllers, EK_VID, EK_LOOP_CONNECT, 0, 0xFFA0, 1); diff --git a/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp b/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp index f2e23a482..7e21d69cb 100644 --- a/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp +++ b/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp @@ -9,30 +9,33 @@ #include #include "DetectionManager.h" +#include "dmiinfo.h" #include "ENESMBusController.h" #include "ENESMBusInterface_i2c_smbus.h" +#include "i2c_smbus.h" #include "LogManager.h" +#include "pci_ids.h" #include "RGBController.h" #include "RGBController_ENESMBus.h" -#include "i2c_smbus.h" -#include "pci_ids.h" -#include "dmiinfo.h" - -#define DETECTOR_NAME "ENE (ASUS Aura) SMBus Controller" -#define VENDOR_NAME "ASUS" //This should match the Vendor name from DMI using namespace std::chrono_literals; -/*----------------------------------------------------------------------*\ -| Windows defines "interface" for some reason. Work around this | -\*----------------------------------------------------------------------*/ +#define DETECTOR_NAME "ENE (ASUS Aura) SMBus Controller" +#define VENDOR_NAME "ASUS" //This should match the Vendor name from DMI +#define GPU_CHECK_DEVICE_MESSAGE_EN "[%s] Bus %02d is a GPU and the subvendor matches the one for %s, looking for a device at 0x%02X" + +/*---------------------------------------------------------*\ +| Windows defines "interface" for some reason. Work around | +| this | +\*---------------------------------------------------------*/ #ifdef interface #undef interface #endif -/*----------------------------------------------------------------------*\ -| This list contains the available SMBus addresses for mapping ENE RAM | -\*----------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| This list contains the available SMBus addresses for | +| mapping ENE RAM | +\*---------------------------------------------------------*/ #define ENE_RAM_ADDRESS_COUNT 23 static const unsigned char ene_ram_addresses[] = @@ -62,9 +65,10 @@ static const unsigned char ene_ram_addresses[] = 0x3D }; -/*---------------------------------------------------------------------------------*\ -| This list contains the available SMBus addresses for mapping Aura motherboards | -\*---------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| This list contains the available SMBus addresses for | +| mapping Aura motherboards | +\*---------------------------------------------------------*/ #define AURA_MOBO_ADDRESS_COUNT 3 static const unsigned char aura_mobo_addresses[] = @@ -74,16 +78,6 @@ static const unsigned char aura_mobo_addresses[] = 0x4F }; -/******************************************************************************************\ -* * -* ENERegisterRead * -* * -* A standalone version of the ENESMBusController::ENERegisterRead function for * -* access to ENE devices without instancing the ENESMBusController class or reading * -* the config table from the device. * -* * -\******************************************************************************************/ - static unsigned char ENERegisterRead(i2c_smbus_interface* bus, ene_dev_id dev, ene_register reg) { //Write ENE register @@ -93,16 +87,6 @@ static unsigned char ENERegisterRead(i2c_smbus_interface* bus, ene_dev_id dev, e return(bus->i2c_smbus_read_byte_data(dev, 0x81)); } -/******************************************************************************************\ -* * -* ENERegisterWrite * -* * -* A standalone version of the ENESMBusController::ENERegisterWrite function for * -* access to ENE devices without instancing the ENESMBusController class or reading * -* the config table from the device. * -* * -\******************************************************************************************/ - static void ENERegisterWrite(i2c_smbus_interface* bus, ene_dev_id dev, ene_register reg, unsigned char val) { //Write ENE register @@ -112,20 +96,6 @@ static void ENERegisterWrite(i2c_smbus_interface* bus, ene_dev_id dev, ene_regis bus->i2c_smbus_write_byte_data(dev, 0x01, val); } -/******************************************************************************************\ -* * -* TestForENESMBusController * -* * -* Tests the given address to see if an ENE controller exists there. First does a * -* quick write to test for a response, and if so does a simple read at 0xA0 to test * -* for incrementing values 0...F which was observed at this location during data dump * -* * -* Also tests for the string "Micron" in the ENE register space. Crucial (Micron) * -* DRAM modules use an ENE controller with custom, incompatible firmware and must * -* be excluded from this controller. * -* * -\******************************************************************************************/ - bool TestForENESMBusController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -181,23 +151,13 @@ bool TestForENESMBusController(i2c_smbus_interface* bus, unsigned char address) } return(pass); +} -} /* TestForENESMBusController() */ - -/******************************************************************************************\ -* * -* DetectENESMBusDRAMControllers * -* * -* Detects ENE SMBus controllers on DRAM devices * -* * -* bus - pointer to i2c_smbus_interface where device is connected * -* dev - I2C address of device * -* * -\******************************************************************************************/ - -void DetectENESMBusDRAMControllers(std::vector &busses) +DetectedControllers DetectENESMBusDRAMControllers(std::vector &busses) { - for (unsigned int bus = 0; bus < busses.size(); bus++) + DetectedControllers detected_controllers; + + for(unsigned int bus = 0; bus < busses.size(); bus++) { int address_list_idx = -1; @@ -205,14 +165,13 @@ void DetectENESMBusDRAMControllers(std::vector &busses) { LOG_DEBUG("[ENE SMBus DRAM] Remapping ENE SMBus RAM modules on 0x77"); - for (unsigned int slot = 0; slot < 8; slot++) + for(unsigned int slot = 0; slot < 8; slot++) { int res = busses[bus]->i2c_smbus_write_quick(0x77, I2C_SMBUS_WRITE); if(res < 0) { LOG_DEBUG("[ENE SMBus DRAM] No device detected at 0x77, aborting remap"); - break; } @@ -230,7 +189,7 @@ void DetectENESMBusDRAMControllers(std::vector &busses) { break; } - } while (res >= 0); + } while(res >= 0); if(address_list_idx < ENE_RAM_ADDRESS_COUNT) { @@ -242,48 +201,41 @@ void DetectENESMBusDRAMControllers(std::vector &busses) } // Add ENE controllers at their remapped addresses - for (unsigned int address_list_idx = 0; address_list_idx < ENE_RAM_ADDRESS_COUNT; address_list_idx++) + for(unsigned int address_list_idx = 0; address_list_idx < ENE_RAM_ADDRESS_COUNT; address_list_idx++) { - if (TestForENESMBusController(busses[bus], ene_ram_addresses[address_list_idx])) + if(TestForENESMBusController(busses[bus], ene_ram_addresses[address_list_idx])) { ENESMBusInterface_i2c_smbus* interface = new ENESMBusInterface_i2c_smbus(busses[bus]); ENESMBusController* controller = new ENESMBusController(interface, ene_ram_addresses[address_list_idx], "ENE DRAM", DEVICE_TYPE_DRAM); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } std::this_thread::sleep_for(1ms); } } } -} /* DetectENESMBusDRAMControllers() */ -/******************************************************************************************\ -* * -* DetectENESMBusMotherboardControllers * -* * -* Detects ENE (ASUS Aura) SMBus controllers on ASUS motherboard devices * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ + return(detected_controllers); +} -void DetectENESMBusMotherboardControllers(std::vector &busses) +DetectedControllers DetectENESMBusMotherboardControllers(std::vector &busses) { - for (unsigned int bus = 0; bus < busses.size(); bus++) + DetectedControllers detected_controllers; + + for(unsigned int bus = 0; bus < busses.size(); bus++) { // Add ENE (ASUS Aura) motherboard controllers IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) { if(busses[bus]->pci_subsystem_vendor == ASUS_SUB_VEN || busses[bus]->pci_subsystem_vendor == 0 || busses[bus]->pci_subsystem_vendor == 0xFFFF) { - for (unsigned int address_list_idx = 0; address_list_idx < AURA_MOBO_ADDRESS_COUNT; address_list_idx++) + for(unsigned int address_list_idx = 0; address_list_idx < AURA_MOBO_ADDRESS_COUNT; address_list_idx++) { LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, aura_mobo_addresses[address_list_idx]); - if (TestForENESMBusController(busses[bus], aura_mobo_addresses[address_list_idx])) + if(TestForENESMBusController(busses[bus], aura_mobo_addresses[address_list_idx])) { DMIInfo dmi; @@ -291,7 +243,7 @@ void DetectENESMBusMotherboardControllers(std::vector &bus ENESMBusController* controller = new ENESMBusController(interface, aura_mobo_addresses[address_list_idx], "ASUS " + dmi.getMainboard(), DEVICE_TYPE_MOTHERBOARD); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } std::this_thread::sleep_for(1ms); @@ -303,41 +255,43 @@ void DetectENESMBusMotherboardControllers(std::vector &bus } } } -} /* DetectENESMBusMotherboardControllers() */ -/******************************************************************************************\ -* * -* DetectENESMBusGPUControllers * -* * -* Detects ENE (ASUS Aura) SMBus controllers on ASUS GPU devices * -* * -\******************************************************************************************/ + return(detected_controllers); +} -#define GPU_CHECK_DEVICE_MESSAGE_EN "[%s] Bus %02d is a GPU and the subvendor matches the one for %s, looking for a device at 0x%02X" - -void DetectENESMBusGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectENESMBusGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForENESMBusController(bus, i2c_addr)) { ENESMBusInterface_i2c_smbus* interface = new ENESMBusInterface_i2c_smbus(bus); ENESMBusController* controller = new ENESMBusController(interface, i2c_addr, name, DEVICE_TYPE_GPU); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { LOG_DEBUG("[ENE SMBus ASUS GPU] Testing for controller at %d failed", i2c_addr); } -} /* DetectENESMBusGPUControllers() */ + return(detected_controllers); +} + +/*---------------------------------------------------------*\ +| ENE RAM | +\*---------------------------------------------------------*/ REGISTER_I2C_DETECTOR("ENE SMBus DRAM", DetectENESMBusDRAMControllers); + +/*---------------------------------------------------------*\ +| ASUS Motherboards | +\*---------------------------------------------------------*/ REGISTER_I2C_DETECTOR("ASUS Aura SMBus Motherboard", DetectENESMBusMotherboardControllers); -/*-----------------------------------------*\ -| Nvidia GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| Nvidia GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX GeForce RTX 3050 Gaming", DetectENESMBusGPUControllers, NVIDIA_VEN, NVIDIA_RTX3050_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RTX3050_8G_GAMING, 0x67); REGISTER_I2C_PCI_DETECTOR("ASUS KO GeForce RTX 3060 Gaming OC", DetectENESMBusGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_DEV, ASUS_SUB_VEN, ASUS_KO_RTX_3060_OC_O12G_GAMING, 0x67); REGISTER_I2C_PCI_DETECTOR("ASUS TUF GeForce RTX 3060 Gaming OC", DetectENESMBusGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_DEV, ASUS_SUB_VEN, ASUS_TUF_RTX_3060_O12G_GAMING, 0x67); @@ -477,10 +431,9 @@ REGISTER_I2C_PCI_DETECTOR("ASUS ROG ASTRAL GeForce RTX 5090 OC WHITE", REGISTER_I2C_PCI_DETECTOR("ASUS ROG ASTRAL LC GeForce RTX 5090 OC", DetectENESMBusGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, ASUS_SUB_VEN, ASUS_ROG_ASTRAL_LC_RTX_5090_O32G_GAMING, 0x67); REGISTER_I2C_PCI_DETECTOR("ASUS ROG MATRIX PLATINUM GeForce RTX 5090", DetectENESMBusGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, ASUS_SUB_VEN, ASUS_ROG_MATRIX_PLATINUM_RTX_5090_P32G, 0x67); -/*-----------------------------------------*\ -| AMD GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| AMD GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 6600 XT Gaming OC", DetectENESMBusGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV, ASUS_SUB_VEN, ASUS_ROG_STRIX_RX_6600XT_O8G_GAMING, 0x67); REGISTER_I2C_PCI_DETECTOR("ASUS ROG STRIX Radeon RX 6650 XT Gaming", DetectENESMBusGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV1, ASUS_SUB_VEN, ASUS_ROG_STRIX_RX_6650XT_O8G_GAMING, 0x67); REGISTER_I2C_PCI_DETECTOR("ASUS TUF Radeon RX 6700 XT Gaming OC", DetectENESMBusGPUControllers, AMD_GPU_VEN, AMD_NAVI22_DEV, ASUS_SUB_VEN, ASUS_TUF_RX_6700XT_O12G_GAMING, 0x67); diff --git a/Controllers/ENESMBusController/ROGArionDetect.cpp b/Controllers/ENESMBusController/ROGArionDetect.cpp index 85ec4428c..40f762547 100644 --- a/Controllers/ENESMBusController/ROGArionDetect.cpp +++ b/Controllers/ENESMBusController/ROGArionDetect.cpp @@ -13,17 +13,12 @@ #include "RGBController_ENESMBus.h" #include "scsiapi.h" -/******************************************************************************************\ -* * -* DetectROGArionControllers * -* * -* Detects ENE SMBus controllers on ASUS ROG Arion devices * -* * -\******************************************************************************************/ - -void DetectROGArionControllers() +DetectedControllers DetectROGArionControllers() { - scsi_device_info * info = scsi_enumerate(NULL, NULL); + DetectedControllers detected_controllers; + scsi_device_info * info; + + info = scsi_enumerate(NULL, NULL); while(info) { @@ -37,7 +32,7 @@ void DetectROGArionControllers() ENESMBusController* controller = new ENESMBusController(interface, 0x67, "Asus ROG Strix Arion", DEVICE_TYPE_STORAGE); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } info = info->next; @@ -45,6 +40,7 @@ void DetectROGArionControllers() scsi_free_enumeration(info); -} /* DetectROGArionControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("ASUS ROG Arion", DetectROGArionControllers); diff --git a/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Linux.cpp b/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Linux.cpp index bec9816ad..1fb0f2dbd 100644 --- a/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Linux.cpp +++ b/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Linux.cpp @@ -20,20 +20,15 @@ #include "RGBController.h" #include "RGBController_ENESMBus.h" -/******************************************************************************************\ -* * -* DetectSpectrixS40GControllers * -* * -* Detects ENE SMBus controllers on XPG Spectrix S40G NVMe devices * -* * -\******************************************************************************************/ - -void DetectSpectrixS40GControllers() +DetectedControllers DetectSpectrixS40GControllers() { - /*---------------------------------------------------------------------*\ - | Search for /dev/nvmeX nodes with model matching "XPG SPECTRIX S40G" | - \*---------------------------------------------------------------------*/ - unsigned int nvme_idx = 0; + DetectedControllers detected_controllers; + + /*-----------------------------------------------------*\ + | Search for /dev/nvmeX nodes with model matching | + | "XPG SPECTRIX S40G" | + \*-----------------------------------------------------*/ + unsigned int nvme_idx = 0; while(1) { @@ -82,12 +77,14 @@ void DetectSpectrixS40GControllers() ENESMBusController* controller = new ENESMBusController(interface, 0x67, "XPG Spectrix S40G", DEVICE_TYPE_STORAGE); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } nvme_idx++; } -} /* DetectSpectrixS40GControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR( "XPG Spectrix S40G", DetectSpectrixS40GControllers); diff --git a/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Windows.cpp b/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Windows.cpp index 859a48868..c772a1ab6 100644 --- a/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Windows.cpp +++ b/Controllers/ENESMBusController/XPGSpectrixS40GDetect_Windows.cpp @@ -19,21 +19,14 @@ #define DEVBUFSIZE (128 * 1024) -/*----------------------------------------------------------------------*\ -| Windows defines "interface" for some reason. Work around this | -\*----------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Windows defines "interface" for some reason. Work around | +| this | +\*---------------------------------------------------------*/ #ifdef interface #undef interface #endif -/******************************************************************************************\ -* * -* Search * -* * -* Search for an NVMe device matching "XPG SPECTRIX S40G" * -* * -\******************************************************************************************/ - int Search(wchar_t *dev_name) { wchar_t buff[DEVBUFSIZE] = L""; @@ -61,14 +54,6 @@ int Search(wchar_t *dev_name) return 0; } -/******************************************************************************************\ -* * -* OpenDevice * -* * -* Open a handle to the given device path * -* * -\******************************************************************************************/ - HANDLE OpenDevice(wchar_t buff[MAX_PATH]) { wchar_t path[MAX_PATH]; @@ -88,23 +73,14 @@ HANDLE OpenDevice(wchar_t buff[MAX_PATH]) return(hDevice); } -/******************************************************************************************\ -* * -* DetectSpectrixS40GControllers * -* * -* Detects ENE SMBus controllers on XPG Spectrix S40G NVMe devices * -* * -* Tests for the existance of a file descriptor matching * -* SCSI#Disk&Ven_NVMe&Prod_XPG_SPECTRIX_S40# on Windows machines * -* * -\******************************************************************************************/ - -void DetectSpectrixS40GControllers() +DetectedControllers DetectSpectrixS40GControllers() { + DetectedControllers detected_controllers; + /*-------------------------------------------------------------------------------------------------*\ | https://docs.microsoft.com/en-us/windows-hardware/drivers/install/identifiers-for-scsi-devices | \*-------------------------------------------------------------------------------------------------*/ - wchar_t dev_name[MAX_PATH]; + wchar_t dev_name[MAX_PATH]; if(Search(dev_name)) { @@ -116,10 +92,11 @@ void DetectSpectrixS40GControllers() ENESMBusController* controller = new ENESMBusController(interface, 0x67, "XPG Spectrix S40G", DEVICE_TYPE_STORAGE); RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectSpectrixS40GControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR( "XPG Spectrix S40G", DetectSpectrixS40GControllers); diff --git a/Controllers/EVGAAmpereGPUController/EVGAAmpereGPUControllerDetect.cpp b/Controllers/EVGAAmpereGPUController/EVGAAmpereGPUControllerDetect.cpp index 68108d071..e65aca570 100644 --- a/Controllers/EVGAAmpereGPUController/EVGAAmpereGPUControllerDetect.cpp +++ b/Controllers/EVGAAmpereGPUController/EVGAAmpereGPUControllerDetect.cpp @@ -11,24 +11,15 @@ #include "DetectionManager.h" #include "EVGAGPUv3Controller.h" -#include "LogManager.h" -#include "RGBController_EVGAGPUv3.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_EVGAGPUv3.h" -/******************************************************************************************\ -* * -* DetectEVGAAmpereGPUControllers * -* * -* Detect EVGA Ampere GPU controllers on the enumerated I2C busses at address 0x2D. * -* * -* bus - pointer to i2c_smbus_interface where EVGA GPU device is connected * -* dev - I2C address of EVGA GPU device * -* * -\******************************************************************************************/ - -void DetectEVGAAmpereGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) +DetectedControllers DetectEVGAAmpereGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) { + DetectedControllers detected_controllers; + if(bus->port_id == 1) { EVGAGPUv3Controller* controller; @@ -40,7 +31,7 @@ void DetectEVGAAmpereGPUControllers(i2c_smbus_interface* bus, uint8_t address, c { rgb_controller = new RGBController_EVGAGPUv3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -48,7 +39,9 @@ void DetectEVGAAmpereGPUControllers(i2c_smbus_interface* bus, uint8_t address, c delete controller; } } -} /* DetectEVGAAmpereGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("EVGA GeForce RTX 3060 Ti FTW3 Gaming" , DetectEVGAAmpereGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_DEV, EVGA_SUB_VEN, EVGA_RTX3060TI_FTW3_GAMING_SUB_DEV, 0x2D); REGISTER_I2C_PCI_DETECTOR("EVGA GeForce RTX 3060 Ti FTW3 Ultra" , DetectEVGAAmpereGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060TI_DEV, EVGA_SUB_VEN, EVGA_RTX3060TI_FTW3_ULTRA_SUB_DEV, 0x2D); diff --git a/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp b/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp index ff1a6bd79..043f97341 100644 --- a/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp +++ b/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp @@ -12,28 +12,17 @@ #include #include "DetectionManager.h" #include "EVGAGP102Controller.h" -#include "LogManager.h" -#include "RGBController_EVGAGP102.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_EVGAGP102.h" -/******************************************************************************************\ -* * -* DetectEVGAGP102GPUControllers * -* * -* Detect EVGA GP102 GPU controllers on the enumerated I2C busses at address 0x49. * -* * -* bus - pointer to i2c_smbus_interface where EVGA GPU device is connected * -* address - unused, the address comes from the GPU zone info table * -* name - name string of detected PCI device * -* * -\******************************************************************************************/ - -void DetectEVGAGP102GPUControllers(i2c_smbus_interface* bus, uint8_t /*address*/, const std::string& name) +DetectedControllers DetectEVGAGP102GPUControllers(i2c_smbus_interface* bus, uint8_t /*address*/, const std::string& name) { + DetectedControllers detected_controllers; + if(bus->port_id == 1) { - RGBController_EVGAGP102* new_rgbcontroller; std::vector controllers; for(unsigned int i = 0; i < sizeof(gpuzoneinfos) / sizeof(zoneinfo); i++) @@ -52,12 +41,14 @@ void DetectEVGAGP102GPUControllers(i2c_smbus_interface* bus, uint8_t /*address*/ if(controllers.size() != 0) { - new_rgbcontroller = new RGBController_EVGAGP102(controllers); + RGBController_EVGAGP102* rgb_controller = new RGBController_EVGAGP102(controllers); - DetectionManager::get()->RegisterRGBController(new_rgbcontroller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectEVGAGP102GPUControllers() */ + + return(detected_controllers); +} /*---------------------------------------------------------*\ | The I2C address is provided by the GPU Zone Info table, | diff --git a/Controllers/EVGAPascalGPUController/EVGAPascalGPUControllerDetect.cpp b/Controllers/EVGAPascalGPUController/EVGAPascalGPUControllerDetect.cpp index 1962b0230..a720cb37f 100644 --- a/Controllers/EVGAPascalGPUController/EVGAPascalGPUControllerDetect.cpp +++ b/Controllers/EVGAPascalGPUController/EVGAPascalGPUControllerDetect.cpp @@ -11,32 +11,25 @@ #include "DetectionManager.h" #include "EVGAGPUv1Controller.h" -#include "LogManager.h" -#include "RGBController_EVGAGPUv1.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_EVGAGPUv1.h" -/******************************************************************************************\ -* * -* DetectEVGAGPUControllers * -* * -* Detect EVGA Pascal GPU controllers on the enumerated I2C busses at address 0x49. * -* * -* bus - pointer to i2c_smbus_interface where EVGA GPU device is connected * -* dev - I2C address of EVGA GPU device * -* * -\******************************************************************************************/ - -void DetectEVGAPascalGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) +DetectedControllers DetectEVGAPascalGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) { + DetectedControllers detected_controllers; + if(bus->port_id == 1) { EVGAGPUv1Controller* controller = new EVGAGPUv1Controller(bus, address, name); RGBController_EVGAGPUv1* rgb_controller = new RGBController_EVGAGPUv1(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectEVGAPascalGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("EVGA GeForce GTX 1070 FTW DT Gaming", DetectEVGAPascalGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, EVGA_SUB_VEN, EVGA_GTX1070_FTW_DT_GAMING_SUB_DEV, 0x49); REGISTER_I2C_PCI_DETECTOR("EVGA GeForce GTX 1070 FTW", DetectEVGAPascalGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, EVGA_SUB_VEN, EVGA_GTX1070_FTW_SUB_DEV, 0x49); diff --git a/Controllers/EVGASMBusController/EVGASMBusControllerDetect.cpp b/Controllers/EVGASMBusController/EVGASMBusControllerDetect.cpp index 119ac682a..63672238f 100644 --- a/Controllers/EVGASMBusController/EVGASMBusControllerDetect.cpp +++ b/Controllers/EVGASMBusController/EVGASMBusControllerDetect.cpp @@ -12,22 +12,12 @@ #include #include "DetectionManager.h" #include "EVGAACX30SMBusController.h" -#include "LogManager.h" -#include "RGBController_EVGAACX30SMBus.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_EVGAACX30SMBus.h" -/******************************************************************************************\ -* * -* TestForAcx30SMBusController * -* * -* Tests the given address to see if an EVGA ACX 30 controller exists there. * -* First does a quick write to test for a response * -* Then checks if it has 1st bit set in register 1 * -* * -\******************************************************************************************/ - -#define EVGA_DETECTOR_NAME "EVGA SMBus Detectector" +#define EVGA_DETECTOR_NAME "EVGA SMBus Detector" #define VENDOR_NAME "EVGA" #define SMBUS_ADDRESS 0x28 @@ -48,18 +38,12 @@ bool TestForAcx30SMBusController(i2c_smbus_interface *bus, uint8_t address) } return(pass); -} /* TestForAcx30SMBusController() */ +} -/******************************************************************************************\ -* * -* DetectAcx30SMBusControllers * -* * -* Detect EVGA ACX 30 SMBus controllers on the enumerated I2C busses at address 0x28. * -* * -\******************************************************************************************/ - -void DetectAcx30SMBusControllers(std::vector &busses) +DetectedControllers DetectAcx30SMBusControllers(std::vector &busses) { + DetectedControllers detected_controllers; + for(unsigned int bus = 0; bus < busses.size(); bus++) { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) @@ -70,10 +54,10 @@ void DetectAcx30SMBusControllers(std::vector &busses) // Check for ACX 30 controller at 0x28 if(TestForAcx30SMBusController(busses[bus], SMBUS_ADDRESS)) { - EVGAACX30SMBusController *controller = new EVGAACX30SMBusController(busses[bus], SMBUS_ADDRESS); - RGBController_EVGAACX30SMBus *rgb_controller = new RGBController_EVGAACX30SMBus(controller); + EVGAACX30SMBusController * controller = new EVGAACX30SMBusController(busses[bus], SMBUS_ADDRESS); + RGBController_EVGAACX30SMBus * rgb_controller = new RGBController_EVGAACX30SMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } else @@ -82,6 +66,8 @@ void DetectAcx30SMBusControllers(std::vector &busses) } } } -} /* DetectAcx30SMBusControllers() */ + + return(detected_controllers); +} REGISTER_I2C_DETECTOR("EVGA Motherboard SMBus Controllers", DetectAcx30SMBusControllers); diff --git a/Controllers/EVGATuringGPUController/EVGATuringGPUControllerDetect.cpp b/Controllers/EVGATuringGPUController/EVGATuringGPUControllerDetect.cpp index 46d6682b3..9c9fc5d9c 100644 --- a/Controllers/EVGATuringGPUController/EVGATuringGPUControllerDetect.cpp +++ b/Controllers/EVGATuringGPUController/EVGATuringGPUControllerDetect.cpp @@ -11,31 +11,24 @@ #include "DetectionManager.h" #include "EVGAGPUv2Controller.h" -#include "RGBController_EVGAGPUv2.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "RGBController_EVGAGPUv2.h" -/******************************************************************************************\ -* * -* DetectEVGATuringGPUControllers * -* * -* Detect EVGA Turing GPU controllers on the enumerated I2C busses at address 0x49. * -* * -* bus - pointer to i2c_smbus_interface where EVGA GPU device is connected * -* dev - I2C address of EVGA GPU device * -* * -\******************************************************************************************/ - -void DetectEVGATuringGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) +DetectedControllers DetectEVGATuringGPUControllers(i2c_smbus_interface* bus, uint8_t address, const std::string& name) { + DetectedControllers detected_controllers; + if(bus->port_id == 1) { EVGAGPUv2Controller* controller = new EVGAGPUv2Controller(bus, address, name); RGBController_EVGAGPUv2* rgb_controller = new RGBController_EVGAGPUv2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectEVGATuringGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("EVGA GeForce RTX 2070 XC Black" , DetectEVGATuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_DEV, EVGA_SUB_VEN, EVGA_RTX2070_XC_BLACK_SUB_DEV, 0x49); REGISTER_I2C_PCI_DETECTOR("EVGA GeForce RTX 2070 XC Gaming" , DetectEVGATuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, EVGA_SUB_VEN, EVGA_RTX2070_XC_GAMING_SUB_DEV, 0x49); diff --git a/Controllers/EVGAUSBController/EVGAUSBControllerDetect.cpp b/Controllers/EVGAUSBController/EVGAUSBControllerDetect.cpp index 90bf6e92f..861607902 100644 --- a/Controllers/EVGAUSBController/EVGAUSBControllerDetect.cpp +++ b/Controllers/EVGAUSBController/EVGAUSBControllerDetect.cpp @@ -12,62 +12,71 @@ #include "RGBController_EVGAKeyboard.h" #include "RGBController_EVGAMouse.h" -/*-----------------------------------------------------*\ -| EVGA USB vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| EVGA USB vendor ID | +\*---------------------------------------------------------*/ #define EVGA_USB_VID 0x3842 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define Z15_ISO_PID 0x260E #define Z15_ANSI_PID 0x2608 #define Z20_ANSI_PID 0x260A #define Z20_UK_PID 0x2610 -/*-----------------------------------------------------*\ -| Mouse product IDs | -\*-----------------------------------------------------*/ -#define X20_WIRED_PID 0x2420 -#define X20_WIRELESS_ADAPTER_PID 0x2402 +/*---------------------------------------------------------*\ +| Mouse product IDs | +\*---------------------------------------------------------*/ +#define X20_WIRED_PID 0x2420 +#define X20_WIRELESS_ADAPTER_PID 0x2402 -void DetectEVGAKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectEVGAKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { EVGAKeyboardController* controller = new EVGAKeyboardController(dev, info->path, info->product_id, name); RGBController_EVGAKeyboard* rgb_controller = new RGBController_EVGAKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectEVGAMouse(hid_device_info* info, const std::string &name, int connection_type) +DetectedControllers DetectEVGAMouse(hid_device_info* info, const std::string &name, int connection_type) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { EVGAMouseController* controller = new EVGAMouseController(dev, info->path, connection_type, name); RGBController_EVGAMouse* rgb_controller = new RGBController_EVGAMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectWiredEVGAMouse(hid_device_info* info, const std::string &name) +DetectedControllers DetectWiredEVGAMouse(hid_device_info* info, const std::string &name) { - DetectEVGAMouse(info, name, EVGA_PERIPHERAL_CONNECTION_TYPE_WIRED); + return(DetectEVGAMouse(info, name, EVGA_PERIPHERAL_CONNECTION_TYPE_WIRED)); } -void DetectWirelessEVGAMouse(hid_device_info* info, const std::string &name) +DetectedControllers DetectWirelessEVGAMouse(hid_device_info* info, const std::string &name) { - DetectEVGAMouse(info, name, EVGA_PERIPHERAL_CONNECTION_TYPE_WIRELESS); + return(DetectEVGAMouse(info, name, EVGA_PERIPHERAL_CONNECTION_TYPE_WIRELESS)); } - REGISTER_HID_DETECTOR_IPU("EVGA Z15 Keyboard", DetectEVGAKeyboardControllers, EVGA_USB_VID, Z15_ISO_PID, 1, 0x08, 0x4B); REGISTER_HID_DETECTOR_IPU("EVGA Z15 Keyboard", DetectEVGAKeyboardControllers, EVGA_USB_VID, Z15_ANSI_PID, 1, 0x08, 0x4B); REGISTER_HID_DETECTOR_IPU("EVGA Z20 Keyboard", DetectEVGAKeyboardControllers, EVGA_USB_VID, Z20_ANSI_PID, 1, 0x08, 0x4B); diff --git a/Controllers/EVisionKeyboardController/EVisionKeyboardControllerDetect.cpp b/Controllers/EVisionKeyboardController/EVisionKeyboardControllerDetect.cpp index f6428b15e..e6dbc63a3 100644 --- a/Controllers/EVisionKeyboardController/EVisionKeyboardControllerDetect.cpp +++ b/Controllers/EVisionKeyboardController/EVisionKeyboardControllerDetect.cpp @@ -16,9 +16,9 @@ #include "ResourceManager.h" #include "SettingsManager.h" -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define EVISION_KEYBOARD_VID 0x0C45 #define EVISION_KEYBOARD2_VID 0x320F #define EVISION_KEYBOARD3_VID 0x3299 @@ -39,71 +39,74 @@ #define BYGG_CSB_ICL01_PID 0x5041 #define GAMEPOWER_OGRE_RGB_PID 0x7672 -/******************************************************************************************\ -* * -* DetectEVisionKeyboards * -* * -* Tests the USB address to see if an EVision RGB Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectEVisionKeyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectEVisionKeyboards(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { EVisionKeyboardController* controller = new EVisionKeyboardController(dev, info->path, name); RGBController_EVisionKeyboard* rgb_controller = new RGBController_EVisionKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectEVisionV2Keyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectEVisionV2Keyboards(hid_device_info* info, const std::string& name) { - json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("EVision2Settings"); - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("EVision2Settings"); + hid_device* dev = hid_open_path(info->path); if(dev) { EVisionV2KeyboardController* controller = new EVisionV2KeyboardController(dev, info->path, EVISION_V2_KEYBOARD_LAYOUT, name); RGBController_EVisionV2Keyboard* rgb_controller = new RGBController_EVisionV2Keyboard(controller, EVISION_V2_KEYBOARD_PART_KEYBOARD); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); if(!settings.contains("AdditionalZones") || settings["AdditionalZones"] == true) { rgb_controller = new RGBController_EVisionV2Keyboard(controller, EVISION_V2_KEYBOARD_PART_LOGO); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); rgb_controller = new RGBController_EVisionV2Keyboard(controller, EVISION_V2_KEYBOARD_PART_EDGE); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } -void DetectEndorfyKeyboards(hid_device_info* info, const std::string& name) +DetectedControllers DetectEndorfyKeyboards(hid_device_info* info, const std::string& name) { - json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("EndorfySettings"); - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("EndorfySettings"); + hid_device* dev = hid_open_path(info->path); if(dev) { EVisionV2KeyboardController* controller = new EVisionV2KeyboardController(dev, info->path, ENDORFY_KEYBOARD_LAYOUT, name); RGBController_EVisionV2Keyboard* rgb_controller = new RGBController_EVisionV2Keyboard(controller, EVISION_V2_KEYBOARD_PART_KEYBOARD); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); if(!settings.contains("AdditionalZones") || settings["AdditionalZones"] == true) { rgb_controller = new RGBController_EVisionV2Keyboard(controller, ENDORFY_KEYBOARD_PART_EDGE); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } /*---------------------------------------------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/ElgatoKeyLightController/ElgatoKeyLightControllerDetect.cpp b/Controllers/ElgatoKeyLightController/ElgatoKeyLightControllerDetect.cpp index f6394df94..2305892d8 100644 --- a/Controllers/ElgatoKeyLightController/ElgatoKeyLightControllerDetect.cpp +++ b/Controllers/ElgatoKeyLightController/ElgatoKeyLightControllerDetect.cpp @@ -13,26 +13,20 @@ #include "RGBController_ElgatoKeyLight.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectElgatoKeyLightControllers * -* * -* Detect Elgato KeyLight devices * -* * -\******************************************************************************************/ - -void DetectElgatoKeyLightControllers() +DetectedControllers DetectElgatoKeyLightControllers() { - json elgato_keylight_settings; + DetectedControllers detected_controllers; + json elgato_keylight_settings; - /*-------------------------------------------------*\ - | Get KeyLight settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get KeyLight settings from settings manager | + \*-----------------------------------------------------*/ elgato_keylight_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("ElgatoKeyLightDevices"); - /*----------------------------------------------------------*\ - | If the Elgato Key Light settings contains devices, process| - \*----------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Elgato Key Light settings contains devices, | + | process | + \*-----------------------------------------------------*/ if(elgato_keylight_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < elgato_keylight_settings["devices"].size(); device_idx++) @@ -44,11 +38,12 @@ void DetectElgatoKeyLightControllers() ElgatoKeyLightController* controller = new ElgatoKeyLightController(elgato_keylight_ip); RGBController_ElgatoKeyLight* rgb_controller = new RGBController_ElgatoKeyLight(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectElgatoKeyLightControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("ElgatoKeyLight", DetectElgatoKeyLightControllers); diff --git a/Controllers/ElgatoLightStripController/ElgatoLightStripControllerDetect.cpp b/Controllers/ElgatoLightStripController/ElgatoLightStripControllerDetect.cpp index 4c68c0386..3b36bbfea 100644 --- a/Controllers/ElgatoLightStripController/ElgatoLightStripControllerDetect.cpp +++ b/Controllers/ElgatoLightStripController/ElgatoLightStripControllerDetect.cpp @@ -13,24 +13,20 @@ #include "RGBController_ElgatoLightStrip.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* Detect Elgato LightStrip devices * -* * -\******************************************************************************************/ - -void DetectElgatoLightStripControllers() +DetectedControllers DetectElgatoLightStripControllers() { - json elgato_lightstrip_settings; + DetectedControllers detected_controllers; + json elgato_lightstrip_settings; - /*-------------------------------------------------*\ - | Get LightStrip settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get LightStrip settings from settings manager | + \*-----------------------------------------------------*/ elgato_lightstrip_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("ElgatoLightStripDevices"); - /*------------------------------------------------------------*\ - | If the Elgato Light Strip settings contains devices, process | - \*------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Elgato Light Strip settings contains devices, | + | process | + \*-----------------------------------------------------*/ if(elgato_lightstrip_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < elgato_lightstrip_settings["devices"].size(); device_idx++) @@ -42,10 +38,12 @@ void DetectElgatoLightStripControllers() ElgatoLightStripController* controller = new ElgatoLightStripController(elgato_lightstrip_ip); RGBController_ElgatoLightStrip* rgb_controller = new RGBController_ElgatoLightStrip(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } + + return(detected_controllers); } REGISTER_DETECTOR("Elgato Light Strip", DetectElgatoLightStripControllers); diff --git a/Controllers/EpomakerController/EpomakerControllerDetect.cpp b/Controllers/EpomakerController/EpomakerControllerDetect.cpp index b6aa7a747..392cc7308 100644 --- a/Controllers/EpomakerController/EpomakerControllerDetect.cpp +++ b/Controllers/EpomakerController/EpomakerControllerDetect.cpp @@ -19,28 +19,25 @@ #define ATTACKSHARK_K86_USB_PID 0x4015 #define EPOMAKER_TH80_Pro_Dongle_PID 0x4011 /* Attack shark's Dongle is the same. */ #define EPOMAKER_TH80_Pro_BT_PID 0x4013 -#define ATTACKSHARK_K86_BT_PID 0x4012 +#define ATTACKSHARK_K86_BT_PID 0x401 -/******************************************************************************************\ -* * -* DetectEpomakerControllers * -* * -* Tests the USB address to see if any Epomaker Controllers exists there. * -* * -\******************************************************************************************/ - -void DetectEpomakerControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectEpomakerControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { EpomakerController* controller = new EpomakerController(dev, info->path); RGBController_EpomakerController* rgb_controller = new RGBController_EpomakerController(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectEpomakerControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_I("Epomaker TH80 Pro (USB Cable)", DetectEpomakerControllers, EPOMAKER_VID, EPOMAKER_TH80_Pro_USB_PID, 2); REGISTER_HID_DETECTOR_I("Epomaker TH80 Pro (USB Dongle)", DetectEpomakerControllers, EPOMAKER_VID, EPOMAKER_TH80_Pro_Dongle_PID, 2); diff --git a/Controllers/EspurnaController/EspurnaControllerDetect.cpp b/Controllers/EspurnaController/EspurnaControllerDetect.cpp index 99ddb07e4..19c5a2d58 100644 --- a/Controllers/EspurnaController/EspurnaControllerDetect.cpp +++ b/Controllers/EspurnaController/EspurnaControllerDetect.cpp @@ -16,26 +16,19 @@ #include "RGBController.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectEspurnaControllers * -* * -* Detect devices supported by the Espurna driver * -* * -\******************************************************************************************/ - -void DetectEspurnaControllers() +DetectedControllers DetectEspurnaControllers() { - json espurna_settings; + DetectedControllers detected_controllers; + json espurna_settings; - /*-------------------------------------------------*\ - | Get Espurna settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Espurna settings from settings manager | + \*-----------------------------------------------------*/ espurna_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("EspurnaDevices"); - /*-------------------------------------------------*\ - | If the Espurna settings contains devices, process | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Espurna settings contains devices, process | + \*-----------------------------------------------------*/ if(espurna_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < espurna_settings["devices"].size(); device_idx++) @@ -73,10 +66,11 @@ void DetectEspurnaControllers() RGBController_Espurna* rgb_controller = new RGBController_Espurna(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectEspurnaControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Espurna", DetectEspurnaControllers); diff --git a/Controllers/FanBusController/FanBusControllerDetect.cpp b/Controllers/FanBusController/FanBusControllerDetect.cpp index 11a3e8fe8..766bf4c4f 100644 --- a/Controllers/FanBusController/FanBusControllerDetect.cpp +++ b/Controllers/FanBusController/FanBusControllerDetect.cpp @@ -15,19 +15,20 @@ #include "ResourceManager.h" #include "SettingsManager.h" -void DetectFanBusControllers() +DetectedControllers DetectFanBusControllers() { + DetectedControllers detected_controllers; FanBusInterface* new_interface; json fanbus_settings; - /*-------------------------------------------------*\ - | Get LED Strip settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get FanBus settings from settings manager | + \*-----------------------------------------------------*/ fanbus_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("FanBusDevices"); - /*-------------------------------------------------*\ - | If the LEDStrip settings contains devices, process| - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the FanBus settings contains devices, process | + \*-----------------------------------------------------*/ if(fanbus_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < fanbus_settings["devices"].size(); device_idx++) @@ -38,18 +39,20 @@ void DetectFanBusControllers() new_interface = new FanBusInterface(port_val.c_str()); - std::vector detected_controllers = new_interface->DetectControllers(); + std::vector detected_fanbus_controllers = new_interface->DetectControllers(); - for(unsigned int controller_idx = 0; controller_idx < detected_controllers.size(); controller_idx++) + for(unsigned int controller_idx = 0; controller_idx < detected_fanbus_controllers.size(); controller_idx++) { - FanBusController* controller = new FanBusController(new_interface, detected_controllers[controller_idx]); + FanBusController* controller = new FanBusController(new_interface, detected_fanbus_controllers[controller_idx]); RGBController_FanBus* rgb_controller = new RGBController_FanBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } } + + return(detected_controllers); } REGISTER_DETECTOR("FanBus", DetectFanBusControllers); diff --git a/Controllers/FaustusController/RGBController_Faustus_Linux.cpp b/Controllers/FaustusController/RGBController_Faustus_Linux.cpp index 57aead7d9..8db61f6c7 100644 --- a/Controllers/FaustusController/RGBController_Faustus_Linux.cpp +++ b/Controllers/FaustusController/RGBController_Faustus_Linux.cpp @@ -154,43 +154,41 @@ void RGBController_Faustus::DeviceUpdateMode() DeviceUpdateLEDs(); } -void DetectFaustusControllers() +DetectedControllers DetectFaustusControllers() { - const char* base_path = "/sys/devices/platform/faustus/kbbl"; - DIR* dir = opendir(base_path); + DetectedControllers detected_controllers; + const char* base_path = "/sys/devices/platform/faustus/kbbl"; + DIR* dir = opendir(base_path); - if(!dir) + if(dir) { - return; - } + // Directory is present - we pretty much have a driver confirmation already, but double check for all files required just in case + struct dirent* dent = readdir(dir); - // Directory is present - we pretty much have a driver confirmation already, but double check for all files required just in case - struct dirent* dent = readdir(dir); - - if(!dent) - { - return; - } - - int found = 0; - while(dent) - { - const char* fname = dent->d_name; - if(!strcmp(fname, "kbbl_red") || !strcmp(fname, "kbbl_green") || !strcmp(fname, "kbbl_blue") || !strcmp(fname, "kbbl_mode") || !strcmp(fname, "kbbl_flags") || !strcmp(fname, "kbbl_set")) + if(dent) { - ++found; + int found = 0; + while(dent) + { + const char* fname = dent->d_name; + if(!strcmp(fname, "kbbl_red") || !strcmp(fname, "kbbl_green") || !strcmp(fname, "kbbl_blue") || !strcmp(fname, "kbbl_mode") || !strcmp(fname, "kbbl_flags") || !strcmp(fname, "kbbl_set")) + { + ++found; + } + dent = readdir(dir); + } + + closedir(dir); + + if(found == 6) + { + RGBController_Faustus * rgb_controller = new RGBController_Faustus(base_path); + detected_controllers.push_back(rgb_controller); + } } - dent = readdir(dir); } - closedir(dir); - - if(found != 6) - { - return; - } - - DetectionManager::get()->RegisterRGBController(new RGBController_Faustus(base_path)); -} /* DetectFaustusControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Faustus", DetectFaustusControllers); diff --git a/Controllers/FnaticStreakController/FnaticStreakControllerDetect.cpp b/Controllers/FnaticStreakController/FnaticStreakControllerDetect.cpp index 586a034c2..c082a80c5 100644 --- a/Controllers/FnaticStreakController/FnaticStreakControllerDetect.cpp +++ b/Controllers/FnaticStreakController/FnaticStreakControllerDetect.cpp @@ -14,22 +14,25 @@ #include "FnaticStreakController.h" #include "RGBController_FnaticStreak.h" -/*-----------------------------------------------------*\ -| Fnatic keyboard vendor and product IDs | -| Based on leddy project keyboard.rs | -| VID: 0x2f0e | -| PID: 0x0101 (Streak full) | -| PID: 0x0102 (miniStreak) | -| Interface: 1 | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Fnatic keyboard vendor and product IDs | +| Based on leddy project keyboard.rs | +| VID: 0x2f0e | +| PID: 0x0101 (Streak full) | +| PID: 0x0102 (miniStreak) | +| Interface: 1 | +\*---------------------------------------------------------*/ #define FNATIC_VID 0x2F0E #define FNATIC_STREAK_PID 0x0101 #define FNATIC_MINISTREAK_PID 0x0102 -void DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -47,8 +50,10 @@ void DetectFnaticStreakKeyboard(hid_device_info* info, const std::string& name) FnaticStreakController* controller = new FnaticStreakController(dev, info, name, kb_type); RGBController_FnaticStreak* rgb_controller = new RGBController_FnaticStreak(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_I("Fnatic Streak", DetectFnaticStreakKeyboard, FNATIC_VID, FNATIC_STREAK_PID, 1); diff --git a/Controllers/GaiZongGaiKeyboardController/GaiZhongGaiControllerDetect.cpp b/Controllers/GaiZongGaiKeyboardController/GaiZhongGaiControllerDetect.cpp index ad7d9c99e..59e51edff 100644 --- a/Controllers/GaiZongGaiKeyboardController/GaiZhongGaiControllerDetect.cpp +++ b/Controllers/GaiZongGaiKeyboardController/GaiZhongGaiControllerDetect.cpp @@ -14,26 +14,23 @@ #include "GaiZhongGaiController.h" #include "RGBController_GaiZhongGai.h" -/******************************************************************************************\ -* * -* DetectGaiZhongGaiKeyboardControllers * -* * -* Tests the USB address to see if a GaiZhongGai RGB Keyboard controller exists there.* -* * -\******************************************************************************************/ - -void DetectGaiZhongGaiKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGaiZhongGaiKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - GaiZhongGaiKeyboardController* controller = new GaiZhongGaiKeyboardController(dev, info, name); + GaiZhongGaiKeyboardController* controller = new GaiZhongGaiKeyboardController(dev, info, name); RGBController_GaiZhongGaiKeyboard* rgb_controller = new RGBController_GaiZhongGaiKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectGaiZhongGaiKeyboardControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_I("GaiZhongGai 68+4 PRO", DetectGaiZhongGaiKeyboardControllers, GAIZHONGGAI_VID, GAIZHONGGAI_68_PRO_PID, 3); REGISTER_HID_DETECTOR_I("GaiZhongGai 42 PRO", DetectGaiZhongGaiKeyboardControllers, GAIZHONGGAI_VID, GAIZHONGGAI_42_PRO_PID, 3); diff --git a/Controllers/GainwardGPUController/GainwardGPUControllerDetect.cpp b/Controllers/GainwardGPUController/GainwardGPUControllerDetect.cpp index b632dcc85..02b389e5e 100644 --- a/Controllers/GainwardGPUController/GainwardGPUControllerDetect.cpp +++ b/Controllers/GainwardGPUController/GainwardGPUControllerDetect.cpp @@ -13,18 +13,10 @@ #include "DetectionManager.h" #include "GainwardGPUv1Controller.h" #include "GainwardGPUv2Controller.h" -#include "RGBController_GainwardGPUv1.h" -#include "RGBController_GainwardGPUv2.h" #include "i2c_smbus.h" #include "pci_ids.h" - -/******************************************************************************************\ -* * -* TestForGainwardGPUController * -* * -* Tests the given address to see if a Gainward GPU controller exists there. * -* * -\******************************************************************************************/ +#include "RGBController_GainwardGPUv1.h" +#include "RGBController_GainwardGPUv2.h" bool TestForGainwardGPUController(i2c_smbus_interface* bus, uint8_t i2c_addr) { @@ -32,21 +24,22 @@ bool TestForGainwardGPUController(i2c_smbus_interface* bus, uint8_t i2c_addr) switch(i2c_addr) { - /*-----------------------------------------------------------------*\ - | V1 Controller | - \*-----------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | V1 Controller | + \*-------------------------------------------------*/ case 0x08: pass = bus->i2c_smbus_write_quick(i2c_addr, I2C_SMBUS_WRITE); break; - /*-----------------------------------------------------------------*\ - | V2 Controller | - \*-----------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | V2 Controller | + \*-------------------------------------------------*/ case 0x49: - /*-------------------------------------------------------------*\ - | This detection might need some modifications | - | Reading 0x6F*0x73 and comparing to 0x64 might be a possibility| - \*-------------------------------------------------------------*/ + /*---------------------------------------------*\ + | This detection might need some modifications | + | Reading 0x6F*0x73 and comparing to 0x64 might | + | be a possibility | + \*---------------------------------------------*/ s32 data = bus->i2c_smbus_read_byte_data(i2c_addr, 0x0); s32 mode_data = bus->i2c_smbus_read_byte_data(i2c_addr, 0xe0); pass = (data == 0x0) && (mode_data < 0x5); @@ -54,50 +47,44 @@ bool TestForGainwardGPUController(i2c_smbus_interface* bus, uint8_t i2c_addr) } return(pass); +} -} /* TestForGainwardGPUController() */ - - -/******************************************************************************************\ -* * -* DetectGainwardGPUControllers * -* * -* Detect Gainward GPU controllers on the enumerated I2C busses. * -* * -\******************************************************************************************/ - -void DetectGainwardGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGainwardGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForGainwardGPUController(bus, i2c_addr)) { switch(i2c_addr) { - /*-----------------------------------------------------------------*\ - | V1 Controller | - \*-----------------------------------------------------------------*/ + /*---------------------------------------------*\ + | V1 Controller | + \*---------------------------------------------*/ case 0x08: { GainwardGPUv1Controller* controller = new GainwardGPUv1Controller(bus, i2c_addr, name); RGBController_GainwardGPUv1* rgb_controller = new RGBController_GainwardGPUv1(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; - /*-----------------------------------------------------------------*\ - | V2 Controller | - \*-----------------------------------------------------------------*/ + /*---------------------------------------------*\ + | V2 Controller | + \*---------------------------------------------*/ case 0x49: { GainwardGPUv2Controller* controller = new GainwardGPUv2Controller(bus, i2c_addr, name); RGBController_GainwardGPUv2* rgb_controller = new RGBController_GainwardGPUv2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; } } -} /* DetectGainwardGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("Gainward GeForce GTX 1080 Phoenix", DetectGainwardGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, GAINWARD_SUB_VEN, GAINWARD_GTX_1080_PHOENIX, 0x08); REGISTER_I2C_PCI_DETECTOR("Gainward GeForce GTX 1080 Ti Phoenix", DetectGainwardGPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, GAINWARD_SUB_VEN, GAINWARD_GTX_1080TI_PHOENIX, 0x08); diff --git a/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp b/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp index b10100c9c..c4af75448 100644 --- a/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp +++ b/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp @@ -12,18 +12,10 @@ #include "DetectionManager.h" #include "GalaxGPUv1Controller.h" #include "GalaxGPUv2Controller.h" -#include "RGBController_GalaxGPUv1.h" -#include "RGBController_GalaxGPUv2.h" #include "i2c_smbus.h" #include "pci_ids.h" - -/******************************************************************************************\ -* * -* TestForGalaxGPUController * -* * -* Tests the given address to see if a Galax GPU controller exists there. * -* * -\******************************************************************************************/ +#include "RGBController_GalaxGPUv1.h" +#include "RGBController_GalaxGPUv2.h" bool TestForGalaxGPUController(i2c_smbus_interface* bus, unsigned char address) { @@ -32,9 +24,9 @@ bool TestForGalaxGPUController(i2c_smbus_interface* bus, unsigned char address) switch (address) { - /*-----------------------------------------------------------------*\ - | V1 Controller | - \*-----------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | V1 Controller | + \*-------------------------------------------------*/ case 0x32: res = bus->i2c_smbus_read_byte_data(address, 0x00); if(res == 0x27 || res == 0x26) { @@ -44,9 +36,9 @@ bool TestForGalaxGPUController(i2c_smbus_interface* bus, unsigned char address) } break; - /*-----------------------------------------------------------------*\ - | V1 Controller - RTX 3080 | - \*-----------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | V1 Controller - RTX 3080 | + \*-------------------------------------------------*/ case 0x23: res = bus->i2c_smbus_read_byte_data(address, 0x00); if(res == 0x30) @@ -55,9 +47,9 @@ bool TestForGalaxGPUController(i2c_smbus_interface* bus, unsigned char address) } break; - /*-----------------------------------------------------------------*\ - | V2 Controller | - \*-----------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | V2 Controller | + \*-------------------------------------------------*/ case 0x51: res = bus->i2c_smbus_read_byte_data(address, 0x00); if (res == 0x80) @@ -66,26 +58,19 @@ bool TestForGalaxGPUController(i2c_smbus_interface* bus, unsigned char address) } return(pass); -} /* TestForGalaxGPUController() */ +} - -/******************************************************************************************\ -* * -* DetectGalaxGPUControllers * -* * -* Detect Galax GPU controllers on the enumerated I2C busses. * -* * -\******************************************************************************************/ - -void DetectGalaxGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGalaxGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForGalaxGPUController(bus, i2c_addr)) { switch(i2c_addr) { - /*-----------------------------------------------------------------*\ - | V1 Controller | - \*-----------------------------------------------------------------*/ + /*---------------------------------------------*\ + | V1 Controller | + \*---------------------------------------------*/ case 0x32: case 0x23: { @@ -96,20 +81,22 @@ void DetectGalaxGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const } break; - /*-----------------------------------------------------------------*\ - | V2 Controller | - \*-----------------------------------------------------------------*/ + /*---------------------------------------------*\ + | V2 Controller | + \*---------------------------------------------*/ case 0x51: { GalaxGPUv2Controller* controller = new GalaxGPUv2Controller(bus, i2c_addr, name); RGBController_GalaxGPUv2* rgb_controller = new RGBController_GalaxGPUv2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; } } -} /* DetectGalaxGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("KFA2 GeForce RTX 2070 EX", DetectGalaxGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_DEV, NVIDIA_SUB_VEN, KFA2_RTX_2070_EX_SUB_DEV, 0x23); REGISTER_I2C_PCI_DETECTOR("KFA2 GeForce RTX 2070 OC", DetectGalaxGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, NVIDIA_SUB_VEN, KFA2_RTX_2070_OC_SUB_DEV, 0x23); diff --git a/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp b/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp index a610417ae..39f8ee95f 100644 --- a/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp +++ b/Controllers/GigabyteAorusCPUCoolerController/GigabyteAorusCPUCoolerControllerDetect.cpp @@ -12,35 +12,32 @@ #include "ATC800Controller.h" #include "RGBController_AorusATC800.h" -/*-----------------------------------------------------*\ -| Vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Vendor ID | +\*---------------------------------------------------------*/ #define HOLTEK_VID 0x1044 -/*-----------------------------------------------------*\ -| Controller product ids | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Controller product ids | +\*---------------------------------------------------------*/ #define ATC_800_CONTROLLER_PID 0x7A42 -/******************************************************************************************\ -* * -* DetectAorusCPUCoolerControllers * -* * -* Tests the USB address to see if a Aorus RGB CPU Cooler exists there. * -* * -\******************************************************************************************/ - -void DetectGigabyteAorusCPUCoolerControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGigabyteAorusCPUCoolerControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { ATC800Controller* controller = new ATC800Controller(dev, info->path, name); RGBController_AorusATC800* rgb_controller = new RGBController_AorusATC800(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Gigabyte AORUS ATC800", DetectGigabyteAorusCPUCoolerControllers, HOLTEK_VID, ATC_800_CONTROLLER_PID, 0, 0xFF01, 1); diff --git a/Controllers/GigabyteAorusLaptopController/GigabyteAorusLaptopControllerDetect.cpp b/Controllers/GigabyteAorusLaptopController/GigabyteAorusLaptopControllerDetect.cpp index 0fb74341f..04c9442c0 100644 --- a/Controllers/GigabyteAorusLaptopController/GigabyteAorusLaptopControllerDetect.cpp +++ b/Controllers/GigabyteAorusLaptopController/GigabyteAorusLaptopControllerDetect.cpp @@ -27,27 +27,32 @@ #define AORUS_15BKF_BACKLIGHT_PID 0x7A44 #define AORUS_15BKF_KEYBOARD_PID 0x7A43 -void DetectGigabyteAorusLaptopControllers(hid_device_info* info, const std::string& name, GIGABYTE_AORUS_LAPTOP_DEV_TYPE dev_type) +DetectedControllers DetectGigabyteAorusLaptopControllers(hid_device_info* info, const std::string& name, GIGABYTE_AORUS_LAPTOP_DEV_TYPE dev_type) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { GigabyteAorusLaptopController* controller = new GigabyteAorusLaptopController(dev, *info, name); RGBController_GigabyteAorusLaptop* rgb_controller = new RGBController_GigabyteAorusLaptop(controller, dev_type); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectGigabyteAorusLaptopKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGigabyteAorusLaptopKeyboardControllers(hid_device_info* info, const std::string& name) { - DetectGigabyteAorusLaptopControllers(info, name, GIGABYTE_AORUS_LAPTOP_KEYBOARD_TYPE); + return(DetectGigabyteAorusLaptopControllers(info, name, GIGABYTE_AORUS_LAPTOP_KEYBOARD_TYPE)); } -void DetectGigabyteAorusLaptopBacklightControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGigabyteAorusLaptopBacklightControllers(hid_device_info* info, const std::string& name) { - DetectGigabyteAorusLaptopControllers(info, name, GIGABYTE_AORUS_LAPTOP_BACKLIGHT_TYPE); + return(DetectGigabyteAorusLaptopControllers(info, name, GIGABYTE_AORUS_LAPTOP_BACKLIGHT_TYPE)); } REGISTER_HID_DETECTOR_IPU("Gigabyte Aorus 17X Keyboard", DetectGigabyteAorusLaptopKeyboardControllers, GIGABYTE_AORUS_LAPTOP_VID, AORUS_17X_KEYBOARD_PID, 3, 0xFF01, 0x01); diff --git a/Controllers/GigabyteAorusMouseController/GigabyteAorusMouseControllerDetect.cpp b/Controllers/GigabyteAorusMouseController/GigabyteAorusMouseControllerDetect.cpp index 0b5ea7276..3696296a6 100644 --- a/Controllers/GigabyteAorusMouseController/GigabyteAorusMouseControllerDetect.cpp +++ b/Controllers/GigabyteAorusMouseController/GigabyteAorusMouseControllerDetect.cpp @@ -14,27 +14,32 @@ #include "GigabyteAorusMouseController.h" #include "RGBController_GigabyteAorusMouse.h" -/*-----------------------------------------------------*\ -| Vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Vendor ID | +\*---------------------------------------------------------*/ #define HOLTEK_VID 0x1044 -/*-----------------------------------------------------*\ -| Controller product ids | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Controller product ids | +\*---------------------------------------------------------*/ #define AORUS_M2_PID 0x7A40 -void DetectGigabyteAorusMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGigabyteAorusMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { GigabyteAorusMouseController* controller = new GigabyteAorusMouseController(dev, *info, name); RGBController_GigabyteAorusMouse* rgb_controller = new RGBController_GigabyteAorusMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Gigabyte Aorus M2", DetectGigabyteAorusMouseControllers, HOLTEK_VID, AORUS_M2_PID, 3, 0xFF01, 0x01); diff --git a/Controllers/GigabyteAorusPCCaseController/GigabyteAorusPCCaseControllerDetect.cpp b/Controllers/GigabyteAorusPCCaseController/GigabyteAorusPCCaseControllerDetect.cpp index a3da7dc5c..38a159248 100644 --- a/Controllers/GigabyteAorusPCCaseController/GigabyteAorusPCCaseControllerDetect.cpp +++ b/Controllers/GigabyteAorusPCCaseController/GigabyteAorusPCCaseControllerDetect.cpp @@ -14,34 +14,32 @@ #include "GigabyteAorusPCCaseController.h" #include "RGBController_GigabyteAorusPCCase.h" -/*-----------------------------------------------------*\ -| Vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Vendor ID | +\*---------------------------------------------------------*/ #define HOLTEK_VID 0x1044 -/*-----------------------------------------------------*\ -| Controller product ids | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Controller product ids | +\*---------------------------------------------------------*/ #define C300_GLASS_PID 0x7A30 -/******************************************************************************************\ -* * -* DetectGigabyteAorusPCCaseControllers * -* * -* Tests the USB address to see if a Gigabyte Aorus PC Case exists there. * -* * -\******************************************************************************************/ -void DetectGigabyteAorusPCCaseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectGigabyteAorusPCCaseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { GigabyteAorusPCCaseController* controller = new GigabyteAorusPCCaseController(dev, info->path, name); RGBController_GigabyteAorusPCCase* rgb_controller = new RGBController_GigabyteAorusPCCase(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Gigabyte AORUS C300 GLASS", DetectGigabyteAorusPCCaseControllers, HOLTEK_VID, C300_GLASS_PID, 0, 0xFF01, 0x01); diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp index 62ec85d53..84c1160fb 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp @@ -10,23 +10,14 @@ #include #include "DetectionManager.h" #include "GigabyteRGBFusion2BlackwellGPUController.h" -#include "LogManager.h" -#include "RGBController_GigabyteRGBFusion2BlackwellGPU.h" #include "i2c_amd_gpu.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_GigabyteRGBFusion2BlackwellGPU.h" #define GIGABYTEGPU_CONTROLLER_NAME3 "Gigabyte RGB Fusion2 Blackwell GPU" -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusion2BlackwellGPUController * -* * -* Tests the given address to see if an RGB Fusion2 controller exists there. First * -* does a quick write to test for a response * -* * -\******************************************************************************************/ - bool TestForGigabyteRGBFusion2BlackwellGPUController(i2c_smbus_interface* bus, unsigned char address) { if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus)) @@ -70,103 +61,47 @@ bool TestForGigabyteRGBFusion2BlackwellGPUController(i2c_smbus_interface* bus, u } return(pass); -} /* TestForRGBFusion2BlackwellGPUController() */ +} -/*******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2BlackwellGPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers with a specified layout on the enumerated * -* I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ - -void DetectGigabyteRGBFusion2BlackwellGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name, uint8_t led_zones) +DetectedControllers DetectGigabyteRGBFusion2BlackwellGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name, uint8_t led_zones) { + DetectedControllers detected_controllers; + // Check for RGB Fusion2 controller if(TestForGigabyteRGBFusion2BlackwellGPUController(bus, i2c_addr)) { RGBFusion2BlackwellGPUController* controller = new RGBFusion2BlackwellGPUController(bus, i2c_addr, name); RGBController_RGBFusion2BlackwellGPU* rgb_controller = new RGBController_RGBFusion2BlackwellGPU(controller, led_zones); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectGigabyteRGBFusion2BlackwellGPUControllers() */ -/*******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers with one zone on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ + return(detected_controllers); +} -void DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE); -} /* DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers() */ + return(DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE)); +} -/*******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers with gaming layouts on the enumerated I2C * -* busses. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ - -void DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT); -} /* DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers() */ + return(DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT)); +} -/*******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers with waterforce layouts on the enumerated * -* I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ - -void DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT); -} /* DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers() */ + return(DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT)); +} -/*******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers with AORUS waterforce layout on the * -* enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ - -void DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT); -} /* DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers() */ - -/*-----------------------------------------*\ -| Nvidia GPUs | -\*-----------------------------------------*/ + return(DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT)); +} +/*---------------------------------------------------------*\ +| Nvidia GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5060 Ti Gaming OC", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5060TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5060TI_GAMING_OC_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Aero OC", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070_AERO_OC_12G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Eagle OC", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070_EAGLE_OC_12G_SUB_DEV, 0x75); @@ -185,14 +120,11 @@ REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_32G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER ICE", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_ICE_32G_SUB_DEV, 0x75); -/*-----------------------------------------*\ -| AMD GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| AMD GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 9060 XT GAMING", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, AMD_GPU_VEN, AMD_NAVI44_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX9060XT_GAMING_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 9060 XT GAMING OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, AMD_GPU_VEN, AMD_NAVI44_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX9060XT_GAMING_OC_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS Radeon RX 9070 XT Elite", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, AMD_GPU_VEN, AMD_NAVI48_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RX9070XT_ELITE_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 9070 XT GAMING OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, AMD_GPU_VEN, AMD_NAVI48_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX9070XT_GAMING_OC_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 9070 XT GAMING", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, AMD_GPU_VEN, AMD_NAVI48_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX9070XT_GAMING_16G_SUB_DEV, 0x75); - - diff --git a/Controllers/GigabyteRGBFusion2DRAMController/GigabyteRGBFusion2DRAMControllerDetect.cpp b/Controllers/GigabyteRGBFusion2DRAMController/GigabyteRGBFusion2DRAMControllerDetect.cpp index e081b21e5..35528f1ba 100644 --- a/Controllers/GigabyteRGBFusion2DRAMController/GigabyteRGBFusion2DRAMControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2DRAMController/GigabyteRGBFusion2DRAMControllerDetect.cpp @@ -12,20 +12,11 @@ #include #include #include "DetectionManager.h" -#include "LogManager.h" #include "GigabyteRGBFusion2DRAMController.h" -#include "RGBController_GigabyteRGBFusion2DRAM.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" - -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusion2DRAMController * -* * -* Tests the given address to see if an RGB 2 Fusion DRAMcontroller exists there. * -* First does a quick write to test for a response * -* * -\******************************************************************************************/ +#include "RGBController_GigabyteRGBFusion2DRAM.h" bool TestForGigabyteRGBFusion2DRAMController(i2c_smbus_interface* bus, unsigned char address) { @@ -55,22 +46,12 @@ bool TestForGigabyteRGBFusion2DRAMController(i2c_smbus_interface* bus, unsigned } return(pass); +} -} /* TestForGigabyteRGBFusion2DRAMController() */ - -/***********************************************************************************************\ -* * -* DetectGigabyteRGBFusion2DRAMControllers * -* * -* Detect Gigabyte RGB Fusion 2 controllers on the enumerated I2C buses at address 0x67. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion device is connected * -* dev - I2C address of RGB Fusion device * -* * -\***********************************************************************************************/ - -void DetectGigabyteRGBFusion2DRAMControllers(std::vector& busses) +DetectedControllers DetectGigabyteRGBFusion2DRAMControllers(std::vector& busses) { + DetectedControllers detected_controllers; + for(unsigned int bus = 0; bus < busses.size(); bus++) { IF_DRAM_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) @@ -81,11 +62,12 @@ void DetectGigabyteRGBFusion2DRAMControllers(std::vector& RGBFusion2DRAMController* controller = new RGBFusion2DRAMController(busses[bus], 0x67); RGBController_RGBFusion2DRAM* rgb_controller = new RGBController_RGBFusion2DRAM(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectGigabyteRGBFusion2DRAMControllers() */ + return(detected_controllers); +} REGISTER_I2C_DETECTOR("Gigabyte RGB Fusion 2 DRAM", DetectGigabyteRGBFusion2DRAMControllers); diff --git a/Controllers/GigabyteRGBFusion2GPUController/GigabyteRGBFusion2GPUControllerDetect.cpp b/Controllers/GigabyteRGBFusion2GPUController/GigabyteRGBFusion2GPUControllerDetect.cpp index aef39d1fd..90dcaeb87 100644 --- a/Controllers/GigabyteRGBFusion2GPUController/GigabyteRGBFusion2GPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2GPUController/GigabyteRGBFusion2GPUControllerDetect.cpp @@ -10,23 +10,14 @@ #include #include "DetectionManager.h" #include "GigabyteRGBFusion2GPUController.h" -#include "LogManager.h" -#include "RGBController_GigabyteRGBFusion2GPU.h" #include "i2c_amd_gpu.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_GigabyteRGBFusion2GPU.h" #define GIGABYTEGPU_CONTROLLER_NAME2 "Gigabyte RGB Fusion2 GPU" -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusion2GPUController * -* * -* Tests the given address to see if an RGB Fusion2 controller exists there. First * -* does a quick write to test for a response * -* * -\******************************************************************************************/ - bool TestForGigabyteRGBFusion2GPUController(i2c_smbus_interface* bus, unsigned char address) { if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus)) @@ -79,35 +70,27 @@ bool TestForGigabyteRGBFusion2GPUController(i2c_smbus_interface* bus, unsigned c } return(pass); -} /* TestForRGBFusion2GPUController() */ +} -/*******************************************************************************************\ -* * -* DetectRGBFusion2GPUControllers * -* * -* Detect GigabyteRGB Fusion2 controllers on the enumerated I2C busses at address 0x70.* -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * -* dev - I2C address of RGB Fusion2 device * -* * -\*******************************************************************************************/ - -void DetectGigabyteRGBFusion2GPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusion2GPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + // Check for RGB Fusion2 controller if(TestForGigabyteRGBFusion2GPUController(bus, i2c_addr)) { RGBFusion2GPUController* controller = new RGBFusion2GPUController(bus, i2c_addr, name); RGBController_RGBFusion2GPU* rgb_controller = new RGBController_RGBFusion2GPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectGigabyteRGBFusion2GPUControllers() */ -/*-----------------------------------------*\ -| Nvidia GPUs | -\*-----------------------------------------*/ + return(detected_controllers); +} +/*---------------------------------------------------------*\ +| Nvidia GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 2060 SUPER", DetectGigabyteRGBFusion2GPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX2060S_V1_SUB_DEV_H, 0x50); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 2060 SUPER", DetectGigabyteRGBFusion2GPUControllers, NVIDIA_VEN, NVIDIA_RTX2060S_OC_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX2060S_V1_SUB_DEV_P, 0x50); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 2070", DetectGigabyteRGBFusion2GPUControllers, NVIDIA_VEN, NVIDIA_RTX2070_OC_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX2070_SUB_DEV, 0x50); @@ -180,10 +163,9 @@ REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 GAMING OC", REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER", DetectGigabyteRGBFusion2GPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_32G_SUB_DEV, 0x71); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER ICE", DetectGigabyteRGBFusion2GPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_ICE_32G_SUB_DEV, 0x71); -/*-----------------------------------------*\ -| AMD GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| AMD GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 7600 GAMING OC 8G", DetectGigabyteRGBFusion2GPUControllers, AMD_GPU_VEN, AMD_NAVI33_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX7600_GAMING_OC_8G_SUB_DEV, 0x55); REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 7600 GAMING OC 8G", DetectGigabyteRGBFusion2GPUControllers, AMD_GPU_VEN, AMD_NAVI33_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX7600_GAMING_OC_8G_SUB_DEV2, 0x55); REGISTER_I2C_PCI_DETECTOR("Gigabyte Radeon RX 7600 XT GAMING OC 16G", DetectGigabyteRGBFusion2GPUControllers, AMD_GPU_VEN, AMD_NAVI33_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RX7600XT_GAMING_OC_16G_SUB_DEV, 0x55); diff --git a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp index 9011b9504..4df9d8154 100644 --- a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp @@ -60,15 +60,6 @@ json rgb_fusion_2_smbus_motherboards[] = "Z370 AORUS Ultra Gaming-CF" }; -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusion2SMBusController * -* * -* Tests the given address to see if an RGB 2 Fusion controller exists there. First * -* does a quick write to test for a response * -* * -\******************************************************************************************/ - bool TestForGigabyteRGBFusion2SMBusController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -81,36 +72,28 @@ bool TestForGigabyteRGBFusion2SMBusController(i2c_smbus_interface* bus, unsigned } return(pass); +} -} /* TestForRGBFusion2SMBusController() */ - -/******************************************************************************************\ -* * -* DetectGigabyteRGBFusion2SMBusControllers * -* * -* Detect RGB Fusion 2 controllers on the enumerated I2C busses at address 0x68. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion device is connected * -* dev - I2C address of RGB Fusion device * -* * -\******************************************************************************************/ - -void DetectGigabyteRGBFusion2SMBusControllers(std::vector& busses) +DetectedControllers DetectGigabyteRGBFusion2SMBusControllers(std::vector& busses) { + DetectedControllers detected_controllers; SettingsManager* set_man = ResourceManager::get()->GetSettingsManager(); json device_settings; DMIInfo dmi; bool found = false; - /*-------------------------------------------------*\ - | Get Linux LED settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Linux LED settings from settings manager | + \*-----------------------------------------------------*/ device_settings = set_man->GetSettings(DETECTOR_NAME); if(!device_settings.contains("SupportedDevices")) { - //If supported devices is not found then write it to settings + /*-------------------------------------------------*\ + | If supported devices is not found then write it | + | to settings | + \*-------------------------------------------------*/ device_settings["SupportedDevices"] = rgb_fusion_2_smbus_motherboards; set_man->SetSettings(DETECTOR_NAME, device_settings); set_man->SaveSettings(); @@ -135,21 +118,27 @@ void DetectGigabyteRGBFusion2SMBusControllers(std::vector& { if(busses[bus]->pci_subsystem_vendor == GIGABYTE_SUB_VEN) { - // TODO - Is this necessary? Or an artifact of my own system? - // Skip dmcd devices + /*-------------------------------------*\ + | TODO - Is this necessary? Or an | + | artifact of my own system? Skip dmcd | + | devices | + \*-------------------------------------*/ std::string device_name = std::string(busses[bus]->device_name); if(device_name.find("dmdc") == std::string::npos) { LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, SMBUS_ADDRESS); - // Check for RGB Fusion 2 controller at 0x68 + /*---------------------------------*\ + | Check for RGB Fusion 2 controller | + | at 0x68 | + \*---------------------------------*/ if(TestForGigabyteRGBFusion2SMBusController(busses[bus], SMBUS_ADDRESS)) { RGBFusion2SMBusController* controller = new RGBFusion2SMBusController(busses[bus], SMBUS_ADDRESS, dmi.getMainboard() ); RGBController_RGBFusion2SMBus* rgb_controller = new RGBController_RGBFusion2SMBus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } @@ -165,6 +154,7 @@ void DetectGigabyteRGBFusion2SMBusControllers(std::vector& LOG_DEBUG(GIGABYTE_NOT_FOUND_MB_MESSAGE_EN, DETECTOR_NAME, dmi.getMainboard().c_str()); } -} /* DetectRGBFusion2SMBusControllers() */ + return(detected_controllers); +} REGISTER_I2C_DETECTOR(DETECTOR_NAME, DetectGigabyteRGBFusion2SMBusControllers); diff --git a/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp b/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp index ecbd3d645..872271c32 100644 --- a/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2USBController/GigabyteRGBFusion2USBControllerDetect.cpp @@ -12,9 +12,9 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "dmiinfo.h" #include "GigabyteRGBFusion2USBController.h" #include "RGBController_GigabyteRGBFusion2USB.h" -#include "dmiinfo.h" #define DETECTOR_NAME "Gigabyte RGB Fusion 2 USB" @@ -26,18 +26,21 @@ /*---------------------------------------------------------*\ | Detector for Gigabyte RGB Fusion USB controllers | \*---------------------------------------------------------*/ -void DetectGigabyteRGBFusion2USBControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectGigabyteRGBFusion2USBControllers(hid_device_info* info, const std::string&) { - DMIInfo MB_info; - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + DMIInfo MB_info; + hid_device* dev = hid_open_path(info->path); if(dev) { RGBFusion2USBController* controller = new RGBFusion2USBController(dev, info->path, MB_info.getMainboard(), info->product_id); RGBController_RGBFusion2USB* rgb_controller = new RGBController_RGBFusion2USB(controller, DETECTOR_NAME); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } #ifdef USE_HID_USAGE diff --git a/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp b/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp index 8dd9c9815..26025260e 100644 --- a/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp @@ -22,15 +22,6 @@ #define VENDOR_NAME "Gigabyte Technology Co., Ltd." #define SMBUS_ADDRESS 0x28 -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusionController * -* * -* Tests the given address to see if an RGB Fusion controller exists there. First * -* does a quick write to test for a response * -* * -\******************************************************************************************/ - bool TestForGigabyteRGBFusionController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -50,22 +41,12 @@ bool TestForGigabyteRGBFusionController(i2c_smbus_interface* bus, unsigned char } return(pass); +} -} /* TestForGigabyteRGBFusionController() */ - -/******************************************************************************************\ -* * -* DetectGigabyteRGBFusionControllers * -* * -* Detect RGB Fusion controllers on the enumerated I2C busses at address 0x28. * -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion device is connected * -* dev - I2C address of RGB Fusion device * -* * -\******************************************************************************************/ - -void DetectGigabyteRGBFusionControllers(std::vector& busses) +DetectedControllers DetectGigabyteRGBFusionControllers(std::vector& busses) { + DetectedControllers detected_controllers; + for(unsigned int bus = 0; bus < busses.size(); bus++) { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) @@ -74,13 +55,15 @@ void DetectGigabyteRGBFusionControllers(std::vector& busse { LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, SMBUS_ADDRESS); - // Check for RGB Fusion controller at 0x28 + /*-----------------------------------------*\ + | Check for RGB Fusion controller at 0x28 | + \*-----------------------------------------*/ if(TestForGigabyteRGBFusionController(busses[bus], SMBUS_ADDRESS)) { RGBFusionController* controller = new RGBFusionController(busses[bus], SMBUS_ADDRESS); RGBController_RGBFusion* rgb_controller = new RGBController_RGBFusion(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } else @@ -89,6 +72,8 @@ void DetectGigabyteRGBFusionControllers(std::vector& busse } } } -} /* DetectGigabyteRGBFusionControllers() */ + + return(detected_controllers); +} REGISTER_I2C_DETECTOR("Gigabyte RGB Fusion", DetectGigabyteRGBFusionControllers); diff --git a/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp b/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp index e695405d6..aa041181a 100644 --- a/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp @@ -18,21 +18,14 @@ #define GIGABYTEGPU_CONTROLLER_NAME "Gigabyte RGB Fusion GPU" -/******************************************************************************************\ -* * -* TestForGigabyteRGBFusionGPUController * -* * -* Tests the given address to see if an RGB Fusion controller exists there. First * -* does a quick write to test for a response * -* * -\******************************************************************************************/ - bool TestForGigabyteRGBFusionGPUController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; int res; - //Write out 0xAB 0x00 0x00 0x00 sequence + /*-----------------------------------------------------*\ + | Write out 0xAB 0x00 0x00 0x00 sequence | + \*-----------------------------------------------------*/ res = bus->i2c_smbus_write_byte(address, 0xAB); if (res >= 0) @@ -41,7 +34,10 @@ bool TestForGigabyteRGBFusionGPUController(i2c_smbus_interface* bus, unsigned ch bus->i2c_smbus_write_byte(address, 0x00); bus->i2c_smbus_write_byte(address, 0x00); - // NVIDIA_RTX3060_DEV requires additional bytes to initialise + /*-------------------------------------------------*\ + | NVIDIA_RTX3060_DEV requires additional bytes to | + | initialise | + \*-------------------------------------------------*/ if (address == 0x62) { bus->i2c_smbus_write_byte(address, 0x00); @@ -71,7 +67,10 @@ bool TestForGigabyteRGBFusionGPUController(i2c_smbus_interface* bus, unsigned ch bus->i2c_smbus_read_byte(address); bus->i2c_smbus_read_byte(address); - //We don't know what the 0x48 controller returns, so for now just assume it exists + /*-------------------------------------------------*\ + | We don't know what the 0x48 controller returns, | + | so for now just assume it exists | + \*-------------------------------------------------*/ if(address == 0x48) { pass = true; @@ -79,31 +78,25 @@ bool TestForGigabyteRGBFusionGPUController(i2c_smbus_interface* bus, unsigned ch } return(pass); +} -} /* TestForRGBFusionGPUController() */ - -/******************************************************************************************\ -* * -* DetectRGBFusionGPUControllers * -* * -* Detect GigabyteRGB Fusion controllers on the enumerated I2C busses at address 0x47.* -* * -* bus - pointer to i2c_smbus_interface where RGB Fusion device is connected * -* dev - I2C address of RGB Fusion device * -* * -\******************************************************************************************/ - -void DetectGigabyteRGBFusionGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectGigabyteRGBFusionGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - // Check for RGB Fusion controller + DetectedControllers detected_controllers; + + /*-----------------------------------------------------*\ + | Check for RGB Fusion controller | + \*-----------------------------------------------------*/ if(TestForGigabyteRGBFusionGPUController(bus, i2c_addr)) { RGBFusionGPUController* controller = new RGBFusionGPUController(bus, i2c_addr, name); RGBController_RGBFusionGPU* rgb_controller = new RGBController_RGBFusionGPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectGigabyteRGBFusionGPUControllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce GTX 1050 Ti G1 Gaming Rev A1", DetectGigabyteRGBFusionGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_GTX1050TI_G1_GAMING_SUB_DEV, 0x47); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce GTX 1050 Ti G1 Gaming", DetectGigabyteRGBFusionGPUControllers, NVIDIA_VEN, NVIDIA_GTX1050TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_GTX1050TI_G1_GAMING_SUB_DEV, 0x48); diff --git a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp index 7111d2d90..ac8f89a38 100644 --- a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp +++ b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp @@ -10,10 +10,10 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "dmiinfo.h" #include "GigabyteSuperIORGBController.h" #include "RGBController_GigabyteSuperIORGB.h" #include "super_io.h" -#include "dmiinfo.h" #define NUM_COMPATIBLE_DEVICES (sizeof(compatible_devices) / sizeof(compatible_devices[0])) @@ -27,44 +27,44 @@ static gig_device compatible_devices[] = {"X570 UD"} }; -void DetectGigabyteSuperIORGBControllers() +DetectedControllers DetectGigabyteSuperIORGBControllers() { - int sio_addrs[2] = {0x2E, 0x4E}; + DetectedControllers detected_controllers; + int sio_addrs[2] = {0x2E, 0x4E}; + DMIInfo board; + std::string board_dmi = board.getMainboard(); + std::string manufacturer = board.getManufacturer(); - DMIInfo board; - std::string board_dmi = board.getMainboard(); - std::string manufacturer = board.getManufacturer(); - - if(manufacturer != "Gigabyte Technology Co., Ltd.") + if(manufacturer == "Gigabyte Technology Co., Ltd.") { - return; - } - - for(int sioaddr_idx = 0; sioaddr_idx < 2; sioaddr_idx++) - { - int sioaddr = sio_addrs[sioaddr_idx]; - - superio_enter(sioaddr); - - int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1); - - switch(val & SIO_ID_MASK) + for(int sioaddr_idx = 0; sioaddr_idx < 2; sioaddr_idx++) { - case SIO_ITE8688_ID: - for(unsigned int i = 0; i < NUM_COMPATIBLE_DEVICES; i++) - { - if(board_dmi.find(std::string(compatible_devices[i].name)) != std::string::npos) - { - GigabyteSuperIORGBController* controller = new GigabyteSuperIORGBController(sioaddr, "Gigabyte " + board_dmi); - RGBController_GigabyteSuperIORGB* rgb_controller = new RGBController_GigabyteSuperIORGB(controller); + int sioaddr = sio_addrs[sioaddr_idx]; - DetectionManager::get()->RegisterRGBController(rgb_controller); - break; + superio_enter(sioaddr); + + int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1); + + switch(val & SIO_ID_MASK) + { + case SIO_ITE8688_ID: + for(unsigned int i = 0; i < NUM_COMPATIBLE_DEVICES; i++) + { + if(board_dmi.find(std::string(compatible_devices[i].name)) != std::string::npos) + { + GigabyteSuperIORGBController* controller = new GigabyteSuperIORGBController(sioaddr, "Gigabyte " + board_dmi); + RGBController_GigabyteSuperIORGB* rgb_controller = new RGBController_GigabyteSuperIORGB(controller); + + detected_controllers.push_back(rgb_controller); + break; + } } - } - break; + break; + } } } -} /* DetectGigabyteSuperIORGBControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("Gigabyte RGB", DetectGigabyteSuperIORGBControllers); diff --git a/Controllers/GoveeController/GoveeControllerDetect.cpp b/Controllers/GoveeController/GoveeControllerDetect.cpp index af8d1e0d9..dbf309c2f 100644 --- a/Controllers/GoveeController/GoveeControllerDetect.cpp +++ b/Controllers/GoveeController/GoveeControllerDetect.cpp @@ -19,17 +19,10 @@ #include "ResourceManager.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectGoveeControllers * -* * -* Detect Govee devices * -* * -\******************************************************************************************/ - -void DetectGoveeControllers() +DetectedControllers DetectGoveeControllers() { - json govee_settings; + DetectedControllers detected_controllers; + json govee_settings; /*-----------------------------------------------------*\ | Get Govee settings from settings manager | @@ -70,7 +63,7 @@ void DetectGoveeControllers() GoveeController* controller = new GoveeController(govee_ip); RGBController_Govee* rgb_controller = new RGBController_Govee(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } @@ -88,6 +81,7 @@ void DetectGoveeControllers() } } -} /* DetectGoveeControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Govee", DetectGoveeControllers); diff --git a/Controllers/HPOmen30LController/HPOmen30LControllerDetect.cpp b/Controllers/HPOmen30LController/HPOmen30LControllerDetect.cpp index 2e87d3b1b..a7bf68296 100644 --- a/Controllers/HPOmen30LController/HPOmen30LControllerDetect.cpp +++ b/Controllers/HPOmen30LController/HPOmen30LControllerDetect.cpp @@ -15,25 +15,22 @@ #define HP_OMEN_30L_VID 0x103C #define HP_OMEN_30L_PID 0x84FD -/******************************************************************************************\ -* * -* DetectHPOmen30LController * -* * -* Tests the USB address to see if an HP Omen 30L controller exists there. * -* * -\******************************************************************************************/ - -void DetectHPOmen30LController(hid_device_info* info, const std::string&) +DetectedControllers DetectHPOmen30LController(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HPOmen30LController* controller = new HPOmen30LController(dev, info->path); RGBController_HPOmen30L* rgb_controller = new RGBController_HPOmen30L(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("HP Omen 30L", DetectHPOmen30LController, HP_OMEN_30L_VID, HP_OMEN_30L_PID); diff --git a/Controllers/HYTEKeyboardController/HYTEKeyboardControllerDetect.cpp b/Controllers/HYTEKeyboardController/HYTEKeyboardControllerDetect.cpp index 3d053f205..aea8a972d 100644 --- a/Controllers/HYTEKeyboardController/HYTEKeyboardControllerDetect.cpp +++ b/Controllers/HYTEKeyboardController/HYTEKeyboardControllerDetect.cpp @@ -24,17 +24,22 @@ \*---------------------------------------------------------*/ #define HYTE_KEEB_TKL_PID 0x0300 -void DetectHYTEKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectHYTEKeyboard(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HYTEKeyboardController* controller = new HYTEKeyboardController(dev, info->path, name); RGBController_HYTEKeyboard* rgb_controller = new RGBController_HYTEKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("HYTE Keeb TKL", DetectHYTEKeyboard, HYTE_VID, HYTE_KEEB_TKL_PID, 0xFF11, 0xF0); diff --git a/Controllers/HYTEMousematController/HYTEMousematController_FreeBSD_Linux/HYTEMousematControllerDetect_FreeBSD_Linux.cpp b/Controllers/HYTEMousematController/HYTEMousematController_FreeBSD_Linux/HYTEMousematControllerDetect_FreeBSD_Linux.cpp index 79d135672..558709c2c 100644 --- a/Controllers/HYTEMousematController/HYTEMousematController_FreeBSD_Linux/HYTEMousematControllerDetect_FreeBSD_Linux.cpp +++ b/Controllers/HYTEMousematController/HYTEMousematController_FreeBSD_Linux/HYTEMousematControllerDetect_FreeBSD_Linux.cpp @@ -14,14 +14,14 @@ #include "DetectionManager.h" #include "RGBController_HYTEMousemat.h" -/*-----------------------------------------------------*\ -| HYTE vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HYTE vendor ID | +\*---------------------------------------------------------*/ #define HYTE_VID 0x3402 -/*-----------------------------------------------------*\ -| HYTE CNVS product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HYTE CNVS product IDs | +\*---------------------------------------------------------*/ #define HYTE_CNVS_HW_VER_1_PID 0x0B00 #define HYTE_CNVS_HW_VER_2_PID 0x0B01 @@ -37,23 +37,17 @@ typedef struct static const hyte_mousemat_device device_list[] = { - /*-----------------------------------------------------------------------------------------------------*\ - | Mousemats | - \*-----------------------------------------------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Mousemats | + \*-----------------------------------------------------*/ { HYTE_VID, HYTE_CNVS_HW_VER_1_PID, 0, "HYTE CNVS" }, { HYTE_VID, HYTE_CNVS_HW_VER_2_PID, 0, "HYTE CNVS" }, }; -/******************************************************************************************\ -* * -* DetectHYTEMousematControllers * -* * -* Detect devices supported by the HyteMousemat driver * -* * -\******************************************************************************************/ - -void DetectHYTEMousematControllers() +DetectedControllers DetectHYTEMousematControllers() { + DetectedControllers detected_controllers; + libusb_init(NULL); #ifdef _WIN32 @@ -73,11 +67,12 @@ void DetectHYTEMousematControllers() HYTEMousematController * controller = new HYTEMousematController(dev, device_list[device_idx].name); RGBController_HYTEMousemat * rgb_controller = new RGBController_HYTEMousemat(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectHYTEMousematControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("HYTE Mousemat", DetectHYTEMousematControllers); /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/HYTEMousematController/HYTEMousematController_Windows_MacOS/HYTEMousematControllerDetect_Windows_MacOS.cpp b/Controllers/HYTEMousematController/HYTEMousematController_Windows_MacOS/HYTEMousematControllerDetect_Windows_MacOS.cpp index 7c40525b1..6f2b4aa85 100644 --- a/Controllers/HYTEMousematController/HYTEMousematController_Windows_MacOS/HYTEMousematControllerDetect_Windows_MacOS.cpp +++ b/Controllers/HYTEMousematController/HYTEMousematController_Windows_MacOS/HYTEMousematControllerDetect_Windows_MacOS.cpp @@ -12,9 +12,9 @@ #include #include "DetectionManager.h" +#include "find_usb_serial_port.h" #include "HYTEMousematController_Windows_MacOS.h" #include "RGBController_HYTEMousemat.h" -#include "find_usb_serial_port.h" #define HYTE_VID 0x3402 @@ -36,16 +36,10 @@ static const hyte_mousemat_type hyte_mousemat_devices[] = { HYTE_VID, HYTE_CNVS_HW_VER_2_PID, "HYTE CNVS" }, }; -/******************************************************************************************\ -* * -* DetectHYTEMousematControllers * -* * -* Detect devices supported by the HyteMousemat driver * -* * -\******************************************************************************************/ - -void DetectHYTEMousematControllers() +DetectedControllers DetectHYTEMousematControllers() { + DetectedControllers detected_controllers; + for(unsigned int device_id = 0; device_id < HYTE_MOUSEMAT_NUM_DEVICES; device_id++) { std::vector ports = find_usb_serial_port(hyte_mousemat_devices[device_id].vid, hyte_mousemat_devices[device_id].pid); @@ -57,11 +51,13 @@ void DetectHYTEMousematControllers() HYTEMousematController * controller = new HYTEMousematController((char *)ports[i]->c_str(), hyte_mousemat_devices[device_id].name); RGBController_HYTEMousemat * rgb_controller = new RGBController_HYTEMousemat(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectHYTEMousematControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("HYTE Mousemat", DetectHYTEMousematControllers); /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/HYTENexusController/HYTENexusControllerDetect.cpp b/Controllers/HYTENexusController/HYTENexusControllerDetect.cpp index b29c68699..4e5b75853 100644 --- a/Controllers/HYTENexusController/HYTENexusControllerDetect.cpp +++ b/Controllers/HYTENexusController/HYTENexusControllerDetect.cpp @@ -32,16 +32,10 @@ static const hyte_nexus_type hyte_nexus_devices[] = { HYTE_VID, HYTE_NEXUS_PORTAL_NP50_PID, "HYTE Nexus Portal NP50" }, }; -/******************************************************************************************\ -* * -* DetectHYTENexusControllers * -* * -* Detect devices supported by the HYTENexus driver * -* * -\******************************************************************************************/ - -void DetectHYTENexusControllers() +DetectedControllers DetectHYTENexusControllers() { + DetectedControllers detected_controllers; + for(unsigned int device_id = 0; device_id < HYTE_NEXUS_NUM_DEVICES; device_id++) { std::vector ports = find_usb_serial_port(hyte_nexus_devices[device_id].vid, hyte_nexus_devices[device_id].pid); @@ -53,11 +47,13 @@ void DetectHYTENexusControllers() HYTENexusController * controller = new HYTENexusController((char *)ports[i]->c_str(), hyte_nexus_devices[device_id].pid, hyte_nexus_devices[device_id].name); RGBController_HYTENexus * rgb_controller = new RGBController_HYTENexus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectHYTENexusControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("HYTE Nexus", DetectHYTENexusControllers); /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/HoltekController/HoltekControllerDetect.cpp b/Controllers/HoltekController/HoltekControllerDetect.cpp index 66b555835..5f654559c 100644 --- a/Controllers/HoltekController/HoltekControllerDetect.cpp +++ b/Controllers/HoltekController/HoltekControllerDetect.cpp @@ -14,44 +14,54 @@ #include "HoltekA1FAController.h" #include "RGBController_HoltekA1FA.h" -/*-----------------------------------------------------*\ -| Holtek Semiconductor Inc. vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Holtek Semiconductor Inc. vendor ID | +\*---------------------------------------------------------*/ #define HOLTEK_VID 0x04D9 -/*-----------------------------------------------------*\ -| Mouse product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mouse product IDs | +\*---------------------------------------------------------*/ #define HOLTEK_A070_PID 0xA070 -/*-----------------------------------------------------*\ -| Mousemats product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mousemats product IDs | +\*---------------------------------------------------------*/ #define HOLTEK_A1FA_PID 0xA1FA -void DetectHoltekControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectHoltekControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HoltekA070Controller* controller = new HoltekA070Controller(dev, info->path, name); RGBController_HoltekA070* rgb_controller = new RGBController_HoltekA070(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHoltekControllers() */ -void DetectHoltekMousemats(hid_device_info *info, const std::string &name) + return(detected_controllers); +} + +DetectedControllers DetectHoltekMousemats(hid_device_info *info, const std::string &name) { - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HoltekA1FAController* controller = new HoltekA1FAController(dev, info->path, name); RGBController_HoltekA1FA* rgb_controller = new RGBController_HoltekA1FA(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHoltekMousemats() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("Holtek USB Gaming Mouse", DetectHoltekControllers, HOLTEK_VID, HOLTEK_A070_PID, 1, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Holtek Mousemat", DetectHoltekMousemats, HOLTEK_VID, HOLTEK_A1FA_PID, 2, 0xFF00, 0xFF00); diff --git a/Controllers/HyperXDRAMController/HyperXDRAMControllerDetect.cpp b/Controllers/HyperXDRAMController/HyperXDRAMControllerDetect.cpp index 3a2cc3771..b385a26da 100644 --- a/Controllers/HyperXDRAMController/HyperXDRAMControllerDetect.cpp +++ b/Controllers/HyperXDRAMController/HyperXDRAMControllerDetect.cpp @@ -12,20 +12,13 @@ #include #include "DetectionManager.h" #include "HyperXDRAMController.h" -#include "LogManager.h" -#include "RGBController_HyperXDRAM.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_HyperXDRAM.h" using namespace std::chrono_literals; -/******************************************************************************************\ -* * -* TestForHyperXDRAMController * -* * -* Tests the given address to see if a HyperX controller exists there. * -* * -\******************************************************************************************/ #define HYPERX_CONTROLLER_NAME "HyperX DRAM" bool TestForHyperXDRAMController(i2c_smbus_interface* bus, unsigned char address) @@ -52,26 +45,14 @@ bool TestForHyperXDRAMController(i2c_smbus_interface* bus, unsigned char address } return(pass); +} -} /* TestForHyperXDRAMController() */ - - -/******************************************************************************************\ -* * -* DetectHyperXDRAMControllers * -* * -* Detect HyperX DRAM controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* slots - accessors to SPD information of the occupied slots * -* * -\******************************************************************************************/ - -void DetectHyperXDRAMControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) +DetectedControllers DetectHyperXDRAMControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) { - unsigned char slots_valid = 0x00; - bool fury_detected = false; - bool pred_detected = false; + DetectedControllers detected_controllers; + bool fury_detected = false; + bool pred_detected = false; + unsigned char slots_valid = 0x00; // Check for HyperX controller at 0x27 LOG_DEBUG("[%s] Testing bus %d at address 0x27", HYPERX_CONTROLLER_NAME, bus->port_id); @@ -115,9 +96,11 @@ void DetectHyperXDRAMControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectHyperXDRAMControllers() */ + + return(detected_controllers); +} REGISTER_I2C_DRAM_DETECTOR("HyperX DRAM", DetectHyperXDRAMControllers, JEDEC_KINGSTON, SPD_DDR4_SDRAM); diff --git a/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp b/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp index 34233a89b..7084b558b 100644 --- a/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp +++ b/Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp @@ -22,9 +22,9 @@ #include "RGBController_HyperXAlloyOriginsCore.h" #include "RGBController_HyperXAlloyOrigins60and65.h" -/*-----------------------------------------------------*\ -| HyperX keyboard vendor and product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX keyboard vendor and product IDs | +\*---------------------------------------------------------*/ #define HYPERX_KEYBOARD_VID 0x0951 #define HYPERX_ALLOY_ELITE_PID 0x16BE @@ -34,9 +34,9 @@ #define HYPERX_ALLOY_ORIGINS_CORE_PID 0x16E6 #define HYPERX_ALLOY_ORIGINS_60_PID 0x1734 -/*-----------------------------------------------------*\ -| HyperX keyboard vendor and product IDs (HP) | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX keyboard vendor and product IDs (HP) | +\*---------------------------------------------------------*/ #define HP_KEYBOARD_VID 0x03F0 #define HYPERX_ALLOY_ELITE_2_HP_PID 0x058F @@ -61,83 +61,113 @@ AlloyOrigins60and65MappingLayoutType GetAlloyOrigins60and65MappingLayoutType(int } } -void DetectHyperXAlloyElite(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyElite(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXAlloyEliteController* controller = new HyperXAlloyEliteController(dev, info->path, name); RGBController_HyperXAlloyElite* rgb_controller = new RGBController_HyperXAlloyElite(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectHyperXAlloyElite2(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyElite2(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXAlloyElite2Controller* controller = new HyperXAlloyElite2Controller(dev, info->path, name); RGBController_HyperXAlloyElite2* rgb_controller = new RGBController_HyperXAlloyElite2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectHyperXAlloyFPS(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyFPS(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXAlloyFPSController* controller = new HyperXAlloyFPSController(dev, info->path, name); RGBController_HyperXAlloyFPS* rgb_controller = new RGBController_HyperXAlloyFPS(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectHyperXAlloyOrigins(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyOrigins(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXAlloyOriginsController* controller = new HyperXAlloyOriginsController(dev, info->path, name); RGBController_HyperXAlloyOrigins* rgb_controller = new RGBController_HyperXAlloyOrigins(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectHyperXAlloyOriginsCore(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyOriginsCore(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXAlloyOriginsCoreController* controller = new HyperXAlloyOriginsCoreController(dev, info, name); RGBController_HyperXAlloyOriginsCore* rgb_controller = new RGBController_HyperXAlloyOriginsCore(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectHyperXAlloyOrigins60and65(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXAlloyOrigins60and65(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - HyperXAlloyOrigins60and65Controller* controller = new HyperXAlloyOrigins60and65Controller(dev, info->path, name); - AlloyOrigins60and65MappingLayoutType layout = GetAlloyOrigins60and65MappingLayoutType(info->product_id); + HyperXAlloyOrigins60and65Controller* controller = new HyperXAlloyOrigins60and65Controller(dev, info->path, name); + AlloyOrigins60and65MappingLayoutType layout = GetAlloyOrigins60and65MappingLayoutType(info->product_id); RGBController_HyperXAlloyOrigins60and65* rgb_controller = new RGBController_HyperXAlloyOrigins60and65(controller, layout); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IP("HyperX Alloy Elite RGB", DetectHyperXAlloyElite, HYPERX_KEYBOARD_VID, HYPERX_ALLOY_ELITE_PID, 2, 0xFF01); diff --git a/Controllers/HyperXMicrophoneController/HyperXMicrophoneControllerDetect.cpp b/Controllers/HyperXMicrophoneController/HyperXMicrophoneControllerDetect.cpp index 609fb5aac..515783c73 100644 --- a/Controllers/HyperXMicrophoneController/HyperXMicrophoneControllerDetect.cpp +++ b/Controllers/HyperXMicrophoneController/HyperXMicrophoneControllerDetect.cpp @@ -14,9 +14,9 @@ #include "RGBController_HyperXMicrophone.h" #include "hidapi_wrapper.h" -/*-----------------------------------------------------*\ -| HyperX microphone vendor and product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX microphone vendor and product IDs | +\*---------------------------------------------------------*/ #define HYPERX_VID 0x0951 #define HYPERX_HP_VID 0x03F0 @@ -31,17 +31,22 @@ #define HYPERX_DUOCAST_PID 0x098C -void DetectHyperXMicrophoneControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXMicrophoneControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) { - hid_device* dev = wrapper.hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = wrapper.hid_open_path(info->path); if(dev) { - HyperXMicrophoneController* controller = new HyperXMicrophoneController(wrapper, dev, info->path, name); - RGBController_HyperXMicrophone *rgb_controller = new RGBController_HyperXMicrophone(controller); + HyperXMicrophoneController* controller = new HyperXMicrophoneController(wrapper, dev, info->path, name); + RGBController_HyperXMicrophone * rgb_controller = new RGBController_HyperXMicrophone(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_WRAPPED_DETECTOR_I("HyperX Quadcast S", DetectHyperXMicrophoneControllers, HYPERX_VID, HYPERX_QS_PID, 0);//, 0xFF90, 0xFF00); diff --git a/Controllers/HyperXMicrophoneV2Controller/HyperXMicrophoneV2ControllerDetect.cpp b/Controllers/HyperXMicrophoneV2Controller/HyperXMicrophoneV2ControllerDetect.cpp index b224ec26d..0a7397601 100644 --- a/Controllers/HyperXMicrophoneV2Controller/HyperXMicrophoneV2ControllerDetect.cpp +++ b/Controllers/HyperXMicrophoneV2Controller/HyperXMicrophoneV2ControllerDetect.cpp @@ -14,23 +14,28 @@ #include "HyperXMicrophoneV2Controller.h" #include "RGBController_HyperXMicrophoneV2.h" -/*-----------------------------------------------------*\ -| HyperX microphone vendor and product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX microphone vendor and product IDs | +\*---------------------------------------------------------*/ #define HYPERX_HP_VID 0x03F0 #define HYPERX_QUADCAST_2S_PID 0x02B5 -void DetectHyperXMicrophoneV2Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXMicrophoneV2Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXMicrophoneV2Controller* controller = new HyperXMicrophoneV2Controller(dev, info->path, name); RGBController_HyperXMicrophoneV2 *rgb_controller = new RGBController_HyperXMicrophoneV2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("HyperX QuadCast 2 S", DetectHyperXMicrophoneV2Controllers, HYPERX_HP_VID, HYPERX_QUADCAST_2S_PID, 1, 0xFF13, 0xFF00); diff --git a/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp index e1d51d030..19c5011b1 100644 --- a/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp +++ b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp @@ -19,9 +19,9 @@ #include "RGBController_HyperXPulsefireDart.h" #include "RGBController_HyperXPulsefireRaid.h" -/*-----------------------------------------------------*\ -| HyperX mouse vendor IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX mouse vendor IDs | +\*---------------------------------------------------------*/ #define HYPERX_VID 0x0951 //Kingston Technology #define HYPERX_VID_2 0x03F0 //HP, Hewlett-Packard Company #define HYPERX_PULSEFIRE_SURGE_PID 0x16D3 @@ -37,70 +37,95 @@ #define HYPERX_PULSEFIRE_HASTE_PID 0x1727 #define HYPERX_PULSEFIRE_HASTE_PID_2 0x0F8F -void DetectHyperXPulsefireSurgeControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXPulsefireSurgeControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXPulsefireSurgeController* controller = new HyperXPulsefireSurgeController(dev, info->path, name); RGBController_HyperXPulsefireSurge* rgb_controller = new RGBController_HyperXPulsefireSurge(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXPulsefireSurgeControllers() */ -void DetectHyperXPulsefireFPSProControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectHyperXPulsefireFPSProControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXPulsefireFPSProController* controller = new HyperXPulsefireFPSProController(dev, info->path, name); RGBController_HyperXPulsefireFPSPro* rgb_controller = new RGBController_HyperXPulsefireFPSPro(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXPulsefireFPSProControllers() */ -void DetectHyperXPulsefireHasteControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectHyperXPulsefireHasteControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXPulsefireHasteController* controller = new HyperXPulsefireHasteController(dev, info->path, name); RGBController_HyperXPulsefireHaste* rgb_controller = new RGBController_HyperXPulsefireHaste(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXPulsefireFPSProControllers() */ -void DetectHyperXPulsefireDartControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectHyperXPulsefireDartControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXPulsefireDartController* controller = new HyperXPulsefireDartController(dev, info->path, name); RGBController_HyperXPulsefireDart* rgb_controller = new RGBController_HyperXPulsefireDart(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXPulsefireDartControllers() */ -void DetectHyperXPulsefireRaidControllers(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectHyperXPulsefireRaidControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { HyperXPulsefireRaidController* controller = new HyperXPulsefireRaidController(dev, *info, name); RGBController_HyperXPulsefireRaid* rgb_controller = new RGBController_HyperXPulsefireRaid(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXPulsefireRaidControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IP("HyperX Pulsefire Surge", DetectHyperXPulsefireSurgeControllers, HYPERX_VID, HYPERX_PULSEFIRE_SURGE_PID, 1, 0xFF01); REGISTER_HID_DETECTOR_IP("HyperX Pulsefire Surge (HP)", DetectHyperXPulsefireSurgeControllers, HYPERX_VID_2, HYPERX_PULSEFIRE_SURGE_PID_2, 1, 0xFF01); diff --git a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp index 9a530a42e..6bd4412f0 100644 --- a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp +++ b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp @@ -10,13 +10,13 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "hidapi_wrapper.h" #include "HyperXMousematController.h" #include "RGBController_HyperXMousemat.h" -#include "hidapi_wrapper.h" -/*-----------------------------------------------------*\ -| HyperX mousemat vendor IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| HyperX mousemat vendor IDs | +\*---------------------------------------------------------*/ #define HYPERX_VID 0x0951 #define HYPERX_FURY_ULTRA_PID 0x1705 #define HYPERX_FURY_A_XL_PID 0x1741 @@ -24,17 +24,12 @@ #define HYPERX_VID_2 0x03F0 #define HYPERX_PULSEFIRE_PID 0x0F8D -/******************************************************************************************\ -* * -* DetectHyperXMousematControllers * -* * -* Tests the USB address to see if a HyperX Mousemat controller exists there. * -* * -\******************************************************************************************/ - -void DetectHyperXMousematControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) +DetectedControllers DetectHyperXMousematControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) { - hid_device* dev = wrapper.hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = wrapper.hid_open_path(info->path); if(dev) { @@ -44,9 +39,11 @@ void DetectHyperXMousematControllers(hidapi_wrapper wrapper, hid_device_info* in HyperXMousematController* controller = new HyperXMousematController(wrapper, dev, info->path, name); RGBController_HyperXMousemat* rgb_controller = new RGBController_HyperXMousemat(controller, first_zone_leds_count, second_zone_leds_count); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectHyperXMousematControllers() */ + + return(detected_controllers); +} REGISTER_HID_WRAPPED_DETECTOR_I("HyperX Fury Ultra", DetectHyperXMousematControllers, HYPERX_VID, HYPERX_FURY_ULTRA_PID, 0); REGISTER_HID_WRAPPED_DETECTOR_IPU("HyperX Pulsefire Mat", DetectHyperXMousematControllers, HYPERX_VID_2, HYPERX_PULSEFIRE_PID, 1, 0xFF90, 0xFF00); diff --git a/Controllers/InstantMouseController/InstantMouseControllerDetect.cpp b/Controllers/InstantMouseController/InstantMouseControllerDetect.cpp index 1b887e261..f9923913b 100644 --- a/Controllers/InstantMouseController/InstantMouseControllerDetect.cpp +++ b/Controllers/InstantMouseController/InstantMouseControllerDetect.cpp @@ -10,22 +10,26 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "InstantMouseDevices.h" #include "InstantMouseController.h" #include "RGBController_InstantMouse.h" -#include "InstantMouseDevices.h" - -void DetectInstantMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectInstantMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { InstantMouseController* controller = new InstantMouseController(dev, *info, name); RGBController_InstantMouse* rgb_controller = new RGBController_InstantMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Advanced GTA 250 USB Gaming Mouse", DetectInstantMouseControllers, INSTANT_MICROELECTRONICS_VID, ADVANCED_GTA_250_PID, 1, 0xFF01, 0x01); diff --git a/Controllers/IntelArcA770LEController/IntelArcA770LEControllerDetect.cpp b/Controllers/IntelArcA770LEController/IntelArcA770LEControllerDetect.cpp index 9339ae268..08b97d7a3 100644 --- a/Controllers/IntelArcA770LEController/IntelArcA770LEControllerDetect.cpp +++ b/Controllers/IntelArcA770LEController/IntelArcA770LEControllerDetect.cpp @@ -17,24 +17,22 @@ #define INTEL_ARC_A770_LIMITED_EDITION_VID 0x2516 #define INTEL_ARC_A770_LIMITED_EDITION_PID 0x01B5 -/******************************************************************************************\ -* * -* DetectIntelArcA770LEControllers * -* * -* Tests the USB address to see if an Intel Arc A770 LE controller exists there. * -* * -\******************************************************************************************/ - -void DetectIntelArcA770LEControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectIntelArcA770LEControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); - if( dev ) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { IntelArcA770LEController* controller = new IntelArcA770LEController(dev, info->path); RGBController_IntelArcA770LE* rgb_controller = new RGBController_IntelArcA770LE(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IP("Intel Arc A770 Limited Edition", DetectIntelArcA770LEControllers, INTEL_ARC_A770_LIMITED_EDITION_VID, INTEL_ARC_A770_LIMITED_EDITION_PID, 1, 0xFF00); diff --git a/Controllers/IonicoController/IonicoControllerDetect.cpp b/Controllers/IonicoController/IonicoControllerDetect.cpp index 3b60cbae9..b181af808 100644 --- a/Controllers/IonicoController/IonicoControllerDetect.cpp +++ b/Controllers/IonicoController/IonicoControllerDetect.cpp @@ -15,30 +15,34 @@ #include "IonicoController.h" #include "RGBController_Ionico.h" -/*-----------------------------------------------------*\ -| FRONT BAR | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| FRONT BAR | +\*---------------------------------------------------------*/ #define IONICO_FB_VID 0x048D #define IONICO_FB_PID 0x6005 -/*-----------------------------------------------------*\ -| KEYBOARD | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| KEYBOARD | +\*---------------------------------------------------------*/ #define IONICO_KB_VID 0x048D #define IONICO_KB_PID 0xCE00 - -void DetectIonicoControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectIonicoControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { IonicoController* controller = new IonicoController(dev, *info, info->product_id, name); RGBController_Ionico* rgb_controller = new RGBController_Ionico(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Ionico Light Bar", DetectIonicoControllers, IONICO_FB_VID, IONICO_FB_PID, 0xFF03, 0x01); diff --git a/Controllers/JGINYUEInternalUSBController/JGINYUEInternalUSBControllerDetect.cpp b/Controllers/JGINYUEInternalUSBController/JGINYUEInternalUSBControllerDetect.cpp index 573a1a1fb..c35ed9da3 100644 --- a/Controllers/JGINYUEInternalUSBController/JGINYUEInternalUSBControllerDetect.cpp +++ b/Controllers/JGINYUEInternalUSBController/JGINYUEInternalUSBControllerDetect.cpp @@ -26,16 +26,22 @@ \*---------------------------------------------------------*/ #define JGINYUE_MOTHERBOARD_PID 0xA125 -void DetectJGINYUEInternalUSBController(hid_device_info* info,const std::string& /*name*/) +DetectedControllers DetectJGINYUEInternalUSBController(hid_device_info* info,const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { JGINYUEInternalUSBController* controller =new JGINYUEInternalUSBController(dev,info->path); RGBController_JGINYUEInternalUSB* rgb_controller =new RGBController_JGINYUEInternalUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("JGINYUE Internal USB Controller", DetectJGINYUEInternalUSBController, JGINYUE_VID, JGINYUE_MOTHERBOARD_PID); diff --git a/Controllers/JGINYUEInternalUSBV2Controller/JGINYUEInternalUSBV2ControllerDetect.cpp b/Controllers/JGINYUEInternalUSBV2Controller/JGINYUEInternalUSBV2ControllerDetect.cpp index bc233c053..dfcc44cad 100644 --- a/Controllers/JGINYUEInternalUSBV2Controller/JGINYUEInternalUSBV2ControllerDetect.cpp +++ b/Controllers/JGINYUEInternalUSBV2Controller/JGINYUEInternalUSBV2ControllerDetect.cpp @@ -15,14 +15,15 @@ #include #include #include -#include "serial_port.h" -#include "find_usb_serial_port.h" -#include "RGBController_JGINYUEInternalUSBV2.h" -#include "JGINYUEInternalUSBV2Controller.h" -#include "RGBController.h" #include "DetectionManager.h" #include "dmiinfo.h" +#include "find_usb_serial_port.h" +#include "JGINYUEInternalUSBV2Controller.h" #include "LogManager.h" +#include "RGBController_JGINYUEInternalUSBV2.h" +#include "RGBController.h" +#include "serial_port.h" + /*---------------------------------------------------------*\ | JGINYUE vendor ID | \*---------------------------------------------------------*/ @@ -33,44 +34,54 @@ \*---------------------------------------------------------*/ #define JGINYUE_MOTHERBOARD_PID_V2 0xE30B -void DetectJGINYUEInternalUSBV2Controller(hid_device_info* info,const std::string& /*name*/) +DetectedControllers DetectJGINYUEInternalUSBV2Controller(hid_device_info* info,const std::string& /*name*/) { - hid_device* hid_dev = hid_open_path(info->path); - if(hid_dev == nullptr ) - { - return; - } + DetectedControllers detected_controllers; + hid_device* dev; - DMIInfo dmi_info; - std::string manufacturer = dmi_info.getManufacturer(); - std::transform(manufacturer.begin(), manufacturer.end(), manufacturer.begin(), ::toupper); - if(manufacturer.find("JGINYUE") == std::string::npos) - { - LOG_INFO("JGINYUE Internal USB ControllerV2 not found,error manufacturer name:%s",manufacturer.c_str()); - return; - } - LOG_INFO("Pass manufacture name check.Start to init HID and CDC interface"); + dev = hid_open_path(info->path); - - if(hid_dev != nullptr ) + if(dev) { - std::vector serial_ports = find_usb_serial_port(JGINYUE_VID_V2, JGINYUE_MOTHERBOARD_PID_V2); - if(serial_ports.size() ==1) + DMIInfo dmi_info; + std::string manufacturer = dmi_info.getManufacturer(); + + std::transform(manufacturer.begin(), manufacturer.end(), manufacturer.begin(), ::toupper); + + if(manufacturer.find("JGINYUE") != std::string::npos) { - serial_port *port = new serial_port(); - if(!port->serial_open(serial_ports[0]->c_str(), 115200)) + LOG_INFO("Pass manufacture name check.Start to init HID and CDC interface"); + + std::vector serial_ports = find_usb_serial_port(JGINYUE_VID_V2, JGINYUE_MOTHERBOARD_PID_V2); + + if(serial_ports.size() ==1) { - LOG_ERROR("Failed to open serial port %s", serial_ports[0]->c_str()); - delete port; - hid_close(hid_dev); - return; + serial_port *port = new serial_port(); + + if(port->serial_open(serial_ports[0]->c_str(), 115200)) + { + LOG_INFO("JGINYUE Internal USB ControllerV2 found"); + + JGINYUEInternalUSBV2Controller * controller = new JGINYUEInternalUSBV2Controller(dev, info->path,port); + RGBController_JGINYUEInternalUSBV2 * rgb_controller = new RGBController_JGINYUEInternalUSBV2(controller); + + detected_controllers.push_back(rgb_controller); + } + else + { + LOG_ERROR("Failed to open serial port %s", serial_ports[0]->c_str()); + delete port; + hid_close(dev); + } } - JGINYUEInternalUSBV2Controller *controller = new JGINYUEInternalUSBV2Controller(hid_dev, info->path,port); - RGBController_JGINYUEInternalUSBV2 *rgb_controller = new RGBController_JGINYUEInternalUSBV2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - LOG_INFO("JGINYUE Internal USB ControllerV2 found"); + } + else + { + LOG_INFO("JGINYUE Internal USB ControllerV2 not found,error manufacturer name:%s",manufacturer.c_str()); } } + + return(detected_controllers); } #ifdef _WIN32 diff --git a/Controllers/KasaSmartController/KasaSmartControllerDetect.cpp b/Controllers/KasaSmartController/KasaSmartControllerDetect.cpp index 311e9843c..680a33f98 100644 --- a/Controllers/KasaSmartController/KasaSmartControllerDetect.cpp +++ b/Controllers/KasaSmartController/KasaSmartControllerDetect.cpp @@ -15,26 +15,19 @@ #include "RGBController_KasaSmart.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectKasaSmartControllers * -* * -* Detect Kasa Smart devices * -* * -\******************************************************************************************/ - -void DetectKasaSmartControllers() +DetectedControllers DetectKasaSmartControllers() { - json kasa_smart_settings; + DetectedControllers detected_controllers; + json kasa_smart_settings; - /*---------------------------------------------*\ - | Get Kasa Smart settings from settings manager | - \*---------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Kasa Smart settings from settings manager | + \*-----------------------------------------------------*/ kasa_smart_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("KasaSmartDevices"); - /*---------------------------------------------*\ - | If the Wiz settings contains devices, process | - \*---------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Kasa Smart settings contains devices, process | + \*-----------------------------------------------------*/ if(kasa_smart_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < kasa_smart_settings["devices"].size(); device_idx++) @@ -45,17 +38,20 @@ void DetectKasaSmartControllers() std::string name = kasa_smart_settings["devices"][device_idx]["name"]; KasaSmartController* controller = new KasaSmartController(kasa_smart_ip, name); + if(!controller->Initialize()) { continue; } RGBController_KasaSmart* rgb_controller = new RGBController_KasaSmart(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } } -} /* DetectKasaSmartControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("KasaSmart", DetectKasaSmartControllers); diff --git a/Controllers/KeychronKeyboardController/KeychronKeyboardControllerDetect.cpp b/Controllers/KeychronKeyboardController/KeychronKeyboardControllerDetect.cpp index 3ad3b221a..d04c5de1f 100644 --- a/Controllers/KeychronKeyboardController/KeychronKeyboardControllerDetect.cpp +++ b/Controllers/KeychronKeyboardController/KeychronKeyboardControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define KEYCHRON_K3_V2_OPTICAL_RGB_PID 0x024F -void DetectKeychronKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectKeychronKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { KeychronKeyboardController* controller = new KeychronKeyboardController(dev, *info, name); RGBController_KeychronKeyboard* rgb_controller = new RGBController_KeychronKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Keychron Gaming Keyboard 1", DetectKeychronKeyboardControllers, KEYCHRON_KEYBOARD_VID, KEYCHRON_K3_V2_OPTICAL_RGB_PID, 0, 0x0001, 0x06); diff --git a/Controllers/KingstonFuryDRAMController/KingstonFuryDRAMControllerDetect.cpp b/Controllers/KingstonFuryDRAMController/KingstonFuryDRAMControllerDetect.cpp index 338b4b734..62aa4c022 100644 --- a/Controllers/KingstonFuryDRAMController/KingstonFuryDRAMControllerDetect.cpp +++ b/Controllers/KingstonFuryDRAMController/KingstonFuryDRAMControllerDetect.cpp @@ -13,10 +13,10 @@ #include #include "DetectionManager.h" #include "KingstonFuryDRAMController.h" -#include "LogManager.h" -#include "RGBController_KingstonFuryDRAM.h" #include "i2c_smbus.h" +#include "LogManager.h" #include "pci_ids.h" +#include "RGBController_KingstonFuryDRAM.h" using namespace std::chrono_literals; @@ -156,17 +156,10 @@ void DetectKingstonFuryDRAMControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &name) +DetectedControllers DetectKingstonFuryDDR4Controllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &name) { - std::vector fury_slots; + DetectedControllers detected_controllers; + std::vector fury_slots; DetectKingstonFuryDRAMControllers(bus, slots, FURY_BASE_ADDR_DDR4, TestDDR4Models, fury_slots); @@ -175,13 +168,16 @@ void DetectKingstonFuryDDR4Controllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectKingstonFuryDDR5Controllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &name) +DetectedControllers DetectKingstonFuryDDR5Controllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &name) { - std::vector fury_slots; + DetectedControllers detected_controllers; + std::vector fury_slots; DetectKingstonFuryDRAMControllers(bus, slots, FURY_BASE_ADDR_DDR5, TestDDR5Models, fury_slots); @@ -190,8 +186,10 @@ void DetectKingstonFuryDDR5Controllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_I2C_DRAM_DETECTOR("Kingston Fury DDR4 DRAM", DetectKingstonFuryDDR4Controllers, JEDEC_KINGSTON, SPD_DDR4_SDRAM); diff --git a/Controllers/LEDStripController/LEDStripControllerDetect.cpp b/Controllers/LEDStripController/LEDStripControllerDetect.cpp index 26721e785..b4d48ad55 100644 --- a/Controllers/LEDStripController/LEDStripControllerDetect.cpp +++ b/Controllers/LEDStripController/LEDStripControllerDetect.cpp @@ -16,27 +16,20 @@ #include "RGBController_LEDStrip.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectLEDStripControllers * -* * -* Detect devices supported by the LEDStrip driver * -* * -\******************************************************************************************/ - -void DetectLEDStripControllers() +DetectedControllers DetectLEDStripControllers() { - json ledstrip_settings; - LEDStripDevice dev; + DetectedControllers detected_controllers; + json ledstrip_settings; + LEDStripDevice dev; - /*-------------------------------------------------*\ - | Get LED Strip settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get LED Strip settings from settings manager | + \*-----------------------------------------------------*/ ledstrip_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("LEDStripDevices"); - /*-------------------------------------------------*\ - | If the LEDStrip settings contains devices, process| - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the LEDStrip settings contains devices, process | + \*-----------------------------------------------------*/ if(ledstrip_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < ledstrip_settings["devices"].size(); device_idx++) @@ -47,9 +40,9 @@ void DetectLEDStripControllers() } else { - /*-------------------------------------------------*\ - | Default name | - \*-------------------------------------------------*/ + /*-----------------------------------------*\ + | Default name | + \*-----------------------------------------*/ dev.name = "LED Strip"; } @@ -91,33 +84,34 @@ void DetectLEDStripControllers() else { LOG_WARNING("[LEDStripController] '%s' is not a valid value for protocol", protocol_string.c_str()); - return; + break; } } else { - /*-------------------------------------------------*\ - | Default to the Keyboard Visualizer protocol | - \*-------------------------------------------------*/ + /*-----------------------------------------*\ + | Default to the Keyboard Visualizer | + | protocol | + \*-----------------------------------------*/ dev.protocol = LED_PROTOCOL_KEYBOARD_VISUALIZER; } if(dev.port.empty()) { LOG_WARNING("[LEDStripController] port value cannot be left empty."); - return; + break; } if(dev.baud <= 0) { LOG_WARNING("[LEDStripController] baud value cannot be left empty."); - return; + break; } if(dev.num_leds <= 0) { LOG_WARNING("[LEDStripController] num_leds value cannot be left empty."); - return; + break; } std::string value = dev.port + "," + std::to_string(dev.baud) + "," + std::to_string(dev.num_leds); @@ -127,10 +121,11 @@ void DetectLEDStripControllers() RGBController_LEDStrip* rgb_controller = new RGBController_LEDStrip(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectLEDStripControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("LED Strip", DetectLEDStripControllers); diff --git a/Controllers/LGMonitorController/LGMonitorControllerDetect.cpp b/Controllers/LGMonitorController/LGMonitorControllerDetect.cpp index 619ddc3b0..282332391 100644 --- a/Controllers/LGMonitorController/LGMonitorControllerDetect.cpp +++ b/Controllers/LGMonitorController/LGMonitorControllerDetect.cpp @@ -24,17 +24,22 @@ #define LG_27GN950_B_PID 0x9A8A #define LG_38GL950G_PID 0x9A57 -static void DetectLGMonitorControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLGMonitorControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LGMonitorController* controller = new LGMonitorController(dev, *info, name); RGBController_LGMonitor* rgb_controller = new RGBController_LGMonitor(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("LG 27GN950-B Monitor", DetectLGMonitorControllers, LG_MONITOR_VID, LG_27GN950_B_PID, 1, 0xFF01, 0x01); diff --git a/Controllers/LIFXController/LIFXControllerDetect.cpp b/Controllers/LIFXController/LIFXControllerDetect.cpp index ce2242b15..f2ed7369b 100644 --- a/Controllers/LIFXController/LIFXControllerDetect.cpp +++ b/Controllers/LIFXController/LIFXControllerDetect.cpp @@ -15,26 +15,19 @@ #include "RGBController_LIFX.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectLIFXControllers * -* * -* Detect LIFX devices * -* * -\******************************************************************************************/ - -void DetectLIFXControllers() +DetectedControllers DetectLIFXControllers() { - json lifx_settings; + DetectedControllers detected_controllers; + json lifx_settings; - /*-------------------------------------------------*\ - | Get LIFX settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get LIFX settings from settings manager | + \*-----------------------------------------------------*/ lifx_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("LIFXDevices"); - /*-------------------------------------------------*\ - | If the Wiz settings contains devices, process | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Wiz settings contains devices, process | + \*-----------------------------------------------------*/ if(lifx_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < lifx_settings["devices"].size(); device_idx++) @@ -51,11 +44,12 @@ void DetectLIFXControllers() RGBController_LIFX* rgb_controller = new RGBController_LIFX(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectLIFXControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("LIFX", DetectLIFXControllers); diff --git a/Controllers/LaviewTechnologyController/LaviewTechnologyDetector.cpp b/Controllers/LaviewTechnologyController/LaviewTechnologyDetector.cpp index 78f52e83c..c21a7218c 100644 --- a/Controllers/LaviewTechnologyController/LaviewTechnologyDetector.cpp +++ b/Controllers/LaviewTechnologyController/LaviewTechnologyDetector.cpp @@ -8,38 +8,31 @@ \*---------------------------------------------------------*/ #include -#include -#include #include #include "DetectionManager.h" #include "LaviewTechnologyController.h" #include "RGBController.h" #include "RGBController_LaviewTechnology.h" -#include "LogManager.h" #define LAVIEW_TECHNOLOGY_VID 0x22D4 - #define GLORIOUS_MODEL_I_PID 0x1503 // Wired -/******************************************************************************************\ -* * -* DetectLaviewTechnologyMouse * -* * -* Tests the USB address to see if a Laview Technology controller exists there. * -* * -\******************************************************************************************/ - -static void DetectLaviewTechnologyMouse(hid_device_info* info, const std::string& name) +DetectedControllers DetectLaviewTechnologyMouse(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LaviewTechnologyController* controller = new LaviewTechnologyController(dev, info, name); RGBController_LaviewTechnology* rgb_controller = new RGBController_LaviewTechnology(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Glorious Model I", DetectLaviewTechnologyMouse, LAVIEW_TECHNOLOGY_VID, GLORIOUS_MODEL_I_PID, 1, 0xFF01, 0x02); diff --git a/Controllers/LegoDimensionsToypadBaseController/LegoDimensionsToypadBaseControllerDetect.cpp b/Controllers/LegoDimensionsToypadBaseController/LegoDimensionsToypadBaseControllerDetect.cpp index d74d50998..28aa339c7 100644 --- a/Controllers/LegoDimensionsToypadBaseController/LegoDimensionsToypadBaseControllerDetect.cpp +++ b/Controllers/LegoDimensionsToypadBaseController/LegoDimensionsToypadBaseControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define LEGO_DIMENSIONS_TOYPAD_BASE_PID 0x0241 -void DetectLegoDimensionsToypadBaseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLegoDimensionsToypadBaseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LegoDimensionsToypadBaseController* controller = new LegoDimensionsToypadBaseController(dev, *info, name); RGBController_LegoDimensionsToypadBase* rgb_controller = new RGBController_LegoDimensionsToypadBase(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Lego Dimensions Toypad Base", DetectLegoDimensionsToypadBaseControllers, LOGIC_3_VID, LEGO_DIMENSIONS_TOYPAD_BASE_PID); diff --git a/Controllers/LenovoControllers/Lenovo4ZoneUSBController/Lenovo4ZoneUSBControllerDetect.cpp b/Controllers/LenovoControllers/Lenovo4ZoneUSBController/Lenovo4ZoneUSBControllerDetect.cpp index 1272d7520..bcd45645b 100644 --- a/Controllers/LenovoControllers/Lenovo4ZoneUSBController/Lenovo4ZoneUSBControllerDetect.cpp +++ b/Controllers/LenovoControllers/Lenovo4ZoneUSBController/Lenovo4ZoneUSBControllerDetect.cpp @@ -13,31 +13,36 @@ #include "LenovoDevices4Zone.h" #include "RGBController_Lenovo4ZoneUSB.h" -/*-----------------------------------------------------*\ -| vendor IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| vendor IDs | +\*---------------------------------------------------------*/ #define ITE_VID 0x048D -/*-----------------------------------------------------*\ -| Interface, Usage, and Usage Page | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Interface, Usage, and Usage Page | +\*---------------------------------------------------------*/ enum { LENOVO_PAGE = 0xFF89, LENOVO_USAGE = 0xCC }; -void DetectLenovo4ZoneUSBControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovo4ZoneUSBControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { Lenovo4ZoneUSBController* controller = new Lenovo4ZoneUSBController(dev, info->path, info->product_id, name); RGBController_Lenovo4ZoneUSB* rgb_controller = new RGBController_Lenovo4ZoneUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Lenovo Ideapad 3-15ach6", DetectLenovo4ZoneUSBControllers, ITE_VID, IDEAPAD_315ACH6, LENOVO_PAGE, LENOVO_USAGE); diff --git a/Controllers/LenovoControllers/LenovoLegionK510Controller/LenovoK510ControllerDetect.cpp b/Controllers/LenovoControllers/LenovoLegionK510Controller/LenovoK510ControllerDetect.cpp index ae45193f8..0fb2c9746 100644 --- a/Controllers/LenovoControllers/LenovoLegionK510Controller/LenovoK510ControllerDetect.cpp +++ b/Controllers/LenovoControllers/LenovoLegionK510Controller/LenovoK510ControllerDetect.cpp @@ -22,17 +22,22 @@ #define LENOVO_PAGE 0xFF1C #define LENOVO_USAGE 0x0092 -void DetectLenovoLegionK510Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovoLegionK510Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - LenovoK510Controller* controller = new LenovoK510Controller(dev, *info, name); + LenovoK510Controller* controller = new LenovoK510Controller(dev, *info, name); RGBController_LenovoK510* rgb_controller = new RGBController_LenovoK510(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Lenovo Legion K510 Mini Pro", DetectLenovoLegionK510Controllers, LENOVO_VID, LEGION_K510_PID, LENOVO_IFACE_NUM, LENOVO_PAGE, LENOVO_USAGE); diff --git a/Controllers/LenovoControllers/LenovoM300Controller/LenovoM300ControllerDetect.cpp b/Controllers/LenovoControllers/LenovoM300Controller/LenovoM300ControllerDetect.cpp index 5437ac3d6..fcc4fc9f1 100644 --- a/Controllers/LenovoControllers/LenovoM300Controller/LenovoM300ControllerDetect.cpp +++ b/Controllers/LenovoControllers/LenovoM300Controller/LenovoM300ControllerDetect.cpp @@ -21,17 +21,22 @@ #define LENOVO_USAGE 0X01 #define LENOVO_PAGE 0XFF01 -void DetectLenovoLegionM300Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovoLegionM300Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - LenovoM300Controller* controller = new LenovoM300Controller(dev, *info, name); + LenovoM300Controller* controller = new LenovoM300Controller(dev, *info, name); RGBController_LenovoM300* rgb_controller = new RGBController_LenovoM300(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Lenovo Legion M300", DetectLenovoLegionM300Controllers, LENOVO_VID, LEGION_M300_PID, LENOVO_PAGE, LENOVO_USAGE); diff --git a/Controllers/LenovoControllers/LenovoUSBControllerDetect.cpp b/Controllers/LenovoControllers/LenovoUSBControllerDetect.cpp index 5c16ff4a8..3c68831fe 100644 --- a/Controllers/LenovoControllers/LenovoUSBControllerDetect.cpp +++ b/Controllers/LenovoControllers/LenovoUSBControllerDetect.cpp @@ -15,44 +15,54 @@ #include "RGBController_LenovoUSB.h" #include "RGBController_Lenovo_Gen7_8.h" -/*-----------------------------------------------------*\ -| vendor IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Vendor IDs | +\*---------------------------------------------------------*/ #define ITE_VID 0x048D -/*-----------------------------------------------------*\ -| Interface, Usage, and Usage Page | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Interface, Usage, and Usage Page | +\*---------------------------------------------------------*/ enum { LENOVO_PAGE = 0xFF89, LENOVO_USAGE = 0x07 }; -void DetectLenovoLegionUSBControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovoLegionUSBControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LenovoUSBController* controller = new LenovoUSBController(dev, info->path, info->product_id, name); RGBController_LenovoUSB* rgb_controller = new RGBController_LenovoUSB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLenovoLegionUSBControllersGen7And8(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovoLegionUSBControllersGen7And8(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LenovoGen7And8USBController* controller = new LenovoGen7And8USBController(dev, info->path, info->product_id, name); LenovoRGBController_Gen7_8* rgb_controller = new LenovoRGBController_Gen7_8(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Lenovo Legion Y740", DetectLenovoLegionUSBControllers, ITE_VID, LEGION_Y740, LENOVO_PAGE, LENOVO_USAGE); diff --git a/Controllers/LenovoMotherboardController/LenovoMotherboardControllerDetect.cpp b/Controllers/LenovoMotherboardController/LenovoMotherboardControllerDetect.cpp index db24adb4b..a01559515 100644 --- a/Controllers/LenovoMotherboardController/LenovoMotherboardControllerDetect.cpp +++ b/Controllers/LenovoMotherboardController/LenovoMotherboardControllerDetect.cpp @@ -10,9 +10,9 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "dmiinfo.h" #include "LenovoMotherboardController.h" #include "RGBController_LenovoMotherboard.h" -#include "dmiinfo.h" /*---------------------------------------------------------*\ | vendor ID | @@ -24,9 +24,12 @@ \*---------------------------------------------------------*/ #define LENOVO_MB_PID 0xC955 -void DetectLenovoMotherboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLenovoMotherboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -35,8 +38,10 @@ void DetectLenovoMotherboardControllers(hid_device_info* info, const std::string LenovoMotherboardController* controller = new LenovoMotherboardController(dev, *info, name + " " + dmi.getMainboard()); RGBController_LenovoMotherboard* rgb_controller = new RGBController_LenovoMotherboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Lenovo", DetectLenovoMotherboardControllers, LENOVO_MB_VID, LENOVO_MB_PID, 0xFF89, 0xCC); diff --git a/Controllers/LexipMouseController/LexipMouseControllerDetect.cpp b/Controllers/LexipMouseController/LexipMouseControllerDetect.cpp index 00f0cd93c..efa32d083 100644 --- a/Controllers/LexipMouseController/LexipMouseControllerDetect.cpp +++ b/Controllers/LexipMouseController/LexipMouseControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define LEXIP_NP93_ALPHA_PID 0xFD0A -void DetectLexipMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLexipMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LexipMouseController* controller = new LexipMouseController(dev, *info, name); RGBController_LexipMouse* rgb_controller = new RGBController_LexipMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Np93 ALPHA - Gaming Mouse", DetectLexipMouseControllers, LEXIP_VID, LEXIP_NP93_ALPHA_PID, 0, 0x0001, 2); diff --git a/Controllers/LianLiController/LianLiControllerDetect.cpp b/Controllers/LianLiController/LianLiControllerDetect.cpp index 4d6d189ce..6f8e46544 100644 --- a/Controllers/LianLiController/LianLiControllerDetect.cpp +++ b/Controllers/LianLiController/LianLiControllerDetect.cpp @@ -13,9 +13,9 @@ #include "DetectionManager.h" #include "ResourceManager.h" -/*-----------------------------------------------------*\ -| LianLi USB Controller specific includes | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| LianLi USB Controller specific includes | +\*---------------------------------------------------------*/ #include "RGBController_LianLiUniHub.h" #include "RGBController_LianLiStrimerLConnect.h" #include "LianLiUniHubController.h" @@ -33,20 +33,20 @@ #include "LianLiUniversalScreenController.h" #include "RGBController_LianLiUniversalScreen.h" -/*-----------------------------------------------------*\ -| USB vendor IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| USB vendor IDs | +\*---------------------------------------------------------*/ #define ENE_USB_VID 0x0CF2 #define NUVOTON_USB_VID 0x0416 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define STRIMER_L_CONNECT_PID 0xA200 -/*-----------------------------------------------------*\ -| Fan controller product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Fan controller product IDs | +\*---------------------------------------------------------*/ #define UNI_HUB_PID 0x7750 #define UNI_HUB_AL_PID 0xA101 #define UNI_HUB_SLINF_PID 0xA102 @@ -56,112 +56,120 @@ #define GAII_USB_PID 0x7373 #define GAII_Perf_USB_PID 0x7371 -/*-----------------------------------------------------*\ -| Screen product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Screen product IDs | +\*---------------------------------------------------------*/ #define UNIVERSAL_SCREEN_LED_PID 0x8050 -/*----------------------------------------------------------------------------*\ -| The Uni Hub is controlled by sending control transfers to various wIndex | -| addresses, allthough it announces some kind of hid interface. Hence it | -| requires libusb as hidapi provides no wIndex customization. | -\*----------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| The Uni Hub is controlled by sending control transfers | +| to various wIndex addresses, allthough it announces some | +| kind of hid interface. Hence it requires libusb as hidapi | +| provides no wIndex customization. | +\*---------------------------------------------------------*/ -void DetectLianLiUniHub() +DetectedControllers DetectLianLiUniHub() { - libusb_device** devices = nullptr; - - ssize_t ret; + DetectedControllers detected_controllers; + libusb_device** devices = nullptr; + ssize_t ret; ret = libusb_init(NULL); - if(ret < 0) + + if(ret >= 0) { - return; - } + ret = libusb_get_device_list(NULL, &devices); - ret = libusb_get_device_list(NULL, &devices); - if(ret < 0) - { - return; - } - - ssize_t deviceCount = ret; - - for(int i = 0; i < deviceCount; i++) - { - libusb_device* device = devices[i]; - libusb_device_descriptor descriptor; - ret = libusb_get_device_descriptor(device, &descriptor); - - if(ret < 0) + if(ret >= 0) { - continue; - } + ssize_t deviceCount = ret; - if( descriptor.idVendor == ENE_USB_VID - && descriptor.idProduct == UNI_HUB_PID) - { - LianLiUniHubController* controller = new LianLiUniHubController(device, &descriptor); - RGBController_LianLiUniHub* rgb_controller = new RGBController_LianLiUniHub(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + for(int i = 0; i < deviceCount; i++) + { + libusb_device* device = devices[i]; + libusb_device_descriptor descriptor; + + ret = libusb_get_device_descriptor(device, &descriptor); + + if(ret < 0) + { + continue; + } + + if(descriptor.idVendor == ENE_USB_VID + && descriptor.idProduct == UNI_HUB_PID) + { + LianLiUniHubController* controller = new LianLiUniHubController(device, &descriptor); + RGBController_LianLiUniHub* rgb_controller = new RGBController_LianLiUniHub(controller); + + detected_controllers.push_back(rgb_controller); + } + } + + if(devices != nullptr) + { + libusb_free_device_list(devices, 1); + } } } - if(devices != nullptr) - { - libusb_free_device_list(devices, 1); - } + return(detected_controllers); } -void DetectLianLiUniHub_AL10() +DetectedControllers DetectLianLiUniHub_AL10() { - libusb_device** devices = nullptr; - - ssize_t ret; + DetectedControllers detected_controller; + libusb_device** devices = nullptr; + ssize_t ret; ret = libusb_init(NULL); - if(ret < 0) + + if(ret >= 0) { - return; - } + ret = libusb_get_device_list(NULL, &devices); - ret = libusb_get_device_list(NULL, &devices); - if(ret < 0) - { - return; - } - - ssize_t deviceCount = ret; - - for(int i = 0; i < deviceCount; i++) - { - libusb_device* device = devices[i]; - libusb_device_descriptor descriptor; - ret = libusb_get_device_descriptor(device, &descriptor); - - if(ret < 0) + if(ret >= 0) { - continue; - } + ssize_t deviceCount = ret; - if( descriptor.idVendor == ENE_USB_VID - && descriptor.idProduct == UNI_HUB_AL_PID) - { - LianLiUniHub_AL10Controller* controller = new LianLiUniHub_AL10Controller(device, &descriptor); - RGBController_LianLiUniHub_AL10* rgb_controller = new RGBController_LianLiUniHub_AL10(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + for(int i = 0; i < deviceCount; i++) + { + libusb_device* device = devices[i]; + libusb_device_descriptor descriptor; + + ret = libusb_get_device_descriptor(device, &descriptor); + + if(ret < 0) + { + continue; + } + + if( descriptor.idVendor == ENE_USB_VID + && descriptor.idProduct == UNI_HUB_AL_PID) + { + LianLiUniHub_AL10Controller* controller = new LianLiUniHub_AL10Controller(device, &descriptor); + RGBController_LianLiUniHub_AL10* rgb_controller = new RGBController_LianLiUniHub_AL10(controller); + + detected_controller.push_back(rgb_controller); + } + } + + if(devices != nullptr) + { + libusb_free_device_list(devices, 1); + } } } - if(devices != nullptr) - { - libusb_free_device_list(devices, 1); - } -} /* DetectLianLiUniHub_AL10() */ + return(detected_controller); +} -void DetectLianLiUniHubAL(hid_device_info* info, const std::string& name) +DetectedControllers DetectLianLiUniHubAL(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -172,7 +180,8 @@ void DetectLianLiUniHubAL(hid_device_info* info, const std::string& name) if(firmwareVersion == "v1.7") { RGBController_LianLiUniHubAL* rgb_controller = new RGBController_LianLiUniHubAL(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } else if(firmwareVersion == "v1.0") { @@ -182,66 +191,88 @@ void DetectLianLiUniHubAL(hid_device_info* info, const std::string& name) else { delete controller; - return; } - } -} /* DetectLianLiUniHubAL() */ -void DetectLianLiUniHubSLV2(hid_device_info* info, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectLianLiUniHubSLV2(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - LianLiUniHubSLV2Controller* controller = new LianLiUniHubSLV2Controller(dev, info->path, name); - + LianLiUniHubSLV2Controller* controller = new LianLiUniHubSLV2Controller(dev, info->path, name); RGBController_LianLiUniHubSLV2* rgb_controller = new RGBController_LianLiUniHubSLV2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } -} /* DetectLianLiUniHubSLV2() */ -void DetectLianLiUniHubSLInfinity(hid_device_info* info, const std::string& name) + detected_controllers.push_back(rgb_controller); + } + + return(detected_controllers); +} + +DetectedControllers DetectLianLiUniHubSLInfinity(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - LianLiUniHubSLInfinityController* controller = new LianLiUniHubSLInfinityController(dev, info->path, name); - + LianLiUniHubSLInfinityController* controller = new LianLiUniHubSLInfinityController(dev, info->path, name); RGBController_LianLiUniHubSLInfinity* rgb_controller = new RGBController_LianLiUniHubSLInfinity(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - } -} /* DetectLianLiUniHubSLInfinity() */ -void DetectLianLiStrimerControllers(hid_device_info* info, const std::string& /*name*/) + detected_controllers.push_back(rgb_controller); + } + + return(detected_controllers); +} + +DetectedControllers DetectLianLiStrimerControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LianLiStrimerLConnectController* controller = new LianLiStrimerLConnectController(dev, info->path); RGBController_LianLiStrimerLConnect* rgb_controller = new RGBController_LianLiStrimerLConnect(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLianLiGAIITrinity(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectLianLiGAIITrinity(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LianLiGAIITrinityController* controller = new LianLiGAIITrinityController(dev, info->path); RGBController_LianLiGAIITrinity* rgb_controller = new RGBController_LianLiGAIITrinity(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLianLiUniversalScreen() +DetectedControllers DetectLianLiUniversalScreen() { + DetectedControllers detected_controllers; + libusb_init(NULL); #ifdef _WIN32 @@ -258,8 +289,10 @@ void DetectLianLiUniversalScreen() LianLiUniversalScreenController* controller = new LianLiUniversalScreenController(dev); RGBController_LianLiUniversalScreen* rgb_controller = new RGBController_LianLiUniversalScreen(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/LightSaltController/LightSaltControllerDetect.cpp b/Controllers/LightSaltController/LightSaltControllerDetect.cpp index d274a4b2f..8a3e8291b 100644 --- a/Controllers/LightSaltController/LightSaltControllerDetect.cpp +++ b/Controllers/LightSaltController/LightSaltControllerDetect.cpp @@ -18,9 +18,12 @@ #define LIGHTSALT_VID 0x0483 #define LIGHTSALT_PID 0x5750 -void DetectLightSaltControllers(hid_device_info* info, const std::string &) +DetectedControllers DetectLightSaltControllers(hid_device_info* info, const std::string &) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -44,9 +47,11 @@ void DetectLightSaltControllers(hid_device_info* info, const std::string &) if(rgb_controller != nullptr) { - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectLightSaltControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("LightSalt Peripherals", DetectLightSaltControllers, LIGHTSALT_VID, LIGHTSALT_PID, 1, 1, 0); diff --git a/Controllers/LinuxLEDController/LinuxLEDControllerDetect_Linux.cpp b/Controllers/LinuxLEDController/LinuxLEDControllerDetect_Linux.cpp index 3a3c6052e..899de1f51 100644 --- a/Controllers/LinuxLEDController/LinuxLEDControllerDetect_Linux.cpp +++ b/Controllers/LinuxLEDController/LinuxLEDControllerDetect_Linux.cpp @@ -15,26 +15,19 @@ #include "RGBController_LinuxLED_Linux.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectLinuxLEDControllers * -* * -* Detect devices supported by the LinuxLED driver * -* * -\******************************************************************************************/ - -void DetectLinuxLEDControllers() +DetectedControllers DetectLinuxLEDControllers() { - json linux_led_settings; + DetectedControllers detected_controllers; + json linux_led_settings; - /*-------------------------------------------------*\ - | Get Linux LED settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Linux LED settings from settings manager | + \*-----------------------------------------------------*/ linux_led_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("LinuxLEDDevices"); - /*-------------------------------------------------*\ - | If the LinuxLED settings contains devices, process| - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the LinuxLED settings contains devices, process | + \*-----------------------------------------------------*/ if(linux_led_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < linux_led_settings["devices"].size(); device_idx++) @@ -78,10 +71,11 @@ void DetectLinuxLEDControllers() RGBController_LinuxLED* rgb_controller = new RGBController_LinuxLED(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectLinuxLEDControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Linux LED", DetectLinuxLEDControllers); diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index 1f374fe28..8296db5f2 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -43,15 +43,15 @@ using namespace std::chrono_literals; -/*-----------------------------------------------------*\ -| Logitech vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Logitech vendor ID | +\*---------------------------------------------------------*/ #define LOGITECH_VID 0x046D #define LOGITECH_LIGHTSPEED_DETECT_MAX_RETRY 10 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_G213_PID 0xC336 #define LOGITECH_G512_PID 0xC342 #define LOGITECH_G512_RGB_PID 0xC33C @@ -70,9 +70,9 @@ using namespace std::chrono_literals; #define LOGITECH_G910_PID 0xC335 #define LOGITECH_GPRO_KEYBOARD_1_PID 0xC339 -/*-----------------------------------------------------*\ -| Mouse product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mouse product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_G203_PID 0xC084 #define LOGITECH_G203_LIGHTSYNC_PID 0xC092 #define LOGITECH_G203_LIGHTSYNC_PID_2 0xC09D @@ -94,19 +94,19 @@ using namespace std::chrono_literals; #define LOGITECH_G_PRO_HERO_PID 0xC08C #define LOGITECH_G_PRO_WIRELESS_PID 0xC088 -/*-----------------------------------------------------*\ -| Mousemat product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mousemat product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_G_LIGHTSPEED_POWERPLAY_PID 0xC53A -/*-----------------------------------------------------*\ -| Speaker product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Speaker product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_G560_PID 0x0A78 -/*-----------------------------------------------------*\ -| Headset product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Headset product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_G633_PID 0x0A5C #define LOGITECH_G635_PID 0x0A89 #define LOGITECH_G733_PID 0x0AB5 @@ -115,10 +115,10 @@ using namespace std::chrono_literals; #define LOGITECH_G933_PID 0x0A5B #define LOGITECH_G935_PID 0x0A87 -/*-----------------------------------------------------*\ -| Unifying Device IDs (Including Lightspeed receivers) | -| NB: Not used but preserved for debugging | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Unifying Device IDs (Including Lightspeed receivers) | +| NB: Not used but preserved for debugging | +\*---------------------------------------------------------*/ #define LOGITECH_G_UNIFYING_RECEIVER_1_PID 0xC52B #define LOGITECH_G_NANO_RECEIVER_PID 0xC52F #define LOGITECH_G_G700_RECEIVER_PID 0xC531 @@ -136,35 +136,43 @@ using namespace std::chrono_literals; #define LOGITECH_G_PRO_WIRELESS_VIRTUAL_PID 0x4079 #define LOGITECH_POWERPLAY_MAT_VIRTUAL_PID 0x405F -/*-----------------------------------------------------*\ -| Joystick product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Joystick product IDs | +\*---------------------------------------------------------*/ #define LOGITECH_X56_VID 0x0738 #define LOGITECH_X56_JOYSTICK_PID 0x2221 #define LOGITECH_X56_THROTTLE_PID 0xA221 -/*-----------------------------------------------------*\ -| Logitech Keyboards | -\*-----------------------------------------------------*/ -void DetectLogitechKeyboardG213(hid_device_info* info, const std::string& name) +/*---------------------------------------------------------*\ +| Logitech Keyboards | +\*---------------------------------------------------------*/ +DetectedControllers DetectLogitechKeyboardG213(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LogitechG213Controller* controller = new LogitechG213Controller(dev, info->path, name); RGBController_LogitechG213* rgb_controller = new RGBController_LogitechG213(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechKeyboardG810(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardG810(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | 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 | - \*-------------------------------------------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | 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 | + \*-----------------------------------------------------*/ + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE hid_device* dev_usage_0x0602 = nullptr; hid_device* dev_usage_0x0604 = nullptr; @@ -197,7 +205,7 @@ void DetectLogitechKeyboardG810(hid_device_info* info, const std::string& name) LogitechG810Controller* controller = new LogitechG810Controller(dev_usage_0x0602, dev_usage_0x0604, name); RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -213,17 +221,22 @@ void DetectLogitechKeyboardG810(hid_device_info* info, const std::string& name) LogitechG810Controller* controller = new LogitechG810Controller(dev, dev, name); RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } #endif + + return(detected_controllers); } -void DetectLogitechKeyboardG910(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardG910(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | 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 | - \*-------------------------------------------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | 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 | + \*-----------------------------------------------------*/ + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE hid_device* dev_usage_0x0602 = nullptr; hid_device* dev_usage_0x0604 = nullptr; @@ -256,7 +269,7 @@ void DetectLogitechKeyboardG910(hid_device_info* info, const std::string& name) LogitechG910Controller* controller = new LogitechG910Controller(dev_usage_0x0602, dev_usage_0x0604, name); RGBController_LogitechG910* rgb_controller = new RGBController_LogitechG910(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -272,17 +285,22 @@ void DetectLogitechKeyboardG910(hid_device_info* info, const std::string& name) LogitechG910Controller* controller = new LogitechG910Controller(dev, dev, name); RGBController_LogitechG910* rgb_controller = new RGBController_LogitechG910(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } #endif + + return(detected_controllers); } -void DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | 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 | - \*-------------------------------------------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | 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 | + \*-----------------------------------------------------*/ + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE hid_device* dev_usage_0x0602 = nullptr; hid_device* dev_usage_0x0604 = nullptr; @@ -315,7 +333,7 @@ void DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) LogitechG815Controller* controller = new LogitechG815Controller(dev_usage_0x0602, dev_usage_0x0604, name); RGBController_LogitechG815* rgb_controller = new RGBController_LogitechG815(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -339,45 +357,60 @@ void DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) LogitechG815Controller* controller = new LogitechG815Controller(dev, dev, name); RGBController_LogitechG815* rgb_controller = new RGBController_LogitechG815(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } #endif + + return(detected_controllers); } -void DetectLogitechKeyboardG915(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardG915(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - bool is_tkl = info->product_id == LOGITECH_G915TKL_RECEIVER_PID; + DetectedControllers detected_controllers; + hid_device* dev; + bool is_tkl = info->product_id == LOGITECH_G915TKL_RECEIVER_PID; + + dev = hid_open_path(info->path); if(dev) { LogitechG915Controller* controller = new LogitechG915Controller(dev, false, name); RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller, is_tkl); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechKeyboardG915Wired(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardG915Wired(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - bool is_tkl = info->product_id == LOGITECH_G915TKL_WIRED_PID; + DetectedControllers detected_controllers; + hid_device* dev; + bool is_tkl = info->product_id == LOGITECH_G915TKL_WIRED_PID; + + dev = hid_open_path(info->path); if(dev) { LogitechG915Controller* controller = new LogitechG915Controller(dev, true, name); RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller, is_tkl); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechKeyboardGPro(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechKeyboardGPro(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | 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 | - \*-------------------------------------------------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | 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 | + \*-----------------------------------------------------*/ + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE hid_device* dev_usage_0x0602 = nullptr; hid_device* dev_usage_0x0604 = nullptr; @@ -410,7 +443,7 @@ void DetectLogitechKeyboardGPro(hid_device_info* info, const std::string& name) LogitechGProKeyboardController* controller = new LogitechGProKeyboardController(dev_usage_0x0602, dev_usage_0x0604, name); RGBController_LogitechGProKeyboard* rgb_controller = new RGBController_LogitechGProKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -426,16 +459,19 @@ void DetectLogitechKeyboardGPro(hid_device_info* info, const std::string& name) LogitechGProKeyboardController* controller = new LogitechGProKeyboardController(dev, dev, name); RGBController_LogitechGProKeyboard* rgb_controller = new RGBController_LogitechGProKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } #endif + + return(detected_controllers); } -/*-----------------------------------------------------*\ -| Logitech Mice | -\*-----------------------------------------------------*/ -static void addLogitechLightsyncMouse1zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id) +/*---------------------------------------------------------*\ +| Logitech Mice | +\*---------------------------------------------------------*/ +DetectedControllers addLogitechLightsyncMouse1zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id) { + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE { hid_device* dev_usage_1 = nullptr; @@ -469,7 +505,7 @@ static void addLogitechLightsyncMouse1zone(hid_device_info* info, const std::str LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name); RGBController_LogitechGLightsync1zone* rgb_controller = new RGBController_LogitechGLightsync1zone (controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -488,14 +524,17 @@ static void addLogitechLightsyncMouse1zone(hid_device_info* info, const std::str LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev, dev, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name); RGBController_LogitechGLightsync1zone* rgb_controller = new RGBController_LogitechGLightsync1zone(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } #endif + + return(detected_controllers); } -static void addLogitechLightsyncMouse2zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id) +DetectedControllers addLogitechLightsyncMouse2zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id) { + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE { hid_device* dev_usage_1 = nullptr; @@ -529,7 +568,7 @@ static void addLogitechLightsyncMouse2zone(hid_device_info* info, const std::str LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name); RGBController_LogitechGLightsync* rgb_controller = new RGBController_LogitechGLightsync (controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { @@ -547,107 +586,134 @@ static void addLogitechLightsyncMouse2zone(hid_device_info* info, const std::str LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev, dev, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name); RGBController_LogitechGLightsync* rgb_controller = new RGBController_LogitechGLightsync(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } #endif + + return(detected_controllers); } -void DetectLogitechMouseG203(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseG203(hid_device_info* info, const std::string& name) { - addLogitechLightsyncMouse1zone(info, name, 0xFF, 0x0E, 0x3A); + return(addLogitechLightsyncMouse1zone(info, name, 0xFF, 0x0E, 0x3A)); } -void DetectLogitechMouseG203L(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseG203L(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LogitechG203LController* controller = new LogitechG203LController(dev, info->path, name); RGBController_LogitechG203L* rgb_controller = new RGBController_LogitechG203L(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechMouseG303(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseG303(hid_device_info* info, const std::string& name) { - addLogitechLightsyncMouse2zone(info, name, 0xFF, 0x0E, 0x3A); + return(addLogitechLightsyncMouse2zone(info, name, 0xFF, 0x0E, 0x3A)); } -void DetectLogitechMouseG403(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseG403(hid_device_info* info, const std::string& name) { - addLogitechLightsyncMouse2zone(info, name, 0xFF, 0x0E, 0x3A); + return(addLogitechLightsyncMouse2zone(info, name, 0xFF, 0x0E, 0x3A)); } -void DetectLogitechMouseG600(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseG600(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LogitechG600Controller* controller = new LogitechG600Controller(dev, info->path, name); RGBController_LogitechG600* rgb_controller = new RGBController_LogitechG600(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechMouseGPRO(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechMouseGPRO(hid_device_info* info, const std::string& name) { - addLogitechLightsyncMouse1zone(info, name, 0xFF, 0x0E, 0x3C); + return(addLogitechLightsyncMouse1zone(info, name, 0xFF, 0x0E, 0x3C)); } -/*-----------------------------------------------------*\ -| Other Logitech Devices | -\*-----------------------------------------------------*/ -void DetectLogitechG560(hid_device_info* info, const std::string& name) +/*---------------------------------------------------------*\ +| Other Logitech Devices | +\*---------------------------------------------------------*/ +DetectedControllers DetectLogitechG560(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - /*---------------------------------------------*\ - | Add G560 Speaker | - \*---------------------------------------------*/ + /*-------------------------------------------------*\ + | Add G560 Speaker | + \*-------------------------------------------------*/ LogitechG560Controller* controller = new LogitechG560Controller(dev, info->path, name); RGBController_LogitechG560* rgb_controller = new RGBController_LogitechG560(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechG933(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechG933(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - /*---------------------------------------------*\ - | Add G933 Headset | - \*---------------------------------------------*/ + /*-------------------------------------------------*\ + | Add G933 Headset | + \*-------------------------------------------------*/ LogitechG933Controller* controller = new LogitechG933Controller(dev, info->path, name); RGBController_LogitechG933* rgb_controller = new RGBController_LogitechG933(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectLogitechX56(hid_device_info* info, const std::string& name) +DetectedControllers DetectLogitechX56(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - /*---------------------------------------------*\ - | Add X56 Devices | - \*---------------------------------------------*/ + /*-------------------------------------------------*\ + | Add X56 Devices | + \*-------------------------------------------------*/ LogitechX56Controller* controller = new LogitechX56Controller(dev, info->path, name); RGBController_LogitechX56* rgb_controller = new RGBController_LogitechX56(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ @@ -708,13 +774,14 @@ REGISTER_HID_DETECTOR_IPU("Logitech X56 Rhino Hotas Throttle", Dete | | \*---------------------------------------------------------------------------------------------------------*/ -void CreateLogitechLightspeedDevice(char *path, usages device_usages, uint8_t device_index, uint16_t pid, bool wireless, std::shared_ptr mutex_ptr) +DetectedControllers CreateLogitechLightspeedDevice(char *path, usages device_usages, uint8_t device_index, uint16_t pid, bool wireless, std::shared_ptr mutex_ptr) { - LogitechLightspeedController* controller = new LogitechLightspeedController(device_usages.find(2)->second, path); - bool lightspeedDeviceIsValid = false; - int retryCount = 0; + DetectedControllers detected_controllers; + LogitechLightspeedController* controller = new LogitechLightspeedController(device_usages.find(2)->second, path); + bool lightspeedDeviceIsValid = false; + int retryCount = 0; - while (!lightspeedDeviceIsValid && retryCount < LOGITECH_LIGHTSPEED_DETECT_MAX_RETRY) + while(!lightspeedDeviceIsValid && retryCount < LOGITECH_LIGHTSPEED_DETECT_MAX_RETRY) { std::this_thread::sleep_for(50ms); controller->lightspeed = new logitech_device(path, device_usages, device_index, wireless, mutex_ptr); @@ -726,7 +793,9 @@ void CreateLogitechLightspeedDevice(char *path, usages device_usages, uint8_t de { RGBController_LogitechLightspeed* rgb_controller = new RGBController_LogitechLightspeed(controller); rgb_controller->pid = pid; - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); + LOG_DEBUG("Added controller in %i retries", retryCount); } else @@ -734,18 +803,20 @@ void CreateLogitechLightspeedDevice(char *path, usages device_usages, uint8_t de delete controller; LOG_DEBUG("Failed to set up device - exceeded retries"); } + + return(detected_controllers); } -void DetectLogitechWired(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectLogitechWired(hid_device_info* info, const std::string& /*name*/) { /*-----------------------------------------------------------------*\ | Wired lightspeed devices don't use the FAP short message | | Be sure to specify a Page AND Usage when using this detector | | i.e. REGISTER_HID_DETECTOR_IPU | \*-----------------------------------------------------------------*/ - //char *path = info->path; - usages device_usages; - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + usages device_usages; + hid_device* dev = hid_open_path(info->path); if(dev) { @@ -759,8 +830,10 @@ void DetectLogitechWired(hid_device_info* info, const std::string& /*name*/) if(device_usages.size() > 0) { - CreateLogitechLightspeedDevice(info->path, device_usages, LOGITECH_DEFAULT_DEVICE_INDEX, info->product_id, false, nullptr); + detected_controllers = CreateLogitechLightspeedDevice(info->path, device_usages, LOGITECH_DEFAULT_DEVICE_INDEX, info->product_id, false, nullptr); } + + return(detected_controllers); } /*---------------------------------------------------------------------------------------------------------*\ @@ -810,18 +883,19 @@ usages BundleLogitechUsages(hid_device_info* info) return temp_usages; } -void DetectLogitechLightspeedReceiver(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectLogitechLightspeedReceiver(hid_device_info* info, const std::string& /*name*/) { /*-----------------------------------------------------------------*\ | Need to save the PID and the device path before iterating | | over "info" in BundleLogitechUsages() | \*-----------------------------------------------------------------*/ - char *path = info->path; - uint16_t dev_pid = info->product_id; - usages device_usages = BundleLogitechUsages(info); + DetectedControllers detected_controllers; + char *path = info->path; + uint16_t dev_pid = info->product_id; + usages device_usages = BundleLogitechUsages(info); - wireless_map wireless_devices; - unsigned int device_count = getWirelessDevice(device_usages, dev_pid, &wireless_devices); + wireless_map wireless_devices; + unsigned int device_count = getWirelessDevice(device_usages, dev_pid, &wireless_devices); /*-----------------------------------------------------------------*\ | Lightspeed Receivers will only have one paired /connected device | @@ -837,9 +911,11 @@ void DetectLogitechLightspeedReceiver(hid_device_info* info, const std::string& for(wireless_map::iterator wd = wireless_devices.begin(); wd != wireless_devices.end(); wd++) { - CreateLogitechLightspeedDevice(path, device_usages, wd->second, dev_pid, true, logitech_mutex); + detected_controllers = CreateLogitechLightspeedDevice(path, device_usages, wd->second, dev_pid, true, logitech_mutex); } } + + return(detected_controllers); } /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ @@ -857,16 +933,16 @@ REGISTER_HID_DETECTOR_IPU("Logitech G Powerplay Mousepad", \*---------------------------------------------------------------------------------------------------------*/ #ifdef __linux__ -void DetectLogitechWireless(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectLogitechWireless(hid_device_info* info, const std::string& /*name*/) { /*-----------------------------------------------------------------*\ | Wireless lightspeed devices on Linux are handled by the Kernel | | and as such can largely be treated as Wired with the caveat | | that they may not be connected | \*-----------------------------------------------------------------*/ - //char *path = info->path; - usages device_usages; - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + usages device_usages; + hid_device* dev = hid_open_path(info->path); if(dev) { @@ -886,8 +962,10 @@ void DetectLogitechWireless(hid_device_info* info, const std::string& /*name*/) \*-------------------------------------------------*/ std::shared_ptr logitech_mutex = std::make_shared(); - CreateLogitechLightspeedDevice(info->path, device_usages, LOGITECH_DEFAULT_DEVICE_INDEX, info->product_id, true, logitech_mutex); + detected_controllers = CreateLogitechLightspeedDevice(info->path, device_usages, LOGITECH_DEFAULT_DEVICE_INDEX, info->product_id, true, logitech_mutex); } + + return(detected_controllers); } /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/LuxaforController/LuxaforControllerDetect.cpp b/Controllers/LuxaforController/LuxaforControllerDetect.cpp index b5be53285..fac4d96ee 100644 --- a/Controllers/LuxaforController/LuxaforControllerDetect.cpp +++ b/Controllers/LuxaforController/LuxaforControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define LUXAFOR_FLAG_PID 0xF372 -void DetectLuxaforControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectLuxaforControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LuxaforController* controller = new LuxaforController(dev, info->path, name); RGBController_Luxafor* rgb_controller = new RGBController_Luxafor(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -REGISTER_HID_DETECTOR( "Luxafor Flag", DetectLuxaforControllers, LUXAFOR_VID, LUXAFOR_FLAG_PID ); +REGISTER_HID_DETECTOR("Luxafor Flag", DetectLuxaforControllers, LUXAFOR_VID, LUXAFOR_FLAG_PID); diff --git a/Controllers/MNTKeyboardController/MNTKeyboardControllerDetect.cpp b/Controllers/MNTKeyboardController/MNTKeyboardControllerDetect.cpp index 4a2eee2fb..e51798081 100644 --- a/Controllers/MNTKeyboardController/MNTKeyboardControllerDetect.cpp +++ b/Controllers/MNTKeyboardController/MNTKeyboardControllerDetect.cpp @@ -3,48 +3,48 @@ | | | Driver for the MNT Reform keyboards | | | -| Christian Heller 7 Aug 2024 | +| Christian Heller 07 Aug 2024 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "LogManager.h" #include #include "MNTReformKeyboardController.h" #include "MNTPocketReformKeyboardController.h" #include "RGBController_MNTReformKeyboard.h" #include "RGBController_MNTPocketReformKeyboard.h" -#define PID_KBD_REFORM 0x6D02 -#define PID_KBD_POCKET_REFORM 0x6D06 +#define PID_KBD_REFORM 0x6D02 +#define PID_KBD_POCKET_REFORM 0x6D06 -void DetectMNTKeyboardControllers(hid_device_info *info, const std::string &name) +DetectedControllers DetectMNTKeyboardControllers(hid_device_info *info, const std::string &name) { - LOG_DEBUG("[%s] trying to detect … ", name.c_str()); - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - LOG_DEBUG("[%s] found at %s", name.c_str(), info->path); if(info->product_id == PID_KBD_REFORM) { - MNTReformKeyboardController *controller = new MNTReformKeyboardController(dev, info->path); - RGBController_MNTReformKeyboard *rgb_controller = new RGBController_MNTReformKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + MNTReformKeyboardController * controller = new MNTReformKeyboardController(dev, info->path); + RGBController_MNTReformKeyboard * rgb_controller = new RGBController_MNTReformKeyboard(controller); + + detected_controllers.push_back(rgb_controller); } else if(info->product_id == PID_KBD_POCKET_REFORM) { - MNTPocketReformKeyboardController *controller = new MNTPocketReformKeyboardController(dev, info->path); - RGBController_MNTPocketReformKeyboard *rgb_controller = new RGBController_MNTPocketReformKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + MNTPocketReformKeyboardController * controller = new MNTPocketReformKeyboardController(dev, info->path); + RGBController_MNTPocketReformKeyboard * rgb_controller = new RGBController_MNTPocketReformKeyboard(controller); + + detected_controllers.push_back(rgb_controller); } - else - { - return; - } - LOG_DEBUG("[%s] successfully registered", name.c_str()); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("MNT Reform Keyboard", DetectMNTKeyboardControllers, KBD_VID, PID_KBD_REFORM, KBD_INTERFACE, HID_USAGE_PAGE_DESKTOP, HID_USAGE_DESKTOP_KEYBOARD); diff --git a/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp b/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp index 93f862216..5a506c8bf 100644 --- a/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp +++ b/Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp @@ -17,27 +17,22 @@ #define MSI_3_ZONE_KEYBOARD_VID 0x1770 #define MSI_3_ZONE_KEYBOARD_PID 0xFF00 -/******************************************************************************************\ -* * -* DetectMSI3ZoneControllers * -* * -* Tests the USB address to see if an MSI/SteelSeries 3-zone Keyboard controller * -* exists there. * -* * -\******************************************************************************************/ - -void DetectMSI3ZoneControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectMSI3ZoneControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { MSI3ZoneController* controller = new MSI3ZoneController(dev, info->path); RGBController_MSI3Zone* rgb_controller = new RGBController_MSI3Zone(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectMSI3ZoneControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR("MSI 3-Zone Laptop", DetectMSI3ZoneControllers, MSI_3_ZONE_KEYBOARD_VID, MSI_3_ZONE_KEYBOARD_PID); diff --git a/Controllers/MSIGPUController/MSIGPUController/MSIGPUControllerDetect.cpp b/Controllers/MSIGPUController/MSIGPUController/MSIGPUControllerDetect.cpp index 99c7e1b76..6b7a31836 100644 --- a/Controllers/MSIGPUController/MSIGPUController/MSIGPUControllerDetect.cpp +++ b/Controllers/MSIGPUController/MSIGPUController/MSIGPUControllerDetect.cpp @@ -8,42 +8,30 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "MSIGPUController.h" -#include "RGBController_MSIGPU.h" #include "i2c_amd_gpu.h" #include "i2c_smbus.h" +#include "MSIGPUController.h" #include "pci_ids.h" +#include "RGBController_MSIGPU.h" -/******************************************************************************************\ -* * -* DetectMSIGPUControllers * -* * -* Detect MSI GPU controllers on the enumerated I2C busses. * -* * -\******************************************************************************************/ - -void DetectMSIGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectMSIGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(bus->pci_vendor == NVIDIA_VEN && bus->port_id != 1) + DetectedControllers detected_controllers; + + if((bus->pci_vendor != NVIDIA_VEN || bus->port_id == 1) && (bus->pci_vendor != AMD_GPU_VEN || is_amd_gpu_i2c_bus(bus))) { - return; - } - if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus)) - { - return; + MSIGPUController* controller = new MSIGPUController(bus, i2c_addr, name); + RGBController_MSIGPU* rgb_controller = new RGBController_MSIGPU(controller); + + detected_controllers.push_back(rgb_controller); } - MSIGPUController* controller = new MSIGPUController(bus, i2c_addr, name); - RGBController_MSIGPU* rgb_controller = new RGBController_MSIGPU(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); - -} /* DetectMSIGPUControllers() */ - -/*-----------------------------------------*\ -| Nvidia GPUs | -\*-----------------------------------------*/ + return(detected_controllers); +} +/*---------------------------------------------------------*\ +| Nvidia GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1070 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, MSI_SUB_VEN, MSI_GTX1070_GAMING_X_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 Gaming X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660_DEV, MSI_SUB_VEN, MSI_GTX1660_GAMING_X_6G_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI GeForce GTX 1660 Ti Gaming", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_GTX1660TI_DEV, MSI_SUB_VEN, MSI_GTX1660TI_GAMING_6G_SUB_DEV, 0x68); @@ -112,10 +100,9 @@ REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Suprim X", Dete REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Ti Suprim X", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090TI_DEV, MSI_SUB_VEN, MSI_RTX3090TI_SUPRIM_X_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 3090 Ti Gaming X Trio", DetectMSIGPUControllers, NVIDIA_VEN, NVIDIA_RTX3090TI_DEV, MSI_SUB_VEN, MSI_RTX3090TI_GAMING_X_TRIO_SUB_DEV, 0x68); -/*-----------------------------------------*\ -| AMD GPUs | -\*-----------------------------------------*/ - +/*---------------------------------------------------------*\ +| AMD GPUs | +\*---------------------------------------------------------*/ REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 5600 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI10_DEV, MSI_SUB_VEN, MSI_RX5600XT_GAMING_X_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6600 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV, MSI_SUB_VEN, MSI_RX6600XT_GAMING_X_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI Radeon RX 6650 XT Gaming X", DetectMSIGPUControllers, AMD_GPU_VEN, AMD_NAVI23_DEV1, MSI_SUB_VEN, MSI_RX6650XT_GAMING_X_SUB_DEV, 0x68); diff --git a/Controllers/MSIGPUController/MSIGPUv2Controller/MSIGPUv2ControllerDetect.cpp b/Controllers/MSIGPUController/MSIGPUv2Controller/MSIGPUv2ControllerDetect.cpp index aa4f86b4b..c1dccc115 100644 --- a/Controllers/MSIGPUController/MSIGPUv2Controller/MSIGPUv2ControllerDetect.cpp +++ b/Controllers/MSIGPUController/MSIGPUv2Controller/MSIGPUv2ControllerDetect.cpp @@ -12,30 +12,24 @@ #include "DetectionManager.h" #include "LogManager.h" #include "i2c_smbus.h" -#include "RGBController_MSIGPUv2.h" #include "MSIGPUv2Controller.h" +#include "RGBController_MSIGPUv2.h" -/*-----------------------------------------------------------------------------------------*\ -| | -| DetectMSI GPU V2 Controllers | -| | -| Detect MSI GPU v2 controllers on the enumerated I2C busses. | -| | -\*-----------------------------------------------------------------------------------------*/ - -void DetectMSIGPUv2Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectMSIGPUv2Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(bus->pci_vendor == NVIDIA_VEN && bus->port_id != 1) + DetectedControllers detected_controllers; + + if(bus->pci_vendor != NVIDIA_VEN || bus->port_id == 1) { - return; + int msi_gpu_id = bus->pci_subsystem_device | bus->pci_device << 16; + MSIGPUv2Controller* controller = new MSIGPUv2Controller(bus, i2c_addr, name); + RGBController_MSIGPUv2* rgb_controller = new RGBController_MSIGPUv2(controller, msi_gpu_id); + + detected_controllers.push_back(rgb_controller); } - int msi_gpu_id = bus->pci_subsystem_device | bus->pci_device << 16; - MSIGPUv2Controller* controller = new MSIGPUv2Controller(bus, i2c_addr, name); - RGBController_MSIGPUv2* rgb_controller = new RGBController_MSIGPUv2(controller, msi_gpu_id); - - DetectionManager::get()->RegisterRGBController(rgb_controller); -} /* DetectMSIGPUv2Controllers() */ + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Gaming X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060_DEV, MSI_SUB_VEN, MSI_RTX4060_GAMING_X_8G_SUB_DEV, 0x68); REGISTER_I2C_PCI_DETECTOR("MSI GeForce RTX 4060 Ti Gaming X", DetectMSIGPUv2Controllers, NVIDIA_VEN, NVIDIA_RTX4060TI_DEV, MSI_SUB_VEN, MSI_RTX4060TI_GAMING_X_8G_SUB_DEV, 0x68); diff --git a/Controllers/MSIKeyboardController/MSIKeyboardControllerDetect.cpp b/Controllers/MSIKeyboardController/MSIKeyboardControllerDetect.cpp index 9dbc08b2f..95ae563a3 100644 --- a/Controllers/MSIKeyboardController/MSIKeyboardControllerDetect.cpp +++ b/Controllers/MSIKeyboardController/MSIKeyboardControllerDetect.cpp @@ -13,27 +13,22 @@ #define MSI_USB_VID 0x1462 -/*----------------------------------------------------------*\ -| | -| DetectMSIKeyboardController | -| | -| Detect MSI Mystic Light MS-1565 keyboard | -| | -\*----------------------------------------------------------*/ - -void DetectMSIKeyboardController - ( - hid_device_info* info, - const std::string& /*name*/ - ) +DetectedControllers DetectMSIKeyboardController(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); - if(dev != nullptr) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { MSIKeyboardController* controller = new MSIKeyboardController(dev, info->path); RGBController_MSIKeyboard* rgb_controller = new RGBController_MSIKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("MSI Keyboard MS_1565", DetectMSIKeyboardController, MSI_USB_VID, 0x1601, 0x00FF, 0x01); diff --git a/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp b/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp index 6daefc1d4..d8d73801c 100644 --- a/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp +++ b/Controllers/MSIMysticLightController/MSIMysticLightControllerDetect.cpp @@ -8,6 +8,8 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" +#include "dmiinfo.h" +#include "LogManager.h" #include "MSIMysticLight64Controller.h" #include "MSIMysticLight112Controller.h" #include "MSIMysticLight162Controller.h" @@ -18,8 +20,6 @@ #include "RGBController_MSIMysticLight162.h" #include "RGBController_MSIMysticLight185.h" #include "RGBController_MSIMysticLight761.h" -#include "dmiinfo.h" -#include "LogManager.h" #define MSI_USB_VID 0x1462 #define MSI_USB_VID_COMMON 0x0DB0 @@ -33,20 +33,13 @@ \*---------------------------------------------------------------------------------*/ //#define ENABLE_UNTESTED_MYSTIC_LIGHT -/*----------------------------------------------------------------------------------------*\ -| | -| DetectMSIMysticLightControllers | -| | -| Detect MSI Mystic Light devices | -| | -\*----------------------------------------------------------------------------------------*/ -void DetectMSIMysticLightControllers - ( - hid_device_info* info, - const std::string& /*name*/ - ) +DetectedControllers DetectMSIMysticLightControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev != nullptr) { unsigned char temp_buffer[200]; @@ -62,25 +55,24 @@ void DetectMSIMysticLightControllers MSIMysticLight185Controller* controller = new MSIMysticLight185Controller(dev, info->path, info->product_id, dmi_name); RGBController_MSIMysticLight185* rgb_controller = new RGBController_MSIMysticLight185(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else if((packet_length >= sizeof(FeaturePacket_162)) && (packet_length <= (sizeof(FeaturePacket_162) + 1))) { MSIMysticLight162Controller* controller = new MSIMysticLight162Controller(dev, info->path, info->product_id, dmi_name); RGBController_MSIMysticLight162* rgb_controller = new RGBController_MSIMysticLight162(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else if((packet_length >= sizeof(FeaturePacket_112)) && (packet_length <= (sizeof(FeaturePacket_112) + 1))) { MSIMysticLight112Controller* controller = new MSIMysticLight112Controller(dev, info->path, dmi_name); RGBController_MSIMysticLight112* rgb_controller = new RGBController_MSIMysticLight112(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else // no supported length returned { - unsigned char second_buffer [761]; second_buffer[0] = 0x50; @@ -99,16 +91,16 @@ void DetectMSIMysticLightControllers if(packet_length_new_attempt > 0) { - try { MSIMysticLight761Controller* controller = new MSIMysticLight761Controller(dev, (const char *) info->path, dmi_name); RGBController_MSIMysticLight761* rgb_controller = new RGBController_MSIMysticLight761(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } catch(const std::runtime_error& e) { - if (strcmp(e.what(), BOARD_UNSUPPORTED_ERROR) != 0) + if(strcmp(e.what(), BOARD_UNSUPPORTED_ERROR) != 0) { throw e; } @@ -117,35 +109,34 @@ void DetectMSIMysticLightControllers LOG_INFO("Found Board %s but does not have valid config", dmi_name.c_str()); } } - - } else { LOG_INFO("No matching driver found for %s, packet length = %d", dmi_name.c_str(), packet_length); - return; } } } + + return(detected_controllers); } -void DetectMSIMysticLight64Controllers - ( - hid_device_info* info, - const std::string& /*name*/ - ) +DetectedControllers DetectMSIMysticLight64Controllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev != nullptr) { MSIMysticLight64Controller* controller = new MSIMysticLight64Controller(dev, info->path); RGBController_MSIMysticLight64* rgb_controller = new RGBController_MSIMysticLight64(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} + return(detected_controllers); +} REGISTER_HID_DETECTOR_PU("MSI Mystic Light MS_1562", DetectMSIMysticLight64Controllers, MSI_USB_VID, 0x1562, 0x00FF, 0x01); REGISTER_HID_DETECTOR_PU("MSI Mystic Light MS_1563", DetectMSIMysticLight64Controllers, MSI_USB_VID, 0x1563, 0x00FF, 0x01); @@ -265,7 +256,6 @@ REGISTER_HID_DETECTOR_PU("MSI Mystic Light X870", DetectMSIMysticLightContro | DUMMY_DEVICE_DETECTOR("MSI Mystic Light MS_7E49", DetectMSIMysticLightControllers, 0x1462, 0x7E49 ) | \*---------------------------------------------------------------------------------------------------------*/ - #ifdef ENABLE_UNTESTED_MYSTIC_LIGHT REGISTER_HID_DETECTOR_PU("MSI Mystic Light MS_3EA4", DetectMSIMysticLightControllers, MSI_USB_VID, 0x3EA4, 0x0001, 0x00); REGISTER_HID_DETECTOR_PU("MSI Mystic Light MS_4459", DetectMSIMysticLightControllers, MSI_USB_VID, 0x4459, 0x0001, 0x00); diff --git a/Controllers/MSIOptixController/MSIOptixControllerDetect.cpp b/Controllers/MSIOptixController/MSIOptixControllerDetect.cpp index dd93d384f..4ec1300fb 100644 --- a/Controllers/MSIOptixController/MSIOptixControllerDetect.cpp +++ b/Controllers/MSIOptixController/MSIOptixControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define MSI_OPTIX_MAG274QRF_PID 0x3FA4 -void DetectMSIOptixControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectMSIOptixControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { MSIOptixController* controller = new MSIOptixController(dev, *info, name); RGBController_MSIOptix* rgb_controller = new RGBController_MSIOptix(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("MSI Optix controller", DetectMSIOptixControllers, MSI_VID, MSI_OPTIX_MAG274QRF_PID, 0, 0xFF00, 1); diff --git a/Controllers/MSIRGBController/MSIRGBControllerDetect.cpp b/Controllers/MSIRGBController/MSIRGBControllerDetect.cpp index 755ba1774..b432ab41e 100644 --- a/Controllers/MSIRGBController/MSIRGBControllerDetect.cpp +++ b/Controllers/MSIRGBController/MSIRGBControllerDetect.cpp @@ -15,14 +15,6 @@ #include "super_io.h" #include "dmiinfo.h" -/******************************************************************************************\ -* * -* DetectMSIRGBControllers * -* * -* Detect MSI-RGB compatible Super-IO chips. * -* * -\******************************************************************************************/ - #define NUM_COMPATIBLE_DEVICES (sizeof(compatible_devices) / sizeof(compatible_devices[0])) typedef struct @@ -85,45 +77,45 @@ static msi_device compatible_devices[] = {"7D95", false} }; -void DetectMSIRGBControllers() +DetectedControllers DetectMSIRGBControllers() { - int sio_addrs[2] = {0x2E, 0x4E}; + DetectedControllers detected_controllers; + int sio_addrs[2] = {0x2E, 0x4E}; + DMIInfo board; + std::string board_dmi = board.getMainboard(); + std::string manufacturer = board.getManufacturer(); - DMIInfo board; - std::string board_dmi = board.getMainboard(); - std::string manufacturer = board.getManufacturer(); - - if (manufacturer != "Micro-Star International Co., Ltd." && manufacturer != "Micro-Star International Co., Ltd" && manufacturer != "MSI") + if(manufacturer == "Micro-Star International Co., Ltd." || manufacturer == "Micro-Star International Co., Ltd" || manufacturer == "MSI") { - return; - } - - for(int sioaddr_idx = 0; sioaddr_idx < 2; sioaddr_idx++) - { - int sioaddr = sio_addrs[sioaddr_idx]; - - superio_enter(sioaddr); - - int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1); - - switch (val & SIO_ID_MASK) + for(int sioaddr_idx = 0; sioaddr_idx < 2; sioaddr_idx++) { - case SIO_NCT6795_ID: - case SIO_NCT6797_ID: - for(unsigned int i = 0; i < NUM_COMPATIBLE_DEVICES; i++) - { - if (board_dmi.find(std::string(compatible_devices[i].name)) != std::string::npos) - { - MSIRGBController* controller = new MSIRGBController(sioaddr, compatible_devices[i].invert, "MSI " + board_dmi); - RGBController_MSIRGB* rgb_controller = new RGBController_MSIRGB(controller); + int sioaddr = sio_addrs[sioaddr_idx]; - DetectionManager::get()->RegisterRGBController(rgb_controller); - break; + superio_enter(sioaddr); + + int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1); + + switch(val & SIO_ID_MASK) + { + case SIO_NCT6795_ID: + case SIO_NCT6797_ID: + for(unsigned int i = 0; i < NUM_COMPATIBLE_DEVICES; i++) + { + if(board_dmi.find(std::string(compatible_devices[i].name)) != std::string::npos) + { + MSIRGBController* controller = new MSIRGBController(sioaddr, compatible_devices[i].invert, "MSI " + board_dmi); + RGBController_MSIRGB* rgb_controller = new RGBController_MSIRGB(controller); + + detected_controllers.push_back(rgb_controller); + break; + } } + break; } - break; } } -} /* DetectMSIRGBControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("MSI-RGB", DetectMSIRGBControllers); diff --git a/Controllers/MSIVigorController/MSIVigorControllerDetect.cpp b/Controllers/MSIVigorController/MSIVigorControllerDetect.cpp index 5584af065..3a8542242 100644 --- a/Controllers/MSIVigorController/MSIVigorControllerDetect.cpp +++ b/Controllers/MSIVigorController/MSIVigorControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define MSI_VIGOR_GK30_PID 0x0B30 -void DetectMSIVigorGK30Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectMSIVigorGK30Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { MSIVigorGK30Controller* controller = new MSIVigorGK30Controller(dev, *info, name); RGBController_MSIVigorGK30* rgb_controller = new RGBController_MSIVigorGK30(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("MSI Vigor GK30 controller", DetectMSIVigorGK30Controllers, MSI_VID, MSI_VIGOR_GK30_PID, 1, 0xFF01, 1); diff --git a/Controllers/MadCatzCyborgController/MadCatzCyborgControllerDetect.cpp b/Controllers/MadCatzCyborgController/MadCatzCyborgControllerDetect.cpp index 4ed04d116..4e8fac260 100644 --- a/Controllers/MadCatzCyborgController/MadCatzCyborgControllerDetect.cpp +++ b/Controllers/MadCatzCyborgController/MadCatzCyborgControllerDetect.cpp @@ -7,38 +7,35 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ +#include #include "DetectionManager.h" #include "MadCatzCyborgController.h" #include "RGBController_MadCatzCyborg.h" -#include -/*-----------------------------------------------------*\ -| MadCatz Cyborg VID/PID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| MadCatz Cyborg VID/PID | +\*---------------------------------------------------------*/ #define MADCATZ_VID 0x06A3 #define MADCATZ_CYBORG_PID 0x0DC5 -/******************************************************************************************\ -* * -* DetectMadCatzCyborgControllers * -* * -* Tests the USB address to find MadCatz Cyborg Gaming Light devices * -* * -\******************************************************************************************/ - -void DetectMadCatzCyborgControllers(hid_device_info* info, const std::string& /*name*/) +DetectedControllers DetectMadCatzCyborgControllers(hid_device_info* info, const std::string& /*name*/) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - MadCatzCyborgController* controller = new MadCatzCyborgController(dev, info->path); + MadCatzCyborgController* controller = new MadCatzCyborgController(dev, info->path); controller->Initialize(); RGBController_MadCatzCyborg* rgb_controller = new RGBController_MadCatzCyborg(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("MadCatz Cyborg Gaming Light", DetectMadCatzCyborgControllers, MADCATZ_VID, MADCATZ_CYBORG_PID); diff --git a/Controllers/MintakaKeyboardController/MintakaKeyboardControllerDetect.cpp b/Controllers/MintakaKeyboardController/MintakaKeyboardControllerDetect.cpp index f4eb38453..0efe220a4 100644 --- a/Controllers/MintakaKeyboardController/MintakaKeyboardControllerDetect.cpp +++ b/Controllers/MintakaKeyboardController/MintakaKeyboardControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define VSG_MINTAKA_PID 0x0256 -void DetectMintakaKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectMintakaKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { MintakaKeyboardController* controller = new MintakaKeyboardController(dev, *info, name); RGBController_MintakaKeyboard* rgb_controller = new RGBController_MintakaKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("VSG Mintaka", DetectMintakaKeyboardControllers, MINTAKA_KEYBOARD_VID, VSG_MINTAKA_PID, 0, 0x0001, 0x06); diff --git a/Controllers/MountainKeyboardController/MountainKeyboardControllerDetect.cpp b/Controllers/MountainKeyboardController/MountainKeyboardControllerDetect.cpp index d129430b4..97a823185 100644 --- a/Controllers/MountainKeyboardController/MountainKeyboardControllerDetect.cpp +++ b/Controllers/MountainKeyboardController/MountainKeyboardControllerDetect.cpp @@ -11,57 +11,59 @@ #include #include "DetectionManager.h" -#include "MountainKeyboardController.h" -#include "RGBController_MountainKeyboard.h" #include "Mountain60KeyboardController.h" +#include "MountainKeyboardController.h" #include "RGBController_Mountain60Keyboard.h" +#include "RGBController_MountainKeyboard.h" -/*---------------------------------------------------------------*\ -| Mountain vendor ID | -\*---------------------------------------------------------------*/ -#define MOUNTAIN_VID 0x3282 +/*---------------------------------------------------------*\ +| Mountain vendor ID | +\*---------------------------------------------------------*/ +#define MOUNTAIN_VID 0x3282 -/*----------------------------------------------------------------*\ -| Everest 60 keyboard Connection IDs | -\*----------------------------------------------------------------*/ -#define MOUNTAIN60_EVEREST_60_PID_ANSII 0x0005 -#define MOUNTAIN60_EVEREST_60_PID_ISO 0x0006 -#define MOUNTAIN60_EVEREST_60_INTERFACE 2 -#define MOUNTAIN60_EVEREST_60_U 0x01 -#define MOUNTAIN60_EVEREST_60_UP 0xFFFF +/*---------------------------------------------------------*\ +| Everest 60 keyboard Connection IDs | +\*---------------------------------------------------------*/ +#define MOUNTAIN60_EVEREST_60_PID_ANSII 0x0005 +#define MOUNTAIN60_EVEREST_60_PID_ISO 0x0006 +#define MOUNTAIN60_EVEREST_60_INTERFACE 2 +#define MOUNTAIN60_EVEREST_60_U 0x01 +#define MOUNTAIN60_EVEREST_60_UP 0xFFFF -/*----------------------------------------------------------------------------------------*\ -| | -| DetectMountainKeyboardControllers | -| | -| Tests the USB address to see if a Mountain RGB Keyboard controller exists there. | -| | -\*----------------------------------------------------------------------------------------*/ - -void DetectMountain60KeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectMountain60KeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { Mountain60KeyboardController* controller = new Mountain60KeyboardController(dev, info->path, name); RGBController_Mountain60Keyboard* rgb_controller = new RGBController_Mountain60Keyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectMountainKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectMountainKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { MountainKeyboardController* controller = new MountainKeyboardController(dev, info->path, name); RGBController_MountainKeyboard* rgb_controller = new RGBController_MountainKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Mountain Everest", DetectMountainKeyboardControllers, MOUNTAIN_VID, MOUNTAIN_EVEREST_PID, 3, 0xFF00, 0x01); diff --git a/Controllers/N5312AController/N5312AControllerDetect.cpp b/Controllers/N5312AController/N5312AControllerDetect.cpp index 6a84fb7d4..547d39bcc 100644 --- a/Controllers/N5312AController/N5312AControllerDetect.cpp +++ b/Controllers/N5312AController/N5312AControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define N5312A_PID 0x5406 -void DetectN5312AControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectN5312AControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { N5312AController* controller = new N5312AController(dev, *info, name); RGBController_N5312A* rgb_controller = new RGBController_N5312A(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("N5312A USB Optical Mouse", DetectN5312AControllers, N5312A_VID, N5312A_PID, 1, 0xFF01, 0x01); diff --git a/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp b/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp index 5a0540b89..fa916b55b 100644 --- a/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp +++ b/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp @@ -80,8 +80,9 @@ static const nv_gpu_pci_device device_list[] = {NVIDIA_VEN, NVIDIA_RTX5090_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX5090_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 5090 FE" }, }; -void DetectNVIDIAIllumGPUs() +DetectedControllers DetectNVIDIAIllumGPUs() { + DetectedControllers detected_controllers; static NV_PHYSICAL_GPU_HANDLE gpu_handles[64]; static NV_S32 gpu_count = 0; NV_U32 device_id; @@ -119,7 +120,7 @@ void DetectNVIDIAIllumGPUs() NVIDIAIlluminationV1Controller* controller = new NVIDIAIlluminationV1Controller(new_nvapi, device_list[dev_idx].treats_rgbw_as_rgb, device_list[dev_idx].name); RGBController_NVIDIAIlluminationV1* rgb_controller = new RGBController_NVIDIAIlluminationV1(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } break; } @@ -127,6 +128,8 @@ void DetectNVIDIAIllumGPUs() } } } + + return(detected_controllers); } REGISTER_DETECTOR("Nvidia NvAPI Illumination", DetectNVIDIAIllumGPUs); diff --git a/Controllers/NZXTHue1Controller/NZXTHue1ControllerDetect.cpp b/Controllers/NZXTHue1Controller/NZXTHue1ControllerDetect.cpp index de94c4dd2..831a36fbb 100644 --- a/Controllers/NZXTHue1Controller/NZXTHue1ControllerDetect.cpp +++ b/Controllers/NZXTHue1Controller/NZXTHue1ControllerDetect.cpp @@ -14,31 +14,28 @@ #include "NZXTHue1Controller.h" #include "RGBController_NZXTHue1.h" -/*-----------------------------------------------------*\ -| NZXT USB IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| NZXT USB IDs | +\*---------------------------------------------------------*/ #define NZXT_VID 0x1E71 #define NZXT_SMART_DEVICE_V1_PID 0x1714 -/******************************************************************************************\ -* * -* DetectNZXTHue1Controllers * -* * -* Detect devices supported by the NZXTHue1 driver * -* * -\******************************************************************************************/ - -void DetectNZXTHue1Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTHue1Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { NZXTHue1Controller* controller = new NZXTHue1Controller(dev, 3, info->path, name); RGBController_NZXTHue1* rgb_controller = new RGBController_NZXTHue1(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectNZXTHue1Controllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR("NZXT Smart Device V1", DetectNZXTHue1Controllers, NZXT_VID, NZXT_SMART_DEVICE_V1_PID); diff --git a/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp b/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp index f326432e5..4aaa3c7e1 100644 --- a/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp +++ b/Controllers/NZXTHue2Controller/NZXTHue2ControllerDetect.cpp @@ -38,67 +38,73 @@ #define NZXT_SMART_DEVICE_V2_1_PID 0x200D #define NZXT_SMART_DEVICE_V2_2_PID 0x200F -static void spawn_hue(hid_device_info* info, const std::string& name, int rgb_channels, int fan_channels) +static DetectedControllers spawn_hue(hid_device_info* info, const std::string& name, int rgb_channels, int fan_channels) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { NZXTHue2Controller* controller = new NZXTHue2Controller(dev, rgb_channels, fan_channels, info->path, name); RGBController_NZXTHue2* rgb_controller = new RGBController_NZXTHue2(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); + LOG_TRACE("[NZXTHue2Controller] NZXT Controller setup: %s", info->path); } else { LOG_DEBUG("[NZXTHue2Controller] Failed to load device: %s!", info->path); } + + return(detected_controllers); } -void DetectNZXTHue2(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTHue2(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 4, 0); + return(spawn_hue(info, name, 4, 0)); } -void DetectNZXTHue2Ambient(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTHue2Ambient(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 2, 0); + return(spawn_hue(info, name, 2, 0)); } -void DetectNZXTHue2Motherboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTHue2Motherboard(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 2, 3); + return(spawn_hue(info, name, 2, 3)); } -void DetectNZXTSmartDeviceV2(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTSmartDeviceV2(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 2, 3); + return(spawn_hue(info, name, 2, 3)); } -void DetectNZXTKrakenX3(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTKrakenX3(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 3, 0); + return(spawn_hue(info, name, 3, 0)); } -void DetectNZXTKrakenElite(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTKrakenElite(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 2, 2); + return(spawn_hue(info, name, 2, 2)); } -void DetectNZXTFanController(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTFanController(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 2, 3); + return(spawn_hue(info, name, 2, 3)); } -void DetectNZXTFanController6Channel(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTFanController6Channel(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 6, 3); + return(spawn_hue(info, name, 6, 3)); } -void DetectNZXTRGBController(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTRGBController(hid_device_info* info, const std::string& name) { - spawn_hue(info, name, 3, 0); + return(spawn_hue(info, name, 3, 0)); } REGISTER_HID_DETECTOR("NZXT RGB & Fan Controller", DetectNZXTFanController, NZXT_VID, NZXT_RGB_FAN_CONTROLLER_PID); diff --git a/Controllers/NZXTHuePlusController/NZXTHuePlusControllerDetect.cpp b/Controllers/NZXTHuePlusController/NZXTHuePlusControllerDetect.cpp index b12643f89..b6ca3febb 100644 --- a/Controllers/NZXTHuePlusController/NZXTHuePlusControllerDetect.cpp +++ b/Controllers/NZXTHuePlusController/NZXTHuePlusControllerDetect.cpp @@ -11,26 +11,24 @@ #include #include "DetectionManager.h" +#include "find_usb_serial_port.h" #include "NZXTHuePlusController.h" #include "RGBController_NZXTHuePlus.h" -#include "find_usb_serial_port.h" +/*---------------------------------------------------------*\ +| NZXT USB IDs | +\*---------------------------------------------------------*/ #define NZXT_HUE_PLUS_VID 0x04D8 #define NZXT_HUE_PLUS_PID 0x00DF -/******************************************************************************************\ -* * -* DetectNZXTHuePlusControllers * -* * -* Detect devices supported by the NZXTHuePlus driver * -* * -\******************************************************************************************/ - -void DetectNZXTHuePlusControllers() +DetectedControllers DetectNZXTHuePlusControllers() { - std::vector ports = find_usb_serial_port(NZXT_HUE_PLUS_VID, NZXT_HUE_PLUS_PID); + DetectedControllers detected_controllers; + std::vector ports; - for(unsigned int i = 0; i < ports.size(); i++) + ports = find_usb_serial_port(NZXT_HUE_PLUS_VID, NZXT_HUE_PLUS_PID); + + for(std::size_t i = 0; i < ports.size(); i++) { if(*ports[i] != "") { @@ -38,10 +36,12 @@ void DetectNZXTHuePlusControllers() controller->Initialize((char *)ports[i]->c_str()); RGBController_HuePlus* rgb_controller = new RGBController_HuePlus(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectHuePlusControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("NZXT Hue+", DetectNZXTHuePlusControllers); /*---------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp b/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp index 95c881901..5b388169c 100644 --- a/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp +++ b/Controllers/NZXTKrakenController/NZXTKrakenControllerDetect.cpp @@ -18,26 +18,23 @@ #define NZXT_KRAKEN_X2_PID 0x170E #define NZXT_KRAKEN_M2_PID 0x1715 -/******************************************************************************************\ -* * -* DetectNZXTKrakenControllers * -* * -* Detect devices supported by the NZXTKraken driver * -* * -\******************************************************************************************/ - -void DetectNZXTKrakenControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTKrakenControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { NZXTKrakenController* controller = new NZXTKrakenController(dev, info->path, name); RGBController_NZXTKraken* rgb_controller = new RGBController_NZXTKraken(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectNZXTKrakenControllers() */ + + return(detected_controllers); +} 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/NZXTMouseController/NZXTMouseControllerDetect.cpp b/Controllers/NZXTMouseController/NZXTMouseControllerDetect.cpp index eb74c3055..5f2d25a68 100644 --- a/Controllers/NZXTMouseController/NZXTMouseControllerDetect.cpp +++ b/Controllers/NZXTMouseController/NZXTMouseControllerDetect.cpp @@ -14,31 +14,28 @@ #include "NZXTMouseController.h" #include "RGBController_NZXTMouse.h" -/*-----------------------------------------------------*\ -| NZXT USB IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| NZXT USB IDs | +\*---------------------------------------------------------*/ #define NZXT_VID 0x1E71 #define NZXT_LIFT_PID 0x2100 -/******************************************************************************************\ -* * -* DetectNZXTMouseControllers * -* * -* Detect devices supported by the NZXTMouse driver * -* * -\******************************************************************************************/ - -static void DetectNZXTMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectNZXTMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { NZXTMouseController* controller = new NZXTMouseController(dev, info->path, name); RGBController_NZXTMouse* rgb_controller = new RGBController_NZXTMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("NZXT Lift", DetectNZXTMouseControllers, NZXT_VID, NZXT_LIFT_PID, 0, 0xFFCA, 1); diff --git a/Controllers/NanoleafController/NanoleafControllerDetect.cpp b/Controllers/NanoleafController/NanoleafControllerDetect.cpp index 2a55f5468..a692b9a83 100644 --- a/Controllers/NanoleafController/NanoleafControllerDetect.cpp +++ b/Controllers/NanoleafController/NanoleafControllerDetect.cpp @@ -15,17 +15,12 @@ #include "RGBController_Nanoleaf.h" #include "SettingsManager.h" -/*----------------------------------------------------------------------------------------*\ -| | -| DetectNanoleafControllers | -| | -| Connect to paired Nanoleaf devices | -| | -\*----------------------------------------------------------------------------------------*/ - -void DetectNanoleafControllers() +DetectedControllers DetectNanoleafControllers() { - json nanoleaf_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("NanoleafDevices"); + DetectedControllers detected_controllers; + json nanoleaf_settings; + + nanoleaf_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("NanoleafDevices"); if(nanoleaf_settings.contains("devices")) { @@ -38,7 +33,8 @@ void DetectNanoleafControllers() try { RGBController_Nanoleaf* rgb_controller = new RGBController_Nanoleaf(device["ip"], device["port"], device["auth_token"]); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } catch(...) { @@ -47,6 +43,8 @@ void DetectNanoleafControllers() } } } -} /* DetectNanoleafControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("Nanoleaf", DetectNanoleafControllers); diff --git a/Controllers/NollieController/NollieControllerDetect.cpp b/Controllers/NollieController/NollieControllerDetect.cpp index 199110a87..35ec4d7ed 100644 --- a/Controllers/NollieController/NollieControllerDetect.cpp +++ b/Controllers/NollieController/NollieControllerDetect.cpp @@ -14,9 +14,12 @@ #include "NollieController.h" #include "RGBController_Nollie.h" -void DetectNollieControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectNollieControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -28,8 +31,7 @@ void DetectNollieControllers(hid_device_info* info, const std::string& name) NollieController* controller = new NollieController(dev, info->path, info->vendor_id, info->product_id, name); RGBController_Nollie* rgb_controller = new RGBController_Nollie(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - + detected_controllers.push_back(rgb_controller); } } diff --git a/Controllers/NvidiaESAController/NvidiaESAControllerDetect.cpp b/Controllers/NvidiaESAController/NvidiaESAControllerDetect.cpp index 383306c44..2b1c24412 100644 --- a/Controllers/NvidiaESAController/NvidiaESAControllerDetect.cpp +++ b/Controllers/NvidiaESAController/NvidiaESAControllerDetect.cpp @@ -23,17 +23,22 @@ \*---------------------------------------------------------*/ #define NVIDIA_ESA_DELL_XPS_730X_PID 0x000A -void DetectNvidiaESAControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectNvidiaESAControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { NvidiaESAController* controller = new NvidiaESAController(dev, *info, name); RGBController_NvidiaESA* rgb_controller = new RGBController_NvidiaESA(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Nvidia ESA - Dell XPS 730x", DetectNvidiaESAControllers, NVIDIA_ESA_VID, NVIDIA_ESA_DELL_XPS_730X_PID, 0xFFDE, 0x02); diff --git a/Controllers/OKSController/OKSKeyboardControllerDetect.cpp b/Controllers/OKSController/OKSKeyboardControllerDetect.cpp index d60cbc3d3..4b0e4603a 100644 --- a/Controllers/OKSController/OKSKeyboardControllerDetect.cpp +++ b/Controllers/OKSController/OKSKeyboardControllerDetect.cpp @@ -14,24 +14,22 @@ #include "OKSKeyboardController.h" #include "RGBController_OKSKeyboard.h" -/******************************************************************************************\ -* DetectOKSKeyboardControllers * -* Reference: DuckyKeyboardController * -* Tests the USB address to see if a OKS Optical Axis RGB Keyboard controller exists there.* -* Reference:DetectDuckyKeyboardControllers * -\******************************************************************************************/ - -void DetectOKSKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectOKSKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { OKSKeyboardController* controller = new OKSKeyboardController(dev, info->path, info->product_id, name); RGBController_OKSKeyboard* rgb_controller = new RGBController_OKSKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectOKSKeyboardControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_I("OKS Optical Axis RGB", DetectOKSKeyboardControllers, OKS_VID, OKS_OPTICAL_RGB_PID, 1); diff --git a/Controllers/PNYARGBEpicXGPUController/PNYARGBEpicXGPUControllerDetect.cpp b/Controllers/PNYARGBEpicXGPUController/PNYARGBEpicXGPUControllerDetect.cpp index a6a60e066..fb7f3e401 100644 --- a/Controllers/PNYARGBEpicXGPUController/PNYARGBEpicXGPUControllerDetect.cpp +++ b/Controllers/PNYARGBEpicXGPUController/PNYARGBEpicXGPUControllerDetect.cpp @@ -12,27 +12,25 @@ #include "DetectionManager.h" #include "LogManager.h" -#include "PNYARGBEpicXGPUController.h" -#include "RGBController_PNYARGBEpicXGPU.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "PNYARGBEpicXGPUController.h" +#include "RGBController_PNYARGBEpicXGPU.h" -/*-----------------------------------------------------------------------------------------*\ -| DetectPNYARGBEpicXGPUControllers | -| | -| Detect PNY ARGB Epic X GPU controllers on the enumerated I2C busses at address 0x60. | -| | -| bus - pointer to i2c_smbus_interface where PNY GPU device is connected | -| dev - I2C address of PNY GPU device | -\*-----------------------------------------------------------------------------------------*/ - -void DetectPNYARGBEpicXGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPNYARGBEpicXGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - PNYARGBEpicXGPUController* controller = new PNYARGBEpicXGPUController(bus, i2c_addr, name); - RGBController_PNYARGBEpicXGPU* rgb_controller = new RGBController_PNYARGBEpicXGPU(controller); + DetectedControllers detected_controllers; - DetectionManager::get()->RegisterRGBController(rgb_controller); -} /* DetectPNYARGBEpicXGPUControllers() */ + if(bus->port_id == 1) + { + PNYARGBEpicXGPUController* controller = new PNYARGBEpicXGPUController(bus, i2c_addr, name); + RGBController_PNYARGBEpicXGPU* rgb_controller = new RGBController_PNYARGBEpicXGPU(controller); + + detected_controllers.push_back(rgb_controller); + } + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 5070Ti ARGB Epic-X OC", DetectPNYARGBEpicXGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, PNY_SUB_VEN, PNY_RTX_5070TI_ARGB_EPIC_X_OC_SUB_DEV, 0x60); //REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 5080 ARGB Epic-X OC", DetectPNYARGBEpicXGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, PNY_SUB_VEN, PNY_RTX_5080_ARGB_EPIC_X_OC_SUB_DEV, 0x60); diff --git a/Controllers/PNYGPUController/PNYGPUControllerDetect.cpp b/Controllers/PNYGPUController/PNYGPUControllerDetect.cpp index 813f00226..4bcd64794 100644 --- a/Controllers/PNYGPUController/PNYGPUControllerDetect.cpp +++ b/Controllers/PNYGPUController/PNYGPUControllerDetect.cpp @@ -10,34 +10,25 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "PNYGPUController.h" -#include "RGBController_PNYGPU.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "PNYGPUController.h" +#include "RGBController_PNYGPU.h" -/******************************************************************************************\ - * * - * DetectPNYGPUControllers * - * * - * Detect PNY GPU controllers on the enumerated I2C busses at address 0x49. * - * * - * bus - pointer to i2c_smbus_interface where PNY GPU device is connected * - * dev - I2C address of PNY GPU device * - * * -\******************************************************************************************/ - -void DetectPNYGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPNYGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(bus->port_id != 1) + DetectedControllers detected_controllers; + + if(bus->port_id == 1) { - return; + PNYGPUController* controller = new PNYGPUController(bus, i2c_addr, name); + RGBController_PNYGPU* rgb_controller = new RGBController_PNYGPU(controller); + + detected_controllers.push_back(rgb_controller); } - PNYGPUController* controller = new PNYGPUController(bus, i2c_addr, name); - RGBController_PNYGPU* rgb_controller = new RGBController_PNYGPU(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); -} /* DetectPNYGPUControllers() */ + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 2060 XLR8 OC EDITION", DetectPNYGPUControllers, NVIDIA_VEN, NVIDIA_RTX2060_TU104_DEV, PNY_SUB_VEN, PNY_RTX_2060_XLR8_OC_SUB_DEV, 0x49); REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 3060 XLR8 Revel EPIC-X", DetectPNYGPUControllers, NVIDIA_VEN, NVIDIA_RTX3060_DEV, PNY_SUB_VEN, PNY_RTX_3060_XLR8_REVEL_EPIC_X_SUB_DEV, 0x49); diff --git a/Controllers/PNYLovelaceGPUController/PNYLovelaceGPUControllerDetect.cpp b/Controllers/PNYLovelaceGPUController/PNYLovelaceGPUControllerDetect.cpp index 91961c579..caf640161 100644 --- a/Controllers/PNYLovelaceGPUController/PNYLovelaceGPUControllerDetect.cpp +++ b/Controllers/PNYLovelaceGPUController/PNYLovelaceGPUControllerDetect.cpp @@ -10,32 +10,25 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "PNYLovelaceGPUController.h" -#include "RGBController_PNYLovelaceGPU.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "PNYLovelaceGPUController.h" +#include "RGBController_PNYLovelaceGPU.h" -/*-----------------------------------------------------------------------------------------*\ -| DetectPNYLovelaceGPUControllers | -| | -| Detect PNY 40xx GPU controllers on the enumerated I2C busses at address 0x60. | -| | -| bus - pointer to i2c_smbus_interface where PNY GPU device is connected | -| dev - I2C address of PNY GPU device | -\*-----------------------------------------------------------------------------------------*/ - -void DetectPNYLovelaceGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPNYLovelaceGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(bus->port_id != 1) + DetectedControllers detected_controllers; + + if(bus->port_id == 1) { - return; + PNYLovelaceGPUController* controller = new PNYLovelaceGPUController(bus, i2c_addr, name); + RGBController_PNYLovelaceGPU* rgb_controller = new RGBController_PNYLovelaceGPU(controller); + + detected_controllers.push_back(rgb_controller); } - PNYLovelaceGPUController* controller = new PNYLovelaceGPUController(bus, i2c_addr, name); - RGBController_PNYLovelaceGPU* rgb_controller = new RGBController_PNYLovelaceGPU(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); -} /* DetectPNYLovelaceGPUControllers() */ + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 4070 Ti XLR8 VERTO Epic-X", DetectPNYLovelaceGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, PNY_SUB_VEN, PNY_RTX_4070TI_XLR8_VERTO_EPIC_X_SUB_DEV, 0x60); REGISTER_I2C_PCI_DETECTOR("PNY GeForce RTX 4070 Ti XLR8 VERTO REV1", DetectPNYLovelaceGPUControllers, NVIDIA_VEN, NVIDIA_RTX4070TI_DEV, PNY_SUB_VEN, PNY_RTX_4070TI_XLR8_VERTO_REV1_SUB_DEV, 0x60); diff --git a/Controllers/PalitGPUController/PalitGPUControllerDetect.cpp b/Controllers/PalitGPUController/PalitGPUControllerDetect.cpp index 189127bec..943d3b76d 100644 --- a/Controllers/PalitGPUController/PalitGPUControllerDetect.cpp +++ b/Controllers/PalitGPUController/PalitGPUControllerDetect.cpp @@ -12,50 +12,44 @@ #include #include #include "DetectionManager.h" -#include "PalitGPUController.h" -#include "RGBController_PalitGPU.h" #include "i2c_smbus.h" +#include "PalitGPUController.h" #include "pci_ids.h" +#include "RGBController_PalitGPU.h" -/******************************************************************************************\ - * * - * DetectPalitGPUControllers * - * * - * Detect Palit GPU controllers on the enumerated I2C busses at address 0x49. * - * * - * bus - pointer to i2c_smbus_interface where Palit GPU device is connected * - * dev - I2C address of Palit GPU device * - * * * - * Ligolas Neo Malicdem - Added 1060, 1070, 1070ti support * -\******************************************************************************************/ - -void DetectPalitGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPalitGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(bus->port_id != 1) + DetectedControllers detected_controllers; + + if(bus->port_id == 1) { - return; - } + /*-----------------------------------------------------*\ + | Check for PALIT string | + \*-----------------------------------------------------*/ + const uint8_t palit[] = {'P', 'A', 'L', 'I', 'T'}; + bool match = true; - /*-----------------------------------------------------*\ - | Check for PALIT string | - \*-----------------------------------------------------*/ - const uint8_t palit[] = {'P', 'A', 'L', 'I', 'T'}; - - for(size_t i = 0; i < sizeof(palit); i++) - { - int32_t letter = bus->i2c_smbus_read_byte_data(i2c_addr, 0x07 + (u8)i); - - if(palit[i] != letter) + for(size_t i = 0; i < sizeof(palit); i++) { - return; + int32_t letter = bus->i2c_smbus_read_byte_data(i2c_addr, 0x07 + (u8)i); + + if(palit[i] != letter) + { + match = false; + } + } + + if(match) + { + PalitGPUController* controller = new PalitGPUController(bus, i2c_addr, name); + RGBController_PalitGPU* rgb_controller = new RGBController_PalitGPU(controller); + + DetectionManager::get()->RegisterRGBController(rgb_controller); } } - PalitGPUController* controller = new PalitGPUController(bus, i2c_addr, name); - RGBController_PalitGPU* rgb_controller = new RGBController_PalitGPU(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); -} /* DetectPalitGPUControllers() */ + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("Palit GeForce GTX 1060", DetectPalitGPUControllers, NVIDIA_VEN, NVIDIA_GTX1060_DEV, NVIDIA_SUB_VEN, NVIDIA_GTX1060_DEV, 0x08); REGISTER_I2C_PCI_DETECTOR("Palit GeForce GTX 1070", DetectPalitGPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, NVIDIA_SUB_VEN, NVIDIA_GTX1070_DEV, 0x08); diff --git a/Controllers/PatriotViperController/PatriotViperControllerDetect.cpp b/Controllers/PatriotViperController/PatriotViperControllerDetect.cpp index 2748187f7..c7df26d47 100644 --- a/Controllers/PatriotViperController/PatriotViperControllerDetect.cpp +++ b/Controllers/PatriotViperController/PatriotViperControllerDetect.cpp @@ -18,15 +18,8 @@ #include "pci_ids.h" using namespace std::chrono_literals; -#define PATRIOT_CONTROLLER_NAME "Patriot Viper" -/******************************************************************************************\ -* * -* TestForPatriotViperController * -* * -* Tests the given address to see if a Patriot Viper controller exists there. * -* * -\******************************************************************************************/ +#define PATRIOT_CONTROLLER_NAME "Patriot Viper" bool TestForPatriotViperController(i2c_smbus_interface* bus, unsigned char address) { @@ -42,26 +35,16 @@ bool TestForPatriotViperController(i2c_smbus_interface* bus, unsigned char addre } return(pass); +} -} /* TestForPatriotViperController() */ - - -/******************************************************************************************\ -* * -* DetectPatriotViperControllers * -* * -* Detect Patriot Viper RGB controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectPatriotViperControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) +DetectedControllers DetectPatriotViperControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) { - unsigned char slots_valid = 0x00; + DetectedControllers detected_controllers; + unsigned char slots_valid = 0x00; - // Check for Patriot Viper controller at 0x77 + /*-----------------------------------------------------*\ + | Check for Patriot Viper controller at 0x77 | + \*-----------------------------------------------------*/ LOG_DEBUG("[%s] Testing bus %d at address 0x77", PATRIOT_CONTROLLER_NAME, bus->port_id); if(TestForPatriotViperController(bus, 0x77)) @@ -69,13 +52,13 @@ void DetectPatriotViperControllers(i2c_smbus_interface* bus, std::vectormanufacturer_data(0x00) == 0x4D) - &&(slot->manufacturer_data(0x01) == 0x49) - &&(slot->manufacturer_data(0x02) == 0x43) - &&(slot->manufacturer_data(0x03) == 0x53) - &&(slot->manufacturer_data(0x04) == 0x59) - &&(slot->manufacturer_data(0x05) == 0x53) - &&(slot->manufacturer_data(0x06) == 0x5f) - &&(slot->manufacturer_data(0x07) == 0x44)) + &&(slot->manufacturer_data(0x01) == 0x49) + &&(slot->manufacturer_data(0x02) == 0x43) + &&(slot->manufacturer_data(0x03) == 0x53) + &&(slot->manufacturer_data(0x04) == 0x59) + &&(slot->manufacturer_data(0x05) == 0x53) + &&(slot->manufacturer_data(0x06) == 0x5f) + &&(slot->manufacturer_data(0x07) == 0x44)) { LOG_DEBUG("[%s] The RAM module detected in slot %d", PATRIOT_CONTROLLER_NAME, slot->index()); slots_valid |= (1 << (slot->index())); @@ -86,11 +69,13 @@ void DetectPatriotViperControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } -} /* DetectPatriotViperControllers() */ + return(detected_controllers); +} REGISTER_I2C_DRAM_DETECTOR(PATRIOT_CONTROLLER_NAME, DetectPatriotViperControllers, JEDEC_PATRIOT, SPD_DDR4_SDRAM); diff --git a/Controllers/PatriotViperMouseController/PatriotViperMouseControllerDetect.cpp b/Controllers/PatriotViperMouseController/PatriotViperMouseControllerDetect.cpp index ba5af63c2..a6edfa93d 100644 --- a/Controllers/PatriotViperMouseController/PatriotViperMouseControllerDetect.cpp +++ b/Controllers/PatriotViperMouseController/PatriotViperMouseControllerDetect.cpp @@ -13,26 +13,28 @@ #include "PatriotViperMouseController.h" #include "RGBController_PatriotViperMouse.h" - -/*-----------------------------------------------------*\ -| Patriot Viper Mouse IDs | -\*-----------------------------------------------------*/ - +/*---------------------------------------------------------*\ +| Patriot Viper Mouse IDs | +\*---------------------------------------------------------*/ #define PATRIOT_VID 0x0C45 #define VIPER_V550_PID 0x7E18 - -void DetectPatriotViperMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectPatriotViperMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { PatriotViperMouseController* controller = new PatriotViperMouseController(dev, info->path, name); RGBController_PatriotViperMouse* rgb_controller = new RGBController_PatriotViperMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Patriot Viper V550", DetectPatriotViperMouseControllers, PATRIOT_VID, VIPER_V550_PID, 2, 0xFF18, 0x01); diff --git a/Controllers/PatriotViperSteelController/PatriotViperSteelControllerDetect.cpp b/Controllers/PatriotViperSteelController/PatriotViperSteelControllerDetect.cpp index 2acde3447..714280818 100644 --- a/Controllers/PatriotViperSteelController/PatriotViperSteelControllerDetect.cpp +++ b/Controllers/PatriotViperSteelController/PatriotViperSteelControllerDetect.cpp @@ -16,15 +16,8 @@ #include "pci_ids.h" using namespace std::chrono_literals; -#define PATRIOT_CONTROLLER_NAME "Patriot Viper Steel" -/******************************************************************************************\ -* * -* TestForPatriotViperSteelController * -* * -* Tests the given address to see if a Patriot Viper Steel controller exists there. * -* * -\******************************************************************************************/ +#define PATRIOT_CONTROLLER_NAME "Patriot Viper Steel" bool TestForPatriotViperSteelController(i2c_smbus_interface* bus, unsigned char address) { @@ -40,26 +33,16 @@ bool TestForPatriotViperSteelController(i2c_smbus_interface* bus, unsigned char } return(pass); +} -} /* TestForPatriotViperSteelController() */ - - -/******************************************************************************************\ -* * -* DetectPatriotViperSteelControllers * -* * -* Detect Patriot Viper Steel RGB controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectPatriotViperSteelControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) +DetectedControllers DetectPatriotViperSteelControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) { - unsigned char slots_valid = 0x00; + DetectedControllers detected_controllers; + unsigned char slots_valid = 0x00; - // Check for Patriot Viper controller at 0x77 + /*-----------------------------------------------------*\ + | Check for Patriot Viper controller at 0x77 | + \*-----------------------------------------------------*/ LOG_DEBUG("[%s] Testing bus %d at address 0x77", PATRIOT_CONTROLLER_NAME, bus->port_id); if(TestForPatriotViperSteelController(bus, 0x77)) @@ -84,11 +67,13 @@ void DetectPatriotViperSteelControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } -} /* DetectPatriotViperSteelControllers() */ + return(detected_controllers); +} REGISTER_I2C_DRAM_DETECTOR(PATRIOT_CONTROLLER_NAME, DetectPatriotViperSteelControllers, 0xFF7E, SPD_DDR4_SDRAM); diff --git a/Controllers/PhilipsHueController/PhilipsHueControllerDetect.cpp b/Controllers/PhilipsHueController/PhilipsHueControllerDetect.cpp index dd067cbc6..334929253 100644 --- a/Controllers/PhilipsHueController/PhilipsHueControllerDetect.cpp +++ b/Controllers/PhilipsHueController/PhilipsHueControllerDetect.cpp @@ -22,42 +22,35 @@ #include "LogManager.h" #include "PhilipsHueController.h" #include "PhilipsHueEntertainmentController.h" +#include "PhilipsHueSettingsHandler.h" #include "ResourceManager.h" #include "RGBController_PhilipsHue.h" #include "RGBController_PhilipsHueEntertainment.h" -#include "PhilipsHueSettingsHandler.h" -/******************************************************************************************\ -* * -* DetectPhilipsHueControllers * -* * -* Detect Philips Hue lighting devices with RGB control * -* * -\******************************************************************************************/ - -void DetectPhilipsHueControllers() +DetectedControllers DetectPhilipsHueControllers() { - PhilipsHueSettingsHandler hue_settings; + DetectedControllers detected_controllers; + PhilipsHueSettingsHandler hue_settings; - /*-------------------------------------------------*\ - | Create an HTTP handler | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Create an HTTP handler | + \*-----------------------------------------------------*/ #ifdef _WIN32 using SystemHttpHandler = hueplusplus::WinHttpHandler; #else using SystemHttpHandler = hueplusplus::LinHttpHandler; #endif - /*-------------------------------------------------*\ - | Create a finder and find bridges | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Create a finder and find bridges | + \*-----------------------------------------------------*/ static hueplusplus::BridgeFinder finder(std::make_shared()); std::vector bridges;// = finder.findBridges(); - /*-------------------------------------------------*\ - | If no bridges were detected, manually add bridge | - | IP and MAC (need to get these from file) | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If no bridges were detected, manually add bridge IP | + | and MAC (need to get these from file) | + \*-----------------------------------------------------*/ if(hue_settings.GetBridgeCount() > 0) { hueplusplus::BridgeFinder::BridgeIdentification ident; @@ -68,32 +61,27 @@ void DetectPhilipsHueControllers() bridges.push_back(ident); } - /*-------------------------------------------------*\ - | If no bridges were found, return, otherwise | - | connect to the first bridge | - \*-------------------------------------------------*/ - if(bridges.empty()) - { - return; - } - else + /*-----------------------------------------------------*\ + | If bridges were found, connect to the first bridge | + \*-----------------------------------------------------*/ + if(!bridges.empty()) { /*-------------------------------------------------*\ | Check if a saved username exists | \*-------------------------------------------------*/ if(hue_settings.GetBridgeCount() > 0) { - /*-------------------------------------------------*\ - | Add the username if it exists | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Add the username if it exists | + \*---------------------------------------------*/ if(hue_settings.BridgeHasUsername(0)) { finder.addUsername(bridges[0].mac, hue_settings.GetBridgeUsername(0)); } - /*-------------------------------------------------*\ - | Add the client key if it exists | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Add the client key if it exists | + \*---------------------------------------------*/ if(hue_settings.BridgeHasClientKey(0)) { finder.addClientKey(bridges[0].mac, hue_settings.GetBridgeClientKey(0)); @@ -111,11 +99,12 @@ void DetectPhilipsHueControllers() bridge.refresh(); - /*-------------------------------------------------*\ - | Check to see if we need to save the settings | - | Settings need to be saved if either username or | - | client key either do not exist or have changed | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Check to see if we need to save the settings | + | Settings need to be saved if either username | + | or client key either do not exist or have | + | changed | + \*---------------------------------------------*/ bool save_settings = false; bool use_entertainment = false; bool auto_connect = false; @@ -148,9 +137,9 @@ void DetectPhilipsHueControllers() } } - /*-------------------------------------------------*\ - | Save the settings if needed | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Save the settings if needed | + \*---------------------------------------------*/ if(save_settings) { hue_settings.SetBridgeUsername(0, bridge.getUsername()); @@ -160,25 +149,26 @@ void DetectPhilipsHueControllers() hue_settings.SaveSettings(); } - /*-------------------------------------------------*\ - | Get entertainment mode settings | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Get entertainment mode settings | + \*---------------------------------------------*/ use_entertainment = hue_settings.GetBridgeUseEntertainment(0); auto_connect = hue_settings.GetBridgeAutoconnect(0); - /*-------------------------------------------------*\ - | Get all groups from the bridge | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Get all groups from the bridge | + \*---------------------------------------------*/ if(use_entertainment) { std::vector groups = bridge.groups().getAll(); if(groups.size() > 0) { - /*-------------------------------------------------*\ - | Loop through all available groups and check to | - | see if any are Entertainment groups | - \*-------------------------------------------------*/ + /*-------------------------------------*\ + | Loop through all available groups and | + | check to see if any are Entertainment | + | groups | + \*-------------------------------------*/ for(unsigned int group_idx = 0; group_idx < groups.size(); group_idx++) { if(groups[group_idx].getType() == "Entertainment") @@ -186,42 +176,45 @@ void DetectPhilipsHueControllers() PhilipsHueEntertainmentController* controller = new PhilipsHueEntertainmentController(bridge, groups[group_idx]); RGBController_PhilipsHueEntertainment* rgb_controller = new RGBController_PhilipsHueEntertainment(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } - /*-------------------------------------------------*\ - | Loop through RGB Controllers to find the first | - | Entertainment group and Set it to "Connect", | - | as only one Stream can be open at a time. | - \*-------------------------------------------------*/ - if(auto_connect) - { - for(unsigned int controller_idx = 0; controller_idx < ResourceManager::get()->GetRGBControllers().size(); controller_idx++) - { - if(ResourceManager::get()->GetRGBControllers()[controller_idx]->GetDescription() == "Philips Hue Entertainment Mode Device") - { - ResourceManager::get()->GetRGBControllers()[controller_idx]->SetActiveMode(0); - break; - } - } - } + /*-------------------------------------*\ + | Loop through RGB Controllers to find | + | the first Entertainment group and Set | + | it to "Connect", as only one Stream | + | can be open at a time. | + | TODO: investigate this and rework | + \*-------------------------------------*/ + //f(auto_connect) + // + // for(unsigned int controller_idx = 0; controller_idx < ResourceManager::get()->GetRGBControllers().size(); controller_idx++) + // { + // if(ResourceManager::get()->GetRGBControllers()[controller_idx]->GetDescription() == "Philips Hue Entertainment Mode Device") + // { + // ResourceManager::get()->GetRGBControllers()[controller_idx]->SetActiveMode(0); + // break; + // } + // } + // } } - /*-------------------------------------------------*\ - | Get all lights from the bridge | - \*-------------------------------------------------*/ + /*---------------------------------------------*\ + | Get all lights from the bridge | + \*---------------------------------------------*/ else { std::vector lights = bridge.lights().getAll(); if(lights.size() > 0) { - /*-------------------------------------------------*\ - | Loop through all available lights and add those | - | that have color (RGB) control capability | - \*-------------------------------------------------*/ + /*-------------------------------------*\ + | Loop through all available lights and | + | add those that have color (RGB) | + | control capability | + \*-------------------------------------*/ for(unsigned int light_idx = 0; light_idx < lights.size(); light_idx++) { if(lights[light_idx].hasColorControl()) @@ -229,7 +222,7 @@ void DetectPhilipsHueControllers() PhilipsHueController* controller = new PhilipsHueController(lights[light_idx], bridge.getBridgeIP()); RGBController_PhilipsHue* rgb_controller = new RGBController_PhilipsHue(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } @@ -240,6 +233,8 @@ void DetectPhilipsHueControllers() LOG_INFO("Exception occurred in Philips Hue detection: %s", e.what()); } } -} /* DetectPhilipsHueControllers() */ + + return(detected_controllers); +} REGISTER_DETECTOR("Philips Hue", DetectPhilipsHueControllers); diff --git a/Controllers/PhilipsWizController/PhilipsWizControllerDetect.cpp b/Controllers/PhilipsWizController/PhilipsWizControllerDetect.cpp index 97a7b40c7..6cf94e8f3 100644 --- a/Controllers/PhilipsWizController/PhilipsWizControllerDetect.cpp +++ b/Controllers/PhilipsWizController/PhilipsWizControllerDetect.cpp @@ -15,26 +15,19 @@ #include "RGBController_PhilipsWiz.h" #include "SettingsManager.h" -/******************************************************************************************\ -* * -* DetectPhilipsWizControllers * -* * -* Detect Philips Wiz devices * -* * -\******************************************************************************************/ - -void DetectPhilipsWizControllers() +DetectedControllers DetectPhilipsWizControllers() { - json wiz_settings; + DetectedControllers detected_controllers; + json wiz_settings; - /*-------------------------------------------------*\ - | Get Philips Wiz settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Philips Wiz settings from settings manager | + \*-----------------------------------------------------*/ wiz_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("PhilipsWizDevices"); - /*-------------------------------------------------*\ - | If the Wiz settings contains devices, process | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Wiz settings contains devices, process | + \*-----------------------------------------------------*/ if(wiz_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < wiz_settings["devices"].size(); device_idx++) @@ -64,11 +57,12 @@ void DetectPhilipsWizControllers() PhilipsWizController* controller = new PhilipsWizController(wiz_ip, wiz_cool, wiz_warm, wiz_white_strategy); RGBController_PhilipsWiz* rgb_controller = new RGBController_PhilipsWiz(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectPhilipsWizControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Philips Wiz", DetectPhilipsWizControllers); diff --git a/Controllers/PowerColorGPUController/PowerColorGPUControllerDetect.cpp b/Controllers/PowerColorGPUController/PowerColorGPUControllerDetect.cpp index 820074338..84aa74b9d 100644 --- a/Controllers/PowerColorGPUController/PowerColorGPUControllerDetect.cpp +++ b/Controllers/PowerColorGPUController/PowerColorGPUControllerDetect.cpp @@ -26,41 +26,45 @@ static const unsigned char magic_v2[3] = {0x01, 0x32, 0x00}; | for good measure anyways. | \*---------------------------------------------------------*/ -void DetectPowerColorRedDevilGPUControllersV1(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPowerColorRedDevilGPUControllersV1(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(!is_amd_gpu_i2c_bus(bus)) + DetectedControllers detected_controllers; + + if(is_amd_gpu_i2c_bus(bus)) { - return; + unsigned char data[3]; + int ret = bus->i2c_smbus_read_i2c_block_data(i2c_addr, RED_DEVIL_V1_REG_MAGIC, 3, data); + if(ret == 3 && memcmp(data, magic_v1, 3) == 0) + { + PowerColorRedDevilV1Controller* controller = new PowerColorRedDevilV1Controller(bus, i2c_addr, name); + RGBController_PowerColorRedDevilV1* rgb_controller = new RGBController_PowerColorRedDevilV1(controller); + + detected_controllers.push_back(rgb_controller); + } } - unsigned char data[3]; - int ret = bus->i2c_smbus_read_i2c_block_data(i2c_addr, RED_DEVIL_V1_REG_MAGIC, 3, data); - if(ret == 3 && memcmp(data, magic_v1, 3) == 0) - { - PowerColorRedDevilV1Controller* controller = new PowerColorRedDevilV1Controller(bus, i2c_addr, name); - RGBController_PowerColorRedDevilV1* rgb_controller = new RGBController_PowerColorRedDevilV1(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); - } + return(detected_controllers); } -void DetectPowerColorRedDevilGPUControllersV2(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectPowerColorRedDevilGPUControllersV2(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { - if(!is_amd_gpu_i2c_bus(bus)) + DetectedControllers detected_controllers; + + if(is_amd_gpu_i2c_bus(bus)) { - return; + unsigned char data[3]; + int ret = bus->i2c_smbus_read_i2c_block_data(i2c_addr, RED_DEVIL_V2_READ_REG_MAGIC, 3, data); + if(ret == 3 && memcmp(data, magic_v2, 3) == 0) + { + PowerColorRedDevilV2Controller* controller = new PowerColorRedDevilV2Controller(bus, i2c_addr, name); + RGBController_PowerColorRedDevilV2* rgb_controller = new RGBController_PowerColorRedDevilV2(controller); + + detected_controllers.push_back(rgb_controller); + } } - unsigned char data[3]; - int ret = bus->i2c_smbus_read_i2c_block_data(i2c_addr, RED_DEVIL_V2_READ_REG_MAGIC, 3, data); - if(ret == 3 && memcmp(data, magic_v2, 3) == 0) - { - PowerColorRedDevilV2Controller* controller = new PowerColorRedDevilV2Controller(bus, i2c_addr, name); - RGBController_PowerColorRedDevilV2* rgb_controller = new RGBController_PowerColorRedDevilV2(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); - } + return(detected_controllers); } REGISTER_I2C_PCI_DETECTOR("PowerColor Red Devil RX5700", DetectPowerColorRedDevilGPUControllersV1, AMD_GPU_VEN, AMD_NAVI10_DEV, POWERCOLOR_SUB_VEN, POWERCOLOR_RED_DEVIL_RX5700_SUB_DEV, 0x22); diff --git a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBControllerDetect.cpp b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBControllerDetect.cpp index f22e99d94..4525f913c 100644 --- a/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBControllerDetect.cpp +++ b/Controllers/QMKController/QMKOpenRGBController/QMKOpenRGBControllerDetect.cpp @@ -24,18 +24,18 @@ #include "RGBController_QMKOpenRGBRevE.h" #include "SettingsManager.h" -/*-----------------------------------------------------*\ -| Protocol version | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Protocol version | +\*---------------------------------------------------------*/ #define QMK_OPENRGB_PROTOCOL_VERSION_9 0x09 #define QMK_OPENRGB_PROTOCOL_VERSION_B 0x0B #define QMK_OPENRGB_PROTOCOL_VERSION_C 0x0C #define QMK_OPENRGB_PROTOCOL_VERSION_D 0x0D #define QMK_OPENRGB_PROTOCOL_VERSION_E 0x0E -/*-----------------------------------------------------*\ -| Usage and Usage Page | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Usage and Usage Page | +\*---------------------------------------------------------*/ #define QMK_USAGE_PAGE 0xFF60 #define QMK_USAGE 0x61 @@ -64,17 +64,20 @@ unsigned int GetProtocolVersion(hid_device *dev) return usb_buf[1]; } -void DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&) +DetectedControllers DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&) { - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - /*-----------------------------------------------------*\ - | Use Rev9 controller for getting protocol version. | - | Protocol version request may not change across | - | protocol versions | - \*-----------------------------------------------------*/ + /*-------------------------------------------------*\ + | Use Rev9 controller for getting protocol version. | + | Protocol version request may not change across | + | protocol versions | + \*-------------------------------------------------*/ unsigned int version = GetProtocolVersion(dev); switch(version) @@ -83,35 +86,40 @@ void DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&) { QMKOpenRGBRev9Controller* controller = new QMKOpenRGBRev9Controller(dev, info->path); RGBController_QMKOpenRGBRev9* rgb_controller = new RGBController_QMKOpenRGBRev9(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } break; case QMK_OPENRGB_PROTOCOL_VERSION_B: { QMKOpenRGBRevBController* controller = new QMKOpenRGBRevBController(dev, info->path); RGBController_QMKOpenRGBRevB* rgb_controller = new RGBController_QMKOpenRGBRevB(controller, false); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } break; case QMK_OPENRGB_PROTOCOL_VERSION_C: { QMKOpenRGBRevBController* controller = new QMKOpenRGBRevBController(dev, info->path); RGBController_QMKOpenRGBRevB* rgb_controller = new RGBController_QMKOpenRGBRevB(controller, true); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } break; case QMK_OPENRGB_PROTOCOL_VERSION_D: { QMKOpenRGBRevDController* controller = new QMKOpenRGBRevDController(dev, info->path); RGBController_QMKOpenRGBRevD* rgb_controller = new RGBController_QMKOpenRGBRevD(controller, true); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } break; case QMK_OPENRGB_PROTOCOL_VERSION_E: { QMKOpenRGBRevDController* controller = new QMKOpenRGBRevDController(dev, info->path); RGBController_QMKOpenRGBRevE* rgb_controller = new RGBController_QMKOpenRGBRevE(controller, true); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } break; default: @@ -132,13 +140,15 @@ void DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&) } } } + + return(detected_controllers); } void RegisterQMKDetectors() { - /*-------------------------------------------------*\ - | Get QMKOpenRGB settings | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get QMKOpenRGB settings | + \*-----------------------------------------------------*/ json qmk_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("QMKOpenRGBDevices"); if(qmk_settings.contains("devices")) @@ -153,9 +163,9 @@ void RegisterQMKDetectors() std::string usb_vid_str = qmk_settings["devices"][device_idx]["usb_vid"]; std::string name = qmk_settings["devices"][device_idx]["name"]; - /*-------------------------------------*\ - | Parse hex string to integer | - \*-------------------------------------*/ + /*-----------------------------------------*\ + | Parse hex string to integer | + \*-----------------------------------------*/ unsigned short usb_pid = std::stoi(usb_pid_str, 0, 16); unsigned short usb_vid = std::stoi(usb_vid_str, 0, 16); diff --git a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp index 7ed2fe8aa..1204ed27d 100644 --- a/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp +++ b/Controllers/QMKController/QMKVialRGBController/QMKVialRGBControllerDetect.cpp @@ -29,9 +29,12 @@ #define QMK_USAGE_PAGE 0xFF60 #define QMK_USAGE 0x61 -void DetectQMKVialRGBControllers(hid_device_info *info, const std::string&) +DetectedControllers DetectQMKVialRGBControllers(hid_device_info *info, const std::string&) { - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -40,13 +43,15 @@ void DetectQMKVialRGBControllers(hid_device_info *info, const std::string&) if(controller->GetSupported()) { RGBController_QMKVialRGB* rgb_controller = new RGBController_QMKVialRGB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { delete controller; } } + + return(detected_controllers); } void RegisterQMKVialRGBDetectors() diff --git a/Controllers/RazerController/RazerControllerDetect.cpp b/Controllers/RazerController/RazerControllerDetect.cpp index bc307fe4b..f9fc07949 100644 --- a/Controllers/RazerController/RazerControllerDetect.cpp +++ b/Controllers/RazerController/RazerControllerDetect.cpp @@ -13,11 +13,11 @@ #include #include "DetectionManager.h" #include "RazerController.h" +#include "RazerDevices.h" #include "RazerKrakenController.h" #include "RazerKrakenV3Controller.h" #include "RazerKrakenV4Controller.h" #include "RazerHanboController.h" -#include "RazerDevices.h" #include "ResourceManager.h" #include "RGBController_Razer.h" #include "RGBController_RazerAddressable.h" @@ -26,199 +26,190 @@ #include "RGBController_RazerKrakenV4.h" #include "RGBController_RazerHanbo.h" -/******************************************************************************************\ -* * -* DetectRazerControllers * -* * -* Tests the USB address to see if a Razer controller exists there. * -* * -\******************************************************************************************/ - -void DetectRazerControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RazerController* controller = new RazerController(dev, dev, info->path, info->product_id, name); - + RazerController* controller = new RazerController(dev, dev, info->path, info->product_id, name); RGBController_Razer* rgb_controller = new RGBController_Razer(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectRazerControllers() */ -/******************************************************************************************\ -* * -* DetectRazerARGBControllers * -* * -* Tests the USB address to see if a Razer ARGB controller exists there. * -* * -\******************************************************************************************/ + return(detected_controllers); +} - -/*---------------------------------------------------------------------*\ -| Tracks the paths used in DetectRazerARGBControllers so multiple Razer | -| devices can be detected without all controlling the same device. | -\*---------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Tracks the paths used in DetectRazerARGBControllers so | +| multiple Razer devices can be detected without all | +| controlling the same device. | +\*---------------------------------------------------------*/ static std::unordered_set used_paths; -/*--------------------------------------------------------------------------------*\ -| Removes all entries in used_paths so device discovery does not skip any of them. | -\*--------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Removes all entries in used_paths so device discovery | +| does not skip any of them. | +\*---------------------------------------------------------*/ void ResetRazerARGBControllersPaths() { used_paths.clear(); } -void DetectRazerARGBControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerARGBControllers(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | Razer's ARGB controller uses two different interfaces, one for 90-byte Razer report packets and | - | one for 320-byte ARGB packets. Interface 0 for 90-byte and interface 1 for 320-byte. | - | | - | Create a local copy of the HID enumerations for the Razer ARGB controller VID/PID and iterate | - | through it. This prevents detection from failing if interface 1 comes before interface 0 in the | - | main info list. | - \*-------------------------------------------------------------------------------------------------*/ - hid_device* dev_interface_0 = nullptr; - hid_device* dev_interface_1 = nullptr; - hid_device_info* info_full = hid_enumerate(RAZER_VID, RAZER_CHROMA_ADDRESSABLE_RGB_CONTROLLER_PID); - hid_device_info* info_temp = info_full; - /*--------------------------------------------------------------------------------------------*\ - | Keep track of paths so they can be added to used_paths only if both interfaces can be found. | - \*--------------------------------------------------------------------------------------------*/ - std::string dev_interface_0_path; - std::string dev_interface_1_path; + DetectedControllers detected_controllers; - while(info_temp) - { - /*----------------------------------------------------------------------------*\ - | Check for paths used on an already registered Razer ARGB controller to avoid | - | registering multiple controllers that refer to the same physical hardware. | - \*----------------------------------------------------------------------------*/ - if(info_temp->vendor_id == info->vendor_id - && info_temp->product_id == info->product_id - && used_paths.find(info_temp->path) == used_paths.end() ) - { - if(info_temp->interface_number == 0) - { - dev_interface_0 = hid_open_path(info_temp->path); - dev_interface_0_path = info_temp->path; - } - else if(info_temp->interface_number == 1) - { - dev_interface_1 = hid_open_path(info_temp->path); - dev_interface_1_path = info_temp->path; - } - } - if(dev_interface_0 && dev_interface_1) - { - break; - } - info_temp = info_temp->next; - } + /*-----------------------------------------------------*\ + | Razer's ARGB controller uses two different interfaces,| + | one for 90-byte Razer report packets and one for | + | 320-byte ARGB packets. Interface 0 for 90-byte and | + | interface 1 for 320-byte. | + | | + | Create a local copy of the HID enumerations for the | + | Razer ARGB controller VID/PID and iterate through it. | + | This prevents detection from failing if interface 1 | + | comes before interface 0 in the main info list. | + \*-----------------------------------------------------*/ + hid_device* dev_interface_0 = nullptr; + hid_device* dev_interface_1 = nullptr; + hid_device_info* info_full = hid_enumerate(RAZER_VID, RAZER_CHROMA_ADDRESSABLE_RGB_CONTROLLER_PID); + hid_device_info* info_temp = info_full; - hid_free_enumeration(info_full); + /*----------------------------------------------------*\ + | Keep track of paths so they can be added to | + | used_paths only if both interfaces can be found. | + \*-----------------------------------------------------*/ + std::string dev_interface_0_path; + std::string dev_interface_1_path; - if(dev_interface_0 && dev_interface_1) - { - RazerController* controller = new RazerController(dev_interface_0, dev_interface_1, info->path, info->product_id, name); - RGBController_RazerAddressable* rgb_controller = new RGBController_RazerAddressable(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); - used_paths.insert(dev_interface_0_path); - used_paths.insert(dev_interface_1_path); - } - else - { - // Not all of them could be opened, do some cleanup - hid_close(dev_interface_0); - hid_close(dev_interface_1); - } + while(info_temp) + { + /*-------------------------------------------------*\ + | Check for paths used on an already registered | + | Razer ARGB controller to avoid registering | + | multiple controllers that refer to the same | + | physical hardware. | + \*-------------------------------------------------*/ + if(info_temp->vendor_id == info->vendor_id + && info_temp->product_id == info->product_id + && used_paths.find(info_temp->path) == used_paths.end()) + { + if(info_temp->interface_number == 0) + { + dev_interface_0 = hid_open_path(info_temp->path); + dev_interface_0_path = info_temp->path; + } + else if(info_temp->interface_number == 1) + { + dev_interface_1 = hid_open_path(info_temp->path); + dev_interface_1_path = info_temp->path; + } + } + if(dev_interface_0 && dev_interface_1) + { + break; + } + info_temp = info_temp->next; + } + + hid_free_enumeration(info_full); + + if(dev_interface_0 && dev_interface_1) + { + RazerController* controller = new RazerController(dev_interface_0, dev_interface_1, info->path, info->product_id, name); + RGBController_RazerAddressable* rgb_controller = new RGBController_RazerAddressable(controller); + + detected_controllers.push_back(rgb_controller); + + used_paths.insert(dev_interface_0_path); + used_paths.insert(dev_interface_1_path); + } + else + { + // Not all of them could be opened, do some cleanup + hid_close(dev_interface_0); + hid_close(dev_interface_1); + } + + return(detected_controllers); } -/******************************************************************************************\ -* * -* DetectRazerKrakenController * -* * -* Tests the USB address to see if a Razer Kraken controller exists there. * -* * -\******************************************************************************************/ - -void DetectRazerKrakenControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerKrakenControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RazerKrakenController* controller = new RazerKrakenController(dev, info->path, info->product_id, name); - + RazerKrakenController* controller = new RazerKrakenController(dev, info->path, info->product_id, name); RGBController_RazerKraken* rgb_controller = new RGBController_RazerKraken(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectRazerKrakenControllers() */ -/******************************************************************************************\ -* * -* DetectRazerKrakenV3Controllers * -* * -* Tests the USB address to see if a Razer Kraken V3 controller exists there. * -* * -\******************************************************************************************/ + return(detected_controllers); +} -void DetectRazerKrakenV3Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerKrakenV3Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RazerKrakenV3Controller* controller = new RazerKrakenV3Controller(dev, info->path, info->product_id, name); - + RazerKrakenV3Controller* controller = new RazerKrakenV3Controller(dev, info->path, info->product_id, name); RGBController_RazerKrakenV3* rgb_controller = new RGBController_RazerKrakenV3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectRazerKrakenV3Controllers() */ -/******************************************************************************************\ -* * -* DetectRazerKrakenV4Controllers * -* * -* Tests the USB address to see if a Razer Kraken V4 controller exists there. * -* * -\******************************************************************************************/ + return(detected_controllers); +} -void DetectRazerKrakenV4Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerKrakenV4Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RazerKrakenV4Controller* controller = new RazerKrakenV4Controller(dev, info->path, info->product_id, name); - + RazerKrakenV4Controller* controller = new RazerKrakenV4Controller(dev, info->path, info->product_id, name); RGBController_RazerKrakenV4* rgb_controller = new RGBController_RazerKrakenV4(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectRazerKrakenV4Controllers() */ -/******************************************************************************************\ -* * -* DetectRazerHanboController * -* * -* Tests the USB address to see if a Razer Hanbo controller exists there. * -* * -\******************************************************************************************/ + return(detected_controllers); +} -void DetectRazerHanboControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRazerHanboControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RazerHanboController* controller = new RazerHanboController(dev, info->path, info->product_id, name); - + RazerHanboController* controller = new RazerHanboController(dev, info->path, info->product_id, name); RGBController_RazerHanbo* rgb_controller = new RGBController_RazerHanbo(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectRazerHanboControllers() */ + + return(detected_controllers); +} /*-----------------------------------------------------------------------------------------------------*\ | Keyboards | diff --git a/Controllers/RedSquareKeyroxController/RedSquareKeyroxControllerDetect.cpp b/Controllers/RedSquareKeyroxController/RedSquareKeyroxControllerDetect.cpp index c9b46469b..b4788117b 100644 --- a/Controllers/RedSquareKeyroxController/RedSquareKeyroxControllerDetect.cpp +++ b/Controllers/RedSquareKeyroxController/RedSquareKeyroxControllerDetect.cpp @@ -16,42 +16,53 @@ #include "RGBController_RedSquareKeyrox.h" #include "RGBController_RedSquareKeyroxTKLClassic.h" -/*-----------------------------------------------------*\ -| Red Square vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Red Square vendor ID | +\*---------------------------------------------------------*/ #define RED_SQUARE_VID 0x1A2C #define RED_SQUARE_KEYROX_TKL_CLASSIC_VID 0x0416 -/*-----------------------------------------------------*\ -| Red Square product ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Red Square product ID | +\*---------------------------------------------------------*/ #define RED_SQUARE_KEYROX_TKL_PID 0x1511 #define RED_SQUARE_KEYROX_TKL_V2_PID 0x2511 #define RED_SQUARE_KEYROX_TKL_CLASSIC_PID 0xC345 -void DetectRedSquareKeyroxTKL(hid_device_info* info, const std::string& name) +DetectedControllers DetectRedSquareKeyroxTKL(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RedSquareKeyroxController* controller = new RedSquareKeyroxController(dev, *info, KEYROX_VARIANT_TKL, name); RGBController_RedSquareKeyrox* rgb_controller = new RGBController_RedSquareKeyrox(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRedSquareKeyroxTKLClassic(hid_device_info* info, const std::string& name) + +DetectedControllers DetectRedSquareKeyroxTKLClassic(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RedSquareKeyroxTKLClassicController* controller = new RedSquareKeyroxTKLClassicController(dev, *info, name); RGBController_RedSquareKeyroxTKLClassic* rgb_controller = new RGBController_RedSquareKeyroxTKLClassic(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Red Square Keyrox TKL", DetectRedSquareKeyroxTKL, RED_SQUARE_VID, RED_SQUARE_KEYROX_TKL_PID, 3, 0xFF00, 2); diff --git a/Controllers/RedragonController/RedragonControllerDetect.cpp b/Controllers/RedragonController/RedragonControllerDetect.cpp index ed46f8301..10e7436d1 100644 --- a/Controllers/RedragonController/RedragonControllerDetect.cpp +++ b/Controllers/RedragonController/RedragonControllerDetect.cpp @@ -14,9 +14,9 @@ #include "RedragonMouseController.h" #include "RGBController_RedragonMouse.h" -/*-----------------------------------------------------*\ -| Mouse product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mouse product IDs | +\*---------------------------------------------------------*/ #define REDRAGON_MOUSE_VID 0x04D9 #define REDRAGON_MOUSE_USAGE_PAGE 0xFFA0 #define REDRAGON_M711_PID 0xFC30 @@ -29,30 +29,27 @@ #define REDRAGON_M810_PID 0xFA7E #define REDRAGON_M987_PID 0xFC69 -/******************************************************************************************\ -* * -* DetectRedragonMice * -* * -* Tests the USB address to see if a Redragon Mouse controller exists there. * -* * -\******************************************************************************************/ - -void DetectRedragonMice(hid_device_info* info, const std::string& name) +DetectedControllers DetectRedragonMice(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RedragonMouseController* controller = new RedragonMouseController(dev, info->path, name); RGBController_RedragonMouse* rgb_controller = new RGBController_RedragonMouse(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -/*---------------------------------------------------------------------------------------------------------------------------------------------*\ -| Mice | -\*---------------------------------------------------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| 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); REGISTER_HID_DETECTOR_IP("Redragon M716 Inquisitor", DetectRedragonMice, REDRAGON_MOUSE_VID, REDRAGON_M716_PID, 2, REDRAGON_MOUSE_USAGE_PAGE); diff --git a/Controllers/RobobloqLightStripController/RobobloqLightStripControllerDetect.cpp b/Controllers/RobobloqLightStripController/RobobloqLightStripControllerDetect.cpp index 9e37e677e..d220f9b60 100644 --- a/Controllers/RobobloqLightStripController/RobobloqLightStripControllerDetect.cpp +++ b/Controllers/RobobloqLightStripController/RobobloqLightStripControllerDetect.cpp @@ -8,32 +8,27 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "RobobloqLightStripController.h" #include "RGBController_RobobloqLightStrip.h" +#include "RobobloqLightStripController.h" #define ROBOBLOQ_USB_VID 0x1A86 -/*----------------------------------------------------------*\ -| | -| DetectRobobloqLightStripController | -| | -| Detect Robobloq RGB Light Strips | -| | -\*----------------------------------------------------------*/ - -void DetectRobobloqLightStripController - ( - hid_device_info* info, - const std::string& name - ) +DetectedControllers DetectRobobloqLightStripController(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - if(dev != nullptr) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { RobobloqLightStripController* controller = new RobobloqLightStripController(dev, info->path, name); RGBController_RobobloqLightStrip* rgb_controller = new RGBController_RobobloqLightStrip(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Robobloq Monitor Light Strip", DetectRobobloqLightStripController, ROBOBLOQ_USB_VID, 0xFE07, 0xFF00, 0x01); diff --git a/Controllers/RoccatController/RoccatControllerDetect.cpp b/Controllers/RoccatController/RoccatControllerDetect.cpp index aaeffd44e..bf897635c 100644 --- a/Controllers/RoccatController/RoccatControllerDetect.cpp +++ b/Controllers/RoccatController/RoccatControllerDetect.cpp @@ -66,17 +66,22 @@ \*-----------------------------------------------------------------*/ #define ROCCAT_ELO_PID 0x3A34 -void DetectRoccatMouseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatMouseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatKoneAimoController * controller = new RoccatKoneAimoController(dev, info->path, name); RGBController_RoccatKoneAimo * rgb_controller = new RGBController_RoccatKoneAimo(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*---------------------------------------------------------------------------------*\ @@ -93,8 +98,10 @@ void ResetRoccatVulcanKeyboardControllersPaths() used_paths.clear(); } -void DetectRoccatVulcanKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatVulcanKeyboardControllers(hid_device_info* info, const std::string& name) { + DetectedControllers detected_controllers; + /*-------------------------------------------------------------------------------------------------*\ | Create a local copy of the HID enumerations for the Roccat Vulcan Keyboard VID/PID and iterate | | through it. This prevents detection from failing if interface 1 comes before interface 0 in the | @@ -178,7 +185,7 @@ void DetectRoccatVulcanKeyboardControllers(hid_device_info* info, const std::str RoccatVulcanKeyboardController * controller = new RoccatVulcanKeyboardController(dev_ctrl, dev_led, info->path, info->product_id, name); RGBController_RoccatVulcanKeyboard * rgb_controller = new RGBController_RoccatVulcanKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); used_paths.insert(dev_ctrl_path); used_paths.insert(dev_led_path); @@ -189,136 +196,188 @@ void DetectRoccatVulcanKeyboardControllers(hid_device_info* info, const std::str hid_close(dev_ctrl); hid_close(dev_led); } + + return(detected_controllers); } -void DetectRoccatHordeAimoKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatHordeAimoKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatHordeAimoController * controller = new RoccatHordeAimoController(dev, *info, name); RGBController_RoccatHordeAimo * rgb_controller = new RGBController_RoccatHordeAimo(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatBurstCoreControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatBurstCoreControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatBurstController * controller = new RoccatBurstController(dev, *info, name); RGBController_RoccatBurst * rgb_controller = new RGBController_RoccatBurst(controller, ROCCAT_BURST_CORE_NUMBER_OF_LEDS); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatBurstProControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatBurstProControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatBurstController * controller = new RoccatBurstController(dev, *info, name); RGBController_RoccatBurst * rgb_controller = new RGBController_RoccatBurst(controller, ROCCAT_BURST_PRO_NUMBER_OF_LEDS); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatBurstProAirControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatBurstProAirControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - RoccatBurstProAirController * controller = new RoccatBurstProAirController(dev, *info, name); + RoccatBurstProAirController * controller = new RoccatBurstProAirController(dev, *info, name); RGBController_RoccatBurstProAir * rgb_controller = new RGBController_RoccatBurstProAir(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatKoneProControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatKoneProControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatKoneProController * controller = new RoccatKoneProController(dev, *info, name); RGBController_RoccatKonePro * rgb_controller = new RGBController_RoccatKonePro(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatKoneProAirControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatKoneProAirControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatKoneProAirController * controller = new RoccatKoneProAirController(dev, *info, name); RGBController_RoccatKoneProAir * rgb_controller = new RGBController_RoccatKoneProAir(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatKoneXPControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatKoneXPControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatKoneXPController * controller = new RoccatKoneXPController(dev, info->path, name); RGBController_RoccatKoneXP * rgb_controller = new RGBController_RoccatKoneXP(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatKovaControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatKovaControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatKovaController * controller = new RoccatKovaController(dev, info->path, name); RGBController_RoccatKova * rgb_controller = new RGBController_RoccatKova(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatEloControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatEloControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatEloController * controller = new RoccatEloController(dev, *info, name); RGBController_RoccatElo * rgb_controller = new RGBController_RoccatElo(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectRoccatSenseAimoControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectRoccatSenseAimoControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { RoccatSenseAimoController * controller = new RoccatSenseAimoController(dev, info->path, name); RGBController_RoccatSenseAimo * rgb_controller = new RGBController_RoccatSenseAimo(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_PRE_DETECTION_HOOK(ResetRoccatVulcanKeyboardControllersPaths); diff --git a/Controllers/SRGBmodsController/SRGBmodsControllerDetect.cpp b/Controllers/SRGBmodsController/SRGBmodsControllerDetect.cpp index 6a9032ae4..fd0244540 100644 --- a/Controllers/SRGBmodsController/SRGBmodsControllerDetect.cpp +++ b/Controllers/SRGBmodsController/SRGBmodsControllerDetect.cpp @@ -11,27 +11,22 @@ #include #include "DetectionManager.h" -#include "SRGBmodsLEDControllerV1.h" -#include "SRGBmodsPicoController.h" #include "RGBController_SRGBmodsLEDControllerV1.h" #include "RGBController_SRGBmodsPico.h" +#include "SRGBmodsLEDControllerV1.h" +#include "SRGBmodsPicoController.h" #define SRGBMODS_VID 0x16D0 #define SRGBMODS_PICO_PID 0x1123 #define SRGBMODS_LED_CONTROLLER_V1_PID 0x1205 -/******************************************************************************************\ -* * -* DetectSRGBmodsControllers * -* * -* Detect devices supported by the SRGBmods driver * -* * -\******************************************************************************************/ - -void DetectSRGBmodsControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectSRGBmodsControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -40,26 +35,28 @@ void DetectSRGBmodsControllers(hid_device_info* info, const std::string& name) std::wstring product_str(product); - /*-------------------------------------------------------------------------*\ - | Test the product string in case this USB ID is reused for other Pi Pico | - | projects | - \*-------------------------------------------------------------------------*/ + /*-------------------------------------------------*\ + | Test the product string in case this USB ID is | + | reused for other Pi Pico projects | + \*-------------------------------------------------*/ if(product_str == L"SRGBmods Pico LED Controller" || product_str == L"Pico LED Controller") { SRGBmodsPicoController* controller = new SRGBmodsPicoController(dev, info->path, name); RGBController_SRGBmodsPico* rgb_controller = new RGBController_SRGBmodsPico(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else if(product_str == L"LED Controller v1") { SRGBmodsLEDControllerV1* controller = new SRGBmodsLEDControllerV1(dev, info->path, name); RGBController_SRGBmodsLEDControllerV1* rgb_controller = new RGBController_SRGBmodsLEDControllerV1(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectSRGBmodsControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR("SRGBmods Pico LED Controller", DetectSRGBmodsControllers, SRGBMODS_VID, SRGBMODS_PICO_PID ); REGISTER_HID_DETECTOR("SRGBMods LED Controller v1", DetectSRGBmodsControllers, SRGBMODS_VID, SRGBMODS_LED_CONTROLLER_V1_PID); diff --git a/Controllers/SapphireGPUController/SapphireGPUControllerDetect.cpp b/Controllers/SapphireGPUController/SapphireGPUControllerDetect.cpp index b629ba5cb..8a9a80568 100644 --- a/Controllers/SapphireGPUController/SapphireGPUControllerDetect.cpp +++ b/Controllers/SapphireGPUController/SapphireGPUControllerDetect.cpp @@ -8,32 +8,23 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "SapphireNitroGlowV1Controller.h" -#include "SapphireNitroGlowV3Controller.h" -#include "RGBController_SapphireNitroGlowV1.h" -#include "RGBController_SapphireNitroGlowV3.h" #include "i2c_amd_gpu.h" #include "i2c_smbus.h" #include "pci_ids.h" +#include "RGBController_SapphireNitroGlowV1.h" +#include "RGBController_SapphireNitroGlowV3.h" +#include "SapphireNitroGlowV1Controller.h" +#include "SapphireNitroGlowV3Controller.h" -/*-----------------------------------------------------*\ -| I2C Addresses for Sapphire Nitro Glow RGB | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| I2C Addresses for Sapphire Nitro Glow RGB | +\*---------------------------------------------------------*/ enum { SAPPHIRE_NITRO_GLOW_V1_ADDR = 0x55, SAPPHIRE_NITRO_GLOW_V3_ADDR = 0x28, }; -/******************************************************************************************\ -* * -* TestForSapphireGPUController * -* * -* Tests the given address to see if an Sapphire controller exists there. First * -* does a byte read to test for a response * -* * -\******************************************************************************************/ - bool TestForSapphireGPUController(i2c_smbus_interface* bus, unsigned char address) { if(bus->pci_vendor == AMD_GPU_VEN && !is_amd_gpu_i2c_bus(bus)) @@ -43,37 +34,37 @@ bool TestForSapphireGPUController(i2c_smbus_interface* bus, unsigned char addres //Read a byte to test for presence return bus->i2c_smbus_read_byte(address) >= 0; -} /* TestForSapphireGPUController() */ +} -/******************************************************************************************\ -* * -* DetectSapphireGPUControllers * -* * -* Detect Sapphire GPU controllers on the enumerated I2C buses. * -* * -\******************************************************************************************/ - -void DetectSapphireV1Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +DetectedControllers DetectSapphireV1Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForSapphireGPUController(bus, i2c_addr)) { - SapphireNitroGlowV1Controller* new_sapphire_gpu = new SapphireNitroGlowV1Controller(bus, i2c_addr, name); - RGBController_SapphireNitroGlowV1* new_controller = new RGBController_SapphireNitroGlowV1(new_sapphire_gpu); + SapphireNitroGlowV1Controller* controller = new SapphireNitroGlowV1Controller(bus, i2c_addr, name); + RGBController_SapphireNitroGlowV1* rgb_controller = new RGBController_SapphireNitroGlowV1(controller); - DetectionManager::get()->RegisterRGBController(new_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectSapphireV1Controllers() */ -void DetectSapphireV3Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) + return(detected_controllers); +} + +DetectedControllers DetectSapphireV3Controllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForSapphireGPUController(bus, i2c_addr)) { - SapphireNitroGlowV3Controller* new_sapphire_gpu = new SapphireNitroGlowV3Controller(bus, i2c_addr, name); - RGBController_SapphireNitroGlowV3* new_controller = new RGBController_SapphireNitroGlowV3(new_sapphire_gpu); + SapphireNitroGlowV3Controller* controller = new SapphireNitroGlowV3Controller(bus, i2c_addr, name); + RGBController_SapphireNitroGlowV3* rgb_controller = new RGBController_SapphireNitroGlowV3(controller); - DetectionManager::get()->RegisterRGBController(new_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectSapphireV3Controllers() */ + + return(detected_controllers); +} REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 470/480 Nitro+", DetectSapphireV1Controllers, AMD_GPU_VEN, AMD_POLARIS_DEV, SAPPHIRE_LEGACY_SUB_VEN, SAPPHIRE_LEGACY_POLARIS_NITRO_PLUS_SUB_DEV, SAPPHIRE_NITRO_GLOW_V1_ADDR); REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 570/580/590 Nitro+", DetectSapphireV1Controllers, AMD_GPU_VEN, AMD_POLARIS_DEV, SAPPHIRE_SUB_VEN, SAPPHIRE_POLARIS_NITRO_PLUS_SUB_DEV1, SAPPHIRE_NITRO_GLOW_V1_ADDR); diff --git a/Controllers/SeagateController/SeagateControllerDetect.cpp b/Controllers/SeagateController/SeagateControllerDetect.cpp index e770d5389..e8b83e8f7 100644 --- a/Controllers/SeagateController/SeagateControllerDetect.cpp +++ b/Controllers/SeagateController/SeagateControllerDetect.cpp @@ -10,21 +10,16 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "SeagateController.h" #include "RGBController_Seagate.h" +#include "SeagateController.h" #include "scsiapi.h" -/******************************************************************************************\ -* * -* DetectSeagateControllers * -* * -* Detects Seagate FireCuda HDD devices * -* * -\******************************************************************************************/ - -void DetectSeagateControllers() +DetectedControllers DetectSeagateControllers() { - scsi_device_info * info = scsi_enumerate(NULL, NULL); + DetectedControllers detected_controllers; + scsi_device_info * info; + + info = scsi_enumerate(NULL, NULL); while(info) { @@ -37,7 +32,7 @@ void DetectSeagateControllers() SeagateController* controller = new SeagateController(dev, info->path); RGBController_Seagate* rgb_controller = new RGBController_Seagate(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } info = info->next; @@ -45,6 +40,7 @@ void DetectSeagateControllers() scsi_free_enumeration(info); -} /* DetectSeagateControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Seagate Firecuda HDD", DetectSeagateControllers); diff --git a/Controllers/SinowealthController/SinowealthControllerDetect.cpp b/Controllers/SinowealthController/SinowealthControllerDetect.cpp index e11afb971..6e9c0af4b 100644 --- a/Controllers/SinowealthController/SinowealthControllerDetect.cpp +++ b/Controllers/SinowealthController/SinowealthControllerDetect.cpp @@ -45,14 +45,6 @@ #define GENESIS_XENON_200_PID 0x1007 #define RGB_KEYBOARD_010CPID 0x010C -/******************************************************************************************\ -* * -* DetectSinowealthControllers * -* * -* Tests the USB address to see if a Sinowealth controller exists there. * -* * -\******************************************************************************************/ - #define MAX_EXPECTED_REPORT_SIZE 2048 struct expected_report @@ -243,119 +235,111 @@ static bool DetectUsages(hid_device_info* info, std::string name, unsigned int d return true; } -static void DetectGenesisXenon200(hid_device_info* info, const std::string name) +DetectedControllers DetectGenesisXenon200(hid_device_info* info, const std::string name) { - expected_reports reports{expected_report(0x04, 154), expected_report(0x08, 9)}; - if(!DetectUsages(info, name, 5, reports)) + DetectedControllers detected_controllers; + expected_reports reports{expected_report(0x04, 154), expected_report(0x08, 9)}; + + if(DetectUsages(info, name, 5, reports)) { - return; + hid_device* dev = reports.at(0).device; + hid_device* cmd_dev = reports.at(1).device; + + GenesisXenon200Controller* controller = new GenesisXenon200Controller(dev, cmd_dev, info->path, name); + RGBController* rgb_controller = new RGBController_GenesisXenon200(controller); + + detected_controllers.push_back(rgb_controller); } - hid_device* dev = reports.at(0).device; - hid_device* cmd_dev = reports.at(1).device; - - GenesisXenon200Controller* controller = new GenesisXenon200Controller(dev, cmd_dev, info->path, name); - RGBController* rgb_controller = new RGBController_GenesisXenon200(controller); - - DetectionManager::get()->RegisterRGBController(rgb_controller); - + return(detected_controllers); } -static void DetectZetFuryPro(hid_device_info* info, const std::string& name) +DetectedControllers DetectZetFuryPro(hid_device_info* info, const std::string& name) { + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE expected_reports reports{expected_report(0x04, 59)}; - if(!DetectUsages(info, name, 5, reports)) + if(DetectUsages(info, name, 5, reports)) { - return; - } - hid_device* dev = reports.at(0).device; + hid_device* dev = reports.at(0).device; #else - hid_device* dev = hid_open_path(info->path); -#endif - - if(dev) { - SinowealthController1007* controller = new SinowealthController1007(dev, info->path, name); - RGBController_Sinowealth1007* rgb_controller = new RGBController_Sinowealth1007(controller); + hid_device* dev = hid_open_path(info->path); +#endif + if(dev) + { + SinowealthController1007* controller = new SinowealthController1007(dev, info->path, name); + RGBController_Sinowealth1007* rgb_controller = new RGBController_Sinowealth1007(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); + } } + return(detected_controllers); } -static void DetectSinowealthMouse(hid_device_info* info, const std::string& name) +DetectedControllers DetectSinowealthMouse(hid_device_info* info, const std::string& name) { + DetectedControllers detected_controllers; #ifdef USE_HID_USAGE unsigned char command[6] = {0x05, 0x11, 0x00, 0x00, 0x00, 0x00}; expected_reports reports{expected_report(0x04, 520, command, sizeof(command))}; - if(!DetectUsages(info, name, 3, reports)) + if(DetectUsages(info, name, 3, reports)) { - return; - } - - hid_device *dev = reports.at(0).device; - hid_device *dev_cmd = reports.at(0).cmd_device; + hid_device *dev = reports.at(0).device; + hid_device *dev_cmd = reports.at(0).cmd_device; #else - hid_device* dev = hid_open_path(info->path); - hid_device* dev_cmd = dev; + { + hid_device* dev = hid_open_path(info->path); + hid_device* dev_cmd = dev; #endif - if(dev && dev_cmd) - { - SinowealthController* controller = new SinowealthController(dev, dev_cmd, info->path, name); - RGBController_Sinowealth* rgb_controller = new RGBController_Sinowealth(controller); + if(dev && dev_cmd) + { + SinowealthController* controller = new SinowealthController(dev, dev_cmd, info->path, name); + RGBController_Sinowealth* rgb_controller = new RGBController_Sinowealth(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); + } } + + return(detected_controllers); } -static void DetectGMOW_Cable(hid_device_info* info, const std::string& name) +DetectedControllers DetectGMOW_Cable(hid_device_info* info, const std::string& name) { - LOG_DEBUG("[%s] Detected connection via USB cable", name.c_str()); - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SinowealthGMOWController* controller = new SinowealthGMOWController(dev, info->path, GMOW_CABLE_CONNECTED, name); RGBController_GMOW* rgb_controller = new RGBController_GMOW(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -static void DetectGMOW_Dongle(hid_device_info* info, const std::string& name) +DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------*\ - | When the GMOW is connected only via the wireless dongle, only one | - | device shows up (PID=2022), and RGB packets go to that device. | - | Same for when it is only plugged in via a cable but not a dongle (except | - | the device is PID=2011). However, when both are plugged in, packets | - | should only go to the cable connected device | - \*-------------------------------------------------------------------------*/ - LOG_DEBUG("[%s] Detected connection via wireless dongle", name.c_str()); - hid_device_info* start = hid_enumerate(SINOWEALTH_VID,0); - hid_device_info* curr = start; + DetectedControllers detected_controllers; + hid_device* dev; - while(curr) - { - if(curr->product_id == Glorious_Model_OW_PID2 || curr->product_id == Glorious_Model_DW_PID2) - { - return; - } - curr = curr->next; - } - hid_free_enumeration(start); - - hid_device *dev = hid_open_path(info->path); + dev = hid_open_path(info->path); if(dev) { SinowealthGMOWController* controller = new SinowealthGMOWController(dev, info->path, GMOW_DONGLE_CONNECTED, name); RGBController_GMOW* rgb_controller = new RGBController_GMOW(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } // static void DetectSinowealthKeyboard16(hid_device_info* info, const std::string& name) @@ -416,40 +400,46 @@ static void DetectGMOW_Dongle(hid_device_info* info, const std::string& name) // #endif // } -static void DetectSinowealthGenesisKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectSinowealthGenesisKeyboard(hid_device_info* info, const std::string& name) { - unsigned int pid = info->product_id; - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + unsigned int pid = info->product_id; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SinowealthKeyboard90Controller* controller = new SinowealthKeyboard90Controller(dev, info->path, pid, name); RGBController_SinowealthKeyboard90* rgb_controller = new RGBController_SinowealthKeyboard90(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -static void DetectSinowealthKeyboard10c(hid_device_info* info, const std::string& name) +DetectedControllers DetectSinowealthKeyboard10c(hid_device_info* info, const std::string& name) { - unsigned char command[7] = {0x06, 0x82, 0x01, 0x00, 0x01, 0x00, 0x06}; - expected_reports reports{expected_report(0x06, 520, command, 520)}; + DetectedControllers detected_controllers; + unsigned char command[7] = {0x06, 0x82, 0x01, 0x00, 0x01, 0x00, 0x06}; + expected_reports reports{expected_report(0x06, 520, command, 520)}; - if(!DetectUsages(info, name, 3, reports)) + if(DetectUsages(info, name, 3, reports)) { - return; + hid_device *dev = reports.at(0).device; + unsigned char model_id = reports.at(0).response[13]; + + if(dev && sinowealth_10c_keyboards.find(model_id) != sinowealth_10c_keyboards.end()) + { + SinowealthKeyboard10cController* controller = new SinowealthKeyboard10cController(dev, info->path, sinowealth_10c_keyboards.at(model_id).device_name); + RGBController_SinowealthKeyboard10c* rgb_controller = new RGBController_SinowealthKeyboard10c(controller, model_id); + + detected_controllers.push_back(rgb_controller); + } } - hid_device *dev = reports.at(0).device; - unsigned char model_id = reports.at(0).response[13]; - - if(dev && sinowealth_10c_keyboards.find(model_id) != sinowealth_10c_keyboards.end()) - { - SinowealthKeyboard10cController* controller = new SinowealthKeyboard10cController(dev, info->path, sinowealth_10c_keyboards.at(model_id).device_name); - RGBController_SinowealthKeyboard10c* rgb_controller = new RGBController_SinowealthKeyboard10c(controller, model_id); - - DetectionManager::get()->RegisterRGBController(rgb_controller); - } + return(detected_controllers); } #ifdef USE_HID_USAGE diff --git a/Controllers/SkyloongController/SkyloongControllerDetect.cpp b/Controllers/SkyloongController/SkyloongControllerDetect.cpp index 7cba3c265..6983c4c8f 100644 --- a/Controllers/SkyloongController/SkyloongControllerDetect.cpp +++ b/Controllers/SkyloongController/SkyloongControllerDetect.cpp @@ -14,33 +14,32 @@ #include "SkyloongGK104ProController.h" #include "RGBController_SkyloongGK104Pro.h" -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define SKYLOONG_KEYBOARD_VID 0x1EA7 #define SKYLOONG_GK104_PRO_PID 0x0907 #define SKYLOONG_GK104_PRO_I 1 -/******************************************************************************************\ -* * -* DetectSkyloongGK104Pro * -* * -* Tests the USB address to see if a Skyloong GK104 Pro controller exists there. * -* * -\******************************************************************************************/ -void DetectSkyloongGK104Pro(hid_device_info* info, const std::string& name) +DetectedControllers DetectSkyloongGK104Pro(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - SkyloongGK104ProController* controller = new SkyloongGK104ProController(dev, info->path, name); + SkyloongGK104ProController* controller = new SkyloongGK104ProController(dev, info->path, name); RGBController_SkyloongGK104Pro* rgb_controller = new RGBController_SkyloongGK104Pro(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -/*---------------------------------------------------------------------------------------------------------------------------------------------*\ -| Keyboards | -\*---------------------------------------------------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboards | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_I("Skyloong GK104 Pro", DetectSkyloongGK104Pro, SKYLOONG_KEYBOARD_VID, SKYLOONG_GK104_PRO_PID, SKYLOONG_GK104_PRO_I); diff --git a/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp b/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp index f168fd2ae..74a442ebf 100644 --- a/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp +++ b/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp @@ -13,9 +13,11 @@ #include #include +#include "DetectionManager.h" #include "RGBController_SonyDS4.h" #include "RGBController_SonyDualSense.h" -#include "DetectionManager.h" +#include "SonyDS4Controller.h" +#include "SonyDualSenseController.h" #define SONY_VID 0x054C @@ -25,31 +27,41 @@ #define SONY_DUALSENSE_PID 0x0CE6 #define SONY_DUALSENSE_EDGE_PID 0x0DF2 -void DetectSonyDS4Controllers(hid_device_info* info, const std::string&) +DetectedControllers DetectSonyDS4Controllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SonyDS4Controller* controller = new SonyDS4Controller(dev, info->path); RGBController_SonyDS4* rgb_controller = new RGBController_SonyDS4(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSonyDualSenseControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectSonyDualSenseControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - bool is_bluetooth = info->interface_number == -1; + bool is_bluetooth = (info->interface_number == -1); SonyDualSenseController* controller = new SonyDualSenseController(dev, info->path, is_bluetooth, name); RGBController_SonyDualSense* rgb_controller = new RGBController_SonyDualSense(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, SONY_VID, SONY_DS4_V1_PID); diff --git a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp index a3a0ddbac..d47ea0ba1 100644 --- a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp +++ b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp @@ -34,14 +34,14 @@ #include "RGBController_SteelSeriesSensei.h" #include "RGBController_SteelSeriesSiberia.h" -/*-----------------------------------------------------*\ -| Vendor ID | -\*-----------------------------------------------------*/ -#define STEELSERIES_VID 0x1038 +/*---------------------------------------------------------*\ +| Vendor ID | +\*---------------------------------------------------------*/ +#define STEELSERIES_VID 0x1038 -/*-----------------------------------------------------*\ -| Mouse product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Mouse product IDs | +\*---------------------------------------------------------*/ #define STEELSERIES_AEROX_3_PID 0x1836 #define STEELSERIES_AEROX_3_WIRELESS_PID 0x1838 #define STEELSERIES_AEROX_3_WIRELESS_WIRED_PID 0x183A @@ -83,12 +83,12 @@ #define STEELSERIES_SENSEI_TEN_CSGO_NEON_RIDER_PID 0x1834 #define STEELSERIES_SENSEI_310_PID 0x1722 -/*-----------------------------------------------------*\ -| Headset product IDs | -\*-----------------------------------------------------*/ -#define STEELSERIES_SIBERIA_350_PID 0x1229 -#define STEELSERIES_ARCTIS_5_PID 0x1250 -#define STEELSERIES_ARCTIS_5_V2_PID 0x12AA +/*---------------------------------------------------------*\ +| Headset product IDs | +\*---------------------------------------------------------*/ +#define STEELSERIES_SIBERIA_350_PID 0x1229 +#define STEELSERIES_ARCTIS_5_PID 0x1250 +#define STEELSERIES_ARCTIS_5_V2_PID 0x12AA /*------------------------------------------------------------------*\ | Mousemat product IDs | @@ -103,332 +103,427 @@ #define STEELSERIES_QCK_PRISM_CLOTH_5XL_PID 0x151A #define STEELSERIES_QCK_PRISM_CLOTH_XL_DESTINY_LIGHTFALL_ED_PID 0X1520 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ -#define STEELSERIES_APEX_3_PID 0x161A -#define STEELSERIES_APEX_3_TKL_PID 0x1622 -#define STEELSERIES_APEX_5_PID 0x161C -#define STEELSERIES_APEX_7_PID 0x1612 -#define STEELSERIES_APEX_7_TKL_PID 0x1618 -#define STEELSERIES_APEX_9_TKL_PID 0x1634 -#define STEELSERIES_APEX_9_MINI_PID 0x1620 -#define STEELSERIES_APEX_PRO_PID 0x1610 -#define STEELSERIES_APEX_PRO_TKL_PID 0x1614 -#define STEELSERIES_APEX_PRO_TKL_2023_PID 0x1628 -#define STEELSERIES_APEX_PRO_TKL_2023_WL_PID_1 0x1630 -#define STEELSERIES_APEX_PRO_TKL_2023_WL_PID_2 0x1632 -#define STEELSERIES_APEX_M750_PID 0x0616 -#define STEELSERIES_APEX_OG_PID 0x1202 -#define STEELSERIES_APEX_350_PID 0x1206 -#define STEELSERIES_APEX_PRO3_PID 0x1640 +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ +#define STEELSERIES_APEX_3_PID 0x161A +#define STEELSERIES_APEX_3_TKL_PID 0x1622 +#define STEELSERIES_APEX_5_PID 0x161C +#define STEELSERIES_APEX_7_PID 0x1612 +#define STEELSERIES_APEX_7_TKL_PID 0x1618 +#define STEELSERIES_APEX_9_TKL_PID 0x1634 +#define STEELSERIES_APEX_9_MINI_PID 0x1620 +#define STEELSERIES_APEX_PRO_PID 0x1610 +#define STEELSERIES_APEX_PRO_TKL_PID 0x1614 +#define STEELSERIES_APEX_PRO_TKL_2023_PID 0x1628 +#define STEELSERIES_APEX_PRO_TKL_2023_WL_PID_1 0x1630 +#define STEELSERIES_APEX_PRO_TKL_2023_WL_PID_2 0x1632 +#define STEELSERIES_APEX_M750_PID 0x0616 +#define STEELSERIES_APEX_OG_PID 0x1202 +#define STEELSERIES_APEX_350_PID 0x1206 +#define STEELSERIES_APEX_PRO3_PID 0x1640 -void DetectSteelSeriesAerox3(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox3(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesAerox3Controller* controller = new SteelSeriesAerox3Controller(dev, AEROX_3, info->path, name); RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesAeroxWireless(hid_device_info* info, const std::string& name, steelseries_type proto_type) +DetectedControllers DetectSteelSeriesAeroxWireless(hid_device_info* info, const std::string& name, steelseries_type proto_type) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesAeroxWirelessController* controller = new SteelSeriesAeroxWirelessController(dev, proto_type, info->path, name); RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesAerox3Wireless(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox3Wireless(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS)); } -void DetectSteelSeriesAerox3WirelessWired(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox3WirelessWired(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS_WIRED); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS_WIRED)); } -void DetectSteelSeriesAerox5(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesAerox5Controller* controller = new SteelSeriesAerox5Controller(dev, AEROX_3, info->path, name); RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesAerox5Wireless(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5Wireless(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS)); } -void DetectSteelSeriesAerox5WirelessWired(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5WirelessWired(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS_WIRED); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS_WIRED)); } -void DetectSteelSeriesAerox5DestinyWireless(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5DestinyWireless(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS)); } -void DetectSteelSeriesAerox5DestinyWirelessWired(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5DestinyWirelessWired(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS_WIRED); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS_WIRED)); } -void DetectSteelSeriesAerox5DiabloWireless(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5DiabloWireless(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS)); } -void DetectSteelSeriesAerox5DiabloWirelessWired(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox5DiabloWirelessWired(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS_WIRED); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS_WIRED)); } -void DetectSteelSeriesAerox9Wireless(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox9Wireless(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS)); } -void DetectSteelSeriesAerox9WirelessWired(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesAerox9WirelessWired(hid_device_info* info, const std::string& name) { - DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS_WIRED); + return(DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS_WIRED)); } -void DetectSteelSeriesApex3Full(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApex3Full(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesApexTZoneController* controller = new SteelSeriesApexTZoneController(dev, info->path, name); RGBController_SteelSeriesApex3* rgb_controller = new RGBController_SteelSeriesApex3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesApex3TKL(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApex3TKL(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesApex8ZoneController* controller = new SteelSeriesApex8ZoneController(dev, info->path, name); RGBController_SteelSeriesApex3* rgb_controller = new RGBController_SteelSeriesApex3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesApex(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApex(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesApexController* controller = new SteelSeriesApexController(dev, APEX, info->path, name); RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesApex9(hid_device_info* info, const std::string& name, steelseries_type proto_type) +DetectedControllers DetectSteelSeriesApex9(hid_device_info* info, const std::string& name, steelseries_type proto_type) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - SteelSeriesApex9Controller* controller = new SteelSeriesApex9Controller(dev, proto_type, info->path, name); + SteelSeriesApex9Controller* controller = new SteelSeriesApex9Controller(dev, proto_type, info->path, name); RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesApex9TKL(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApex9TKL(hid_device_info* info, const std::string& name) { - DetectSteelSeriesApex9(info, name, APEX_9_TKL); + return(DetectSteelSeriesApex9(info, name, APEX_9_TKL)); } -void DetectSteelSeriesApex9Mini(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApex9Mini(hid_device_info* info, const std::string& name) { - DetectSteelSeriesApex9(info, name, APEX_9_MINI); + return(DetectSteelSeriesApex9(info, name, APEX_9_MINI)); } -void DetectSteelSeriesApexM(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApexM(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesApexMController* controller = new SteelSeriesApexMController(dev, APEX_M, info->path, name); RGBController_SteelSeriesApex* rgb_controller = new RGBController_SteelSeriesApex(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesApexOld(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesApexOld(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesOldApexController* controller = new SteelSeriesOldApexController(dev, APEX_OLD, info->path, name); RGBController_SteelSeriesOldApex* rgb_controller = new RGBController_SteelSeriesOldApex(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesHeadset(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesHeadset(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesSiberiaController* controller = new SteelSeriesSiberiaController(dev, info->path, name); RGBController_SteelSeriesSiberia* rgb_controller = new RGBController_SteelSeriesSiberia(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesMousemat(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesMousemat(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesQCKMatController* controller = new SteelSeriesQCKMatController(dev, info->path, name); RGBController_SteelSeriesQCKMat* rgb_controller = new RGBController_SteelSeriesQCKMat(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesRival100(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival100(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_100, info->path, name); RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesRival300(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival300(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_300, info->path, name); RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesRival600(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival600(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_600, info->path, name); RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesRival650(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival650(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_650, info->path, name); RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesRival700(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival700(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRivalController* controller = new SteelSeriesRivalController(dev, RIVAL_700, info->path, name); RGBController_SteelSeriesRival* rgb_controller = new RGBController_SteelSeriesRival(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } - -void DetectSteelSeriesRival3(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesRival3(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesRival3Controller* controller = new SteelSeriesRival3Controller(dev, RIVAL_3, info->path, name); RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesSensei(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesSensei(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesSenseiController* controller = new SteelSeriesSenseiController(dev, SENSEI, info->path, name); RGBController_SteelSeriesSensei* rgb_controller = new RGBController_SteelSeriesSensei(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectSteelSeriesArctis5(hid_device_info* info, const std::string& name) +DetectedControllers DetectSteelSeriesArctis5(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { SteelSeriesArctis5Controller* controller = new SteelSeriesArctis5Controller(dev, *info, name); RGBController_SteelSeriesArctis5* rgb_controller = new RGBController_SteelSeriesArctis5(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*\ diff --git a/Controllers/StreamDeckController/ElgatoStreamDeckControllerDetect.cpp b/Controllers/StreamDeckController/ElgatoStreamDeckControllerDetect.cpp index bd64ae3b0..b868854c5 100644 --- a/Controllers/StreamDeckController/ElgatoStreamDeckControllerDetect.cpp +++ b/Controllers/StreamDeckController/ElgatoStreamDeckControllerDetect.cpp @@ -13,21 +13,27 @@ #include "ElgatoStreamDeckController.h" #include "RGBController_ElgatoStreamDeck.h" -#define ELGATO_VID 0x0FD9 -#define STREAMDECK_MK2_PID 0x0080 +#define ELGATO_VID 0x0FD9 +#define STREAMDECK_MK2_PID 0x0080 -void DetectElgatoStreamDeckControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectElgatoStreamDeckControllers(hid_device_info* info, const std::string&) { + DetectedControllers detected_controllers; + if(info->interface_number == 0) { hid_device* dev = hid_open_path(info->path); + if(dev) { - ElgatoStreamDeckController* controller = new ElgatoStreamDeckController(dev, info->path); + ElgatoStreamDeckController* controller = new ElgatoStreamDeckController(dev, info->path); RGBController_ElgatoStreamDeck* rgb_controller = new RGBController_ElgatoStreamDeck(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Elgato Stream Deck MK.2", DetectElgatoStreamDeckControllers, ELGATO_VID, STREAMDECK_MK2_PID); diff --git a/Controllers/TForceXtreemController/TForceXtreemControllerDetect.cpp b/Controllers/TForceXtreemController/TForceXtreemControllerDetect.cpp index e96da7050..734b23f1e 100644 --- a/Controllers/TForceXtreemController/TForceXtreemControllerDetect.cpp +++ b/Controllers/TForceXtreemController/TForceXtreemControllerDetect.cpp @@ -9,25 +9,27 @@ #include #include "DetectionManager.h" -#include "TForceXtreemController.h" +#include "i2c_smbus.h" #include "LogManager.h" #include "RGBController_TForceXtreem.h" -#include "i2c_smbus.h" +#include "TForceXtreemController.h" #define DETECTOR_NAME "TForce Xtreem Controller" using namespace std::chrono_literals; -/*----------------------------------------------------------------------*\ -| Windows defines "interface" for some reason. Work around this | -\*----------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Windows defines "interface" for some reason. Work around | +| this | +\*---------------------------------------------------------*/ #ifdef interface #undef interface #endif -/*----------------------------------------------------------------------*\ -| This list contains the available SMBus addresses for mapping ENE RAM | -\*----------------------------------------------------------------------*/ +/*---------------------------------------------------------*\ +| This list contains the available SMBus addresses for | +| mapping TForce Xtreem RAM | +\*---------------------------------------------------------*/ #define XTREEM_RAM_ADDRESS_COUNT 13 static const unsigned char xtreem_ram_addresses[] = @@ -47,15 +49,6 @@ static const unsigned char xtreem_ram_addresses[] = 0x3D }; -/******************************************************************************************\ -* * -* XtreemRegisterWrite * -* * -* A standalone version of the TForceXtreemController::ENERegisterWrite function for * -* access to ENE devices without instancing the TForceXtreemController class. * -* * -\******************************************************************************************/ - static void XtreemRegisterWrite(i2c_smbus_interface* bus, ene_dev_id dev, ene_register reg, unsigned char val) { //Write ENE register @@ -65,16 +58,6 @@ static void XtreemRegisterWrite(i2c_smbus_interface* bus, ene_dev_id dev, ene_re bus->i2c_smbus_write_byte_data(dev, 0x01, val); } -/******************************************************************************************\ -* * -* TestForENESMBusController * -* * -* Tests the given address to see if an ENE controller exists there. First does a * -* quick write to test for a response, and if so does a simple read at 0x90 to test * -* for incrementing values 10...1F which was observed at this location * -* * -\******************************************************************************************/ - bool TestForTForceXtreemController(i2c_smbus_interface* bus, unsigned char address) { bool pass = false; @@ -109,22 +92,11 @@ bool TestForTForceXtreemController(i2c_smbus_interface* bus, unsigned char addre } return(pass); +} -} /* TestForTForceXtreemController() */ - -/******************************************************************************************\ -* * -* DetectTForceXtreemDRAMControllers * -* * -* Detects T-Force Xtreem controllers on DRAM devices * -* * -* bus - pointer to i2c_smbus_interface where device is connected * -* slots - SPD accessors to occupied slots * -* * -\******************************************************************************************/ - -void DetectTForceXtreemControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) +DetectedControllers DetectTForceXtreemControllers(i2c_smbus_interface* bus, std::vector &slots, const std::string &/*name*/) { + DetectedControllers detected_controllers; LOG_DEBUG("[%s] Remapping ENE SMBus RAM modules on 0x77", DETECTOR_NAME); @@ -168,7 +140,9 @@ void DetectTForceXtreemControllers(i2c_smbus_interface* bus, std::vectorRegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } -} /* DetectTForceXtreemControllers() */ + + return(detected_controllers); +} REGISTER_I2C_DRAM_DETECTOR("T-Force Xtreem DDR4 DRAM", DetectTForceXtreemControllers, JEDEC_TEAMGROUP, SPD_DDR4_SDRAM); diff --git a/Controllers/TecknetController/TecknetControllerDetect.cpp b/Controllers/TecknetController/TecknetControllerDetect.cpp index 24f8a52fe..759d17ecd 100644 --- a/Controllers/TecknetController/TecknetControllerDetect.cpp +++ b/Controllers/TecknetController/TecknetControllerDetect.cpp @@ -20,25 +20,23 @@ #define TECKNET_M0008_U 0x01 //Usage 01 #define TECKNET_M0008_UPG 0xFFA0 //Vendor Defined Usage Page -/******************************************************************************************\ -* * -* DetectTecknetControllers * -* * -* Tests the USB address to see if any Tecknet Controllers. * -* * -\******************************************************************************************/ - -void DetectTecknetControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectTecknetControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - TecknetController* controller = new TecknetController(dev, info->path); + TecknetController* controller = new TecknetController(dev, info->path); RGBController_Tecknet* rgb_controller = new RGBController_Tecknet(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectTecknetControllers) */ + + return(detected_controllers); +} #ifdef USE_HID_USAGE REGISTER_HID_DETECTOR_PU("Tecknet M008", DetectTecknetControllers, TECKNET_VID, TECKNET_M0008_PID, TECKNET_M0008_UPG, TECKNET_M0008_U); diff --git a/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp b/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp index 11c322331..e3c929e73 100644 --- a/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp +++ b/Controllers/ThermaltakePoseidonZRGBController/ThermaltakePoseidonZRGBControllerDetect.cpp @@ -11,31 +11,28 @@ #include #include "DetectionManager.h" -#include "ThermaltakePoseidonZRGBController.h" #include "RGBController_ThermaltakePoseidonZRGB.h" +#include "ThermaltakePoseidonZRGBController.h" #define TT_POSEIDON_Z_RGB_VID 0x264A #define TT_POSEIDON_Z_RGB_PID 0x3006 -/******************************************************************************************\ -* * -* DetectPoseidonZRGBControllers * -* * -* Tests the USB address to see if a Thermaltake Poseidon Z RGB Keyboard controller * -* exists there. * -* * -\******************************************************************************************/ - -void DetectPoseidonZRGBControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectPoseidonZRGBControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); - if( dev ) + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) { - PoseidonZRGBController* controller = new PoseidonZRGBController(dev, info->path); + PoseidonZRGBController* controller = new PoseidonZRGBController(dev, info->path); RGBController_PoseidonZRGB* rgb_controller = new RGBController_PoseidonZRGB(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectPoseidonZRGBControllers() */ + + return(detected_controllers); +} 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 d1a594c21..628fdf90b 100644 --- a/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp +++ b/Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp @@ -20,53 +20,62 @@ #include "RGBController_ThermaltakeRiingQuad.h" #include "RGBController_ThermaltakeRiingTrio.h" - #define THERMALTAKE_RIING_VID 0x264A #define THERMALTAKE_RIING_PID_BEGIN 0x1FA5 #define THERMALTAKE_RIING_PID_END 0x1FB5 -/******************************************************************************************\ -* * -* DetectThermaltakeRiingControllers * -* * -* Tests the USB address to see if an AMD Wraith Prism controller exists there. * -* * -\******************************************************************************************/ - -void DetectThermaltakeRiingControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectThermaltakeRiingControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - ThermaltakeRiingController* controller = new ThermaltakeRiingController(dev, info->path); + ThermaltakeRiingController* controller = new ThermaltakeRiingController(dev, info->path); RGBController_ThermaltakeRiing* rgb_controller = new RGBController_ThermaltakeRiing(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); - } -} /* DetectThermaltakeRiingControllers() */ -void DetectThermaltakeRiingQuadControllers(hid_device_info* info, const std::string&) -{ - hid_device* dev = hid_open_path(info->path); - if(dev) - { - ThermaltakeRiingQuadController* controller = new ThermaltakeRiingQuadController(dev, info->path); - RGBController_ThermaltakeRiingQuad* rgb_controller = new RGBController_ThermaltakeRiingQuad(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectThermaltakeRiingTrioControllers(hid_device_info* info, const std::string&) +DetectedControllers DetectThermaltakeRiingQuadControllers(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - ThermaltakeRiingTrioController* controller = new ThermaltakeRiingTrioController(dev, info->path); - RGBController_ThermaltakeRiingTrio* rgb_controller = new RGBController_ThermaltakeRiingTrio(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + ThermaltakeRiingQuadController* controller = new ThermaltakeRiingQuadController(dev, info->path); + RGBController_ThermaltakeRiingQuad* rgb_controller = new RGBController_ThermaltakeRiingQuad(controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); +} + +DetectedControllers DetectThermaltakeRiingTrioControllers(hid_device_info* info, const std::string&) +{ + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + + if(dev) + { + ThermaltakeRiingTrioController* controller = new ThermaltakeRiingTrioController(dev, info->path); + RGBController_ThermaltakeRiingTrio* rgb_controller = new RGBController_ThermaltakeRiingTrio(controller); + + detected_controllers.push_back(rgb_controller); + } + + return(detected_controllers); } REGISTER_HID_DETECTOR("Thermaltake Riing (PID 0x1FA5)", DetectThermaltakeRiingControllers, THERMALTAKE_RIING_VID, 0x1FA5); diff --git a/Controllers/ThingMController/ThingMControllerDetect.cpp b/Controllers/ThingMController/ThingMControllerDetect.cpp index 75b6fa196..b1245b845 100644 --- a/Controllers/ThingMController/ThingMControllerDetect.cpp +++ b/Controllers/ThingMController/ThingMControllerDetect.cpp @@ -15,27 +15,24 @@ #include "RGBController_BlinkController.h" #define THINGM_VID 0x27B8 - #define THINGM_BLINK_PID 0x01ED -/******************************************************************************************\ -* * -* DetectThingMControllers * -* * -* Tests the USB address to see if any CoolerMaster controllers exists there. * -* * -\******************************************************************************************/ - -void DetectThingMBlink(hid_device_info* info, const std::string&) +DetectedControllers DetectThingMBlink(hid_device_info* info, const std::string&) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); + if(dev) { - BlinkController* controller = new BlinkController(dev, info->path); + BlinkController* controller = new BlinkController(dev, info->path); RGBController_BlinkController* rgb_controller = new RGBController_BlinkController(controller); - // Constructor sets the name - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("ThingM blink(1) mk2", DetectThingMBlink, THINGM_VID, THINGM_BLINK_PID, 0xFF00, 0x01); diff --git a/Controllers/TrustController/TrustControllerDetect.cpp b/Controllers/TrustController/TrustControllerDetect.cpp index 7875a0ae4..1c42dc326 100644 --- a/Controllers/TrustController/TrustControllerDetect.cpp +++ b/Controllers/TrustController/TrustControllerDetect.cpp @@ -26,9 +26,12 @@ #define TRUST_GXT_114_PID 0x026D #define TRUST_GXT_180_PID 0x0248 -void DetectTrustGXT114Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectTrustGXT114Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { @@ -38,26 +41,33 @@ void DetectTrustGXT114Controllers(hid_device_info* info, const std::string& name { RGBController_TrustGXT114* rgb_controller = new RGBController_TrustGXT114(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { delete controller; } } + + return(detected_controllers); } -void DetectTrustGXT180Controllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectTrustGXT180Controllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { TrustGXT180Controller* controller = new TrustGXT180Controller(dev, *info, name); RGBController_TrustGXT180* rgb_controller = new RGBController_TrustGXT180(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("Trust GXT 114", DetectTrustGXT114Controllers, TRUST_VID, TRUST_GXT_114_PID, 1, 0xFF00, 1); diff --git a/Controllers/ValkyrieKeyboardController/ValkyrieKeyboardControllerDetect.cpp b/Controllers/ValkyrieKeyboardController/ValkyrieKeyboardControllerDetect.cpp index c13125ae7..87931bd9d 100644 --- a/Controllers/ValkyrieKeyboardController/ValkyrieKeyboardControllerDetect.cpp +++ b/Controllers/ValkyrieKeyboardController/ValkyrieKeyboardControllerDetect.cpp @@ -14,18 +14,23 @@ #include "DetectionManager.h" #include "RGBController_ValkyrieKeyboard.h" -void DetectValkyrieKeyboardControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectValkyrieKeyboardControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { ValkyrieKeyboardController* controller = new ValkyrieKeyboardController(dev, info->path, info->product_id, info->interface_number, name); RGBController_ValkyrieKeyboard* rgb_controller = new RGBController_ValkyrieKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -/* DetectValkyrieKeyboardControllers() */ REGISTER_HID_DETECTOR_IPU("Valkyrie VK99 Pro", DetectValkyrieKeyboardControllers, VALKYRIE_VID, VALKYRIE_99_PRO_PID, 3, 0xFF13, 0x0001); REGISTER_HID_DETECTOR_IPU("Valkyrie VK99", DetectValkyrieKeyboardControllers, VALKYRIE_VID, VALKYRIE_99_NORMAL_PID, 2, 0xFF13, 0x0001); diff --git a/Controllers/ViewSonicController/ViewSonicControllerDetect.cpp b/Controllers/ViewSonicController/ViewSonicControllerDetect.cpp index dfbf72c4a..f601aed46 100644 --- a/Controllers/ViewSonicController/ViewSonicControllerDetect.cpp +++ b/Controllers/ViewSonicController/ViewSonicControllerDetect.cpp @@ -16,36 +16,46 @@ #include "VS_XG270QC_Controller.h" #include "RGBController_XG270QC.h" -#define WINBOND_VID 0x0416 -#define VIEWSONIC_VID 0x0543 -#define VS_XG270QG_PID 0x5020 -#define VS_XG271QG_PID 0xA004 -#define VS_XG270QC_PID 0xA002 +#define WINBOND_VID 0x0416 +#define VIEWSONIC_VID 0x0543 +#define VS_XG270QG_PID 0x5020 +#define VS_XG271QG_PID 0xA004 +#define VS_XG270QC_PID 0xA002 -void DetectViewSonicQG(hid_device_info* info, const std::string& name) +DetectedControllers DetectViewSonicQG(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { VS_XG270QG_Controller* controller = new VS_XG270QG_Controller(dev, info->path, name); RGBController_XG270QG* rgb_controller = new RGBController_XG270QG(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -void DetectViewSonicQC(hid_device_info* info, const std::string& name) +DetectedControllers DetectViewSonicQC(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { VS_XG270QC_Controller* controller = new VS_XG270QC_Controller(dev, info->path, name); RGBController_XG270QC* rgb_controller = new RGBController_XG270QC(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IPU("ViewSonic Monitor XG270QG", DetectViewSonicQG, WINBOND_VID, VS_XG270QG_PID, 0, 0xFF00, 1); diff --git a/Controllers/WinbondGamingKeyboardController/WinbondGamingKeyboardControllerDetect.cpp b/Controllers/WinbondGamingKeyboardController/WinbondGamingKeyboardControllerDetect.cpp index 82dc9a008..6705f7c59 100644 --- a/Controllers/WinbondGamingKeyboardController/WinbondGamingKeyboardControllerDetect.cpp +++ b/Controllers/WinbondGamingKeyboardController/WinbondGamingKeyboardControllerDetect.cpp @@ -14,20 +14,18 @@ #include "RGBController_WinbondGamingKeyboard.h" #include "LogManager.h" -/*-----------------------------------------------------*\ -| Winbond vendor ID | -\*-----------------------------------------------------*/ -#define WINBOND_VID 0x0416 +/*---------------------------------------------------------*\ +| Winbond vendor ID | +\*---------------------------------------------------------*/ +#define WINBOND_VID 0x0416 -/*-----------------------------------------------------*\ -| Winbond product ID | -\*-----------------------------------------------------*/ -#define WINBOND_GAMING_KEYBOARD_PID 0xB23C +/*---------------------------------------------------------*\ +| Winbond product ID | +\*---------------------------------------------------------*/ +#define WINBOND_GAMING_KEYBOARD_PID 0xB23C -void DetectWinbondGamingKeyboard(hid_device_info* info, const std::string& name) +DetectedControllers DetectWinbondGamingKeyboard(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - /*--------------------------------------------------------------------------------------------------*\ | NOTE: according to https://4pda.to/forum/index.php?showtopic=1061923, | | the "KT108" keyboard, which has the same VID:PID, uses the product_string "KT108 keyboard" | @@ -47,20 +45,26 @@ void DetectWinbondGamingKeyboard(hid_device_info* info, const std::string& name) | or product_string, much less about its protocol (even if it uses the same firmware, | | I don't know which key corresponds to which bytes in the HID message that sets the per-key colors) | \*--------------------------------------------------------------------------------------------------*/ + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { LOG_INFO("Detected WinbondGamingKeyboard at %s, product_string is %ls name is %s", info->path, info->product_string, name.c_str()); - WinbondGamingKeyboardController* controller = new WinbondGamingKeyboardController(dev, *info, name); - RGBController* rgb_controller = new RGBController_WinbondGamingKeyboard(controller); + WinbondGamingKeyboardController* controller = new WinbondGamingKeyboardController(dev, *info, name); + RGBController* rgb_controller = new RGBController_WinbondGamingKeyboard(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { LOG_WARNING("Couldn't open hid dev %s: %ls", info->path, hid_error(NULL)); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_PU("Winbond Gaming Keyboard", DetectWinbondGamingKeyboard, WINBOND_VID, WINBOND_GAMING_KEYBOARD_PID, 0xFF1B, 0x91); diff --git a/Controllers/WootingKeyboardController/WootingKeyboardControllerDetect.cpp b/Controllers/WootingKeyboardController/WootingKeyboardControllerDetect.cpp index 6368429b1..8c5fbc859 100644 --- a/Controllers/WootingKeyboardController/WootingKeyboardControllerDetect.cpp +++ b/Controllers/WootingKeyboardController/WootingKeyboardControllerDetect.cpp @@ -11,24 +11,24 @@ #include #include "DetectionManager.h" +#include "LogManager.h" +#include "RGBController_WootingKeyboard.h" #include "WootingV1KeyboardController.h" #include "WootingV2KeyboardController.h" #include "WootingV3KeyboardController.h" -#include "RGBController_WootingKeyboard.h" -#include "LogManager.h" #define WOOTING_CONFIG_USAGE_PAGE_V2 0x1337 #define WOOTING_CONFIG_USAGE_PAGE_V3 0xFF55 -/*-----------------------------------------------------*\ -| Wooting vendor ID | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Wooting vendor ID | +\*---------------------------------------------------------*/ #define WOOTING_OLD_VID 0x03EB #define WOOTING_NEW_VID 0x31E3 -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Keyboard product IDs | +\*---------------------------------------------------------*/ #define WOOTING_ONE_LEGACY_PID 0xFF01 #define WOOTING_TWO_LEGACY_PID 0xFF02 #define WOOTING_ONE_PID 0x1100 @@ -43,136 +43,156 @@ #define WOOTING_80HE_PID 0x1400 #define WOOTING_UWU_RGB_PID 0x1510 -/*-----------------------------------------------------*\ -| Product ID helpers | -| XINP: Xbox input emulation enabled | -| DINP: Classic DirectInput emulation enabled | -| NONE: Controller emulation disabled | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| Product ID helpers | +| XINP: Xbox input emulation enabled | +| DINP: Classic DirectInput emulation enabled | +| NONE: Controller emulation disabled | +\*---------------------------------------------------------*/ #define XINP_PID(pid) (pid | 0x0000) #define DINP_PID(pid) (pid | 0x0001) #define NONE_PID(pid) (pid | 0x0002) -void DetectWootingControllers(hid_device_info *info, const std::string &name) +DetectedControllers DetectWootingControllers(hid_device_info *info, const std::string &name) { - static const char *controller_name = "Wooting"; + DetectedControllers detected_controllers; + hid_device* dev; + static const char * controller_name = "Wooting"; + LOG_DEBUG("[%s] Interface %i\tPage %04X\tUsage %i\tPath %s", controller_name, info->interface_number, info->usage_page, info->usage, info->path); - hid_device *dev = hid_open_path(info->path); + dev = hid_open_path(info->path); - if(!dev) - return; + if(dev) + { + WOOTING_DEVICE_TYPE wooting_type; + uint16_t pid = info->product_id; - WOOTING_DEVICE_TYPE wooting_type; - uint16_t pid = info->product_id; - - if(pid == WOOTING_ONE_LEGACY_PID) - { - wooting_type = WOOTING_KB_TKL; - } - else if(pid == WOOTING_TWO_LEGACY_PID) - { - wooting_type = WOOTING_KB_FULL; - } - else - { - //on modern devices, mask out the last nibble to get base PID - switch(pid & 0xFFF0) + if(pid == WOOTING_ONE_LEGACY_PID) { - case WOOTING_ONE_LEGACY_PID: - case WOOTING_ONE_PID: - wooting_type = WOOTING_KB_TKL; - break; - case WOOTING_TWO_LEGACY_PID: - case WOOTING_TWO_PID: - case WOOTING_TWO_LE_PID: - case WOOTING_TWO_HE_PID: - case WOOTING_TWO_HE_ARM_PID: - wooting_type = WOOTING_KB_FULL; - break; - case WOOTING_60HE_PID: - case WOOTING_60HE_ARM_PID: - case WOOTING_60HE_PLUS_PID: - case WOOTING_60HE_V2_PID: - wooting_type = WOOTING_KB_60PER; - break; - case WOOTING_80HE_PID: - wooting_type = WOOTING_KB_80PER; - break; - case WOOTING_UWU_RGB_PID: - wooting_type = WOOTING_KB_3PAD; - break; - default: - //default to largest keyboard if unknown - wooting_type = WOOTING_KB_FULL; - break; + wooting_type = WOOTING_KB_TKL; + } + else if(pid == WOOTING_TWO_LEGACY_PID) + { + wooting_type = WOOTING_KB_FULL; + } + else + { + /*---------------------------------------------*\ + | On modern devices, mask out the last nibble | + | to get base PID | + \*---------------------------------------------*/ + switch(pid & 0xFFF0) + { + case WOOTING_ONE_LEGACY_PID: + case WOOTING_ONE_PID: + wooting_type = WOOTING_KB_TKL; + break; + case WOOTING_TWO_LEGACY_PID: + case WOOTING_TWO_PID: + case WOOTING_TWO_LE_PID: + case WOOTING_TWO_HE_PID: + case WOOTING_TWO_HE_ARM_PID: + wooting_type = WOOTING_KB_FULL; + break; + case WOOTING_60HE_PID: + case WOOTING_60HE_ARM_PID: + case WOOTING_60HE_PLUS_PID: + case WOOTING_60HE_V2_PID: + wooting_type = WOOTING_KB_60PER; + break; + case WOOTING_80HE_PID: + wooting_type = WOOTING_KB_80PER; + break; + case WOOTING_UWU_RGB_PID: + wooting_type = WOOTING_KB_3PAD; + break; + default: + /*-------------------------------------*\ + | Default to largest keyboard if unknown| + \*-------------------------------------*/ + wooting_type = WOOTING_KB_FULL; + break; + } + } + + LOG_INFO("[%s] Detected Wooting device type %i for device at path %s", controller_name, wooting_type, info->path); + + /*-------------------------------------------------*\ + | V1 firmware used the ATMEL VID, and uses the V1 | + | controller | + \*-------------------------------------------------*/ + if(info->vendor_id == WOOTING_OLD_VID && info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V2) + { + LOG_DEBUG("[%s] Old VID detected - creating V1 Controller", controller_name); + WootingV1KeyboardController *controller = new WootingV1KeyboardController(dev, info->path, wooting_type, name); + + LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); + RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); + + LOG_DEBUG("[%s] Initialization complete - Adding controller to list\t%s", controller_name, name.c_str()); + detected_controllers.push_back(rgb_controller); + } + /*-------------------------------------------------*\ + | V2-V2.11 firmware uses the V2 protocol indicated | + | by the V2 usage page | + \*-------------------------------------------------*/ + else if(info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V2) + { + LOG_DEBUG("[%s] V2 usage page detected - creating V2 Controller", controller_name); + WootingV2KeyboardController *controller = new WootingV2KeyboardController(dev, info->path, wooting_type, name); + + LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); + RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); + + LOG_DEBUG("[%s] Initialization complete - Adding controller to list\t%s", controller_name, name.c_str()); + detected_controllers.push_back(rgb_controller); + } + /*-------------------------------------------------*\ + | V2.12+ firmware uses the new report structure | + | indicated by the V3 usage page | + \*-------------------------------------------------*/ + else if(info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V3) + { + LOG_DEBUG("[%s] V3 usage page detected - creating V3 Controller", controller_name); + WootingV3KeyboardController *controller = new WootingV3KeyboardController(dev, info->path, wooting_type, name); + + LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); + RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); + + LOG_DEBUG("[%s] Initialization complete - Adding controller to list\t%s", controller_name, name.c_str()); + detected_controllers.push_back(rgb_controller); + } + else + { + hid_close(dev); + + LOG_TRACE("[%s] No compatible Wooting controller found for device at path %s", controller_name, info->path); } } - LOG_INFO("[%s] Detected Wooting device type %i for device at path %s", controller_name, wooting_type, info->path); - - //V1 firmware used the ATMEL VID, and uses the V1 controller - if(info->vendor_id == WOOTING_OLD_VID && info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V2) - { - LOG_DEBUG("[%s] Old VID detected - creating V1 Controller", controller_name); - WootingV1KeyboardController *controller = new WootingV1KeyboardController(dev, info->path, wooting_type, name); - - LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); - RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); - - LOG_DEBUG("[%s] Initialization complete - Registering controller\t%s", controller_name, name.c_str()); - DetectionManager::get()->RegisterRGBController(rgb_controller); - return; - } - - //V2-V2.11 firmware uses the V2 protocol indicated by the V2 usage page - if(info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V2) - { - LOG_DEBUG("[%s] V2 usage page detected - creating V2 Controller", controller_name); - WootingV2KeyboardController *controller = new WootingV2KeyboardController(dev, info->path, wooting_type, name); - - LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); - RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); - - LOG_DEBUG("[%s] Initialization complete - Registering controller\t%s", controller_name, name.c_str()); - DetectionManager::get()->RegisterRGBController(rgb_controller); - return; - } - - //V2.12+ firmware uses the new report structure indicated by the V3 usage page - if(info->usage_page == WOOTING_CONFIG_USAGE_PAGE_V3) - { - LOG_DEBUG("[%s] V3 usage page detected - creating V3 Controller", controller_name); - WootingV3KeyboardController *controller = new WootingV3KeyboardController(dev, info->path, wooting_type, name); - - LOG_DEBUG("[%s] Controller created - creating RGBController", controller_name); - RGBController_WootingKeyboard *rgb_controller = new RGBController_WootingKeyboard(controller); - - LOG_DEBUG("[%s] Initialization complete - Registering controller\t%s", controller_name, name.c_str()); - DetectionManager::get()->RegisterRGBController(rgb_controller); - return; - } - - hid_close(dev); - - LOG_TRACE("[%s] No compatible Wooting controller found for device at path %s", controller_name, info->path); + return(detected_controllers); } -/*-----------------------------------------------------*\ -| Wooting keyboards use different PIDs based on which | -| gamepad emulation mode is selected. We can use their | -| base PID, and set the last nibble to get the modes. | -\*-----------------------------------------------------*/ + +/*---------------------------------------------------------*\ +| Wooting keyboards use different PIDs based on which | +| gamepad emulation mode is selected. We can use their | +| base PID, and set the last nibble to get the modes. | +\*---------------------------------------------------------*/ #define REGISTER_WOOTING_DETECTOR(name, vid, pid) \ static HIDDeviceDetector detector_wooting_##vid##_##pid##_base(name, DetectWootingControllers, vid, NONE_PID(pid), HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY); \ static HIDDeviceDetector detector_wooting_##vid##_##pid##_xinp(name, DetectWootingControllers, vid, XINP_PID(pid), HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY); \ static HIDDeviceDetector detector_wooting_##vid##_##pid##_dinp(name, DetectWootingControllers, vid, DINP_PID(pid), HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) - -// Legacy devices with V1 firmware +/*---------------------------------------------------------*\ +| Legacy devices with V1 firmware | +\*---------------------------------------------------------*/ REGISTER_HID_DETECTOR_P("Wooting One (Legacy)", DetectWootingControllers, WOOTING_OLD_VID, WOOTING_ONE_LEGACY_PID, WOOTING_CONFIG_USAGE_PAGE_V2); REGISTER_HID_DETECTOR_P("Wooting Two (Legacy)", DetectWootingControllers, WOOTING_OLD_VID, WOOTING_TWO_LEGACY_PID, WOOTING_CONFIG_USAGE_PAGE_V2); -// All other devices +/*---------------------------------------------------------*\ +| All other devices | +\*---------------------------------------------------------*/ REGISTER_WOOTING_DETECTOR("Wooting One", WOOTING_NEW_VID, WOOTING_ONE_PID ); REGISTER_WOOTING_DETECTOR("Wooting Two", WOOTING_NEW_VID, WOOTING_TWO_PID ); REGISTER_WOOTING_DETECTOR("Wooting Two Lekker Edition", WOOTING_NEW_VID, WOOTING_TWO_LE_PID ); diff --git a/Controllers/WushiController/WushiL50USBDetect.cpp b/Controllers/WushiController/WushiL50USBDetect.cpp index 2e9978d35..50e487f5b 100644 --- a/Controllers/WushiController/WushiL50USBDetect.cpp +++ b/Controllers/WushiController/WushiL50USBDetect.cpp @@ -9,8 +9,8 @@ #include #include "DetectionManager.h" -#include "WushiL50USBController.h" #include "RGBController_WushiL50USB.h" +#include "WushiL50USBController.h" /*-----------------------------------------------------*\ | Wushi vendor ID | @@ -22,17 +22,22 @@ \*-----------------------------------------------------*/ #define WUSHI_PID 0x1234 -void DetectWushiL50USBControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) +DetectedControllers DetectWushiL50USBControllers(hidapi_wrapper wrapper, hid_device_info* info, const std::string& name) { - hid_device* dev = wrapper.hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = wrapper.hid_open_path(info->path); if(dev) { WushiL50USBController* controller = new WushiL50USBController(wrapper, dev, info->path, name); RGBController_WushiL50USB* rgb_controller = new RGBController_WushiL50USB(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_WRAPPED_DETECTOR("JSAUX RGB Docking Station", DetectWushiL50USBControllers, WUSHI_VID, WUSHI_PID); diff --git a/Controllers/XPGSummonerKeyboardController/XPGSummonerControllerDetect.cpp b/Controllers/XPGSummonerKeyboardController/XPGSummonerControllerDetect.cpp index 0c4e310d9..b2fc1f0d8 100644 --- a/Controllers/XPGSummonerKeyboardController/XPGSummonerControllerDetect.cpp +++ b/Controllers/XPGSummonerKeyboardController/XPGSummonerControllerDetect.cpp @@ -9,29 +9,27 @@ | SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ -#include "DetectionManager.h" -#include "XPGSummonerController.h" -#include "RGBController_XPGSummoner.h" #include +#include "DetectionManager.h" +#include "RGBController_XPGSummoner.h" +#include "XPGSummonerController.h" -/******************************************************************************************\ -* * -* DetectXPGSummonerControllers * -* * -* Tests the USB address to see if a XPG Summoner Keyboard controller exists there. * -* * -\******************************************************************************************/ - -void DetectXPGSummonerControllers(hid_device_info *info, const std::string &name) +DetectedControllers DetectXPGSummonerControllers(hid_device_info *info, const std::string &name) { - hid_device *dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { - XPGSummonerController *controller = new XPGSummonerController(dev, info->path, info->product_id, name); - RGBController_XPGSummoner *rgb_controller = new RGBController_XPGSummoner(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + XPGSummonerController* controller = new XPGSummonerController(dev, info->path, info->product_id, name); + RGBController_XPGSummoner* rgb_controller = new RGBController_XPGSummoner(controller); + + detected_controllers.push_back(rgb_controller); } -} /* DetectXPGSummonerControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR_IPU("XPG Summoner Gaming Keyboard", DetectXPGSummonerControllers, XPG_VID, XPG_SUMMONER_PID, 2, 0xFF01, 0x0001); diff --git a/Controllers/YeelightController/YeelightControllerDetect.cpp b/Controllers/YeelightController/YeelightControllerDetect.cpp index 263e55fa2..81e16263c 100644 --- a/Controllers/YeelightController/YeelightControllerDetect.cpp +++ b/Controllers/YeelightController/YeelightControllerDetect.cpp @@ -10,31 +10,24 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "YeelightController.h" #include "ResourceManager.h" #include "RGBController_Yeelight.h" #include "SettingsManager.h" +#include "YeelightController.h" -/******************************************************************************************\ -* * -* DetectYeelightControllers * -* * -* Detect Yeelight devices * -* * -\******************************************************************************************/ - -void DetectYeelightControllers() +DetectedControllers DetectYeelightControllers() { - json yeelight_settings; + DetectedControllers detected_controllers; + json yeelight_settings; - /*-------------------------------------------------*\ - | Get Yeelight settings from settings manager | - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Get Yeelight settings from settings manager | + \*-----------------------------------------------------*/ yeelight_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("YeelightDevices"); - /*-------------------------------------------------*\ - | If the Yeelight settings contains devices, process| - \*-------------------------------------------------*/ + /*-----------------------------------------------------*\ + | If the Yeelight settings contains devices, process | + \*-----------------------------------------------------*/ if(yeelight_settings.contains("devices")) { for(unsigned int device_idx = 0; device_idx < yeelight_settings["devices"].size(); device_idx++) @@ -59,11 +52,12 @@ void DetectYeelightControllers() YeelightController* controller = new YeelightController(yeelight_ip, yeelight_host_ip, music_mode); RGBController_Yeelight* rgb_controller = new RGBController_Yeelight(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } } } -} /* DetectYeelightControllers() */ + return(detected_controllers); +} REGISTER_DETECTOR("Yeelight", DetectYeelightControllers); diff --git a/Controllers/ZETKeyboardController/ZETKeyboardControllerDetect.cpp b/Controllers/ZETKeyboardController/ZETKeyboardControllerDetect.cpp index 0e4149782..2c58d304d 100644 --- a/Controllers/ZETKeyboardController/ZETKeyboardControllerDetect.cpp +++ b/Controllers/ZETKeyboardController/ZETKeyboardControllerDetect.cpp @@ -14,26 +14,31 @@ #include #include "DetectionManager.h" -#include "ZETBladeOpticalController.h" #include "RGBController_ZETBladeOptical.h" +#include "ZETBladeOpticalController.h" -/*-----------------------------------------------------*\ -| ZET keyboard VID/PID pairs | -\*-----------------------------------------------------*/ +/*---------------------------------------------------------*\ +| ZET keyboard VID/PID pairs | +\*---------------------------------------------------------*/ #define ZET_BLADE_OPTICAL_VID 0x2EA8 #define ZET_BLADE_OPTICAL_PID 0x2125 -void DetectZETBladeOptical(hid_device_info* info, const std::string& name) +DetectedControllers DetectZETBladeOptical(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; - if (dev) + dev = hid_open_path(info->path); + + if(dev) { ZETBladeOpticalController* controller = new ZETBladeOpticalController(dev, info->path, name); RGBController_ZETBladeOptical* rgb_controller = new RGBController_ZETBladeOptical(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } REGISTER_HID_DETECTOR_IP("ZET Blade Optical", DetectZETBladeOptical, ZET_BLADE_OPTICAL_VID, ZET_BLADE_OPTICAL_PID, 1, 0xFF00); diff --git a/Controllers/ZalmanZSyncController/ZalmanZSyncControllerDetect.cpp b/Controllers/ZalmanZSyncController/ZalmanZSyncControllerDetect.cpp index 7f566c268..61ce05871 100644 --- a/Controllers/ZalmanZSyncController/ZalmanZSyncControllerDetect.cpp +++ b/Controllers/ZalmanZSyncController/ZalmanZSyncControllerDetect.cpp @@ -17,25 +17,22 @@ #define ZALMAN_VID 0x1C57 #define ZALMAN_Z_SYNC_PID 0x7ED0 -/******************************************************************************************\ -* * -* DetectZalmanZSyncControllers * -* * -* Detect devices supported by the Zalman Z Sync driver * -* * -\******************************************************************************************/ - -void DetectZalmanZSyncControllers(hid_device_info* info, const std::string& name) +DetectedControllers DetectZalmanZSyncControllers(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); + DetectedControllers detected_controllers; + hid_device* dev; + + dev = hid_open_path(info->path); if(dev) { ZalmanZSyncController* controller = new ZalmanZSyncController(dev, info->path, name); RGBController_ZalmanZSync* rgb_controller = new RGBController_ZalmanZSync(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } -} /* DetectZalmanZSyncControllers() */ + + return(detected_controllers); +} REGISTER_HID_DETECTOR("Zalman Z Sync", DetectZalmanZSyncControllers, ZALMAN_VID, ZALMAN_Z_SYNC_PID); diff --git a/Controllers/ZotacTuringGPUController/ZotacTuringGPUControllerDetect.cpp b/Controllers/ZotacTuringGPUController/ZotacTuringGPUControllerDetect.cpp index 419d212a0..529f540a8 100644 --- a/Controllers/ZotacTuringGPUController/ZotacTuringGPUControllerDetect.cpp +++ b/Controllers/ZotacTuringGPUController/ZotacTuringGPUControllerDetect.cpp @@ -10,55 +10,40 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "ZotacTuringGPUController.h" -#include "RGBController_ZotacTuringGPU.h" #include "i2c_smbus.h" #include "pci_ids.h" - -/******************************************************************************************\ -* * -* TestForZotacTuringGPUController * -* * -* Tests the given address to see if an RGB controller exists there. * -* * -\******************************************************************************************/ +#include "RGBController_ZotacTuringGPU.h" +#include "ZotacTuringGPUController.h" bool TestForZotacTuringGPUController(i2c_smbus_interface* bus, u8 i2c_addr) { - /*---------------------------------------------------------*\ - | This command seems to enable the RGB controller (0xF1, | - | 0x00 disables it). | - | Not really sure it's mandatory, but we can still use it | - | for testing the device: if the command succeeds, assume | - | it's a valid device. | - \*---------------------------------------------------------*/ + /*-----------------------------------------------------*\ + | This command seems to enable the RGB controller (0xF1,| + | 0x00 disables it). | + | Not really sure it's mandatory, but we can still use | + | it for testing the device: if the command succeeds, | + | assume it's a valid device. | + \*-----------------------------------------------------*/ u8 data_pkt[] = { ZOTAC_TURING_GPU_REG_COLOR_AND_MODE, 0xF1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; - return (bus->i2c_write_block(i2c_addr, sizeof(data_pkt), data_pkt) >= 0); + return(bus->i2c_write_block(i2c_addr, sizeof(data_pkt), data_pkt) >= 0); } -/******************************************************************************************\ -* * -* DetectZotacTuringGPUControllers * -* * -* Detect ZOTAC Turing RGB controllers on the enumerated I2C busses at address 0x49. * -* * -* bus - pointer to i2c_smbus_interface where RGB device is connected * -* dev - I2C address of RGB device * -* * -\******************************************************************************************/ - -void DetectZotacTuringGPUControllers(i2c_smbus_interface* bus, u8 i2c_addr, const std::string& name) +DetectedControllers DetectZotacTuringGPUControllers(i2c_smbus_interface* bus, u8 i2c_addr, const std::string& name) { + DetectedControllers detected_controllers; + if(TestForZotacTuringGPUController(bus, i2c_addr)) { ZotacTuringGPUController* controller = new ZotacTuringGPUController(bus, i2c_addr, name); RGBController_ZotacTuringGPU* rgb_controller = new RGBController_ZotacTuringGPU(controller); - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } + + return(detected_controllers); } -REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2070 SUPER Twin Fan", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2070S_GAMING_SUB_DEV, 0x49); -REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 SUPER Twin Fan", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080S_SUB_DEV, 0x49); -REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 AMP", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080_AMP_SUB_DEV, 0x49); -REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 Ti AMP", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080_AMP_TI_SUB_DEV, 0x49); +REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2070 SUPER Twin Fan", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2070S_OC_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2070S_GAMING_SUB_DEV, 0x49); +REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 SUPER Twin Fan", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080S_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080S_SUB_DEV, 0x49); +REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 AMP", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080_A_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080_AMP_SUB_DEV, 0x49); +REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 2080 Ti AMP", DetectZotacTuringGPUControllers, NVIDIA_VEN, NVIDIA_RTX2080TI_A_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX2080_AMP_TI_SUB_DEV, 0x49); diff --git a/Controllers/ZotacV2GPUController/ZotacV2GPUControllerDetect.cpp b/Controllers/ZotacV2GPUController/ZotacV2GPUControllerDetect.cpp index 680404663..1e0cab59e 100644 --- a/Controllers/ZotacV2GPUController/ZotacV2GPUControllerDetect.cpp +++ b/Controllers/ZotacV2GPUController/ZotacV2GPUControllerDetect.cpp @@ -10,28 +10,17 @@ \*---------------------------------------------------------*/ #include "DetectionManager.h" -#include "ZotacV2GPUController.h" -#include "RGBController_ZotacV2GPU.h" #include "i2c_smbus.h" -#include "pci_ids.h" #include "LogManager.h" +#include "pci_ids.h" +#include "RGBController_ZotacV2GPU.h" +#include "ZotacV2GPUController.h" -/******************************************************************************************\ -* * -* DetectZotacV2GPUControllers * -* * -* Detect ZOTAC 30/40 series RGB controllers on the enumerated I2C busses * -* at address 0x49. * -* * -* bus - pointer to i2c_smbus_interface where RGB device is connected * -* dev - I2C address of RGB device * -* * -\******************************************************************************************/ - -void DetectZotacV2GPUControllers(i2c_smbus_interface* bus, u8 i2c_addr, const std::string& name) +DetectedControllers DetectZotacV2GPUControllers(i2c_smbus_interface* bus, u8 i2c_addr, const std::string& name) { - u8 rdata_pkt[I2C_SMBUS_BLOCK_MAX] = { 0x00 }; - int rdata_len = sizeof(rdata_pkt); + DetectedControllers detected_controllers; + u8 rdata_pkt[I2C_SMBUS_BLOCK_MAX] = { 0x00 }; + int rdata_len = sizeof(rdata_pkt); if(bus->i2c_read_block(i2c_addr, &rdata_len, rdata_pkt) >= 0) { @@ -40,13 +29,16 @@ void DetectZotacV2GPUControllers(i2c_smbus_interface* bus, u8 i2c_addr, const st if(rgb_controller->config.numberOfZones > 0) { - DetectionManager::get()->RegisterRGBController(rgb_controller); + detected_controllers.push_back(rgb_controller); } else { LOG_ERROR("[%s] RGB controller not registered.", name.c_str()); + delete rgb_controller; } } + + return(detected_controllers); } REGISTER_I2C_PCI_DETECTOR("ZOTAC GAMING GeForce RTX 3070 AMP Holo LHR", DetectZotacV2GPUControllers, NVIDIA_VEN, NVIDIA_RTX3070_LHR_DEV, ZOTAC_SUB_VEN, ZOTAC_RTX3070_AMP_SUB_DEV, 0x49); diff --git a/DetectionManager.cpp b/DetectionManager.cpp index 478a5c630..138cc3cf9 100644 --- a/DetectionManager.cpp +++ b/DetectionManager.cpp @@ -155,7 +155,7 @@ DetectionManager::~DetectionManager() /*-----------------------------------------------------*\ | Exit HID in background thread | \*-----------------------------------------------------*/ - RunInBackgroundThread(std::bind(&DetectionManager::BackgroundHidExit, this)); + RunInBackgroundThread(std::bind(&DetectionManager::BackgroundHIDExit, this)); /*-----------------------------------------------------*\ | Mark the background detection thread as not running | @@ -622,7 +622,7 @@ void DetectionManager::BackgroundDetectDevices() | Also initialize HID on first detection, as this | | must be called from the background thread | \*-------------------------------------------------*/ - BackgroundHidInit(); + BackgroundHIDInit(); initial_detection = false; } @@ -936,7 +936,13 @@ void DetectionManager::BackgroundDetectI2CDRAMDevices(json detector_settings) SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); std::vector matching_slots = slots_with_jedec(slots, i2c_dram_device_detectors[i2c_detector_idx].jedec_id); - i2c_dram_device_detectors[i2c_detector_idx].function(i2c_buses[bus], matching_slots, i2c_dram_device_detectors[i2c_detector_idx].name); + + DetectedControllers detected_controllers = i2c_dram_device_detectors[i2c_detector_idx].function(i2c_buses[bus], matching_slots, i2c_dram_device_detectors[i2c_detector_idx].name); + + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } } LOG_TRACE("[%s] %s detection end", DETECTIONMANAGER, detection_string.c_str()); @@ -987,7 +993,12 @@ void DetectionManager::BackgroundDetectI2CPCIDevices(json detector_settings) i2c_buses[bus]->pci_subsystem_vendor == i2c_pci_device_detectors[i2c_detector_idx].subven_id && i2c_buses[bus]->pci_subsystem_device == i2c_pci_device_detectors[i2c_detector_idx].subdev_id) { - i2c_pci_device_detectors[i2c_detector_idx].function(i2c_buses[bus], i2c_pci_device_detectors[i2c_detector_idx].i2c_addr, i2c_pci_device_detectors[i2c_detector_idx].name); + DetectedControllers detected_controllers = i2c_pci_device_detectors[i2c_detector_idx].function(i2c_buses[bus], i2c_pci_device_detectors[i2c_detector_idx].i2c_addr, i2c_pci_device_detectors[i2c_detector_idx].name); + + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } } } } @@ -1020,86 +1031,8 @@ void DetectionManager::BackgroundDetectHIDDevices(hid_device_info* hid_devices, while(current_hid_device) { - if(LogManager::get()->getLoglevel() >= LL_DEBUG) - { - const char* manu_name = StringUtils::wchar_to_char(current_hid_device->manufacturer_string); - const char* prod_name = StringUtils::wchar_to_char(current_hid_device->product_string); - - LOG_DEBUG("[%s] %04X:%04X U=%04X P=0x%04X I=%d - %-25s - %s", DETECTIONMANAGER, current_hid_device->vendor_id, current_hid_device->product_id, current_hid_device->usage, current_hid_device->usage_page, current_hid_device->interface_number, manu_name, prod_name); - } - - detection_string = ""; - - SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - - /*-------------------------------------------------*\ - | Loop through all available detectors. If all | - | required information matches, run the detector | - \*-------------------------------------------------*/ - for(unsigned int hid_detector_idx = 0; hid_detector_idx < (unsigned int)hid_device_detectors.size() && detection_in_progress.load(); hid_detector_idx++) - { - HIDDeviceDetectorBlock & detector = hid_device_detectors[hid_detector_idx]; - - if(detector.compare(current_hid_device)) - { - detection_string = detector.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]; - } - - LOG_DEBUG("[%s] %s is %s", DETECTIONMANAGER, detection_string.c_str(), ((this_device_enabled == true) ? "enabled" : "disabled")); - - if(this_device_enabled) - { - SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - - detector.function(current_hid_device, hid_device_detectors[hid_detector_idx].name); - } - } - } - - /*-------------------------------------------------*\ - | Loop through all available wrapped HID detectors. | - | If all required information matches, run the | - | detector | - \*-------------------------------------------------*/ - for(unsigned int hid_detector_idx = 0; hid_detector_idx < (unsigned int)hid_wrapped_device_detectors.size() && detection_in_progress.load(); hid_detector_idx++) - { - HIDWrappedDeviceDetectorBlock & detector = hid_wrapped_device_detectors[hid_detector_idx]; - - if(detector.compare(current_hid_device)) - { - detection_string = detector.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]; - } - - LOG_DEBUG("[%s] %s is %s", DETECTIONMANAGER, detection_string.c_str(), ((this_device_enabled == true) ? "enabled" : "disabled")); - - if(this_device_enabled) - { - SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - - detector.function(default_hidapi_wrapper, current_hid_device, hid_wrapped_device_detectors[hid_detector_idx].name); - } - } - } + RunHIDDetector(current_hid_device, detector_settings); + RunHIDWrappedDetector(&default_hidapi_wrapper, current_hid_device, detector_settings); /*-------------------------------------------------*\ | Update detection percent | @@ -1167,8 +1100,12 @@ void DetectionManager::BackgroundDetectHIDDevicesSafe(json detector_settings) { SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - detector.function(current_hid_device, hid_device_detectors[hid_detector_idx].name); + DetectedControllers detected_controllers = detector.function(current_hid_device, hid_device_detectors[hid_detector_idx].name); + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } LOG_TRACE("[%s] %s detection end", DETECTIONMANAGER, detection_string.c_str()); } } @@ -1234,52 +1171,7 @@ void DetectionManager::BackgroundDetectHIDDevicesWrapped(hid_device_info* hid_de while(current_hid_device) { - if(LogManager::get()->getLoglevel() >= LL_DEBUG) - { - const char* manu_name = StringUtils::wchar_to_char(current_hid_device->manufacturer_string); - const char* prod_name = StringUtils::wchar_to_char(current_hid_device->product_string); - - LOG_DEBUG("[%s] %04X:%04X U=%04X P=0x%04X I=%d - %-25s - %s", DETECTIONMANAGER, current_hid_device->vendor_id, current_hid_device->product_id, current_hid_device->usage, current_hid_device->usage_page, current_hid_device->interface_number, manu_name, prod_name); - } - - detection_string = ""; - - SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - - /*---------------------------------------------*\ - | Loop through all available wrapped HID | - | detectors. If all required information | - | matches, run the detector | - \*---------------------------------------------*/ - for(unsigned int hid_detector_idx = 0; hid_detector_idx < (unsigned int)hid_wrapped_device_detectors.size() && detection_in_progress.load(); hid_detector_idx++) - { - HIDWrappedDeviceDetectorBlock & detector = hid_wrapped_device_detectors[hid_detector_idx]; - - if(detector.compare(current_hid_device)) - { - detection_string = detector.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]; - } - - LOG_DEBUG("[%s] %s is %s", DETECTIONMANAGER, detection_string.c_str(), ((this_device_enabled == true) ? "enabled" : "disabled")); - - if(this_device_enabled) - { - SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - - detector.function(wrapper, current_hid_device, detector.name); - } - } - } + RunHIDWrappedDetector(&wrapper, current_hid_device, detector_settings); /*---------------------------------------------*\ | Update detection percent | @@ -1329,7 +1221,12 @@ void DetectionManager::BackgroundDetectOtherDevices(json detector_settings) { SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); - device_detectors[detector_idx](); + DetectedControllers detected_controllers = device_detectors[detector_idx](); + + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } } LOG_TRACE("[%s] %s detection end", DETECTIONMANAGER, detection_string.c_str()); @@ -1347,7 +1244,7 @@ void DetectionManager::BackgroundDetectOtherDevices(json detector_settings) } } -void DetectionManager::BackgroundHidExit() +void DetectionManager::BackgroundHIDExit() { /*-----------------------------------------------------*\ | Exit HID interface | @@ -1357,7 +1254,7 @@ void DetectionManager::BackgroundHidExit() LOG_DEBUG("[%s] Exiting HID interface: %s", DETECTIONMANAGER, ((hid_status == 0) ? "Success" : "Failed")); } -void DetectionManager::BackgroundHidInit() +void DetectionManager::BackgroundHIDInit() { /*-----------------------------------------------------*\ | Initialize HID interface | @@ -1367,6 +1264,121 @@ void DetectionManager::BackgroundHidInit() LOG_DEBUG("[%s] Initializing HID interfaces: %s", DETECTIONMANAGER, ((hid_status == 0) ? "Success" : "Failed")); } +/*---------------------------------------------------------*\ +| Functions to run detectors | +\*---------------------------------------------------------*/ +void DetectionManager::RunHIDDetector(hid_device_info* current_hid_device, json detector_settings) +{ + if(LogManager::get()->getLoglevel() >= LL_DEBUG) + { + const char* manu_name = StringUtils::wchar_to_char(current_hid_device->manufacturer_string); + const char* prod_name = StringUtils::wchar_to_char(current_hid_device->product_string); + + LOG_DEBUG("[%s] %04X:%04X U=%04X P=0x%04X I=%d - %-25s - %s", DETECTIONMANAGER, current_hid_device->vendor_id, current_hid_device->product_id, current_hid_device->usage, current_hid_device->usage_page, current_hid_device->interface_number, manu_name, prod_name); + } + + detection_string = ""; + + SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); + + /*-----------------------------------------------------*\ + | Loop through all available detectors. If all | + | required information matches, run the detector. | + \*-----------------------------------------------------*/ + for(std::size_t hid_detector_idx = 0; hid_detector_idx < hid_device_detectors.size() && detection_in_progress.load(); hid_detector_idx++) + { + HIDDeviceDetectorBlock & detector = hid_device_detectors[hid_detector_idx]; + + if(detector.compare(current_hid_device)) + { + detection_string = detector.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]; + } + + LOG_DEBUG("[%s] %s is %s", DETECTIONMANAGER, detection_string.c_str(), ((this_device_enabled == true) ? "enabled" : "disabled")); + + if(this_device_enabled) + { + SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); + + DetectedControllers detected_controllers = detector.function(current_hid_device, detector.name); + + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } + } + + break; + } + } +} + +void DetectionManager::RunHIDWrappedDetector(const hidapi_wrapper* wrapper, hid_device_info* current_hid_device, json detector_settings) +{ + if(LogManager::get()->getLoglevel() >= LL_DEBUG) + { + const char* manu_name = StringUtils::wchar_to_char(current_hid_device->manufacturer_string); + const char* prod_name = StringUtils::wchar_to_char(current_hid_device->product_string); + + LOG_DEBUG("[%s] %04X:%04X U=%04X P=0x%04X I=%d - %-25s - %s", DETECTIONMANAGER, current_hid_device->vendor_id, current_hid_device->product_id, current_hid_device->usage, current_hid_device->usage_page, current_hid_device->interface_number, manu_name, prod_name); + } + + detection_string = ""; + + SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); + + /*-----------------------------------------------------*\ + | Loop through all available wrapped HID detectors. If | + | all required information matches, run the detector. | + \*-----------------------------------------------------*/ + for(std::size_t hid_detector_idx = 0; hid_detector_idx < hid_wrapped_device_detectors.size() && detection_in_progress.load(); hid_detector_idx++) + { + HIDWrappedDeviceDetectorBlock & detector = hid_wrapped_device_detectors[hid_detector_idx]; + + if(detector.compare(current_hid_device)) + { + detection_string = detector.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]; + } + + LOG_DEBUG("[%s] %s is %s", DETECTIONMANAGER, detection_string.c_str(), ((this_device_enabled == true) ? "enabled" : "disabled")); + + if(this_device_enabled) + { + SignalUpdate(DETECTIONMANAGER_UPDATE_REASON_DETECTION_PROGRESS_CHANGED); + + DetectedControllers detected_controllers = detector.function(*wrapper, current_hid_device, detector.name); + + for(std::size_t detected_controller_idx = 0; detected_controller_idx < detected_controllers.size(); detected_controller_idx++) + { + RegisterRGBController(detected_controllers[detected_controller_idx]); + } + } + + break; + } + } +} + /*---------------------------------------------------------*\ | Detection processing functions | \*---------------------------------------------------------*/ diff --git a/DetectionManager.h b/DetectionManager.h index f2a6f2f6c..49358bfec 100644 --- a/DetectionManager.h +++ b/DetectionManager.h @@ -43,15 +43,17 @@ using json = nlohmann::json; /*---------------------------------------------------------*\ | Detector Function Types | \*---------------------------------------------------------*/ -typedef std::function I2CBusDetectorFunction; -typedef std::function DeviceDetectorFunction; -typedef std::function&)> I2CDeviceDetectorFunction; -typedef std::function&, const std::string&)> I2CDRAMDeviceDetectorFunction; -typedef std::function I2CPCIDeviceDetectorFunction; -typedef std::function HIDDeviceDetectorFunction; -typedef std::function HIDWrappedDeviceDetectorFunction; -typedef std::function DynamicDetectorFunction; -typedef std::function PreDetectionHookFunction; +typedef std::vector DetectedControllers; + +typedef std::function I2CBusDetectorFunction; +typedef std::function DeviceDetectorFunction; +typedef std::function&)> I2CDeviceDetectorFunction; +typedef std::function&, const std::string&)> I2CDRAMDeviceDetectorFunction; +typedef std::function I2CPCIDeviceDetectorFunction; +typedef std::function HIDDeviceDetectorFunction; +typedef std::function HIDWrappedDeviceDetectorFunction; +typedef std::function DynamicDetectorFunction; +typedef std::function PreDetectionHookFunction; /*---------------------------------------------------------*\ | Detector Block Types | @@ -283,8 +285,14 @@ private: void BackgroundDetectI2CDRAMDevices(json detector_settings); void BackgroundDetectI2CPCIDevices(json detector_settings); void BackgroundDetectOtherDevices(json detector_settings); - void BackgroundHidExit(); - void BackgroundHidInit(); + void BackgroundHIDExit(); + void BackgroundHIDInit(); + + /*-----------------------------------------------------*\ + | Functions to run detectors | + \*-----------------------------------------------------*/ + void RunHIDDetector(hid_device_info* current_hid_device, json detector_settings); + void RunHIDWrappedDetector(const hidapi_wrapper* wrapper, hid_device_info* current_hid_device, json detector_settings); /*-----------------------------------------------------*\ | Detection processing functions |