Commit 2c97b8b8bc62b0fb2a83e60aecb8ebd7d1de7c52

Kano 2013-04-28T19:00:25

usb_init() allow it to ignore a device and show no message

diff --git a/driver-bflsc.c b/driver-bflsc.c
index ce0a59c..cc49db2 100644
--- a/driver-bflsc.c
+++ b/driver-bflsc.c
@@ -807,13 +807,8 @@ static bool bflsc_detect_one(struct libusb_device *dev, struct usb_find_devices 
 	// TODO: fix ... everywhere ...
 	bflsc->device_file = (FILE *)sc_info;
 
-	if (!usb_init(bflsc, dev, found)) {
-		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
-			bflsc->drv->dname,
-			(int)(bflsc->usbinfo.bus_number),
-			(int)(bflsc->usbinfo.device_address));
+	if (!usb_init(bflsc, dev, found))
 		goto shin;
-	}
 
 	sprintf(devpath, "%d:%d",
 			(int)(bflsc->usbinfo.bus_number),
diff --git a/driver-bitforce.c b/driver-bitforce.c
index cc4e412..e1963f8 100644
--- a/driver-bitforce.c
+++ b/driver-bitforce.c
@@ -179,19 +179,13 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic
 	bitforce->deven = DEV_ENABLED;
 	bitforce->threads = 1;
 
-	if (!usb_init(bitforce, dev, found)) {
-		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
-			bitforce->drv->dname,
-			(int)(bitforce->usbinfo.bus_number),
-			(int)(bitforce->usbinfo.device_address));
+	if (!usb_init(bitforce, dev, found))
 		goto shin;
-	}
 
 	sprintf(devpath, "%d:%d",
 			(int)(bitforce->usbinfo.bus_number),
 			(int)(bitforce->usbinfo.device_address));
 
-
 	// Allow 2 complete attempts if the 1st time returns an unrecognised reply
 	ident_first = true;
 retry:
diff --git a/driver-modminer.c b/driver-modminer.c
index 6358273..f20e555 100644
--- a/driver-modminer.c
+++ b/driver-modminer.c
@@ -126,13 +126,8 @@ static bool modminer_detect_one(struct libusb_device *dev, struct usb_find_devic
 	mutex_init(modminer->modminer_mutex);
 	modminer->fpgaid = (char)0;
 
-	if (!usb_init(modminer, dev, found)) {
-		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
-			modminer->drv->dname,
-			(int)(modminer->usbinfo.bus_number),
-			(int)(modminer->usbinfo.device_address));
+	if (!usb_init(modminer, dev, found))
 		goto shin;
-	}
 
 	sprintf(devpath, "%d:%d",
 			(int)(modminer->usbinfo.bus_number),
diff --git a/usbutils.c b/usbutils.c
index f133831..3703862 100644
--- a/usbutils.c
+++ b/usbutils.c
@@ -1217,7 +1217,11 @@ static void release_cgpu(struct cgpu_info *cgpu)
 	cgminer_usb_unlock_bd(cgpu->drv, cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address);
 }
 
-bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found)
+#define USB_INIT_FAIL 0
+#define USB_INIT_OK 1
+#define USB_INIT_IGNORE 2
+
+static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found)
 {
 	struct cg_usb_device *cgusb = NULL;
 	struct libusb_config_descriptor *config = NULL;
@@ -1226,6 +1230,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find
 	unsigned char strbuf[STRBUFLEN+1];
 	char devstr[STRBUFLEN+1];
 	int err, i, j, k;
+	int bad = USB_INIT_FAIL;
 
 	cgpu->usbinfo.bus_number = libusb_get_bus_number(dev);
 	cgpu->usbinfo.device_address = libusb_get_device_address(dev);
@@ -1301,8 +1306,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find
 				err, devstr);
 			goto cldame;
 		}
-		if (strcmp((char *)man, found->iManufacturer))
+		if (strcmp((char *)man, found->iManufacturer)) {
+			bad = USB_INIT_IGNORE;
 			goto cldame;
+		}
 	}
 
 	if (found->iProduct) {
@@ -1317,8 +1324,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find
 				err, devstr);
 			goto cldame;
 		}
-		if (strcmp((char *)prod, found->iProduct))
+		if (strcmp((char *)prod, found->iProduct)) {
+			bad = USB_INIT_IGNORE;
 			goto cldame;
+		}
 	}
 
 	err = libusb_set_configuration(cgusb->handle, found->config);
@@ -1435,7 +1444,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find
 		cgpu->drv->name = (char *)(found->name);
 	}
 
-	return true;
+	return USB_INIT_OK;
 
 cldame:
 
@@ -1448,7 +1457,22 @@ dame:
 
 	cgusb = free_cgusb(cgusb);
 
-	return false;
+	return bad;
+}
+
+bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found)
+{
+	int ret;
+
+	ret = _usb_init(cgpu, dev, found);
+
+	if (ret == USB_INIT_FAIL)
+		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
+				cgpu->drv->dname,
+				(int)(cgpu->usbinfo.bus_number),
+				(int)(cgpu->usbinfo.device_address));
+
+	return (ret == USB_INIT_OK);
 }
 
 static bool usb_check_device(struct device_drv *drv, struct libusb_device *dev, struct usb_find_devices *look)