diff --git a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.cpp b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.cpp index b9c35749..ba4e01f9 100644 --- a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.cpp +++ b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.cpp @@ -12,6 +12,8 @@ #include "dependencies/dmiinfo.h" #include "LogManager.h" +#define ASROCK_ZONE_LED_COUNT_MESSAGE_EN "[%s] Zone %i LED count: %02d" + using namespace std::chrono_literals; PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_dev_id dev) @@ -35,25 +37,25 @@ PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_ switch(major_version) { case ASROCK_TYPE_ASRLED: - LOG_TRACE("%s Device type is ASR RGB LED", ASROCK_CONTROLLER_NAME); + LOG_TRACE("[%s] Device type is ASR RGB LED", ASROCK_CONTROLLER_NAME); asrock_type = ASROCK_TYPE_ASRLED; memset(zone_led_count, 0, sizeof(zone_led_count)); break; case ASROCK_TYPE_POLYCHROME_V1: - LOG_TRACE("%s Device type is Polychrome v1", ASROCK_CONTROLLER_NAME); + LOG_TRACE("[%s] Device type is Polychrome v1", ASROCK_CONTROLLER_NAME); asrock_type = ASROCK_TYPE_POLYCHROME_V1; ReadLEDConfiguration(); break; case ASROCK_TYPE_POLYCHROME_V2: - LOG_TRACE("%s Device type is Polychrome v2", ASROCK_CONTROLLER_NAME); + LOG_TRACE("[%s] Device type is Polychrome v2", ASROCK_CONTROLLER_NAME); asrock_type = ASROCK_TYPE_POLYCHROME_V2; ReadLEDConfiguration(); break; default: - LOG_TRACE("%s Got Unknown version!", ASROCK_CONTROLLER_NAME); + LOG_TRACE("[%s] Got Unknown version!", ASROCK_CONTROLLER_NAME); asrock_type = ASROCK_TYPE_UNKNOWN; break; } @@ -96,7 +98,7 @@ unsigned short PolychromeController::ReadFirmwareVersion() { // The firmware register holds two bytes, so the first read should return 2 // If not, report invalid firmware revision FFFF - LOG_DEBUG("%s Reading back device firmware version", ASROCK_CONTROLLER_NAME); + LOG_DEBUG("[%s] Reading back device firmware version", ASROCK_CONTROLLER_NAME); // Version response array needs to be 32 bytes to prevent non ASRock board from stack smashing unsigned char asrock_version[I2C_SMBUS_BLOCK_MAX] = { 0x00, 0x00 }; if (bus->i2c_smbus_read_block_data(dev, ASROCK_REG_FIRMWARE_VER, asrock_version) == 0x02) @@ -104,12 +106,12 @@ unsigned short PolychromeController::ReadFirmwareVersion() unsigned char major = asrock_version[0]; unsigned char minor = asrock_version[1]; - LOG_DEBUG("%s Device firmware version: v%02d.%02d", ASROCK_CONTROLLER_NAME, major, minor); + LOG_DEBUG("[%s] Device firmware version: v%02d.%02d", ASROCK_CONTROLLER_NAME, major, minor); return((major << 8) | minor); } else { - LOG_WARNING("%s Firmware readback failed; Returning 0xFFFF", ASROCK_CONTROLLER_NAME); + LOG_WARNING("[%s] Firmware readback failed; Returning 0xFFFF", ASROCK_CONTROLLER_NAME); return(0xFFFF); } } @@ -120,7 +122,7 @@ void PolychromeController::ReadLEDConfiguration() | The LED configuration register holds 6 bytes, so the first read should return 6 | | If not, set all zone sizes to zero | \*---------------------------------------------------------------------------------*/ - LOG_DEBUG("%s Reading LED config from controller", ASROCK_CONTROLLER_NAME); + LOG_DEBUG("[%s] Reading LED config from controller", ASROCK_CONTROLLER_NAME); unsigned char asrock_zone_count[I2C_SMBUS_BLOCK_MAX] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; if (bus->i2c_smbus_read_block_data(dev, POLYCHROME_REG_LED_CONFIG, asrock_zone_count) == 0x06) { @@ -130,16 +132,16 @@ void PolychromeController::ReadLEDConfiguration() zone_led_count[POLYCHROME_ZONE_4] = asrock_zone_count[3]; zone_led_count[POLYCHROME_ZONE_5] = asrock_zone_count[4]; zone_led_count[POLYCHROME_ZONE_ADDRESSABLE] = asrock_zone_count[5]; - LOG_DEBUG("%s Zone 1 LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_1]); - LOG_DEBUG("%s Zone 2 LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_2]); - LOG_DEBUG("%s Zone 3 LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_3]); - LOG_DEBUG("%s Zone 4 LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_4]); - LOG_DEBUG("%s Zone 5 LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_5]); - LOG_DEBUG("%s Addressable Zone LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_ADDRESSABLE]); + LOG_DEBUG(ASROCK_ZONE_LED_COUNT_MESSAGE_EN, ASROCK_CONTROLLER_NAME, POLYCHROME_ZONE_1, zone_led_count[POLYCHROME_ZONE_1]); + LOG_DEBUG(ASROCK_ZONE_LED_COUNT_MESSAGE_EN, ASROCK_CONTROLLER_NAME, POLYCHROME_ZONE_2, zone_led_count[POLYCHROME_ZONE_2]); + LOG_DEBUG(ASROCK_ZONE_LED_COUNT_MESSAGE_EN, ASROCK_CONTROLLER_NAME, POLYCHROME_ZONE_3, zone_led_count[POLYCHROME_ZONE_3]); + LOG_DEBUG(ASROCK_ZONE_LED_COUNT_MESSAGE_EN, ASROCK_CONTROLLER_NAME, POLYCHROME_ZONE_4, zone_led_count[POLYCHROME_ZONE_4]); + LOG_DEBUG(ASROCK_ZONE_LED_COUNT_MESSAGE_EN, ASROCK_CONTROLLER_NAME, POLYCHROME_ZONE_5, zone_led_count[POLYCHROME_ZONE_5]); + LOG_DEBUG("[%s] Addressable Zone LED count: %02d", ASROCK_CONTROLLER_NAME, zone_led_count[POLYCHROME_ZONE_ADDRESSABLE]); } else { - LOG_WARNING("%s LED config read failed", ASROCK_CONTROLLER_NAME); + LOG_WARNING("[%s] LED config read failed", ASROCK_CONTROLLER_NAME); memset(zone_led_count, 0, sizeof(zone_led_count)); } } diff --git a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.h b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.h index fd187a1e..23290ff7 100644 --- a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.h +++ b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusController.h @@ -15,8 +15,10 @@ typedef unsigned char polychrome_dev_id; -#define ASROCK_CONTROLLER_NAME "[ASRock Polychrome SMBus Controller]" -#define ASROCK_DETECTOR_NAME "[ASRock Polychrome SMBus Detect]" +#define ASROCK_CONTROLLER_NAME "ASRock Polychrome SMBus Controller" +#define ASROCK_DETECTOR_NAME "ASRock Polychrome SMBus Detect" +#define VENDOR_NAME "ASRock" +#define SMBUS_ADDRESS 0x6A enum { diff --git a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusControllerDetect.cpp b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusControllerDetect.cpp index a5cd13c5..fb672687 100644 --- a/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusControllerDetect.cpp +++ b/Controllers/ASRockPolychromeSMBusController/ASRockPolychromeSMBusControllerDetect.cpp @@ -54,33 +54,36 @@ void DetectPolychromeSMBusControllers(std::vector& busses) { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) { - LOG_TRACE("%s Bus %02d is a motherboard, checking for a device at 0x6A", ASROCK_DETECTOR_NAME, bus); - // Check for Polychrome controller at 0x6A - if (TestForPolychromeSMBusController(busses[bus], 0x6A)) + if(busses[bus]->pci_subsystem_vendor == ASROCK_SUB_VEN) { - LOG_TRACE("%s Detected a device at address 0x6A, testing for a known controller", ASROCK_DETECTOR_NAME); - new_polychrome = new PolychromeController(busses[bus], 0x6A); - - if(new_polychrome->GetASRockType() != ASROCK_TYPE_UNKNOWN) + LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, ASROCK_DETECTOR_NAME, bus, VENDOR_NAME, SMBUS_ADDRESS); + // Check for Polychrome controller at 0x6A + if (TestForPolychromeSMBusController(busses[bus], SMBUS_ADDRESS)) { - LOG_TRACE("%s Found a known Polychrome device", ASROCK_DETECTOR_NAME); - new_controller = new RGBController_Polychrome(new_polychrome); - ResourceManager::get()->RegisterRGBController(new_controller); + LOG_DEBUG("[%s] Detected a device at address %02X, testing for a known controller", ASROCK_DETECTOR_NAME, SMBUS_ADDRESS); + new_polychrome = new PolychromeController(busses[bus], SMBUS_ADDRESS); + + if(new_polychrome->GetASRockType() != ASROCK_TYPE_UNKNOWN) + { + LOG_DEBUG("[%s] Found a known Polychrome device", ASROCK_DETECTOR_NAME); + new_controller = new RGBController_Polychrome(new_polychrome); + ResourceManager::get()->RegisterRGBController(new_controller); + } + else + { + LOG_DEBUG("[%s] Not a Polychrome device or unknown type", ASROCK_DETECTOR_NAME); + delete new_polychrome; + } } else { - LOG_TRACE("%s Not a Polychrome device or unknown type", ASROCK_DETECTOR_NAME); - delete new_polychrome; + LOG_DEBUG("[%s] Bus %02d no response at %02X", ASROCK_DETECTOR_NAME, bus, SMBUS_ADDRESS); } } else { - LOG_TRACE("%s Bus %02d no response at 0x6A", ASROCK_DETECTOR_NAME, bus); - } - } - else - { - LOG_TRACE("%s Bus %02d not a motherboard", ASROCK_DETECTOR_NAME, bus); + LOG_DEBUG(SMBUS_CHECK_DEVICE_FAILURE_EN, ASROCK_DETECTOR_NAME, bus, VENDOR_NAME); + } } } diff --git a/Controllers/AsusAuraSMBusController/AsusAuraSMBusControllerDetect.cpp b/Controllers/AsusAuraSMBusController/AsusAuraSMBusControllerDetect.cpp index 64fddfba..e0be616f 100644 --- a/Controllers/AsusAuraSMBusController/AsusAuraSMBusControllerDetect.cpp +++ b/Controllers/AsusAuraSMBusController/AsusAuraSMBusControllerDetect.cpp @@ -10,6 +10,9 @@ #include #include "dependencies/dmiinfo.h" +#define DETECTOR_NAME "ASUS Aura SMBus Controller" +#define VENDOR_NAME "ASUS" //This should match the Vendor name from DMI + using namespace std::chrono_literals; /*----------------------------------------------------------------------*\ @@ -204,22 +207,29 @@ void DetectAsusAuraSMBusMotherboardControllers(std::vector // Add Aura-enabled motherboard controllers IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) { - for (unsigned int address_list_idx = 0; address_list_idx < AURA_MOBO_ADDRESS_COUNT; address_list_idx++) + if(busses[bus]->pci_subsystem_vendor == ASUS_SUB_VEN) { - if (TestForAsusAuraSMBusController(busses[bus], aura_mobo_addresses[address_list_idx])) + for (unsigned int address_list_idx = 0; address_list_idx < AURA_MOBO_ADDRESS_COUNT; address_list_idx++) { - DMIInfo dmi; - AuraSMBusController* controller = new AuraSMBusController(busses[bus], aura_mobo_addresses[address_list_idx]); - RGBController_AuraSMBus* rgb_controller = new RGBController_AuraSMBus(controller); - rgb_controller->name = "ASUS " + dmi.getMainboard(); - ResourceManager::get()->RegisterRGBController(rgb_controller); - } + LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, aura_mobo_addresses[address_list_idx]); + if (TestForAsusAuraSMBusController(busses[bus], aura_mobo_addresses[address_list_idx])) + { + DMIInfo dmi; + AuraSMBusController* controller = new AuraSMBusController(busses[bus], aura_mobo_addresses[address_list_idx]); + RGBController_AuraSMBus* rgb_controller = new RGBController_AuraSMBus(controller); + rgb_controller->name = "ASUS " + dmi.getMainboard(); + ResourceManager::get()->RegisterRGBController(rgb_controller); + } - std::this_thread::sleep_for(1ms); + std::this_thread::sleep_for(1ms); + } + } + else + { + LOG_DEBUG(SMBUS_CHECK_DEVICE_FAILURE_EN, DETECTOR_NAME, bus, VENDOR_NAME); } } } - } /* DetectAuraSMBusMotherboardControllers() */ REGISTER_I2C_DETECTOR("ASUS Aura SMBus DRAM", DetectAsusAuraSMBusDRAMControllers); diff --git a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp index 2734bb8b..9863d100 100644 --- a/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2SMBusController/GigabyteRGBFusion2SMBusControllerDetect.cpp @@ -1,5 +1,6 @@ #include "Detector.h" #include "GigabyteRGBFusion2SMBusController.h" +#include "LogManager.h" #include "RGBController.h" #include "RGBController_GigabyteRGBFusion2SMBus.h" #include "i2c_smbus.h" @@ -9,8 +10,10 @@ #include #include #include "dependencies/dmiinfo.h" -#define DETECTOR_NAME "Gigabyte RGB Fusion 2 SMBus" -#define VENDOR_NAME "Gigabyte Technology Co., Ltd." + +#define DETECTOR_NAME "Gigabyte RGB Fusion 2 SMBus" +#define VENDOR_NAME "Gigabyte Technology Co., Ltd." +#define SMBUS_ADDRESS 0x68 typedef struct { @@ -113,19 +116,27 @@ void DetectGigabyteRGBFusion2SMBusControllers(std::vector& { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) { - // 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) + if(busses[bus]->pci_subsystem_vendor == GIGABYTE_SUB_VEN) { - // Check for RGB Fusion 2 controller at 0x68 - if (TestForGigabyteRGBFusion2SMBusController(busses[bus], 0x68)) + // 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) { - new_rgb_fusion = new RGBFusion2SMBusController(busses[bus], 0x68, dmi.getMainboard() ); - new_controller = new RGBController_RGBFusion2SMBus(new_rgb_fusion); - ResourceManager::get()->RegisterRGBController(new_controller); + LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, SMBUS_ADDRESS); + // Check for RGB Fusion 2 controller at 0x68 + if (TestForGigabyteRGBFusion2SMBusController(busses[bus], SMBUS_ADDRESS)) + { + new_rgb_fusion = new RGBFusion2SMBusController(busses[bus], SMBUS_ADDRESS, dmi.getMainboard() ); + new_controller = new RGBController_RGBFusion2SMBus(new_rgb_fusion); + ResourceManager::get()->RegisterRGBController(new_controller); + } } } + else + { + LOG_DEBUG(SMBUS_CHECK_DEVICE_FAILURE_EN, DETECTOR_NAME, bus, VENDOR_NAME); + } } } } diff --git a/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp b/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp index b00256bd..787fbe9b 100644 --- a/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusionController/GigabyteRGBFusionControllerDetect.cpp @@ -1,5 +1,6 @@ #include "Detector.h" #include "GigabyteRGBFusionController.h" +#include "LogManager.h" #include "RGBController.h" #include "RGBController_GigabyteRGBFusion.h" #include "i2c_smbus.h" @@ -8,6 +9,10 @@ #include #include +#define DETECTOR_NAME "Gigabyte RGB Fusion SMBus" +#define VENDOR_NAME "Gigabyte Technology Co., Ltd." +#define SMBUS_ADDRESS 0x28 + /******************************************************************************************\ * * * TestForGigabyteRGBFusionController * @@ -59,16 +64,23 @@ void DetectGigabyteRGBFusionControllers(std::vector& busse { IF_MOBO_SMBUS(busses[bus]->pci_vendor, busses[bus]->pci_device) { - // Check for RGB Fusion controller at 0x28 - if (TestForGigabyteRGBFusionController(busses[bus], 0x28)) + if(busses[bus]->pci_subsystem_vendor == GIGABYTE_SUB_VEN) { - new_rgb_fusion = new RGBFusionController(busses[bus], 0x28); - new_controller = new RGBController_RGBFusion(new_rgb_fusion); - ResourceManager::get()->RegisterRGBController(new_controller); + LOG_DEBUG(SMBUS_CHECK_DEVICE_MESSAGE_EN, DETECTOR_NAME, bus, VENDOR_NAME, SMBUS_ADDRESS); + // Check for RGB Fusion controller at 0x28 + if (TestForGigabyteRGBFusionController(busses[bus], SMBUS_ADDRESS)) + { + new_rgb_fusion = new RGBFusionController(busses[bus], SMBUS_ADDRESS); + new_controller = new RGBController_RGBFusion(new_rgb_fusion); + ResourceManager::get()->RegisterRGBController(new_controller); + } + } + else + { + LOG_DEBUG(SMBUS_CHECK_DEVICE_FAILURE_EN, DETECTOR_NAME, bus, VENDOR_NAME); } } } - } /* DetectGigabyteRGBFusionControllers() */ REGISTER_I2C_DETECTOR("Gigabyte RGB Fusion", DetectGigabyteRGBFusionControllers); diff --git a/LogManager.h b/LogManager.h index 6d42c7fc..36900b2d 100644 --- a/LogManager.h +++ b/LogManager.h @@ -8,11 +8,18 @@ #include #include "json.hpp" +/*-------------------------------------------------*\ +| Common LOG strings | +| This may need to be in it's own .h file | +\*-------------------------------------------------*/ +#define SMBUS_CHECK_DEVICE_MESSAGE_EN "[%s] Bus %02d is a motherboard and the subvendor matches the one for %s, looking for a device at %02X" +#define SMBUS_CHECK_DEVICE_FAILURE_EN "[%s] Bus %02d is not a motherboard or the subvendor does not match the one for %s, skipping detection" + using json = nlohmann::json; enum { - LL_FATAL, // Critical unrecoverable errors that cause a generalized crash of a module or of the entire app + LL_FATAL, // Critical unrecoverable errors that cause a generalized crash of a module or of the entire app LL_ERROR, // Local errors that abort an operation LL_WARNING, // Local errors that may cause an operation to have an undefined behavior or may have dangerous/unforeseen consequences LL_INFO, // Initialization messages, significant actions and follow-up information diff --git a/pci_ids/pci_ids.h b/pci_ids/pci_ids.h index a750ec2b..92372b60 100644 --- a/pci_ids/pci_ids.h +++ b/pci_ids/pci_ids.h @@ -75,6 +75,7 @@ /*---------------------------------------------------------*\ | PCI Sub-Vendor IDs | \*---------------------------------------------------------*/ +#define ASROCK_SUB_VEN 0x1849 #define ASUS_SUB_VEN 0x1043 #define EVGA_SUB_VEN 0x3842 #define GALAX_SUB_VEN 0x1B4C