diff options
author | Pali Rohár <pali.rohar@gmail.com> | 2012-09-23 14:01:20 +0200 |
---|---|---|
committer | Pali Rohár <pali.rohar@gmail.com> | 2012-09-23 14:01:20 +0200 |
commit | f0596631643e9f6c39e9a12af945d58ea0a38b05 (patch) | |
tree | 0e9711b75d38ae344475b0af44b4fcdf8523d0c8 /src/usb-device.c | |
parent | d9e6d47f1b03a5b3bd6fa324ebd09f3eb27c3282 (diff) | |
download | 0xFFFF-f0596631643e9f6c39e9a12af945d58ea0a38b05.tar.bz2 |
usb-device: Check for USB product string if device match, remove detected_ prefix
Diffstat (limited to 'src/usb-device.c')
-rw-r--r-- | src/usb-device.c | 36 |
1 files changed, 32 insertions, 4 deletions
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; |