mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-05-20 08:58:12 +02:00
daemon: Add WarningLevel device property
This commit is contained in:
parent
68aca3a7e7
commit
de749a332b
4 changed files with 109 additions and 0 deletions
|
|
@ -684,6 +684,32 @@ method return sender=:1.386 -> dest=:1.477 reply_serial=2
|
|||
</doc:doc>
|
||||
</property>
|
||||
|
||||
<property name="WarningLevel" type="u" access="read">
|
||||
<doc:doc>
|
||||
<doc:description>
|
||||
<doc:para>
|
||||
Warning level of the battery:
|
||||
</doc:para>
|
||||
<doc:list>
|
||||
<doc:item>
|
||||
<doc:term>0</doc:term><doc:definition>Unknown</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<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:item>
|
||||
<doc:item>
|
||||
<doc:term>3</doc:term><doc:definition>Critical</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>4</doc:term><doc:definition>Action</doc:definition>
|
||||
</doc:item>
|
||||
</doc:list>
|
||||
</doc:description>
|
||||
</doc:doc>
|
||||
</property>
|
||||
</interface>
|
||||
|
||||
</node>
|
||||
|
|
|
|||
|
|
@ -437,6 +437,37 @@ up_daemon_set_on_low_battery (UpDaemon *daemon, gboolean on_low_battery)
|
|||
g_object_notify (G_OBJECT (daemon), "on-low-battery");
|
||||
}
|
||||
|
||||
UpDeviceLevel
|
||||
up_daemon_compute_warning_level(UpDaemon *daemon,
|
||||
gboolean power_supply,
|
||||
gdouble percentage,
|
||||
gint64 time_to_empty)
|
||||
{
|
||||
gboolean use_percentage = TRUE;
|
||||
|
||||
if (!power_supply || !daemon->priv->use_percentage_for_policy)
|
||||
use_percentage = FALSE;
|
||||
|
||||
if (use_percentage) {
|
||||
if (percentage > daemon->priv->low_percentage)
|
||||
return UP_DEVICE_LEVEL_NONE;
|
||||
if (percentage > daemon->priv->critical_percentage)
|
||||
return UP_DEVICE_LEVEL_LOW;
|
||||
if (percentage > daemon->priv->action_percentage)
|
||||
return UP_DEVICE_LEVEL_CRITICAL;
|
||||
return UP_DEVICE_LEVEL_ACTION;
|
||||
} else {
|
||||
if (time_to_empty > daemon->priv->low_time)
|
||||
return UP_DEVICE_LEVEL_NONE;
|
||||
if (time_to_empty > daemon->priv->critical_time)
|
||||
return UP_DEVICE_LEVEL_LOW;
|
||||
if (time_to_empty > daemon->priv->action_time)
|
||||
return UP_DEVICE_LEVEL_CRITICAL;
|
||||
return UP_DEVICE_LEVEL_ACTION;
|
||||
}
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
/**
|
||||
* up_daemon_refresh_battery_devices_cb:
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -83,6 +83,11 @@ void up_daemon_set_on_battery (UpDaemon *daemon,
|
|||
gboolean on_battery);
|
||||
void up_daemon_set_on_low_battery (UpDaemon *daemon,
|
||||
gboolean on_low_battery);
|
||||
UpDeviceLevel up_daemon_compute_warning_level(UpDaemon *daemon,
|
||||
gboolean power_supply,
|
||||
gdouble percentage,
|
||||
gint64 time_to_empty);
|
||||
|
||||
|
||||
/* exported */
|
||||
gboolean up_daemon_enumerate_devices (UpDaemon *daemon,
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ struct UpDevicePrivate
|
|||
gint64 time_to_full; /* seconds */
|
||||
gdouble percentage; /* percent */
|
||||
gdouble temperature; /* degrees C */
|
||||
UpDeviceLevel warning_level;
|
||||
};
|
||||
|
||||
static gboolean up_device_register_device (UpDevice *device);
|
||||
|
|
@ -110,6 +111,7 @@ enum {
|
|||
PROP_PERCENTAGE,
|
||||
PROP_TEMPERATURE,
|
||||
PROP_TECHNOLOGY,
|
||||
PROP_WARNING_LEVEL,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
|
|
@ -165,6 +167,32 @@ up_device_error_get_type (void)
|
|||
return etype;
|
||||
}
|
||||
|
||||
/* This needs to be called when one of those properties changes:
|
||||
* state
|
||||
* power_supply
|
||||
* percentage
|
||||
* time_to_empty
|
||||
*/
|
||||
static void
|
||||
update_warning_level (UpDevice *device)
|
||||
{
|
||||
UpDeviceLevel warning_level;
|
||||
|
||||
if (device->priv->state != UP_DEVICE_STATE_DISCHARGING)
|
||||
warning_level = UP_DEVICE_LEVEL_NONE;
|
||||
else
|
||||
warning_level = up_daemon_compute_warning_level (device->priv->daemon,
|
||||
device->priv->power_supply,
|
||||
device->priv->percentage,
|
||||
device->priv->time_to_empty);
|
||||
|
||||
if (warning_level == device->priv->warning_level)
|
||||
return;
|
||||
|
||||
device->priv->warning_level = warning_level;
|
||||
g_object_notify (G_OBJECT (device), "warning-level");
|
||||
}
|
||||
|
||||
/**
|
||||
* up_device_get_property:
|
||||
**/
|
||||
|
|
@ -251,6 +279,9 @@ up_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpe
|
|||
case PROP_TECHNOLOGY:
|
||||
g_value_set_uint (value, device->priv->technology);
|
||||
break;
|
||||
case PROP_WARNING_LEVEL:
|
||||
g_value_set_uint (value, device->priv->warning_level);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
|
@ -290,6 +321,7 @@ up_device_set_property (GObject *object, guint prop_id, const GValue *value, GPa
|
|||
break;
|
||||
case PROP_POWER_SUPPLY:
|
||||
device->priv->power_supply = g_value_get_boolean (value);
|
||||
update_warning_level (device);
|
||||
break;
|
||||
case PROP_ONLINE:
|
||||
device->priv->online = g_value_get_boolean (value);
|
||||
|
|
@ -308,6 +340,7 @@ up_device_set_property (GObject *object, guint prop_id, const GValue *value, GPa
|
|||
break;
|
||||
case PROP_STATE:
|
||||
device->priv->state = g_value_get_uint (value);
|
||||
update_warning_level (device);
|
||||
break;
|
||||
case PROP_CAPACITY:
|
||||
device->priv->capacity = g_value_get_double (value);
|
||||
|
|
@ -335,12 +368,14 @@ up_device_set_property (GObject *object, guint prop_id, const GValue *value, GPa
|
|||
break;
|
||||
case PROP_TIME_TO_EMPTY:
|
||||
device->priv->time_to_empty = g_value_get_int64 (value);
|
||||
update_warning_level (device);
|
||||
break;
|
||||
case PROP_TIME_TO_FULL:
|
||||
device->priv->time_to_full = g_value_get_int64 (value);
|
||||
break;
|
||||
case PROP_PERCENTAGE:
|
||||
device->priv->percentage = g_value_get_double (value);
|
||||
update_warning_level (device);
|
||||
break;
|
||||
case PROP_TEMPERATURE:
|
||||
device->priv->temperature = g_value_get_double (value);
|
||||
|
|
@ -1151,6 +1186,18 @@ up_device_class_init (UpDeviceClass *klass)
|
|||
0.0, G_MAXDOUBLE, 0.0,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* UpDevice:warning-level:
|
||||
*/
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_WARNING_LEVEL,
|
||||
g_param_spec_uint ("warning-level",
|
||||
NULL, NULL,
|
||||
UP_DEVICE_LEVEL_UNKNOWN,
|
||||
UP_DEVICE_LEVEL_LAST,
|
||||
UP_DEVICE_LEVEL_UNKNOWN,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
dbus_g_error_domain_register (UP_DEVICE_ERROR, NULL, UP_DEVICE_TYPE_ERROR);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue