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.c backend/snapscan-scsi.c backend/snapscan.h
|
||||||
backend/snapscan-options.c doc/descriptions/snapscan.desc:
|
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 */
|
#endif /* HAVE_USBCALLS */
|
||||||
|
|
||||||
|
#if defined (__FreeBSD__)
|
||||||
|
#include <dev/usb/usb.h>
|
||||||
|
#endif /* __FreeBSD__ */
|
||||||
|
|
||||||
#define BACKEND_NAME sanei_usb
|
#define BACKEND_NAME sanei_usb
|
||||||
#include "../include/sane/sane.h"
|
#include "../include/sane/sane.h"
|
||||||
#include "../include/sane/sanei_debug.h"
|
#include "../include/sane/sanei_debug.h"
|
||||||
|
@ -216,7 +220,7 @@ print_buffer (const SANE_Byte * buffer, SANE_Int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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__)
|
#if defined (__linux__)
|
||||||
/* read the vendor and product IDs via the IOCTLs */
|
/* 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)
|
if (ioctl (fd, SCANNER_IOCTL_VENDOR_OLD, vendorID) == -1)
|
||||||
DBG (3, "kernel_get_vendor_product: ioctl (vendor) "
|
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, productID) == -1)
|
||||||
{
|
{
|
||||||
if (ioctl (fd, SCANNER_IOCTL_PRODUCT_OLD, productID) == -1)
|
if (ioctl (fd, SCANNER_IOCTL_PRODUCT_OLD, productID) == -1)
|
||||||
DBG (3, "sanei_usb_get_vendor_product: ioctl (product) "
|
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__)
|
#elif defined(__BEOS__)
|
||||||
{
|
{
|
||||||
|
@ -245,7 +249,47 @@ kernel_get_vendor_product (int fd, int *vendorID, int *productID)
|
||||||
*vendorID = vendor;
|
*vendorID = vendor;
|
||||||
*productID = product;
|
*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 ... */
|
/* put more os-dependant stuff ... */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +385,7 @@ sanei_usb_init (void)
|
||||||
}
|
}
|
||||||
vendor = -1;
|
vendor = -1;
|
||||||
product = -1;
|
product = -1;
|
||||||
kernel_get_vendor_product (fd, &vendor, &product);
|
kernel_get_vendor_product (fd, devname, &vendor, &product);
|
||||||
close (fd);
|
close (fd);
|
||||||
devices[dn].devname = strdup (devname);
|
devices[dn].devname = strdup (devname);
|
||||||
if (!devices[dn].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)
|
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)
|
else if (devices[dn].method == sanei_usb_method_libusb)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBUSB
|
#ifdef HAVE_LIBUSB
|
||||||
|
|
Ładowanie…
Reference in New Issue