2 * Authors.....: Jens Steube <jens.steube@gmail.com>
6 #include <ext_xnvctrl.h>
8 int xnvctrl_init (XNVCTRL_PTR
*xnvctrl
)
10 if (!xnvctrl
) return -1;
12 memset (xnvctrl
, 0, sizeof (XNVCTRL_PTR
));
16 // unsupport platform?
21 xnvctrl
->lib_x11
= dlopen ("libX11.so", RTLD_LAZY
);
23 if (xnvctrl
->lib_x11
== NULL
)
25 if (data
.quiet
== 0) log_info ("WARNING: Failed loading the X11 library: %s", dlerror());
26 if (data
.quiet
== 0) log_info (" Please install libx11-dev package.");
27 if (data
.quiet
== 0) log_info ("");
32 xnvctrl
->lib_xnvctrl
= dlopen ("libXNVCtrl.so", RTLD_LAZY
);
34 if (xnvctrl
->lib_xnvctrl
== NULL
)
36 if (data
.quiet
== 0) log_info ("WARNING: Failed loading the XNVCTRL library: %s", dlerror());
37 if (data
.quiet
== 0) log_info (" Please install libxnvctrl-dev package.");
38 if (data
.quiet
== 0) log_info ("");
43 HC_LOAD_FUNC2 (xnvctrl
, XOpenDisplay
, XOPENDISPLAY
, lib_x11
, X11
, 0);
44 HC_LOAD_FUNC2 (xnvctrl
, XCloseDisplay
, XCLOSEDISPLAY
, lib_x11
, X11
, 0);
46 HC_LOAD_FUNC2 (xnvctrl
, XNVCTRLQueryTargetAttribute
, XNVCTRLQUERYTARGETATTRIBUTE
, lib_xnvctrl
, XNVCTRL
, 0);
47 HC_LOAD_FUNC2 (xnvctrl
, XNVCTRLSetTargetAttribute
, XNVCTRLSETTARGETATTRIBUTE
, lib_xnvctrl
, XNVCTRL
, 0);
54 void xnvctrl_close (XNVCTRL_PTR
*xnvctrl
)
62 dlclose (xnvctrl
->lib_x11
);
65 if (xnvctrl
->lib_xnvctrl
)
67 dlclose (xnvctrl
->lib_xnvctrl
);
76 int hm_XNVCTRL_XOpenDisplay (XNVCTRL_PTR
*xnvctrl
)
78 if (xnvctrl
== NULL
) return -1;
80 if (xnvctrl
->XOpenDisplay
== NULL
) return -1;
82 void *dpy
= xnvctrl
->XOpenDisplay (NULL
);
96 void hm_XNVCTRL_XCloseDisplay (XNVCTRL_PTR
*xnvctrl
)
98 if (xnvctrl
== NULL
) return;
100 if (xnvctrl
->XCloseDisplay
== NULL
) return;
102 if (xnvctrl
->dpy
== NULL
) return;
104 xnvctrl
->XCloseDisplay (xnvctrl
->dpy
);
107 int get_fan_control (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
109 if (xnvctrl
== NULL
) return -1;
111 if (xnvctrl
->XNVCTRLQueryTargetAttribute
== NULL
) return -1;
113 if (xnvctrl
->dpy
== NULL
) return -1;
115 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_COOLER_MANUAL_CONTROL
, val
);
122 int set_fan_control (XNVCTRL_PTR
*xnvctrl
, int gpu
, int val
)
124 if (xnvctrl
== NULL
) return -1;
126 if (xnvctrl
->XNVCTRLSetTargetAttribute
== NULL
) return -1;
128 if (xnvctrl
->dpy
== NULL
) return -1;
132 int rc
= get_fan_control (xnvctrl
, gpu
, &cur
);
134 if (rc
== -1) return -1;
136 xnvctrl
->XNVCTRLSetTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_COOLER_MANUAL_CONTROL
, val
);
138 rc
= get_fan_control (xnvctrl
, gpu
, &cur
);
140 if (rc
== -1) return -1;
142 if (cur
!= val
) return -1;
147 int get_core_threshold (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
149 if (xnvctrl
== NULL
) return -1;
151 if (xnvctrl
->XNVCTRLQueryTargetAttribute
== NULL
) return -1;
153 if (xnvctrl
->dpy
== NULL
) return -1;
155 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_CORE_THRESHOLD
, val
);
162 int get_fan_speed_current (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
164 if (xnvctrl
== NULL
) return -1;
166 if (xnvctrl
->XNVCTRLQueryTargetAttribute
== NULL
) return -1;
168 if (xnvctrl
->dpy
== NULL
) return -1;
170 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_CURRENT_LEVEL
, val
);
177 int get_fan_speed_target (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
179 if (xnvctrl
== NULL
) return -1;
181 if (xnvctrl
->XNVCTRLQueryTargetAttribute
== NULL
) return -1;
183 if (xnvctrl
->dpy
== NULL
) return -1;
185 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_LEVEL
, val
);
192 int set_fan_speed_target (XNVCTRL_PTR
*xnvctrl
, int gpu
, int val
)
194 if (xnvctrl
== NULL
) return -1;
196 if (xnvctrl
->XNVCTRLSetTargetAttribute
== NULL
) return -1;
198 if (xnvctrl
->dpy
== NULL
) return -1;
202 int rc
= get_fan_speed_target (xnvctrl
, gpu
, &cur
);
204 if (rc
== -1) return -1;
206 xnvctrl
->XNVCTRLSetTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_LEVEL
, val
);
208 rc
= get_fan_speed_target (xnvctrl
, gpu
, &cur
);
210 if (rc
== -1) return -1;
212 if (cur
!= val
) return -1;