Browse Source

nvapi: improve rgb led stability + multi gpus

2upstream
Tanguy Pruvot 9 years ago
parent
commit
d43084cec6
  1. 7
      ccminer.cpp
  2. 9
      nvml.cpp

7
ccminer.cpp

@ -2960,13 +2960,16 @@ void parse_arg(int key, char *arg)
case 1080: /* --led */ case 1080: /* --led */
{ {
char *pch = strtok(arg,","); char *pch = strtok(arg,",");
int n = 0; int n = 0, val;
while (pch != NULL && n < MAX_GPUS) { while (pch != NULL && n < MAX_GPUS) {
int dev_id = device_map[n++]; int dev_id = device_map[n++];
char * p = strstr(pch, "0x"); char * p = strstr(pch, "0x");
device_led[dev_id] = p ? (int32_t) strtoul(p, NULL, 16) : atoi(arg); val = p ? (int32_t) strtoul(p, NULL, 16) : atoi(pch);
device_led[dev_id] = val;
pch = strtok(NULL, ","); pch = strtok(NULL, ",");
} }
if (val <= 100) while (n < MAX_GPUS)
device_led[n++] = val;
} }
break; break;
case 1005: case 1005:

9
nvml.cpp

@ -782,7 +782,7 @@ int nvml_destroy(nvml_handle *nvmlh)
#ifdef WIN32 #ifdef WIN32
#include "nvapi/nvapi_ccminer.h" #include "nvapi/nvapi_ccminer.h"
static int nvapi_dev_map[MAX_GPUS] = { 0 }; static unsigned int nvapi_dev_map[MAX_GPUS] = { 0 };
static NvDisplayHandle hDisplay_a[NVAPI_MAX_PHYSICAL_GPUS * 2] = { 0 }; static NvDisplayHandle hDisplay_a[NVAPI_MAX_PHYSICAL_GPUS * 2] = { 0 };
static NvPhysicalGpuHandle phys[NVAPI_MAX_PHYSICAL_GPUS] = { 0 }; static NvPhysicalGpuHandle phys[NVAPI_MAX_PHYSICAL_GPUS] = { 0 };
static NvU32 nvapi_dev_cnt = 0; static NvU32 nvapi_dev_cnt = 0;
@ -967,7 +967,7 @@ static int SetGigabyteRGBLogo(unsigned int devNum, uint32_t RGB)
NvU32 readBuf[25] = { 0 }; NvU32 readBuf[25] = { 0 };
NvU32 data[5] = { 0 }; NvU32 data[5] = { 0 };
data[0] = 1; data[0] = 1;
data[2] = swab32(RGB & 0xfffffcU) | 0x40; data[2] = swab32(RGB & 0xfcfcfcU) | 0x40;
i2cInfo->i2cDevAddress = 0x48 << 1; i2cInfo->i2cDevAddress = 0x48 << 1;
i2cInfo->pbI2cRegAddress = (NvU8*) (&data[2]); i2cInfo->pbI2cRegAddress = (NvU8*) (&data[2]);
@ -980,7 +980,7 @@ static int SetGigabyteRGBLogo(unsigned int devNum, uint32_t RGB)
//ret = NvAPI_DLL_I2CWriteEx(phys[devNum], i2cInfo, data); //ret = NvAPI_DLL_I2CWriteEx(phys[devNum], i2cInfo, data);
ret = NvAPI_DLL_I2CReadEx(phys[devNum], i2cInfo, data); ret = NvAPI_DLL_I2CReadEx(phys[devNum], i2cInfo, data);
ret = NvAPI_DLL_I2CReadEx(phys[devNum], i2cInfo, data); usleep(10000);
free(i2cInfo); free(i2cInfo);
return (int) ret; return (int) ret;
} }
@ -1831,7 +1831,8 @@ void gpu_led_on(int dev_id)
void gpu_led_percent(int dev_id, int percent) void gpu_led_percent(int dev_id, int percent)
{ {
#if defined(WIN32) && defined(USE_WRAPNVML) #if defined(WIN32) && defined(USE_WRAPNVML)
int value = (device_led[dev_id] * percent) / 100; // todo rgb percent function (byte per byte)
int value = device_led[dev_id] > 100 ? device_led[dev_id] ^ 0x808080 : (device_led[dev_id] * percent)/100;
if (device_led_state[dev_id] != value) { if (device_led_state[dev_id] != value) {
if (nvapi_set_led(nvapi_dev_map[dev_id], value, device_name[dev_id]) == 0) if (nvapi_set_led(nvapi_dev_map[dev_id], value, device_name[dev_id]) == 0)
device_led_state[dev_id] = value; device_led_state[dev_id] = value;

Loading…
Cancel
Save