summaryrefslogtreecommitdiff
path: root/src/battery.c
diff options
context:
space:
mode:
authorSonny Sasaka <sonnysasaka@chromium.org>2020-11-30 13:55:58 -0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2020-11-30 16:16:28 -0800
commitbc6ee2073578d34835735fad48ca53c85a12702e (patch)
tree08a625ce1bb99c9eb1550a6df5e60f00078e7ca7 /src/battery.c
parentaa4a295744f887030b24340af4a5d985be119c1e (diff)
downloadbluez-bc6ee2073578d34835735fad48ca53c85a12702e.tar.gz
battery: Add Source property to Battery API
As Battery API will be generalized for other battery reporting protocols, the Source property is useful for diagnostics purposes. Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Diffstat (limited to 'src/battery.c')
-rw-r--r--src/battery.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/battery.c b/src/battery.c
index 87a6b91fb..8613d6e23 100644
--- a/src/battery.c
+++ b/src/battery.c
@@ -31,8 +31,9 @@
#define BATTERY_MAX_PERCENTAGE 100
struct btd_battery {
- char *path; /* D-Bus object path, owns pointer */
+ char *path; /* D-Bus object path */
uint8_t percentage; /* valid between 0 to 100 inclusively */
+ char *source; /* Descriptive source of the battery info */
};
static struct queue *batteries = NULL;
@@ -62,13 +63,15 @@ static bool match_path(const void *data, const void *user_data)
return g_strcmp0(battery->path, path) == 0;
}
-static struct btd_battery *battery_new(const char *path)
+static struct btd_battery *battery_new(const char *path, const char *source)
{
struct btd_battery *battery;
battery = new0(struct btd_battery, 1);
battery->path = g_strdup(path);
battery->percentage = UINT8_MAX;
+ if (source)
+ battery->source = g_strdup(source);
return battery;
}
@@ -78,6 +81,9 @@ static void battery_free(struct btd_battery *battery)
if (battery->path)
g_free(battery->path);
+ if (battery->source)
+ g_free(battery->source);
+
free(battery);
}
@@ -100,13 +106,34 @@ static gboolean property_percentage_exists(const GDBusPropertyTable *property,
return battery->percentage <= BATTERY_MAX_PERCENTAGE;
}
+static gboolean property_source_get(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct btd_battery *battery = data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
+ &battery->source);
+
+ return TRUE;
+}
+
+static gboolean property_source_exists(const GDBusPropertyTable *property,
+ void *data)
+{
+ struct btd_battery *battery = data;
+
+ return battery->source != NULL;
+}
+
static const GDBusPropertyTable battery_properties[] = {
{ "Percentage", "y", property_percentage_get, NULL,
property_percentage_exists },
+ { "Source", "s", property_source_get, NULL, property_source_exists,
+ G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
{}
};
-struct btd_battery *btd_battery_register(const char *path)
+struct btd_battery *btd_battery_register(const char *path, const char *source)
{
struct btd_battery *battery;
@@ -122,7 +149,7 @@ struct btd_battery *btd_battery_register(const char *path)
return NULL;
}
- battery = battery_new(path);
+ battery = battery_new(path, source);
battery_add(battery);
if (!g_dbus_register_interface(btd_get_dbus_connection(), battery->path,