Browse Source

Check for no usb device in usb_ftdi_cts

nfactor-troky
ckolivas 11 years ago
parent
commit
641883a572
  1. 20
      usbutils.c

20
usbutils.c

@ -2027,8 +2027,13 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro
unsigned char usbbuf[USB_MAX_READ+4], *ptr; unsigned char usbbuf[USB_MAX_READ+4], *ptr;
size_t usbbufread; size_t usbbufread;
if (unlikely(!usbdev)) if (cgpu->usbinfo.nodev) {
*buf = '\0';
*processed = 0;
USB_REJECT(cgpu, MODE_BULK_READ);
return LIBUSB_ERROR_NO_DEVICE; return LIBUSB_ERROR_NO_DEVICE;
}
ftdi = (usbdev->usb_type == USB_TYPE_FTDI); ftdi = (usbdev->usb_type == USB_TYPE_FTDI);
@ -2037,14 +2042,6 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro
if (bufsiz > USB_MAX_READ) if (bufsiz > USB_MAX_READ)
quit(1, "%s USB read request %d too large (max=%d)", cgpu->drv->name, bufsiz, USB_MAX_READ); quit(1, "%s USB read request %d too large (max=%d)", cgpu->drv->name, bufsiz, USB_MAX_READ);
if (cgpu->usbinfo.nodev) {
*buf = '\0';
*processed = 0;
USB_REJECT(cgpu, MODE_BULK_READ);
return LIBUSB_ERROR_NO_DEVICE;
}
if (timeout == DEVTIMEOUT) if (timeout == DEVTIMEOUT)
timeout = usbdev->found->timeout; timeout = usbdev->found->timeout;
@ -2204,6 +2201,11 @@ int usb_ftdi_cts(struct cgpu_info *cgpu)
struct cg_usb_device *usbdev = cgpu->usbdev; struct cg_usb_device *usbdev = cgpu->usbdev;
unsigned char buf[2], ret; unsigned char buf[2], ret;
/* We return true in case drivers are waiting indefinitely to try and
* write to something that's not there. */
if (cgpu->usbinfo.nodev)
return true;
libusb_control_transfer(usbdev->handle, (uint8_t)FTDI_TYPE_IN, libusb_control_transfer(usbdev->handle, (uint8_t)FTDI_TYPE_IN,
(uint8_t)5, (uint16_t)0, (uint16_t)0, buf, 2, (uint8_t)5, (uint16_t)0, (uint16_t)0, buf, 2,
DEVTIMEOUT); DEVTIMEOUT);

Loading…
Cancel
Save