And provide wrappers to prepare for the addition of other device types. --- plugins/sixaxis.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c index 3e8ac06ca..b62834d72 100644 --- a/plugins/sixaxis.c +++ b/plugins/sixaxis.c @@ -55,13 +55,14 @@ struct authentication_closure { struct btd_device *device; int fd; char device_addr[18]; + CablePairingType type; }; static struct udev *ctx = NULL; static struct udev_monitor *monitor = NULL; static guint watch_id = 0; -static int get_device_bdaddr(int fd, bdaddr_t *bdaddr) +static int sixaxis_get_device_bdaddr(int fd, bdaddr_t *bdaddr) { uint8_t buf[18]; int ret; @@ -82,7 +83,14 @@ static int get_device_bdaddr(int fd, bdaddr_t *bdaddr) return 0; } -static int get_master_bdaddr(int fd, bdaddr_t *bdaddr) +static int get_device_bdaddr(int fd, bdaddr_t *bdaddr, CablePairingType type) +{ + if (type == CABLE_PAIRING_SIXAXIS) + return sixaxis_get_device_bdaddr(fd, bdaddr); + return -1; +} + +static int sixaxis_get_master_bdaddr(int fd, bdaddr_t *bdaddr) { uint8_t buf[8]; int ret; @@ -103,7 +111,14 @@ static int get_master_bdaddr(int fd, bdaddr_t *bdaddr) return 0; } -static int set_master_bdaddr(int fd, const bdaddr_t *bdaddr) +static int get_master_bdaddr(int fd, bdaddr_t *bdaddr, CablePairingType type) +{ + if (type == CABLE_PAIRING_SIXAXIS) + return sixaxis_get_master_bdaddr(fd, bdaddr); + return -1; +} + +static int sixaxis_set_master_bdaddr(int fd, const bdaddr_t *bdaddr) { uint8_t buf[8]; int ret; @@ -121,6 +136,14 @@ static int set_master_bdaddr(int fd, const bdaddr_t *bdaddr) return ret; } +static int set_master_bdaddr(int fd, const bdaddr_t *bdaddr, + CablePairingType type) +{ + if (type == CABLE_PAIRING_SIXAXIS) + return sixaxis_set_master_bdaddr(fd, bdaddr); + return -1; +} + static void agent_auth_cb(DBusError *derr, void *user_data) { @@ -136,12 +159,12 @@ static void agent_auth_cb(DBusError *derr, btd_device_set_temporary(closure->device, false); - if (get_master_bdaddr(closure->fd, &master_bdaddr) < 0) + if (get_master_bdaddr(closure->fd, &master_bdaddr, closure->type) < 0) goto error; adapter_bdaddr = btd_adapter_get_address(closure->adapter); if (bacmp(adapter_bdaddr, &master_bdaddr)) { - if (set_master_bdaddr(closure->fd, adapter_bdaddr) < 0) + if (set_master_bdaddr(closure->fd, adapter_bdaddr, closure->type) < 0) goto error; } @@ -161,6 +184,7 @@ static bool setup_device(int fd, uint16_t vid, uint16_t pid, uint16_t version, + CablePairingType type, struct btd_adapter *adapter) { char device_addr[18]; @@ -169,7 +193,7 @@ static bool setup_device(int fd, struct btd_device *device; struct authentication_closure *closure; - if (get_device_bdaddr(fd, &device_bdaddr) < 0) + if (get_device_bdaddr(fd, &device_bdaddr, type) < 0) return false; /* This can happen if controller was plugged while already connected @@ -203,6 +227,7 @@ static bool setup_device(int fd, closure->adapter = adapter; closure->device = device; closure->fd = fd; + closure->type = type; memcpy(&closure->device_addr, device_addr, sizeof(device_addr)); adapter_bdaddr = btd_adapter_get_address(adapter); btd_request_authorization_cable_configured(adapter_bdaddr, &device_bdaddr, @@ -269,7 +294,7 @@ static void device_added(struct udev_device *udevice) } /* Only close the fd if an authentication is not pending */ - if (!setup_device(fd, name, source, vid, pid, version, adapter)) + if (!setup_device(fd, name, source, vid, pid, version, type, adapter)) close(fd); g_free(name); -- 2.14.1 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html