laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-e1d/+/27040 )
Change subject: Proper libusb error reporting in all error paths ......................................................................
Proper libusb error reporting in all error paths
... using libusb_strerror().
Change-Id: Id205f1cf1bbccd83b789f8ab31fe1d5d4e1fb8a9 --- M src/usb.c 1 file changed, 32 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-e1d refs/changes/40/27040/1
diff --git a/src/usb.c b/src/usb.c index 2bccfe8..431fd60 100644 --- a/src/usb.c +++ b/src/usb.c @@ -237,8 +237,10 @@ );
rv = libusb_submit_transfer(xfr); - if (rv) - LOGPLI(flow->line, DE1D, LOGL_ERROR, "Failed to resubmit buffer for transfer\n"); + if (rv) { + LOGPLI(flow->line, DE1D, LOGL_ERROR, "EP %02x Failed to resubmit buffer for transfer: %s\n", + flow->ep, libusb_strerror(rv)); + } }
static struct e1_usb_flow * @@ -307,9 +309,11 @@ );
rv = libusb_submit_transfer(xfr); - - if (rv) + if (rv) { + LOGPLI(flow->line, DE1D, LOGL_ERROR, "EP %02x: Error submitting transfer %d: %s\n", + flow->ep, i, libusb_strerror(rv)); return rv; + }
flow->entries[i].xfr = xfr; } @@ -418,10 +422,17 @@ struct e1_usb_line_data *ld = (struct e1_usb_line_data *) line->drv_data; struct e1_usb_intf_data *id = (struct e1_usb_intf_data *) line->intf->drv_data; struct libusb_transfer *xfr = libusb_alloc_transfer(0); + int rv;
libusb_fill_interrupt_transfer(xfr, id->devh, ld->ep_int, ld->irq.buf, sizeof(ld->irq.buf), interrupt_ep_cb, line, 0); - return libusb_submit_transfer(xfr); + rv = libusb_submit_transfer(xfr); + if (rv != LIBUSB_SUCCESS) { + LOGPLI(line, DE1D, LOGL_ERROR, "EP %02x: Error submitting IRQ transfer: %s\n", + ld->ep_int, libusb_strerror(rv)); + } + + return rv; }
// --------------------------------------------------------------------------- @@ -487,8 +498,11 @@
libusb_fill_control_transfer(xfr, id->devh, ucx->buffer, ctrl_xfer_compl_cb, ucx, 3000); rc = libusb_submit_transfer(xfr); - if (rc != 0) + if (rc != 0) { + LOGPLI(line, DE1D, LOGL_ERROR, "Error submitting control transfer: %s\n", + libusb_strerror(rc)); goto free_xfr; + }
llist_add_tail(&ucx->list, &ld->ctrl_inprogress);
@@ -598,8 +612,11 @@
libusb_fill_control_transfer(xfr, id->devh, ucx->buffer, ctrl_xfer_intf_compl_cb, ucx, 3000); rc = libusb_submit_transfer(xfr); - if (rc != 0) + if (rc != 0) { + LOGPIF(intf, DE1D, LOGL_ERROR, "Error submitting control transfer: %s\n", + libusb_strerror(rc)); goto free_xfr; + }
llist_add_tail(&ucx->list, &id->ctrl_inprogress);
@@ -772,20 +789,20 @@
ret = libusb_open(dev, &devh); if (ret) { - LOGP(DE1D, LOGL_ERROR, "Failed to open usb device\n"); + LOGP(DE1D, LOGL_ERROR, "Failed to open usb device: %s\n", libusb_strerror(ret)); return ret; }
ret = libusb_get_device_descriptor(dev, &dd); if (ret) { - LOGP(DE1D, LOGL_ERROR, "Failed to get device descriptor\n"); + LOGP(DE1D, LOGL_ERROR, "Failed to get device descriptor: %s\n", libusb_strerror(ret)); libusb_close(devh); return ret; }
ret = libusb_get_string_descriptor_ascii(devh, dd.iSerialNumber, (uint8_t *)serial_str, sizeof(serial_str)); if (ret < 0) { - LOGP(DE1D, LOGL_ERROR, "Failed to get iSerialNumber string descriptor\n"); + LOGP(DE1D, LOGL_ERROR, "Failed to get iSerialNumber string descriptor: %s\n", libusb_strerror(ret)); libusb_close(devh); return ret; } @@ -819,7 +836,7 @@
ret = libusb_get_active_config_descriptor(dev, &cd); if (ret) { - LOGP(DE1D, LOGL_ERROR, "Failed to talk to usb device\n"); + LOGP(DE1D, LOGL_ERROR, "Failed to talk to usb device: %s\n", libusb_strerror(ret)); intf_data->devh = NULL; talloc_free(intf_data); if (auto_create_lines) @@ -849,13 +866,15 @@ /* Get interface and set it up */ ret = libusb_claim_interface(devh, id->bInterfaceNumber); if (ret) { - LOGP(DE1D, LOGL_ERROR, "Failed to claim interface %d\n", id->bInterfaceNumber); + LOGP(DE1D, LOGL_ERROR, "Failed to claim interface %d:%s\n", id->bInterfaceNumber, + libusb_strerror(ret)); goto next_interface; }
ret = libusb_set_interface_alt_setting(devh, id->bInterfaceNumber, 1); if (ret) { - LOGP(DE1D, LOGL_ERROR, "Failed to set interface %d altsetting\n", id->bInterfaceNumber); + LOGP(DE1D, LOGL_ERROR, "Failed to set interface %d altsetting:%s\n", id->bInterfaceNumber, + libusb_strerror(ret)); goto next_interface; }