#include "torsmo.h"
#include "NVCtrl.h"
#include "NVCtrlLib.h"

/* nvctrl */
unsigned int init_nvctrl(const char *feat) {
  if (strcmp(feat, "temp") == 0) 
    return NV_CTRL_GPU_CORE_TEMPERATURE;
  else if (strcmp(feat, "ambient") == 0)
    return NV_CTRL_AMBIENT_TEMPERATURE;
  else
    ERR("Unknown parameter %s for nvctrl", feat);

  return 0;
}

int get_nvctrl_info(unsigned int arg) {
    if(arg == 0) return -1;
    
    Display* dpy = XOpenDisplay(NULL);
    if (!dpy) {
        ERR("Cannot open display '%s'.", XDisplayName(NULL));
        return -1;
    }
    
    int screen = DefaultScreen(dpy);

    if (!XNVCTRLIsNvScreen(dpy, screen)) {
        ERR("The NV-CONTROL X not available on screen %d of '%s'.", screen, XDisplayName(NULL));
        return -1;
    }

    int display_devices;
    Bool ret = XNVCTRLQueryAttribute(dpy, screen, 0, NV_CTRL_ENABLED_DISPLAYS, &display_devices);
    if (!ret) {
        ERR("Unable to determine enabled display devices for screen %d of '%s'\n", screen, XDisplayName(NULL));
        return -1;
    }

    // get temp for first display found
    int mask;
    for (mask = 1; mask < (1<<24); mask <<= 1) {
        if (!(mask & display_devices)) continue;
        
        int retval;
        ret = XNVCTRLQueryAttribute(dpy, screen, mask, arg, &retval);

        return (ret ? retval : -1);
    }
    
    return -1;
}


syntax highlighted by Code2HTML, v. 0.9.1