private static void SetVoltage(int busId, int voltage) { voltage *= 1000; if (NvapiNativeMethods.NvSetClockBoostLock == null) { return; } try { if (!HandlesByBusId.TryGetValue(busId, out NvPhysicalGpuHandle handle)) { return; } NvGpuClockLock clockLock = NvGpuClockLock.Create(); var r = NvapiNativeMethods.NvGetClockBoostLock(HandlesByBusId[busId], ref clockLock); if (r != NvStatus.NVAPI_OK) { NTMinerConsole.DevError(() => $"{nameof(NvapiNativeMethods.NvGetClockBoostLock)} {r.ToString()}"); } if (r == NvStatus.NVAPI_OK) { uint index = clockLock.Enties[0].index; foreach (var item in clockLock.Enties) { if (item.index > index) { index = item.index; } } if (voltage != 0) { clockLock.Enties[index].mode = 3; } else { clockLock.Enties[index].mode = 0; } clockLock.Enties[index].voltageUV = (uint)voltage; r = NvapiNativeMethods.NvSetClockBoostLock(handle, ref clockLock); if (r != NvStatus.NVAPI_OK) { NTMinerConsole.DevError(() => $"{nameof(NvapiNativeMethods.NvSetClockBoostLock)} {r.ToString()}"); } } } catch { } }