diff --git a/Controllers/ENESMBusController/ENESMBusController.cpp b/Controllers/ENESMBusController/ENESMBusController.cpp index 7f3895e21..130525212 100644 --- a/Controllers/ENESMBusController/ENESMBusController.cpp +++ b/Controllers/ENESMBusController/ENESMBusController.cpp @@ -29,10 +29,10 @@ static const char* ene_channels[] = /* ENE channel strings "Unknown", }; -ENESMBusController::ENESMBusController(i2c_smbus_interface* bus, ene_dev_id dev) +ENESMBusController::ENESMBusController(ENESMBusInterface* interface, ene_dev_id dev) { - this->bus = bus; - this->dev = dev; + this->interface = interface; + this->dev = dev; UpdateDeviceName(); @@ -143,7 +143,7 @@ ENESMBusController::ENESMBusController(i2c_smbus_interface* bus, ene_dev_id dev) ENESMBusController::~ENESMBusController() { - + delete interface; } std::string ENESMBusController::GetDeviceName() @@ -153,12 +153,14 @@ std::string ENESMBusController::GetDeviceName() std::string ENESMBusController::GetDeviceLocation() { - std::string return_string(bus->device_name); + std::string return_string = interface->GetLocation(); + char addr[5]; snprintf(addr, 5, "0x%02X", dev); return_string.append(", address "); return_string.append(addr); - return("I2C: " + return_string); + + return(return_string); } unsigned char ENESMBusController::GetChannel(unsigned int led) @@ -330,30 +332,15 @@ void ENESMBusController::UpdateDeviceName() unsigned char ENESMBusController::ENERegisterRead(ene_register reg) { - //Write ENE register - bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); - - //Read ENE value - return(bus->i2c_smbus_read_byte_data(dev, 0x81)); - + return(interface->ENERegisterRead(dev, reg)); } void ENESMBusController::ENERegisterWrite(ene_register reg, unsigned char val) { - //Write ENE register - bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); - - //Write ENE value - bus->i2c_smbus_write_byte_data(dev, 0x01, val); - + interface->ENERegisterWrite(dev, reg, val); } void ENESMBusController::ENERegisterWriteBlock(ene_register reg, unsigned char * data, unsigned char sz) { - //Write ENE register - bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); - - //Write ENE block data - bus->i2c_smbus_write_block_data(dev, 0x03, sz, data); - + interface->ENERegisterWriteBlock(dev, reg, data, sz); } diff --git a/Controllers/ENESMBusController/ENESMBusController.h b/Controllers/ENESMBusController/ENESMBusController.h index 7ce2d5872..e85400536 100644 --- a/Controllers/ENESMBusController/ENESMBusController.h +++ b/Controllers/ENESMBusController/ENESMBusController.h @@ -11,13 +11,10 @@ \*-----------------------------------------*/ #include -#include "i2c_smbus.h" +#include "ENESMBusInterface.h" #pragma once -typedef unsigned char ene_dev_id; -typedef unsigned short ene_register; - #define ENE_APPLY_VAL 0x01 /* Value for Apply Changes Register */ #define ENE_SAVE_VAL 0xAA /* Value for Save Changes */ @@ -99,7 +96,7 @@ enum class ENESMBusController { public: - ENESMBusController(i2c_smbus_interface* bus, ene_dev_id dev); + ENESMBusController(ENESMBusInterface* interface, ene_dev_id dev); ~ENESMBusController(); std::string GetDeviceName(); @@ -134,7 +131,7 @@ private: ene_register direct_reg; ene_register effect_reg; unsigned char channel_cfg; - i2c_smbus_interface * bus; + ENESMBusInterface* interface; ene_dev_id dev; }; diff --git a/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp b/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp index 02fdd97a4..f1ad81225 100644 --- a/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp +++ b/Controllers/ENESMBusController/ENESMBusControllerDetect.cpp @@ -1,5 +1,6 @@ #include "Detector.h" #include "ENESMBusController.h" +#include "ENESMBusInterface_i2c_smbus.h" #include "LogManager.h" #include "RGBController.h" #include "RGBController_ENESMBus.h" @@ -258,8 +259,10 @@ void DetectENESMBusDRAMControllers(std::vector &busses) { if (TestForENESMBusController(busses[bus], ene_ram_addresses[address_list_idx])) { - ENESMBusController* controller = new ENESMBusController(busses[bus], ene_ram_addresses[address_list_idx]); - RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); + ENESMBusInterface_i2c_smbus* interface = new ENESMBusInterface_i2c_smbus(busses[bus]); + ENESMBusController* controller = new ENESMBusController(interface, ene_ram_addresses[address_list_idx]); + RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); + ResourceManager::get()->RegisterRGBController(rgb_controller); } @@ -296,9 +299,13 @@ void DetectENESMBusMotherboardControllers(std::vector &bus if (TestForENESMBusController(busses[bus], aura_mobo_addresses[address_list_idx])) { DMIInfo dmi; - ENESMBusController* controller = new ENESMBusController(busses[bus], aura_mobo_addresses[address_list_idx]); - RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); + + ENESMBusInterface_i2c_smbus* interface = new ENESMBusInterface_i2c_smbus(busses[bus]); + ENESMBusController* controller = new ENESMBusController(interface, aura_mobo_addresses[address_list_idx]); + RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); + rgb_controller->name = "ASUS " + dmi.getMainboard(); + ResourceManager::get()->RegisterRGBController(rgb_controller); } @@ -338,8 +345,9 @@ void DetectENESMBusGPUControllers(std::vector &busses) if(TestForENESMBusController(busses[bus], device_list[dev_idx].controller_address)) { - ENESMBusController* controller = new ENESMBusController(busses[bus], device_list[dev_idx].controller_address); - RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); + ENESMBusInterface_i2c_smbus* interface = new ENESMBusInterface_i2c_smbus(busses[bus]); + ENESMBusController* controller = new ENESMBusController(interface, device_list[dev_idx].controller_address); + RGBController_ENESMBus* rgb_controller = new RGBController_ENESMBus(controller); rgb_controller->name = device_list[dev_idx].name; rgb_controller->type = DEVICE_TYPE_GPU; diff --git a/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface.h b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface.h new file mode 100644 index 000000000..bbdc8f49d --- /dev/null +++ b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface.h @@ -0,0 +1,23 @@ +/*-----------------------------------------*\ +| ENESMBusInterface.h | +| | +| Definitions and types for ENE interface | +| | +| Adam Honse (CalcProgrammer1) 11/21/2021 | +\*-----------------------------------------*/ + +#include + +#pragma once + +typedef unsigned short ene_register; +typedef unsigned char ene_dev_id; + +class ENESMBusInterface +{ +public: + virtual std::string GetLocation() = 0; + virtual unsigned char ENERegisterRead(ene_dev_id dev, ene_register reg) = 0; + virtual void ENERegisterWrite(ene_dev_id dev, ene_register reg, unsigned char val) = 0; + virtual void ENERegisterWriteBlock(ene_dev_id dev, ene_register reg, unsigned char * data, unsigned char sz) = 0; +}; \ No newline at end of file diff --git a/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.cpp b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.cpp new file mode 100644 index 000000000..db81db8bc --- /dev/null +++ b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.cpp @@ -0,0 +1,47 @@ +/*-----------------------------------------*\ +| ENESMBusInterface_i2c_smbus.cpp | +| | +| Code for ENE I2C/SMBus interface | +| | +| Adam Honse (CalcProgrammer1) 11/21/2021 | +\*-----------------------------------------*/ + +#include "ENESMBusInterface_i2c_smbus.h" + +ENESMBusInterface_i2c_smbus::ENESMBusInterface_i2c_smbus(i2c_smbus_interface* bus) +{ + this->bus = bus; +} + +std::string ENESMBusInterface_i2c_smbus::GetLocation() +{ + std::string return_string(bus->device_name); + return("I2C: " + return_string); +} + +unsigned char ENESMBusInterface_i2c_smbus::ENERegisterRead(ene_dev_id dev, ene_register reg) +{ + //Write ENE register + bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); + + //Read ENE value + return(bus->i2c_smbus_read_byte_data(dev, 0x81)); +} + +void ENESMBusInterface_i2c_smbus::ENERegisterWrite(ene_dev_id dev, ene_register reg, unsigned char val) +{ + //Write ENE register + bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); + + //Write ENE value + bus->i2c_smbus_write_byte_data(dev, 0x01, val); +} + +void ENESMBusInterface_i2c_smbus::ENERegisterWriteBlock(ene_dev_id dev, ene_register reg, unsigned char * data, unsigned char sz) +{ + //Write ENE register + bus->i2c_smbus_write_word_data(dev, 0x00, ((reg << 8) & 0xFF00) | ((reg >> 8) & 0x00FF)); + + //Write ENE block data + bus->i2c_smbus_write_block_data(dev, 0x03, sz, data); +} \ No newline at end of file diff --git a/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.h b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.h new file mode 100644 index 000000000..cf2cd40de --- /dev/null +++ b/Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.h @@ -0,0 +1,28 @@ +/*-----------------------------------------*\ +| ENESMBusInterface_i2c_smbus.h | +| | +| Definitions and types for ENE I2C/SMBus | +| interface | +| | +| Adam Honse (CalcProgrammer1) 11/21/2021 | +\*-----------------------------------------*/ + +#include "ENESMBusInterface.h" +#include "i2c_smbus.h" + +#pragma once + +class ENESMBusInterface_i2c_smbus : public ENESMBusInterface +{ +public: + ENESMBusInterface_i2c_smbus(i2c_smbus_interface* bus); + + std::string GetLocation(); + + unsigned char ENERegisterRead(ene_dev_id dev, ene_register reg); + void ENERegisterWrite(ene_dev_id dev, ene_register reg, unsigned char val); + void ENERegisterWriteBlock(ene_dev_id dev, ene_register reg, unsigned char * data, unsigned char sz); + +private: + i2c_smbus_interface * bus; +}; \ No newline at end of file diff --git a/OpenRGB.pro b/OpenRGB.pro index 874c85e87..259858f5a 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -97,6 +97,7 @@ INCLUDEPATH += Controllers/E131Controller/ \ Controllers/EKController/ \ Controllers/ENESMBusController/ \ + Controllers/ENESMBusController/ENESMBusInterface \ Controllers/EspurnaController/ \ Controllers/EVGAGPUController/ \ Controllers/EVisionKeyboardController/ \ @@ -285,6 +286,8 @@ HEADERS += Controllers/EKController/RGBController_EKController.h \ Controllers/ENESMBusController/ENESMBusController.h \ Controllers/ENESMBusController/RGBController_ENESMBus.h \ + Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface.h \ + Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.h \ Controllers/EspurnaController/EspurnaController.h \ Controllers/EspurnaController/RGBController_Espurna.h \ Controllers/EVGAGPUController/EVGAGP102Controller.h \ @@ -661,6 +664,7 @@ SOURCES += Controllers/ENESMBusController/ENESMBusController.cpp \ Controllers/ENESMBusController/ENESMBusControllerDetect.cpp \ Controllers/ENESMBusController/RGBController_ENESMBus.cpp \ + Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_i2c_smbus.cpp \ Controllers/EspurnaController/EspurnaController.cpp \ Controllers/EspurnaController/EspurnaControllerDetect.cpp \ Controllers/EspurnaController/RGBController_Espurna.cpp \