diff --git a/Controllers/EVGAAmpereGPUController/EVGAGPUv3Controller.cpp b/Controllers/EVGAAmpereGPUController/EVGAGPUv3Controller.cpp index fc9b7d4a..b0ed3149 100644 --- a/Controllers/EVGAAmpereGPUController/EVGAGPUv3Controller.cpp +++ b/Controllers/EVGAAmpereGPUController/EVGAGPUv3Controller.cpp @@ -516,7 +516,7 @@ void EVGAGPUv3Controller::SetZone(uint8_t zone, uint8_t mode, EVGAv3_config zone break; default: { - LOG_TRACE("[%s] Mode %02d not found", name->c_str(), mode); + LOG_TRACE("[%s] Mode %02d not found", name.c_str(), mode); } break; } diff --git a/Controllers/EVGAGP102GPUController/EVGAGP102Controller.cpp b/Controllers/EVGAGP102GPUController/EVGAGP102Controller.cpp index cd1bec08..6118cb0c 100644 --- a/Controllers/EVGAGP102GPUController/EVGAGP102Controller.cpp +++ b/Controllers/EVGAGP102GPUController/EVGAGP102Controller.cpp @@ -12,10 +12,11 @@ #include "EVGAGP102Controller.h" #include "LogManager.h" -EVGAGP102Controller::EVGAGP102Controller(i2c_smbus_interface* bus_ptr, zoneinfo info) +EVGAGP102Controller::EVGAGP102Controller(i2c_smbus_interface* bus_ptr, zoneinfo info, std::string dev_name) { - bus = bus_ptr; - zi = info; + bus = bus_ptr; + zi = info; + name = dev_name; } EVGAGP102Controller::~EVGAGP102Controller() @@ -32,6 +33,16 @@ std::string EVGAGP102Controller::GetDeviceLocation() return("I2C: " + return_string); } +std::string EVGAGP102Controller::GetDeviceName() +{ + return(name); +} + +std::string EVGAGP102Controller::GetZoneName() +{ + return(zi.zone_name); +} + void EVGAGP102Controller::SetColor(unsigned char red, unsigned char green, unsigned char blue) { SendCommand(EVGA_GP102_CMD_BEGIN); @@ -125,8 +136,3 @@ void EVGAGP102Controller::SaveSettings() //bus->i2c_smbus_write_byte_data(zi.dev_addr, 0x21, 0xE5); //bus->i2c_smbus_write_byte_data(zi.dev_addr, 0x22, 0xE7); } - -std::string EVGAGP102Controller::GetName() -{ - return zi.zone_name; -} diff --git a/Controllers/EVGAGP102GPUController/EVGAGP102Controller.h b/Controllers/EVGAGP102GPUController/EVGAGP102Controller.h index 60ec03dc..29a35085 100644 --- a/Controllers/EVGAGP102GPUController/EVGAGP102Controller.h +++ b/Controllers/EVGAGP102GPUController/EVGAGP102Controller.h @@ -82,12 +82,13 @@ const static zoneinfo gpuzoneinfos[] class EVGAGP102Controller { public: - EVGAGP102Controller(i2c_smbus_interface* bus, zoneinfo info); + EVGAGP102Controller(i2c_smbus_interface* bus, zoneinfo info, std::string dev_name); ~EVGAGP102Controller(); bool IsValid(); std::string GetDeviceLocation(); - std::string GetName(); + std::string GetDeviceName(); + std::string GetZoneName(); unsigned char GetMode(); void SetColor(unsigned char red, unsigned char green, unsigned char blue); @@ -96,6 +97,10 @@ public: void SaveSettings(); private: + i2c_smbus_interface* bus; + zoneinfo zi; + std::string name; + bool CommandAcknowledged(); bool CommandCompleted(); s32 QueryCommand(s32 command); @@ -103,8 +108,4 @@ private: unsigned char GetRed(); unsigned char GetGreen(); unsigned char GetBlue(); - - i2c_smbus_interface* bus; - zoneinfo zi; - }; diff --git a/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp b/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp index 710ca081..1773e78f 100644 --- a/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp +++ b/Controllers/EVGAGP102GPUController/EVGAGP102GPUControllerDetect.cpp @@ -17,28 +17,6 @@ #include "i2c_smbus.h" #include "pci_ids.h" -typedef struct -{ - int pci_vendor; - int pci_device; - int pci_subsystem_vendor; - int pci_subsystem_device; - const char * name; -} gpu_pci_device; - -#define GPU_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) - -static const gpu_pci_device device_list[] = -{ - { NVIDIA_VEN, NVIDIA_GTX1070_DEV, EVGA_SUB_VEN, EVGA_GTX1070_FTW2_SUB_DEV, "EVGA GeForce GTX 1070 FTW2 Gaming" }, - { NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_SUB_DEV, "EVGA GeForce GTX 1080 FTW2 Gaming" }, - { NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_11G_SUB_DEV, "EVGA GeForce GTX 1080 FTW2 11G" }, - { NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_DT_SUB_DEV, "EVGA GeForce GTX 1080 FTW2 DT" }, - { NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_SC2_GAMING_SUB_DEV, "EVGA GeForce GTX 1080 Ti SC2 Gaming" }, - { NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_FTW3_SUB_DEV, "EVGA GeForce GTX 1080 Ti FTW3" }, - { NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_FTW3_HYBRID_SUB_DEV, "EVGA GeForce GTX 1080 Ti FTW3 Hybrid" }, - { NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_KINGPIN_SUB_DEV, "EVGA GeForce GTX 1080 Ti K|NGP|N" }, -}; /******************************************************************************************\ * * * DetectEVGAGP102GPUControllers * @@ -46,51 +24,50 @@ static const gpu_pci_device device_list[] = * 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 * -* dev - I2C address of EVGA GPU device * +* address - unused, the address comes from the GPU zone info table * +* name - name string of detected PCI device * * * \******************************************************************************************/ -void DetectEVGAGP102GPUControllers(std::vector& busses) +void DetectEVGAGP102GPUControllers(i2c_smbus_interface* bus, uint8_t /*address*/, const std::string& name) { - for (unsigned int bus = 0; bus < busses.size(); bus++) + if(bus->port_id == 1) { - for(unsigned int dev_idx = 0; dev_idx < GPU_NUM_DEVICES; dev_idx++) + RGBController_EVGAGP102* new_rgbcontroller; + std::vector controllers; + + for(unsigned int i = 0; i < sizeof(gpuzoneinfos) / sizeof(zoneinfo); i++) { - if (busses[bus]->port_id != 1) - { - break; - } + EVGAGP102Controller* controller = new EVGAGP102Controller(bus, gpuzoneinfos[i], name); - if(busses[bus]->pci_vendor == device_list[dev_idx].pci_vendor && - busses[bus]->pci_device == device_list[dev_idx].pci_device && - busses[bus]->pci_subsystem_vendor == device_list[dev_idx].pci_subsystem_vendor && - busses[bus]->pci_subsystem_device == device_list[dev_idx].pci_subsystem_device) + if(controller->IsValid()) { - LOG_DEBUG(GPU_DETECT_MESSAGE, EVGA_GP102_CONTROLLER_NAME, bus, device_list[dev_idx].pci_device, device_list[dev_idx].pci_subsystem_device, device_list[dev_idx].name ); - RGBController_EVGAGP102* new_rgbcontroller; - std::vector controllers; - - for(unsigned int i = 0; i < sizeof(gpuzoneinfos) / sizeof(zoneinfo); i++) - { - EVGAGP102Controller* contr = new EVGAGP102Controller(busses[bus], gpuzoneinfos[i]); - if (contr->IsValid()) - { - controllers.push_back(contr); - } - else - { - delete contr; - } - } - if(controllers.size() != 0) - { - new_rgbcontroller = new RGBController_EVGAGP102(controllers); - new_rgbcontroller->name = device_list[dev_idx].name; - ResourceManager::get()->RegisterRGBController(new_rgbcontroller); - } + controllers.push_back(controller); } + else + { + delete controller; + } + } + + if(controllers.size() != 0) + { + new_rgbcontroller = new RGBController_EVGAGP102(controllers); + + ResourceManager::get()->RegisterRGBController(new_rgbcontroller); } } } /* DetectEVGAGP102GPUControllers() */ -REGISTER_I2C_DETECTOR("EVGA GP102 GPU", DetectEVGAGP102GPUControllers); +/*---------------------------------------------------------*\ +| The I2C address is provided by the GPU Zone Info table, | +| as these GPUs have multiple I2C devices per card. | +\*---------------------------------------------------------*/ +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1070 FTW2 Gaming", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1070_DEV, EVGA_SUB_VEN, EVGA_GTX1070_FTW2_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 FTW2 Gaming", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 FTW2 11G", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_11G_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 FTW2 DT", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080_DEV, EVGA_SUB_VEN, EVGA_GTX1080_FTW2_DT_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 Ti SC2 Gaming", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_SC2_GAMING_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 Ti FTW3", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_FTW3_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 Ti FTW3 Hybrid", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_FTW3_HYBRID_SUB_DEV, 0x00 ); +REGISTER_I2C_PCI_DETECTOR( "EVGA GeForce GTX 1080 Ti K|NGP|N", DetectEVGAGP102GPUControllers, NVIDIA_VEN, NVIDIA_GTX1080TI_DEV, EVGA_SUB_VEN, EVGA_GTX1080TI_KINGPIN_SUB_DEV, 0x00 ); diff --git a/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.cpp b/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.cpp index d3c5cad5..1e0c7035 100644 --- a/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.cpp +++ b/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.cpp @@ -23,40 +23,40 @@ @comment \*-------------------------------------------------------------------*/ -RGBController_EVGAGP102::RGBController_EVGAGP102(std::vector evga_ptr) +RGBController_EVGAGP102::RGBController_EVGAGP102(std::vector controller_list) { - evga = evga_ptr; + controllers = controller_list; - name = "EVGA GP102 GPU"; - vendor = "EVGA"; - description = "EVGA GP102-based RGB GPU Device"; + name = controllers[0]->GetDeviceName(); + vendor = "EVGA"; + description = "EVGA GP102-based RGB GPU Device"; for(unsigned int i = 0; i < zones.size(); i++) { - location += evga[i]->GetDeviceLocation() + " "; + location += controllers[i]->GetDeviceLocation() + " "; } type = DEVICE_TYPE_GPU; mode Off; - Off.name = "Off"; - Off.value = EVGA_GP102_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; + Off.name = "Off"; + Off.value = EVGA_GP102_MODE_OFF; + Off.flags = 0; + Off.color_mode = MODE_COLORS_NONE; modes.push_back(Off); mode Direct; - Direct.name = "Direct"; - Direct.value = EVGA_GP102_MODE_CUSTOM; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.value = EVGA_GP102_MODE_CUSTOM; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Direct.color_mode = MODE_COLORS_PER_LED; modes.push_back(Direct); SetupZones(); // Initialize active mode and stored color - unsigned char raw_active_mode = evga[0]->GetMode(); + unsigned char raw_active_mode = controllers[0]->GetMode(); active_mode = 0; for(unsigned int i = 0; i < modes.size(); i++) @@ -69,7 +69,7 @@ RGBController_EVGAGP102::RGBController_EVGAGP102(std::vector rgb = evga[i]->GetColor(); + std::array rgb = controllers[i]->GetColor(); colors[i] = ToRGBColor(rgb[0], rgb[1], rgb[2]); } @@ -77,9 +77,9 @@ RGBController_EVGAGP102::RGBController_EVGAGP102(std::vectorGetName(); + new_zone.name = controllers[i]->GetZoneName(); new_zone.type = ZONE_TYPE_SINGLE; new_zone.leds_min = 1; new_zone.leds_max = 1; new_zone.leds_count = 1; new_zone.matrix_map = NULL; - new_led.name = evga[i]->GetName(); + new_led.name = controllers[i]->GetZoneName(); leds.push_back(new_led); zones.push_back(new_zone); @@ -133,7 +133,7 @@ void RGBController_EVGAGP102::UpdateZoneLEDs(int zone) unsigned char red = RGBGetRValue(color); unsigned char grn = RGBGetGValue(color); unsigned char blu = RGBGetBValue(color); - evga[zone]->SetColor(red, grn, blu); + controllers[zone]->SetColor(red, grn, blu); } void RGBController_EVGAGP102::UpdateSingleLED(int /*led*/) @@ -143,9 +143,9 @@ void RGBController_EVGAGP102::UpdateSingleLED(int /*led*/) void RGBController_EVGAGP102::DeviceUpdateMode() { - for(unsigned int i = 0; i < evga.size(); i++) + for(unsigned int i = 0; i < controllers.size(); i++) { - evga[i]->SetMode((unsigned char)modes[(unsigned int)active_mode].value); + controllers[i]->SetMode((unsigned char)modes[(unsigned int)active_mode].value); } } diff --git a/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.h b/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.h index 820436ce..e8d796df 100644 --- a/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.h +++ b/Controllers/EVGAGP102GPUController/RGBController_EVGAGP102.h @@ -17,7 +17,7 @@ class RGBController_EVGAGP102 : public RGBController { public: - RGBController_EVGAGP102(std::vector evga_ptr); + RGBController_EVGAGP102(std::vector controller_list); ~RGBController_EVGAGP102(); void SetupZones(); @@ -32,5 +32,5 @@ public: void DeviceSaveMode(); private: - std::vector evga; + std::vector controllers; };