X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/6262005e88c7c9edff4c0f962ca338ffb2a299fb..3d5b8e702ef33cb4b9e54b4cb42de189cadb24e6:/hmcfgusb.c diff --git a/hmcfgusb.c b/hmcfgusb.c index 825b313..6df2bca 100644 --- a/hmcfgusb.c +++ b/hmcfgusb.c @@ -146,8 +146,11 @@ int hmcfgusb_send_null_frame(struct hmcfgusb_dev *usbdev, int silent) { int err; int cnt; + unsigned char out[0x40]; - err = libusb_interrupt_transfer(usbdev->usb_devh, EP_OUT, NULL, 0, &cnt, USB_TIMEOUT); + memset(out, 0, sizeof(out)); + + err = libusb_interrupt_transfer(usbdev->usb_devh, EP_OUT, out, 0, &cnt, USB_TIMEOUT); if (err && (!silent)) { fprintf(stderr, "Can't send null frame: %s\n", usb_strerror(err)); return 0; @@ -242,7 +245,7 @@ static void LIBUSB_CALL hmcfgusb_interrupt(struct libusb_transfer *transfer) if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { if (transfer->status != LIBUSB_TRANSFER_TIMED_OUT) { - fprintf(stderr, "Interrupt transfer not completed: %d!\n", transfer->status); + fprintf(stderr, "Interrupt transfer not completed: %s!\n", usb_strerror(transfer->status)); quit = EIO; if (cb_data && cb_data->dev && cb_data->dev->transfer) { @@ -390,6 +393,7 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) { struct timeval tv; int usb_event = 0; + int timed_out = 0; int i; int n; int fd_n; @@ -427,6 +431,7 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) return -1; } else if (n == 0) { usb_event = 1; + timed_out = 1; } else { for (fd_n = 0; fd_n < dev->n_pfd; fd_n++) { if (dev->pfd[fd_n].revents) { @@ -458,6 +463,9 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) errno = quit; } + if (timed_out) + errno = ETIMEDOUT; + return -1; }