PNY 3080TI Uprising support

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.

@ZYX place the attachment in Plugins folder: https://srgbmods.net/s?p=view/userplugins and restart SignalRGB to see if it fix. Have a nice day!

PNY_Turing_Ampere_GPU_Controller.js (5.9 KB)

Hi there Skynsanyty, thanks for your response!

I placed the js file in the plugins as you suggested, now the GPU is being recognized, but I am still getting the same error in the console and the GPU RGB doesn’t seem to respond to anything :frowning:

Its also failing to writeByte when it starts, not only in each frame

export function Initialize() {
	bus.WriteByte(PNYGPU.registers.Control, 0x00);
	bus.WriteByte(PNYGPU.registers.Mode, 0x01);
	bus.WriteByte(PNYGPU.registers.Brightness, 0x64);
	SetGPUNameFromBusIds();
}

May it be a driver problem? I tried to uninstall and stop every other program like VelocityX from PNY :thinking:

I can not debug the writeByte function, is that a native function?

same i have the exact same problem with a rtx 4060ti