summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-10-14 14:33:54 +0200
committerBastien Nocera <hadess@hadess.net>2013-10-14 14:38:32 +0200
commitb446cac8f697fb1417f8d07190f95fa40b690260 (patch)
treeb1646d59e3fc1a4265490bdd681d749bb0bab723
parent77c3278ff525edf30e2e7adb417a8944b59ccefa (diff)
daemon: Add new WarningLevel "Discharging"
When UPSes are discharging, we should have a warning already, as it means that mains power has been lost to the UPS (though not to the computer).
-rw-r--r--libupower-glib/up-types.c4
-rw-r--r--libupower-glib/up-types.h1
-rw-r--r--src/org.freedesktop.UPower.Device.xml9
-rw-r--r--src/up-daemon.c7
4 files changed, 16 insertions, 5 deletions
diff --git a/libupower-glib/up-types.c b/libupower-glib/up-types.c
index db0aa68..71d8036 100644
--- a/libupower-glib/up-types.c
+++ b/libupower-glib/up-types.c
@@ -250,6 +250,8 @@ up_device_level_to_string (UpDeviceLevel level_enum)
return "unknown";
case UP_DEVICE_LEVEL_NONE:
return "none";
+ case UP_DEVICE_LEVEL_DISCHARGING:
+ return "discharging";
case UP_DEVICE_LEVEL_LOW:
return "low";
case UP_DEVICE_LEVEL_CRITICAL:
@@ -280,6 +282,8 @@ up_device_level_from_string (const gchar *level)
return UP_DEVICE_LEVEL_UNKNOWN;
if (g_strcmp0 (level, "none") == 0)
return UP_DEVICE_LEVEL_NONE;
+ if (g_strcmp0 (level, "discharging") == 0)
+ return UP_DEVICE_LEVEL_DISCHARGING;
if (g_strcmp0 (level, "low") == 0)
return UP_DEVICE_LEVEL_LOW;
if (g_strcmp0 (level, "critical") == 0)
diff --git a/libupower-glib/up-types.h b/libupower-glib/up-types.h
index 0a175bc..7b09604 100644
--- a/libupower-glib/up-types.h
+++ b/libupower-glib/up-types.h
@@ -91,6 +91,7 @@ typedef enum {
typedef enum {
UP_DEVICE_LEVEL_UNKNOWN,
UP_DEVICE_LEVEL_NONE,
+ UP_DEVICE_LEVEL_DISCHARGING,
UP_DEVICE_LEVEL_LOW,
UP_DEVICE_LEVEL_CRITICAL,
UP_DEVICE_LEVEL_ACTION,
diff --git a/src/org.freedesktop.UPower.Device.xml b/src/org.freedesktop.UPower.Device.xml
index bbbe20d..d825c4b 100644
--- a/src/org.freedesktop.UPower.Device.xml
+++ b/src/org.freedesktop.UPower.Device.xml
@@ -698,13 +698,16 @@ method return sender=:1.386 -> dest=:1.477 reply_serial=2
<doc:term>1</doc:term><doc:definition>None</doc:definition>
</doc:item>
<doc:item>
- <doc:term>2</doc:term><doc:definition>Low</doc:definition>
+ <doc:term>2</doc:term><doc:definition>Discharging (only for UPSes)</doc:definition>
</doc:item>
<doc:item>
- <doc:term>3</doc:term><doc:definition>Critical</doc:definition>
+ <doc:term>3</doc:term><doc:definition>Low</doc:definition>
</doc:item>
<doc:item>
- <doc:term>4</doc:term><doc:definition>Action</doc:definition>
+ <doc:term>4</doc:term><doc:definition>Critical</doc:definition>
+ </doc:item>
+ <doc:item>
+ <doc:term>5</doc:term><doc:definition>Action</doc:definition>
</doc:item>
</doc:list>
</doc:description>
diff --git a/src/up-daemon.c b/src/up-daemon.c
index 2018a91..ce1d5c5 100644
--- a/src/up-daemon.c
+++ b/src/up-daemon.c
@@ -551,6 +551,7 @@ up_daemon_compute_warning_level (UpDaemon *daemon,
gint64 time_to_empty)
{
gboolean use_percentage = TRUE;
+ UpDeviceLevel default_level = UP_DEVICE_LEVEL_NONE;
if (state != UP_DEVICE_STATE_DISCHARGING)
return UP_DEVICE_LEVEL_NONE;
@@ -566,6 +567,8 @@ up_daemon_compute_warning_level (UpDaemon *daemon,
return UP_DEVICE_LEVEL_LOW;
else
return UP_DEVICE_LEVEL_NONE;
+ } else if (kind == UP_DEVICE_KIND_UPS) {
+ default_level = UP_DEVICE_LEVEL_DISCHARGING;
}
if (!power_supply || !daemon->priv->use_percentage_for_policy)
@@ -573,7 +576,7 @@ up_daemon_compute_warning_level (UpDaemon *daemon,
if (use_percentage) {
if (percentage > daemon->priv->low_percentage)
- return UP_DEVICE_LEVEL_NONE;
+ return default_level;
if (percentage > daemon->priv->critical_percentage)
return UP_DEVICE_LEVEL_LOW;
if (percentage > daemon->priv->action_percentage)
@@ -581,7 +584,7 @@ up_daemon_compute_warning_level (UpDaemon *daemon,
return UP_DEVICE_LEVEL_ACTION;
} else {
if (time_to_empty > daemon->priv->low_time)
- return UP_DEVICE_LEVEL_NONE;
+ return default_level;
if (time_to_empty > daemon->priv->critical_time)
return UP_DEVICE_LEVEL_LOW;
if (time_to_empty > daemon->priv->action_time)