Fix trust setting in Sixaxis devices

This commit is contained in:
Bastien Nocera 2013-07-23 17:28:04 +02:00
parent ce8270ace4
commit c38c767f28
2 changed files with 96 additions and 16 deletions

View File

@ -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 <hadess@hadess.net>
Date: Fri, 30 Dec 2011 12:34:29 +0100
Subject: [PATCH] Add sixaxis cable-pairing plugin
@ -12,14 +12,16 @@ address, and added to the database of the current default adapter.
Makefile.am | 9 +-
acinclude.m4 | 16 +++
configure.ac | 1 +
plugins/cable.c | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
plugins/cable.c | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/adapter.c | 19 +++
src/adapter.h | 3 +
6 files changed, 428 insertions(+), 2 deletions(-)
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);
--
1.7.10.2
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.8.3.1

View File

@ -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 <bnocera@redhat.com> 4.101-9
- Fix trust setting in Sixaxis devices
* Wed Jun 26 2013 Bastien Nocera <bnocera@redhat.com> 4.101-8
- Another pass at fixing A2DP support (#964031)