diff options
Diffstat (limited to 'backend/epsonds.c')
| -rw-r--r-- | backend/epsonds.c | 105 | 
1 files changed, 17 insertions, 88 deletions
| diff --git a/backend/epsonds.c b/backend/epsonds.c index d16744f..8db070b 100644 --- a/backend/epsonds.c +++ b/backend/epsonds.c @@ -133,7 +133,7 @@ close_scanner(epsonds_scanner *s)  	DBG(7, "%s: fd = %d\n", __func__, s->fd);  	if (s->fd == -1) -		return; +		goto free;  	if (s->locked) {  		DBG(7, " unlocking scanner\n"); @@ -144,6 +144,8 @@ close_scanner(epsonds_scanner *s)  		sanei_usb_close(s->fd);  	} +free: +  	free(s->front.ring);  	free(s->back.ring);  	free(s->line_buffer); @@ -189,57 +191,6 @@ open_scanner(epsonds_scanner *s)  	return status;  } -static SANE_Status -validate_usb(struct epsonds_scanner *s) -{ -	DBG(1, "%s\n", __func__); - -	SANE_Status status; -	int vendor, product; -	int i = 0, numIds; - -	SANE_Bool is_valid = SANE_FALSE; - -	/* if the sanei_usb_get_vendor_product call is not supported, -	 * then we just ignore this and rely on the user to config -	 * the correct device. -	 */ -	status = sanei_usb_get_vendor_product(s->fd, &vendor, &product); -	if (status != SANE_STATUS_GOOD) { -		DBG(1, "the device cannot be verified - will continue\n"); -	 	return SANE_STATUS_GOOD; -	} - -	/* check the vendor ID to see if we are dealing with an EPSON device */ -	if (vendor != SANE_EPSONDS_VENDOR_ID) { -		/* this is not a supported vendor ID */ -		DBG(1, "not an Epson device at %s (vendor id=0x%x)\n", -			s->hw->sane.name, vendor); -		return SANE_STATUS_INVAL; -	} - -	numIds = epsonds_get_number_of_ids(); - -	/* check all known product IDs to verify that we know -	   about the device */ -	while (i != numIds && !is_valid) { -		if (product == epsonds_usb_product_ids[i]) -			is_valid = SANE_TRUE; -		i++; -	} - -	if (is_valid == SANE_FALSE) { -		DBG(1, "the device at %s is not a supported (product id=0x%x)\n", -			s->hw->sane.name, product); -		return SANE_STATUS_INVAL; -	} - -	DBG(1, "found valid Epson ESC/I-2 scanner: 0x%x/0x%x at %s\n", -		vendor, product, s->hw->sane.name); - -	return SANE_STATUS_GOOD; -} -  static int num_devices;			/* number of scanners attached to backend */  static epsonds_device *first_dev;	/* first EPSON scanner in list */ @@ -311,13 +262,6 @@ device_detect(const char *name, int type, SANE_Status *status)  		return NULL;  	} -	if (dev->connection == SANE_EPSONDS_USB) { -		*status = validate_usb(s); -	} - -	if (*status != SANE_STATUS_GOOD) -		goto close; -  	eds_dev_init(dev);  	/* lock scanner */ @@ -415,19 +359,11 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line)  	if (sscanf(line, "usb %i %i", &vendor, &product) == 2) { -		int numIds; - -		/* add the vendor and product IDs to the list of -		   known devices before we call the attach function */ -  		DBG(7, " user configured device\n"); -		numIds = epsonds_get_number_of_ids(); -		if (vendor != 0x4b8) -			return SANE_STATUS_INVAL; /* this is not an EPSON device */ +		if (vendor != SANE_EPSONDS_VENDOR_ID) +			return SANE_STATUS_INVAL; /* this is not an Epson device */ -		/* add to last slot */ -		epsonds_usb_product_ids[numIds - 1] = product;  		sanei_usb_attach_matching_devices(line, attach_one_usb);  	} else if (strncmp(line, "usb", 3) == 0 && len == 3) { @@ -439,9 +375,10 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line)  		numIds = epsonds_get_number_of_ids();  		for (i = 0; i < numIds; i++) { -			sanei_usb_find_devices(0x4b8, +			sanei_usb_find_devices(SANE_EPSONDS_VENDOR_ID,  					epsonds_usb_product_ids[i], attach_one_usb);  		} +  	} else {  		DBG(0, "unable to parse config line: %s\n", line);  	} @@ -709,12 +646,10 @@ sane_open(SANE_String_Const name, SANE_Handle *handle)  	SANE_Status status;  	epsonds_scanner *s = NULL; -	int l = strlen(name); - -	DBG(7, "** %s: name = %s\n", __func__, name); +	DBG(7, "** %s: name = '%s'\n", __func__, name);  	/* probe if empty device name provided */ -	if (l == 0) { +	if (name[0] == '\0') {  		probe_devices(); @@ -738,20 +673,8 @@ sane_open(SANE_String_Const name, SANE_Handle *handle)  			if (s == NULL)  				return status;  		} else { - -			/* as a last resort, check for a match -			 * in the device list. This should handle SCSI -			 * devices and platforms without libusb. -			 */ - -			if (first_dev == NULL) -				probe_devices(); - -			s = device_detect(name, SANE_EPSONDS_NODEV, &status); -			if (s == NULL) { -				DBG(1, "invalid device name: %s\n", name); -				return SANE_STATUS_INVAL; -			} +			DBG(1, "invalid device name: %s\n", name); +			return SANE_STATUS_INVAL;  		}  	} @@ -1189,6 +1112,12 @@ sane_start(SANE_Handle handle)  			s->val[OPT_ADF_MODE].w ? "DPLX" : "",  			s->val[OPT_ADF_SKEW].w ? "SKEW" : ""); +		if (s->hw->adf_has_dfd == 2) { +			strcat(buf, "DFL2"); +		} else if (s->hw->adf_has_dfd == 1) { +			strcat(buf, "DFL1"); +		} +  	} else if (strcmp(source_list[s->val[OPT_SOURCE].w], FBF_STR) == 0) {  		strcpy(buf, "#FB "); | 
