From c38c767f28c9fa8558340d1ad536b92d53898841 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 23 Jul 2013 17:28:04 +0200 Subject: [PATCH] Fix trust setting in Sixaxis devices --- 0001-Add-sixaxis-cable-pairing-plugin.patch | 107 +++++++++++++++++--- bluez.spec | 5 +- 2 files changed, 96 insertions(+), 16 deletions(-) diff --git a/0001-Add-sixaxis-cable-pairing-plugin.patch b/0001-Add-sixaxis-cable-pairing-plugin.patch index b20c9c8..88c8b53 100644 --- a/0001-Add-sixaxis-cable-pairing-plugin.patch +++ b/0001-Add-sixaxis-cable-pairing-plugin.patch @@ -1,4 +1,4 @@ -From 64f9449656dbbb718d53a54ed8e7904e289280ec Mon Sep 17 00:00:00 2001 +From 03827726cebf7d8b5bc5a4e7859ea92a7e62044f Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 30 Dec 2011 12:34:29 +0100 Subject: [PATCH] Add sixaxis cable-pairing plugin @@ -9,17 +9,19 @@ When a Sixaxis device is plugged in, events are filtered, and the device is selected, poked around to set the default Bluetooth address, and added to the database of the current default adapter. --- - Makefile.am | 9 +- - acinclude.m4 | 16 +++ - configure.ac | 1 + - plugins/cable.c | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/adapter.c | 19 +++ - src/adapter.h | 3 + - 6 files changed, 428 insertions(+), 2 deletions(-) + Makefile.am | 9 +- + acinclude.m4 | 16 +++ + configure.ac | 1 + + plugins/cable.c | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/adapter.c | 19 +++ + src/adapter.h | 3 + + src/device.c | 37 ++++-- + src/device.h | 2 + + 8 files changed, 456 insertions(+), 13 deletions(-) create mode 100644 plugins/cable.c diff --git a/Makefile.am b/Makefile.am -index 53fcbe9..f831a72 100644 +index 1c214c6..c70ff24 100644 --- a/Makefile.am +++ b/Makefile.am @@ -238,6 +238,11 @@ builtin_sources += thermometer/main.c \ @@ -53,7 +55,7 @@ index 53fcbe9..f831a72 100644 INCLUDES = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \ -I$(srcdir)/audio -I$(srcdir)/sbc -I$(srcdir)/gdbus \ diff --git a/acinclude.m4 b/acinclude.m4 -index 6505ad3..3f59989 100644 +index 1d6d736..ae58bbd 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -139,6 +139,12 @@ AC_DEFUN([AC_PATH_UDEV], [ @@ -106,7 +108,7 @@ index 6505ad3..3f59989 100644 + AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes") ]) diff --git a/configure.ac b/configure.ac -index 48b181e..45a4b15 100644 +index f2db920..8e7ad79 100644 --- a/configure.ac +++ b/configure.ac @@ -46,6 +46,7 @@ AC_PATH_GSTREAMER @@ -119,7 +121,7 @@ index 48b181e..45a4b15 100644 AC_PATH_CHECK diff --git a/plugins/cable.c b/plugins/cable.c new file mode 100644 -index 0000000..fe758db +index 0000000..89333c4 --- /dev/null +++ b/plugins/cable.c @@ -0,0 +1,382 @@ @@ -212,7 +214,7 @@ index 0000000..fe758db + store_device_id(srcaddr, address, 0xffff, vendor_id, product_id, 0); + /* Don't write a profile, it will be updated when the device connects */ + -+ write_trust(srcaddr, address, "[all]", TRUE); ++ device_set_trust (conn, device, TRUE); + + return device; +} @@ -506,7 +508,7 @@ index 0000000..fe758db +BLUETOOTH_PLUGIN_DEFINE(cable, VERSION, + BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit) diff --git a/src/adapter.c b/src/adapter.c -index 6e04faf..0488891 100644 +index f922876..b688642 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -952,6 +952,25 @@ static struct btd_device *adapter_create_device(DBusConnection *conn, @@ -549,6 +551,81 @@ index b7ea62b..ac0aa2e 100644 void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode); int adapter_set_name(struct btd_adapter *adapter, const char *name); void adapter_name_changed(struct btd_adapter *adapter, const char *name); +diff --git a/src/device.c b/src/device.c +index c210bcb..056b450 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -471,31 +471,46 @@ static DBusMessage *set_alias(DBusConnection *conn, DBusMessage *msg, + return dbus_message_new_method_return(msg); + } + +-static DBusMessage *set_trust(DBusConnection *conn, DBusMessage *msg, +- gboolean value, void *data) ++int device_set_trust (DBusConnection *conn, struct btd_device *device, ++ gboolean trusted) + { +- struct btd_device *device = data; + struct btd_adapter *adapter = device->adapter; + char srcaddr[18], dstaddr[18]; + bdaddr_t src; + int err; + +- if (device->trusted == value) +- return dbus_message_new_method_return(msg); +- + adapter_get_address(adapter, &src); + ba2str(&src, srcaddr); + ba2str(&device->bdaddr, dstaddr); + +- err = write_trust(srcaddr, dstaddr, GLOBAL_TRUST, value); ++ err = write_trust(srcaddr, dstaddr, GLOBAL_TRUST, trusted); + if (err < 0) +- return btd_error_failed(msg, strerror(-err)); ++ return err; + +- device->trusted = value; ++ device->trusted = trusted; + +- emit_property_changed(conn, dbus_message_get_path(msg), ++ emit_property_changed(conn, device->path, + DEVICE_INTERFACE, "Trusted", +- DBUS_TYPE_BOOLEAN, &value); ++ DBUS_TYPE_BOOLEAN, &trusted); ++ ++ return 0; ++} ++ ++static DBusMessage *set_trust(DBusConnection *conn, DBusMessage *msg, ++ gboolean value, void *data) ++{ ++ struct btd_device *device = data; ++ struct btd_adapter *adapter = device->adapter; ++ char srcaddr[18], dstaddr[18]; ++ bdaddr_t src; ++ int err; ++ ++ if (device->trusted == value) ++ return dbus_message_new_method_return(msg); ++ ++ err = device_set_trust (conn, device, value); ++ if (err < 0) ++ return btd_error_failed(msg, strerror(-err)); + + return dbus_message_new_method_return(msg); + } +diff --git a/src/device.h b/src/device.h +index 26e17f7..0d5e5ce 100644 +--- a/src/device.h ++++ b/src/device.h +@@ -119,6 +119,8 @@ void btd_unregister_device_driver(struct btd_device_driver *driver); + struct btd_device *btd_device_ref(struct btd_device *device); + void btd_device_unref(struct btd_device *device); + ++int device_set_trust(DBusConnection *conn, struct btd_device *device, ++ gboolean trusted); + int device_block(DBusConnection *conn, struct btd_device *device, + gboolean update_only); + int device_unblock(DBusConnection *conn, struct btd_device *device, -- -1.7.10.2 +1.8.3.1 diff --git a/bluez.spec b/bluez.spec index 982ea23..76f4353 100644 --- a/bluez.spec +++ b/bluez.spec @@ -1,7 +1,7 @@ Summary: Bluetooth utilities Name: bluez Version: 4.101 -Release: 8%{?dist} +Release: 9%{?dist} License: GPLv2+ Group: Applications/System URL: http://www.bluez.org/ @@ -337,6 +337,9 @@ fi %exclude /usr/lib/udev/rules.d/97-bluetooth-hid2hci.rules %changelog +* Tue Jul 23 2013 Bastien Nocera 4.101-9 +- Fix trust setting in Sixaxis devices + * Wed Jun 26 2013 Bastien Nocera 4.101-8 - Another pass at fixing A2DP support (#964031)