From 06a780020823612636aff82034336588cc0f7a7a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sun, 12 Jun 2011 20:51:35 +0000 Subject: [PATCH] code cleanup --- src/lib/nvidia.c | 109 +++++++++++++++++++++++++------------------------------ src/lib/nvidia.h | 14 +++---- 2 files changed, 55 insertions(+), 68 deletions(-) diff --git a/src/lib/nvidia.c b/src/lib/nvidia.c index 505522d..a8060c3 100644 --- a/src/lib/nvidia.c +++ b/src/lib/nvidia.c @@ -30,32 +30,33 @@ #include #include - #include "psensor.h" -Display *nvidia_sensors_dpy; +Display *display; -int nvidia_get_sensor_temp(struct psensor *sensor) +/* + Returns the temperature (Celcius) of a NVidia GPU. +*/ +static int get_temp(struct psensor *sensor) { int temp; Bool res; - res = XNVCTRLQueryTargetAttribute(nvidia_sensors_dpy, + res = XNVCTRLQueryTargetAttribute(display, NV_CTRL_TARGET_TYPE_GPU, sensor->nvidia_id, 0, - NV_CTRL_GPU_CORE_TEMPERATURE, &temp); + NV_CTRL_GPU_CORE_TEMPERATURE, + &temp); - if (res == True) { + if (res == True) return temp; - } else { - fprintf(stderr, - _("ERROR: failed to retrieve nvidia temperature\n")); - return 0; - } + + fprintf(stderr, _("ERROR: failed to retrieve nvidia temperature\n")); + return 0; } -struct psensor *nvidia_create_sensor(int id, int values_max_length) +static struct psensor *create_sensor(int id, int values_len) { char name[200]; char *sid; @@ -67,84 +68,74 @@ struct psensor *nvidia_create_sensor(int id, int values_max_length) sprintf(sid, "nvidia %s", name); s = psensor_create(sid, strdup(name), - SENSOR_TYPE_NVIDIA, values_max_length); + SENSOR_TYPE_NVIDIA, values_len); s->nvidia_id = id; return s; } -int nvidia_init() +/* + Opens connection to X server and returns the number + of NVidia GPUs. + + Return 0 if no NVidia gpus or cannot get information. +*/ +static int init() { - int event_base, error_base; - int num_gpus; + int evt, err, n; - nvidia_sensors_dpy = XOpenDisplay(NULL); + display = XOpenDisplay(NULL); - if (!nvidia_sensors_dpy) { - fprintf(stderr, _("ERROR: nvidia initialization failure\n")); + if (!display) { + fprintf(stderr, + _("ERROR: Cannot open connection to X Server\n")); return 0; } - if (XNVCTRLQueryExtension(nvidia_sensors_dpy, &event_base, - &error_base)) { - if (XNVCTRLQueryTargetCount(nvidia_sensors_dpy, - NV_CTRL_TARGET_TYPE_GPU, - &num_gpus)) { - return num_gpus; - } - - } + if (XNVCTRLQueryExtension(display, &evt, &err) && + XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n)) + return n; - fprintf(stderr, _("ERROR: nvidia initialization failure: %d\n"), - error_base); + fprintf(stderr, _("ERROR: Cannot retrieve NVidia information\n")); return 0; } void nvidia_psensor_list_update(struct psensor **sensors) { - struct psensor **s_ptr = sensors; + struct psensor **ss, *s; - while (*s_ptr) { - struct psensor *sensor = *s_ptr; + ss = sensors; + while (*ss) { + s = *ss; - if (sensor->type == SENSOR_TYPE_NVIDIA) { - int val = nvidia_get_sensor_temp(sensor); + if (s->type == SENSOR_TYPE_NVIDIA) + psensor_set_current_value(s, get_temp(s)); - psensor_set_current_value(sensor, (double)val); - } - - s_ptr++; + ss++; } } -struct psensor **nvidia_psensor_list_add(struct psensor **sensors, - int values_max_length) +struct psensor * * +nvidia_psensor_list_add(struct psensor **sensors, int values_len) { - int i; - int nvidia_gpus_count = nvidia_init(); - struct psensor **res = sensors; - + int i, n; + struct psensor **tmp, **ss, *s; - if (!nvidia_gpus_count) { - fprintf(stderr, - _("ERROR: " - "no nvidia chips or initialization failure\n")); - } + n = init(); - for (i = 0; i < nvidia_gpus_count; i++) { - struct psensor *sensor - = nvidia_create_sensor(i, values_max_length); + ss = sensors; + for (i = 0; i < n; i++) { + s = create_sensor(i, values_len); - struct psensor **tmp_psensors = psensor_list_add(res, - sensor); + tmp = psensor_list_add(ss, s); - if (res != sensors) - free(res); + if (ss != tmp) + free(ss); - res = tmp_psensors; + ss = tmp; } - return res; + return ss; } diff --git a/src/lib/nvidia.h b/src/lib/nvidia.h index 8936e53..1aafe69 100644 --- a/src/lib/nvidia.h +++ b/src/lib/nvidia.h @@ -22,20 +22,16 @@ #include "psensor.h" -int nvidia_get_sensor_temp(struct psensor *); - -struct psensor *nvidia_create_sensor(int id, int values_max_length); - -int nvidia_init(); - +/* + Updates temperatures of NVidia sensors. +*/ void nvidia_psensor_list_update(struct psensor **sensors); - /* Adds NVIDIA sensors to a given list of sensors. - Returns the new allocated list of sensors if sensors have been added otherwise - returns 'sensors'. The list is 'NULL' terminated. + Returns the new allocated list of sensors if sensors have been added + otherwise returns 'sensors'. The list is 'NULL' terminated. */ struct psensor **nvidia_psensor_list_add(struct psensor **sensors, int values_max_length); -- 2.7.4