aboutsummaryrefslogtreecommitdiffstats
path: root/binding/bluetooth-bluez.c
diff options
context:
space:
mode:
Diffstat (limited to 'binding/bluetooth-bluez.c')
-rw-r--r--binding/bluetooth-bluez.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/binding/bluetooth-bluez.c b/binding/bluetooth-bluez.c
index 37c4469..052ea7b 100644
--- a/binding/bluetooth-bluez.c
+++ b/binding/bluetooth-bluez.c
@@ -518,3 +518,50 @@ gboolean bluez_set_property(struct bluetooth_state *ns,
return TRUE;
}
+
+gboolean bluetooth_autoconnect(gpointer data)
+{
+ struct bluetooth_state *ns = data;
+ GError *error = NULL;
+ json_object *jresp, *jobj = NULL;
+ int i;
+
+ jresp = object_properties(ns, &error);
+
+ json_object_object_get_ex(jresp, "devices", &jobj);
+
+ for (i = 0; i < json_object_array_length(jobj); i++) {
+ json_object *idx = json_object_array_get_idx(jobj, i);
+ json_object *props = NULL;
+ json_object_object_get_ex(idx, "properties", &props);
+
+ if (props) {
+ json_object *paired = NULL;
+ json_object_object_get_ex(props, "paired", &paired);
+
+ if (paired && json_object_get_boolean(paired)) {
+ GVariant *reply;
+ json_object *tmp = NULL;
+ const char *adapter, *device;
+ gchar *path;
+
+ json_object_object_get_ex(idx, "device", &tmp);
+ device = json_object_get_string(tmp);
+
+ json_object_object_get_ex(idx, "adapter", &tmp);
+ adapter = json_object_get_string(tmp);
+
+ path = g_strconcat("/org/bluez/", adapter, "/", device, NULL);
+
+ reply = bluez_call(ns, "device", path, "Connect", NULL, NULL);
+ g_free(path);
+
+ if (reply)
+ return FALSE;
+ g_variant_unref(reply);
+ }
+ }
+ }
+
+ return FALSE;
+}