Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH v3 04/15] test: Update monitor script to ObjectManager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Make the script compatible with the new API provided by the
ObjectManager and Properties interfaces.
---
 test/monitor-bluetooth | 68 +++++++++++++++++++++++---------------------------
 1 file changed, 31 insertions(+), 37 deletions(-)

diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index 4a598e1..45cc910 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,15 +7,28 @@ import gobject
 import dbus
 import dbus.mainloop.glib
 
-def property_changed(name, value, path, interface):
-	iface = interface[interface.rfind(".") + 1:]
-	val = str(value)
-	print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val))
+relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device" ]
 
-def object_signal(value, path, interface, member):
+def property_changed(interface, changed, invalidated, path):
 	iface = interface[interface.rfind(".") + 1:]
-	val = str(value)
-	print("{%s.%s} [%s] Path = %s" % (iface, member, path, val))
+	for name, value in changed.iteritems():
+		val = str(value)
+		print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name,
+									val))
+
+def interfaces_added(path, interfaces):
+	for iface, props in interfaces.iteritems():
+		if not(iface in relevant_ifaces):
+			continue
+		print("{Added %s} [%s]" % (iface, path))
+		for name, value in props.iteritems():
+			print("      %s = %s" % (name, value))
+
+def interfaces_removed(path, interfaces):
+	for iface in interfaces:
+		if not(iface in relevant_ifaces):
+			continue
+		print("{Removed %s} [%s]" % (iface, path))
 
 if __name__ == '__main__':
 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -23,36 +36,17 @@ if __name__ == '__main__':
 	bus = dbus.SystemBus()
 
 	bus.add_signal_receiver(property_changed, bus_name="org.bluez",
-					signal_name = "PropertyChanged",
-						path_keyword="path",
-						interface_keyword="interface")
-
-	bus.add_signal_receiver(object_signal, bus_name="org.bluez",
-					signal_name = "AdapterAdded",
-						path_keyword="path",
-						member_keyword="member",
-						interface_keyword="interface")
-	bus.add_signal_receiver(object_signal, bus_name="org.bluez",
-					signal_name = "AdapterRemoved",
-						path_keyword="path",
-						member_keyword="member",
-						interface_keyword="interface")
-	bus.add_signal_receiver(object_signal, bus_name="org.bluez",
-					signal_name = "DefaultAdapterChanged",
-						path_keyword="path",
-						member_keyword="member",
-						interface_keyword="interface")
-
-	bus.add_signal_receiver(object_signal, bus_name="org.bluez",
-					signal_name = "DeviceCreated",
-						path_keyword="path",
-						member_keyword="member",
-						interface_keyword="interface")
-	bus.add_signal_receiver(object_signal, bus_name="org.bluez",
-					signal_name = "DeviceRemoved",
-						path_keyword="path",
-						member_keyword="member",
-						interface_keyword="interface")
+			dbus_interface="org.freedesktop.DBus.Properties",
+			signal_name="PropertiesChanged",
+			path_keyword="path")
+
+	bus.add_signal_receiver(interfaces_added, bus_name="org.bluez",
+			dbus_interface="org.freedesktop.DBus.ObjectManager",
+			signal_name="InterfacesAdded")
+
+	bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez",
+			dbus_interface="org.freedesktop.DBus.ObjectManager",
+			signal_name="InterfacesRemoved")
 
 	mainloop = gobject.MainLoop()
 	mainloop.run()
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 05/15] test: Update test-manager script to ObjectManager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Make the script compatible with the new API provided by the
ObjectManager interface.
---
 test/test-manager | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/test/test-manager b/test/test-manager
index 16d6b08..c5e8007 100755
--- a/test/test-manager
+++ b/test/test-manager
@@ -8,34 +8,32 @@ import dbus
 import dbus.mainloop.glib
 import bluezutils
 
-def adapter_added(path):
-	print("Adapter with path %s added" % (path))
+def interfaces_added(path, interfaces):
+	if interfaces.get("org.bluez.Adapter") != None:
+		print("Adapter with path %s added" % (path))
 
-def adapter_removed(path):
-	print("Adapter with path %s removed" % (path))
-
-def default_changed(path):
-	print("Default adapter is now at path %s" % (path))
+def interfaces_removed(path, interfaces):
+	if "org.bluez.Adapter" in interfaces:
+		print("Adapter with path %s removed" % (path))
 
 if __name__ == "__main__":
 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
 
 	bus = dbus.SystemBus()
 
-	manager = dbus.Interface(bus.get_object('org.bluez', '/'),
-							'org.bluez.Manager')
-
-	manager.connect_to_signal("AdapterAdded", adapter_added)
-
-	manager.connect_to_signal("AdapterRemoved", adapter_removed)
+	bus.add_signal_receiver(interfaces_added, bus_name="org.bluez",
+			dbus_interface="org.freedesktop.DBus.ObjectManager",
+			signal_name="InterfacesAdded")
 
-	manager.connect_to_signal("DefaultAdapterChanged", default_changed)
+	bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez",
+			dbus_interface="org.freedesktop.DBus.ObjectManager",
+			signal_name="InterfacesRemoved")
 
 	try:
 		path = bluezutils.find_adapter().object_path
-		default_changed(path)
+		print("Adapter found at path %s" % (path))
 	except:
-		pass
+		print("No adapter found")
 
 	mainloop = GObject.MainLoop()
 	mainloop.run()
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 06/15] test: Use ObjectManager instead of Adapters property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Use the objects and interfaces reported by the ObjectManager in order
to list the available adapters.
---
 test/test-health      |  9 +++++++--
 test/test-health-sink | 10 ++++++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/test/test-health b/test/test-health
index a7df679..9d2f62f 100755
--- a/test/test-health
+++ b/test/test-health
@@ -132,9 +132,14 @@ if not con:
 	sys.exit()
 
 manager = dbus.Interface(bus.get_object("org.bluez", "/"),
-						"org.bluez.Manager")
+					"org.freedesktop.DBus.ObjectManager")
 
-adapters = manager.GetProperties()["Adapters"]
+objects = manager.GetManagedObjects()
+adapters = []
+
+for path, ifaces in objects.iteritems():
+	if ifaces.has_key("org.bluez.Adapter"):
+		adapters.append(path)
 
 i = 1
 for ad in adapters:
diff --git a/test/test-health-sink b/test/test-health-sink
index 333b2fb..a886d85 100755
--- a/test/test-health-sink
+++ b/test/test-health-sink
@@ -22,9 +22,15 @@ app_path = hdp_manager.CreateApplication({"DataType": dbus.types.UInt16(4103),
 print(app_path)
 
 manager = dbus.Interface(bus.get_object("org.bluez", "/"),
-						"org.bluez.Manager")
+					"org.freedesktop.DBus.ObjectManager")
+
+objects = manager.GetManagedObjects()
+adapters = []
+
+for path, ifaces in objects.iteritems():
+	if ifaces.has_key("org.bluez.Adapter"):
+		adapters.append(path)
 
-adapters = manager.GetProperties()["Adapters"]
 i = 1
 for ad in adapters:
 	print("%d. %s" % (i, ad))
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 07/15] dbus: Remove org.bluez.Manager
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

After the decision to drop the "default-adapter" feature in the D-Bus
API, the org.bluez.Manager interface can be entirely dropped since it
has been replaced by the ObjectManager.
---
 Makefile.am         |   3 +-
 doc/bluez-docs.xml  |   7 ---
 doc/manager-api.txt |  51 ----------------
 src/adapter.c       |   4 +-
 src/manager.c       | 163 ----------------------------------------------------
 src/manager.h       |   3 -
 6 files changed, 3 insertions(+), 228 deletions(-)
 delete mode 100644 doc/manager-api.txt

diff --git a/Makefile.am b/Makefile.am
index 438fca6..9b2f9f6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -345,8 +345,7 @@ CLEANFILES += $(rules_DATA)
 
 EXTRA_DIST += scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules
 
-EXTRA_DIST += doc/manager-api.txt \
-		doc/adapter-api.txt doc/device-api.txt doc/profile-api.txt \
+EXTRA_DIST += doc/adapter-api.txt doc/device-api.txt doc/profile-api.txt \
 		doc/service-api.txt doc/agent-api.txt doc/attribute-api.txt \
 		doc/network-api.txt doc/control-api.txt doc/health-api.txt \
 		doc/sap-api.txt doc/media-api.txt doc/assigned-numbers.txt \
diff --git a/doc/bluez-docs.xml b/doc/bluez-docs.xml
index a90dde7..814ce00 100644
--- a/doc/bluez-docs.xml
+++ b/doc/bluez-docs.xml
@@ -47,13 +47,6 @@
     </legalnotice>
   </bookinfo>
 
-  <reference id="manager">
-    <title>Manager interface</title>
-    <para>
-<programlisting><xi:include href="manager-api.txt" parse="text" /></programlisting>
-    </para>
-  </reference>
-
   <reference id="adapter">
     <title>Adapter interface</title>
     <para>
diff --git a/doc/manager-api.txt b/doc/manager-api.txt
deleted file mode 100644
index 3add587..0000000
--- a/doc/manager-api.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-BlueZ D-Bus Manager API description
-***********************************
-
-Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
-Copyright (C) 2005-2006  Johan Hedberg <johan.hedberg@nokia.com>
-Copyright (C) 2005-2006  Claudio Takahasi <claudio.takahasi@indt.org.br>
-Copyright (C) 2006-2007  Luiz von Dentz <luiz.dentz@indt.org.br>
-
-
-Manager hierarchy
-=================
-
-Service		org.bluez
-Interface	org.bluez.Manager
-Object path	/
-
-		object DefaultAdapter()
-
-			Returns object path for the default adapter.
-
-			Possible errors: org.bluez.Error.InvalidArguments
-					 org.bluez.Error.NoSuchAdapter
-
-		object FindAdapter(string pattern)
-
-			Returns object path for the specified adapter. Valid
-			patterns are "hci0" or "00:11:22:33:44:55".
-
-			Possible errors: org.bluez.Error.InvalidArguments
-					 org.bluez.Error.NoSuchAdapter
-
-Signals		AdapterAdded(object adapter)
-
-			Parameter is object path of added adapter.
-
-		AdapterRemoved(object adapter)
-
-			Parameter is object path of removed adapter.
-
-		DefaultAdapterChanged(object adapter)
-
-			Parameter is object path of the new default adapter.
-
-			In case all adapters are removed this signal will not
-			be emitted. The AdapterRemoved signal has to be used
-			to detect that no default adapter is selected or
-			available anymore.
-
-Properties	array{object} Adapters [readonly]
-
-			List of adapter object paths.
diff --git a/src/adapter.c b/src/adapter.c
index 3c5d277..ea0394f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -86,6 +86,7 @@
 #define REMOVE_TEMP_TIMEOUT (3 * 60)
 #define PENDING_FOUND_MAX 5
 
+static const char *base_path = "/org/bluez";
 static GSList *adapter_drivers = NULL;
 
 enum session_req_type {
@@ -2973,7 +2974,6 @@ struct btd_adapter *adapter_create(int id)
 {
 	char path[MAX_PATH_LENGTH];
 	struct btd_adapter *adapter;
-	const char *base_path = manager_get_base_path();
 
 	adapter = g_try_new0(struct btd_adapter, 1);
 	if (!adapter) {
@@ -3604,7 +3604,7 @@ const char *btd_adapter_any_request_path(void)
 	if (adapter_any_refcount++ > 0)
 		return adapter_any_path;
 
-	adapter_any_path = g_strdup_printf("%s/any", manager_get_base_path());
+	adapter_any_path = g_strdup_printf("%s/any", base_path);
 
 	return adapter_any_path;
 }
diff --git a/src/manager.c b/src/manager.c
index 3088dd9..3c415db 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -54,141 +54,11 @@
 #include "error.h"
 #include "manager.h"
 
-static const char *base_path = "/org/bluez";
-
 static int default_adapter_id = -1;
 static GSList *adapters = NULL;
 
-const char *manager_get_base_path(void)
-{
-	return base_path;
-}
-
-static DBusMessage *default_adapter(DBusConnection *conn,
-					DBusMessage *msg, void *data)
-{
-	DBusMessage *reply;
-	struct btd_adapter *adapter;
-	const gchar *path;
-
-	adapter = manager_find_adapter_by_id(default_adapter_id);
-	if (!adapter)
-		return btd_error_no_such_adapter(msg);
-
-	reply = dbus_message_new_method_return(msg);
-	if (!reply)
-		return NULL;
-
-	path = adapter_get_path(adapter);
-
-	dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
-				DBUS_TYPE_INVALID);
-
-	return reply;
-}
-
-static DBusMessage *find_adapter(DBusConnection *conn,
-					DBusMessage *msg, void *data)
-{
-	DBusMessage *reply;
-	struct btd_adapter *adapter;
-	const char *pattern;
-	int dev_id;
-	const gchar *path;
-
-	if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern,
-							DBUS_TYPE_INVALID))
-		return btd_error_invalid_args(msg);
-
-	/* hci_devid() would make sense to use here, except it is
-	 * restricted to devices which are up */
-	if (!strcmp(pattern, "any") || !strcmp(pattern, "00:00:00:00:00:00")) {
-		path = adapter_any_get_path();
-		if (path != NULL)
-			goto done;
-		return btd_error_no_such_adapter(msg);
-	} else if (!strncmp(pattern, "hci", 3) && strlen(pattern) >= 4) {
-		dev_id = atoi(pattern + 3);
-		adapter = manager_find_adapter_by_id(dev_id);
-	} else {
-		bdaddr_t bdaddr;
-		str2ba(pattern, &bdaddr);
-		adapter = manager_find_adapter(&bdaddr);
-	}
-
-	if (!adapter)
-		return btd_error_no_such_adapter(msg);
-
-	path = adapter_get_path(adapter);
-
-done:
-	reply = dbus_message_new_method_return(msg);
-	if (!reply)
-		return NULL;
-
-	dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
-							DBUS_TYPE_INVALID);
-
-	return reply;
-}
-
-static gboolean manager_property_get_adapters(
-					const GDBusPropertyTable *property,
-					DBusMessageIter *iter, void *data)
-{
-	DBusMessageIter entry;
-	GSList *l;
-
-	dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
-				DBUS_TYPE_OBJECT_PATH_AS_STRING, &entry);
-
-	for (l = adapters; l != NULL; l = l->next) {
-		struct btd_adapter *adapter = l->data;
-		const char *path = adapter_get_path(adapter);
-
-		dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
-								&path);
-	}
-
-	dbus_message_iter_close_container(iter, &entry);
-
-	return TRUE;
-}
-
-static const GDBusMethodTable manager_methods[] = {
-	{ GDBUS_METHOD("DefaultAdapter",
-			NULL, GDBUS_ARGS({ "adapter", "o" }),
-			default_adapter) },
-	{ GDBUS_METHOD("FindAdapter",
-			GDBUS_ARGS({ "pattern", "s" }),
-			GDBUS_ARGS({ "adapter", "o" }),
-			find_adapter) },
-	{ }
-};
-
-static const GDBusSignalTable manager_signals[] = {
-	{ GDBUS_SIGNAL("AdapterAdded",
-			GDBUS_ARGS({ "adapter", "o" })) },
-	{ GDBUS_SIGNAL("AdapterRemoved",
-			GDBUS_ARGS({ "adapter", "o" })) },
-	{ GDBUS_SIGNAL("DefaultAdapterChanged",
-			GDBUS_ARGS({ "adapter", "o" })) },
-	{ }
-};
-
-static const GDBusPropertyTable manager_properties[] = {
-	{ "Adapters", "ao", manager_property_get_adapters },
-	{ }
-};
-
 bool manager_init(const char *path)
 {
-	if (!g_dbus_register_interface(btd_get_dbus_connection(),
-					"/", MANAGER_INTERFACE,
-					manager_methods, manager_signals,
-					manager_properties, NULL, NULL))
-		return false;
-
 	btd_profile_init();
 
 	return true;
@@ -196,21 +66,7 @@ bool manager_init(const char *path)
 
 static void manager_set_default_adapter(int id)
 {
-	struct btd_adapter *adapter;
-	const gchar *path;
-
 	default_adapter_id = id;
-
-	adapter = manager_find_adapter_by_id(id);
-	if (!adapter)
-		return;
-
-	path = adapter_get_path(adapter);
-
-	g_dbus_emit_signal(btd_get_dbus_connection(), "/",
-				MANAGER_INTERFACE, "DefaultAdapterChanged",
-				DBUS_TYPE_OBJECT_PATH, &path,
-				DBUS_TYPE_INVALID);
 }
 
 struct btd_adapter *manager_get_default_adapter(void)
@@ -221,24 +77,15 @@ struct btd_adapter *manager_get_default_adapter(void)
 static void manager_remove_adapter(struct btd_adapter *adapter)
 {
 	uint16_t dev_id = adapter_get_dev_id(adapter);
-	const gchar *path = adapter_get_path(adapter);
 
 	adapters = g_slist_remove(adapters, adapter);
 
-	g_dbus_emit_property_changed(btd_get_dbus_connection(), "/",
-					MANAGER_INTERFACE, "Adapters");
-
 	if (default_adapter_id == dev_id || default_adapter_id < 0) {
 		int new_default = hci_get_route(NULL);
 
 		manager_set_default_adapter(new_default);
 	}
 
-	g_dbus_emit_signal(btd_get_dbus_connection(), "/",
-				MANAGER_INTERFACE, "AdapterRemoved",
-				DBUS_TYPE_OBJECT_PATH, &path,
-				DBUS_TYPE_INVALID);
-
 	adapter_remove(adapter);
 	btd_adapter_unref(adapter);
 
@@ -259,9 +106,6 @@ void manager_cleanup(const char *path)
 	}
 
 	btd_start_exit_timer();
-
-	g_dbus_unregister_interface(btd_get_dbus_connection(),
-						"/", MANAGER_INTERFACE);
 }
 
 static gint adapter_id_cmp(gconstpointer a, gconstpointer b)
@@ -338,13 +182,6 @@ struct btd_adapter *btd_manager_register_adapter(int id, gboolean up)
 	}
 
 	path = adapter_get_path(adapter);
-	g_dbus_emit_signal(btd_get_dbus_connection(), "/",
-				MANAGER_INTERFACE, "AdapterAdded",
-				DBUS_TYPE_OBJECT_PATH, &path,
-				DBUS_TYPE_INVALID);
-
-	g_dbus_emit_property_changed(btd_get_dbus_connection(),  "/",
-					MANAGER_INTERFACE, "Adapters");
 
 	btd_stop_exit_timer();
 
diff --git a/src/manager.h b/src/manager.h
index 4d094b6..fdaabfd 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -25,14 +25,11 @@
 #include <bluetooth/bluetooth.h>
 #include <dbus/dbus.h>
 
-#define MANAGER_INTERFACE "org.bluez.Manager"
-
 typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
 
 bool manager_init(const char *path);
 void manager_cleanup(const char *path);
 
-const char *manager_get_base_path(void);
 struct btd_adapter *manager_find_adapter(const bdaddr_t *sba);
 struct btd_adapter *manager_find_adapter_by_id(int id);
 struct btd_adapter *manager_get_default_adapter(void);
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 08/15] test: Use ObjectManager instead of Devices property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Use the objects and interfaces reported by the ObjectManager in order
to list the available devices per adapter.
---
 test/list-devices | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/test/list-devices b/test/list-devices
index fcff3e7..e8f3f24 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -30,6 +30,10 @@ def extract_uuids(uuid_list):
 	return list
 
 objects = manager.GetManagedObjects()
+
+all_devices = (str(path) for path, interfaces in objects.iteritems() if
+					"org.bluez.Device" in interfaces.keys())
+
 for path, interfaces in objects.iteritems():
 	if "org.bluez.Adapter" not in interfaces.keys():
 		continue
@@ -39,19 +43,13 @@ for path, interfaces in objects.iteritems():
 	properties = interfaces["org.bluez.Adapter"]
 	for key in properties.keys():
 		value = properties[key]
-		if (key == "Devices"):
-			list = extract_objects(value)
-			print("    %s = %s" % (key, list))
-		elif (key == "UUIDs"):
+		if (key == "UUIDs"):
 			list = extract_uuids(value)
 			print("    %s = %s" % (key, list))
 		else:
 			print("    %s = %s" % (key, value))
 
-	try:
-		device_list = properties["Devices"]
-	except:
-		device_list = []
+	device_list = [d for d in all_devices if d.startswith(path + "/")]
 
 	for dev_path in device_list:
 		print("    [ " + dev_path + " ]")
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 09/15] test: Add helper function to find devices
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Add a helper function to the utility library as an alternative to the
convenience method Adapter.FindDevice() in the D-Bus API.
---
 test/bluezutils.py | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/test/bluezutils.py b/test/bluezutils.py
index 0b8aec3..70fe01b 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -2,6 +2,7 @@ import dbus
 
 SERVICE_NAME = "org.bluez"
 ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
+DEVICE_INTERFACE = SERVICE_NAME + ".Device"
 
 def get_managed_objects():
 	bus = dbus.SystemBus()
@@ -23,3 +24,24 @@ def find_adapter_in_objects(objects, pattern=None):
 			obj = bus.get_object(SERVICE_NAME, path)
 			return dbus.Interface(obj, ADAPTER_INTERFACE)
 	raise Exception("Bluetooth adapter not found")
+
+def find_device(device_address, adapter_pattern=None):
+	return find_device_in_objects(get_managed_objects(), device_address,
+								adapter_pattern)
+
+def find_device_in_objects(objects, device_address, adapter_pattern=None):
+	bus = dbus.SystemBus()
+	path_prefix = ""
+	if adapter_pattern:
+		adapter = find_adapter_in_objects(objects, adapter_pattern)
+		path_prefix = adapter.object_path
+	for path, ifaces in objects.iteritems():
+		device = ifaces.get(DEVICE_INTERFACE)
+		if device is None:
+			continue
+		if (device["Address"] == device_address and
+						path.startswith(path_prefix)):
+			obj = bus.get_object(SERVICE_NAME, path)
+			return dbus.Interface(obj, DEVICE_INTERFACE)
+
+	raise Exception("Bluetooth device not found")
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 10/15] adapter: Remove DeviceCreated/DeviceRemoved signals
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

The Adapter interface already reports changes in the device list in form
of property changes, so there is no need to keep these two signals.
---
 doc/adapter-api.txt |  8 --------
 src/adapter.c       | 17 -----------------
 2 files changed, 25 deletions(-)

diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index b638586..132e60f 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -116,14 +116,6 @@ Signals		DevicesFound(array{object path, dict values})
 			The dictionary contains the properties from the
 			org.bluez.Device interface.
 
-		DeviceCreated(object device)
-
-			Parameter is object path of created device.
-
-		DeviceRemoved(object device)
-
-			Parameter is object path of removed device.
-
 Properties	string Address [readonly]
 
 			The Bluetooth device address.
diff --git a/src/adapter.c b/src/adapter.c
index ea0394f..a816ae3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1010,7 +1010,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
 						uint8_t bdaddr_type)
 {
 	struct btd_device *device;
-	const char *path;
 
 	DBG("%s", address);
 
@@ -1022,12 +1021,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
 
 	adapter->devices = g_slist_append(adapter->devices, device);
 
-	path = device_get_path(device);
-	g_dbus_emit_signal(btd_get_dbus_connection(), adapter->path,
-			ADAPTER_INTERFACE, "DeviceCreated",
-			DBUS_TYPE_OBJECT_PATH, &path,
-			DBUS_TYPE_INVALID);
-
 	g_dbus_emit_property_changed(btd_get_dbus_connection(),
 				adapter->path, ADAPTER_INTERFACE, "Devices");
 
@@ -1055,7 +1048,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
 						struct btd_device *dev,
 						gboolean remove_storage)
 {
-	const gchar *dev_path = device_get_path(dev);
 	struct discovery *discovery = adapter->discovery;
 	GList *l;
 
@@ -1087,11 +1079,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
 	g_dbus_emit_property_changed(btd_get_dbus_connection(),
 				adapter->path, ADAPTER_INTERFACE, "Devices");
 
-	g_dbus_emit_signal(btd_get_dbus_connection(), adapter->path,
-			ADAPTER_INTERFACE, "DeviceRemoved",
-			DBUS_TYPE_OBJECT_PATH, &dev_path,
-			DBUS_TYPE_INVALID);
-
 	device_remove(dev, remove_storage);
 }
 
@@ -1683,10 +1670,6 @@ static const GDBusMethodTable adapter_methods[] = {
 };
 
 static const GDBusSignalTable adapter_signals[] = {
-	{ GDBUS_SIGNAL("DeviceCreated",
-			GDBUS_ARGS({ "device", "o" })) },
-	{ GDBUS_SIGNAL("DeviceRemoved",
-			GDBUS_ARGS({ "device", "o" })) },
 	{ GDBUS_SIGNAL("DevicesFound",
 			GDBUS_ARGS({ "devices", "a{oa{sv}}" })) },
 	{ }
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 11/15] adapter: Remove redundant Devices property
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

The ObjectManager interface already reports the list of devices, so the
the property can be entirely removed.
---
 doc/adapter-api.txt |  4 ----
 src/adapter.c       | 30 ------------------------------
 2 files changed, 34 deletions(-)

diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 132e60f..3582793 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -180,10 +180,6 @@ Properties	string Address [readonly]
 
 			Indicates that a device discovery procedure is active.
 
-		array{object} Devices [readonly]
-
-			List of device object paths.
-
 		array{string} UUIDs [readonly]
 
 			List of 128-bit UUIDs that represents the available
diff --git a/src/adapter.c b/src/adapter.c
index a816ae3..0c37ba4 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1021,9 +1021,6 @@ static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
 
 	adapter->devices = g_slist_append(adapter->devices, device);
 
-	g_dbus_emit_property_changed(btd_get_dbus_connection(),
-				adapter->path, ADAPTER_INTERFACE, "Devices");
-
 	return device;
 }
 
@@ -1076,9 +1073,6 @@ void adapter_remove_device(struct btd_adapter *adapter,
 		service_auth_cancel(auth);
 	}
 
-	g_dbus_emit_property_changed(btd_get_dbus_connection(),
-				adapter->path, ADAPTER_INTERFACE, "Devices");
-
 	device_remove(dev, remove_storage);
 }
 
@@ -1384,29 +1378,6 @@ static gboolean adapter_property_get_discovering(
 	return TRUE;
 }
 
-static gboolean adapter_property_get_devices(
-					const GDBusPropertyTable *property,
-					DBusMessageIter *iter, void *data)
-{
-	struct btd_adapter *adapter = data;
-	DBusMessageIter entry;
-	GSList *l;
-
-	dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
-				DBUS_TYPE_OBJECT_PATH_AS_STRING, &entry);
-
-	for (l = adapter->devices; l != NULL; l = l->next) {
-		const char *path = device_get_path(l->data);
-
-		dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
-								&path);
-	}
-
-	dbus_message_iter_close_container(iter, &entry);
-
-	return TRUE;
-}
-
 static gboolean adapter_property_get_uuids(const GDBusPropertyTable *property,
 					DBusMessageIter *iter, void *data)
 {
@@ -1691,7 +1662,6 @@ static const GDBusPropertyTable adapter_properties[] = {
 	{ "PairableTimeout", "u", adapter_property_get_pairable_timeout,
 				adapter_property_set_pairable_timeout },
 	{ "Discovering", "b", adapter_property_get_discovering },
-	{ "Devices", "ao", adapter_property_get_devices },
 	{ "UUIDs", "as", adapter_property_get_uuids },
 	{ }
 };
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 12/15] test: Avoid using Adapter.FindDevice()
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

The method is now deprecated and thus the replacement utility library
should be used in the test scripts.
---
 test/simple-agent      | 12 +++++------
 test/test-attrib       |  7 ++-----
 test/test-cyclingspeed |  9 ++++++--
 test/test-device       | 57 +++++++++++++++++++++++++++-----------------------
 test/test-heartrate    | 13 +++++++-----
 test/test-oob          | 12 +++++++----
 test/test-proximity    |  7 ++-----
 test/test-thermometer  | 10 +++++++--
 8 files changed, 71 insertions(+), 56 deletions(-)

diff --git a/test/simple-agent b/test/simple-agent
index 13c3ce7..3c51530 100755
--- a/test/simple-agent
+++ b/test/simple-agent
@@ -149,10 +149,9 @@ if __name__ == '__main__':
 	if options.capability:
 		capability  = options.capability
 
+	adapter_pattern = None
 	if len(args) > 0:
-		adapter = bluezutils.find_adapter(args[0])
-	else:
-		adapter = bluezutils.find_adapter()
+		adapter_pattern = args[0]
 
 	path = "/test/agent"
 	agent = Agent(bus, path)
@@ -160,16 +159,15 @@ if __name__ == '__main__':
 	mainloop = GObject.MainLoop()
 
 	if len(args) > 1:
-		dev_path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", dev_path),
-						"org.bluez.Device")
-
+		device = bluezutils.find_device(args[1], adapter_pattern)
+		dev_path = device.object_path
 		agent.set_exit_on_release(False)
 		device.Pair(path, capability, timeout=options.timeout,
 					reply_handler=pair_reply,
 					error_handler=pair_error)
 		device_obj = device
 	else:
+		adapter = bluezutils.find_adapter(adapter_pattern)
 		adapter.RegisterAgent(path, capability)
 		print("Agent registered")
 
diff --git a/test/test-attrib b/test/test-attrib
index f75a566..2b0b010 100755
--- a/test/test-attrib
+++ b/test/test-attrib
@@ -27,8 +27,6 @@ parser = OptionParser(option_list=option_list)
 
 (options, args) = parser.parse_args()
 
-adapter = bluezutils.find_adapter(options.dev_id)
-
 if (len(args) < 1):
 	print("Usage: %s <command>" % (sys.argv[0]))
 	print("")
@@ -39,6 +37,7 @@ if (len(args) < 1):
 	sys.exit(1)
 
 if (args[0] == "list"):
+	adapter = bluezutils.find_adapter(options.dev_id)
 	for path in adapter.GetProperties()["Devices"]:
 		device = dbus.Interface(bus.get_object("org.bluez", path),
 							"org.bluez.Device")
@@ -63,9 +62,7 @@ if (args[0] == "services"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+		device = bluezutils.find_device(args[1], options.dev_id)
 		properties = device.GetProperties()
 		for path in properties["Services"]:
 			print(path)
diff --git a/test/test-cyclingspeed b/test/test-cyclingspeed
index 2bfea36..10a16aa 100755
--- a/test/test-cyclingspeed
+++ b/test/test-cyclingspeed
@@ -125,10 +125,15 @@ if __name__ == "__main__":
 		print("\tSetCumulativeWheelRevolutions <value>")
 		sys.exit(1)
 
-	adapter = bluezutils.find_adapter(options.adapter)
+	managed_objects = bluezutils.get_managed_objects()
+	adapter = bluezutils.find_adapter_in_objects(managed_objects,
+								options.adapter)
 	adapter_path = adapter.object_path
 
-	device_path = adapter.FindDevice(options.address)
+	device = bluezutils.find_device_in_objects(managed_objects,
+								options.address,
+								options.adapter)
+	device_path = device.object_path
 
 	cscmanager = dbus.Interface(bus.get_object("org.bluez", adapter_path),
 						"org.bluez.CyclingSpeedManager")
diff --git a/test/test-device b/test/test-device
index f4a40c4..d40d656 100755
--- a/test/test-device
+++ b/test/test-device
@@ -23,10 +23,6 @@ parser = OptionParser(option_list=option_list)
 
 (options, args) = parser.parse_args()
 
-adapter = bluezutils.find_adapter(options.dev_id)
-
-adapter_path = adapter.object_path
-
 if (len(args) < 1):
 	print("Usage: %s <command>" % (sys.argv[0]))
 	print("")
@@ -45,6 +41,9 @@ if (len(args) < 1):
 	sys.exit(1)
 
 if (args[0] == "list"):
+	adapter = bluezutils.find_adapter(options.dev_id)
+	adapter_path = adapter.object_path
+
 	om = dbus.Interface(bus.get_object("org.bluez", "/"),
 					"org.freedesktop.DBus.ObjectManager")
 	objects = om.GetManagedObjects()
@@ -73,6 +72,7 @@ if (args[0] == "create"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
+		adapter = bluezutils.find_adapter(options.dev_id)
 		adapter.CreateDevice(args[1],
 				reply_handler=create_device_reply,
 				error_handler=create_device_error)
@@ -82,8 +82,14 @@ if (args[0] == "remove"):
 	if (len(args) < 2):
 		print("Need address or object path parameter")
 	else:
+		managed_objects = bluezutils.get_managed_objects()
+		adapter = bluezutils.find_adapter_in_objects(managed_objects,
+								options.dev_id)
 		try:
-			path = adapter.FindDevice(args[1])
+			dev = bluezutils.find_device_in_objects(managed_objects,
+								args[1],
+								options.dev_id)
+			path = dev.object_path
 		except:
 			path = args[1]
 		adapter.RemoveDevice(path)
@@ -93,9 +99,7 @@ if (args[0] == "connect"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+		device = bluezutils.find_device(args[1], options.dev_id)
 		if (len(args) > 2):
 			device.ConnectProfile(args[2])
 		else:
@@ -106,9 +110,7 @@ if (args[0] == "disconnect"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+		device = bluezutils.find_device(args[1], options.dev_id)
 		if (len(args) > 2):
 			device.DisconnectProfile(args[2])
 		else:
@@ -119,9 +121,7 @@ if (args[0] == "discover"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+		device = bluezutils.find_device(args[1], options.dev_id)
 		if (len(args) < 3):
 			pattern = ""
 		else:
@@ -139,7 +139,7 @@ if (args[0] == "class"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
+		device = bluezutils.find_device(args[1], options.dev_id)
 		device = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		cls = device.Get("org.bluez.Device", "Class")
@@ -150,10 +150,11 @@ if (args[0] == "name"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
+		device = bluezutils.find_device(args[1], options.dev_id)
+		path = device.object_path
+		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
-		name = device.Get("org.bluez.Device", "Name")
+		name = props.Get("org.bluez.Device", "Name")
 		print(name)
 	sys.exit(0)
 
@@ -161,8 +162,9 @@ if (args[0] == "alias"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
+		device = bluezutils.find_device(args[1], options.dev_id)
+		path = device.object_path
+		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
 			alias = device.Get("org.bluez.Device", "Alias")
@@ -175,8 +177,9 @@ if (args[0] == "trusted"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
+		device = bluezutils.find_device(args[1], options.dev_id)
+		path = device.object_path
+		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
 			trusted = device.Get("org.bluez.Device", "Trusted")
@@ -195,8 +198,9 @@ if (args[0] == "blocked"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
+		device = bluezutils.find_device(args[1], options.dev_id)
+		path = device.object_path
+		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
 			blocked = device.Get("org.bluez.Device", "Blocked")
@@ -215,8 +219,9 @@ if (args[0] == "services"):
 	if (len(args) < 2):
 		print("Need address parameter")
 	else:
-		path = adapter.FindDevice(args[1])
-		device = dbus.Interface(bus.get_object("org.bluez", path),
+		device = bluezutils.find_device(args[1], options.dev_id)
+		path = device.object_path
+		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		services = device.Get("org.bluez.Device", "Services")
 		for path in services:
diff --git a/test/test-heartrate b/test/test-heartrate
index a08e8df..47dd012 100755
--- a/test/test-heartrate
+++ b/test/test-heartrate
@@ -54,18 +54,21 @@ if __name__ == "__main__":
 		print("\tReset")
 		sys.exit(1)
 
-	adapter = bluezutils.find_adapter(options.adapter)
+	managed_objects = bluezutils.get_managed_objects()
+	adapter = bluezutils.find_adapter_in_objects(managed_objects,
+								options.adapter)
 	adapter_path = adapter.object_path
+
 	heartrateManager = dbus.Interface(bus.get_object("org.bluez",
 				adapter_path), "org.bluez.HeartRateManager")
 
 	path = "/test/watcher"
 	heartrateManager.RegisterWatcher(path)
 
-	device_path = adapter.FindDevice(options.address)
-
-	device = dbus.Interface(bus.get_object("org.bluez", device_path),
-							"org.bluez.Device")
+	device = bluezutils.find_device_in_objects(managed_objects,
+								options.address,
+								options.adapter)
+	device_path = device.object_path
 
 	heartrate = dbus.Interface(bus.get_object("org.bluez",
 					device_path), "org.bluez.HeartRate")
diff --git a/test/test-oob b/test/test-oob
index 34e042d..87c558f 100755
--- a/test/test-oob
+++ b/test/test-oob
@@ -42,14 +42,18 @@ if __name__ == '__main__':
 	print("Removing any existing bond...")
 
 	try:
-		device = adapter0.FindDevice(adapter1_address)
-		adapter0.RemoveDevice(device)
+		dev = bluezutils.find_device_in_objects(managed_objects,
+							adapter1_address,
+							adapter0_address)
+		adapter0.RemoveDevice(dev.object_path)
 	except:
 		pass
 
 	try:
-		device = adapter1.FindDevice(adapter0_address)
-		adapter1.RemoveDevice(device)
+		dev = bluezutils.find_device_in_objects(managed_objects,
+							adapter0_address,
+							adapter1_address)
+		adapter1.RemoveDevice(dev.object_path)
 	except:
 		pass
 
diff --git a/test/test-proximity b/test/test-proximity
index afde3fb..d6862de 100755
--- a/test/test-proximity
+++ b/test/test-proximity
@@ -35,10 +35,6 @@ if __name__ == "__main__":
 		]
 	parser = OptionParser(option_list=option_list)
 
-	(options, args) = parser.parse_args()
-
-	adapter = bluezutils.find_adapter(options.dev_id)
-
 	if (len(args) < 1):
 		print("Usage: %s <command>" % (sys.argv[0]))
 		print("")
@@ -46,7 +42,8 @@ if __name__ == "__main__":
 		print("  -b MAC ImmediateAlertLevel <none|mild|high>")
 		sys.exit(1)
 
-	device_path = adapter.FindDevice(options.address)
+	device = bluezutils.find_device(options.address, options.dev_id)
+	device_path = device.object_path
 
 	bus.add_signal_receiver(properties_changed, bus_name="org.bluez",
 			path=device_path,
diff --git a/test/test-thermometer b/test/test-thermometer
index 5a884a3..fdb772f 100755
--- a/test/test-thermometer
+++ b/test/test-thermometer
@@ -58,12 +58,18 @@ if __name__ == "__main__":
 		print("\tEnableIntermediateMeasurement")
 		sys.exit(1)
 
-	adapter = bluezutils.find_adapter(options.adapter)
+	managed_objects = bluezutils.get_managed_objects()
+	adapter = bluezutils.find_adapter_in_objects(managed_objects,
+								options.adapter)
 	adapter_path = adapter.object_path
+
 	thermometer_manager = dbus.Interface(bus.get_object("org.bluez",
 				adapter_path), "org.bluez.ThermometerManager")
 
-	device_path = adapter.FindDevice(options.address)
+	device = bluezutils.find_device_in_objects(managed_objects,
+								options.address,
+								options.adapter)
+	device_path = device.object_path
 
 	bus.add_signal_receiver(properties_changed, bus_name="org.bluez",
 			path=device_path,
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 13/15] adapter: Remove FindDevice method from D-Bus API
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

ObjectManager.GetManagedObjects() returns all devices and their
corresponding properties to any interested client. The device address is
included in the property dictionary and therefore having such a
FindDevice method is an unnecessary duplication.
---
 doc/adapter-api.txt |  7 -------
 src/adapter.c       | 38 --------------------------------------
 2 files changed, 45 deletions(-)

diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 3582793..983a20d 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -64,13 +64,6 @@ Methods		void RequestSession()
 					 org.bluez.Error.Failed
 					 org.bluez.Error.NotAuthorized
 
-		object FindDevice(string address)
-
-			Returns the object path of device for given address.
-
-			Possible Errors: org.bluez.Error.DoesNotExist
-					 org.bluez.Error.InvalidArguments
-
 		void RemoveDevice(object device)
 
 			This removes the remote device object at the given
diff --git a/src/adapter.c b/src/adapter.c
index 0c37ba4..a1c7170 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1521,40 +1521,6 @@ static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg,
 	return NULL;
 }
 
-static DBusMessage *find_device(DBusConnection *conn, DBusMessage *msg,
-								void *data)
-{
-	struct btd_adapter *adapter = data;
-	struct btd_device *device;
-	DBusMessage *reply;
-	const gchar *address;
-	GSList *l;
-	const gchar *dev_path;
-
-	if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
-						DBUS_TYPE_INVALID))
-		return btd_error_invalid_args(msg);
-
-	l = g_slist_find_custom(adapter->devices,
-			address, (GCompareFunc) device_address_cmp);
-	if (!l)
-		return btd_error_does_not_exist(msg);
-
-	device = l->data;
-
-	reply = dbus_message_new_method_return(msg);
-	if (!reply)
-		return NULL;
-
-	dev_path = device_get_path(device);
-
-	dbus_message_append_args(reply,
-				DBUS_TYPE_OBJECT_PATH, &dev_path,
-				DBUS_TYPE_INVALID);
-
-	return reply;
-}
-
 static void agent_removed(struct agent *agent, struct btd_adapter *adapter)
 {
 	mgmt_set_io_capability(adapter->dev_id, IO_CAPABILITY_NOINPUTNOOUTPUT);
@@ -1626,10 +1592,6 @@ static const GDBusMethodTable adapter_methods[] = {
 	{ GDBUS_ASYNC_METHOD("RemoveDevice",
 			GDBUS_ARGS({ "device", "o" }), NULL,
 			remove_device) },
-	{ GDBUS_METHOD("FindDevice",
-			GDBUS_ARGS({ "address", "s" }),
-			GDBUS_ARGS({ "device", "o" }),
-			find_device) },
 	{ GDBUS_METHOD("RegisterAgent",
 			GDBUS_ARGS({ "agent", "o" },
 					{ "capability", "s" }), NULL,
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 14/15] dbus: Rename to org.bluez.Device1
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Trivially add the numbering suffix to org.bluez.Device according to
the proposal for BlueZ 5.
---
 doc/adapter-api.txt    |  2 +-
 doc/device-api.txt     |  2 +-
 profiles/cups/main.c   |  4 ++--
 src/device.h           |  2 +-
 test/bluezutils.py     |  2 +-
 test/list-devices      |  4 ++--
 test/monitor-bluetooth |  2 +-
 test/simple-agent      |  4 ++--
 test/test-attrib       |  2 +-
 test/test-device       | 22 +++++++++++-----------
 10 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index 983a20d..cf8374d 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -107,7 +107,7 @@ Signals		DevicesFound(array{object path, dict values})
 			device discovery.
 
 			The dictionary contains the properties from the
-			org.bluez.Device interface.
+			org.bluez.Device1 interface.
 
 Properties	string Address [readonly]
 
diff --git a/doc/device-api.txt b/doc/device-api.txt
index c1f2361..36ea1d9 100644
--- a/doc/device-api.txt
+++ b/doc/device-api.txt
@@ -11,7 +11,7 @@ Device hierarchy
 ================
 
 Service		org.bluez
-Interface	org.bluez.Device
+Interface	org.bluez.Device1
 Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX
 
 Methods		dict DiscoverServices(string pattern)
diff --git a/profiles/cups/main.c b/profiles/cups/main.c
index 977c057..ae0cc6a 100644
--- a/profiles/cups/main.c
+++ b/profiles/cups/main.c
@@ -133,7 +133,7 @@ static char *device_get_ieee1284_id(const char *adapter, const char *device)
 
 	/* Look for the service handle of the HCRP service */
 	message = dbus_message_new_method_call("org.bluez", device,
-						"org.bluez.Device",
+						"org.bluez.Device1",
 						"DiscoverServices");
 	dbus_message_iter_init_append(message, &iter);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &hcr_print);
@@ -309,7 +309,7 @@ static gboolean device_is_printer(const char *adapter, const char *device_path,
 	gboolean retval;
 
 	message = dbus_message_new_method_call("org.bluez", device_path,
-							"org.bluez.Device",
+							"org.bluez.Device1",
 							"GetProperties");
 
 	reply = dbus_connection_send_with_reply_and_block(conn,
diff --git a/src/device.h b/src/device.h
index 1d7f54f..cb0bb50 100644
--- a/src/device.h
+++ b/src/device.h
@@ -22,7 +22,7 @@
  *
  */
 
-#define DEVICE_INTERFACE	"org.bluez.Device"
+#define DEVICE_INTERFACE	"org.bluez.Device1"
 
 struct btd_device;
 
diff --git a/test/bluezutils.py b/test/bluezutils.py
index 70fe01b..803805b 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -2,7 +2,7 @@ import dbus
 
 SERVICE_NAME = "org.bluez"
 ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
-DEVICE_INTERFACE = SERVICE_NAME + ".Device"
+DEVICE_INTERFACE = SERVICE_NAME + ".Device1"
 
 def get_managed_objects():
 	bus = dbus.SystemBus()
diff --git a/test/list-devices b/test/list-devices
index e8f3f24..7e56239 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -32,7 +32,7 @@ def extract_uuids(uuid_list):
 objects = manager.GetManagedObjects()
 
 all_devices = (str(path) for path, interfaces in objects.iteritems() if
-					"org.bluez.Device" in interfaces.keys())
+					"org.bluez.Device1" in interfaces.keys())
 
 for path, interfaces in objects.iteritems():
 	if "org.bluez.Adapter" not in interfaces.keys():
@@ -55,7 +55,7 @@ for path, interfaces in objects.iteritems():
 		print("    [ " + dev_path + " ]")
 
 		dev = objects[dev_path]
-		properties = dev["org.bluez.Device"]
+		properties = dev["org.bluez.Device1"]
 
 		for key in properties.keys():
 			value = properties[key]
diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index 45cc910..cfda322 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,7 +7,7 @@ import gobject
 import dbus
 import dbus.mainloop.glib
 
-relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device" ]
+relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device1" ]
 
 def property_changed(interface, changed, invalidated, path):
 	iface = interface[interface.rfind(".") + 1:]
diff --git a/test/simple-agent b/test/simple-agent
index 3c51530..15f2a32 100755
--- a/test/simple-agent
+++ b/test/simple-agent
@@ -24,11 +24,11 @@ def ask(prompt):
 def set_trusted(path):
 	props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
-	props.Set("org.bluez.Device", "Trusted", True)
+	props.Set("org.bluez.Device1", "Trusted", True)
 
 def dev_connect(path):
 	dev = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+							"org.bluez.Device1")
 	dev.Connect()
 
 class Rejected(dbus.DBusException):
diff --git a/test/test-attrib b/test/test-attrib
index 2b0b010..aadffaa 100755
--- a/test/test-attrib
+++ b/test/test-attrib
@@ -40,7 +40,7 @@ if (args[0] == "list"):
 	adapter = bluezutils.find_adapter(options.dev_id)
 	for path in adapter.GetProperties()["Devices"]:
 		device = dbus.Interface(bus.get_object("org.bluez", path),
-							"org.bluez.Device")
+							"org.bluez.Device1")
 		devprop = device.GetProperties()
 		print("[ %s ]" % devprop["Address"])
 		for path in devprop["Services"]:
diff --git a/test/test-device b/test/test-device
index d40d656..655eeae 100755
--- a/test/test-device
+++ b/test/test-device
@@ -49,9 +49,9 @@ if (args[0] == "list"):
 	objects = om.GetManagedObjects()
 
 	for path, interfaces in objects.iteritems():
-		if "org.bluez.Device" not in interfaces:
+		if "org.bluez.Device1" not in interfaces:
 			continue
-		properties = interfaces["org.bluez.Device"]
+		properties = interfaces["org.bluez.Device1"]
 		if properties["Adapter"] != adapter_path:
 			continue;
 		print("%s %s" % (properties["Address"], properties["Alias"]))
@@ -142,7 +142,7 @@ if (args[0] == "class"):
 		device = bluezutils.find_device(args[1], options.dev_id)
 		device = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
-		cls = device.Get("org.bluez.Device", "Class")
+		cls = device.Get("org.bluez.Device1", "Class")
 		print("0x%06x" % cls)
 	sys.exit(0)
 
@@ -154,7 +154,7 @@ if (args[0] == "name"):
 		path = device.object_path
 		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
-		name = props.Get("org.bluez.Device", "Name")
+		name = props.Get("org.bluez.Device1", "Name")
 		print(name)
 	sys.exit(0)
 
@@ -167,10 +167,10 @@ if (args[0] == "alias"):
 		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
-			alias = device.Get("org.bluez.Device", "Alias")
+			alias = device.Get("org.bluez.Device1", "Alias")
 			print(alias)
 		else:
-			device.Set("org.bluez.Device", "Alias", args[2])
+			device.Set("org.bluez.Device1", "Alias", args[2])
 	sys.exit(0)
 
 if (args[0] == "trusted"):
@@ -182,7 +182,7 @@ if (args[0] == "trusted"):
 		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
-			trusted = device.Get("org.bluez.Device", "Trusted")
+			trusted = device.Get("org.bluez.Device1", "Trusted")
 			print(trusted)
 		else:
 			if (args[2] == "yes"):
@@ -191,7 +191,7 @@ if (args[0] == "trusted"):
 				value = dbus.Boolean(0)
 			else:
 				value = dbus.Boolean(args[2])
-			device.Set("org.bluez.Device", "Trusted", value)
+			device.Set("org.bluez.Device1", "Trusted", value)
 	sys.exit(0)
 
 if (args[0] == "blocked"):
@@ -203,7 +203,7 @@ if (args[0] == "blocked"):
 		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
 		if (len(args) < 3):
-			blocked = device.Get("org.bluez.Device", "Blocked")
+			blocked = device.Get("org.bluez.Device1", "Blocked")
 			print(blocked)
 		else:
 			if (args[2] == "yes"):
@@ -212,7 +212,7 @@ if (args[0] == "blocked"):
 				value = dbus.Boolean(0)
 			else:
 				value = dbus.Boolean(args[2])
-			device.Set("org.bluez.Device", "Blocked", value)
+			device.Set("org.bluez.Device1", "Blocked", value)
 	sys.exit(0)
 
 if (args[0] == "services"):
@@ -223,7 +223,7 @@ if (args[0] == "services"):
 		path = device.object_path
 		props = dbus.Interface(bus.get_object("org.bluez", path),
 					"org.freedesktop.DBus.Properties")
-		services = device.Get("org.bluez.Device", "Services")
+		services = device.Get("org.bluez.Device1", "Services")
 		for path in services:
 			print(path)
 	sys.exit(0)
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v3 15/15] dbus: Rename to org.bluez.Adapter1
From: Mikel Astiz @ 2012-12-05 12:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Trivially add the numbering suffix to org.bluez.Adapter according to
the proposal for BlueZ 5.
---
 doc/adapter-api.txt    |  2 +-
 doc/oob-api.txt        |  2 +-
 profiles/cups/main.c   | 20 ++++++++++----------
 src/adapter.h          |  2 +-
 test/agent.c           |  7 ++++---
 test/bluezutils.py     |  2 +-
 test/list-devices      |  4 ++--
 test/monitor-bluetooth |  2 +-
 test/test-adapter      | 32 ++++++++++++++++----------------
 test/test-discovery    |  4 ++--
 test/test-health       |  4 ++--
 test/test-health-sink  |  4 ++--
 test/test-manager      |  4 ++--
 13 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index cf8374d..5d2ea65 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -11,7 +11,7 @@ Adapter hierarchy
 =================
 
 Service		org.bluez
-Interface	org.bluez.Adapter
+Interface	org.bluez.Adapter1
 Object path	[variable prefix]/{hci0,hci1,...}
 
 Methods		void RequestSession()
diff --git a/doc/oob-api.txt b/doc/oob-api.txt
index 7f73db4..d54f612 100644
--- a/doc/oob-api.txt
+++ b/doc/oob-api.txt
@@ -28,7 +28,7 @@ Methods		dict ReadLocalData()
 					16 bytes randomizer blob.
 
 			Other data that can be transmitted via OOB mechanism
-			can be obtained from org.bluez.Adapter interface.
+			can be obtained from org.bluez.Adapter1 interface.
 
 			Note: This method will generate and return new data
 			every time it is called. Data received in previous
diff --git a/profiles/cups/main.c b/profiles/cups/main.c
index ae0cc6a..ef3a176 100644
--- a/profiles/cups/main.c
+++ b/profiles/cups/main.c
@@ -342,7 +342,7 @@ static void remote_device_found(const char *adapter, const char *bdaddr,
 	assert(adapter != NULL);
 
 	message = dbus_message_new_method_call("org.bluez", adapter,
-							"org.bluez.Adapter",
+							"org.bluez.Adapter1",
 							"FindDevice");
 	dbus_message_iter_init_append(message, &iter);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -357,7 +357,7 @@ static void remote_device_found(const char *adapter, const char *bdaddr,
 
 	if (!reply) {
 		message = dbus_message_new_method_call("org.bluez", adapter,
-							"org.bluez.Adapter",
+							"org.bluez.Adapter1",
 							"CreateDevice");
 		dbus_message_iter_init_append(message, &iter);
 		dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -417,7 +417,7 @@ static gboolean list_known_printers(const char *adapter)
 	DBusMessage *message, *reply;
 
 	message = dbus_message_new_method_call("org.bluez", adapter,
-						"org.bluez.Adapter",
+						"org.bluez.Adapter1",
 						"ListDevices");
 	if (message == NULL)
 		return FALSE;
@@ -467,7 +467,7 @@ static gboolean list_known_printers(const char *adapter)
 static DBusHandlerResult filter_func(DBusConnection *connection,
 					DBusMessage *message, void *user_data)
 {
-	if (dbus_message_is_signal(message, "org.bluez.Adapter",
+	if (dbus_message_is_signal(message, "org.bluez.Adapter1",
 						"DeviceFound")) {
 		const char *adapter, *bdaddr;
 		char *name;
@@ -481,7 +481,7 @@ static DBusHandlerResult filter_func(DBusConnection *connection,
 		if (parse_device_properties(&iter, &name, NULL))
 			remote_device_found(adapter, bdaddr, name);
 		g_free (name);
-	} else if (dbus_message_is_signal(message, "org.bluez.Adapter",
+	} else if (dbus_message_is_signal(message, "org.bluez.Adapter1",
 						"DeviceDisappeared")) {
 		const char *bdaddr;
 
@@ -489,7 +489,7 @@ static DBusHandlerResult filter_func(DBusConnection *connection,
 					DBUS_TYPE_STRING, &bdaddr,
 					DBUS_TYPE_INVALID);
 		remote_device_disappeared(bdaddr);
-	} else if (dbus_message_is_signal(message, "org.bluez.Adapter",
+	} else if (dbus_message_is_signal(message, "org.bluez.Adapter1",
 						"PropertyChanged")) {
 		DBusMessageIter iter, value_iter;
 		const char *name;
@@ -582,7 +582,7 @@ static gboolean list_printers(void)
 
 #define MATCH_FORMAT				\
 	"type='signal',"			\
-	"interface='org.bluez.Adapter',"	\
+	"interface='org.bluez.Adapter1',"	\
 	"sender='org.bluez',"			\
 	"path='%s'"
 
@@ -595,7 +595,7 @@ static gboolean list_printers(void)
 
 	doing_disco = TRUE;
 	message = dbus_message_new_method_call("org.bluez", adapter,
-					"org.bluez.Adapter",
+					"org.bluez.Adapter1",
 					"StartDiscovery");
 
 	if (!dbus_connection_send_with_reply(conn, message, NULL, -1)) {
@@ -649,7 +649,7 @@ static gboolean print_ieee1284(const char *bdaddr)
 	}
 
 	message = dbus_message_new_method_call("org.bluez", adapter,
-			"org.bluez.Adapter",
+			"org.bluez.Adapter1",
 			"FindDevice");
 	dbus_message_iter_init_append(message, &iter);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);
@@ -664,7 +664,7 @@ static gboolean print_ieee1284(const char *bdaddr)
 
 	if (!reply) {
 		message = dbus_message_new_method_call("org.bluez", adapter,
-				"org.bluez.Adapter",
+				"org.bluez.Adapter1",
 				"CreateDevice");
 		dbus_message_iter_init_append(message, &iter);
 		dbus_message_iter_append_basic(&iter,
diff --git a/src/adapter.h b/src/adapter.h
index e131e6d..0ec0b8f 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -30,7 +30,7 @@
 #include <glib.h>
 #include <stdbool.h>
 
-#define ADAPTER_INTERFACE	"org.bluez.Adapter"
+#define ADAPTER_INTERFACE	"org.bluez.Adapter1"
 
 #define MODE_OFF		0x00
 #define MODE_CONNECTABLE	0x01
diff --git a/test/agent.c b/test/agent.c
index 1713ec3..85dfb22 100644
--- a/test/agent.c
+++ b/test/agent.c
@@ -346,7 +346,7 @@ static int register_agent(DBusConnection *conn, const char *adapter_path,
 	DBusError err;
 
 	msg = dbus_message_new_method_call("org.bluez", adapter_path,
-					"org.bluez.Adapter", "RegisterAgent");
+					"org.bluez.Adapter1", "RegisterAgent");
 	if (!msg) {
 		fprintf(stderr, "Can't allocate new method call\n");
 		return -1;
@@ -385,7 +385,8 @@ static int unregister_agent(DBusConnection *conn, const char *adapter_path,
 	DBusError err;
 
 	msg = dbus_message_new_method_call("org.bluez", adapter_path,
-					"org.bluez.Adapter", "UnregisterAgent");
+							"org.bluez.Adapter1",
+							"UnregisterAgent");
 	if (!msg) {
 		fprintf(stderr, "Can't allocate new method call\n");
 		return -1;
@@ -435,7 +436,7 @@ static int create_paired_device(DBusConnection *conn, const char *adapter_path,
 	DBusPendingCall *pending;
 
 	msg = dbus_message_new_method_call("org.bluez", adapter_path,
-						"org.bluez.Adapter",
+						"org.bluez.Adapter1",
 						"CreatePairedDevice");
 	if (!msg) {
 		fprintf(stderr, "Can't allocate new method call\n");
diff --git a/test/bluezutils.py b/test/bluezutils.py
index 803805b..d0c4773 100644
--- a/test/bluezutils.py
+++ b/test/bluezutils.py
@@ -1,7 +1,7 @@
 import dbus
 
 SERVICE_NAME = "org.bluez"
-ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
+ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter1"
 DEVICE_INTERFACE = SERVICE_NAME + ".Device1"
 
 def get_managed_objects():
diff --git a/test/list-devices b/test/list-devices
index 7e56239..0aac217 100755
--- a/test/list-devices
+++ b/test/list-devices
@@ -35,12 +35,12 @@ all_devices = (str(path) for path, interfaces in objects.iteritems() if
 					"org.bluez.Device1" in interfaces.keys())
 
 for path, interfaces in objects.iteritems():
-	if "org.bluez.Adapter" not in interfaces.keys():
+	if "org.bluez.Adapter1" not in interfaces.keys():
 		continue
 
 	print("[ " + path + " ]")
 
-	properties = interfaces["org.bluez.Adapter"]
+	properties = interfaces["org.bluez.Adapter1"]
 	for key in properties.keys():
 		value = properties[key]
 		if (key == "UUIDs"):
diff --git a/test/monitor-bluetooth b/test/monitor-bluetooth
index cfda322..bc5ddaf 100755
--- a/test/monitor-bluetooth
+++ b/test/monitor-bluetooth
@@ -7,7 +7,7 @@ import gobject
 import dbus
 import dbus.mainloop.glib
 
-relevant_ifaces = [ "org.bluez.Adapter", "org.bluez.Device1" ]
+relevant_ifaces = [ "org.bluez.Adapter1", "org.bluez.Device1" ]
 
 def property_changed(interface, changed, invalidated, path):
 	iface = interface[interface.rfind(".") + 1:]
diff --git a/test/test-adapter b/test/test-adapter
index dc66aa6..95e6662 100755
--- a/test/test-adapter
+++ b/test/test-adapter
@@ -37,16 +37,16 @@ if (len(args) < 1):
 	sys.exit(1)
 
 if (args[0] == "address"):
-	addr = adapter.Get("org.bluez.Adapter", "Address")
+	addr = adapter.Get("org.bluez.Adapter1", "Address")
 	print(addr)
 	sys.exit(0)
 
 if (args[0] == "name"):
 	if (len(args) < 2):
-		name = adapter.Get("org.bluez.Adapter", "Name")
+		name = adapter.Get("org.bluez.Adapter1", "Name")
 		print(name)
 	else:
-		adapter.Set("org.bluez.Adapter", "Name", args[1])
+		adapter.Set("org.bluez.Adapter1", "Name", args[1])
 	sys.exit(0)
 
 if (args[0] == "list"):
@@ -55,12 +55,12 @@ if (args[0] == "list"):
 					"org.freedesktop.DBus.ObjectManager")
 		objects = om.GetManagedObjects()
 		for path, interfaces in objects.iteritems():
-			if "org.bluez.Adapter" not in interfaces:
+			if "org.bluez.Adapter1" not in interfaces:
 				continue
 
 			print(" [ %s ]" % (path))
 
-			props = interfaces["org.bluez.Adapter"]
+			props = interfaces["org.bluez.Adapter1"]
 
 			for (key, value) in props.items():
 				if (key == "Class"):
@@ -72,7 +72,7 @@ if (args[0] == "list"):
 
 if (args[0] == "powered"):
 	if (len(args) < 2):
-		powered = adapter.Get("org.bluez.Adapter", "Powered")
+		powered = adapter.Get("org.bluez.Adapter1", "Powered")
 		print(powered)
 	else:
 		if (args[1] == "on"):
@@ -81,12 +81,12 @@ if (args[0] == "powered"):
 			value = dbus.Boolean(0)
 		else:
 			value = dbus.Boolean(args[1])
-		adapter.Set("org.bluez.Adapter", "Powered", value)
+		adapter.Set("org.bluez.Adapter1", "Powered", value)
 	sys.exit(0)
 
 if (args[0] == "pairable"):
 	if (len(args) < 2):
-		pairable = adapter.Get("org.bluez.Adapter", "Pairable")
+		pairable = adapter.Get("org.bluez.Adapter1", "Pairable")
 		print(pairable)
 	else:
 		if (args[1] == "on"):
@@ -95,21 +95,21 @@ if (args[0] == "pairable"):
 			value = dbus.Boolean(0)
 		else:
 			value = dbus.Boolean(args[1])
-		adapter.Set("org.bluez.Adapter", "Pairable", value)
+		adapter.Set("org.bluez.Adapter1", "Pairable", value)
 	sys.exit(0)
 
 if (args[0] == "pairabletimeout"):
 	if (len(args) < 2):
-		pt = adapter.Get("org.bluez.Adapter", "PairableTimeout")
+		pt = adapter.Get("org.bluez.Adapter1", "PairableTimeout")
 		print(pt)
 	else:
 		timeout = dbus.UInt32(args[1])
-		adapter.Set("org.bluez.Adapter", "PairableTimeout", timeout)
+		adapter.Set("org.bluez.Adapter1", "PairableTimeout", timeout)
 	sys.exit(0)
 
 if (args[0] == "discoverable"):
 	if (len(args) < 2):
-		discoverable = adapter.Get("org.bluez.Adapter", "Discoverable")
+		discoverable = adapter.Get("org.bluez.Adapter1", "Discoverable")
 		print(discoverable)
 	else:
 		if (args[1] == "on"):
@@ -118,20 +118,20 @@ if (args[0] == "discoverable"):
 			value = dbus.Boolean(0)
 		else:
 			value = dbus.Boolean(args[1])
-		adapter.Set("org.bluez.Adapter", "Discoverable", value)
+		adapter.Set("org.bluez.Adapter1", "Discoverable", value)
 	sys.exit(0)
 
 if (args[0] == "discoverabletimeout"):
 	if (len(args) < 2):
-		dt = adapter.Get("org.bluez.Adapter", "DiscoverableTimeout")
+		dt = adapter.Get("org.bluez.Adapter1", "DiscoverableTimeout")
 		print(dt)
 	else:
 		to = dbus.UInt32(args[1])
-		adapter.Set("org.bluez.Adapter", "DiscoverableTimeout", to)
+		adapter.Set("org.bluez.Adapter1", "DiscoverableTimeout", to)
 	sys.exit(0)
 
 if (args[0] == "discovering"):
-	discovering = adapter.Get("org.bluez.Adapter", "Discovering")
+	discovering = adapter.Get("org.bluez.Adapter1", "Discovering")
 	print(discovering)
 	sys.exit(0)
 
diff --git a/test/test-discovery b/test/test-discovery
index 0f73fe4..0004f52 100755
--- a/test/test-discovery
+++ b/test/test-discovery
@@ -106,11 +106,11 @@ if __name__ == '__main__':
 		compact = True;
 
 	bus.add_signal_receiver(devices_found,
-					dbus_interface = "org.bluez.Adapter",
+					dbus_interface = "org.bluez.Adapter1",
 					signal_name = "DevicesFound")
 
 	bus.add_signal_receiver(property_changed,
-					dbus_interface = "org.bluez.Adapter",
+					dbus_interface = "org.bluez.Adapter1",
 					signal_name = "PropertyChanged")
 
 	adapter.StartDiscovery()
diff --git a/test/test-health b/test/test-health
index 9d2f62f..e0f95a6 100755
--- a/test/test-health
+++ b/test/test-health
@@ -138,7 +138,7 @@ objects = manager.GetManagedObjects()
 adapters = []
 
 for path, ifaces in objects.iteritems():
-	if ifaces.has_key("org.bluez.Adapter"):
+	if ifaces.has_key("org.bluez.Adapter1"):
 		adapters.append(path)
 
 i = 1
@@ -160,7 +160,7 @@ while select == None:
 		sys.exit()
 
 adapter =  dbus.Interface(bus.get_object("org.bluez", select),
-						"org.bluez.Adapter")
+						"org.bluez.Adapter1")
 
 devices = adapter.GetProperties()["Devices"]
 
diff --git a/test/test-health-sink b/test/test-health-sink
index a886d85..a14f16b 100755
--- a/test/test-health-sink
+++ b/test/test-health-sink
@@ -28,7 +28,7 @@ objects = manager.GetManagedObjects()
 adapters = []
 
 for path, ifaces in objects.iteritems():
-	if ifaces.has_key("org.bluez.Adapter"):
+	if ifaces.has_key("org.bluez.Adapter1"):
 		adapters.append(path)
 
 i = 1
@@ -50,7 +50,7 @@ while select == None:
 		sys.exit()
 
 adapter =  dbus.Interface(bus.get_object("org.bluez", select),
-						"org.bluez.Adapter")
+						"org.bluez.Adapter1")
 
 devices = adapter.GetProperties()["Devices"]
 
diff --git a/test/test-manager b/test/test-manager
index c5e8007..1e3882f 100755
--- a/test/test-manager
+++ b/test/test-manager
@@ -9,11 +9,11 @@ import dbus.mainloop.glib
 import bluezutils
 
 def interfaces_added(path, interfaces):
-	if interfaces.get("org.bluez.Adapter") != None:
+	if interfaces.get("org.bluez.Adapter1") != None:
 		print("Adapter with path %s added" % (path))
 
 def interfaces_removed(path, interfaces):
-	if "org.bluez.Adapter" in interfaces:
+	if "org.bluez.Adapter1" in interfaces:
 		print("Adapter with path %s removed" % (path))
 
 if __name__ == "__main__":
-- 
1.7.11.7


^ permalink raw reply related

* Re: Cybertan MM230-M issue
From: Yegor Yefremov @ 2012-12-05 13:36 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <CAGm1_kva5xN1K0aDwvhaLBqW0qNCtdpQxp-ipzVRpLUD7XBVYw@mail.gmail.com>

On Fri, Nov 2, 2012 at 10:55 AM, Yegor Yefremov
<yegorslists@googlemail.com> wrote:
> I'm using this WLAN-BT-combo card with linux 3.2 and TI am335x based
> board. WLAN (88W8686/B1 (Marvell) ) is working, but Bluetooth
> (BC4ROM/21e (CSR)) only partly.
>
> I can connect to the card via hciattach ttyO5 bcsp and then I can
> bring it up and enable pscan. But hcitool scan delivers nothing.
>
> I get following values via bccmd:
>
> Chip revision: 0x0030 (BC4-ROM)
> Build name: odj_4hci_rom_bt2.0_21e_0604241634_encr128 2006-04-24
>
> bccmd -t BCSP -d /dev/ttyO5 -b 115200 enabletx returns with error:
> Can't execute command: No such device or address (6)
>
> Any idea how to get the card working?

When I execute hciattach I get following message:

root@arm:~# hciattach /dev/ttyO5 bcsp
Device setup complete
Bluetooth: Out-of-order packet arrived, got 1 expected 0

Is there any real tutorial for this chip? I found some related
threads, but would like to see the picture in whole or to get some
tips on how to debug my issue.

http://projects.goldelico.com/p/gta04-kernel/page/Wireless/
http://gumstix.8.n6.nabble.com/Bluetooth-on-2-6-39-pm-kernel-td4641950.html
http://permalink.gmane.org/gmane.linux.bluez.user/13460

Yegor

^ permalink raw reply

* Re: [PATCH] adapter: Always write address type when converting to new storage
From: Johan Hedberg @ 2012-12-05 14:28 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1354710775-2670-1-git-send-email-szymon.janc@tieto.com>

Hi Szymon,

On Wed, Dec 05, 2012, Szymon Janc wrote:
> When address type is not present in legacy storage assume BDADDR_BREDR
> type and store it.
> 
> This also fix following compilation error on ARM:
> 
>   CC     src/bluetoothd-adapter.o
> src/adapter.c: In function ‘convert_entry’:
> src/adapter.c:2710:2: error: comparison is always true due to limited
> 	range of data type [-Werror=type-limits]
> cc1: all warnings being treated as errors
> make[1]: *** [src/bluetoothd-adapter.o] Error 1
> ---
>  src/adapter.c |    7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)

Applied. Thanks.

Johan

^ permalink raw reply

* Re: [PATCH v3 00/15] Manager/Adapter transition to ObjectManager
From: Johan Hedberg @ 2012-12-05 14:44 UTC (permalink / raw)
  To: Mikel Astiz; +Cc: linux-bluetooth, Mikel Astiz
In-Reply-To: <1354711902-16390-1-git-send-email-mikel.astiz.oss@gmail.com>

Hi Mikel,

On Wed, Dec 05, 2012, Mikel Astiz wrote:
> Main changes from v2 include the suggestions from Lizardo:
> - Python style improved.
> - Utility library renamed to bluezutils.py to avoid collisions in distros.
> - Recently added test-cyclingspeed also considered in the patchset.
> 
> From previous cover-letter:
> 
> This proposal completely removes org.bluez.Manager, with two main consequences:
> 1. Clients have a harder time to find adapters. Therefore, some helper
> function have been added to be used by test scripts.
> 2. The concept of "default adapter" disappears.
> 
> All test scripts have been updated here but not all of them were
> tested, so apoligies if this breaks your script (some of them are
> already broken, by the way).
> 
> Regarding the testing code written in C, they haven't been updated.
> The idea is to address these once the python part has been agreed.
> 
> Mikel Astiz (15):
>   cups: Remove unnecessary code
>   test: Add utility library for python scripts
>   test: Avoid using DefaultAdapter()
>   test: Update monitor script to ObjectManager
>   test: Update test-manager script to ObjectManager
>   test: Use ObjectManager instead of Adapters property
>   dbus: Remove org.bluez.Manager
>   test: Use ObjectManager instead of Devices property
>   test: Add helper function to find devices
>   adapter: Remove DeviceCreated/DeviceRemoved signals
>   adapter: Remove redundant Devices property
>   test: Avoid using Adapter.FindDevice()
>   adapter: Remove FindDevice method from D-Bus API
>   dbus: Rename to org.bluez.Device1
>   dbus: Rename to org.bluez.Adapter1

All patches in this set have been applied. Thanks.

Johan

^ permalink raw reply

* Re: [PATCH BlueZ 1/7] build-sys: Define _GNU_SOURCE in config.h
From: Johan Hedberg @ 2012-12-05 15:24 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: linux-bluetooth, Lucas De Marchi
In-Reply-To: <1354706575-4718-1-git-send-email-lucas.demarchi@profusion.mobi>

Hi Lucas,

On Wed, Dec 05, 2012, Lucas De Marchi wrote:
> Instead of defining _GNU_SOURCE in each source file (and potentially
> forgetting in some), tell the build system we use extensions and let it
> define _GNU_SOURCE in config.h.
> ---
>  configure.ac                | 1 +
>  monitor/btsnoop.c           | 1 -
>  monitor/sdp.c               | 1 -
>  profiles/input/hog_device.c | 1 -
>  src/adapter.c               | 1 -
>  src/mgmt.c                  | 1 -
>  src/sdp-xml.c               | 1 -
>  src/textfile.c              | 1 -
>  tools/btsnoop.c             | 1 -
>  tools/ciptool.c             | 1 -
>  tools/hciattach.c           | 1 -
>  tools/rfcomm.c              | 1 -
>  12 files changed, 1 insertion(+), 11 deletions(-)

All patches in this set have been applied. Thanks!

Johan

^ permalink raw reply

* Re: [PATCH v3] hciconfig: Remove putkey command
From: Johan Hedberg @ 2012-12-05 15:25 UTC (permalink / raw)
  To: Frédéric Danis; +Cc: linux-bluetooth
In-Reply-To: <1354707834-30972-1-git-send-email-frederic.danis@linux.intel.com>

Hi Frederic,

On Wed, Dec 05, 2012, Frédéric Danis wrote:
> With new storage architecture legacy storage "linkkeys"
> file doesn't exist anymore.
> ---
>  tools/hciconfig.8 |    5 -----
>  tools/hciconfig.c |   64 -----------------------------------------------------
>  2 files changed, 69 deletions(-)

Applied. Thanks.

Johan

^ permalink raw reply

* [PATCH v1 0/6] Remove access rights from MediaTransport
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

v1 proposes TryAcquire() instead of Acquire(TRUE), as suggested by Johan.

>From original cover-letter:

The accessrights used in the Acquire() method are not very useful and can thus be removed. This simplifies both the D-Bus API and the internal implementation significantly.

Mikel Astiz (6):
  media: Remove transport access type from D-Bus API
  media: Remove internal transport locks
  media: Remove transport owner list
  media: Add MediaTransport.TryAcquire()
  media: Trivial style fix
  media: Add version suffix to all media interfaces

 doc/audio-telephony-design.txt |   4 +-
 doc/media-api.txt              |  46 +++----
 profiles/audio/media.c         |   8 +-
 profiles/audio/player.c        |   2 +-
 profiles/audio/transport.c     | 264 ++++++++++++-----------------------------
 test/mpris-player.c            |  14 +--
 6 files changed, 108 insertions(+), 230 deletions(-)

-- 
1.7.11.7


^ permalink raw reply

* [PATCH v1 1/6] media: Remove transport access type from D-Bus API
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

There is no known use-case making use of these access types and
therefore the Media API can be simplified.

>From now on, the transport will always be acquired with read and write
access rights.
---
 doc/media-api.txt          | 23 ++---------------------
 profiles/audio/transport.c | 47 ++++++----------------------------------------
 2 files changed, 8 insertions(+), 62 deletions(-)

diff --git a/doc/media-api.txt b/doc/media-api.txt
index cf69efa..b15ad61 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -261,31 +261,12 @@ Service		org.bluez
 Interface	org.bluez.MediaTransport
 Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/fdX
 
-Methods		fd, uint16, uint16 Acquire(string accesstype)
+Methods		fd, uint16, uint16 Acquire()
 
 			Acquire transport file descriptor and the MTU for read
 			and write respectively.
 
-			possible accesstype:
-
-				"r" : Read only access
-
-				"w" : Write only access
-
-				"rw": Read and write access
-
-			The accesstype string can also be combined with a "?"
-			suffix, which will make the request optional. This
-			typically means the transport will only be acquired if
-			it is already available (remote-initiated), but
-			otherwise no request will be sent to the remote side.
-			In this last case the function will fail. Note that,
-			due to compatibility issues with older versions of
-			BlueZ, clients are encouraged to use exactly the same
-			accesstype for Release(), matching the string provided
-			to Acquire().
-
-		void Release(string accesstype)
+		void Release()
 
 			Releases file descriptor.
 
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 610aca3..a76481c 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -127,19 +127,6 @@ static const char *lock2str(transport_lock_t lock)
 		return "rw";
 }
 
-static transport_lock_t str2lock(const char *str)
-{
-	transport_lock_t lock = 0;
-
-	if (g_strstr_len(str, -1, "r") != NULL)
-		lock |= TRANSPORT_LOCK_READ;
-
-	if (g_strstr_len(str, -1, "w") != NULL)
-		lock |= TRANSPORT_LOCK_WRITE;
-
-	return lock;
-}
-
 static const char *state2str(transport_state_t state)
 {
 	switch (state) {
@@ -532,14 +519,9 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 	struct media_transport *transport = data;
 	struct media_owner *owner;
 	struct media_request *req;
-	const char *accesstype, *sender;
-	transport_lock_t lock;
+	const char *sender;
 	guint id;
-
-	if (!dbus_message_get_args(msg, NULL,
-				DBUS_TYPE_STRING, &accesstype,
-				DBUS_TYPE_INVALID))
-		return btd_error_invalid_args(msg);
+	transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
 
 	sender = dbus_message_get_sender(msg);
 
@@ -547,14 +529,6 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 	if (owner != NULL)
 		return btd_error_not_authorized(msg);
 
-	lock = str2lock(accesstype);
-	if (lock == 0)
-		return btd_error_invalid_args(msg);
-
-	if (transport->state != TRANSPORT_STATE_PENDING &&
-				g_strstr_len(accesstype, -1, "?") != NULL)
-		return btd_error_failed(msg, "Transport not playing");
-
 	if (media_transport_acquire(transport, lock) == FALSE)
 		return btd_error_not_authorized(msg);
 
@@ -578,14 +552,9 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 {
 	struct media_transport *transport = data;
 	struct media_owner *owner;
-	const char *accesstype, *sender;
-	transport_lock_t lock;
+	const char *sender;
 	struct media_request *req;
-
-	if (!dbus_message_get_args(msg, NULL,
-				DBUS_TYPE_STRING, &accesstype,
-				DBUS_TYPE_INVALID))
-		return btd_error_invalid_args(msg);
+	transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
 
 	sender = dbus_message_get_sender(msg);
 
@@ -593,8 +562,6 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 	if (owner == NULL)
 		return btd_error_not_authorized(msg);
 
-	lock = str2lock(accesstype);
-
 	if (owner->lock == lock) {
 		guint id;
 
@@ -764,13 +731,11 @@ static void set_volume(const GDBusPropertyTable *property,
 
 static const GDBusMethodTable transport_methods[] = {
 	{ GDBUS_ASYNC_METHOD("Acquire",
-			GDBUS_ARGS({ "access_type", "s" }),
+			NULL,
 			GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
 							{ "mtu_w", "q" } ),
 			acquire) },
-	{ GDBUS_ASYNC_METHOD("Release",
-			GDBUS_ARGS({ "access_type", "s" }), NULL,
-			release ) },
+	{ GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) },
 	{ },
 };
 
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v1 2/6] media: Remove internal transport locks
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

The internal transport_lock_t is not needed any more since transports
are now always acquired with read and write permissions.
---
 profiles/audio/transport.c | 130 ++++++++++-----------------------------------
 1 file changed, 28 insertions(+), 102 deletions(-)

diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index a76481c..4bb54f6 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -51,11 +51,6 @@
 #define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport"
 
 typedef enum {
-	TRANSPORT_LOCK_READ = 1,
-	TRANSPORT_LOCK_WRITE = 1 << 1,
-} transport_lock_t;
-
-typedef enum {
 	TRANSPORT_STATE_IDLE,		/* Not acquired and suspended */
 	TRANSPORT_STATE_PENDING,	/* Playing but not acquired */
 	TRANSPORT_STATE_REQUESTING,	/* Acquire in progress */
@@ -80,7 +75,6 @@ struct media_owner {
 	struct media_transport	*transport;
 	struct media_request	*pending;
 	char			*name;
-	transport_lock_t	lock;
 	guint			watch;
 };
 
@@ -100,7 +94,6 @@ struct media_transport {
 	int			fd;		/* Transport file descriptor */
 	uint16_t		imtu;		/* Transport input mtu */
 	uint16_t		omtu;		/* Transport output mtu */
-	transport_lock_t	lock;
 	transport_state_t	state;
 	guint			hs_watch;
 	guint			source_watch;
@@ -115,18 +108,6 @@ struct media_transport {
 	void			*data;
 };
 
-static const char *lock2str(transport_lock_t lock)
-{
-	if (lock == 0)
-		return "";
-	else if (lock == TRANSPORT_LOCK_READ)
-		return "r";
-	else if (lock == TRANSPORT_LOCK_WRITE)
-		return "w";
-	else
-		return "rw";
-}
-
 static const char *state2str(transport_state_t state)
 {
 	switch (state) {
@@ -229,20 +210,6 @@ static void media_request_reply(struct media_request *req, int err)
 	g_dbus_send_message(btd_get_dbus_connection(), reply);
 }
 
-static gboolean media_transport_release(struct media_transport *transport,
-							transport_lock_t lock)
-{
-	transport->lock &= ~lock;
-
-	if (lock & TRANSPORT_LOCK_READ)
-		DBG("Transport %s: read lock released", transport->path);
-
-	if (lock & TRANSPORT_LOCK_WRITE)
-		DBG("Transport %s: write lock released", transport->path);
-
-	return TRUE;
-}
-
 static void media_owner_remove(struct media_owner *owner)
 {
 	struct media_transport *transport = owner->transport;
@@ -279,8 +246,6 @@ static void media_transport_remove(struct media_transport *transport,
 {
 	DBG("Transport %s Owner %s", transport->path, owner->name);
 
-	media_transport_release(transport, owner->lock);
-
 	/* Reply if owner has a pending request */
 	if (owner->pending)
 		media_request_reply(owner->pending, EIO);
@@ -339,12 +304,6 @@ static void a2dp_resume_complete(struct avdtp *session,
 
 	media_transport_set_fd(transport, fd, imtu, omtu);
 
-	if ((owner->lock & TRANSPORT_LOCK_READ) == 0)
-		imtu = 0;
-
-	if ((owner->lock & TRANSPORT_LOCK_WRITE) == 0)
-		omtu = 0;
-
 	ret = g_dbus_send_reply(btd_get_dbus_connection(), req->msg,
 						DBUS_TYPE_UNIX_FD, &fd,
 						DBUS_TYPE_UINT16, &imtu,
@@ -443,24 +402,6 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
 	media_transport_remove(owner->transport, owner);
 }
 
-static gboolean media_transport_acquire(struct media_transport *transport,
-							transport_lock_t lock)
-{
-	if (transport->lock & lock)
-		return FALSE;
-
-	transport->lock |= lock;
-
-	if (lock & TRANSPORT_LOCK_READ)
-		DBG("Transport %s: read lock acquired", transport->path);
-
-	if (lock & TRANSPORT_LOCK_WRITE)
-		DBG("Transport %s: write lock acquired", transport->path);
-
-
-	return TRUE;
-}
-
 static void media_transport_add(struct media_transport *transport,
 					struct media_owner *owner)
 {
@@ -473,17 +414,14 @@ static void media_transport_add(struct media_transport *transport,
 							owner, NULL);
 }
 
-static struct media_owner *media_owner_create(DBusMessage *msg,
-						transport_lock_t lock)
+static struct media_owner *media_owner_create(DBusMessage *msg)
 {
 	struct media_owner *owner;
 
 	owner = g_new0(struct media_owner, 1);
 	owner->name = g_strdup(dbus_message_get_sender(msg));
-	owner->lock = lock;
 
-	DBG("Owner created: sender=%s accesstype=%s", owner->name,
-							lock2str(lock));
+	DBG("Owner created: sender=%s", owner->name);
 
 	return owner;
 }
@@ -521,7 +459,6 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 	struct media_request *req;
 	const char *sender;
 	guint id;
-	transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
 
 	sender = dbus_message_get_sender(msg);
 
@@ -529,13 +466,12 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 	if (owner != NULL)
 		return btd_error_not_authorized(msg);
 
-	if (media_transport_acquire(transport, lock) == FALSE)
+	if (transport->state >= TRANSPORT_STATE_REQUESTING)
 		return btd_error_not_authorized(msg);
 
-	owner = media_owner_create(msg, lock);
+	owner = media_owner_create(msg);
 	id = transport->resume(transport, owner);
 	if (id == 0) {
-		media_transport_release(transport, lock);
 		media_owner_free(owner);
 		return btd_error_not_authorized(msg);
 	}
@@ -554,7 +490,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 	struct media_owner *owner;
 	const char *sender;
 	struct media_request *req;
-	transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
+	guint id;
 
 	sender = dbus_message_get_sender(msg);
 
@@ -562,45 +498,35 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 	if (owner == NULL)
 		return btd_error_not_authorized(msg);
 
-	if (owner->lock == lock) {
-		guint id;
-
-		/* Not the last owner, no need to suspend */
-		if (g_slist_length(transport->owners) != 1) {
-			media_transport_remove(transport, owner);
-			return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-		}
-
-		if (owner->pending) {
-			const char *member;
+	/* Not the last owner, no need to suspend */
+	if (g_slist_length(transport->owners) != 1) {
+		media_transport_remove(transport, owner);
+		return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+	}
 
-			member = dbus_message_get_member(owner->pending->msg);
-			/* Cancel Acquire request if that exist */
-			if (g_str_equal(member, "Acquire"))
-				media_owner_remove(owner);
-			else
-				return btd_error_in_progress(msg);
-		}
+	if (owner->pending) {
+		const char *member;
 
-		transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
+		member = dbus_message_get_member(owner->pending->msg);
+		/* Cancel Acquire request if that exist */
+		if (g_str_equal(member, "Acquire"))
+			media_owner_remove(owner);
+		else
+			return btd_error_in_progress(msg);
+	}
 
-		id = transport->suspend(transport, owner);
-		if (id == 0) {
-			media_transport_remove(transport, owner);
-			return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-		}
+	transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
 
-		req = media_request_create(msg, id);
-		media_owner_add(owner, req);
+	id = transport->suspend(transport, owner);
+	if (id == 0) {
+		media_transport_remove(transport, owner);
+		return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+	}
 
-		return NULL;
-	} else if ((owner->lock & lock) == lock) {
-		media_transport_release(transport, lock);
-		owner->lock &= ~lock;
-	} else
-		return btd_error_not_authorized(msg);
+	req = media_request_create(msg, id);
+	media_owner_add(owner, req);
 
-	return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+	return NULL;
 }
 
 static gboolean get_device(const GDBusPropertyTable *property,
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v1 3/6] media: Remove transport owner list
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Transports now have zero or one owners, so there is no need to maintain
a list any more.
---
 profiles/audio/transport.c | 79 ++++++++++++----------------------------------
 1 file changed, 21 insertions(+), 58 deletions(-)

diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 4bb54f6..1064098 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -88,7 +88,7 @@ struct media_transport {
 	char			*path;		/* Transport object path */
 	struct audio_device	*device;	/* Transport device */
 	struct media_endpoint	*endpoint;	/* Transport endpoint */
-	GSList			*owners;	/* Transport owners */
+	struct media_owner	*owner;		/* Transport owner */
 	uint8_t			*configuration; /* Transport configuration */
 	int			size;		/* Transport configuration size */
 	int			fd;		/* Transport file descriptor */
@@ -241,24 +241,24 @@ static void media_owner_free(struct media_owner *owner)
 	g_free(owner);
 }
 
-static void media_transport_remove(struct media_transport *transport,
-						struct media_owner *owner)
+static void media_transport_remove_owner(struct media_transport *transport)
 {
+	struct media_owner *owner = transport->owner;
+
 	DBG("Transport %s Owner %s", transport->path, owner->name);
 
 	/* Reply if owner has a pending request */
 	if (owner->pending)
 		media_request_reply(owner->pending, EIO);
 
-	transport->owners = g_slist_remove(transport->owners, owner);
+	transport->owner = NULL;
 
 	if (owner->watch)
 		g_dbus_remove_watch(btd_get_dbus_connection(), owner->watch);
 
 	media_owner_free(owner);
 
-	/* Suspend if there is no longer any owner */
-	if (transport->owners == NULL && state_in_use(transport->state))
+	if (state_in_use(transport->state))
 		transport->suspend(transport, NULL);
 }
 
@@ -319,7 +319,7 @@ static void a2dp_resume_complete(struct avdtp *session,
 	return;
 
 fail:
-	media_transport_remove(transport, owner);
+	media_transport_remove_owner(transport);
 }
 
 static guint resume_a2dp(struct media_transport *transport,
@@ -366,7 +366,7 @@ static void a2dp_suspend_complete(struct avdtp *session,
 
 	a2dp_sep_unlock(sep, a2dp->session);
 	transport_set_state(transport, TRANSPORT_STATE_IDLE);
-	media_transport_remove(transport, owner);
+	media_transport_remove_owner(transport);
 }
 
 static guint suspend_a2dp(struct media_transport *transport,
@@ -399,14 +399,14 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
 
 	media_owner_remove(owner);
 
-	media_transport_remove(owner->transport, owner);
+	media_transport_remove_owner(owner->transport);
 }
 
-static void media_transport_add(struct media_transport *transport,
+static void media_transport_set_owner(struct media_transport *transport,
 					struct media_owner *owner)
 {
 	DBG("Transport %s Owner %s", transport->path, owner->name);
-	transport->owners = g_slist_append(transport->owners, owner);
+	transport->owner = owner;
 	owner->transport = transport;
 	owner->watch = g_dbus_add_disconnect_watch(btd_get_dbus_connection(),
 							owner->name,
@@ -435,35 +435,15 @@ static void media_owner_add(struct media_owner *owner,
 	owner->pending = req;
 }
 
-static struct media_owner *media_transport_find_owner(
-					struct media_transport *transport,
-					const char *name)
-{
-	GSList *l;
-
-	for (l = transport->owners; l; l = l->next) {
-		struct media_owner *owner = l->data;
-
-		if (g_strcmp0(owner->name, name) == 0)
-			return owner;
-	}
-
-	return NULL;
-}
-
 static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 					void *data)
 {
 	struct media_transport *transport = data;
 	struct media_owner *owner;
 	struct media_request *req;
-	const char *sender;
 	guint id;
 
-	sender = dbus_message_get_sender(msg);
-
-	owner = media_transport_find_owner(transport, sender);
-	if (owner != NULL)
+	if (transport->owner != NULL)
 		return btd_error_not_authorized(msg);
 
 	if (transport->state >= TRANSPORT_STATE_REQUESTING)
@@ -478,7 +458,7 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 
 	req = media_request_create(msg, id);
 	media_owner_add(owner, req);
-	media_transport_add(transport, owner);
+	media_transport_set_owner(transport, owner);
 
 	return NULL;
 }
@@ -487,23 +467,16 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 					void *data)
 {
 	struct media_transport *transport = data;
-	struct media_owner *owner;
+	struct media_owner *owner = transport->owner;
 	const char *sender;
 	struct media_request *req;
 	guint id;
 
 	sender = dbus_message_get_sender(msg);
 
-	owner = media_transport_find_owner(transport, sender);
-	if (owner == NULL)
+	if (owner == NULL || g_strcmp0(owner->name, sender) != 0)
 		return btd_error_not_authorized(msg);
 
-	/* Not the last owner, no need to suspend */
-	if (g_slist_length(transport->owners) != 1) {
-		media_transport_remove(transport, owner);
-		return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-	}
-
 	if (owner->pending) {
 		const char *member;
 
@@ -519,7 +492,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 
 	id = transport->suspend(transport, owner);
 	if (id == 0) {
-		media_transport_remove(transport, owner);
+		media_transport_remove_owner(transport);
 		return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 	}
 
@@ -689,15 +662,9 @@ static void destroy_a2dp(void *data)
 static void media_transport_free(void *data)
 {
 	struct media_transport *transport = data;
-	GSList *l = transport->owners;
 
-	while (l) {
-		struct media_owner *owner = l->data;
-		l = l->next;
-		media_transport_remove(transport, owner);
-	}
-
-	g_slist_free(transport->owners);
+	if (transport->owner)
+		media_transport_remove_owner(transport);
 
 	if (transport->destroy != NULL)
 		transport->destroy(transport->data);
@@ -717,13 +684,9 @@ static void transport_update_playing(struct media_transport *transport,
 		if (transport->state == TRANSPORT_STATE_PENDING)
 			transport_set_state(transport, TRANSPORT_STATE_IDLE);
 		else if (transport->state == TRANSPORT_STATE_ACTIVE) {
-			/* Remove all owners */
-			while (transport->owners != NULL) {
-				struct media_owner *owner;
-
-				owner = transport->owners->data;
-				media_transport_remove(transport, owner);
-			}
+			/* Remove owner */
+			if (transport->owner != NULL)
+				media_transport_remove_owner(transport);
 		}
 	} else if (transport->state == TRANSPORT_STATE_IDLE)
 		transport_set_state(transport, TRANSPORT_STATE_PENDING);
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v1 4/6] media: Add MediaTransport.TryAcquire()
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Split the Acquire() method in two parts so that the optional acquires,
formerly represented as a "?" flag in the accesstype parameter of
Acquire(), are now implemented in TryAcquire().
---
 doc/media-api.txt          |  7 +++++++
 profiles/audio/transport.c | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/doc/media-api.txt b/doc/media-api.txt
index b15ad61..5e052b4 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -266,6 +266,13 @@ Methods		fd, uint16, uint16 Acquire()
 			Acquire transport file descriptor and the MTU for read
 			and write respectively.
 
+		fd, uint16, uint16 TryAcquire()
+
+			Acquire transport file descriptor only if the transport
+			is in "pending" state at the time the message is
+			received by BlueZ. Otherwise no request will be sent
+			to the remote device and the function will just fail.
+
 		void Release()
 
 			Releases file descriptor.
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 1064098..0fd2469 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -463,6 +463,37 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
 	return NULL;
 }
 
+static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg,
+								void *data)
+{
+	struct media_transport *transport = data;
+	struct media_owner *owner;
+	struct media_request *req;
+	guint id;
+
+	if (transport->owner != NULL)
+		return btd_error_not_authorized(msg);
+
+	if (transport->state >= TRANSPORT_STATE_REQUESTING)
+		return btd_error_not_authorized(msg);
+
+	if (transport->state != TRANSPORT_STATE_PENDING)
+		return btd_error_failed(msg, "Transport not playing");
+
+	owner = media_owner_create(msg);
+	id = transport->resume(transport, owner);
+	if (id == 0) {
+		media_owner_free(owner);
+		return btd_error_not_authorized(msg);
+	}
+
+	req = media_request_create(msg, id);
+	media_owner_add(owner, req);
+	media_transport_set_owner(transport, owner);
+
+	return NULL;
+}
+
 static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
 					void *data)
 {
@@ -634,6 +665,11 @@ static const GDBusMethodTable transport_methods[] = {
 			GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
 							{ "mtu_w", "q" } ),
 			acquire) },
+	{ GDBUS_ASYNC_METHOD("TryAcquire",
+			NULL,
+			GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
+							{ "mtu_w", "q" }),
+			try_acquire) },
 	{ GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) },
 	{ },
 };
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v1 5/6] media: Trivial style fix
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

No whitespace should exist before parenthesis close.
---
 profiles/audio/transport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 0fd2469..666f68a 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -663,7 +663,7 @@ static const GDBusMethodTable transport_methods[] = {
 	{ GDBUS_ASYNC_METHOD("Acquire",
 			NULL,
 			GDBUS_ARGS({ "fd", "h" }, { "mtu_r", "q" },
-							{ "mtu_w", "q" } ),
+							{ "mtu_w", "q" }),
 			acquire) },
 	{ GDBUS_ASYNC_METHOD("TryAcquire",
 			NULL,
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH v1 6/6] media: Add version suffix to all media interfaces
From: Mikel Astiz @ 2012-12-05 16:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354724134-7354-1-git-send-email-mikel.astiz.oss@gmail.com>

From: Mikel Astiz <mikel.astiz@bmw-carit.de>

Append the version number to all D-Bus interface names in the Media API.
---
 doc/audio-telephony-design.txt |  4 ++--
 doc/media-api.txt              | 20 ++++++++++----------
 profiles/audio/media.c         |  8 ++++----
 profiles/audio/player.c        |  2 +-
 profiles/audio/transport.c     |  2 +-
 test/mpris-player.c            | 14 +++++++-------
 6 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/doc/audio-telephony-design.txt b/doc/audio-telephony-design.txt
index ec575f2..308986b 100644
--- a/doc/audio-telephony-design.txt
+++ b/doc/audio-telephony-design.txt
@@ -35,9 +35,9 @@ When a new device is connected, NewConnection method of Profile1 agent
 is called with informations related to connecting profile (like RFCOMM
 client file descriptor, version, features, media end point path, ...).
 
-The telephony application is in charge to implement a MediaTransport for
+The telephony application is in charge to implement a MediaTransport1 for
 its audio connection with remote device and interact with the
-MediaTransport of the audio component (i.e. PulseAudio).
+MediaTransport1 of the audio component (i.e. PulseAudio).
 
 Flow charts
 ===========
diff --git a/doc/media-api.txt b/doc/media-api.txt
index 5e052b4..ce7502a 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -5,7 +5,7 @@ Media hierarchy
 ===============
 
 Service		org.bluez
-Interface	org.bluez.Media
+Interface	org.bluez.Media1
 Object path	[variable prefix]/{hci0,hci1,...}
 
 Methods		void RegisterEndpoint(object endpoint, dict properties)
@@ -123,12 +123,12 @@ Methods		void RegisterEndpoint(object endpoint, dict properties)
 
 			Unregister sender media player.
 
-MediaPlayer hierarchy
-=====================
+MediaPlayer1 hierarchy
+======================
 
 Service		unique name (Target role)
 		org.bluez (Controller role)
-Interface	org.bluez.MediaPlayer
+Interface	org.bluez.Media1Player1
 Object path	freely definable (Target role)
 		[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/playerX
 		(Controller role)
@@ -219,11 +219,11 @@ Properties	string Equalizer [readwrite]
 			possible to signal its end by setting position to the
 			maximum uint32 value.
 
-MediaEndpoint hierarchy
-=======================
+MediaEndpoint1 hierarchy
+========================
 
 Service		unique name
-Interface	org.bluez.MediaEndpoint
+Interface	org.bluez.Media1Endpoint1
 Object path	freely definable
 
 Methods		void SetConfiguration(object transport, dict properties)
@@ -254,11 +254,11 @@ Methods		void SetConfiguration(object transport, dict properties)
 			endpoint, because when this method gets called it has
 			already been unregistered.
 
-MediaTransport hierarchy
-========================
+MediaTransport1 hierarchy
+=========================
 
 Service		org.bluez
-Interface	org.bluez.MediaTransport
+Interface	org.bluez.MediaTransport1
 Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/fdX
 
 Methods		fd, uint16, uint16 Acquire()
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 2041d23..7c0bc0a 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -50,9 +50,9 @@
 #include "avrcp.h"
 #include "manager.h"
 
-#define MEDIA_INTERFACE "org.bluez.Media"
-#define MEDIA_ENDPOINT_INTERFACE "org.bluez.MediaEndpoint"
-#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer"
+#define MEDIA_INTERFACE "org.bluez.Media1"
+#define MEDIA_ENDPOINT_INTERFACE "org.bluez.Media1Endpoint1"
+#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer1"
 
 #define REQUEST_TIMEOUT (3 * 1000)		/* 3 seconds */
 
@@ -402,7 +402,7 @@ static gboolean set_configuration(struct media_endpoint *endpoint,
 	path = media_transport_get_path(transport);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path);
 
-	g_dbus_get_properties(conn, path, "org.bluez.MediaTransport", &iter);
+	g_dbus_get_properties(conn, path, "org.bluez.MediaTransport1", &iter);
 
 	return media_endpoint_async_call(msg, endpoint, cb, user_data, destroy);
 }
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 34b1f20..368bfa8 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -42,7 +42,7 @@
 #include "dbus-common.h"
 #include "error.h"
 
-#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer"
+#define MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer1"
 
 struct player_callback {
 	const struct media_player_callback *cbs;
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 666f68a..165ebd3 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -48,7 +48,7 @@
 #include "source.h"
 #include "avrcp.h"
 
-#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport"
+#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport1"
 
 typedef enum {
 	TRANSPORT_STATE_IDLE,		/* Not acquired and suspended */
diff --git a/test/mpris-player.c b/test/mpris-player.c
index 7985cdd..90c87aa 100644
--- a/test/mpris-player.c
+++ b/test/mpris-player.c
@@ -186,7 +186,7 @@ static int parse_property(DBusConnection *conn, const char *path,
 						DBUS_TYPE_STRING, &value);
 		else
 			emit_properties_changed(sys, path,
-					"org.bluez.MediaPlayer", "Status",
+					"org.bluez.MediaPlayer1", "Status",
 					DBUS_TYPE_STRING, &value);
 	} else if (strcasecmp(key, "Position") == 0) {
 		int64_t usec, msec;
@@ -203,7 +203,7 @@ static int parse_property(DBusConnection *conn, const char *path,
 						DBUS_TYPE_UINT32, &msec);
 		else
 			emit_properties_changed(sys, path,
-					"org.bluez.MediaPlayer", "Position",
+					"org.bluez.MediaPlayer1", "Position",
 					DBUS_TYPE_UINT32, &msec);
 	} else if (strcasecmp(key, "Shuffle") == 0) {
 		dbus_bool_t value;
@@ -221,7 +221,7 @@ static int parse_property(DBusConnection *conn, const char *path,
 						DBUS_TYPE_STRING, &str);
 		else
 			emit_properties_changed(sys, path,
-					"org.bluez.MediaPlayer", "Shuffle",
+					"org.bluez.MediaPlayer1", "Shuffle",
 					DBUS_TYPE_STRING, &str);
 	}
 
@@ -446,7 +446,7 @@ static char *sender2path(const char *sender)
 static DBusHandlerResult player_message(DBusConnection *conn,
 						DBusMessage *msg, void *data)
 {
-	if (dbus_message_is_method_call(msg, "org.bluez.MediaPlayer",
+	if (dbus_message_is_method_call(msg, "org.bluez.MediaPlayer1",
 								"Release")) {
 		printf("Release\n");
 		exit(1);
@@ -472,7 +472,7 @@ static void add_player(DBusConnection *conn, const char *name,
 		return;
 
 	msg = dbus_message_new_method_call("org.bluez", adapter,
-					"org.bluez.Media",
+					"org.bluez.Media1",
 					"RegisterPlayer");
 	if (!msg) {
 		fprintf(stderr, "Can't allocate new method call\n");
@@ -539,7 +539,7 @@ static void remove_player(DBusConnection *conn, const char *sender)
 	char *path;
 
 	msg = dbus_message_new_method_call("org.bluez", adapter,
-					"org.bluez.Media",
+					"org.bluez.Media1",
 					"UnregisterPlayer");
 	if (!msg) {
 		fprintf(stderr, "Can't allocate new method call\n");
@@ -578,7 +578,7 @@ static DBusHandlerResult properties_changed(DBusConnection *conn,
 	path = sender2path(dbus_message_get_sender(msg));
 	parse_properties(conn, path, &iter, NULL);
 
-	signal = dbus_message_new_signal(path, "org.bluez.MediaPlayer",
+	signal = dbus_message_new_signal(path, "org.bluez.MediaPlayer1",
 							"TrackChanged");
 	if (!signal) {
 		fprintf(stderr, "Unable to allocate new PropertyChanged"
-- 
1.7.11.7


^ permalink raw reply related

* [PATCH BlueZ v2] l2test: Add support to test auto select PSM
From: Syam Sidhardhan @ 2012-12-05 16:21 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Syam Sidhardhan

This patch enable us to test the auto select PSM by passing
PSM value as 0.

Ex: l2test -d -P 0
l2test[2585]: Waiting for connection on psm 4099 ...
---
v2 -> Retain the interoperability issue mentioned by Gustavo.
 
 test/l2test.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/test/l2test.c b/test/l2test.c
index 7f9f007..c88116d 100644
--- a/test/l2test.c
+++ b/test/l2test.c
@@ -454,8 +454,6 @@ static void do_listen(void (*handler)(int sk))
 		addr.l2_cid = htobs(cid);
 	else if (psm)
 		addr.l2_psm = htobs(psm);
-	else
-		goto error;
 
 	if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
 		syslog(LOG_ERR, "Can't bind socket: %s (%d)",
-- 
1.7.9.5


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox