Diff between 2637d94576fa5670187a2173f0c04720795843fa and a70d39b01a4c8549e46626b3f3a1ec9cb98e98db

Changed Files

File Additions Deletions Status
proximity/manager.c +16 -6 modified
proximity/monitor.c +6 -1 modified
proximity/monitor.h +8 -1 modified

Full Patch

diff --git a/proximity/manager.c b/proximity/manager.c
index e3e049d..a9526a1 100644
--- a/proximity/manager.c
+++ b/proximity/manager.c
@@ -41,11 +41,7 @@
 
 static DBusConnection *connection = NULL;
 
-static struct {
-	gboolean linkloss;
-	gboolean pathloss;
-	gboolean findme;
-} enabled  = {
+static struct enabled enabled  = {
 	.linkloss = TRUE,
 	.pathloss = TRUE,
 	.findme = TRUE,
@@ -53,7 +49,21 @@ static struct {
 
 static int attio_device_probe(struct btd_device *device, GSList *uuids)
 {
-	return monitor_register(connection, device);
+	gboolean linkloss = FALSE, pathloss = FALSE, findme = FALSE;
+
+	if (g_slist_find_custom(uuids, IMMEDIATE_ALERT_UUID,
+					(GCompareFunc) strcasecmp)) {
+		findme = enabled.findme;
+		if (g_slist_find_custom(uuids, TX_POWER_UUID,
+					(GCompareFunc) strcasecmp))
+			pathloss = enabled.pathloss;
+	}
+
+	if (g_slist_find_custom(uuids, LINK_LOSS_UUID,
+				(GCompareFunc) strcasecmp))
+		linkloss = enabled.linkloss;
+
+	return monitor_register(connection, device, linkloss, pathloss, findme);
 }
 
 static void attio_device_remove(struct btd_device *device)
diff --git a/proximity/monitor.c b/proximity/monitor.c
index c16385a..31691ff 100644
--- a/proximity/monitor.c
+++ b/proximity/monitor.c
@@ -57,6 +57,7 @@
 struct monitor {
 	struct btd_device *device;
 	GAttrib *attrib;
+	struct enabled enabled;
 	char *linklosslevel;		/* Link Loss Alert Level */
 };
 
@@ -291,7 +292,8 @@ static void monitor_destroy(gpointer user_data)
 	g_free(monitor);
 }
 
-int monitor_register(DBusConnection *conn, struct btd_device *device)
+int monitor_register(DBusConnection *conn, struct btd_device *device,
+			gboolean linkloss, gboolean pathloss, gboolean findme)
 {
 	const char *path = device_get_path(device);
 	struct monitor *monitor;
@@ -306,6 +308,9 @@ int monitor_register(DBusConnection *conn, struct btd_device *device)
 	monitor = g_new0(struct monitor, 1);
 	monitor->device = btd_device_ref(device);
 	monitor->linklosslevel = (level ? : g_strdup("none"));
+	monitor->enabled.linkloss = linkloss;
+	monitor->enabled.pathloss = pathloss;
+	monitor->enabled.findme = findme;
 
 	if (g_dbus_register_interface(conn, path,
 				PROXIMITY_INTERFACE,
diff --git a/proximity/monitor.h b/proximity/monitor.h
index 5c6ebf6..ef47ee1 100644
--- a/proximity/monitor.h
+++ b/proximity/monitor.h
@@ -22,5 +22,12 @@
  *
  */
 
-int monitor_register(DBusConnection *conn, struct btd_device *device);
+struct enabled {
+	gboolean linkloss;
+	gboolean pathloss;
+	gboolean findme;
+};
+
+int monitor_register(DBusConnection *conn, struct btd_device *device,
+			gboolean linkloss, gboolean pathloss, gboolean findme);
 void monitor_unregister(DBusConnection *conn, struct btd_device *device);