static void cb_xfer(struct libusb_transfer *xfer) { int r; uint8_t *tmp; if (xfer->status != LIBUSB_TRANSFER_COMPLETED) { if(xfer->status != LIBUSB_TRANSFER_CANCELLED) rx_xfer_status(xfer->status); libusb_free_transfer(xfer); rx_xfer = NULL; return; } while (usb_really_full) { fprintf(stderr, "uh oh, full_usb_buf not emptied\n"); } tmp = full_usb_buf; full_usb_buf = empty_usb_buf; empty_usb_buf = tmp; usb_really_full = 1; rx_xfer->buffer = empty_usb_buf; while (usb_retry) { r = libusb_submit_transfer(rx_xfer); if (r < 0) fprintf(stderr, "rx_xfer submission from callback: %d\n", r); else break; } }
static void cb_xfer(struct libusb_transfer *xfer) { int r; uint8_t *tmp; ubertooth_t* ut = (ubertooth_t*)xfer->user_data; if (xfer->status != LIBUSB_TRANSFER_COMPLETED) { if(xfer->status == LIBUSB_TRANSFER_TIMED_OUT) { r = libusb_submit_transfer(ut->rx_xfer); if (r < 0) fprintf(stderr, "Failed to submit USB transfer (%d)\n", r); return; } if(xfer->status != LIBUSB_TRANSFER_CANCELLED) rx_xfer_status(xfer->status); libusb_free_transfer(xfer); ut->rx_xfer = NULL; return; } if(ut->usb_really_full) { /* This should never happen, but we'd prefer to error and exit * than to clobber existing data */ fprintf(stderr, "uh oh, full_usb_buf not emptied\n"); ut->stop_ubertooth = 1; } if(ut->stop_ubertooth) return; tmp = ut->full_usb_buf; ut->full_usb_buf = ut->empty_usb_buf; ut->empty_usb_buf = tmp; ut->usb_really_full = 1; ut->rx_xfer->buffer = ut->empty_usb_buf; r = libusb_submit_transfer(ut->rx_xfer); if (r < 0) fprintf(stderr, "Failed to submit USB transfer (%d)\n", r); }