aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2013-10-03 15:42:50 -0500
committerCharles Kerr <charles.kerr@canonical.com>2013-10-03 15:42:50 -0500
commit7c2a156d86696b8ae8793abc6913a63aa05792cb (patch)
tree370156906b5cc82b6aff78a4fdb869f313582c42 /src
parent6c04d1a5a97304fc42e4343a9b38a98e03a81008 (diff)
downloadayatana-indicator-power-7c2a156d86696b8ae8793abc6913a63aa05792cb.tar.gz
ayatana-indicator-power-7c2a156d86696b8ae8793abc6913a63aa05792cb.tar.bz2
ayatana-indicator-power-7c2a156d86696b8ae8793abc6913a63aa05792cb.zip
don't create proxies for each upower device.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am19
-rw-r--r--src/device-provider-upower.c180
-rw-r--r--src/org.freedesktop.UPower.Device.xml705
3 files changed, 126 insertions, 778 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 92117fc..be746db 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -27,31 +27,12 @@ EXTRA_DIST += org.freedesktop.UPower.xml
###
###
-
-upower_device_dbus_sources = \
- dbus-upower-device.c \
- dbus-upower-device.h
-
-$(upower_device_dbus_sources): org.freedesktop.UPower.Device.xml
- $(AM_V_GEN) gdbus-codegen \
- --c-namespace Dbus \
- --interface-prefix org.freedesktop.UPower \
- --generate-c-code dbus-upower-device \
- $^
-
-BUILT_SOURCES += $(upower_device_dbus_sources)
-CLEANFILES += $(upower_device_dbus_sources)
-EXTRA_DIST += org.freedesktop.UPower.Device.xml
-
-###
-###
###
noinst_LIBRARIES = libindicatorpower-upower.a libindicatorpower-service.a
libindicatorpower_upower_a_SOURCES = \
$(upower_dbus_sources) \
- $(upower_device_dbus_sources) \
device-provider-upower.c \
device-provider-upower.h
diff --git a/src/device-provider-upower.c b/src/device-provider-upower.c
index 05faeab..f890a02 100644
--- a/src/device-provider-upower.c
+++ b/src/device-provider-upower.c
@@ -20,7 +20,6 @@
#include "config.h"
#include "dbus-upower.h"
-#include "dbus-upower-device.h"
#include "device.h"
#include "device-provider.h"
#include "device-provider-upower.h"
@@ -34,6 +33,8 @@
struct _IndicatorPowerDeviceProviderUPowerPriv
{
+ GDBusConnection * bus;
+
DbusUPower * upower_proxy;
GHashTable * devices; /* dbus object path --> IndicatorPowerDevice */
GCancellable * cancellable;
@@ -65,6 +66,12 @@ G_DEFINE_TYPE_WITH_CODE (
**** UPOWER DBUS
***/
+struct device_get_all_data
+{
+ char * path;
+ IndicatorPowerDeviceProviderUPower * self;
+};
+
static void
emit_devices_changed (IndicatorPowerDeviceProviderUPower * self)
{
@@ -72,65 +79,95 @@ emit_devices_changed (IndicatorPowerDeviceProviderUPower * self)
}
static void
-on_upower_device_proxy_ready (GObject * o, GAsyncResult * res, gpointer gself)
+on_device_properties_ready (GObject * o, GAsyncResult * res, gpointer gdata)
{
- GError * err;
- DbusDevice * tmp;
+ GError * error;
+ GVariant * response;
+ struct device_get_all_data * data = gdata;
- err = NULL;
- tmp = dbus_device_proxy_new_for_bus_finish (res, &err);
- if (err != NULL)
+ error = NULL;
+ response = g_dbus_connection_call_finish (G_DBUS_CONNECTION(o), res, &error);
+ if (error != NULL)
{
- g_warning ("Unable to get UPower Device Proxy: %s", err->message);
- g_error_free (err);
+ if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED)
+ g_warning ("Error acquiring bus: %s", error->message);
+ g_error_free (error);
}
else
{
- /* use this proxy's properties to update our own IndicatorPowerDevice */
-
+ guint32 kind = 0;
+ guint32 state = 0;
+ gdouble percentage = 0;
+ gint64 time_to_empty = 0;
+ gint64 time_to_full = 0;
+ time_t time;
IndicatorPowerDevice * device;
- IndicatorPowerDeviceProviderUPower * self;
- priv_t * p;
-
- self = INDICATOR_POWER_DEVICE_PROVIDER_UPOWER (gself);
- p = self->priv;
-
- const guint kind = dbus_device_get_type_ (tmp);
- const gdouble percentage = dbus_device_get_percentage (tmp);
- const guint state = dbus_device_get_state (tmp);
- const gint64 time_to_empty = dbus_device_get_time_to_empty (tmp);
- const gint64 time_to_full = dbus_device_get_time_to_full (tmp);
- const time_t time = time_to_empty ? time_to_empty : time_to_full;
- const char * path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (tmp));
-
- device = indicator_power_device_new (path,
- kind,
- percentage,
- state,
- time);
-
- g_hash_table_insert (p->devices,
- g_strdup (path),
- g_object_ref (device));
-
- emit_devices_changed (self);
-
- g_object_unref (device);
- g_object_unref (tmp);
+ IndicatorPowerDeviceProviderUPowerPriv * p = data->self->priv;
+ GVariant * dict = g_variant_get_child_value (response, 0);
+
+ g_variant_lookup (dict, "Type", "u", &kind);
+ g_variant_lookup (dict, "State", "u", &state);
+ g_variant_lookup (dict, "Percentage", "d", &percentage);
+ g_variant_lookup (dict, "TimeToEmpty", "x", &time_to_empty);
+ g_variant_lookup (dict, "TimeToFull", "x", &time_to_full);
+ time = time_to_empty ? time_to_empty : time_to_full;
+
+ if ((device = g_hash_table_lookup (p->devices, data->path)))
+ {
+ g_object_set (device, INDICATOR_POWER_DEVICE_KIND, (gint)kind,
+ INDICATOR_POWER_DEVICE_STATE, (gint)state,
+ INDICATOR_POWER_DEVICE_OBJECT_PATH, data->path,
+ INDICATOR_POWER_DEVICE_PERCENTAGE, percentage,
+ INDICATOR_POWER_DEVICE_TIME, (guint64)time,
+ NULL);
+ }
+ else
+ {
+ device = indicator_power_device_new (data->path,
+ kind,
+ percentage,
+ state,
+ time);
+
+ g_hash_table_insert (p->devices,
+ g_strdup (data->path),
+ g_object_ref (device));
+
+ g_object_unref (device);
+ }
+
+ emit_devices_changed (data->self);
+ g_variant_unref (dict);
+ g_variant_unref (response);
}
+
+ g_free (data->path);
+ g_slice_free (struct device_get_all_data, data);
}
static void
update_device_from_object_path (IndicatorPowerDeviceProviderUPower * self,
const char * path)
{
- dbus_device_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- BUS_NAME,
- path,
- self->priv->cancellable,
- on_upower_device_proxy_ready,
- self);
+ priv_t * p = self->priv;
+ struct device_get_all_data * data;
+
+ data = g_slice_new (struct device_get_all_data);
+ data->path = g_strdup (path);
+ data->self = self;
+
+ g_dbus_connection_call (p->bus,
+ BUS_NAME,
+ path,
+ "org.freedesktop.DBus.Properties",
+ "GetAll",
+ g_variant_new ("(s)", "org.freedesktop.UPower.Device"),
+ G_VARIANT_TYPE("(a{sv})"),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1, /* default timeout */
+ p->cancellable,
+ on_device_properties_ready,
+ data);
}
/*
@@ -257,7 +294,7 @@ on_upower_proxy_ready (GObject * source G_GNUC_UNUSED,
DbusUPower * proxy;
err = NULL;
- proxy = dbus_upower_proxy_new_for_bus_finish (res, &err);
+ proxy = dbus_upower_proxy_new_finish (res, &err);
if (err != NULL)
{
g_warning ("Unable to get UPower proxy: %s", err->message);
@@ -286,6 +323,42 @@ on_upower_proxy_ready (GObject * source G_GNUC_UNUSED,
}
}
+static void
+on_bus_ready (GObject * source_object G_GNUC_UNUSED,
+ GAsyncResult * res,
+ gpointer gself)
+{
+ GError * error;
+ GDBusConnection * tmp;
+
+ error = NULL;
+ tmp = g_bus_get_finish (res, &error);
+ if (error != NULL)
+ {
+ if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED)
+ g_warning ("Error acquiring bus: %s", error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ IndicatorPowerDeviceProviderUPower * self;
+ priv_t * p;
+
+ self = INDICATOR_POWER_DEVICE_PROVIDER_UPOWER (gself);
+ p = self->priv;
+
+ p->bus = tmp;
+
+ dbus_upower_proxy_new (p->bus,
+ G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+ BUS_NAME,
+ BUS_PATH,
+ p->cancellable,
+ on_upower_proxy_ready,
+ self);
+ }
+}
+
/***
**** IndicatorPowerDeviceProvider virtual functions
***/
@@ -339,6 +412,8 @@ my_dispose (GObject * o)
g_hash_table_remove_all (p->devices);
+ g_clear_object (&p->bus);
+
G_OBJECT_CLASS (indicator_power_device_provider_upower_parent_class)->dispose (o);
}
@@ -402,13 +477,10 @@ indicator_power_device_provider_upower_init (IndicatorPowerDeviceProviderUPower
g_free,
NULL);
- dbus_upower_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
- BUS_NAME,
- BUS_PATH,
- p->cancellable,
- on_upower_proxy_ready,
- self);
+ g_bus_get (G_BUS_TYPE_SYSTEM,
+ p->cancellable,
+ on_bus_ready,
+ self);
}
/***
diff --git a/src/org.freedesktop.UPower.Device.xml b/src/org.freedesktop.UPower.Device.xml
deleted file mode 100644
index 7c9a65b..0000000
--- a/src/org.freedesktop.UPower.Device.xml
+++ /dev/null
@@ -1,705 +0,0 @@
-<!DOCTYPE node PUBLIC
-"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
- <!ENTITY ERROR_GENERAL "org.freedesktop.UPower.Device.GeneralError">
-]>
-<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
- <interface name="org.freedesktop.UPower.Device">
- <doc:doc>
- <doc:description>
- <doc:para>
- Objects implementing this interface are usually discovered through
- the <doc:tt>org.freedesktop.UPower</doc:tt> interface on
- the <doc:tt>/org/freedesktop/UPower</doc:tt> object on
- the D-Bus system bus service with the well-known
- name <doc:tt>org.freedesktop.UPower</doc:tt> using
- the
- <doc:ref type="method" to="Power.EnumerateDevices">EnumerateDevices</doc:ref>
- method.
- </doc:para>
- <doc:para>
- <doc:example language="shell" title="simple example">
- <doc:code>
-$ dbus-send --print-reply \
- --system \
- --dest=org.freedesktop.UPower \
- /org/freedesktop/UPower/devices/battery_BAT0 \
- org.freedesktop.DBus.Properties.GetAll \
- string:org.freedesktop.UPower.Device
-
-method return sender=:1.386 -> dest=:1.477 reply_serial=2
- array [
- dict entry(
- string "native-path"
- variant string "/sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:01/PNP0C09:00/PNP0C0A:00/power_supply/BAT0"
- )
- dict entry(
- string "vendor"
- variant string "SONY"
- )
- dict entry(
- string "model"
- variant string "42T4568"
- )
- dict entry(
- string "serial"
- variant string "4179"
- )
- dict entry(
- string "update-time"
- variant uint64 1226417875
- )
- dict entry(
- string "type"
- variant uint 2
- )
- dict entry(
- string "power-supply"
- variant boolean true
- )
- dict entry(
- string "has-history"
- variant boolean true
- )
- dict entry(
- string "has-statistics"
- variant boolean true
- )
- dict entry(
- string "online"
- variant boolean false
- )
- dict entry(
- string "energy"
- variant double 72.85
- )
- dict entry(
- string "energy-empty"
- variant double 0
- )
- dict entry(
- string "energy-full"
- variant double 74.55
- )
- dict entry(
- string "energy-full-design"
- variant double 74.88
- )
- dict entry(
- string "energy-rate"
- variant double 0
- )
- dict entry(
- string "voltage"
- variant double 16.415
- )
- dict entry(
- string "time-to-empty"
- variant int64 0
- )
- dict entry(
- string "time-to-full"
- variant int64 0
- )
- dict entry(
- string "percentage"
- variant double 97.7197
- )
- dict entry(
- string "is-present"
- variant boolean true
- )
- dict entry(
- string "state"
- variant uint 3
- )
- dict entry(
- string "is-rechargeable"
- variant boolean true
- )
- dict entry(
- string "capacity"
- variant double 100
- )
- dict entry(
- string "technology"
- variant uint 1
- )
- ]
- </doc:code>
- </doc:example>
- </doc:para>
- <doc:para>
- Unless otherwise noted, an empty string or the value 0 in a
- property on this interface means not set.
- </doc:para>
- </doc:description>
- </doc:doc>
-
-
- <!-- ************************************************************ -->
- <method name="Refresh">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
- <doc:doc>
- <doc:description>
- <doc:para>
- Refreshes the data collected from the power source.
- </doc:para>
- </doc:description>
- <doc:permission>Callers need the org.freedesktop.upower.refresh-power-source authorization</doc:permission>
- <doc:errors>
- <doc:error name="&ERROR_GENERAL;">if an error occured while refreshing</doc:error>
- </doc:errors>
- </doc:doc>
- </method>
-
- <!-- ************************************************************ -->
- <signal name="Changed">
- <doc:doc>
- <doc:description>
- <doc:para>
- Some value on the power source changed.
- </doc:para>
- </doc:description>
- </doc:doc>
- </signal>
-
- <!-- ************************************************************ -->
- <method name="GetHistory">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
- <arg name="type" direction="in" type="s">
- <doc:doc><doc:summary>The type of history.
- Valid types are <doc:tt>rate</doc:tt> or <doc:tt>charge</doc:tt>.</doc:summary></doc:doc>
- </arg>
- <arg name="timespan" direction="in" type="u">
- <doc:doc><doc:summary>The amount of data to return in seconds, or 0 for all.</doc:summary></doc:doc>
- </arg>
- <arg name="resolution" direction="in" type="u">
- <doc:doc>
- <doc:summary>
- The approximate number of points to return.
- A higher resolution is more accurate, at the expense of plotting speed.
- </doc:summary>
- </doc:doc>
- </arg>
- <arg name="data" direction="out" type="a(udu)">
- <doc:doc><doc:summary>
- The history data for the power device, if the device supports history.
- Data is ordered from the earliest in time, to the newest data point.
- Each element contains the following members:
- <doc:list>
- <doc:item>
- <doc:term>time</doc:term>
- <doc:definition>
- The time value in seconds from the <doc:tt>gettimeofday()</doc:tt> method.
- </doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>value</doc:term>
- <doc:definition>
- The data value, for instance the rate in W or the charge in %.
- </doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>state</doc:term>
- <doc:definition>
- The state of the device, for instance <doc:tt>charging</doc:tt> or
- <doc:tt>discharging</doc:tt>.
- </doc:definition>
- </doc:item>
- </doc:list>
- </doc:summary></doc:doc>
- </arg>
- <doc:doc>
- <doc:description>
- <doc:para>
- Gets history for the power device that is persistent across reboots.
- </doc:para>
- </doc:description>
- </doc:doc>
- </method>
-
- <!-- ************************************************************ -->
- <method name="GetStatistics">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
- <arg name="type" direction="in" type="s">
- <doc:doc><doc:summary>The mode for the statistics.
- Valid types are <doc:tt>charging</doc:tt> or <doc:tt>discharging</doc:tt>.</doc:summary></doc:doc>
- </arg>
- <arg name="data" direction="out" type="a(dd)">
- <doc:doc><doc:summary>
- The statistics data for the power device.
- Each element contains the following members:
- <doc:list>
- <doc:item>
- <doc:term>value</doc:term>
- <doc:definition>
- The value of the percentage point, usually in seconds
- </doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>accuracy</doc:term>
- <doc:definition>
- The accuracy of the prediction in percent.
- </doc:definition>
- </doc:item>
- </doc:list>
- </doc:summary></doc:doc>
- </arg>
- <doc:doc>
- <doc:description>
- <doc:para>
- Gets statistics for the power device that may be interesting
- to show on a graph in the session.
- </doc:para>
- </doc:description>
- </doc:doc>
- </method>
-
- <!-- ************************************************************ -->
- <property name="NativePath" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- OS specific native path of the power source. On Linux this
- is the sysfs path, for
- example <doc:tt>/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0</doc:tt>. Is
- blank if the device is being driven by a user space
- driver.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Vendor" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Name of the vendor of the battery.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Model" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Name of the model of this battery.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Serial" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Unique serial number of the battery.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="UpdateTime" type="t" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The point in time (seconds since the Epoch Jan 1, 1970
- 0:00 UTC) that data was read from the power source.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Type" type="u" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Type of power source.
- </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>Line Power</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>2</doc:term><doc:definition>Battery</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>3</doc:term><doc:definition>Ups</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>4</doc:term><doc:definition>Monitor</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>5</doc:term><doc:definition>Mouse</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>6</doc:term><doc:definition>Keyboard</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>7</doc:term><doc:definition>Pda</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>8</doc:term><doc:definition>Phone</doc:definition>
- </doc:item>
- </doc:list>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="PowerSupply" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the power device is used to supply the system.
- This would be set TRUE for laptop batteries and UPS devices,
- but set FALSE for wireless mice or PDAs.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="HasHistory" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the power device has history.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="HasStatistics" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the power device has statistics.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Online" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Whether power is currently being provided through line power.
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "line-power".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Energy" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Amount of energy (measured in Wh) currently available in
- the power source.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="EnergyEmpty" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Amount of energy (measured in Wh) in the power source when
- it's considered to be empty.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="EnergyFull" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Amount of energy (measured in Wh) in the power source when
- it's considered full.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="EnergyFullDesign" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Amount of energy (measured in Wh) the power source is
- designed to hold when it's considered full.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="EnergyRate" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Amount of energy being drained from the source, measured
- in W. If positive, the source is being discharged, if
- negative it's being charged.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Voltage" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Voltage in the Cell or being recorded by the meter.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="TimeToEmpty" type="x" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Number of seconds until the power source is considered empty.
- Is set to 0 if unknown.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="TimeToFull" type="x" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Number of seconds until the power source is considered full.
- Is set to 0 if unknown.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Percentage" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The amount of energy left in the power source expressed as
- a percentage between 0 and 100. Typically this is the same as
- (<doc:ref type="property" to="Source:Energy">energy</doc:ref> -
- <doc:ref type="property" to="Source:EnergyEmpty">energy-empty</doc:ref>) /
- (<doc:ref type="property" to="Source:EnergyFull">energy-full</doc:ref> -
- <doc:ref type="property" to="Source:EnergyEmpty">energy-empty</doc:ref>).
- However, some primitive power sources are capable of only
- reporting percentages and in this case the energy-*
- properties will be unset while this property is set.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="IsPresent" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the power source is present in the bay.
- This field is required as some batteries are hot-removable, for example
- expensive UPS and most laptop batteries.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="State" type="u" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The battery power state.
- </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>Charging</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>2</doc:term><doc:definition>Discharging</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>3</doc:term><doc:definition>Empty</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>4</doc:term><doc:definition>Fully charged</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>5</doc:term><doc:definition>Pending charge</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>6</doc:term><doc:definition>Pending discharge</doc:definition>
- </doc:item>
- </doc:list>
- <doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="IsRechargeable" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the power source is rechargeable.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Capacity" type="d" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The capacity of the power source expressed as a percentage between 0 and 100.
- The capacity of the battery will reduce with age.
- A capacity value less than 75% is usually a sign that you should renew your battery.
- Typically this value is the same as
- (<doc:ref type="property" to="Source:FullDesign">full-design</doc:ref> /
- <doc:ref type="property" to="Source:Full">full</doc:ref>) * 100.
- However, some primitive power sources are not capable reporting capacity
- and in this case the capacity property will be unset.
- </doc:para><doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="Technology" type="u" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- Technology used in 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>Lithium ion</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>2</doc:term><doc:definition>Lithium polymer</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>3</doc:term><doc:definition>Lithium iron phosphate</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>4</doc:term><doc:definition>Lead acid</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>5</doc:term><doc:definition>Nickel cadmium</doc:definition>
- </doc:item>
- <doc:item>
- <doc:term>6</doc:term><doc:definition>Nickel metal hydride</doc:definition>
- </doc:item>
- </doc:list>
- <doc:para>
- This property is only valid if the property
- <doc:ref type="property" to="Source:Type">type</doc:ref>
- has the value "battery".
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="RecallNotice" type="b" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- If the device may have been recalled by the vendor due to a suspected
- fault.
- This key does not imply the device is faulty, only that it approximatly
- matches the description from the vendor of units that were recalled.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="RecallVendor" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The vendor that is handling the hardware recall.
- </doc:para>
- <doc:para>
- This property is only valid if the property recall-notice is true.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- <property name="RecallUrl" type="s" access="read">
- <doc:doc>
- <doc:description>
- <doc:para>
- The URL to visit about the hardware recall.
- </doc:para>
- <doc:para>
- This property is only valid if the property recall-notice is true.
- </doc:para>
- </doc:description>
- </doc:doc>
- </property>
-
- </interface>
-
-</node>