Avoid filling the logs with repeated warning saying that no correct
voltage value was found for a power device. Improves the situation with
bugs https://bugzilla.redhat.com/show_bug.cgi?id=847874 and
https://bugzilla.redhat.com/show_bug.cgi?id=863524

Signed-off-by: Timothée Ravier <t...@siosm.fr>
---

v3: Add a debug message for this specific case as the warning is not always
    displayed anymore.
v2: Removed the GHashTable and used a custom field in UpDeviceSupplyPrivate
    instead as advised by Martin Pitt.

 src/linux/up-device-supply.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index a93d16a..010d017 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -60,6 +60,7 @@ struct UpDeviceSupplyPrivate
        guint                    unknown_retries;
        gboolean                 enable_poll;
        gboolean                 is_power_supply;
+       gboolean                 shown_invalid_voltage_warning;
 };
 
 G_DEFINE_TYPE (UpDeviceSupply, up_device_supply, UP_TYPE_DEVICE)
@@ -372,7 +373,7 @@ out:
  * up_device_supply_get_design_voltage:
  **/
 static gdouble
-up_device_supply_get_design_voltage (const gchar *native_path)
+up_device_supply_get_design_voltage (UpDeviceSupply *device, const gchar 
*native_path)
 {
        gdouble voltage;
        gchar *device_type = NULL;
@@ -413,8 +414,15 @@ up_device_supply_get_design_voltage (const gchar 
*native_path)
                goto out;
        }
 
+       /* no valid value found; display a warning the first time for each
+        * device */
+       if (device->priv->shown_invalid_voltage_warning == FALSE) {
+               device->priv->shown_invalid_voltage_warning = TRUE;
+               g_warning ("no valid voltage value found for device: %s", 
native_path);
+               g_warning ("using 10V as an approximation for device: %s", 
native_path);
+       }
        /* completely guess, to avoid getting zero values */
-       g_warning ("no voltage values for device %s, using 10V as 
approximation", native_path);
+       g_debug ("no valid voltage found, assuming 10V");
        voltage = 10.0f;
 out:
        g_free (device_type);
@@ -527,7 +535,7 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
                energy = sysfs_get_double (native_path, "energy_avg") / 
1000000.0;
 
        /* used to convert A to W later */
-       voltage_design = up_device_supply_get_design_voltage (native_path);
+       voltage_design = up_device_supply_get_design_voltage (supply, 
native_path);
 
        /* initial values */
        if (!supply->priv->has_coldplug_values ||
@@ -1018,6 +1026,8 @@ up_device_supply_init (UpDeviceSupply *supply)
        supply->priv->energy_old = g_new (gdouble, 
UP_DEVICE_SUPPLY_ENERGY_OLD_LENGTH);
        supply->priv->energy_old_timespec = g_new (GTimeVal, 
UP_DEVICE_SUPPLY_ENERGY_OLD_LENGTH);
        supply->priv->energy_old_first = 0;
+
+       supply->priv->shown_invalid_voltage_warning = FALSE;
 }
 
 /**
-- 
1.8.4

_______________________________________________
devkit-devel mailing list
devkit-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/devkit-devel

Reply via email to