Drop most BlueZ 4 patches

... in preparation for rebasing to BlueZ 5.

https://bugzilla.redhat.com/show_bug.cgi?id=974145
This commit is contained in:
Kalev Lember 2013-08-10 21:39:01 +02:00
parent f62c1803a5
commit 34d6c0af39
14 changed files with 0 additions and 1259 deletions

View File

@ -1,25 +0,0 @@
From 9c6f914530c3873e88b55e3f7c18ce2b8b533e20 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 10 Jan 2013 09:14:33 +0100
Subject: [PATCH] Activate the Socket Mobile CF kit
https://bugzilla.redhat.com/show_bug.cgi?id=498756
---
scripts/bluetooth-serial.rules | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/scripts/bluetooth-serial.rules b/scripts/bluetooth-serial.rules
index 072335f..f6284ff 100644
--- a/scripts/bluetooth-serial.rules
+++ b/scripts/bluetooth-serial.rules
@@ -33,3 +33,7 @@ SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="PCMCIA", ATTRS{prod_id
# CC&C BT0100M
SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Bluetooth BT0100M", ENV{HCIOPTS}="bcsp 115200", RUN+="bluetooth_serial"
+
+# SocketMobile CF Connection Kit
+SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Socket", ATTRS{prod_id2}=="CF+ Personal Network Card Rev 2.5", ENV{HCIOPTS}="socket", RUN+="bluetooth_serial"
+
--
1.8.0.1

View File

@ -1,631 +0,0 @@
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
Implement the old "sixpair" using libudev and libusb-1.0.
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 +
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 1c214c6..c70ff24 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -238,6 +238,11 @@ builtin_sources += thermometer/main.c \
endif
+if CABLE
+builtin_modules += cable
+builtin_sources += plugins/cable.c
+endif
+
builtin_modules += hciops mgmtops
builtin_sources += plugins/hciops.c plugins/mgmtops.c
@@ -306,7 +311,7 @@ src_bluetoothd_SOURCES = $(gdbus_sources) $(builtin_sources) \
src/event.h src/event.c \
src/oob.h src/oob.c src/eir.h src/eir.c
src_bluetoothd_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ @DBUS_LIBS@ \
- -ldl -lrt
+ @CABLE_LIBS@ -ldl -lrt
src_bluetoothd_LDFLAGS = $(AM_LDFLAGS) -Wl,--export-dynamic \
-Wl,--version-script=$(srcdir)/src/bluetooth.ver
@@ -428,7 +433,7 @@ EXTRA_DIST += doc/manager-api.txt \
AM_YFLAGS = -d
-AM_CFLAGS += @DBUS_CFLAGS@ @GLIB_CFLAGS@
+AM_CFLAGS += @DBUS_CFLAGS@ @GLIB_CFLAGS@ @CABLE_CFLAGS@
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 1d6d736..ae58bbd 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -139,6 +139,12 @@ AC_DEFUN([AC_PATH_UDEV], [
AC_SUBST(UDEV_LIBS)
])
+AC_DEFUN([AC_PATH_CABLE], [
+ PKG_CHECK_MODULES(CABLE, libudev libusb-1.0, cable_found=yes, cable_found=no)
+ AC_SUBST(CABLE_CFLAGS)
+ AC_SUBST(CABLE_LIBS)
+])
+
AC_DEFUN([AC_PATH_SNDFILE], [
PKG_CHECK_MODULES(SNDFILE, sndfile, sndfile_found=yes, sndfile_found=no)
AC_SUBST(SNDFILE_CFLAGS)
@@ -176,6 +182,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
sndfile_enable=${sndfile_found}
hal_enable=no
usb_enable=${usb_found}
+ cable_enable=${cable_found}
alsa_enable=${alsa_found}
gstreamer_enable=${gstreamer_found}
audio_enable=yes
@@ -265,6 +272,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
usb_enable=${enableval}
])
+ AC_ARG_ENABLE(cable, AC_HELP_STRING([--enable-cable], [enable DeviceKit support]), [
+ cable_enable=${enableval}
+ ])
+
AC_ARG_ENABLE(tools, AC_HELP_STRING([--enable-tools], [install Bluetooth utilities]), [
tools_enable=${enableval}
])
@@ -366,6 +377,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have USB library.])
fi
+ if (test "${cable_enable}" = "yes" && test "${cable_found}" = "yes"); then
+ AC_DEFINE(HAVE_CABLE, 1, [Define to 1 if you have libcable.])
+ fi
+
AM_CONDITIONAL(SNDFILE, test "${sndfile_enable}" = "yes" && test "${sndfile_found}" = "yes")
AM_CONDITIONAL(USB, test "${usb_enable}" = "yes" && test "${usb_found}" = "yes")
AM_CONDITIONAL(SBC, test "${alsa_enable}" = "yes" || test "${gstreamer_enable}" = "yes" ||
@@ -398,4 +413,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
AM_CONDITIONAL(DBUSOOBPLUGIN, test "${dbusoob_enable}" = "yes")
AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
AM_CONDITIONAL(GATTMODULES, test "${gatt_enable}" = "yes")
+ AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes")
])
diff --git a/configure.ac b/configure.ac
index f2db920..8e7ad79 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,6 +46,7 @@ AC_PATH_GSTREAMER
AC_PATH_USB
AC_PATH_UDEV
AC_PATH_SNDFILE
+AC_PATH_CABLE
AC_PATH_OUI
AC_PATH_READLINE
AC_PATH_CHECK
diff --git a/plugins/cable.c b/plugins/cable.c
new file mode 100644
index 0000000..89333c4
--- /dev/null
+++ b/plugins/cable.c
@@ -0,0 +1,382 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2009 Bastien Nocera <hadess@hadess.net>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
+#include <libudev.h>
+#include <dbus/dbus.h>
+#include <bluetooth/bluetooth.h>
+#include <bluetooth/sdp.h>
+#include <libusb.h>
+
+#include "plugin.h"
+#include "log.h"
+
+#include "adapter.h"
+#include "manager.h"
+#include "device.h"
+
+#include "storage.h"
+#include "sdp_lib.h"
+
+/* Vendor and product ID for the Sixaxis PS3 controller */
+#define VENDOR 0x054c
+#define PRODUCT 0x0268
+#define SIXAXIS_PNP_RECORD "3601920900000A000100000900013503191124090004350D35061901000900113503190011090006350909656E09006A0901000900093508350619112409010009000D350F350D350619010009001335031900110901002513576972656C65737320436F6E74726F6C6C65720901012513576972656C65737320436F6E74726F6C6C6572090102251B536F6E7920436F6D707574657220456E7465727461696E6D656E740902000901000902010901000902020800090203082109020428010902052801090206359A35980822259405010904A101A102850175089501150026FF00810375019513150025013500450105091901291381027501950D0600FF8103150026FF0005010901A10075089504350046FF0009300931093209358102C0050175089527090181027508953009019102750895300901B102C0A1028502750895300901B102C0A10285EE750895300901B102C0A10285EF750895300901B102C0C0090207350835060904090901000902082800090209280109020A280109020B09010009020C093E8009020D280009020E2800"
+#define HID_UUID "00001124-0000-1000-8000-00805f9b34fb"
+
+static struct btd_device *create_cable_association(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ const char *name,
+ const char *address,
+ guint32 vendor_id,
+ guint32 product_id,
+ const char *pnp_record)
+{
+ sdp_record_t *rec;
+ struct btd_device *device;
+ bdaddr_t src, dst;
+ char srcaddr[18];
+
+ device = adapter_find_device(adapter, address);
+ if (device == NULL) {
+ device = device_create(conn, adapter, address, BDADDR_BREDR);
+ if (device != NULL)
+ adapter_create_device_for_device(conn, adapter, device);
+ }
+ if (device != NULL) {
+ device_set_temporary(device, FALSE);
+ device_set_name(device, name);
+ }
+
+ str2ba(address, &dst);
+ adapter_get_address(adapter, &src);
+ ba2str(&src, srcaddr);
+
+ write_device_name(&dst, &src, (char *) name);
+
+ /* Store the device's SDP record */
+ rec = record_from_string(pnp_record);
+ store_record(srcaddr, address, rec);
+ sdp_record_free(rec);
+ /* Set the device id */
+ store_device_id(srcaddr, address, 0xffff, vendor_id, product_id, 0);
+ /* Don't write a profile, it will be updated when the device connects */
+
+ device_set_trust (conn, device, TRUE);
+
+ return device;
+}
+
+static char *get_bdaddr(libusb_device_handle *devh, int itfnum)
+{
+ unsigned char msg[17];
+ char *address;
+ int res;
+
+ res = libusb_control_transfer(devh,
+ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
+ 0x01, 0x03f2, itfnum,
+ (void*) msg, sizeof(msg),
+ 5000);
+
+ if (res < 0) {
+ DBG("Getting the device Bluetooth address failed");
+ return NULL;
+ }
+
+ address = g_strdup_printf("%02X:%02X:%02X:%02X:%02X:%02X",
+ msg[4], msg[5], msg[6], msg[7], msg[8], msg[9]);
+
+ DBG("Device Bluetooth address: %s\n", address);
+
+ return address;
+}
+
+static gboolean set_master_bdaddr(libusb_device_handle *devh, int itfnum, char *host)
+{
+ unsigned char msg[8];
+ int mac[6];
+ int res;
+
+ if (sscanf(host, "%X:%X:%X:%X:%X:%X",
+ &mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6) {
+ return FALSE;
+ }
+
+ msg[0] = 0x01;
+ msg[1] = 0x00;
+ msg[2] = mac[0];
+ msg[3] = mac[1];
+ msg[4] = mac[2];
+ msg[5] = mac[3];
+ msg[6] = mac[4];
+ msg[7] = mac[5];
+
+ res = libusb_control_transfer(devh,
+ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
+ 0x09, 0x03f5, itfnum,
+ (void*) msg, sizeof(msg),
+ 5000);
+
+ if (res < 0) {
+ DBG("Setting the master Bluetooth address failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+static void handle_usb_device(struct btd_adapter *adapter,
+ libusb_device *dev,
+ struct libusb_config_descriptor *cfg,
+ int itfnum,
+ const struct libusb_interface_descriptor *alt)
+{
+ DBusConnection *conn;
+ libusb_device_handle *devh;
+ char *device_bdaddr;
+ char adapter_bdaddr[18];
+ struct btd_device *device;
+ bdaddr_t dst;
+
+ device_bdaddr = NULL;
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (conn == NULL) {
+ DBG("Failed to get on the bus");
+ return;
+ }
+
+ if (libusb_open(dev, &devh) < 0) {
+ DBG("Can't open device");
+ goto bail;
+ }
+ libusb_detach_kernel_driver(devh, itfnum);
+
+ if (libusb_claim_interface(devh, itfnum) < 0) {
+ DBG("Can't claim interface %d", itfnum);
+ goto bail;
+ }
+
+ device_bdaddr = get_bdaddr(devh, itfnum);
+ if (device_bdaddr == NULL) {
+ DBG("Failed to get the Bluetooth address from the device");
+ goto bail;
+ }
+
+ device = create_cable_association(conn,
+ adapter,
+ "PLAYSTATION(R)3 Controller",
+ device_bdaddr,
+ VENDOR, PRODUCT, SIXAXIS_PNP_RECORD);
+ btd_device_add_uuid(device, HID_UUID);
+
+ adapter_get_address(adapter, &dst);
+ ba2str(&dst, adapter_bdaddr);
+ DBG("Adapter bdaddr %s", adapter_bdaddr);
+
+ if (set_master_bdaddr(devh, itfnum, adapter_bdaddr) == FALSE) {
+ DBG("Failed to set the master Bluetooth address");
+ goto bail;
+ }
+
+bail:
+ dbus_connection_unref(conn);
+ g_free(device_bdaddr);
+ libusb_release_interface(devh, itfnum);
+ /* We ignore errors from the reattach, as there's nothing we
+ * can do about it */
+ libusb_attach_kernel_driver(devh, itfnum);
+ if (devh != NULL)
+ libusb_close(devh);
+}
+
+static void handle_device_plug(struct udev_device *udevice)
+{
+ struct btd_adapter *adapter;
+ guint i;
+
+ libusb_device **list, *usbdev;
+ ssize_t num_devices;
+ struct libusb_device_descriptor desc;
+ guint8 j;
+
+ if (g_strcmp0(udev_device_get_property_value(udevice, "ID_SERIAL"),
+ "Sony_PLAYSTATION_R_3_Controller") != 0)
+ return;
+ /* Don't look at events with an associated driver */
+ if (udev_device_get_property_value(udevice, "ID_USB_DRIVER") != NULL)
+ return;
+
+ DBG("Found Sixaxis device");
+
+ /* Look for the default adapter */
+ adapter = manager_get_default_adapter();
+ if (adapter == NULL)
+ return;
+
+ /* Look for the USB device */
+ libusb_init(NULL);
+
+ num_devices = libusb_get_device_list(NULL, &list);
+ if (num_devices < 0) {
+ DBG("libusb_get_device_list failed");
+ return;
+ }
+
+ usbdev = NULL;
+ for (i = 0; i < num_devices; i++) {
+ char *path;
+
+ path = g_strdup_printf("%s/%03d/%03d", "/dev/bus/usb",
+ libusb_get_bus_number(list[i]),
+ libusb_get_device_address(list[i]));
+ if (g_strcmp0(path, udev_device_get_devnode(udevice)) == 0) {
+ g_free(path);
+ usbdev = libusb_ref_device(list[i]);
+ break;
+ }
+ g_free(path);
+ }
+
+ libusb_free_device_list(list, TRUE);
+ if (usbdev == NULL) {
+ DBG("Found a Sixaxis, but couldn't find it via libusb");
+ goto out;
+ }
+
+ if (libusb_get_device_descriptor(usbdev, &desc) < 0) {
+ DBG("libusb_get_device_descriptor() failed");
+ goto out;
+ }
+
+ /* Look for the interface number that interests us */
+ for (j = 0; j < desc.bNumConfigurations; j++) {
+ struct libusb_config_descriptor *config;
+ guint8 k;
+
+ if (libusb_get_config_descriptor(usbdev, j, &config) < 0) {
+ DBG("Failed to get config descriptor %d", j);
+ continue;
+ }
+
+ for (k = 0; k < config->bNumInterfaces; k++) {
+ const struct libusb_interface *itf = &config->interface[k];
+ int l;
+
+ for (l = 0; l < itf->num_altsetting ; l++) {
+ struct libusb_interface_descriptor alt;
+
+ alt = itf->altsetting[l];
+ if (alt.bInterfaceClass == 3) {
+ handle_usb_device(adapter, usbdev, config, l, &alt);
+ }
+ }
+ }
+ }
+
+out:
+ if (usbdev != NULL)
+ libusb_unref_device(usbdev);
+ libusb_exit(NULL);
+}
+
+static gboolean device_event_idle(struct udev_device *udevice)
+{
+ handle_device_plug(udevice);
+ udev_device_unref(udevice);
+ return FALSE;
+}
+
+static struct udev *ctx = NULL;
+static struct udev_monitor *monitor = NULL;
+static guint watch_id = 0;
+
+static gboolean
+monitor_event(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data)
+{
+ struct udev_device *udevice;
+
+ udevice = udev_monitor_receive_device(monitor);
+ if (udevice == NULL)
+ goto out;
+ if (g_strcmp0(udev_device_get_action(udevice), "add") != 0)
+ goto out;
+
+ g_timeout_add_seconds(1, (GSourceFunc) device_event_idle, udevice);
+
+out:
+ return TRUE;
+}
+
+
+static int cable_init(void)
+{
+ GIOChannel *channel;
+
+ DBG("Setup cable plugin");
+
+ ctx = udev_new();
+ monitor = udev_monitor_new_from_netlink(ctx, "udev");
+ if (monitor == NULL) {
+ error ("Could not get udev monitor");
+ return -1;
+ }
+
+ /* Listen for newly connected usb device */
+ udev_monitor_filter_add_match_subsystem_devtype(monitor,
+ "usb", NULL);
+ udev_monitor_enable_receiving(monitor);
+
+ channel = g_io_channel_unix_new(udev_monitor_get_fd(monitor));
+ watch_id = g_io_add_watch(channel, G_IO_IN, monitor_event, NULL);
+ g_io_channel_unref(channel);
+
+ return 0;
+}
+
+static void cable_exit(void)
+{
+ DBG("Cleanup cable plugin");
+
+ if (watch_id != 0) {
+ g_source_remove(watch_id);
+ watch_id = 0;
+ }
+ if (monitor != NULL) {
+ udev_monitor_unref(monitor);
+ monitor = NULL;
+ }
+ if (ctx != NULL) {
+ udev_unref(ctx);
+ ctx = NULL;
+ }
+}
+
+BLUETOOTH_PLUGIN_DEFINE(cable, VERSION,
+ BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit)
diff --git a/src/adapter.c b/src/adapter.c
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,
return device;
}
+void adapter_create_device_for_device(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ struct btd_device *device)
+{
+ const char *path;
+
+ device_set_temporary(device, TRUE);
+
+ adapter->devices = g_slist_append(adapter->devices, device);
+
+ path = device_get_path(device);
+ g_dbus_emit_signal(conn, adapter->path,
+ ADAPTER_INTERFACE, "DeviceCreated",
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID);
+
+ adapter_update_devices(adapter);
+}
+
void adapter_remove_device(DBusConnection *conn, struct btd_adapter *adapter,
struct btd_device *device,
gboolean remove_storage)
diff --git a/src/adapter.h b/src/adapter.h
index b7ea62b..ac0aa2e 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -114,6 +114,9 @@ void adapter_update_found_devices(struct btd_adapter *adapter,
uint8_t *data, uint8_t data_len);
void adapter_emit_device_found(struct btd_adapter *adapter,
struct remote_dev_info *dev);
+void adapter_create_device_for_device(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ struct btd_device *device);
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.8.3.1

View File

@ -1,28 +0,0 @@
From dcbeaaa74020031741ad3727e651cdd2d00c773f Mon Sep 17 00:00:00 2001
From: Luke Hutchison <luke.hutch@gmail.com>
Date: Thu, 10 Jan 2013 09:13:19 +0100
Subject: [PATCH] Allow PulseAudio to connect by default
https://bugzilla.redhat.com/show_bug.cgi?id=874015#c0
---
audio/audio.conf | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/audio/audio.conf b/audio/audio.conf
index fd6092a..9a80e63 100644
--- a/audio/audio.conf
+++ b/audio/audio.conf
@@ -4,6 +4,10 @@
# particular interface
[General]
+# Allow PulseAudio to connect by default
+# https://bugzilla.redhat.com/show_bug.cgi?id=964031
+Disable=Socket
+
# Switch to master role for incoming connections (defaults to true)
#Master=true
--
1.8.0.1

View File

@ -1,46 +0,0 @@
From 0b5f5d0be6a1c9aa2d63e72e6a979f46cfbcc866 Mon Sep 17 00:00:00 2001
From: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
Date: Thu, 10 Jan 2013 09:20:22 +0100
Subject: [PATCH] Enable the Gateway and Source audio profiles by default.
Those can be disabled by the user in /etc/bluetooth/audio.conf if
necessary.
https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/948613
---
audio/a2dp.c | 2 +-
audio/manager.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/audio/a2dp.c b/audio/a2dp.c
index 404be53..6c0ab26 100644
--- a/audio/a2dp.c
+++ b/audio/a2dp.c
@@ -1444,7 +1444,7 @@ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
{
int sbc_srcs = 0, sbc_sinks = 0;
int mpeg12_srcs = 0, mpeg12_sinks = 0;
- gboolean source = TRUE, sink = FALSE, socket = FALSE;
+ gboolean source = TRUE, sink = TRUE, socket = TRUE;
gboolean delay_reporting = FALSE;
char *str;
GError *err = NULL;
diff --git a/audio/manager.c b/audio/manager.c
index d442d1d..99e03bb 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -110,9 +110,9 @@ static GSList *devices = NULL;
static struct enabled_interfaces enabled = {
.hfp = TRUE,
.headset = TRUE,
- .gateway = FALSE,
+ .gateway = TRUE,
.sink = TRUE,
- .source = FALSE,
+ .source = TRUE,
.control = TRUE,
.socket = FALSE,
.media = TRUE,
--
1.8.0.1

View File

@ -1,84 +0,0 @@
From a66a557038c0e3d21bc4f14090efb497558a12be Mon Sep 17 00:00:00 2001
From: Lucas De Marchi <lucas.demarchi@profusion.mobi>
Date: Tue, 26 Jun 2012 18:11:25 -0300
Subject: [PATCH] Fix GDBus flags after conversion to macros
Commit "aa3b9016bf444b60e1b7e1804dfc323a23a93c5a Convert GDBus methods
to use macro helpers" converted the previous tables to use the new
macros but some flags were lost.
---
attrib/client.c | 2 +-
audio/control.c | 2 +-
audio/headset.c | 2 +-
audio/transport.c | 2 +-
src/manager.c | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/attrib/client.c b/attrib/client.c
index 8d119df..b3e3abe 100644
--- a/attrib/client.c
+++ b/attrib/client.c
@@ -519,7 +519,7 @@ static const GDBusMethodTable char_methods[] = {
{ GDBUS_METHOD("GetProperties",
NULL, GDBUS_ARGS({ "properties", "a{sv}" }),
get_properties) },
- { GDBUS_METHOD("SetProperty",
+ { GDBUS_ASYNC_METHOD("SetProperty",
GDBUS_ARGS({ "name", "s" }, { "value", "v" }), NULL,
set_property) },
{ }
diff --git a/audio/control.c b/audio/control.c
index c5a6a58..187f838 100644
--- a/audio/control.c
+++ b/audio/control.c
@@ -198,7 +198,7 @@ static DBusMessage *control_get_properties(DBusConnection *conn,
}
static const GDBusMethodTable control_methods[] = {
- { GDBUS_ASYNC_METHOD("IsConnected",
+ { GDBUS_DEPRECATED_METHOD("IsConnected",
NULL, GDBUS_ARGS({ "connected", "b" }),
control_is_connected) },
{ GDBUS_METHOD("GetProperties",
diff --git a/audio/headset.c b/audio/headset.c
index 729e4dc..b9c6265 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -2094,7 +2094,7 @@ static const GDBusMethodTable headset_methods[] = {
static const GDBusSignalTable headset_signals[] = {
{ GDBUS_DEPRECATED_SIGNAL("Connected", NULL) },
{ GDBUS_DEPRECATED_SIGNAL("Disconnected", NULL) },
- { GDBUS_DEPRECATED_SIGNAL("AnswerRequested", NULL) },
+ { GDBUS_SIGNAL("AnswerRequested", NULL) },
{ GDBUS_DEPRECATED_SIGNAL("Stopped", NULL) },
{ GDBUS_DEPRECATED_SIGNAL("Playing", NULL) },
{ GDBUS_DEPRECATED_SIGNAL("SpeakerGainChanged",
diff --git a/audio/transport.c b/audio/transport.c
index b015625..832ad2a 100644
--- a/audio/transport.c
+++ b/audio/transport.c
@@ -959,7 +959,7 @@ static const GDBusMethodTable transport_methods[] = {
{ GDBUS_ASYNC_METHOD("Release",
GDBUS_ARGS({ "access_type", "s" }), NULL,
release ) },
- { GDBUS_ASYNC_METHOD("SetProperty",
+ { GDBUS_METHOD("SetProperty",
GDBUS_ARGS({ "name", "s" }, { "value", "v" }),
NULL, set_property) },
{ },
diff --git a/src/manager.c b/src/manager.c
index 385354d..7061f64 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -207,7 +207,7 @@ static const GDBusMethodTable manager_methods[] = {
GDBUS_ARGS({ "pattern", "s" }),
GDBUS_ARGS({ "adapter", "o" }),
find_adapter) },
- { GDBUS_ASYNC_METHOD("ListAdapters",
+ { GDBUS_DEPRECATED_METHOD("ListAdapters",
NULL, GDBUS_ARGS({ "adapters", "ao" }),
list_adapters) },
{ }
--
1.8.0.1

View File

@ -1,51 +0,0 @@
From 2f92669697152848f2fae584d45fde5d80ea6eb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Dalleau?=
<frederic.dalleau@linux.intel.com>
Date: Fri, 22 Jun 2012 16:11:25 +0200
Subject: [PATCH] audio: Permit concurrent use of AG and HF roles
If a device supports both HF and AG roles, then if a SCO connection
related to AG profile happens, the connection is rejected because HF is
not connected. One consequence is pulseaudio failing to load bluetooth
module.
---
audio/main.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/audio/main.c b/audio/main.c
index 5c751af..a48c8b8 100644
--- a/audio/main.c
+++ b/audio/main.c
@@ -102,7 +102,7 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
if (device->headset) {
if (headset_get_state(device) < HEADSET_STATE_CONNECTED) {
DBG("Refusing SCO from non-connected headset");
- goto drop;
+ goto gateway;
}
if (!headset_get_hfp_active(device)) {
@@ -115,7 +115,11 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
goto drop;
headset_set_state(device, HEADSET_STATE_PLAYING);
- } else if (device->gateway) {
+ goto connect;
+ }
+
+gateway:
+ if (device->gateway) {
if (!gateway_is_connected(device)) {
DBG("Refusing SCO from non-connected AG");
goto drop;
@@ -126,6 +130,7 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
} else
goto drop;
+connect:
sk = g_io_channel_unix_get_fd(chan);
fcntl(sk, F_SETFL, 0);
--
1.8.0.1

View File

@ -1,32 +0,0 @@
From d557e0d956d69318664ed5d1c3e4a765da24bc2a Mon Sep 17 00:00:00 2001
From: Alexander Holler <holler@ahsoftware.de>
Date: Tue, 20 Nov 2012 12:47:08 +0100
Subject: [PATCH] hid2hci: change subsystem in udev rule from usb to usb*
With kernel 3.6 (commit 7e97243c2080ecae7129e83635227fdebd4feef6) the
class for some devices (e.g. dongles from Logitech) were changed from
usb to usbmisc. As consequence the udev rule for hid2hci didn't work
anymore with kernels >= 3.6.
Changing the subsystem from "usb" to "usb*" matches both "usb" and
"usbmisc" and works with all kernels.
---
scripts/bluetooth-hid2hci.rules | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/bluetooth-hid2hci.rules b/scripts/bluetooth-hid2hci.rules
index 0687c8a..db6bb03 100644
--- a/scripts/bluetooth-hid2hci.rules
+++ b/scripts/bluetooth-hid2hci.rules
@@ -1,7 +1,7 @@
# do not edit this file, it will be overwritten on update
ACTION=="remove", GOTO="hid2hci_end"
-SUBSYSTEM!="usb", GOTO="hid2hci_end"
+SUBSYSTEM!="usb*", GOTO="hid2hci_end"
# Variety of Dell Bluetooth devices - match on a mouse device that is
# self powered and where a HID report needs to be sent to switch modes
--
1.8.0

View File

@ -1,37 +0,0 @@
From c70bf65af6e301f18063491b22112300c0fb9b89 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Sun, 17 Jun 2012 01:25:46 +0200
Subject: [PATCH 1/3] input: Add helper function to request disconnect
---
input/device.c | 7 +++++++
input/device.h | 1 +
2 files changed, 8 insertions(+)
diff --git a/input/device.c b/input/device.c
index 0e3f4a9..8fdd4e0 100644
--- a/input/device.c
+++ b/input/device.c
@@ -1306,3 +1306,10 @@ int input_device_close_channels(const bdaddr_t *src, const bdaddr_t *dst)
return 0;
}
+
+void input_device_request_disconnect(struct fake_input *fake)
+{
+ if (fake == NULL || fake->idev == NULL)
+ return;
+ device_request_disconnect(fake->idev->device, NULL);
+}
diff --git a/input/device.h b/input/device.h
index 509a353..ff52967 100644
--- a/input/device.h
+++ b/input/device.h
@@ -49,3 +49,4 @@ int input_device_unregister(const char *path, const char *uuid);
int input_device_set_channel(const bdaddr_t *src, const bdaddr_t *dst, int psm,
GIOChannel *io);
int input_device_close_channels(const bdaddr_t *src, const bdaddr_t *dst);
+void input_device_request_disconnect(struct fake_input *fake);
--
1.7.10

View File

@ -1,101 +0,0 @@
From ea793cb9f744cd2942b66385118161b880de958a Mon Sep 17 00:00:00 2001
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date: Tue, 19 Jun 2012 12:44:43 +0300
Subject: [PATCH] input: Fix not adding watches when io channel is connected
This can leave dangling pointers in case one of the channel is never
connected which cause -EALREADY to be returned by
input_device_set_channel next time the device attempts to connect.
For the same reason the code path when acting as client now add the
watch as soon as the connection completes instead when both channels
are connected.
---
input/device.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/input/device.c b/input/device.c
index 0e3f4a9..09a9a39 100644
--- a/input/device.c
+++ b/input/device.c
@@ -387,6 +387,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
struct input_conn *iconn = data;
struct input_device *idev = iconn->idev;
gboolean connected = FALSE;
+ char address[18];
+
+ ba2str(&iconn->idev->dst, address);
+
+ DBG("Device %s disconnected", address);
/* Checking for ctrl_watch avoids a double g_io_channel_shutdown since
* it's likely that ctrl_watch_cb has been queued for dispatching in
@@ -415,6 +420,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data)
{
struct input_conn *iconn = data;
+ char address[18];
+
+ ba2str(&iconn->idev->dst, address);
+
+ DBG("Device %s disconnected", address);
/* Checking for intr_watch avoids a double g_io_channel_shutdown since
* it's likely that intr_watch_cb has been queued for dispatching in
@@ -811,13 +821,6 @@ static int input_device_connected(struct input_device *idev,
if (err < 0)
return err;
- iconn->intr_watch = g_io_add_watch(iconn->intr_io,
- G_IO_HUP | G_IO_ERR | G_IO_NVAL,
- intr_watch_cb, iconn);
- iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
- G_IO_HUP | G_IO_ERR | G_IO_NVAL,
- ctrl_watch_cb, iconn);
-
connected = TRUE;
emit_property_changed(idev->conn, idev->path, INPUT_DEVICE_INTERFACE,
"Connected", DBUS_TYPE_BOOLEAN, &connected);
@@ -854,6 +857,10 @@ static void interrupt_connect_cb(GIOChannel *chan, GError *conn_err,
dbus_message_unref(iconn->pending_connect);
iconn->pending_connect = NULL;
+ iconn->intr_watch = g_io_add_watch(iconn->intr_io,
+ G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ intr_watch_cb, iconn);
+
return;
failed:
@@ -913,6 +920,10 @@ static void control_connect_cb(GIOChannel *chan, GError *conn_err,
iconn->intr_io = io;
+ iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
+ G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ ctrl_watch_cb, iconn);
+
return;
failed:
@@ -1272,11 +1283,17 @@ int input_device_set_channel(const bdaddr_t *src, const bdaddr_t *dst, int psm,
if (iconn->ctrl_io)
return -EALREADY;
iconn->ctrl_io = g_io_channel_ref(io);
+ iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
+ G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ ctrl_watch_cb, iconn);
break;
case L2CAP_PSM_HIDP_INTR:
if (iconn->intr_io)
return -EALREADY;
iconn->intr_io = g_io_channel_ref(io);
+ iconn->intr_watch = g_io_add_watch(iconn->intr_io,
+ G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ intr_watch_cb, iconn);
break;
}
--
1.8.0.1

View File

@ -1,34 +0,0 @@
From b57c64f1aa5c51dd785f2572636b8c41ada06d72 Mon Sep 17 00:00:00 2001
From: Pavel Raiskup <praiskup@redhat.com>
Date: Tue, 30 Aug 2011 15:10:46 +0200
Subject: [PATCH] network: NULL dereference fix
Variable ifindex dereferenced on line 242 before null check on line 249.
---
network/common.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/network/common.c b/network/common.c
index 4704072..a223685 100644
--- a/network/common.c
+++ b/network/common.c
@@ -240,13 +240,15 @@ int bnep_if_down(const char *devname)
int bnep_add_to_bridge(const char *devname, const char *bridge)
{
- int ifindex = if_nametoindex(devname);
+ int ifindex;
struct ifreq ifr;
int sk, err;
if (!devname || !bridge)
return -EINVAL;
+ ifindex = if_nametoindex(devname);
+
sk = socket(AF_INET, SOCK_STREAM, 0);
if (sk < 0)
return -1;
--
1.8.0.1

View File

@ -1,27 +0,0 @@
From 57170b311f1468330f4a9961dc0b3ac45f97bc13 Mon Sep 17 00:00:00 2001
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Date: Sat, 30 Jun 2012 00:39:05 -0300
Subject: [PATCH] network: fix network Connect() method parameters
---
network/connection.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/network/connection.c b/network/connection.c
index 544ec3a..59423a9 100644
--- a/network/connection.c
+++ b/network/connection.c
@@ -554,7 +554,9 @@ static void path_unregister(void *data)
static const GDBusMethodTable connection_methods[] = {
{ GDBUS_ASYNC_METHOD("Connect",
- NULL, NULL, connection_connect) },
+ GDBUS_ARGS({"uuid", "s"}),
+ GDBUS_ARGS({"interface", "s"}),
+ connection_connect) },
{ GDBUS_METHOD("Disconnect",
NULL, NULL, connection_disconnect) },
{ GDBUS_METHOD("GetProperties",
--
1.8.0.1

View File

@ -1,118 +0,0 @@
From cca11542bcd4d1748c850806c1599ed1b76ea19a Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Sun, 17 Jun 2012 01:26:18 +0200
Subject: [PATCH 2/3] fakehid: Disconnect from PS3 remote after 10 mins
After 10 minutes, disconnect the PS3 BD Remote to avoid draining its
battery. This is consistent with its behaviour on the PS3.
Original patch by Ruslan N. Marchenko <rufferson@gmail.com>
---
input/device.h | 1 +
input/fakehid.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/input/device.h b/input/device.h
index ff52967..d8baa2c 100644
--- a/input/device.h
+++ b/input/device.h
@@ -33,6 +33,7 @@ struct fake_input {
int uinput; /* uinput socket */
int rfcomm; /* RFCOMM socket */
uint8_t ch; /* RFCOMM channel number */
+ guint timeout_id; /* Disconnect timeout ID */
gboolean (*connect) (struct input_conn *iconn, GError **err);
int (*disconnect) (struct input_conn *iconn);
void *priv;
diff --git a/input/fakehid.c b/input/fakehid.c
index 3181538..a125356 100644
--- a/input/fakehid.c
+++ b/input/fakehid.c
@@ -44,6 +44,9 @@
#include "fakehid.h"
#include "uinput.h"
+/* Timeout to get the PS3 remote disconnected, in seconds */
+#define PS3_REMOTE_TIMEOUT 10 * 60
+
enum ps3remote_special_keys {
PS3R_BIT_PS = 0,
PS3R_BIT_ENTER = 3,
@@ -141,6 +144,20 @@ static unsigned int ps3remote_keymap[] = {
[0xff] = KEY_MAX,
};
+static gboolean ps3_remote_timeout_cb(gpointer user_data);
+
+static void ps3remote_set_timeout(struct fake_input *fake, gboolean enable)
+{
+ if (enable) {
+ fake->timeout_id = g_timeout_add_seconds(PS3_REMOTE_TIMEOUT, ps3_remote_timeout_cb, fake);
+ } else {
+ if (fake->timeout_id > 0) {
+ g_source_remove(fake->timeout_id);
+ fake->timeout_id = 0;
+ }
+ }
+}
+
static int ps3remote_decode(char *buff, int size, unsigned int *value)
{
static unsigned int lastkey = 0;
@@ -203,6 +220,16 @@ error:
return -1;
}
+static gboolean
+ps3_remote_timeout_cb(gpointer user_data)
+{
+ struct fake_input *fake = (struct fake_input *) user_data;
+ input_device_request_disconnect(fake);
+ DBG("Disconnected PS3 BD Remote after timeout");
+ fake->timeout_id = 0;
+ return FALSE;
+}
+
static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
gpointer data)
{
@@ -221,6 +248,9 @@ static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
goto failed;
}
+ /* Remove the old timeout */
+ ps3remote_set_timeout(fake, FALSE);
+
fd = g_io_channel_unix_get_fd(chan);
memset(buff, 0, sizeof(buff));
@@ -256,6 +286,8 @@ static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
goto failed;
}
+ ps3remote_set_timeout(fake, TRUE);
+
return TRUE;
failed:
@@ -318,6 +350,8 @@ static int ps3remote_setup_uinput(struct fake_input *fake,
goto err;
}
+ ps3remote_set_timeout(fake, TRUE);
+
return 0;
err:
@@ -378,6 +412,8 @@ struct fake_input *fake_hid_connadd(struct fake_input *fake,
for (l = fake_hid->devices; l != NULL; l = l->next) {
old = l->data;
if (old->idev == fake->idev) {
+ if (fake->timeout_id > 0)
+ g_source_remove(fake->timeout_id);
g_free(fake);
fake = old;
fake_hid->connect(fake, NULL);
--
1.7.10

View File

@ -1,26 +0,0 @@
From a354165e58f937ee12c16ab48ce334b664c8f163 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Sun, 17 Jun 2012 01:29:01 +0200
Subject: [PATCH 3/3] fakehid: Use the same constant as declared
ps3remote_keymap[] uses 0xff as the max value, so should we.
---
input/fakehid.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/input/fakehid.c b/input/fakehid.c
index a125356..a758413 100644
--- a/input/fakehid.c
+++ b/input/fakehid.c
@@ -335,7 +335,7 @@ static int ps3remote_setup_uinput(struct fake_input *fake,
}
/* enabling keys */
- for (i = 0; i < 256; i++)
+ for (i = 0; i < 0xff; i++)
if (ps3remote_keymap[i] != KEY_RESERVED)
if (ioctl(fake->uinput, UI_SET_KEYBIT,
ps3remote_keymap[i]) < 0) {
--
1.7.10

View File

@ -15,27 +15,8 @@ Source6: pand.conf
Source7: rfcomm.init
Source8: bluez-uinput.modules
# https://bugzilla.redhat.com/show_bug.cgi?id=964031
Patch0: 0001-Allow-PulseAudio-to-connect-by-default.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=877998
Patch1: 0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=498756
Patch4: 0001-Activate-the-Socket-Mobile-CF-kit.patch
# http://thread.gmane.org/gmane.linux.bluez.kernel/2396
Patch5: 0001-Add-sixaxis-cable-pairing-plugin.patch
# PS3 BD Remote patches
Patch6: 0001-input-Add-helper-function-to-request-disconnect.patch
Patch7: 0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch
Patch8: 0003-fakehid-Use-the-same-constant-as-declared.patch
# Upstream patches
Patch9: 0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch
Patch10: 0001-Fix-GDBus-flags-after-conversion-to-macros.patch
Patch11: 0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch
Patch12: 0001-network-fix-network-Connect-method-parameters.patch
Patch13: 0001-network-NULL-dereference-fix.patch
# Ubuntu patches
Patch14: 0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch
Patch15: 0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch
BuildRequires: git
BuildRequires: flex