Some time ago there was a discussion on this list about right and wrong ways of accessing USB scanners under Linux. Besides the SCSI->USB conversion one other proposed solution was to add functionality to query the vendor and product ID from the driver so that an automatic scanner detection is possible. I implemented two ioctls to do this. in addion to this I also implemented the necessary calls in the SANE EPSON backend to make use of these ioctls. The patche for SANE is available at http://www.freecolormanagement.com/sane/download.html, the USB scanner patch is attached to this mail. I already sent the patch to David Nelson, but he has not yet responded. Who is responsible for assigning ioctl numbers for the USB sub-system? According to the IOCTL list that is part of the kernel documentation the USB driver(s) use the id "U", I checked the drivers, but none is actually using this id. Karl Heinz diff -r -u linux.old/driver/usb/scanner.c linux/driver/usb/scanner.c --- linux.old/driver/usb/scanner.c Sat May 19 18:28:36 2001 +++ linux/driver/usb/scanner.c Sat May 19 18:28:36 2001 @@ -858,6 +858,10 @@ switch (cmd) { + case IOCTL_SCANNER_VENDOR : + return (put_user(dev->descriptor.idVendor, (unsigned int *) arg)); + case IOCTL_SCANNER_PRODUCT : + return (put_user(dev->descriptor.idProduct, (unsigned int *) arg)); case PV8630_IOCTL_INREQUEST : { struct { diff -r -u linux.old/driver/usb/scanner.h linux/driver/usb/scanner.h --- linux.old/driver/usb/scanner.h Sat May 19 18:28:36 2001 +++ linux/driver/usb/scanner.h Sat May 19 18:28:36 2001 @@ -53,7 +53,7 @@ /* Enable to activate the ioctl interface. This is mainly meant for */ /* development purposes until an ioctl number is officially registered */ -// #define SCN_IOCTL +#define SCN_IOCTL /* WARNING: These DATA_DUMP's can produce a lot of data. Caveat Emptor. */ // #define RD_DATA_DUMP /* Enable to dump data - limited to 24 bytes */ @@ -122,6 +122,7 @@ { USB_DEVICE(0x04b8, 0x0107) }, /* Expression 1600 */ { USB_DEVICE(0x04b8, 0x010b) }, /* Perfection 1240U */ { USB_DEVICE(0x04b8, 0x010a) }, /* Perfection 1640SU and 1640SU Photo */ + { USB_DEVICE(0x04b8, 0x010e) }, /* Perfection 1680 */ /* Umax */ { USB_DEVICE(0x1606, 0x0010) }, /* Astra 1220U */ { USB_DEVICE(0x1606, 0x0030) }, /* Astra 2000U */ @@ -162,6 +163,10 @@ /* FIXME: These are NOT registered ioctls()'s */ #define PV8630_IOCTL_INREQUEST 69 #define PV8630_IOCTL_OUTREQUEST 70 + +/* read vendor and product IDs */ +#define IOCTL_SCANNER_VENDOR _IOR('U', 0xa0, int) +#define IOCTL_SCANNER_PRODUCT _IOR('U', 0xa1, int) #define SCN_MAX_MNR 16 /* We're allocated 16 minors */ #define SCN_BASE_MNR 48 /* USB Scanners start at minor 48 */ _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: http://lists.sourceforge.net/lists/listinfo/linux-usb-devel