From 9126ded32e41a62a700ea4c2b71f663ee3b925a7 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 18 Aug 2019 01:24:11 -0500 Subject: [PATCH] Move detection functions into their own files --- OpenAuraSDK.pro | 5 + OpenAuraSDK/AuraControllerDetect.cpp | 125 +++++ OpenAuraSDK/CorsairControllerDetect.cpp | 109 ++++ OpenAuraSDK/CorsairProControllerDetect.cpp | 127 +++++ OpenAuraSDK/HyperXControllerDetect.cpp | 70 +++ OpenAuraSDK/OpenAuraSDK.cpp | 556 +-------------------- OpenAuraSDK/OpenRazerDetect.cpp | 123 +++++ 7 files changed, 569 insertions(+), 546 deletions(-) create mode 100644 OpenAuraSDK/AuraControllerDetect.cpp create mode 100644 OpenAuraSDK/CorsairControllerDetect.cpp create mode 100644 OpenAuraSDK/CorsairProControllerDetect.cpp create mode 100644 OpenAuraSDK/HyperXControllerDetect.cpp create mode 100644 OpenAuraSDK/OpenRazerDetect.cpp diff --git a/OpenAuraSDK.pro b/OpenAuraSDK.pro index 0c007729..65133e9e 100644 --- a/OpenAuraSDK.pro +++ b/OpenAuraSDK.pro @@ -8,12 +8,17 @@ TEMPLATE = app SOURCES += \ OpenAuraSDK/i2c_smbus.cpp \ OpenAuraSDK/AuraController.cpp \ + OpenAuraSDK/AuraControllerDetect.cpp \ OpenAuraSDK/OpenAuraSDK.cpp \ OpenAuraSDK/i2c_smbus_linux.cpp \ OpenAuraSDK/OpenAuraSDKQtDialog.cpp \ OpenAuraSDK/CorsairController.cpp \ + OpenAuraSDK/CorsairControllerDetect.cpp \ OpenAuraSDK/CorsairProController.cpp \ + OpenAuraSDK/CorsairProControllerDetect.cpp \ OpenAuraSDK/HyperXController.cpp \ + OpenAuraSDK/HyperXControllerDetect.cpp \ + OpenAuraSDK/OpenRazerDetect.cpp \ OpenAuraSDK/RGBController_Aura.cpp \ OpenAuraSDK/RGBController_Corsair.cpp \ OpenAuraSDK/RGBController_CorsairPro.cpp \ diff --git a/OpenAuraSDK/AuraControllerDetect.cpp b/OpenAuraSDK/AuraControllerDetect.cpp new file mode 100644 index 00000000..0137afad --- /dev/null +++ b/OpenAuraSDK/AuraControllerDetect.cpp @@ -0,0 +1,125 @@ +#include "AuraController.h" +#include "RGBController.h" +#include "RGBController_Aura.h" +#include "i2c_smbus.h" +#include +#include +#include + +/******************************************************************************************\ +* * +* TestForAuraController * +* * +* Tests the given address to see if an Aura 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 TestForAuraController(i2c_smbus_interface* bus, unsigned char address) +{ + bool pass = false; + + int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); + + if (res >= 0) + { + pass = true; + + for (int i = 0xA0; i < 0xB0; i++) + { + res = bus->i2c_smbus_read_byte_data(address, i); + + if (res != (i - 0xA0)) + { + pass = false; + } + } + } + + return(pass); + +} /* TestForAuraController() */ + +/******************************************************************************************\ +* * +* DetectAuraControllers * +* * +* Detect Aura controllers on the enumerated I2C busses. Searches for Aura-enabled * +* RAM at 0x77 and tries to initialize their slot addresses, then searches for them * +* at their correct initialized addresses. Also looks for motherboard controller at * +* address 0x4E. * +* * +* bus - pointer to i2c_smbus_interface where Aura device is connected * +* dev - I2C address of Aura device * +* * +\******************************************************************************************/ + +void DetectAuraControllers(std::vector &busses, std::vector &rgb_controllers) +{ + AuraController* new_aura; + RGBController_Aura* new_controller; + + for (unsigned int bus = 0; bus < busses.size(); bus++) + { + // Remap Aura-enabled RAM modules on 0x77 + for (unsigned int slot = 0; slot < 8; slot++) + { + int res = busses[bus]->i2c_smbus_write_quick(0x77, I2C_SMBUS_WRITE); + + if (res < 0) + { + break; + } + + AuraController temp_controller(busses[bus], 0x77); + + temp_controller.AuraRegisterWrite(AURA_REG_SLOT_INDEX, slot); + temp_controller.AuraRegisterWrite(AURA_REG_I2C_ADDRESS, 0xE0 + (slot << 1)); + } + + // Add Aura-enabled controllers at their remapped addresses + for (unsigned int slot = 0; slot < 8; slot++) + { + if (TestForAuraController(busses[bus], 0x70 + slot)) + { + new_aura = new AuraController(busses[bus], 0x70 + slot); + new_controller = new RGBController_Aura(new_aura); + rgb_controllers.push_back(new_controller); + } + } + + // Check for Aura controller at 0x40 + if (TestForAuraController(busses[bus], 0x40)) + { + new_aura = new AuraController(busses[bus], 0x40); + new_controller = new RGBController_Aura(new_aura); + rgb_controllers.push_back(new_controller); + } + + // Check for Aura controller at 0x4E + if (TestForAuraController(busses[bus], 0x4E)) + { + new_aura = new AuraController(busses[bus], 0x4E); + new_controller = new RGBController_Aura(new_aura); + rgb_controllers.push_back(new_controller); + } + + // Check for Aura controller at 0x4F + if (TestForAuraController(busses[bus], 0x4F)) + { + new_aura = new AuraController(busses[bus], 0x4F); + new_controller = new RGBController_Aura(new_aura); + rgb_controllers.push_back(new_controller); + } + + // Check for Aura controller at 0x66 + if (TestForAuraController(busses[bus], 0x66)) + { + new_aura = new AuraController(busses[bus], 0x66); + new_controller = new RGBController_Aura(new_aura); + rgb_controllers.push_back(new_controller); + } + } + +} /* DetectAuraControllers() */ \ No newline at end of file diff --git a/OpenAuraSDK/CorsairControllerDetect.cpp b/OpenAuraSDK/CorsairControllerDetect.cpp new file mode 100644 index 00000000..9e2f3e88 --- /dev/null +++ b/OpenAuraSDK/CorsairControllerDetect.cpp @@ -0,0 +1,109 @@ +#include "CorsairController.h" +#include "RGBController.h" +#include "RGBController_Corsair.h" +#include "i2c_smbus.h" +#include +#include +#include + +/******************************************************************************************\ +* * +* TestForCorsairController * +* * +* Tests the given address to see if a Corsair controller exists there. * +* * +\******************************************************************************************/ + +bool TestForCorsairController(i2c_smbus_interface* bus, unsigned char address) +{ + bool pass = false; + + int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); + + if (res >= 0) + { + pass = true; + + for (int i = 0xA0; i < 0xB0; i++) + { + res = bus->i2c_smbus_read_byte_data(address, i); + + if (res != 0xBA) + { + pass = false; + } + } + } + + return(pass); + +} /* TestForCorsairController() */ + +/******************************************************************************************\ +* * +* DetectCorsairControllers * +* * +* Detect Corsair controllers on the enumerated I2C busses. * +* * +* bus - pointer to i2c_smbus_interface where Aura device is connected * +* dev - I2C address of Aura device * +* * +\******************************************************************************************/ + +void DetectCorsairControllers(std::vector &busses, std::vector &rgb_controllers) +{ + CorsairController* new_corsair; + RGBController_Corsair* new_controller; + + for (unsigned int bus = 0; bus < busses.size(); bus++) + { + // Check for Corsair controller at 0x58 + if (TestForCorsairController(busses[bus], 0x58)) + { + new_corsair = new CorsairController(busses[bus], 0x58); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x59 + if (TestForCorsairController(busses[bus], 0x59)) + { + new_corsair = new CorsairController(busses[bus], 0x59); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5A + if (TestForCorsairController(busses[bus], 0x5A)) + { + new_corsair = new CorsairController(busses[bus], 0x5A); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5B + if (TestForCorsairController(busses[bus], 0x5B)) + { + new_corsair = new CorsairController(busses[bus], 0x5B); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5C + if (TestForCorsairController(busses[bus], 0x5C)) + { + new_corsair = new CorsairController(busses[bus], 0x5C); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5D + if (TestForCorsairController(busses[bus], 0x5D)) + { + new_corsair = new CorsairController(busses[bus], 0x5D); + new_controller = new RGBController_Corsair(new_corsair); + rgb_controllers.push_back(new_controller); + } + } + +} /* DetectCorsairControllers() */ \ No newline at end of file diff --git a/OpenAuraSDK/CorsairProControllerDetect.cpp b/OpenAuraSDK/CorsairProControllerDetect.cpp new file mode 100644 index 00000000..f19b154d --- /dev/null +++ b/OpenAuraSDK/CorsairProControllerDetect.cpp @@ -0,0 +1,127 @@ +#include "CorsairProController.h" +#include "RGBController.h" +#include "RGBController_CorsairPro.h" +#include "i2c_smbus.h" +#include +#include +#include + +/******************************************************************************************\ +* * +* TestForCorsairProController * +* * +* Tests the given address to see if a Corsair Pro controller exists there. * +* * +\******************************************************************************************/ + +bool TestForCorsairProController(i2c_smbus_interface* bus, unsigned char address) +{ + bool pass = false; + + int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); + + if (res >= 0) + { + pass = true; + + res = bus->i2c_smbus_read_byte_data(address, 0x24); + + if (res != 0x02) + { + pass = false; + } + + res = bus->i2c_smbus_read_byte_data(address, 0x25); + + if (res != 0x02) + { + pass = false; + } + + res = bus->i2c_smbus_read_byte_data(address, 0x43); + + if (res != 0x1C) + { + pass = false; + } + + res = bus->i2c_smbus_read_byte_data(address, 0x44); + + if (res != 0x03) + { + pass = false; + } + } + + return(pass); + +} /* TestForCorsairProController() */ + +/******************************************************************************************\ +* * +* DetectCorsairProControllers * +* * +* Detect Corsair 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 DetectCorsairProControllers(std::vector &busses, std::vector &rgb_controllers) +{ + CorsairProController* new_corsair_pro; + RGBController_CorsairPro* new_controller; + + for (unsigned int bus = 0; bus < busses.size(); bus++) + { + // Check for Corsair controller at 0x58 + if (TestForCorsairProController(busses[bus], 0x58)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x58); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x59 + if (TestForCorsairProController(busses[bus], 0x59)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x59); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5A + if (TestForCorsairProController(busses[bus], 0x5A)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x5A); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5B + if (TestForCorsairProController(busses[bus], 0x5B)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x5B); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5C + if (TestForCorsairProController(busses[bus], 0x5C)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x5C); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + + // Check for Corsair controller at 0x5D + if (TestForCorsairProController(busses[bus], 0x5D)) + { + new_corsair_pro = new CorsairProController(busses[bus], 0x5D); + new_controller = new RGBController_CorsairPro(new_corsair_pro); + rgb_controllers.push_back(new_controller); + } + } + +} /* DetectCorsairProControllers() */ \ No newline at end of file diff --git a/OpenAuraSDK/HyperXControllerDetect.cpp b/OpenAuraSDK/HyperXControllerDetect.cpp new file mode 100644 index 00000000..9e6f5e97 --- /dev/null +++ b/OpenAuraSDK/HyperXControllerDetect.cpp @@ -0,0 +1,70 @@ +#include "HyperXController.h" +#include "RGBController.h" +#include "RGBController_HyperX.h" +#include "i2c_smbus.h" +#include +#include +#include + +/******************************************************************************************\ +* * +* TestForHyperXController * +* * +* Tests the given address to see if a HyperX controller exists there. * +* * +\******************************************************************************************/ + +bool TestForHyperXController(i2c_smbus_interface* bus, unsigned char address) +{ + bool pass = false; + + int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); + + if (res >= 0) + { + pass = true; + + for (int i = 0xA0; i < 0xB0; i++) + { + res = bus->i2c_smbus_read_byte_data(address, i); + + if (res != i) + { + pass = false; + } + } + } + + return(pass); + +} /* TestForHyperXController() */ + + +/******************************************************************************************\ +* * +* DetectHyperXControllers * +* * +* Detect HyperX controllers on the enumerated I2C busses. * +* * +* bus - pointer to i2c_smbus_interface where Aura device is connected * +* dev - I2C address of Aura device * +* * +\******************************************************************************************/ + +void DetectHyperXControllers(std::vector &busses, std::vector &rgb_controllers) +{ + HyperXController* new_hyperx; + RGBController_HyperX* new_controller; + + for (unsigned int bus = 0; bus < busses.size(); bus++) + { + // Check for HyperX controller at 0x27 + if (TestForHyperXController(busses[bus], 0x27)) + { + new_hyperx = new HyperXController(busses[bus], 0x27); + new_controller = new RGBController_HyperX(new_hyperx); + rgb_controllers.push_back(new_controller); + } + } + +} /* DetectHyperXControllers() */ \ No newline at end of file diff --git a/OpenAuraSDK/OpenAuraSDK.cpp b/OpenAuraSDK/OpenAuraSDK.cpp index c9a4ef3d..4a6b2ba3 100644 --- a/OpenAuraSDK/OpenAuraSDK.cpp +++ b/OpenAuraSDK/OpenAuraSDK.cpp @@ -7,15 +7,7 @@ \******************************************************************************************/ #include "AuraController.h" -#include "CorsairController.h" -#include "CorsairProController.h" -#include "HyperXController.h" #include "RGBController.h" -#include "RGBController_Aura.h" -#include "RGBController_Corsair.h" -#include "RGBController_CorsairPro.h" -#include "RGBController_HyperX.h" -#include "RGBController_OpenRazer.h" #include "RGBController_AorusGPU.h" #include "RGBController_LEDStrip.h" #include "i2c_smbus.h" @@ -44,10 +36,6 @@ #endif /* WIN32 */ -std::vector aura_controllers; -std::vector corsair_controllers; -std::vector corsair_pro_controllers; -std::vector hyperx_controllers; std::vector busses; std::vector rgb_controllers; @@ -333,507 +321,6 @@ void DetectI2CBusses() #endif /* WIN32 */ -/******************************************************************************************\ -* * -* TestForAuraController * -* * -* Tests the given address to see if an Aura 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 TestForAuraController(i2c_smbus_interface* bus, unsigned char address) -{ - bool pass = false; - - int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); - - if (res >= 0) - { - pass = true; - - for (int i = 0xA0; i < 0xB0; i++) - { - res = bus->i2c_smbus_read_byte_data(address, i); - - if (res != (i - 0xA0)) - { - pass = false; - } - } - } - - return(pass); - -} /* TestForAuraController() */ - - -/******************************************************************************************\ -* * -* TestForCorsairController * -* * -* Tests the given address to see if a Corsair controller exists there. * -* * -\******************************************************************************************/ - -bool TestForCorsairController(i2c_smbus_interface* bus, unsigned char address) -{ - bool pass = false; - - int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); - - if (res >= 0) - { - pass = true; - - for (int i = 0xA0; i < 0xB0; i++) - { - res = bus->i2c_smbus_read_byte_data(address, i); - - if (res != 0xBA) - { - pass = false; - } - } - } - - return(pass); - -} /* TestForCorsairController() */ - - -/******************************************************************************************\ -* * -* TestForCorsairProController * -* * -* Tests the given address to see if a Corsair Pro controller exists there. * -* * -\******************************************************************************************/ - -bool TestForCorsairProController(i2c_smbus_interface* bus, unsigned char address) -{ - bool pass = false; - - int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); - - if (res >= 0) - { - pass = true; - - res = bus->i2c_smbus_read_byte_data(address, 0x24); - - if (res != 0x02) - { - pass = false; - } - - res = bus->i2c_smbus_read_byte_data(address, 0x25); - - if (res != 0x02) - { - pass = false; - } - - res = bus->i2c_smbus_read_byte_data(address, 0x43); - - if (res != 0x1C) - { - pass = false; - } - - res = bus->i2c_smbus_read_byte_data(address, 0x44); - - if (res != 0x03) - { - pass = false; - } - } - - return(pass); - -} /* TestForCorsairProController() */ - - -/******************************************************************************************\ -* * -* TestForHyperXController * -* * -* Tests the given address to see if a HyperX controller exists there. * -* * -\******************************************************************************************/ - -bool TestForHyperXController(i2c_smbus_interface* bus, unsigned char address) -{ - bool pass = false; - - int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE); - - if (res >= 0) - { - pass = true; - - for (int i = 0xA0; i < 0xB0; i++) - { - res = bus->i2c_smbus_read_byte_data(address, i); - - if (res != i) - { - pass = false; - } - } - } - - return(pass); - -} /* TestForHyperXController() */ - - -/******************************************************************************************\ -* * -* DetectAuraControllers * -* * -* Detect Aura controllers on the enumerated I2C busses. Searches for Aura-enabled * -* RAM at 0x77 and tries to initialize their slot addresses, then searches for them * -* at their correct initialized addresses. Also looks for motherboard controller at * -* address 0x4E. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectAuraControllers() -{ - AuraController* new_controller; - - for (unsigned int bus = 0; bus < busses.size(); bus++) - { - // Remap Aura-enabled RAM modules on 0x77 - for (unsigned int slot = 0; slot < 8; slot++) - { - int res = busses[bus]->i2c_smbus_write_quick(0x77, I2C_SMBUS_WRITE); - - if (res < 0) - { - break; - } - - AuraController temp_controller(busses[bus], 0x77); - - temp_controller.AuraRegisterWrite(AURA_REG_SLOT_INDEX, slot); - temp_controller.AuraRegisterWrite(AURA_REG_I2C_ADDRESS, 0xE0 + (slot << 1)); - } - - // Add Aura-enabled controllers at their remapped addresses - for (unsigned int slot = 0; slot < 8; slot++) - { - if (TestForAuraController(busses[bus], 0x70 + slot)) - { - new_controller = new AuraController(busses[bus], 0x70 + slot); - aura_controllers.push_back(new_controller); - } - } - - // Check for Aura controller at 0x40 - if (TestForAuraController(busses[bus], 0x40)) - { - new_controller = new AuraController(busses[bus], 0x40); - aura_controllers.push_back(new_controller); - } - - // Check for Aura controller at 0x4E - if (TestForAuraController(busses[bus], 0x4E)) - { - new_controller = new AuraController(busses[bus], 0x4E); - aura_controllers.push_back(new_controller); - } - - // Check for Aura controller at 0x4F - if (TestForAuraController(busses[bus], 0x4F)) - { - new_controller = new AuraController(busses[bus], 0x4F); - aura_controllers.push_back(new_controller); - } - - // Check for Aura controller at 0x66 - if (TestForAuraController(busses[bus], 0x66)) - { - new_controller = new AuraController(busses[bus], 0x66); - aura_controllers.push_back(new_controller); - } - } - -} /* DetectAuraControllers() */ - - -/******************************************************************************************\ -* * -* DetectCorsairControllers * -* * -* Detect Corsair controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectCorsairControllers() -{ - CorsairController* new_controller; - - for (unsigned int bus = 0; bus < busses.size(); bus++) - { - // Check for Corsair controller at 0x58 - if (TestForCorsairController(busses[bus], 0x58)) - { - new_controller = new CorsairController(busses[bus], 0x58); - corsair_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x59 - if (TestForCorsairController(busses[bus], 0x59)) - { - new_controller = new CorsairController(busses[bus], 0x59); - corsair_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5A - if (TestForCorsairController(busses[bus], 0x5A)) - { - new_controller = new CorsairController(busses[bus], 0x5A); - corsair_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5B - if (TestForCorsairController(busses[bus], 0x5B)) - { - new_controller = new CorsairController(busses[bus], 0x5B); - corsair_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5C - if (TestForCorsairController(busses[bus], 0x5C)) - { - new_controller = new CorsairController(busses[bus], 0x5C); - corsair_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5D - if (TestForCorsairController(busses[bus], 0x5D)) - { - new_controller = new CorsairController(busses[bus], 0x5D); - corsair_controllers.push_back(new_controller); - } - } - -} /* DetectCorsairControllers() */ - - -/******************************************************************************************\ -* * -* DetectCorsairProControllers * -* * -* Detect Corsair 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 DetectCorsairProControllers() -{ - CorsairProController* new_controller; - - for (unsigned int bus = 0; bus < busses.size(); bus++) - { - // Check for Corsair controller at 0x58 - if (TestForCorsairProController(busses[bus], 0x58)) - { - new_controller = new CorsairProController(busses[bus], 0x58); - corsair_pro_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x59 - if (TestForCorsairProController(busses[bus], 0x59)) - { - new_controller = new CorsairProController(busses[bus], 0x59); - corsair_pro_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5A - if (TestForCorsairProController(busses[bus], 0x5A)) - { - new_controller = new CorsairProController(busses[bus], 0x5A); - corsair_pro_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5B - if (TestForCorsairProController(busses[bus], 0x5B)) - { - new_controller = new CorsairProController(busses[bus], 0x5B); - corsair_pro_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5C - if (TestForCorsairProController(busses[bus], 0x5C)) - { - new_controller = new CorsairProController(busses[bus], 0x5C); - corsair_pro_controllers.push_back(new_controller); - } - - // Check for Corsair controller at 0x5D - if (TestForCorsairProController(busses[bus], 0x5D)) - { - new_controller = new CorsairProController(busses[bus], 0x5D); - corsair_pro_controllers.push_back(new_controller); - } - } - -} /* DetectCorsairProControllers() */ - - -/******************************************************************************************\ -* * -* DetectHyperXControllers * -* * -* Detect HyperX controllers on the enumerated I2C busses. * -* * -* bus - pointer to i2c_smbus_interface where Aura device is connected * -* dev - I2C address of Aura device * -* * -\******************************************************************************************/ - -void DetectHyperXControllers() -{ - HyperXController* new_controller; - - for (unsigned int bus = 0; bus < busses.size(); bus++) - { - // Check for HyperX controller at 0x27 - if (TestForHyperXController(busses[bus], 0x27)) - { - new_controller = new HyperXController(busses[bus], 0x27); - hyperx_controllers.push_back(new_controller); - } - } - -} /* DetectHyperXControllers() */ - - -/******************************************************************************************\ -* * -* DetectOpenRazerControllers * -* * -* Detect devices supported by the OpenRazer kernel drivers * -* * * -\******************************************************************************************/ - -void DetectOpenRazerControllers() -{ - char driver_path[512]; - DIR *dir; - struct dirent *ent; - int test_fd; - bool done = false; - int driver_to_read = 0; - - while(driver_to_read < 7) - { - switch(driver_to_read) - { - case 0: - strcpy(driver_path, "/sys/bus/hid/drivers/razerkbd/"); - break; - - case 1: - strcpy(driver_path, "/sys/bus/hid/drivers/razermouse/"); - break; - - case 2: - strcpy(driver_path, "/sys/bus/hid/drivers/razerfirefly/"); - break; - - case 3: - strcpy(driver_path, "/sys/bus/hid/drivers/razermug/"); - break; - - case 4: - strcpy(driver_path, "/sys/bus/hid/drivers/razercore/"); - break; - - case 5: - strcpy(driver_path, "/sys/bus/hid/drivers/razerkraken/"); - break; - - case 6: - strcpy(driver_path, "/sys/bus/hid/drivers/razermousemat/"); - break; - } - - done = false; - - dir = opendir(driver_path); - - if(dir == NULL) - { - closedir(dir); - - driver_to_read++; - continue; - } - - ent = readdir(dir); - - while(ent != NULL) - { - if(ent->d_type == DT_DIR || ent->d_type == DT_LNK) - { - if(!strcmp(ent->d_name, ".")) - { - if(done == false) - { - done = true; - } - else - { - break; - } - } - else if(!strcmp(ent->d_name, "..") || !strcmp(ent->d_name, "module")) - { - } - else - { - int device_type; - char device_string[1024]; - strcpy(device_string, driver_path); - strcat(device_string, ent->d_name); - - RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(device_string); - - if(razer_rgb->device != RGBController_OpenRazer::RAZER_NO_DEVICE) - { - rgb_controllers.push_back(razer_rgb); - } - else - { - delete razer_rgb; - } - - } - } - - ent = readdir(dir); - } - - closedir(dir); - - driver_to_read++; - } - -} /* DetectOpenRazerControllers() */ - /******************************************************************************************\ * * @@ -946,6 +433,11 @@ void DumpAuraRegisters(AuraController * controller) } /* DumpAuraRegisters() */ +void DetectAuraControllers(std::vector &busses, std::vector &rgb_controllers); +void DetectCorsairControllers(std::vector &busses, std::vector &rgb_controllers); +void DetectCorsairProControllers(std::vector &busses, std::vector &rgb_controllers); +void DetectHyperXControllers(std::vector &busses, std::vector &rgb_controllers); +void DetectOpenRazerControllers(std::vector &rgb_controllers); /******************************************************************************************\ * * @@ -959,41 +451,13 @@ void DetectRGBControllers(void) { DetectI2CBusses(); - DetectAuraControllers(); - DetectCorsairControllers(); - DetectCorsairProControllers(); - DetectHyperXControllers(); - - for (int i = 0; i < aura_controllers.size(); i++) - { - RGBController_Aura* aura_rgb = new RGBController_Aura(aura_controllers[i]); - - rgb_controllers.push_back(aura_rgb); - } - - for (int i = 0; i < corsair_controllers.size(); i++) - { - RGBController_Corsair* corsair_rgb = new RGBController_Corsair(corsair_controllers[i]); - - rgb_controllers.push_back(corsair_rgb); - } - - for (int i = 0; i < corsair_pro_controllers.size(); i++) - { - RGBController_CorsairPro* corsair_rgb = new RGBController_CorsairPro(corsair_pro_controllers[i]); - - rgb_controllers.push_back(corsair_rgb); - } - - for (int i = 0; i < hyperx_controllers.size(); i++) - { - RGBController_HyperX* hyperx_rgb = new RGBController_HyperX(hyperx_controllers[i]); - - rgb_controllers.push_back(hyperx_rgb); - } + DetectAuraControllers(busses, rgb_controllers); + DetectCorsairControllers(busses, rgb_controllers); + DetectCorsairProControllers(busses, rgb_controllers); + DetectHyperXControllers(busses, rgb_controllers); #ifndef WIN32 - DetectOpenRazerControllers(); + DetectOpenRazerControllers(rgb_controllers); #endif //This is for testing Aorus GPU diff --git a/OpenAuraSDK/OpenRazerDetect.cpp b/OpenAuraSDK/OpenRazerDetect.cpp new file mode 100644 index 00000000..cab18aca --- /dev/null +++ b/OpenAuraSDK/OpenRazerDetect.cpp @@ -0,0 +1,123 @@ +#include "RGBController.h" +#include "RGBController_OpenRazer.h" +#include +#include +#include + +#include +#include +#include +#include + +/******************************************************************************************\ +* * +* DetectOpenRazerControllers * +* * +* Detect devices supported by the OpenRazer kernel drivers * +* * * +\******************************************************************************************/ + +void DetectOpenRazerControllers(std::vector &rgb_controllers) +{ + char driver_path[512]; + DIR *dir; + struct dirent *ent; + int test_fd; + bool done = false; + int driver_to_read = 0; + + while(driver_to_read < 7) + { + switch(driver_to_read) + { + case 0: + strcpy(driver_path, "/sys/bus/hid/drivers/razerkbd/"); + break; + + case 1: + strcpy(driver_path, "/sys/bus/hid/drivers/razermouse/"); + break; + + case 2: + strcpy(driver_path, "/sys/bus/hid/drivers/razerfirefly/"); + break; + + case 3: + strcpy(driver_path, "/sys/bus/hid/drivers/razermug/"); + break; + + case 4: + strcpy(driver_path, "/sys/bus/hid/drivers/razercore/"); + break; + + case 5: + strcpy(driver_path, "/sys/bus/hid/drivers/razerkraken/"); + break; + + case 6: + strcpy(driver_path, "/sys/bus/hid/drivers/razermousemat/"); + break; + } + + done = false; + + dir = opendir(driver_path); + + if(dir == NULL) + { + closedir(dir); + + driver_to_read++; + continue; + } + + ent = readdir(dir); + + while(ent != NULL) + { + if(ent->d_type == DT_DIR || ent->d_type == DT_LNK) + { + if(!strcmp(ent->d_name, ".")) + { + if(done == false) + { + done = true; + } + else + { + break; + } + } + else if(!strcmp(ent->d_name, "..") || !strcmp(ent->d_name, "module")) + { + } + else + { + int device_type; + char device_string[1024]; + strcpy(device_string, driver_path); + strcat(device_string, ent->d_name); + + RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(device_string); + + if(razer_rgb->device != RGBController_OpenRazer::RAZER_NO_DEVICE) + { + rgb_controllers.push_back(razer_rgb); + } + else + { + delete razer_rgb; + } + + } + } + + ent = readdir(dir); + } + + closedir(dir); + + driver_to_read++; + } + +} /* DetectOpenRazerControllers() */ \ No newline at end of file