hosted/stlinkv2: Rewrote the serial number readering logic to not violate the USB spec and properly handle libusb errors
This commit is contained in:
parent
94e9281404
commit
4287f1ba0e
|
@ -523,10 +523,21 @@ int stlink_init(bmp_info_t *info)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
char serial[64];
|
char serial[64];
|
||||||
r = libusb_get_string_descriptor_ascii(
|
if (desc.iSerialNumber) {
|
||||||
sl->ul_libusb_device_handle, desc.iSerialNumber,
|
const int result = libusb_get_string_descriptor_ascii(sl->ul_libusb_device_handle,
|
||||||
(uint8_t*)serial,sizeof(serial));
|
desc.iSerialNumber, (uint8_t *)serial, sizeof(serial));
|
||||||
if (r <= 0 || !strstr(serial, info->serial)) {
|
/* If the call fails and it's not because the device gave us STALL, continue to the next one */
|
||||||
|
if (result < 0 && result != LIBUSB_ERROR_PIPE) {
|
||||||
|
libusb_close(sl->ul_libusb_device_handle);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (result <= 0)
|
||||||
|
serial[0] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
serial[0] = '\0';
|
||||||
|
/* Likewise, if the serial number returned doesn't match the one in info, go to next */
|
||||||
|
if (!strstr(serial, info->serial)) {
|
||||||
libusb_close(sl->ul_libusb_device_handle);
|
libusb_close(sl->ul_libusb_device_handle);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue