work on libata support
authorJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 9 Jan 2012 08:30:43 +0000 (08:30 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 9 Jan 2012 08:30:43 +0000 (08:30 +0000)
src/lib/hdd_atasmart.c
src/lib/psensor.h

index 592fcbd..cb5200f 100644 (file)
 #define _(str) gettext(str)
 
 #include <stdlib.h>
+#include <string.h>
+
 #include <atasmart.h>
 
+#include "pio.h"
 #include "hdd.h"
 #include "log.h"
 
+static int filter_sd(const char *p)
+{
+       return strlen(p) == 8 && !strncmp(p, "/dev/sd", 7);
+}
+
+static struct psensor *
+create_sensor(char *id, char *name, int values_max_length)
+{
+       return psensor_create(id,
+                             strdup(name),
+                             SENSOR_TYPE_HDD_TEMP,
+                             values_max_length);
+}
+
 struct psensor **hdd_psensor_list_add(struct psensor **sensors,
                                      int values_max_length)
 {
+       char **paths, **tmp;
+       SkDisk *disk;
+       struct psensor *sensor, **tmp_sensors, **result;
 
        log_debug("hdd_psensor_list_add");
 
-       return sensors;
+       paths = dir_list("/dev", filter_sd);
+
+       result = sensors;
+       tmp = paths;
+       while (*tmp) {
+               log_debug("hdd_psensor_list_add open %s", tmp);
+
+               if (!sk_disk_open(*tmp, &disk)) {
+                       char *id = malloc(strlen("hdd at") + strlen(*tmp) + 1);
+                       strcpy(id, "hdd at");
+                       strcat(id, *tmp);
+
+                       sensor = create_sensor(id, *tmp, values_max_length);
+
+                       tmp_sensors = psensor_list_add(result, sensor);
+
+                       if (result != sensors)
+                               free(result);
+
+                       result = tmp_sensors;
+               } else {
+                       log_err("Failed to open %s", *tmp);
+               }
+
+               tmp++;
+       }
+
+       paths_free(paths);
+
+       return result;
 }
 
 void hdd_psensor_list_update(struct psensor **sensors)
index a750bb1..968b4d4 100644 (file)
 #include "config.h"
 #include <sensors/sensors.h>
 
+#ifdef HAVE_ATASMART
+#include <atasmart.h>
+#endif
+
 #include "color.h"
 #include "log.h"
 #include "measure.h"
@@ -102,6 +106,9 @@ struct psensor {
        /* AMD id for the aticonfig */
        int amd_id;
 #endif
+#ifdef HAVE_ATASMART
+       SkDisk *disk;
+#endif
 
        char *url;
 };