mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2025-12-24 07:47:49 -05:00
110 lines
3.2 KiB
C++
110 lines
3.2 KiB
C++
/*---------------------------------------------------------*\
|
|
| EVGAACX30SMBusController.cpp |
|
|
| |
|
|
| Driver for SMBus EVGA ACX 30 motherboards |
|
|
| |
|
|
| Balázs Triszka (balika011) 21 May 2024 |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-only |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#include "EVGAACX30SMBusController.h"
|
|
#include "dmiinfo.h"
|
|
#include "LogManager.h"
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
EVGAACX30SMBusController::EVGAACX30SMBusController(i2c_smbus_interface *bus, uint8_t dev)
|
|
{
|
|
this->bus = bus;
|
|
this->dev = dev;
|
|
|
|
DMIInfo dmi;
|
|
|
|
device_name = "EVGA " + dmi.getMainboard();
|
|
}
|
|
|
|
EVGAACX30SMBusController::~EVGAACX30SMBusController()
|
|
{
|
|
|
|
}
|
|
|
|
std::string EVGAACX30SMBusController::GetDeviceLocation()
|
|
{
|
|
std::string return_string(bus->device_name);
|
|
char addr[5];
|
|
snprintf(addr, 5, "0x%02X", dev);
|
|
return_string.append(", address ");
|
|
return_string.append(addr);
|
|
return("I2C: " + return_string);
|
|
}
|
|
|
|
std::string EVGAACX30SMBusController::GetDeviceName()
|
|
{
|
|
return(device_name);
|
|
}
|
|
|
|
std::string EVGAACX30SMBusController::GetFirmwareVersion()
|
|
{
|
|
uint16_t version = bus->i2c_smbus_read_byte_data(dev, ACX30_REG_VER_HIGH) << 8 | bus->i2c_smbus_read_byte_data(dev, ACX30_REG_VER_LOW);
|
|
uint8_t ptype = bus->i2c_smbus_read_byte_data(dev, ACX30_REG_PTYPE);
|
|
|
|
char ver[9];
|
|
snprintf(ver, 9, "0x%X", version);
|
|
char pt[9];
|
|
snprintf(pt, 9, "0x%X", ptype);
|
|
|
|
std::string return_string;
|
|
return_string.append(ver);
|
|
return_string.append(", ptype ");
|
|
return_string.append(pt);
|
|
return return_string;
|
|
}
|
|
|
|
uint8_t EVGAACX30SMBusController::GetMode()
|
|
{
|
|
return bus->i2c_smbus_read_byte_data(dev, ACX30_REG_MODE);
|
|
}
|
|
|
|
void EVGAACX30SMBusController::Unlock()
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_CONTROL, 0xE5);
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_CONTROL, 0xE9);
|
|
bus->i2c_smbus_read_byte_data(dev, ACX30_REG_CONTROL);
|
|
}
|
|
|
|
void EVGAACX30SMBusController::Lock()
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_CONTROL, 0xE0);
|
|
bus->i2c_smbus_read_byte_data(dev, ACX30_REG_CONTROL);
|
|
}
|
|
|
|
void EVGAACX30SMBusController::SetColors(uint8_t red, uint8_t green, uint8_t blue)
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_RED, red);
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_GREEN, green);
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_BLUE, blue);
|
|
}
|
|
|
|
void EVGAACX30SMBusController::SetMode(uint8_t mode)
|
|
{
|
|
if (mode == ACX30_MODE_OFF)
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_21, 0xE7);
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_22, 0xCE);
|
|
}
|
|
else
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_21, 0xE5);
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_22, 0xE7);
|
|
}
|
|
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_MODE, mode);
|
|
}
|
|
|
|
void EVGAACX30SMBusController::SetSpeed(uint8_t speed)
|
|
{
|
|
bus->i2c_smbus_write_byte_data(dev, ACX30_REG_SPEED, speed);
|
|
}
|