summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2017-11-08 12:24:52 +0100
committerSzymon Janc <szymon.janc@codecoup.pl>2017-11-30 09:53:45 +0100
commit7bb73f092aaf14f882de9735f8c2b3064b1f6b4c (patch)
tree7482852e36b845ffbef2f44269d1e72ecb46b00c /plugins
parent1f17efbac0d5b0e475073a3b98bcda9c23c8e8c7 (diff)
downloadbluez-7bb73f092aaf14f882de9735f8c2b3064b1f6b4c.tar.gz
plugins/sixaxis: Don't ignore previously setup devices
1. Setup PS3 controller through cable pairing 2. Remove device from BlueZ's database 3. Plug original PS3 controller back As we don't change the master bdaddr on the device itself, the joypad will likely be trying to connect to BlueZ, and fail to connect after a small period of time. But the device will appear connected just long enough for the cable pairing to say "hey, I already have this setup". Ideally, we would test for whether the device is temporary, or already trusted, but testing for whether we've setup its internal services *and* it's connected, rather than *or*, is sufficient.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/sixaxis.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c
index 5ef2c1a21..9290dbe74 100644
--- a/plugins/sixaxis.c
+++ b/plugins/sixaxis.c
@@ -344,16 +344,13 @@ static bool setup_device(int fd, const char *sysfs_path,
if (get_device_bdaddr(fd, &device_bdaddr, cp->type) < 0)
return false;
- /* This can happen if controller was plugged while already connected
- * eg. to charge up battery. */
+ /* This can happen if controller was plugged while already setup and
+ * connected eg. to charge up battery. */
device = btd_adapter_find_device(adapter, &device_bdaddr,
BDADDR_BREDR);
- if (device && btd_device_is_connected(device))
- return false;
-
- device = btd_adapter_get_device(adapter, &device_bdaddr, BDADDR_BREDR);
-
- if (g_slist_find_custom(btd_device_get_uuids(device), HID_UUID,
+ if (device != NULL &&
+ btd_device_is_connected(device) &&
+ g_slist_find_custom(btd_device_get_uuids(device), HID_UUID,
(GCompareFunc)strcasecmp)) {
char device_addr[18];
ba2str(&device_bdaddr, device_addr);
@@ -361,6 +358,8 @@ static bool setup_device(int fd, const char *sysfs_path,
return false;
}
+ device = btd_adapter_get_device(adapter, &device_bdaddr, BDADDR_BREDR);
+
info("sixaxis: setting up new device");
btd_device_device_set_name(device, cp->name);