diff --git a/.bluez.metadata b/.bluez.metadata new file mode 100644 index 0000000..71ea444 --- /dev/null +++ b/.bluez.metadata @@ -0,0 +1 @@ +2ba46754eb2d79c4d491eb24c9883355324cd08a SOURCES/bluez-4.101.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch b/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch new file mode 100644 index 0000000..d2f9aef --- /dev/null +++ b/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch @@ -0,0 +1,25 @@ +From 9c6f914530c3873e88b55e3f7c18ce2b8b533e20 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +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 + diff --git a/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch b/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch new file mode 100644 index 0000000..b20c9c8 --- /dev/null +++ b/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch @@ -0,0 +1,554 @@ +From 64f9449656dbbb718d53a54ed8e7904e289280ec 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 + +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 + + 6 files changed, 428 insertions(+), 2 deletions(-) + create mode 100644 plugins/cable.c + +diff --git a/Makefile.am b/Makefile.am +index 53fcbe9..f831a72 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 6505ad3..3f59989 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 48b181e..45a4b15 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..fe758db +--- /dev/null ++++ b/plugins/cable.c +@@ -0,0 +1,382 @@ ++/* ++ * ++ * BlueZ - Bluetooth protocol stack for Linux ++ * ++ * Copyright (C) 2009 Bastien Nocera ++ * ++ * ++ * 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 ++#endif ++ ++#include ++#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1 ++#include ++#include ++#include ++#include ++#include ++ ++#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 */ ++ ++ write_trust(srcaddr, address, "[all]", 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 6e04faf..0488891 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); +-- +1.7.10.2 + diff --git a/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch b/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch new file mode 100644 index 0000000..817f5ac --- /dev/null +++ b/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch @@ -0,0 +1,46 @@ +From 0b5f5d0be6a1c9aa2d63e72e6a979f46cfbcc866 Mon Sep 17 00:00:00 2001 +From: Mathieu Trudel-Lapierre +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 + diff --git a/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch b/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch new file mode 100644 index 0000000..44bcd45 --- /dev/null +++ b/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch @@ -0,0 +1,84 @@ +From a66a557038c0e3d21bc4f14090efb497558a12be Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +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 + diff --git a/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch b/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch new file mode 100644 index 0000000..c1a5828 --- /dev/null +++ b/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch @@ -0,0 +1,51 @@ +From 2f92669697152848f2fae584d45fde5d80ea6eb8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Dalleau?= + +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 + diff --git a/SOURCES/0001-build-Enable-BIND_NOW.patch b/SOURCES/0001-build-Enable-BIND_NOW.patch new file mode 100644 index 0000000..280dbd1 --- /dev/null +++ b/SOURCES/0001-build-Enable-BIND_NOW.patch @@ -0,0 +1,31 @@ +From 6c01076f556922a63c73f0fcc4d62b97f9e1aca8 Mon Sep 17 00:00:00 2001 +From: Fedora Bluez maintainers +Date: Thu, 7 Nov 2013 09:23:35 +0100 +Subject: [PATCH] build: Enable BIND_NOW + +Partial RELRO means that the object is GNU_RELRO but not BIND_NOW. This +reduces the effectiveness of RELRO. bluez triggers this because it +enables PIE during the build, and rpmdiff takes this as an indicator +that the best possible hardening is desired. + +https://bugzilla.redhat.com/show_bug.cgi?id=983161 +--- + acinclude.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index ae58bbd..f0f8902 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -359,7 +359,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [ + + if (test "${pie_enable}" = "yes" && test "${ac_cv_prog_cc_pie}" = "yes"); then + misc_cflags="$misc_cflags -fPIC" +- misc_ldflags="$misc_ldflags -pie" ++ misc_ldflags="$misc_ldflags -pie -Wl,-z,now" + fi + + if (test "${debug_enable}" = "yes" && test "${ac_cv_prog_cc_g}" = "yes"); then +-- +1.8.3.1 + diff --git a/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch b/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch new file mode 100644 index 0000000..f8fcada --- /dev/null +++ b/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch @@ -0,0 +1,32 @@ +From d557e0d956d69318664ed5d1c3e4a765da24bc2a Mon Sep 17 00:00:00 2001 +From: Alexander Holler +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 + diff --git a/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch b/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch new file mode 100644 index 0000000..481b72c --- /dev/null +++ b/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch @@ -0,0 +1,37 @@ +From c70bf65af6e301f18063491b22112300c0fb9b89 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +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 + diff --git a/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch b/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch new file mode 100644 index 0000000..0b984d5 --- /dev/null +++ b/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch @@ -0,0 +1,101 @@ +From ea793cb9f744cd2942b66385118161b880de958a Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +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 + diff --git a/SOURCES/0001-network-NULL-dereference-fix.patch b/SOURCES/0001-network-NULL-dereference-fix.patch new file mode 100644 index 0000000..5b6e750 --- /dev/null +++ b/SOURCES/0001-network-NULL-dereference-fix.patch @@ -0,0 +1,34 @@ +From b57c64f1aa5c51dd785f2572636b8c41ada06d72 Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup +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 + diff --git a/SOURCES/0001-network-fix-network-Connect-method-parameters.patch b/SOURCES/0001-network-fix-network-Connect-method-parameters.patch new file mode 100644 index 0000000..05edb01 --- /dev/null +++ b/SOURCES/0001-network-fix-network-Connect-method-parameters.patch @@ -0,0 +1,27 @@ +From 57170b311f1468330f4a9961dc0b3ac45f97bc13 Mon Sep 17 00:00:00 2001 +From: Gustavo Padovan +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 + diff --git a/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch b/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch new file mode 100644 index 0000000..447e951 --- /dev/null +++ b/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch @@ -0,0 +1,29 @@ +From 3aca31788655582f3029b3c88ad6f468c4de07a2 Mon Sep 17 00:00:00 2001 +From: Tommy +Date: Thu, 10 Jan 2013 09:18:43 +0100 +Subject: [PATCH] work around Logitech diNovo Edge keyboard firmware issue + +https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/269851 +--- + scripts/bluetooth-hid2hci.rules | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/scripts/bluetooth-hid2hci.rules b/scripts/bluetooth-hid2hci.rules +index 0687c8a..2a571e5 100644 +--- a/scripts/bluetooth-hid2hci.rules ++++ b/scripts/bluetooth-hid2hci.rules +@@ -11,7 +11,10 @@ ATTR{bInterfaceClass}=="03", ATTR{bInterfaceSubClass}=="01", ATTR{bInterfaceProt + RUN+="hid2hci --method=dell --devpath=%p", ENV{HID2HCI_SWITCH}="1" + + # Logitech devices +-KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[34bc]", \ ++KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[3bc]", \ ++ RUN+="hid2hci --method=logitech-hid --devpath=%p" ++# Logitech, Inc. diNovo Edge Keyboard ++KERNEL=="hidraw*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c714", \ + RUN+="hid2hci --method=logitech-hid --devpath=%p" + + ENV{DEVTYPE}!="usb_device", GOTO="hid2hci_end" +-- +1.8.0.1 + diff --git a/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch b/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch new file mode 100644 index 0000000..8941126 --- /dev/null +++ b/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch @@ -0,0 +1,118 @@ +From cca11542bcd4d1748c850806c1599ed1b76ea19a Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +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 +--- + 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 + diff --git a/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch b/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch new file mode 100644 index 0000000..b6adf77 --- /dev/null +++ b/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch @@ -0,0 +1,26 @@ +From a354165e58f937ee12c16ab48ce334b664c8f163 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +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 + diff --git a/SOURCES/bluez-uinput.modules b/SOURCES/bluez-uinput.modules new file mode 100644 index 0000000..9f721d9 --- /dev/null +++ b/SOURCES/bluez-uinput.modules @@ -0,0 +1,6 @@ +#!/bin/sh + +if [ ! -c /dev/input/uinput ] ; then + exec /sbin/modprobe uinput >/dev/null 2>&1 +fi + diff --git a/SOURCES/bluez.gitignore b/SOURCES/bluez.gitignore new file mode 100644 index 0000000..137d2e5 --- /dev/null +++ b/SOURCES/bluez.gitignore @@ -0,0 +1,100 @@ +*.o +*.a +*.lo +*.la +*.so +.deps +.libs +.dirstamp +Makefile +Makefile.in +aclocal.m4 +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +depcomp +compile +install-sh +libtool +ltmain.sh +missing +stamp-h1 +autom4te.cache + +ylwrap +lexer.c +parser.h +parser.c + +bluez.pc +lib/bluetooth +src/builtin.h +src/bluetoothd +audio/telephony.c +sap/sap.c +scripts/bluetooth.rules +scripts/97-bluetooth.rules +scripts/97-bluetooth-hid2hci.rules + +sbc/sbcdec +sbc/sbcenc +sbc/sbcinfo +sbc/sbctester + +attrib/gatttool +tools/avctrl +tools/avinfo +tools/bccmd +tools/ciptool +tools/dfubabel +tools/dfutool +tools/hciattach +tools/hciconfig +tools/hcieventmask +tools/hcisecfilter +tools/hcitool +tools/hid2hci +tools/rfcomm +tools/l2ping +tools/ppporc +tools/sdptool +cups/bluetooth +test/agent +test/bdaddr +test/hciemu +test/attest +test/hstest +test/avtest +test/l2test +test/rctest +test/scotest +test/gaptest +test/sdptest +test/lmptest +test/ipctest +test/btiotest +test/test-textfile +test/uuidtest +test/mpris-player +compat/dund +compat/hidd +compat/pand +unit/test-eir +mgmt/btmgmt +monitor/btmon +emulator/btvirt + +doc/*.bak +doc/*.stamp +doc/bluez.* +doc/bluez-*.txt +doc/*.sgml +doc/version.xml +doc/xml +doc/html +src/bluetoothd.8 +src/bluetooth.service diff --git a/SOURCES/dund.conf b/SOURCES/dund.conf new file mode 100644 index 0000000..dec4a84 --- /dev/null +++ b/SOURCES/dund.conf @@ -0,0 +1 @@ +#DUNDARGS='--search --persist' diff --git a/SOURCES/dund.init b/SOURCES/dund.init new file mode 100755 index 0000000..6b2e563 --- /dev/null +++ b/SOURCES/dund.init @@ -0,0 +1,70 @@ +#!/bin/sh + +# chkconfig: - 26 89 + +### BEGIN INIT INFO +# Required-Start: bluetooth +# Default-Start: +# Short-Description: Bluetooth Dial-Up-Networking Daemon. +# Description: Bluetooth Dial-Up-Networking Daemon. Provides PPP over RFCOMM +# services. +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network + +[ "${NETWORKING}" = "yes" ] || exit 0 + +[ -r /etc/sysconfig/dund ] && . /etc/sysconfig/dund + +start() +{ + [ -z "$DUNDARGS" ] && exit 6 + + echo -n $"Starting dund: " + daemon /usr/bin/dund $DUNDARGS + RETVAL=$? + echo + [ $RETVAL = 0 ] && touch /var/lock/subsys/dund + return $RETVAL +} + +stop() +{ + echo -n $"Shutting down dund: " + /usr/bin/dund -K + killproc dund + RETVAL=$? + + rm -f /var/lock/subsys/dund + echo + return $RETVAL +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + force-reload|restart|reload) + stop + start + ;; + try-restart|condrestart) + [ -e /var/lock/subsys/dund ] && (stop; start) + ;; + status) + status dund + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" + exit 3 +esac + +exit $RETVAL diff --git a/SOURCES/pand.conf b/SOURCES/pand.conf new file mode 100644 index 0000000..ee1003a --- /dev/null +++ b/SOURCES/pand.conf @@ -0,0 +1,2 @@ +#PANDARGS='--listen --role NAP' +#PANDARGS='--search --cache --persist' diff --git a/SOURCES/pand.init b/SOURCES/pand.init new file mode 100755 index 0000000..5877e72 --- /dev/null +++ b/SOURCES/pand.init @@ -0,0 +1,73 @@ +#!/bin/sh + +# chkconfig: - 26 89 + +### BEGIN INIT INFO +# Required-Start: bluetooth +# Default-Start: +# Short-Description: Bluetooth Personal Area Networking Daemon. +# Description: Bluetooth Personal Area Networking Daemon. Provides network +# services over Bluetooth. +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network + +[ "${NETWORKING}" = "yes" ] || exit 0 + +[ -r /etc/sysconfig/pand ] && . /etc/sysconfig/pand + +start() +{ + [ -z "$PANDARGS" ] && exit 6 + [ -x /etc/bluetooth/pan/system-up ] && /etc/bluetooth/pan/system-up + + echo -n $"Starting pand: " + daemon /usr/bin/pand $PANDARGS + RETVAL=$? + echo + [ $RETVAL = 0 ] && touch /var/lock/subsys/pand + return $RETVAL +} + +stop() +{ + echo -n $"Shutting down pand: " + /usr/bin/pand -K + killproc pand + RETVAL=$? + [ -x /etc/bluetooth/pan/system-down ] && /etc/bluetooth/pan/system-down + rm -f /var/lock/subsys/pand + echo + return $RETVAL +} + +[ -f /usr/bin/pand ] || exit 0 + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + force-reload|restart|reload) + stop + start + ;; + try-restart|condrestart) + [ -e /var/lock/subsys/pand ] && (stop; start) + ;; + status) + status pand + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" + exit 3 +esac + +exit $RETVAL diff --git a/SOURCES/rfcomm.init b/SOURCES/rfcomm.init new file mode 100755 index 0000000..b1e53da --- /dev/null +++ b/SOURCES/rfcomm.init @@ -0,0 +1,65 @@ +#!/bin/sh + +# chkconfig: - 27 88 + +### BEGIN INIT INFO +# Required-Start: bluetooth +# Default-Start: +# Short-Description: Bluetooth RFCOMM setup. +# Description: Bluetooth RFCOMM setup. Sets up serial devices +# over Bluetooth. +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network + +[ "${NETWORKING}" = "yes" ] || exit 0 + +start() +{ + echo -n $"Starting rfcomm: " + rfcomm bind all + RETVAL=$? + echo + [ $RETVAL = 0 ] && touch /var/lock/subsys/rfcomm + return $RETVAL +} + +stop() +{ + echo -n $"Shutting down rfcomm: " + rfcomm release all + RETVAL=$? + + rm -f /var/lock/subsys/rfcomm + echo + return $RETVAL +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + force-reload|restart|reload) + stop + start + ;; + try-restart|condrestart) + [ -e /var/lock/subsys/rfcomm ] && (stop; start) + ;; + status) + RETVAL=1 + [ -e /var/lock/subsys/rfcomm ] && RETVAL=0 + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" + exit 3 +esac + +exit $RETVAL diff --git a/SPECS/bluez.spec b/SPECS/bluez.spec new file mode 100644 index 0000000..6d9dca9 --- /dev/null +++ b/SPECS/bluez.spec @@ -0,0 +1,848 @@ +Summary: Bluetooth utilities +Name: bluez +Version: 4.101 +Release: 9%{?dist} +License: GPLv2+ +Group: Applications/System +URL: http://www.bluez.org/ + +Source: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.gz +Source1: bluez.gitignore +Source3: dund.init +Source4: dund.conf +Source5: pand.init +Source6: pand.conf +Source7: rfcomm.init +Source8: bluez-uinput.modules + +# 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=983161 +Patch2: 0001-build-Enable-BIND_NOW.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 +BuildRequires: dbus-devel >= 0.90 +BuildRequires: libusb-devel, glib2-devel, alsa-lib-devel +BuildRequires: libsndfile-devel +BuildRequires: libcap-ng-devel +BuildRequires: readline-devel +# For cable pairing +BuildRequires: systemd-devel +# For cups +BuildRequires: cups-devel +%ifnarch s390 s390x +BuildRequires: libusbx-devel +%endif + +# For rebuild +BuildRequires: libtool autoconf automake + +Requires: bluez-libs = %{version}-%{release} +Requires: systemd +Requires: dbus >= 0.60 +Requires: hwdata >= 0.215 +%ifnarch s390 s390x +Requires: dbus-bluez-pin-helper +%endif +Requires(preun): /bin/systemctl +Requires(post): /bin/systemctl + +%description +Utilities for use in Bluetooth applications: + - hcitool + - hciattach + - hciconfig + - bluetoothd + - l2ping + - start scripts (Red Hat) + - pcmcia configuration files + +The BLUETOOTH trademarks are owned by Bluetooth SIG, Inc., U.S.A. + +%package libs +Summary: Libraries for use in Bluetooth applications +Group: System Environment/Libraries + +%package libs-devel +Summary: Development libraries for Bluetooth applications +Group: Development/Libraries +Requires: bluez-libs = %{version}-%{release} +Requires: pkgconfig + +%package cups +Summary: CUPS printer backend for Bluetooth printers +Group: System Environment/Daemons +Requires: bluez-libs = %{version}-%{release} +Requires: cups + +%package alsa +Summary: ALSA support for Bluetooth audio devices +Group: System Environment/Daemons +Requires: bluez-libs = %{version}-%{release} + +%package compat +Summary: Compatibility utilities for Bluetooth devices +Group: System Environment/Daemons +Requires: bluez-libs = %{version}-%{release} +Requires: bluez = %{version}-%{release} +Requires(preun): /sbin/chkconfig, /sbin/service +Requires(post): /sbin/chkconfig, /sbin/service + +%package hid2hci +Summary: Put HID proxying bluetooth HCI's into HCI mode +Group: System Environment/Daemons +Requires: bluez-libs = %{version}-%{release} +Requires: bluez = %{version}-%{release} + +%description cups +This package contains the CUPS backend + +%description alsa +This package contains ALSA support for Bluetooth audio devices + +%description libs +Libraries for use in Bluetooth applications. + +%description libs-devel +bluez-libs-devel contains development libraries and headers for +use in Bluetooth applications. + +%description compat +This package contains compatibility utilities for Bluetooth devices. +This includes hidd, dund and pand. + +%description hid2hci +Most allinone PC's and bluetooth keyboard / mouse sets which include a +bluetooth dongle, ship with a so called HID proxying bluetooth HCI. +The HID proxying makes the keyboard / mouse show up as regular USB HID +devices (after connecting using the connect button on the device + keyboard), +which makes them work without requiring any manual configuration. + +The bluez-hid2hci package contains the hid2hci utility and udev rules to +automatically switch supported Bluetooth devices into regular HCI mode. + +Install this package if you want to use the bluetooth function of the HCI +with other bluetooth devices like for example a mobile phone. + +Note that after installing this package you will first need to pair your +bluetooth keyboard and mouse with the bluetooth adapter before you can use +them again. Since you cannot use your bluetooth keyboard and mouse until +they are paired, this will require the use of a regular (wired) USB keyboard +and mouse. + +%prep + +%setup -q +git init +if [ -z "$GIT_COMMITTER_NAME" ]; then + git config user.email "bluez-owner@fedoraproject.org" + git config user.name "Fedora Bluez maintainers" +fi +cp %{SOURCE1} .gitignore +git add . +git commit -a -q -m "%{version} baseline." + +git am -p1 %{patches} < /dev/null + +%build +libtoolize -f -c +autoreconf -vif +%configure --enable-cups --enable-dfutool --enable-tools --enable-bccmd --enable-hidd --enable-pand --enable-dund --enable-hid2hci --with-ouifile=/usr/share/hwdata/oui.txt --with-systemdsystemunitdir=/lib/systemd/system --enable-wiimote +make V=1 + +%install +make install DESTDIR=$RPM_BUILD_ROOT +/sbin/ldconfig -n $RPM_BUILD_ROOT/%{_libdir} +# Remove autocrap and libtool droppings +rm -f $RPM_BUILD_ROOT/%{_libdir}/*.la \ + $RPM_BUILD_ROOT/%{_libdir}/alsa-lib/*.la \ + $RPM_BUILD_ROOT/%{_libdir}/bluetooth/plugins/*.la + +for a in dund pand rfcomm ; do + install -D -m0755 $RPM_SOURCE_DIR/$a.init $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/$a + if [ -e $RPM_SOURCE_DIR/$a.conf ] ; then + install -D -m0644 $RPM_SOURCE_DIR/$a.conf $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/$a + fi +done + +# Remove the cups backend from libdir, and install it in /usr/lib whatever the install +if test -d ${RPM_BUILD_ROOT}/usr/lib64/cups ; then + install -D -m0755 ${RPM_BUILD_ROOT}/usr/lib64/cups/backend/bluetooth ${RPM_BUILD_ROOT}%_cups_serverbin/backend/bluetooth + rm -rf ${RPM_BUILD_ROOT}%{_libdir}/cups +fi + +rm -f ${RPM_BUILD_ROOT}/%{_sysconfdir}/udev/*.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/*.rules +install -D -p -m0644 scripts/bluetooth-serial.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/97-bluetooth-serial.rules +install -D -p -m0644 scripts/bluetooth-hid2hci.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/97-bluetooth-hid2hci.rules +install -D -m0755 scripts/bluetooth_serial ${RPM_BUILD_ROOT}/lib/udev/bluetooth_serial + +install -D -m0755 %{SOURCE8} $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/modules/bluez-uinput.modules + +install -d -m0755 $RPM_BUILD_ROOT/%{_localstatedir}/lib/bluetooth + +mkdir -p $RPM_BUILD_ROOT/%{_libdir}/bluetooth/ + +install -D -p -m0644 audio/audio.conf ${RPM_BUILD_ROOT}/etc/bluetooth/ + +%post libs -p /sbin/ldconfig + +%post +if [ $1 -eq 1 ]; then + /bin/systemctl enable bluetooth.service >/dev/null 2>&1 || : +fi + +%postun libs -p /sbin/ldconfig + +%preun +if [ $1 -eq 0 ]; then + /bin/systemctl --no-reload disable bluetooth.service >/dev/null 2>&1 || : + /bin/systemctl stop bluetooth.service >/dev/null 2>&1 || : +fi + +%postun +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + /bin/systemctl try-restart bluetooth.service >/dev/null 2>&1 || : +fi + +%triggerun -- bluez < 4.94-4 +/bin/systemctl --no-reload enable bluetooth.service >/dev/null 2>&1 || : + +%post compat +/sbin/chkconfig --add dund +/sbin/chkconfig --add pand +/sbin/chkconfig --add rfcomm +if [ "$1" -ge "1" ]; then + /sbin/service dund condrestart >/dev/null 2>&1 || : + /sbin/service pand condrestart >/dev/null 2>&1 || : + /sbin/service rfcomm condrestart >/dev/null 2>&1 || : +fi +exit 0 + +%preun compat +if [ "$1" = "0" ]; then + /sbin/service dund stop >/dev/null 2>&1 || : + /sbin/service pand stop >/dev/null 2>&1 || : + /sbin/service rfcomm stop >/dev/null 2>&1 || : + /sbin/chkconfig --del dund + /sbin/chkconfig --del pand + /sbin/chkconfig --del rfcomm +fi + +%post hid2hci +/sbin/udevadm trigger --subsystem-match=usb + +%files +%defattr(-,root,root,-) +%{_bindir}/ciptool +%{_bindir}/dfutool +%{_bindir}/hcitool +%{_bindir}/l2ping +%{_bindir}/rfcomm +%{_bindir}/sdptool +%{_bindir}/gatttool +%{_sbindir}/* +%{_mandir}/man1/ciptool.1.gz +%{_mandir}/man1/dfutool.1.gz +%{_mandir}/man1/hcitool.1.gz +%{_mandir}/man1/rfcomm.1.gz +%{_mandir}/man1/sdptool.1.gz +%{_mandir}/man8/* +%exclude %{_mandir}/man8/hid2hci.8* +%dir %{_sysconfdir}/bluetooth/ +%config(noreplace) %{_sysconfdir}/bluetooth/main.conf +%config(noreplace) %{_sysconfdir}/bluetooth/audio.conf +%config(noreplace) %{_sysconfdir}/sysconfig/modules/bluez-uinput.modules +%config %{_sysconfdir}/dbus-1/system.d/bluetooth.conf +%{_libdir}/bluetooth/ +/lib/udev/bluetooth_serial +/lib/udev/rules.d/97-bluetooth-serial.rules +%{_localstatedir}/lib/bluetooth +%{_datadir}/dbus-1/system-services/org.bluez.service +/usr/lib/systemd/system/bluetooth.service + +%files libs +%defattr(-,root,root,-) +%{_libdir}/libbluetooth.so.* +%doc AUTHORS COPYING INSTALL ChangeLog README + +%files libs-devel +%defattr(-,root,root,-) +%{_libdir}/libbluetooth.so +%dir %{_includedir}/bluetooth +%{_includedir}/bluetooth/* +%{_libdir}/pkgconfig/bluez.pc + +%files cups +%defattr(-,root,root,-) +%_cups_serverbin/backend/bluetooth + +%files alsa +%defattr(-,root,root,-) +%{_libdir}/alsa-lib/*.so +%{_datadir}/alsa/bluetooth.conf + +%files compat +%defattr(-,root,root,-) +%{_bindir}/dund +%{_bindir}/pand +%{_bindir}/hidd +%config(noreplace) %{_sysconfdir}/bluetooth/rfcomm.conf +%{_sysconfdir}/rc.d/init.d/dund +%{_sysconfdir}/rc.d/init.d/rfcomm +%{_sysconfdir}/rc.d/init.d/pand +%config(noreplace) %{_sysconfdir}/sysconfig/dund +%config(noreplace) %{_sysconfdir}/sysconfig/pand +%{_mandir}/man1/dund.1.gz +%{_mandir}/man1/hidd.1.gz +%{_mandir}/man1/pand.1.gz + +%files hid2hci +%defattr(-,root,root,-) +/usr/lib/udev/hid2hci +%{_mandir}/man8/hid2hci.8* +/lib/udev/rules.d/97-bluetooth-hid2hci.rules +%exclude /usr/lib/udev/rules.d/97-bluetooth-hid2hci.rules + +%changelog +* Thu Nov 07 2013 Bastien Nocera 4.101-9 +- Add linker flags to BIND_NOW +Resolves: #983161 + +* Mon Jul 22 2013 Bastien Nocera 4.101-8 +- Remove GStreamer plugins, they're already in GStreamer 1.0 + +* Tue Jun 25 2013 Bastien Nocera 4.101-7 +- Remove socket interface enablement for A2DP (#964031) + +* Mon Jan 28 2013 Peter Robinson 4.101-6 +- Add -vif to autoreconf to fix build issues + +* Thu Jan 10 2013 Bastien Nocera 4.101-5 +- Use git to manage distro patches +- Add numerous upstream and downstream patches (#892929) + +* Wed Nov 21 2012 Bastien Nocera 4.101-4 +- Clean up requires and build requires +- Use CUPS macro (#772236) +- Enable audio socket so a2dp works in PulseAudio again (#874015) +- Fix hid2hci not working with recent kernels (#877998) + +* Wed Aug 15 2012 Bastien Nocera 4.101-3 +- Enable pairing Wiimote support (#847481) + +* Wed Jul 18 2012 Fedora Release Engineering - 4.101-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sun Jun 17 2012 Bastien Nocera 4.100-2 +- Add PS3 BD Remote patches (power saving) + +* Thu Jun 14 2012 Bastien Nocera 4.100-1 +- Update to 4.100 + +* Fri Jun 1 2012 Peter Robinson - 4.99-2 +- Add patch for udev change to fix FTBFS on rawhide +- Drop sbc patch as fixed in gcc 4.7 final + +* Tue Mar 06 2012 Bastien Nocera 4.99-1 +- Update to 4.99 + +* Tue Feb 28 2012 Petr Pisar - 4.98-3 +- Make headers compilable with g++ 4.7 (bug #791292) + +* Fri Feb 24 2012 Peter Robinson 4.98-2 +- Add mmx patch to fix build of sbc component +- clean up spec, drop ancient obsoletes + +* Fri Jan 13 2012 Bastien Nocera 4.98-1 +- Update to 4.98 + +* Thu Jan 12 2012 Fedora Release Engineering - 4.97-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 30 2011 Bastien Nocera 4.97-1 +- Update to 4.97 + +* Mon Sep 5 2011 Hans de Goede 4.96-3 +- Put hid2hci into its own (optional) subpackage, so that people who + just want to use their HID proxying HCI with the keyboard and mouse + it came with, will have things working out of the box. +- Put udev rules in /lib/udev, where package installed udev rules belong + +* Mon Aug 29 2011 Hans de Goede 4.96-2 +- hid2hci was recently removed from udev and added to bluez in 4.93, + udev in Fedora-16 no longer has hid2hci -> enable it in our bluez builds. + This fixes bluetooth not working on machines where the bluetooth hci + initially shows up as a hid device, such as with many Dell laptops. + +* Mon Aug 01 2011 Bastien Nocera 4.96-1 +- Update to 4.96 + +* Tue Jul 05 2011 Bastien Nocera 4.95-1 +- Update to 4.95 + +* Tue Jun 28 2011 Lennart Poettering - 4.94-4 +- Enable bluetoothd on all upgrades from 4.87-6 and older, in order to fix up broken F15 installations + +* Thu Jun 23 2011 Bastien Nocera 4.94-3 +- Update patches to apply correctly +- First compilable version with hostnamed support + +* Mon Jun 20 2011 Lennart Poettering - 4.94-2 +- Enable bluetoothd by default +- Follow-up on https://bugzilla.redhat.com/show_bug.cgi?id=694519 also fixing upgrades + +* Wed Jun 01 2011 Bastien Nocera 4.94-1 +- Update to 4.94 + +* Wed May 25 2011 Bastien Nocera 4.93-1 +- Update to 4.93 + +* Thu Apr 7 2011 Lennart Poettering - 4.90-2 +- Update systemd patch to make it possible to disable bluez + +* Thu Mar 17 2011 Bastien Nocera 4.90-1 +- Update to 4.90 + +* Mon Feb 21 2011 Bastien Nocera 4.89-1 +- Update to 4.89 + +* Mon Feb 14 2011 Bastien Nocera 4.88-1 +- Update to 4.88 + +* Mon Feb 07 2011 Fedora Release Engineering - 4.87-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jan 26 2011 Bastien Nocera 4.87-1 +- Update to 4.87 + +* Thu Jan 20 2011 Bastien Nocera 4.86-1 +- Update to 4.86 + +* Thu Jan 13 2011 Bastien Nocera 4.85-1 +- Update to 4.85 + +* Sun Dec 19 2010 Bastien Nocera 4.82-1 +- Update to 4.82 + +* Wed Dec 01 2010 Bastien Nocera 4.81-1 +- Update to 4.81 + +* Mon Nov 22 2010 Bastien Nocera 4.80-1 +- Update to 4.80 + +* Tue Nov 09 2010 Bastien Nocera 4.79-1 +- Update to 4.79 + +* Sat Nov 06 2010 Bastien Nocera 4.78-1 +- Update to 4.78 + +* Wed Oct 27 2010 Bastien Nocera 4.77-1 +- Update to 4.77 + +* Sat Oct 16 2010 Bastien Nocera 4.76-1 +- Update to 4.76 + +* Tue Oct 05 2010 Bastien Nocera 4.74-1 +- Update to 4.74 + +* Mon Oct 04 2010 Bastien Nocera 4.73-1 +- Update to 4.73 + +* Wed Sep 29 2010 jkeating - 4.72-2 +- Rebuilt for gcc bug 634757 + +* Wed Sep 22 2010 Bastien Nocera 4.72-1 +- Update to 4.72 + +* Fri Sep 17 2010 Bill Nottingham 4.71-4 +- sync release number (but not package) with F-14 + +* Tue Sep 14 2010 Bastien Nocera 4.71-3 +- systemd hookup and cleanups from Lennart + +* Thu Sep 09 2010 Bastien Nocera 4.71-1 +- Update to 4.71 + +* Thu Aug 26 2010 Bastien Nocera 4.70-1 +- Update to 4.70 + +* Sat Jul 31 2010 Orcan Ogetbil 4.69-4 +- Re-add Requires: dbus-bluez-pin-helper, since blueman is now in + +* Sat Jul 31 2010 Orcan Ogetbil 4.69-3 +- Comment out Requires: dbus-bluez-pin-helper for bootstrapping. Otherwise + it drags in the old blueman, built against python-2.6 +* Fri Jul 23 2010 Bastien Nocera 4.69-2 +- Don't allow installing bluez-compat on its own + +* Fri Jul 16 2010 Bastien Nocera 4.69-1 +- Update to 4.69 + +* Sun Jul 11 2010 Dan Horák 4.66-3 +- don't require the pin helper on s390(x) now, we can disable the whole + bluetooth stack in the future + +* Mon Jun 21 2010 Bastien Nocera 4.66-2 +- Move hidd, pand and dund man pages to the -compat + sub-package (#593578) + +* Mon Jun 14 2010 Bastien Nocera 4.66-1 +- Update to 4.66 + +* Mon May 24 2010 Bastien Nocera 4.65-1 +- Update to 4.65 + +* Thu Apr 29 2010 Bastien Nocera 4.64-1 +- Update to 4.64 + +* Mon Apr 12 2010 Bastien Nocera 4.63-3 +- And actually apply the aforementioned patch + +* Mon Apr 12 2010 Bastien Nocera 4.63-2 +- Fix pairing and using mice, due to recent BtIO changes + +* Fri Mar 26 2010 Bastien Nocera 4.63-1 +- Update to 4.63 + +* Mon Mar 08 2010 Bastien Nocera 4.62-1 +- Update to 4.62 + +* Mon Feb 15 2010 Bastien Nocera 4.61-1 +- Update to 4.61 +- Remove Wacom tablet enabler, now in the kernel +- Fix linking with new DSO rules (#564799) + +* Mon Feb 15 2010 Bastien Nocera 4.60-2 +- Fix typo in init script (#558993) + +* Sun Jan 10 2010 Bastien Nocera 4.60-1 +- Update to 4.60 + +* Fri Dec 25 2009 Bastien Nocera 4.59-1 +- Update to 4.59 + +* Mon Nov 16 2009 Bastien Nocera 4.58-1 +- Update to 4.58 + +* Mon Nov 02 2009 Bastien Nocera 4.57-2 +- Move the rfcomm.conf to the compat package, otherwise + the comments at the top of it are confusing + +* Sat Oct 31 2009 Bastien Nocera 4.57-1 +- Update to 4.57 + +* Sat Oct 10 2009 Bastien Nocera 4.56-1 +- Update to 4.56 + +* Fri Oct 09 2009 Bastien Nocera 4.55-2 +- Update cable pairing plugin to use libudev + +* Mon Oct 05 2009 Bastien Nocera 4.55-1 +- Update to 4.55 +- Add libcap-ng support to drop capabilities (#517660) + +* Thu Sep 24 2009 Bastien Nocera 4.54-1 +- Update to 4.54 + +* Wed Sep 16 2009 Bastien Nocera 4.53-2 +- Update cable plugin for gudev changes + +* Thu Sep 10 2009 Bastien Nocera 4.53-1 +- Update to 4.53 + +* Fri Sep 04 2009 Bastien Nocera 4.52-1 +- Update to 4.52 + +* Thu Sep 03 2009 Bastien Nocera 4.51-1 +- Update to 4.51 + +* Tue Sep 01 2009 Bastien Nocera 4.50-2 +- Remove obsoleted patches +- Add another CUPS backend patch +- Update cable pairing patch for new build system + +* Tue Sep 01 2009 Bastien Nocera 4.50-1 +- Update to 4.50 + +* Tue Aug 25 2009 Karsten Hopp 4.47-6 +- don't buildrequire libusb1 on s390* + +* Tue Aug 11 2009 Bastien Nocera 4.47-5 +- More upstream CUPS fixes + +* Tue Aug 11 2009 Bastien Nocera 4.47-4 +- Fix cups discovery the first time we discover a device + +* Mon Aug 10 2009 Ville Skyttä - 4.47-3 +- Use bzipped upstream tarball. + +* Wed Aug 05 2009 Bastien Nocera 4.47-2 +- Remove hid2hci calls, they're in udev now +- Work-around udev bug, bluetoothd wasn't getting enabled + on coldplug + +* Sun Aug 02 2009 Bastien Nocera 4.47-1 +- Update to 4.47 + +* Wed Jul 29 2009 Bastien Nocera 4.46-3 +- Add rfkill plugin to restore the state of the adapters + after coming back from a blocked adapter + +* Fri Jul 24 2009 Fedora Release Engineering - 4.46-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sun Jul 19 2009 Bastien Nocera 4.46-1 +- Update to 4.46 + +* Wed Jul 08 2009 Bastien Nocera 4.45-1 +- Update to 4.45 + +* Tue Jul 07 2009 Bastien Nocera 4.44-1 +- Update to 4.44 + +* Fri Jul 03 2009 Bastien Nocera 4.43-2 +- Up the required udev requires so bluetoothd gets started + on boot when an adapter is present + +* Fri Jul 03 2009 Bastien Nocera 4.43-1 +- Update to 4.43 + +* Sun Jun 21 2009 Bastien Nocera 4.42-2 +- Update to 4.42 + +* Thu Jun 11 2009 Bastien Nocera 4.41-2 +- Switch to on-demand start/stop using udev + +* Mon Jun 08 2009 Bastien Nocera 4.41-1 +- Update to 4.41 + +* Fri Jun 05 2009 Bastien Nocera 4.40-2 +- Add patch to allow Sixaxis pairing + +* Tue May 19 2009 Bastien Nocera 4.40-1 +- Update to 4.40 + +* Sat May 09 2009 Bastien Nocera 4.39-1 +- Update to 4.39 + +* Tue May 05 2009 Petr Lautrbach 4.38-3 +- Start/stop the bluetooth service via udev (#484345) + +* Tue May 05 2009 Bastien Nocera 4.38-2 +- Add patch to activate the Socket Mobile CF kit (#498756) + +* Mon May 04 2009 Bastien Nocera 4.38-1 +- Update to 4.38 + +* Wed Apr 29 2009 Bastien Nocera 4.37-2 +- Split off dund, pand, hidd, and rfcomm helper into a compat package + (#477890, #473892) + +* Thu Apr 23 2009 - Bastien Nocera - 4.37-1 +- Update to 4.37 + +* Fri Apr 17 2009 - Bastien Nocera - 4.36-1 +- Update to 4.36 + +* Sat Apr 11 2009 - Bastien Nocera - 4.35-1 +- Update to 4.35 + +* Fri Apr 03 2009 - Bastien Nocera - 4.34-3 +- Avoid disconnecting audio devices straight after they're connected + +* Fri Apr 03 2009 - Bastien Nocera - 4.34-2 +- Don't crash when audio devices are registered and the adapter + is removed + +* Sun Mar 29 2009 - Bastien Nocera - 4.34-1 +- Update to 4.34 + +* Tue Mar 24 2009 - Bastien Nocera - 4.33-11 +- Fix a possible crasher + +* Mon Mar 16 2009 - Bastien Nocera - 4.33-1 +- Update to 4.33 + +* Sat Mar 14 2009 - Bastien Nocera - 4.32-10 +- Fix a couple of warnings in the CUPS/BlueZ 4.x patch + +* Fri Mar 13 2009 - Bastien Nocera - 4.32-9 +- Switch Wacom Bluetooth tablet to mode 2 + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-8 +- Port CUPS backend to BlueZ 4.x + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-7 +- A (slightly) different fix for parsing to XML when it contains a NULL + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-6 +- Fix sdp_copy_record(), so records are properly exported through D-Bus + +* Fri Mar 06 2009 - Bastien Nocera - 4.32-5 +- Fix SDP parsing to XML when it contains NULLs + +* Thu Mar 05 2009 - Bastien Nocera - 4.32-4 +- Work-around broken devices that export their names in ISO-8859-1 + (#450081) + +* Thu Mar 05 2009 - Bastien Nocera - 4.32-3 +- Fix permissions on the udev rules (#479348) + +* Wed Mar 04 2009 - Bastien Nocera - 4.32-2 +- Own /usr/lib*/bluetooth and children (#474632) + +* Mon Mar 2 2009 Lennart Poettering - 4.32-1 +- Update to 4.32 + +* Thu Feb 26 2009 Lennart Poettering - 4.31-1 +- Update to 4.31 + +* Mon Feb 23 2009 Fedora Release Engineering - 4.30-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 - Bastien Nocera - 4.30-2 +- Fix the cups backend being a libtool stub + +* Thu Feb 12 2009 - Bastien Nocera - 4.30-1 +- Update to 4.30 + +* Thu Feb 12 2009 Karsten Hopp 4.29-3 +- disable 0001-Add-icon-for-other-audio-device.patch, already upstream + +* Thu Feb 12 2009 Karsten Hopp 4.29-2 +- bluez builds fine on s390(x) and the packages are required to build + other packages, drop ExcludeArch + +* Mon Feb 09 2009 - Bastien Nocera - 4.29-1 +- Update to 4.29 + +* Mon Feb 02 2009 - Bastien Nocera - 4.28-1 +- Update to 4.28 + +* Mon Jan 19 2009 - Bastien Nocera - 4.27-1 +- Update to 4.27 + +* Fri Jan 09 2009 - Bastien Nocera - 4.26-1 +- Update to 4.26 + +* Sat Jan 03 2009 - Bastien Nocera - 4.25-1 +- Update to 4.25 + +* Tue Dec 09 2008 - Bastien Nocera - 4.22-2 +- Fix D-Bus configuration for latest D-Bus (#475069) + +* Mon Dec 08 2008 - Bastien Nocera - 4.22-1 +- Update to 4.22 + +* Mon Dec 01 2008 - Bastien Nocera - 4.21-1 +- Update to 4.21 + +* Fri Nov 21 2008 - Bastien Nocera - 4.19-1 +- Update to 4.19 + +* Mon Nov 17 2008 - Bastien Nocera - 4.18-1 +- Update to 4.18 + +* Mon Oct 27 2008 - Bastien Nocera - 4.17-2 +- Own /var/lib/bluetooth (#468717) + +* Sun Oct 26 2008 - Bastien Nocera - 4.17-1 +- Update to 4.17 + +* Tue Oct 21 2008 - Bastien Nocera - 4.16-1 +- Update to 4.16 + +* Mon Oct 20 2008 - Bastien Nocera - 4.15-1 +- Update to 4.15 + +* Fri Oct 17 2008 - Bastien Nocera - 4.14-2 +- Add script to autoload uinput on startup, so the PS3 remote + works out-of-the-box + +* Fri Oct 17 2008 - Bastien Nocera - 4.14-1 +- Update to 4.14 + +* Tue Oct 14 2008 - Bastien Nocera - 4.13-3 +- Update udev rules (#246840) + +* Mon Oct 13 2008 - Bastien Nocera - 4.13-2 +- Fix PS3 BD remote input event generation + +* Fri Oct 10 2008 - Bastien Nocera - 4.13-1 +- Update to 4.13 + +* Mon Oct 06 2008 - Bastien Nocera - 4.12-1 +- Update to 4.12 + +* Sat Oct 04 2008 - Bastien Nocera - 4.11-1 +- Update to 4.11 + +* Fri Oct 03 2008 - Bastien Nocera - 4.10-1 +- Update to 4.10 + +* Mon Sep 29 2008 - Bastien Nocera - 4.9-1 +- Update to 4.9 + +* Mon Sep 29 2008 - Bastien Nocera - 4.8-1 +- Update to 4.8 + +* Fri Sep 26 2008 - Bastien Nocera - 4.7-1 +- Update to 4.7 + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-4 +- Fix patch application + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-3 +- Add fuzz + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-2 +- Fix possible crasher on resume from suspend + +* Sun Sep 14 2008 - David Woodhouse - 4.6-1 +- Update to 4.6 + +* Fri Sep 12 2008 - David Woodhouse - 4.5-4 +- SDP browse fixes + +* Fri Sep 12 2008 - David Woodhouse - 4.5-3 +- Bluez-alsa needs to provide/obsolete bluez-utils-alsa +- Use versioned Obsoletes: + +* Fri Sep 12 2008 - David Woodhouse - 4.5-2 +- Change main utils package name to 'bluez'; likewise its subpackages +- Remove references to obsolete initscripts (hidd,pand,dund) + +* Fri Sep 12 2008 - Bastien Nocera - 4.5-1 +- Update to 4.5 +- Fix initscript to actually start bluetoothd by hand +- Add chkconfig information to the initscript + +* Tue Sep 09 2008 - David Woodhouse - 4.4-2 +- Fix rpmlint problems +- Fix input device handling + +* Tue Sep 09 2008 - Bastien Nocera - 4.4-1 +- Update to 4.4 +- Update source address, and remove unneeded deps (thanks Marcel) + +* Mon Aug 11 2008 - Bastien Nocera - 4.1-1 +- Initial build