Hey team!
I started using the software to control all my rgbs some days ago and is amazing!
Everything is going well so far except for my video card.
I have a PNY GeForce RTX 3080 Ti 12GB XLR8 Gaming UPRISING™ EPIC-X RGB™ Triple Fan, even if the PNY 3080TI is in the supported device list, I don’t see it in the app.
I added a plunging as an attempt to add the card, now the program recognizes it but I’m getting an error in the console when trying to writeByte()
(writeByte(): Operation failed) which makes me think there may be a problem with the video card RGB firmware, but not sure. Could someone with experience and knowledge on the program help me out? it would be much appreciated.
I attach the block of code down here:
// Modifying SMBUS Plugins is -DANGEROUS- and can -DESTROY- devices.
export function Name() { return "PNY GPU"; }
export function Publisher() { return "WhirlwindFX"; }
export function Type() { return "SMBUS"; }
export function Size() { return [3, 1]; }
export function DefaultPosition(){return [5, 2];}
export function DefaultScale(){return 2.5;}
export function LedNames() { return vLedNames; }
export function LedPositions() { return vLedPositions; }
/** @param {FreeAddressBus} bus */
export function Scan(bus) {
const FoundAddresses = [];
// Skip any non Nvidia Busses
if (!bus.IsNvidiaBus()) {
return [];
}
const detectedVendor = bus.Vendor();
const detectedSubVendor = bus.SubVendor();
const detectedDevice = bus.Product();
const detectedSubDevice = bus.SubDevice();
console.log(`Detected Vendor: ${detectedVendor}`);
console.log(`Detected SubVendor: ${detectedSubVendor}`);
console.log(`Detected Device: ${detectedDevice}`);
console.log(`Detected SubDevice: ${detectedSubDevice}`);
for(const PNYGPUID of PNYGPUIDs) {
if(PNYGPUID.Vendor === detectedVendor &&
PNYGPUID.SubVendor === detectedSubVendor &&
PNYGPUID.Device === detectedDevice &&
PNYGPUID.SubDevice === detectedSubDevice
) {
console.log(`Found GPU: ${PNYGPUID.Name}`);
FoundAddresses.push(PNYGPUID.Address);
}
}
return FoundAddresses;
}
/* global
shutdownColor:readonly
LightingMode:readonly
forcedColor:readonly
*/
export function ControllableParameters() {
return [
{"property":"shutdownColor", "group":"lighting", "label":"Shutdown Color", "min":"0", "max":"360", "type":"color", "default":"#009bde"},
{"property":"LightingMode", "group":"lighting", "label":"Lighting Mode", "type":"combobox", "values":["Canvas", "Forced"], "default":"Canvas"},
{"property":"forcedColor", "group":"lighting", "label":"Forced Color", "min":"0", "max":"360", "type":"color", "default":"#009bde"},
];
}
const vLedNames = [ "GPU" ];
const vLedPositions = [ [1, 0] ];
/** @param {FreeAddressBus} bus */
export function Scan(bus) {
const FoundAddresses = [];
// Skip any non AMD / INTEL Busses
if (!bus.IsNvidiaBus()) {
return [];
}
for(const PNYGPUID of PNYGPUIDs) {
if(PNYGPUID.Vendor === bus.Vendor() &&
PNYGPUID.SubVendor === bus.SubVendor() &&
PNYGPUID.Device === bus.Product() &&
PNYGPUID.SubDevice === bus.SubDevice()
) {
FoundAddresses.push(PNYGPUID.Address);
}
}
return FoundAddresses;
}
export function Initialize() {
try {
bus.WriteByte(PNYGPU.registers.Control, 0x00);
bus.WriteByte(PNYGPU.registers.Mode, 0x01);
bus.WriteByte(PNYGPU.registers.Brightness, 0x64);
SetGPUNameFromBusIds(bus);
} catch (e) {
console.error("Initialization failed: ", e);
throw new Error("error->", e)
}
SetGPUNameFromBusIds();
}
export function Render() {
sendColors();
}
export function Shutdown() {
}
function SetGPUNameFromBusIds() {
for(const PNYGPUID of PNYGPUIDs) {
if(PNYGPUID.Vendor === bus.Vendor() &&
PNYGPUID.SubVendor === bus.SubVendor() &&
PNYGPUID.Device === bus.Product() &&
PNYGPUID.SubDevice === bus.SubDevice()
) {
device.setName(PNYGPUID.Name);
}
}
}
function sendColors(shutdown = false) {
const iPxX = vLedPositions[0][0];
const iPxY = vLedPositions[0][1];
let color;
if(shutdown) {
color = hexToRgb(shutdownColor);
} else if (LightingMode === "Forced") {
color = hexToRgb(forcedColor);
} else {
color = device.color(iPxX, iPxY);
}
// I think here is where the error is, since the error is being thrown at every frame
bus.WriteByte(PNYGPU.registers.R, color[0]);
bus.WriteByte(PNYGPU.registers.G, color[1]);
bus.WriteByte(PNYGPU.registers.B, color[2]);
}
class PNYGPUController {
constructor() {
this.registers =
{
Control : 0xE0,
Mode : 0x60,
R : 0x6C,
G : 0x6D,
B : 0x6E,
Brightness : 0x6F
};
}
setDeviceMode(mode) {
bus.WriteByte(this.registers.Mode, mode);
}
}
const PNYGPU = new PNYGPUController();
class GPUIdentifier {
constructor(Vendor, SubVendor, Device, SubDevice, Address, Name, Model = "") {
this.Vendor = Vendor;
this.SubVendor = SubVendor;
this.Device = Device;
this.SubDevice = SubDevice;
this.Address = Address;
this.Name = Name;
this.Model = Model;
}
}
class PNYGPUIdentifier extends GPUIdentifier {
constructor(Device, Brand, SubDevice, Name, Model = "") {
super(0x10DE, Brand, Device, SubDevice, 0x49, Name, Model);
}
}
export function BrandGPUList(){ return PNYGPUIDs; }
const PNYGPUIDs =
[
new PNYGPUIdentifier(0x2208, 0x196E, 0x1384, "PNY RTX 3080TI XLR8"), // This is the ids of my card
];
function hexToRgb(hex) {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
const colors = [];
colors[0] = parseInt(result[1], 16);
colors[1] = parseInt(result[2], 16);
colors[2] = parseInt(result[3], 16);
return colors;
}
I really appreciate any help you can provide.