From f0596631643e9f6c39e9a12af945d58ea0a38b05 Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Sun, 23 Sep 2012 14:01:20 +0200 Subject: usb-device: Check for USB product string if device match, remove detected_ prefix --- src/usb-device.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'src/usb-device.c') diff --git a/src/usb-device.c b/src/usb-device.c index ff02721..85100f9 100644 --- a/src/usb-device.c +++ b/src/usb-device.c @@ -69,7 +69,7 @@ static void usb_flash_device_info_print(const struct usb_flash_device * dev) { } -static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device * dev) { +static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device * dev, char * product, size_t size) { char buf[1024]; char buf2[1024]; @@ -82,6 +82,9 @@ static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device * PRINTF_LINE("USB device product string: %s", buf[0] ? buf : "(not detected)"); PRINTF_END(); + if ( product && buf[0] ) + strncpy(product, buf, size); + memset(buf, 0, sizeof(buf)); memset(buf2, 0, sizeof(buf2)); ret = usb_get_string_simple(udev, dev->descriptor.iSerialNumber, buf, sizeof(buf)); @@ -106,6 +109,7 @@ static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device * static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) { int i; + char product[1024]; struct usb_device_info * ret = NULL; for ( i = 0; usb_devices[i].vendor; ++i ) { @@ -125,7 +129,7 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) { return NULL; } - usb_descriptor_info_print(udev, dev); + usb_descriptor_info_print(udev, dev, product, sizeof(product)); #if defined(LIBUSB_HAS_GET_DRIVER_NP) && defined(LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP) PRINTF_LINE("Detaching kernel from USB interface..."); @@ -165,8 +169,32 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) { return NULL; } - ret->detected_device = DEVICE_UNKNOWN; - ret->detected_hwrev = -1; + if ( strstr(product, "N900") ) + ret->device = DEVICE_RX_51; + else + ret->device = DEVICE_UNKNOWN; + + /* TODO: Autodetect more devices */ + + if ( device_to_string(ret->device) ) + PRINTF_LINE("Detected USB device: %s", device_to_string(ret->device)); + else + PRINTF_LINE("Detected USB device: (not detected)"); + PRINTF_END(); + + if ( ret->device ) { + enum device * device; + for ( device = usb_devices[i].devices; *device; ++device ) + if ( *device == ret->device ) + break; + if ( ! *device ) { + ERROR("Device mishmash"); + usb_close(udev); + return NULL; + } + } + + ret->hwrev = -1; ret->flash_device = &usb_devices[i]; ret->udev = udev; break; -- cgit v1.2.3