From 6e1e82c06afd957aac394d6b430c5d837a01a6ec Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Sat, 23 May 2009 23:23:58 +0200 Subject: [PATCH] Make usb device enumeration work and store the bus:dev location as device_id --- src/main.c | 4 ++-- src/usbmux.c | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 1eb7af3..c8ad6d7 100644 --- a/src/main.c +++ b/src/main.c @@ -682,7 +682,7 @@ static void *usbmuxd_client_init_thread(void *arg) memset(&dev_info_rec, 0, sizeof(dev_info_rec)); dev_info_rec.header.length = sizeof(dev_info_rec); dev_info_rec.header.type = USBMUXD_DEVICE_INFO; - dev_info_rec.device.device_id = dev->devnum; + dev_info_rec.device.device_id = (strtoul(bus->dirname, NULL, 10) << 8) | strtol(dev->filename, NULL, 10); dev_info_rec.device.product_id = dev->descriptor.idProduct; if (dev->descriptor.iSerialNumber) { usb_dev_handle *udev; @@ -784,7 +784,7 @@ static void *usbmuxd_client_init_thread(void *arg) __func__, THREAD, c_req->device_id); pthread_mutex_lock(&usb_mutex); - if (usbmux_get_specific_device(0, c_req->device_id, &phone) < 0) { + if (usbmux_get_specific_device(c_req->device_id >> 8, c_req->device_id & 0xff, &phone) < 0) { pthread_mutex_unlock(&usb_mutex); pthread_mutex_unlock(&usbmux_mutex); if (verbose >= 1) diff --git a/src/usbmux.c b/src/usbmux.c index 90aeb84..f49c4ce 100644 --- a/src/usbmux.c +++ b/src/usbmux.c @@ -324,18 +324,18 @@ int usbmux_get_specific_device(int bus_n, int dev_n, // Set the device configuration for (bus = usb_get_busses(); bus; bus = bus->next) - //if (bus->location == bus_n) - for (dev = bus->devices; dev != NULL; dev = dev->next) - if (dev->devnum == dev_n) { - newdevice->__device = dev; - newdevice->usbdev = usb_open(newdevice->__device); - if (!newdevice->usbdev) { - fprintf(stderr, "%s: Error: usb_open(): %s\n", __func__, usb_strerror()); + if (strtoul(bus->dirname, NULL, 10) == bus_n) + for (dev = bus->devices; dev; dev = dev->next) + if (strtol(dev->filename, NULL, 10) == dev_n) { + newdevice->__device = dev; + newdevice->usbdev = usb_open(newdevice->__device); + if (!newdevice->usbdev) { + fprintf(stderr, "%s: Error: usb_open(): %s\n", __func__, usb_strerror()); + } + if (usbmux_config_usb_device(newdevice) == 0) { + goto found; + } } - if (usbmux_config_usb_device(newdevice) == 0) { - goto found; - } - } usbmux_free_device(newdevice); -- 1.6.0.2