[Pkg-xfce-devel] Bug#458978: xfce4-sensors-plugin: lm-sensors transition

Aurelien Jarno aurel32 at debian.org
Thu Jan 3 23:57:26 UTC 2008


Package: xfce4-sensors-plugin
Version: 0.10.99.2-1
Severity: wishlist
Tags: patch

Hi,

A new upstream version of lm-sensors has been released upstream. The API
has changed, so the softwares using libsensors3 have to be modified so
that they can use libsensors4. It is planned to keep both versions for a
while, but the goal is to get rid of libsensors3 in Lenny.

You will find attached a patch for xfce4-sensors-plugin that changes
both upstream code and debian/ directory. I have moved lm-sensors from
Depends: to Recommends: as the configuration file has been moved to the
library, so it is not strictly necessary anymore to have lm-sensors
installed to get xfce4-sensors-plugin working.

Could you please apply this patch in your next upload?

Thanks,
Aurelien

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.23-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
-------------- next part --------------
diff -u xfce4-sensors-plugin-0.10.99.2/debian/control xfce4-sensors-plugin-0.10.99.2/debian/control
--- xfce4-sensors-plugin-0.10.99.2/debian/control
+++ xfce4-sensors-plugin-0.10.99.2/debian/control
@@ -3,7 +3,7 @@
 Priority: optional
 Maintainer: Debian Xfce Maintainers <pkg-xfce-devel at lists.alioth.debian.org>
 Uploaders: Emanuele Rocca <ema at debian.org>, Simon Huggins <huggie at earth.li>, Rudy Godoy <rudy at kernel-panik.org>, Yves-Alexis Perez <corsac at debian.org>, Stefan Ott <stefan at desire.ch>
-Build-Depends: cdbs, debhelper (>= 4.1), libgtk2.0-dev, xfce4-panel-dev (>= 4.4.1), libxml2-dev, libsensors-dev, libxml-parser-perl
+Build-Depends: cdbs, debhelper (>= 4.1), libgtk2.0-dev, xfce4-panel-dev (>= 4.4.1), libxml2-dev, libsensors4-dev, libxml-parser-perl
 Standards-Version: 3.7.3
 Homepage: http://goodies.xfce.org/
 Vcs-Svn: svn://svn.debian.org/pkg-xfce/goodies/xfce4-sensors-plugin/
@@ -11,8 +11,8 @@
 
 Package: xfce4-sensors-plugin
 Architecture: any
-Depends: ${shlibs:Depends}, lm-sensors
-Recommends: hddtemp
+Depends: ${shlibs:Depends}
+Recommends: hddtemp, lm-sensors
 Suggests: xsensors
 Description: hardware sensors plugin for the Xfce4 panel
  The sensors plugin reads your hardware sensor values and displays
only in patch2:
unchanged:
--- xfce4-sensors-plugin-0.10.99.2.orig/panel-plugin/middlelayer.c
+++ xfce4-sensors-plugin-0.10.99.2/panel-plugin/middlelayer.c
@@ -110,6 +110,7 @@
 }
 
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
 void
 categorize_sensor_type (t_chipfeature* chipfeature)
 {
@@ -141,7 +142,7 @@
 
    TRACE ("leaves categorize_sensor_type");
 }
-
+#endif
 
 int
 sensors_get_feature_wrapper (t_chip *chip, int number, double *value)
@@ -153,7 +154,11 @@
 
     if (chip->type==LMSENSOR ) {
         #ifdef HAVE_LIBSENSORS
-            return sensors_get_feature (*(chip->chip_name), number, value);
+            #if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+                return sensors_get_feature (*(chip->chip_name), number, value);
+            #else
+                return sensors_get_value (chip->chip_name, number, value);
+            #endif
         #else
             return -1;
         #endif
only in patch2:
unchanged:
--- xfce4-sensors-plugin-0.10.99.2.orig/panel-plugin/lmsensors.c
+++ xfce4-sensors-plugin-0.10.99.2/panel-plugin/lmsensors.c
@@ -47,12 +47,28 @@
     chip->chip_name = (sensors_chip_name *) g_malloc (sizeof(sensors_chip_name));
     memcpy ( (void *) (chip->chip_name), (void *) name, sizeof(sensors_chip_name) );
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
     chip->sensorId = g_strdup_printf ("%s-%x-%x", name->prefix, name->bus, name->addr);
+#else
+    switch (name->bus.type) {
+        case SENSORS_BUS_TYPE_I2C:
+        case SENSORS_BUS_TYPE_SPI:
+            chip->sensorId = g_strdup_printf ("%s-%x-%x", name->prefix,
+                                              name->bus.nr, name->addr);
+            break;
+        default:
+            chip->sensorId = g_strdup_printf ("%s-%x", name->prefix, name->addr);
+    }
+#endif
     chip->num_features=0;
     chip->name = g_strdup (_("LM Sensors"));
     chip->chip_features = g_ptr_array_new();
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
     chip->description = g_strdup (sensors_get_adapter_name (num_sensorchips-1));
+#else
+    chip->description = g_strdup (sensors_get_adapter_name (&name->bus));
+#endif
 
     TRACE("leaves setup_chip");
 
@@ -71,14 +87,23 @@
     chipfeature->address = number;
     chipfeature->show = FALSE;
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
     categorize_sensor_type (chipfeature);
+#endif
 
     TRACE("leaves setup_chipfeature");
 }
 
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
 t_chipfeature *find_chipfeature    (const sensors_chip_name *name, t_chip *chip, int number)
 {
+#else
+t_chipfeature *find_chipfeature    (const sensors_chip_name *name, t_chip *chip, const sensors_feature *feature)
+{
+    const sensors_subfeature *sub_feature = NULL;
+    int number = -1;
+#endif
     int res;
     double sensorFeature;
     t_chipfeature *chipfeature;
@@ -87,6 +112,7 @@
 
     chipfeature = g_new0 (t_chipfeature, 1);
 
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
     if (sensors_get_ignored (*(name), number)==1) {
         res = sensors_get_label(*(name), number,
                                 &(chipfeature->name));
@@ -95,6 +121,87 @@
             res = sensors_get_feature (*(name), number,
                                         &sensorFeature);
 
+#else /* libsensors 4 code */
+
+    switch (feature->type) {
+    case SENSORS_FEATURE_IN:
+        sub_feature = sensors_get_subfeature(name, feature,
+                                             SENSORS_SUBFEATURE_IN_INPUT);
+        if (!sub_feature)
+            break;
+
+        number = sub_feature->number;
+        chipfeature->class = VOLTAGE;
+        chipfeature->min_value = 2.8;
+        chipfeature->max_value = 12.2;
+
+        if ((sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_IN_MIN)) &&
+                !sensors_get_value(name, sub_feature->number, &sensorFeature))
+            chipfeature->min_value = sensorFeature;
+
+        if ((sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_IN_MAX)) &&
+                !sensors_get_value(name, sub_feature->number, &sensorFeature))
+            chipfeature->max_value = sensorFeature;
+
+        break;
+
+    case SENSORS_FEATURE_FAN:
+        sub_feature = sensors_get_subfeature(name, feature,
+                                             SENSORS_SUBFEATURE_FAN_INPUT);
+        if (!sub_feature)
+            break;
+
+        number = sub_feature->number;
+        chipfeature->class = SPEED;
+        chipfeature->min_value = 1000.0;
+        chipfeature->max_value = 3500.0;
+
+        if ((sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_FAN_MIN)) &&
+                !sensors_get_value(name, sub_feature->number, &sensorFeature))
+            chipfeature->min_value = sensorFeature;
+
+        break;
+
+    case SENSORS_FEATURE_TEMP:
+        sub_feature = sensors_get_subfeature(name, feature,
+                                             SENSORS_SUBFEATURE_TEMP_INPUT);
+        if (!sub_feature)
+            break;
+
+        number = sub_feature->number;
+        chipfeature->class = TEMPERATURE;
+        chipfeature->min_value = 0.0;
+        chipfeature->max_value = 80.0;
+
+        if ((sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_TEMP_MIN)) &&
+                !sensors_get_value(name, sub_feature->number, &sensorFeature))
+            chipfeature->min_value = sensorFeature;
+
+        if (((sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_TEMP_MAX)) ||
+                (sub_feature = sensors_get_subfeature(name, feature,
+                SENSORS_SUBFEATURE_TEMP_CRIT))) &&
+                !sensors_get_value(name, sub_feature->number, &sensorFeature))
+            chipfeature->max_value = sensorFeature;
+    }
+
+    if (number != -1) {
+
+        chipfeature->name = sensors_get_label(name, feature);
+
+        if (!chipfeature->name)
+            chipfeature->name = feature->name;
+
+        if (chipfeature->name) {
+            res = sensors_get_value (name, number,
+                                        &sensorFeature);
+
+#endif /* libsensor3 / libsensors4 code */
+
             if (res==0) {
                 setup_chipfeature (chipfeature, number, sensorFeature);
                 chip->num_features++;
@@ -103,6 +210,7 @@
             }
         }
     }
+    g_free(chipfeature);
 
     TRACE("leaves find_chipfeature with null");
     return NULL;
@@ -114,8 +222,9 @@
     int sensorsInit, nr1, nr2, num_sensorchips; /*    , numchips;  */
     t_chip *chip;
     t_chipfeature *chipfeature; /* , *furtherchipfeature; */
-    FILE *file;
     const sensors_chip_name *detected_chip;
+#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+    FILE *file;
     const sensors_feature_data *sfd;
 
     TRACE("enters initialize_libsensors");
@@ -167,6 +276,45 @@
         TRACE ("leaves initialize_libsensors with -1");
         return -1;
     }
+#else
+    const sensors_feature *sfd;
+    TRACE("enters initialize_libsensors");
+    
+    sensorsInit = sensors_init(NULL);
+    if (sensorsInit != 0)
+    {
+        g_printf(_("Error: Could not connect to sensors!"));
+        /* FIXME: better popup window? write to special logfile? */
+        return -2;
+    }
+
+    num_sensorchips = 0;
+    detected_chip = sensors_get_detected_chips (NULL, &num_sensorchips);
+    /* iterate over chips on mainboard */
+    while (detected_chip!=NULL)
+    {
+        chip = setup_chip (chips, detected_chip, num_sensorchips);
+
+        nr1 = 0;
+        nr2 = 0;
+        /* iterate over chip features, i.e. id, cpu temp, mb temp... */
+        /* numchips = get_number_chip_features (detected_chip); */
+        sfd = sensors_get_features (detected_chip, &nr1);
+        while (sfd != NULL)
+        {
+            chipfeature = find_chipfeature (detected_chip, chip, sfd);
+            if (chipfeature!=NULL) {
+                g_ptr_array_add (chip->chip_features, chipfeature);
+            }
+            sfd = sensors_get_features (detected_chip, &nr1);
+        }
+
+        detected_chip = sensors_get_detected_chips (NULL, &num_sensorchips);
+    } /* end while sensor chipNames */
+
+    TRACE ("leaves initialize_libsensors with 1");
+    return 1;
+#endif
 }
 
 


More information about the Pkg-xfce-devel mailing list