diff --git a/src/devkit-power-enum.c b/src/devkit-power-enum.c
index 6368f97..7b94d5f 100644
--- a/src/devkit-power-enum.c
+++ b/src/devkit-power-enum.c
@@ -54,3 +54,27 @@ devkit_power_convert_type_to_text (DevkitPowerType type_enum)
}
return type;
}
+
+const char *
+devkit_power_convert_state_to_text (DevkitPowerState state_enum)
+{
+ const char *state = NULL;
+ switch (state_enum) {
+ case DEVKIT_POWER_STATE_CHARGING:
+ state = "charging";
+ break;
+ case DEVKIT_POWER_STATE_DISCHARGING:
+ state = "discharging";
+ break;
+ case DEVKIT_POWER_STATE_EMPTY:
+ state = "empty";
+ break;
+ case DEVKIT_POWER_STATE_FULLY_CHARGED:
+ state = "fully-charged";
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ return state;
+}
diff --git a/src/devkit-power-enum.h b/src/devkit-power-enum.h
index 9d7c1dc..1e87c7d 100644
--- a/src/devkit-power-enum.h
+++ b/src/devkit-power-enum.h
@@ -37,7 +37,16 @@ typedef enum {
DEVKIT_POWER_TYPE_UNKNOWN
} DevkitPowerType;
+typedef enum {
+ DEVKIT_POWER_STATE_CHARGING,
+ DEVKIT_POWER_STATE_DISCHARGING,
+ DEVKIT_POWER_STATE_EMPTY,
+ DEVKIT_POWER_STATE_FULLY_CHARGED,
+ DEVKIT_POWER_STATE_UNKNOWN
+} DevkitPowerState;
+
const char *devkit_power_convert_type_to_text (DevkitPowerType type_enum);
+const char *devkit_power_convert_state_to_text (DevkitPowerState state_enum);
G_END_DECLS
diff --git a/src/devkit-power-source.c b/src/devkit-power-source.c
index 7589851..79b56eb 100644
--- a/src/devkit-power-source.c
+++ b/src/devkit-power-source.c
@@ -42,6 +42,8 @@
/*--------------------------------------------------------------------------------------------------------------*/
#include "devkit-power-source-glue.h"
+#define DK_POWER_MIN_CHARGED_PERCENTAGE 60
+
struct DevkitPowerSourcePrivate
{
DBusGConnection *system_bus_connection;
@@ -61,6 +63,7 @@ struct DevkitPowerSourcePrivate
DevkitPowerType type;
gboolean line_power_online;
+ DevkitPowerState battery_state;
double battery_energy;
double battery_energy_empty;
@@ -89,6 +92,7 @@ enum
PROP_UPDATE_TIME,
PROP_TYPE,
PROP_LINE_POWER_ONLINE,
+ PROP_BATTERY_STATE,
PROP_BATTERY_ENERGY,
PROP_BATTERY_ENERGY_EMPTY,
PROP_BATTERY_ENERGY_FULL,
@@ -148,7 +152,9 @@ get_property (GObject *object,
case PROP_LINE_POWER_ONLINE:
g_value_set_boolean (value, source->priv->line_power_online);
break;
-
+ case PROP_BATTERY_STATE:
+ g_value_set_string (value, devkit_power_convert_state_to_text (source->priv->battery_state));
+ break;
case PROP_BATTERY_ENERGY:
g_value_set_double (value, source->priv->battery_energy);
break;
@@ -244,6 +250,10 @@ devkit_power_source_class_init (DevkitPowerSourceClass *klass)
object_class,
PROP_BATTERY_ENERGY,
g_param_spec_double ("battery-energy", NULL, NULL, 0, G_MAXDOUBLE, 0, G_PARAM_READABLE));
+ g_object_class_install_property (
+ object_class,
+ PROP_BATTERY_STATE,
+ g_param_spec_string ("battery-state", NULL, NULL, NULL, G_PARAM_READABLE));
g_object_class_install_property (
object_class,
PROP_BATTERY_ENERGY_EMPTY,
@@ -497,12 +507,23 @@ update_battery (DevkitPowerSource *source)
if (is_charging)
source->priv->battery_energy_rate *= -1.0;
+ /* get a precise percentage */
source->priv->battery_percentage = 100.0 * source->priv->battery_energy / source->priv->battery_energy_full;
if (source->priv->battery_percentage < 0)
source->priv->battery_percentage = 0;
if (source->priv->battery_percentage > 100.0)
source->priv->battery_percentage = 100.0;
+ /* get the state */
+ if (is_charging)
+ source->priv->battery_state = DEVKIT_POWER_STATE_CHARGING;
+ else if (is_discharging)
+ source->priv->battery_state = DEVKIT_POWER_STATE_DISCHARGING;
+ else if (source->priv->battery_percentage > DK_POWER_MIN_CHARGED_PERCENTAGE)
+ source->priv->battery_state = DEVKIT_POWER_STATE_FULLY_CHARGED;
+ else
+ source->priv->battery_state = DEVKIT_POWER_STATE_EMPTY;
+
g_free (status);
return TRUE;
}
diff --git a/src/org.freedesktop.DeviceKit.Power.Source.xml b/src/org.freedesktop.DeviceKit.Power.Source.xml
index 61edd16..2c42042 100644
--- a/src/org.freedesktop.DeviceKit.Power.Source.xml
+++ b/src/org.freedesktop.DeviceKit.Power.Source.xml
@@ -202,6 +202,18 @@
+
+
+ The battery power state.
+ Known values are "fully-charged", "empty", "charging",
+ "discharging" or "unknown".
+
+ This property is only valid if the property
+ type
+ has the value "battery".
+
+
+
Technology used in the battery; known values are "Li-ion".