X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/b5e57d268fe86cf58116c03166d45c130280dfb6..18e63b25f26a448e310adfca9fea89e4212a2cf4:/hmcfgusb.c diff --git a/hmcfgusb.c b/hmcfgusb.c index 90d741f..0e11866 100644 --- a/hmcfgusb.c +++ b/hmcfgusb.c @@ -223,7 +223,7 @@ static struct libusb_transfer *hmcfgusb_prepare_int(libusb_device_handle *devh, libusb_fill_interrupt_transfer(transfer, devh, EP_IN, data_buf, in_size, cb, data, USB_TIMEOUT); - transfer->flags = LIBUSB_TRANSFER_SHORT_NOT_OK | LIBUSB_TRANSFER_FREE_BUFFER; + transfer->flags = LIBUSB_TRANSFER_FREE_BUFFER; err = libusb_submit_transfer(transfer); if (err != 0) { @@ -345,11 +345,7 @@ struct hmcfgusb_dev *hmcfgusb_init(hmcfgusb_cb_fn cb, void *data) cb_data->cb = cb; cb_data->data = data; - /* Bootloader can only say ack/nack/done */ - if (dev->bootloader) - dev->transfer = hmcfgusb_prepare_int(devh, hmcfgusb_interrupt, cb_data, 1); - else - dev->transfer = hmcfgusb_prepare_int(devh, hmcfgusb_interrupt, cb_data, ASYNC_SIZE); + dev->transfer = hmcfgusb_prepare_int(devh, hmcfgusb_interrupt, cb_data, ASYNC_SIZE); if (!dev->transfer) { fprintf(stderr, "Can't prepare async device io!\n"); @@ -437,13 +433,11 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) return -1; } else if (err == 0) { /* No pending timeout or a sane platform */ - tv.tv_sec = timeout; } else { if ((tv.tv_sec == 0) && (tv.tv_usec == 0)) { usb_event = 1; - } else if (tv.tv_sec > timeout) { - tv.tv_sec = timeout; - tv.tv_usec = 0; + } else if ((tv.tv_sec * 1000) < timeout) { + timeout = tv.tv_sec * 1000; } } @@ -452,7 +446,7 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) dev->pfd[i].revents = 0; } - n = poll(dev->pfd, dev->n_pfd, tv.tv_sec * 1000); + n = poll(dev->pfd, dev->n_pfd, timeout); if (n < 0) { perror("poll"); errno = 0;