diff options
Diffstat (limited to 'libdevkit-power')
-rw-r--r-- | libdevkit-power/Makefile.am | 4 | ||||
-rw-r--r-- | libdevkit-power/dkp-client.h | 10 | ||||
-rw-r--r-- | libdevkit-power/dkp-device.c | 576 | ||||
-rw-r--r-- | libdevkit-power/dkp-device.h | 14 | ||||
-rw-r--r-- | libdevkit-power/dkp-enum.c | 30 | ||||
-rw-r--r-- | libdevkit-power/dkp-enum.h | 24 | ||||
-rw-r--r-- | libdevkit-power/dkp-object.c | 544 | ||||
-rw-r--r-- | libdevkit-power/dkp-object.h | 76 |
8 files changed, 606 insertions, 672 deletions
diff --git a/libdevkit-power/Makefile.am b/libdevkit-power/Makefile.am index cc7370f..d30c9e8 100644 --- a/libdevkit-power/Makefile.am +++ b/libdevkit-power/Makefile.am @@ -35,9 +35,7 @@ libdevkit_power_la_SOURCES = \ dkp-wakeups-obj.h \ dkp-wakeups-obj.c \ dkp-enum.c \ - dkp-enum.h \ - dkp-object.c \ - dkp-object.h + dkp-enum.h libdevkit_power_la_LIBADD = $(INTLLIBS) $(GLIB_LIBS) $(DBUS_GLIB_LIBS) diff --git a/libdevkit-power/dkp-client.h b/libdevkit-power/dkp-client.h index 4c62b1e..c28a7ee 100644 --- a/libdevkit-power/dkp-client.h +++ b/libdevkit-power/dkp-client.h @@ -59,6 +59,16 @@ typedef struct void (*device_removed) (DkpClient *client, const DkpDevice *device); void (*changed) (DkpClient *client); + /*< private >*/ + /* Padding for future expansion */ + void (*_dkp_client_reserved1) (void); + void (*_dkp_client_reserved2) (void); + void (*_dkp_client_reserved3) (void); + void (*_dkp_client_reserved4) (void); + void (*_dkp_client_reserved5) (void); + void (*_dkp_client_reserved6) (void); + void (*_dkp_client_reserved7) (void); + void (*_dkp_client_reserved8) (void); } DkpClientClass; GType dkp_client_get_type (void); diff --git a/libdevkit-power/dkp-device.c b/libdevkit-power/dkp-device.c index 21656e0..5f47015 100644 --- a/libdevkit-power/dkp-device.c +++ b/libdevkit-power/dkp-device.c @@ -25,11 +25,12 @@ #include <stdio.h> #include <glib.h> #include <dbus/dbus-glib.h> +#include <string.h> #include "egg-debug.h" +#include "egg-string.h" #include "dkp-device.h" -#include "dkp-object.h" #include "dkp-stats-obj.h" #include "dkp-history-obj.h" @@ -42,10 +43,63 @@ static void dkp_device_finalize (GObject *object); struct DkpDevicePrivate { gchar *object_path; - DkpObject *obj; DBusGConnection *bus; DBusGProxy *proxy_device; DBusGProxy *proxy_props; + + /* properties */ + guint64 update_time; + gchar *vendor; + gchar *model; + gchar *serial; + gchar *native_path; + gboolean power_supply; + gboolean online; + gboolean is_present; + gboolean is_rechargeable; + gboolean has_history; + gboolean has_statistics; + DkpDeviceType type; + DkpDeviceState state; + DkpDeviceTechnology technology; + gdouble capacity; /* percent */ + gdouble energy; /* Watt Hours */ + gdouble energy_empty; /* Watt Hours */ + gdouble energy_full; /* Watt Hours */ + gdouble energy_full_design; /* Watt Hours */ + gdouble energy_rate; /* Watts */ + gdouble voltage; /* Volts */ + gint64 time_to_empty; /* seconds */ + gint64 time_to_full; /* seconds */ + gdouble percentage; /* percent */ +}; + +enum { + PROP_0, + PROP_UPDATE_TIME, + PROP_VENDOR, + PROP_MODEL, + PROP_SERIAL, + PROP_NATIVE_PATH, + PROP_POWER_SUPPLY, + PROP_ONLINE, + PROP_IS_PRESENT, + PROP_IS_RECHARGEABLE, + PROP_HAS_HISTORY, + PROP_HAS_STATISTICS, + PROP_TYPE, + PROP_STATE, + PROP_TECHNOLOGY, + PROP_CAPACITY, + PROP_ENERGY, + PROP_ENERGY_EMPTY, + PROP_ENERGY_FULL, + PROP_ENERGY_FULL_DESIGN, + PROP_ENERGY_RATE, + PROP_VOLTAGE, + PROP_TIME_TO_EMPTY, + PROP_TIME_TO_FULL, + PROP_PERCENTAGE }; enum { @@ -83,6 +137,69 @@ out: } /** + * dkp_device_collect_props_cb: + **/ +static void +dkp_device_collect_props_cb (const char *key, const GValue *value, DkpDevice *device) +{ + gboolean handled = TRUE; + + if (g_strcmp0 (key, "native-path") == 0) + device->priv->native_path = g_strdup (g_value_get_string (value)); + else if (g_strcmp0 (key, "vendor") == 0) + device->priv->vendor = g_strdup (g_value_get_string (value)); + else if (g_strcmp0 (key, "model") == 0) + device->priv->model = g_strdup (g_value_get_string (value)); + else if (g_strcmp0 (key, "serial") == 0) + device->priv->serial = g_strdup (g_value_get_string (value)); + else if (g_strcmp0 (key, "update-time") == 0) + device->priv->update_time = g_value_get_uint64 (value); + else if (g_strcmp0 (key, "type") == 0) + device->priv->type = g_value_get_uint (value); + else if (g_strcmp0 (key, "online") == 0) + device->priv->online = g_value_get_boolean (value); + else if (g_strcmp0 (key, "has-history") == 0) + device->priv->has_history = g_value_get_boolean (value); + else if (g_strcmp0 (key, "has-statistics") == 0) + device->priv->has_statistics = g_value_get_boolean (value); + else if (g_strcmp0 (key, "energy") == 0) + device->priv->energy = g_value_get_double (value); + else if (g_strcmp0 (key, "energy-empty") == 0) + device->priv->energy_empty = g_value_get_double (value); + else if (g_strcmp0 (key, "energy-full") == 0) + device->priv->energy_full = g_value_get_double (value); + else if (g_strcmp0 (key, "energy-full-design") == 0) + device->priv->energy_full_design = g_value_get_double (value); + else if (g_strcmp0 (key, "energy-rate") == 0) + device->priv->energy_rate = g_value_get_double (value); + else if (g_strcmp0 (key, "voltage") == 0) + device->priv->voltage = g_value_get_double (value); + else if (g_strcmp0 (key, "time-to-full") == 0) + device->priv->time_to_full = g_value_get_int64 (value); + else if (g_strcmp0 (key, "time-to-empty") == 0) + device->priv->time_to_empty = g_value_get_int64 (value); + else if (g_strcmp0 (key, "percentage") == 0) + device->priv->percentage = g_value_get_double (value); + else if (g_strcmp0 (key, "technology") == 0) + device->priv->technology = g_value_get_uint (value); + else if (g_strcmp0 (key, "is-present") == 0) + device->priv->is_present = g_value_get_boolean (value); + else if (g_strcmp0 (key, "is-rechargeable") == 0) + device->priv->is_rechargeable = g_value_get_boolean (value); + else if (g_strcmp0 (key, "power-supply") == 0) + device->priv->power_supply = g_value_get_boolean (value); + else if (g_strcmp0 (key, "capacity") == 0) + device->priv->capacity = g_value_get_double (value); + else if (g_strcmp0 (key, "state") == 0) + device->priv->state = g_value_get_uint (value); + else + handled = FALSE; + + if (!handled) + egg_warning ("unhandled property '%s'", key); +} + +/** * dkp_device_refresh_internal: **/ static gboolean @@ -96,7 +213,7 @@ dkp_device_refresh_internal (DkpDevice *device) egg_warning ("Cannot get device properties for %s", device->priv->object_path); return FALSE; } - dkp_object_set_from_map (device->priv->obj, hash); + g_hash_table_foreach (hash, (GHFunc) dkp_device_collect_props_cb, device); g_hash_table_unref (hash); return TRUE; } @@ -109,7 +226,7 @@ dkp_device_changed_cb (DBusGProxy *proxy, DkpDevice *device) { g_return_if_fail (DKP_IS_DEVICE (device)); dkp_device_refresh_internal (device); - g_signal_emit (device, signals [DKP_DEVICE_CHANGED], 0, device->priv->obj); + g_signal_emit (device, signals [DKP_DEVICE_CHANGED], 0, NULL); //TODO } /** @@ -184,16 +301,6 @@ dkp_device_get_object_path (const DkpDevice *device) } /** - * dkp_device_get_object: - **/ -const DkpObject * -dkp_device_get_object (const DkpDevice *device) -{ - g_return_val_if_fail (DKP_IS_DEVICE (device), NULL); - return device->priv->obj; -} - -/** * dkp_device_print_history: **/ static gboolean @@ -223,15 +330,117 @@ out: } /** + * dkp_device_print_bool_to_text: + **/ +static const gchar * +dkp_device_print_bool_to_text (gboolean ret) +{ + return ret ? "yes" : "no"; +} + +/** + * dkp_device_print_time_to_text: + **/ +static gchar * +dkp_device_print_time_to_text (gint seconds) +{ + gfloat value = seconds; + + if (value < 0) + return g_strdup ("unknown"); + if (value < 60) + return g_strdup_printf ("%.0f seconds", value); + value /= 60.0; + if (value < 60) + return g_strdup_printf ("%.1f minutes", value); + value /= 60.0; + if (value < 60) + return g_strdup_printf ("%.1f hours", value); + value /= 24.0; + return g_strdup_printf ("%.1f days", value); +} + +/** * dkp_device_print: **/ gboolean dkp_device_print (const DkpDevice *device) { + struct tm *time_tm; + time_t t; + gchar time_buf[256]; + gchar *time_str; + g_return_val_if_fail (DKP_IS_DEVICE (device), FALSE); - /* print to screen */ - dkp_object_print (device->priv->obj); + /* get a human readable time */ + t = (time_t) device->priv->update_time; + time_tm = localtime (&t); + strftime (time_buf, sizeof time_buf, "%c", time_tm); + + g_print (" native-path: %s\n", device->priv->native_path); + if (!egg_strzero (device->priv->vendor)) + g_print (" vendor: %s\n", device->priv->vendor); + if (!egg_strzero (device->priv->model)) + g_print (" model: %s\n", device->priv->model); + if (!egg_strzero (device->priv->serial)) + g_print (" serial: %s\n", device->priv->serial); + g_print (" power supply: %s\n", dkp_device_print_bool_to_text (device->priv->power_supply)); + g_print (" updated: %s (%d seconds ago)\n", time_buf, (int) (time (NULL) - device->priv->update_time)); + g_print (" has history: %s\n", dkp_device_print_bool_to_text (device->priv->has_history)); + g_print (" has statistics: %s\n", dkp_device_print_bool_to_text (device->priv->has_statistics)); + g_print (" %s\n", dkp_device_type_to_text (device->priv->type)); + + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MOUSE || + device->priv->type == DKP_DEVICE_TYPE_KEYBOARD || + device->priv->type == DKP_DEVICE_TYPE_UPS) + g_print (" present: %s\n", dkp_device_print_bool_to_text (device->priv->is_present)); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MOUSE || + device->priv->type == DKP_DEVICE_TYPE_KEYBOARD) + g_print (" rechargeable: %s\n", dkp_device_print_bool_to_text (device->priv->is_rechargeable)); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MOUSE || + device->priv->type == DKP_DEVICE_TYPE_KEYBOARD) + g_print (" state: %s\n", dkp_device_state_to_text (device->priv->state)); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY) { + g_print (" energy: %g Wh\n", device->priv->energy); + g_print (" energy-empty: %g Wh\n", device->priv->energy_empty); + g_print (" energy-full: %g Wh\n", device->priv->energy_full); + g_print (" energy-full-design: %g Wh\n", device->priv->energy_full_design); + } + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MONITOR) + g_print (" energy-rate: %g W\n", device->priv->energy_rate); + if (device->priv->type == DKP_DEVICE_TYPE_UPS || + device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MONITOR) + g_print (" voltage: %g V\n", device->priv->voltage); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_UPS) { + if (device->priv->time_to_full >= 0) { + time_str = dkp_device_print_time_to_text (device->priv->time_to_full); + g_print (" time to full: %s\n", time_str); + g_free (time_str); + } + if (device->priv->time_to_empty >= 0) { + time_str = dkp_device_print_time_to_text (device->priv->time_to_empty); + g_print (" time to empty: %s\n", time_str); + g_free (time_str); + } + } + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY || + device->priv->type == DKP_DEVICE_TYPE_MOUSE || + device->priv->type == DKP_DEVICE_TYPE_KEYBOARD || + device->priv->type == DKP_DEVICE_TYPE_UPS) + g_print (" percentage: %g%%\n", device->priv->percentage); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY) + g_print (" capacity: %g%%\n", device->priv->capacity); + if (device->priv->type == DKP_DEVICE_TYPE_BATTERY) + g_print (" technology: %s\n", dkp_device_technology_to_text (device->priv->technology)); + if (device->priv->type == DKP_DEVICE_TYPE_LINE_POWER) + g_print (" online: %s\n", dkp_device_print_bool_to_text (device->priv->online)); /* if we can, get history */ dkp_device_print_history (device, "charge"); @@ -289,7 +498,7 @@ dkp_device_get_history (const DkpDevice *device, const gchar *type, guint timesp dbus_g_type_get_struct("GValueArray", G_TYPE_UINT, G_TYPE_DOUBLE, - G_TYPE_STRING, + G_TYPE_UINT, G_TYPE_INVALID)); /* get compound data */ @@ -327,7 +536,7 @@ dkp_device_get_history (const DkpDevice *device, const gchar *type, guint timesp g_value_unset (gv); /* 2 */ gv = g_value_array_get_nth (gva, 2); - obj->state = dkp_device_state_from_text (g_value_get_string (gv)); + obj->state = g_value_get_uint (gv); g_value_unset (gv); g_ptr_array_add (array, obj); g_value_array_free (gva); @@ -408,6 +617,114 @@ out: } /** + * dkp_device_set_property: + **/ +static void +dkp_device_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ +// DkpDevice *device = DKP_DEVICE (object); + + switch (prop_id) { +// case PROP_SUBSYSTEMS: +// if (device->priv->subsystems != NULL) +// g_strfreev (device->priv->subsystems); +// device->priv->subsystems = g_strdupv (g_value_get_boxed (value)); +// break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +/** + * dkp_device_get_property: + **/ +static void +dkp_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + DkpDevice *device = DKP_DEVICE (object); + + switch (prop_id) { + case PROP_UPDATE_TIME: + g_value_set_uint64 (value, device->priv->update_time); + break; + case PROP_VENDOR: + g_value_set_string (value, device->priv->vendor); + break; + case PROP_MODEL: + g_value_set_string (value, device->priv->model); + break; + case PROP_SERIAL: + g_value_set_string (value, device->priv->serial); + break; + case PROP_NATIVE_PATH: + g_value_set_string (value, device->priv->native_path); + break; + case PROP_POWER_SUPPLY: + g_value_set_boolean (value, device->priv->power_supply); + break; + case PROP_ONLINE: + g_value_set_boolean (value, device->priv->online); + break; + case PROP_IS_PRESENT: + g_value_set_boolean (value, device->priv->is_present); + break; + case PROP_IS_RECHARGEABLE: + g_value_set_boolean (value, device->priv->is_rechargeable); + break; + case PROP_HAS_HISTORY: + g_value_set_boolean (value, device->priv->has_history); + break; + case PROP_HAS_STATISTICS: + g_value_set_boolean (value, device->priv->has_statistics); + break; + case PROP_TYPE: + g_value_set_uint (value, device->priv->type); + break; + case PROP_STATE: + g_value_set_uint (value, device->priv->state); + break; + case PROP_TECHNOLOGY: + g_value_set_uint (value, device->priv->technology); + break; + case PROP_CAPACITY: + g_value_set_double (value, device->priv->capacity); + break; + case PROP_ENERGY: + g_value_set_double (value, device->priv->energy); + break; + case PROP_ENERGY_EMPTY: + g_value_set_double (value, device->priv->energy_empty); + break; + case PROP_ENERGY_FULL: + g_value_set_double (value, device->priv->energy_full); + break; + case PROP_ENERGY_FULL_DESIGN: + g_value_set_double (value, device->priv->energy_full_design); + break; + case PROP_ENERGY_RATE: + g_value_set_double (value, device->priv->energy_rate); + break; + case PROP_VOLTAGE: + g_value_set_double (value, device->priv->voltage); + break; + case PROP_TIME_TO_EMPTY: + g_value_set_int64 (value, device->priv->time_to_empty); + break; + case PROP_TIME_TO_FULL: + g_value_set_int64 (value, device->priv->time_to_full); + break; + case PROP_PERCENTAGE: + g_value_set_double (value, device->priv->percentage); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +/** * dkp_device_class_init: * @klass: The DkpDeviceClass **/ @@ -416,11 +733,13 @@ dkp_device_class_init (DkpDeviceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = dkp_device_finalize; + object_class->set_property = dkp_device_set_property; + object_class->get_property = dkp_device_get_property; /** * PkClient::changed: * @device: the #DkpDevice instance that emitted the signal - * @obj: the #DkpObject that has changed + * @obj: the #DkpObject that has changed //TODO * * The ::changed signal is emitted when the device data has changed. **/ @@ -431,6 +750,219 @@ dkp_device_class_init (DkpDeviceClass *klass) NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + /** + * DkpDevice:update-time: + */ + g_object_class_install_property (object_class, + PROP_UPDATE_TIME, + g_param_spec_uint64 ("update-time", + NULL, NULL, + 0, G_MAXUINT64, 0, + G_PARAM_READABLE)); + /** + * DkpDevice:vendor: + */ + g_object_class_install_property (object_class, + PROP_VENDOR, + g_param_spec_string ("vendor", + NULL, NULL, + NULL, + G_PARAM_READABLE)); + /** + * DkpDevice:model: + */ + g_object_class_install_property (object_class, + PROP_MODEL, + g_param_spec_string ("model", + NULL, NULL, + NULL, + G_PARAM_READABLE)); + /** + * DkpDevice:serial: + */ + g_object_class_install_property (object_class, + PROP_SERIAL, + g_param_spec_string ("serial", + NULL, NULL, + NULL, + G_PARAM_READABLE)); + /** + * DkpDevice:native-path: + */ + g_object_class_install_property (object_class, + PROP_NATIVE_PATH, + g_param_spec_string ("native-path", + NULL, NULL, + NULL, + G_PARAM_READABLE)); + /** + * DkpDevice:power-supply: + */ + g_object_class_install_property (object_class, + PROP_POWER_SUPPLY, + g_param_spec_boolean ("power-supply", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:online: + */ + g_object_class_install_property (object_class, + PROP_ONLINE, + g_param_spec_boolean ("online", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:is-present: + */ + g_object_class_install_property (object_class, + PROP_IS_PRESENT, + g_param_spec_boolean ("is-present", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:is-rechargeable: + */ + g_object_class_install_property (object_class, + PROP_IS_RECHARGEABLE, + g_param_spec_boolean ("is-rechargeable", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:has-history: + */ + g_object_class_install_property (object_class, + PROP_HAS_HISTORY, + g_param_spec_boolean ("has-history", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:has-statistics: + */ + g_object_class_install_property (object_class, + PROP_HAS_STATISTICS, + g_param_spec_boolean ("has-statistics", + NULL, NULL, + FALSE, + G_PARAM_READABLE)); + /** + * DkpDevice:type: + */ + g_object_class_install_property (object_class, + PROP_TYPE, + g_param_spec_uint ("type", + NULL, NULL, + 0, + DKP_DEVICE_TYPE_UNKNOWN, + DKP_DEVICE_TYPE_UNKNOWN, + G_PARAM_READABLE)); + /** + * DkpDevice:state: + */ + g_object_class_install_property (object_class, + PROP_STATE, + g_param_spec_uint ("state", + NULL, NULL, + 0, + DKP_DEVICE_STATE_UNKNOWN, + DKP_DEVICE_STATE_UNKNOWN, + G_PARAM_READABLE)); + /** + * DkpDevice:technology: + */ + g_object_class_install_property (object_class, + PROP_TECHNOLOGY, + g_param_spec_uint ("technology", + NULL, NULL, + 0, + DKP_DEVICE_TECHNOLOGY_UNKNOWN, + DKP_DEVICE_TECHNOLOGY_UNKNOWN, + G_PARAM_READABLE)); + /** + * DkpDevice:capacity: + */ + g_object_class_install_property (object_class, + PROP_CAPACITY, + g_param_spec_double ("capacity", NULL, NULL, + 0.0, 100.f, 100.0, + G_PARAM_READABLE)); + /** + * DkpDevice:energy: + */ + g_object_class_install_property (object_class, + PROP_ENERGY, + g_param_spec_double ("energy", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:energy-empty: + */ + g_object_class_install_property (object_class, + PROP_ENERGY_EMPTY, + g_param_spec_double ("energy-empty", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:energy-full: + */ + g_object_class_install_property (object_class, + PROP_ENERGY_FULL, + g_param_spec_double ("energy-full", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:energy-full-design: + */ + g_object_class_install_property (object_class, + PROP_ENERGY_FULL_DESIGN, + g_param_spec_double ("energy-full-design", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:energy-rate: + */ + g_object_class_install_property (object_class, + PROP_ENERGY_RATE, + g_param_spec_double ("energy-rate", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:voltage: + */ + g_object_class_install_property (object_class, + PROP_VOLTAGE, + g_param_spec_double ("voltage", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READABLE)); + /** + * DkpDevice:time-to-empty: + */ + g_object_class_install_property (object_class, + PROP_TIME_TO_EMPTY, + g_param_spec_int64 ("time-to-empty", NULL, NULL, + 0, G_MAXINT64, 0, + G_PARAM_READABLE)); + /** + * DkpDevice:time-to-full: + */ + g_object_class_install_property (object_class, + PROP_TIME_TO_FULL, + g_param_spec_int64 ("time-to-full", NULL, NULL, + 0, G_MAXINT64, 0, + G_PARAM_READABLE)); + /** + * DkpDevice:percentage: + */ + g_object_class_install_property (object_class, + PROP_PERCENTAGE, + g_param_spec_double ("percentage", NULL, NULL, + 0.0, 100.f, 100.0, + G_PARAM_READABLE)); + g_type_class_add_private (klass, sizeof (DkpDevicePrivate)); } @@ -445,7 +977,6 @@ dkp_device_init (DkpDevice *device) device->priv->object_path = NULL; device->priv->proxy_device = NULL; device->priv->proxy_props = NULL; - device->priv->obj = dkp_object_new (); } /** @@ -462,7 +993,10 @@ dkp_device_finalize (GObject *object) device = DKP_DEVICE (object); g_free (device->priv->object_path); - dkp_object_free (device->priv->obj); + g_free (device->priv->vendor); + g_free (device->priv->model); + g_free (device->priv->serial); + g_free (device->priv->native_path); if (device->priv->proxy_device != NULL) g_object_unref (device->priv->proxy_device); if (device->priv->proxy_props != NULL) diff --git a/libdevkit-power/dkp-device.h b/libdevkit-power/dkp-device.h index a6c444e..a3a8294 100644 --- a/libdevkit-power/dkp-device.h +++ b/libdevkit-power/dkp-device.h @@ -28,7 +28,6 @@ #include <glib-object.h> #include <libdevkit-power/dkp-enum.h> -#include <libdevkit-power/dkp-object.h> G_BEGIN_DECLS @@ -53,13 +52,22 @@ typedef struct { GObjectClass parent_class; void (*changed) (DkpDevice *device, - const DkpObject *obj); + gpointer *obj); + /*< private >*/ + /* Padding for future expansion */ + void (*_dkp_device_reserved1) (void); + void (*_dkp_device_reserved2) (void); + void (*_dkp_device_reserved3) (void); + void (*_dkp_device_reserved4) (void); + void (*_dkp_device_reserved5) (void); + void (*_dkp_device_reserved6) (void); + void (*_dkp_device_reserved7) (void); + void (*_dkp_device_reserved8) (void); } DkpDeviceClass; GType dkp_device_get_type (void); DkpDevice *dkp_device_new (void); -const DkpObject *dkp_device_get_object (const DkpDevice *device); const gchar *dkp_device_get_object_path (const DkpDevice *device); gboolean dkp_device_set_object_path (DkpDevice *device, const gchar *object_path); diff --git a/libdevkit-power/dkp-enum.c b/libdevkit-power/dkp-enum.c index 8cdcee9..6f22dd0 100644 --- a/libdevkit-power/dkp-enum.c +++ b/libdevkit-power/dkp-enum.c @@ -152,25 +152,25 @@ dkp_device_technology_to_text (DkpDeviceTechnology technology_enum) { const gchar *technology = NULL; switch (technology_enum) { - case DKP_DEVICE_TECHNOLGY_LITHIUM_ION: + case DKP_DEVICE_TECHNOLOGY_LITHIUM_ION: technology = "lithium-ion"; break; - case DKP_DEVICE_TECHNOLGY_LITHIUM_POLYMER: + case DKP_DEVICE_TECHNOLOGY_LITHIUM_POLYMER: technology = "lithium-polymer"; break; - case DKP_DEVICE_TECHNOLGY_LITHIUM_IRON_PHOSPHATE: + case DKP_DEVICE_TECHNOLOGY_LITHIUM_IRON_PHOSPHATE: technology = "lithium-iron-phosphate"; break; - case DKP_DEVICE_TECHNOLGY_LEAD_ACID: + case DKP_DEVICE_TECHNOLOGY_LEAD_ACID: technology = "lead-acid"; break; - case DKP_DEVICE_TECHNOLGY_NICKEL_CADMIUM: + case DKP_DEVICE_TECHNOLOGY_NICKEL_CADMIUM: technology = "nickel-cadmium"; break; - case DKP_DEVICE_TECHNOLGY_NICKEL_METAL_HYDRIDE: + case DKP_DEVICE_TECHNOLOGY_NICKEL_METAL_HYDRIDE: technology = "nickel-metal-hydride"; break; - case DKP_DEVICE_TECHNOLGY_UNKNOWN: + case DKP_DEVICE_TECHNOLOGY_UNKNOWN: technology = "unknown"; break; default: @@ -187,20 +187,20 @@ DkpDeviceTechnology dkp_device_technology_from_text (const gchar *technology) { if (technology == NULL) - return DKP_DEVICE_TECHNOLGY_UNKNOWN; + return DKP_DEVICE_TECHNOLOGY_UNKNOWN; if (egg_strequal (technology, "lithium-ion")) - return DKP_DEVICE_TECHNOLGY_LITHIUM_ION; + return DKP_DEVICE_TECHNOLOGY_LITHIUM_ION; if (egg_strequal (technology, "lithium-polymer")) - return DKP_DEVICE_TECHNOLGY_LITHIUM_POLYMER; + return DKP_DEVICE_TECHNOLOGY_LITHIUM_POLYMER; if (egg_strequal (technology, "lithium-iron-phosphate")) - return DKP_DEVICE_TECHNOLGY_LITHIUM_IRON_PHOSPHATE; + return DKP_DEVICE_TECHNOLOGY_LITHIUM_IRON_PHOSPHATE; if (egg_strequal (technology, "lead-acid")) - return DKP_DEVICE_TECHNOLGY_LEAD_ACID; + return DKP_DEVICE_TECHNOLOGY_LEAD_ACID; if (egg_strequal (technology, "nickel-cadmium")) - return DKP_DEVICE_TECHNOLGY_NICKEL_CADMIUM; + return DKP_DEVICE_TECHNOLOGY_NICKEL_CADMIUM; if (egg_strequal (technology, "nickel-metal-hydride")) - return DKP_DEVICE_TECHNOLGY_NICKEL_METAL_HYDRIDE; - return DKP_DEVICE_TECHNOLGY_UNKNOWN; + return DKP_DEVICE_TECHNOLOGY_NICKEL_METAL_HYDRIDE; + return DKP_DEVICE_TECHNOLOGY_UNKNOWN; } /** diff --git a/libdevkit-power/dkp-enum.h b/libdevkit-power/dkp-enum.h index 166b3b1..28ec8d7 100644 --- a/libdevkit-power/dkp-enum.h +++ b/libdevkit-power/dkp-enum.h @@ -31,6 +31,7 @@ G_BEGIN_DECLS typedef enum { + DKP_DEVICE_TYPE_UNKNOWN, DKP_DEVICE_TYPE_LINE_POWER, DKP_DEVICE_TYPE_BATTERY, DKP_DEVICE_TYPE_UPS, @@ -39,31 +40,34 @@ typedef enum { DKP_DEVICE_TYPE_KEYBOARD, DKP_DEVICE_TYPE_PDA, DKP_DEVICE_TYPE_PHONE, - DKP_DEVICE_TYPE_UNKNOWN + DKP_DEVICE_TYPE_LAST } DkpDeviceType; typedef enum { + DKP_DEVICE_STATE_UNKNOWN, DKP_DEVICE_STATE_CHARGING, DKP_DEVICE_STATE_DISCHARGING, DKP_DEVICE_STATE_EMPTY, DKP_DEVICE_STATE_FULLY_CHARGED, - DKP_DEVICE_STATE_UNKNOWN + DKP_DEVICE_STATE_LAST } DkpDeviceState; typedef enum { - DKP_DEVICE_TECHNOLGY_LITHIUM_ION, - DKP_DEVICE_TECHNOLGY_LITHIUM_POLYMER, - DKP_DEVICE_TECHNOLGY_LITHIUM_IRON_PHOSPHATE, - DKP_DEVICE_TECHNOLGY_LEAD_ACID, - DKP_DEVICE_TECHNOLGY_NICKEL_CADMIUM, - DKP_DEVICE_TECHNOLGY_NICKEL_METAL_HYDRIDE, - DKP_DEVICE_TECHNOLGY_UNKNOWN + DKP_DEVICE_TECHNOLOGY_UNKNOWN, + DKP_DEVICE_TECHNOLOGY_LITHIUM_ION, + DKP_DEVICE_TECHNOLOGY_LITHIUM_POLYMER, + DKP_DEVICE_TECHNOLOGY_LITHIUM_IRON_PHOSPHATE, + DKP_DEVICE_TECHNOLOGY_LEAD_ACID, + DKP_DEVICE_TECHNOLOGY_NICKEL_CADMIUM, + DKP_DEVICE_TECHNOLOGY_NICKEL_METAL_HYDRIDE, + DKP_DEVICE_TECHNOLOGY_LAST } DkpDeviceTechnology; typedef enum { + DKP_QOS_TYPE_UNKNOWN, DKP_QOS_TYPE_NETWORK, DKP_QOS_TYPE_CPU_DMA, - DKP_QOS_TYPE_UNKNOWN + DKP_QOS_TYPE_LAST } DkpQosType; const gchar *dkp_device_type_to_text (DkpDeviceType type_enum); diff --git a/libdevkit-power/dkp-object.c b/libdevkit-power/dkp-object.c deleted file mode 100644 index 17298de..0000000 --- a/libdevkit-power/dkp-object.c +++ /dev/null @@ -1,544 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Richard Hughes <richard@hughsie.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include <glib.h> -#include <glib-object.h> -#include <string.h> - -#include "egg-debug.h" -#include "egg-string.h" - -#include "dkp-enum.h" -#include "dkp-object.h" - -/** - * dkp_object_clear_internal: - **/ -static void -dkp_object_clear_internal (DkpObject *obj) -{ - obj->type = DKP_DEVICE_TYPE_UNKNOWN; - obj->update_time = 0; - obj->energy = 0; - obj->energy_full = 0; - obj->energy_full_design = 0; - obj->energy_rate = 0; - obj->voltage = 0; - obj->percentage = 0; - obj->capacity = 0; - obj->time_to_empty = 0; - obj->time_to_full = 0; - obj->state = DKP_DEVICE_STATE_UNKNOWN; - obj->technology = DKP_DEVICE_TECHNOLGY_UNKNOWN; - obj->vendor = NULL; - obj->model = NULL; - obj->serial = NULL; - obj->native_path = NULL; - obj->online = FALSE; - obj->is_present = FALSE; - obj->power_supply = FALSE; - obj->is_rechargeable = FALSE; - obj->has_history = FALSE; - obj->has_statistics = FALSE; -} - -/** - * dkp_object_collect_props: - **/ -static void -dkp_object_collect_props (const char *key, const GValue *value, DkpObject *obj) -{ - gboolean handled = TRUE; - - if (g_strcmp0 (key, "native-path") == 0) - obj->native_path = g_strdup (g_value_get_string (value)); - else if (g_strcmp0 (key, "vendor") == 0) - obj->vendor = g_strdup (g_value_get_string (value)); - else if (g_strcmp0 (key, "model") == 0) - obj->model = g_strdup (g_value_get_string (value)); - else if (g_strcmp0 (key, "serial") == 0) - obj->serial = g_strdup (g_value_get_string (value)); - else if (g_strcmp0 (key, "update-time") == 0) - obj->update_time = g_value_get_uint64 (value); - else if (g_strcmp0 (key, "type") == 0) - obj->type = dkp_device_type_from_text (g_value_get_string (value)); - else if (g_strcmp0 (key, "online") == 0) - obj->online = g_value_get_boolean (value); - else if (g_strcmp0 (key, "has-history") == 0) - obj->has_history = g_value_get_boolean (value); - else if (g_strcmp0 (key, "has-statistics") == 0) - obj->has_statistics = g_value_get_boolean (value); - else if (g_strcmp0 (key, "energy") == 0) - obj->energy = g_value_get_double (value); - else if (g_strcmp0 (key, "energy-empty") == 0) - obj->energy_empty = g_value_get_double (value); - else if (g_strcmp0 (key, "energy-full") == 0) - obj->energy_full = g_value_get_double (value); - else if (g_strcmp0 (key, "energy-full-design") == 0) - obj->energy_full_design = g_value_get_double (value); - else if (g_strcmp0 (key, "energy-rate") == 0) - obj->energy_rate = g_value_get_double (value); - else if (g_strcmp0 (key, "voltage") == 0) - obj->voltage = g_value_get_double (value); - else if (g_strcmp0 (key, "time-to-full") == 0) - obj->time_to_full = g_value_get_int64 (value); - else if (g_strcmp0 (key, "time-to-empty") == 0) - obj->time_to_empty = g_value_get_int64 (value); - else if (g_strcmp0 (key, "percentage") == 0) - obj->percentage = g_value_get_double (value); - else if (g_strcmp0 (key, "technology") == 0) - obj->technology = dkp_device_technology_from_text (g_value_get_string (value)); - else if (g_strcmp0 (key, "is-present") == 0) - obj->is_present = g_value_get_boolean (value); - else if (g_strcmp0 (key, "is-rechargeable") == 0) - obj->is_rechargeable = g_value_get_boolean (value); - else if (g_strcmp0 (key, "power-supply") == 0) - obj->power_supply = g_value_get_boolean (value); - else if (g_strcmp0 (key, "capacity") == 0) - obj->capacity = g_value_get_double (value); - else if (g_strcmp0 (key, "state") == 0) - obj->state = dkp_device_state_from_text (g_value_get_string (value)); - else - handled = FALSE; - - if (!handled) - egg_warning ("unhandled property '%s'", key); -} - -/** - * dkp_object_set_from_map: - **/ -gboolean -dkp_object_set_from_map (DkpObject *obj, GHashTable *hash_table) -{ - g_hash_table_foreach (hash_table, (GHFunc) dkp_object_collect_props, obj); - return TRUE; -} - -/** - * dkp_object_copy: - **/ -DkpObject * -dkp_object_copy (const DkpObject *cobj) -{ - DkpObject *obj; - obj = g_new0 (DkpObject, 1); - - obj->type = cobj->type; - obj->update_time = cobj->update_time; - obj->energy = cobj->energy; - obj->energy_full = cobj->energy_full; - obj->energy_full_design = cobj->energy_full_design; - obj->energy_rate = cobj->energy_rate; - obj->voltage = cobj->voltage; - obj->percentage = cobj->percentage; - obj->capacity = cobj->capacity; - obj->time_to_empty = cobj->time_to_empty; - obj->time_to_full = cobj->time_to_full; - obj->state = cobj->state; - obj->technology = cobj->technology; - obj->vendor = g_strdup (cobj->vendor); - obj->model = g_strdup (cobj->model); - obj->serial = g_strdup (cobj->serial); - obj->native_path = g_strdup (cobj->native_path); - obj->online = cobj->online; - obj->is_present = cobj->is_present; - obj->power_supply = cobj->power_supply; - obj->is_rechargeable = cobj->is_rechargeable; - obj->has_history = cobj->has_history; - obj->has_statistics = cobj->has_statistics; - - return obj; -} - -/** - * dkp_object_equal: - **/ -gboolean -dkp_object_equal (const DkpObject *obj1, const DkpObject *obj2) -{ - if (obj1->type == obj2->type && - obj1->update_time == obj2->update_time && - obj1->energy == obj2->energy && - obj1->energy_full == obj2->energy_full && - obj1->energy_full_design == obj2->energy_full_design && - obj1->voltage == obj2->voltage && - obj1->energy_rate == obj2->energy_rate && - obj1->percentage == obj2->percentage && - obj1->has_history == obj2->has_history && - obj1->has_statistics == obj2->has_statistics && - obj1->capacity == obj2->capacity && - obj1->time_to_empty == obj2->time_to_empty && - obj1->time_to_full == obj2->time_to_full && - obj1->state == obj2->state && - obj1->technology == obj2->technology && - g_strcmp0 (obj1->vendor, obj2->vendor) == 0 && - g_strcmp0 (obj1->model, obj2->model) == 0 && - g_strcmp0 (obj1->serial, obj2->serial) == 0 && - g_strcmp0 (obj1->native_path, obj2->native_path) == 0 && - obj1->online == obj2->online && - obj1->is_present == obj2->is_present && - obj1->power_supply == obj2->power_supply && - obj1->is_rechargeable == obj2->is_rechargeable) - return TRUE; - return FALSE; -} - -/** - * dkp_object_time_to_text: - **/ -static gchar * -dkp_object_time_to_text (gint seconds) -{ - gfloat value = seconds; - - if (value < 0) - return g_strdup ("unknown"); - if (value < 60) - return g_strdup_printf ("%.0f seconds", value); - value /= 60.0; - if (value < 60) - return g_strdup_printf ("%.1f minutes", value); - value /= 60.0; - if (value < 60) - return g_strdup_printf ("%.1f hours", value); - value /= 24.0; - return g_strdup_printf ("%.1f days", value); -} - -/** - * dkp_object_bool_to_text: - **/ -static const gchar * -dkp_object_bool_to_text (gboolean ret) -{ - return ret ? "yes" : "no"; -} - -/** - * dkp_object_print: - **/ -gboolean -dkp_object_print (const DkpObject *obj) -{ - gboolean ret = TRUE; - struct tm *time_tm; - time_t t; - gchar time_buf[256]; - gchar *time_str; - - /* get a human readable time */ - t = (time_t) obj->update_time; - time_tm = localtime (&t); - strftime (time_buf, sizeof time_buf, "%c", time_tm); - - g_print (" native-path: %s\n", obj->native_path); - if (!egg_strzero (obj->vendor)) - g_print (" vendor: %s\n", obj->vendor); - if (!egg_strzero (obj->model)) - g_print (" model: %s\n", obj->model); - if (!egg_strzero (obj->serial)) - g_print (" serial: %s\n", obj->serial); - g_print (" power supply: %s\n", dkp_object_bool_to_text (obj->power_supply)); - g_print (" updated: %s (%d seconds ago)\n", time_buf, (int) (time (NULL) - obj->update_time)); - g_print (" has history: %s\n", dkp_object_bool_to_text (obj->has_history)); - g_print (" has statistics: %s\n", dkp_object_bool_to_text (obj->has_statistics)); - g_print (" %s\n", dkp_device_type_to_text (obj->type)); - - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD || - obj->type == DKP_DEVICE_TYPE_UPS) - g_print (" present: %s\n", dkp_object_bool_to_text (obj->is_present)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD) - g_print (" rechargeable: %s\n", dkp_object_bool_to_text (obj->is_rechargeable)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD) - g_print (" state: %s\n", dkp_device_state_to_text (obj->state)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) { - g_print (" energy: %g Wh\n", obj->energy); - g_print (" energy-empty: %g Wh\n", obj->energy_empty); - g_print (" energy-full: %g Wh\n", obj->energy_full); - g_print (" energy-full-design: %g Wh\n", obj->energy_full_design); - } - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MONITOR) - g_print (" energy-rate: %g W\n", obj->energy_rate); - if (obj->type == DKP_DEVICE_TYPE_UPS || - obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MONITOR) - g_print (" voltage: %g V\n", obj->voltage); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_UPS) { - if (obj->time_to_full >= 0) { - time_str = dkp_object_time_to_text (obj->time_to_full); - g_print (" time to full: %s\n", time_str); - g_free (time_str); - } - if (obj->time_to_empty >= 0) { - time_str = dkp_object_time_to_text (obj->time_to_empty); - g_print (" time to empty: %s\n", time_str); - g_free (time_str); - } - } - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD || - obj->type == DKP_DEVICE_TYPE_UPS) - g_print (" percentage: %g%%\n", obj->percentage); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) - g_print (" capacity: %g%%\n", obj->capacity); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) - g_print (" technology: %s\n", dkp_device_technology_to_text (obj->technology)); - if (obj->type == DKP_DEVICE_TYPE_LINE_POWER) - g_print (" online: %s\n", dkp_object_bool_to_text (obj->online)); - - return ret; -} - -/** - * dkp_object_diff: - **/ -gboolean -dkp_object_diff (const DkpObject *old, const DkpObject *obj) -{ - gchar *time_str; - gchar *time_str_old; - - g_print (" native-path: %s\n", obj->native_path); - if (g_strcmp0 (obj->vendor, old->vendor) != 0) - g_print (" vendor: %s -> %s\n", old->vendor, obj->vendor); - if (g_strcmp0 (obj->model, old->model) != 0) - g_print (" model: %s -> %s\n", old->model, obj->model); - if (g_strcmp0 (obj->serial, old->serial) != 0) - g_print (" serial: %s -> %s\n", old->serial, obj->serial); - if (obj->has_history != old->has_history) - g_print (" has history: %s -> %s\n", - dkp_object_bool_to_text (old->has_history), - dkp_object_bool_to_text (obj->has_history)); - if (obj->has_statistics != old->has_statistics) - g_print (" has statistics: %s -> %s\n", - dkp_object_bool_to_text (old->has_statistics), - dkp_object_bool_to_text (obj->has_statistics)); - - g_print (" %s\n", dkp_device_type_to_text (obj->type)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD) - if (old->is_present != obj->is_present) - g_print (" present: %s -> %s\n", - dkp_object_bool_to_text (old->is_present), - dkp_object_bool_to_text (obj->is_present)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) - if (old->is_rechargeable != obj->is_rechargeable) - g_print (" rechargeable: %s -> %s\n", - dkp_object_bool_to_text (old->is_rechargeable), - dkp_object_bool_to_text (obj->is_rechargeable)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD || - obj->type == DKP_DEVICE_TYPE_UPS) - if (old->state != obj->state) - g_print (" state: %s -> %s\n", - dkp_device_state_to_text (old->state), - dkp_device_state_to_text (obj->state)); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) { - if (old->energy != obj->energy) - g_print (" energy: %g -> %g Wh\n", - old->energy, - obj->energy); - if (old->energy_empty != obj->energy_empty) - g_print (" energy-empty: %g -> %g Wh\n", - old->energy_empty, - obj->energy_empty); - if (old->energy_full != obj->energy_full) - g_print (" energy-full: %g -> %g Wh\n", - old->energy_full, - obj->energy_full); - if (old->energy_full_design != obj->energy_full_design) - g_print (" energy-full-design: %g -> %g Wh\n", - old->energy_full_design, - obj->energy_full_design); - } - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MONITOR) - if (old->energy_rate != obj->energy_rate) - g_print (" energy-rate: %g -> %g W\n", - old->energy_rate, obj->energy_rate); - if (obj->type == DKP_DEVICE_TYPE_UPS || - obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_MONITOR) - if (old->voltage != obj->voltage) - g_print (" voltage: %g -> %g V\n", - old->voltage, obj->voltage); - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_UPS) { - if (old->time_to_full != obj->time_to_full) { - time_str_old = dkp_object_time_to_text (old->time_to_full); - time_str = dkp_object_time_to_text (obj->time_to_full); - g_print (" time to full: %s -> %s\n", time_str_old, time_str); - g_free (time_str_old); - g_free (time_str); - } - if (old->time_to_empty != obj->time_to_empty) { - time_str_old = dkp_object_time_to_text (old->time_to_empty); - time_str = dkp_object_time_to_text (obj->time_to_empty); - g_print (" time to empty: %s -> %s\n", time_str_old, time_str); - g_free (time_str_old); - g_free (time_str); - } - } - if (obj->type == DKP_DEVICE_TYPE_BATTERY || - obj->type == DKP_DEVICE_TYPE_UPS || - obj->type == DKP_DEVICE_TYPE_MOUSE || - obj->type == DKP_DEVICE_TYPE_KEYBOARD) - if (old->percentage != obj->percentage) - g_print (" percentage: %g%% -> %g%%\n", - old->percentage, obj->percentage); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) - if (old->capacity != obj->capacity) - g_print (" capacity: %g%% -> %g%%\n", - old->capacity, obj->capacity); - if (obj->type == DKP_DEVICE_TYPE_BATTERY) - if (old->technology != obj->technology) - g_print (" technology: %s -> %s\n", - dkp_device_technology_to_text (old->technology), - dkp_device_technology_to_text (obj->technology)); - if (obj->type == DKP_DEVICE_TYPE_LINE_POWER) - if (old->online != obj->online) - g_print (" online: %s -> %s\n", - dkp_object_bool_to_text (old->online), - dkp_object_bool_to_text (obj->online)); - return TRUE; -} - -/** - * dkp_object_new: - **/ -DkpObject * -dkp_object_new (void) -{ - DkpObject *obj; - obj = g_new0 (DkpObject, 1); - dkp_object_clear_internal (obj); - return obj; -} - -/** - * dkp_object_free_internal: - **/ -static gboolean -dkp_object_free_internal (DkpObject *obj) -{ - g_free (obj->vendor); - g_free (obj->model); - g_free (obj->serial); - g_free (obj->native_path); - return TRUE; -} - -/** - * dkp_object_free: - **/ -gboolean -dkp_object_free (DkpObject *obj) -{ - if (obj == NULL) - return FALSE; - dkp_object_free_internal (obj); - g_free (obj); - return TRUE; -} - -/** - * dkp_object_clear: - **/ -gboolean -dkp_object_clear (DkpObject *obj) -{ - if (obj == NULL) - return FALSE; - dkp_object_free_internal (obj); - dkp_object_clear_internal (obj); - return TRUE; -} - -/** - * dkp_object_get_id: - **/ -gchar * -dkp_object_get_id (DkpObject *obj) -{ - GString *string; - gchar *id = NULL; - - /* line power */ - if (obj->type == DKP_DEVICE_TYPE_LINE_POWER) { - goto out; - - /* batteries */ - } else if (obj->type == DKP_DEVICE_TYPE_BATTERY) { - /* we don't have an ID if we are not present */ - if (!obj->is_present) - goto out; - - string = g_string_new (""); - - /* in an ideal world, model-capacity-serial */ - if (obj->model != NULL && strlen (obj->model) > 2) { - g_string_append (string, obj->model); - g_string_append_c (string, '-'); - } - if (obj->energy_full_design > 0) { - /* FIXME: this may not be stable if we are using voltage_now */ - g_string_append_printf (string, "%i", (guint) obj->energy_full_design); - g_string_append_c (string, '-'); - } - if (obj->serial != NULL && strlen (obj->serial) > 2) { - g_string_append (string, obj->serial); - g_string_append_c (string, '-'); - } - - /* make sure we are sane */ - if (string->len == 0) { - /* just use something generic */ - g_string_append (string, "generic_id"); - } else { - /* remove trailing '-' */ - g_string_set_size (string, string->len - 1); - } - - /* the id may have invalid chars that need to be replaced */ - id = g_string_free (string, FALSE); - - } else { - /* generic fallback */ - id = g_strdup_printf ("%s-%s-%s", obj->vendor, obj->model, obj->serial); - } - - g_strdelimit (id, "\\\t\"?' /,.", '_'); - -out: - return id; -} - diff --git a/libdevkit-power/dkp-object.h b/libdevkit-power/dkp-object.h deleted file mode 100644 index 55946c9..0000000 --- a/libdevkit-power/dkp-object.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Richard Hughes <richard@hughsie.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#if !defined (__DEVICEKIT_POWER_H_INSIDE__) && !defined (DKP_COMPILATION) -#error "Only <devicekit-power.h> can be included directly." -#endif - -#ifndef __DKP_OBJECT_H__ -#define __DKP_OBJECT_H__ - -#include <glib.h> -#include <libdevkit-power/dkp-enum.h> - -G_BEGIN_DECLS - -typedef struct { - guint64 update_time; - gchar *vendor; - gchar *model; - gchar *serial; - gchar *native_path; - gboolean power_supply; - gboolean online; - gboolean is_present; - gboolean is_rechargeable; - gboolean has_history; - gboolean has_statistics; - DkpDeviceType type; - DkpDeviceState state; - DkpDeviceTechnology technology; - gdouble capacity; /* percent */ - gdouble energy; /* Watt Hours */ - gdouble energy_empty; /* Watt Hours */ - gdouble energy_full; /* Watt Hours */ - gdouble energy_full_design; /* Watt Hours */ - gdouble energy_rate; /* Watts */ - gdouble voltage; /* Volts */ - gint64 time_to_empty; /* seconds */ - gint64 time_to_full; /* seconds */ - gdouble percentage; /* percent */ -} DkpObject; - -DkpObject *dkp_object_new (void); -gboolean dkp_object_clear (DkpObject *obj); -gboolean dkp_object_free (DkpObject *obj); -gchar *dkp_object_get_id (DkpObject *obj); -DkpObject *dkp_object_copy (const DkpObject *cobj); -gboolean dkp_object_print (const DkpObject *obj); -gboolean dkp_object_diff (const DkpObject *old, - const DkpObject *obj); -gboolean dkp_object_equal (const DkpObject *obj1, - const DkpObject *obj2); -gboolean dkp_object_set_from_map (DkpObject *obj, - GHashTable *hash_table); - -G_END_DECLS - -#endif /* __DKP_OBJECT_H__ */ - |