/*---------------------------------------------------------*\ | ZotacTuringGPUController.cpp | | | | Driver for Zotac Turing GPU | | | | David Henry 07 Jan 2023 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-only | \*---------------------------------------------------------*/ #include "ZotacTuringGPUController.h" ZotacTuringGPUController::ZotacTuringGPUController(i2c_smbus_interface* bus, u8 dev) { this->bus = bus; this->dev = dev; } ZotacTuringGPUController::~ZotacTuringGPUController() { } std::string ZotacTuringGPUController::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); } void ZotacTuringGPUController::GetMode(RGBColor& color, int& mode, unsigned int& speed) { u8 rdata_pkt[I2C_SMBUS_BLOCK_MAX] = { 0x00 }; int rdata_len = sizeof(rdata_pkt); if(bus->i2c_read_block(dev, &rdata_len, rdata_pkt) >= 0) { mode = rdata_pkt[0]; color = ToRGBColor(rdata_pkt[1], rdata_pkt[2], rdata_pkt[3]); speed = rdata_pkt[5]; } } void ZotacTuringGPUController::SetMode(RGBColor color, int mode, unsigned int speed) { u8 data_pkt[] = { ZOTAC_TURING_GPU_REG_COLOR_AND_MODE, 0x00, // Is it some zone index? (u8)mode, (u8)RGBGetRValue(color), (u8)RGBGetGValue(color), (u8)RGBGetBValue(color), 0x00, (u8)speed }; bus->i2c_write_block(dev, sizeof(data_pkt), data_pkt); /*---------------------------------------------------------*\ | Read back color and mode. Not doing this seems to hang | | the RGB controller device when switching mode... | \*---------------------------------------------------------*/ GetMode(color, mode, speed); }