diff --git a/0001-Add-sixaxis-cable-pairing-plugin.patch b/0001-Add-sixaxis-cable-pairing-plugin.patch index 34d054f..5724fe9 100644 --- a/0001-Add-sixaxis-cable-pairing-plugin.patch +++ b/0001-Add-sixaxis-cable-pairing-plugin.patch @@ -1,4 +1,4 @@ -From 450e51afd466497f7d2c981a61bf56c5fb7883a8 Mon Sep 17 00:00:00 2001 +From 14d6380cb9921ea09dc63d9401cb31c8f691449e Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 1 Sep 2009 17:32:48 +0100 Subject: [PATCH] Add sixaxis cable-pairing plugin @@ -12,8 +12,12 @@ address, and added to the database of the current default adapter. Makefile.am | 9 +- acinclude.m4 | 16 +++ configure.ac | 1 + - plugins/cable.c | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 409 insertions(+), 2 deletions(-) + plugins/cable.c | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/adapter.c | 19 +++ + src/adapter.h | 3 + + src/manager.c | 5 + + src/manager.h | 1 + + 8 files changed, 434 insertions(+), 2 deletions(-) create mode 100644 plugins/cable.c diff --git a/Makefile.am b/Makefile.am @@ -104,7 +108,7 @@ index 287f07d..aab0c15 100644 + AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes") ]) diff --git a/configure.ac b/configure.ac -index 50617fd..3348ee8 100644 +index 5f09cb6..0f73314 100644 --- a/configure.ac +++ b/configure.ac @@ -40,6 +40,7 @@ AC_PATH_GLIB @@ -117,10 +121,10 @@ index 50617fd..3348ee8 100644 diff --git a/plugins/cable.c b/plugins/cable.c new file mode 100644 -index 0000000..21f7257 +index 0000000..e8cff76 --- /dev/null +++ b/plugins/cable.c -@@ -0,0 +1,385 @@ +@@ -0,0 +1,382 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux @@ -159,8 +163,8 @@ index 0000000..21f7257 +#include "plugin.h" +#include "log.h" + -+#include "manager.h" +#include "adapter.h" ++#include "manager.h" +#include "device.h" + +#include "storage.h" @@ -186,8 +190,11 @@ index 0000000..21f7257 + char srcaddr[18]; + + device = adapter_find_device(adapter, address); -+ if (device == NULL) -+ device = adapter_create_device(conn, adapter, address, FALSE); ++ if (device == NULL) { ++ device = device_create(conn, adapter, address, DEVICE_TYPE_UNKNOWN); ++ if (device != NULL) ++ adapter_create_device_for_device(conn, adapter, device); ++ } + if (device != NULL) { + device_set_temporary(device, FALSE); + device_set_name(device, name); @@ -337,7 +344,6 @@ index 0000000..21f7257 +static void handle_device_plug(struct udev_device *udevice) +{ + struct btd_adapter *adapter; -+ int adapter_id; + guint i; + + libusb_device **list, *usbdev; @@ -355,12 +361,7 @@ index 0000000..21f7257 + DBG("Found Sixaxis device"); + + /* Look for the default adapter */ -+ adapter_id = manager_get_default_adapter(); -+ if (adapter_id == -1) { -+ DBG("No adapters, exiting"); -+ return; -+ } -+ adapter = manager_find_adapter_by_id(adapter_id); ++ adapter = manager_get_default_adapter(); + if (adapter == NULL) + return; + @@ -506,6 +507,78 @@ index 0000000..21f7257 + +BLUETOOTH_PLUGIN_DEFINE(cable, VERSION, + BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit) +diff --git a/src/adapter.c b/src/adapter.c +index 5118306..6318d12 100644 +--- a/src/adapter.c ++++ b/src/adapter.c +@@ -1056,6 +1056,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 a02f61c..472cc0e 100644 +--- a/src/adapter.h ++++ b/src/adapter.h +@@ -133,6 +133,9 @@ int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr); + void adapter_emit_device_found(struct btd_adapter *adapter, + struct remote_dev_info *dev, + uint8_t *eir_data, size_t eir_length); ++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); + void adapter_update_local_name(struct btd_adapter *adapter, const char *name); + void adapter_service_insert(const bdaddr_t *bdaddr, void *rec); +diff --git a/src/manager.c b/src/manager.c +index c8ec7e5..1bfc021 100644 +--- a/src/manager.c ++++ b/src/manager.c +@@ -245,6 +245,11 @@ static void manager_update_adapters(void) + g_free(array); + } + ++struct btd_adapter *manager_get_default_adapter(void) ++{ ++ return manager_find_adapter_by_id(default_adapter_id); ++} ++ + static void manager_remove_adapter(struct btd_adapter *adapter) + { + uint16_t dev_id = adapter_get_dev_id(adapter); +diff --git a/src/manager.h b/src/manager.h +index e6d5dd9..894dcb7 100644 +--- a/src/manager.h ++++ b/src/manager.h +@@ -35,6 +35,7 @@ struct btd_adapter *manager_find_adapter(const bdaddr_t *sba); + struct btd_adapter *manager_find_adapter_by_address(const char *address); + struct btd_adapter *manager_find_adapter_by_path(const char *path); + struct btd_adapter *manager_find_adapter_by_id(int id); ++struct btd_adapter *manager_get_default_adapter(void); + GSList *manager_get_adapters(void); + int manager_register_adapter(int id, gboolean devup); + int manager_unregister_adapter(int id); -- 1.7.3.2