kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			Added support for detecting vendor and product id with FreeBSD kernel scanner
driver (based on patch in FreeBSD ports).merge-requests/1/head
							rodzic
							
								
									710e8d4423
								
							
						
					
					
						commit
						f85bbc0a0b
					
				| 
						 | 
				
			
			@ -1,4 +1,10 @@
 | 
			
		|||
2005-10-24  Oliver Schwartz <Oliver.Schwartz@gmx.de>
 | 
			
		||||
2005-11-01  Henning Meier-Geinitz <henning@meier-geinitz.de>
 | 
			
		||||
 | 
			
		||||
	* sanei/sanei_usb.c: Added support for detecting vendor and
 | 
			
		||||
	  product id with FreeBSD kernel scanner driver (based on patch in
 | 
			
		||||
	  FreeBSD ports).
 | 
			
		||||
 | 
			
		||||
2005-10-31  Oliver Schwartz <Oliver.Schwartz@gmx.de>
 | 
			
		||||
 | 
			
		||||
	* backend/snapscan.c backend/snapscan-scsi.c backend/snapscan.h
 | 
			
		||||
	  backend/snapscan-options.c doc/descriptions/snapscan.desc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,6 +87,10 @@ struct usb_descriptor_header *GetNextDescriptor( struct usb_descriptor_header *c
 | 
			
		|||
}
 | 
			
		||||
#endif /* HAVE_USBCALLS */
 | 
			
		||||
 | 
			
		||||
#if defined (__FreeBSD__)
 | 
			
		||||
#include <dev/usb/usb.h>
 | 
			
		||||
#endif /* __FreeBSD__ */
 | 
			
		||||
 | 
			
		||||
#define BACKEND_NAME	sanei_usb
 | 
			
		||||
#include "../include/sane/sane.h"
 | 
			
		||||
#include "../include/sane/sanei_debug.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -216,7 +220,7 @@ print_buffer (const SANE_Byte * buffer, SANE_Int size)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
kernel_get_vendor_product (int fd, int *vendorID, int *productID)
 | 
			
		||||
kernel_get_vendor_product (int fd, const char *name, int *vendorID, int *productID)
 | 
			
		||||
{
 | 
			
		||||
#if defined (__linux__)
 | 
			
		||||
  /* read the vendor and product IDs via the IOCTLs */
 | 
			
		||||
| 
						 | 
				
			
			@ -224,13 +228,13 @@ kernel_get_vendor_product (int fd, int *vendorID, int *productID)
 | 
			
		|||
    {
 | 
			
		||||
      if (ioctl (fd, SCANNER_IOCTL_VENDOR_OLD, vendorID) == -1)
 | 
			
		||||
	DBG (3, "kernel_get_vendor_product: ioctl (vendor) "
 | 
			
		||||
	     "of device %d failed: %s\n", fd, strerror (errno));
 | 
			
		||||
	     "of device %s failed: %s\n", name, strerror (errno));
 | 
			
		||||
    }
 | 
			
		||||
  if (ioctl (fd, SCANNER_IOCTL_PRODUCT, productID) == -1)
 | 
			
		||||
    {
 | 
			
		||||
      if (ioctl (fd, SCANNER_IOCTL_PRODUCT_OLD, productID) == -1)
 | 
			
		||||
	DBG (3, "sanei_usb_get_vendor_product: ioctl (product) "
 | 
			
		||||
	     "of device %d failed: %s\n", fd, strerror (errno));
 | 
			
		||||
	     "of device %s failed: %s\n", name, strerror (errno));
 | 
			
		||||
    }
 | 
			
		||||
#elif defined(__BEOS__)
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			@ -245,7 +249,47 @@ kernel_get_vendor_product (int fd, int *vendorID, int *productID)
 | 
			
		|||
    *vendorID = vendor;
 | 
			
		||||
    *productID = product;
 | 
			
		||||
  }
 | 
			
		||||
#endif /* defined (__linux__), defined(__BEOS__) */
 | 
			
		||||
#elif defined (__FreeBSD__)
 | 
			
		||||
  {
 | 
			
		||||
    int controller;
 | 
			
		||||
    int ctrl_fd;
 | 
			
		||||
    char buf[40];
 | 
			
		||||
    int dev;
 | 
			
		||||
    
 | 
			
		||||
    for (controller = 0; ; controller++ )
 | 
			
		||||
      {
 | 
			
		||||
	snprintf (buf, sizeof (buf) - 1, "/dev/usb%d", controller);
 | 
			
		||||
	ctrl_fd = open (buf, O_RDWR);
 | 
			
		||||
	
 | 
			
		||||
	/* If we can not open the usb controller device, treat it
 | 
			
		||||
	   as the end of controller devices */
 | 
			
		||||
	if (ctrl_fd < 0)
 | 
			
		||||
	  break;
 | 
			
		||||
	
 | 
			
		||||
	/* Search for the scanner device on this bus */
 | 
			
		||||
	for (dev = 1; dev < USB_MAX_DEVICES; dev++)
 | 
			
		||||
	  {  
 | 
			
		||||
	    struct usb_device_info devInfo;
 | 
			
		||||
	    devInfo.udi_addr = dev;
 | 
			
		||||
	    
 | 
			
		||||
	    if (ioctl (ctrl_fd, USB_DEVICEINFO, &devInfo) == -1)
 | 
			
		||||
	      break; /* Treat this as the end of devices for this controller */
 | 
			
		||||
	    
 | 
			
		||||
	    snprintf (buf, sizeof (buf), "/dev/%s", devInfo.udi_devnames[0]);
 | 
			
		||||
	    if (strncmp (buf, name, sizeof (buf)) == 0)
 | 
			
		||||
	      {
 | 
			
		||||
		*vendorID = (int) devInfo.udi_vendorNo;
 | 
			
		||||
		*productID = (int) devInfo.udi_productNo;
 | 
			
		||||
		close (ctrl_fd);
 | 
			
		||||
		return;
 | 
			
		||||
	      }
 | 
			
		||||
	  }
 | 
			
		||||
	close (ctrl_fd);
 | 
			
		||||
      }
 | 
			
		||||
    DBG (3, "kernel_get_vendor_product: Could not retrieve "
 | 
			
		||||
	 "vendor/product ID from device %s\n", name);
 | 
			
		||||
  }
 | 
			
		||||
#endif /* defined (__linux__), defined(__BEOS__), ... */
 | 
			
		||||
  /* put more os-dependant stuff ... */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +385,7 @@ sanei_usb_init (void)
 | 
			
		|||
		}
 | 
			
		||||
	      vendor = -1;
 | 
			
		||||
	      product = -1;
 | 
			
		||||
	      kernel_get_vendor_product (fd, &vendor, &product);
 | 
			
		||||
	      kernel_get_vendor_product (fd, devname, &vendor, &product);
 | 
			
		||||
	      close (fd);
 | 
			
		||||
	      devices[dn].devname = strdup (devname);
 | 
			
		||||
	      if (!devices[dn].devname)
 | 
			
		||||
| 
						 | 
				
			
			@ -598,7 +642,7 @@ sanei_usb_get_vendor_product (SANE_Int dn, SANE_Word * vendor,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
  if (devices[dn].method == sanei_usb_method_scanner_driver)
 | 
			
		||||
    kernel_get_vendor_product (devices[dn].fd, &vendorID, &productID);
 | 
			
		||||
    kernel_get_vendor_product (devices[dn].fd, devices[dn].devname, &vendorID, &productID);
 | 
			
		||||
  else if (devices[dn].method == sanei_usb_method_libusb)
 | 
			
		||||
    {
 | 
			
		||||
#ifdef HAVE_LIBUSB
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue