]> git.zerfleddert.de Git - hmcfgusb/blobdiff - hmcfgusb.c
only wake the device up when the timeout really expired
[hmcfgusb] / hmcfgusb.c
index d08641935f41f0f9d84d1079bcb4edd047bcc01d..0857a4b3634f5ac9dee153d051c8074a0b298a5c 100644 (file)
@@ -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, sizeof(out), &cnt, USB_TIMEOUT);
        if (err && (!silent)) {
                fprintf(stderr, "Can't send null frame: %s\n", usb_strerror(err));
                return 0;
@@ -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;
 }
 
Impressum, Datenschutz