Date: Sun, 9 Dec 2001 21:58:45 +0100 (CET) From: "Erik H. Bakke" <ebakke@trolltech.com> To: FreeBSD-gnats-submit@freebsd.org Subject: kern/32652: Add new scanners and a new ioctl to uscanner Message-ID: <200112092058.fB9Kwj500404@steinbit.troll.no>
next in thread | raw e-mail | index | archive | help
>Number: 32652
>Category: kern
>Synopsis: Add new scanners and a new ioctl to uscanner
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Dec 09 13:10:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Erik H. Bakke
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD steinbit.troll.no 5.0-CURRENT FreeBSD 5.0-CURRENT #14: Sun Dec 9 20:12:22 CET 2001 root@steinbit.troll.no:/usr/src/sys/i386/compile/WETLANDER i386
>Description:
Add support for new AGFA scanners to uscanner: Ref: kern/32649
SnapScan 1236U
SnapScan e20
SnapScan e25
SnapScan e26
SnapScan e40
SnapScan e50
SnapScan e52
This patch also adds support for a new IOCTL to uscanner.
USB_GET_DEVICE_ID is intended to make it easier to query for
the vendor and product IDs, and facilitates the use of USB
scanners with the sane port.
A patch for ports/graphics/sane-backends to use the ioctl is
on its way.
>How-To-Repeat:
>Fix:
diff -ruN usb.bak/usb.h usb/usb.h
--- usb.bak/usb.h Sun Dec 9 21:44:13 2001
+++ usb/usb.h Sun Dec 9 21:41:01 2001
@@ -567,4 +567,7 @@
#define USB_GET_CM_OVER_DATA _IOR ('U', 130, int)
#define USB_SET_CM_OVER_DATA _IOW ('U', 131, int)
+/* Scanner device */
+#define USB_GET_DEVICE_ID _IOR('U', 140, int)
+
#endif /* _USB_H_ */
diff -ruN usb.bak/uscanner.c usb/uscanner.c
--- usb.bak/uscanner.c Sun Dec 9 21:44:13 2001
+++ usb/uscanner.c Sun Dec 9 21:41:10 2001
@@ -95,6 +95,13 @@
{ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U },
{ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1212U2 },
{ USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANTOUCH },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCAN1236U },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE20 },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE25 },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE26 },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE40 },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE50 },
+ { USB_VENDOR_AGFA, USB_PRODUCT_AGFA_SNAPSCANE52 },
/* Kye */
{ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO },
@@ -197,6 +204,8 @@
int sc_refcnt;
u_char sc_dying;
+ u_int16_t sc_vendor_id;
+ u_int16_t sc_product_id;
};
#if defined(__NetBSD__) || defined(__OpenBSD__)
@@ -207,7 +216,7 @@
d_read_t uscannerread;
d_write_t uscannerwrite;
d_poll_t uscannerpoll;
-
+d_ioctl_t uscannerioctl;
#define USCANNER_CDEV_MAJOR 156
Static struct cdevsw uscanner_cdevsw = {
@@ -215,7 +224,7 @@
/* close */ uscannerclose,
/* read */ uscannerread,
/* write */ uscannerwrite,
- /* ioctl */ noioctl,
+ /* ioctl */ uscannerioctl,
/* poll */ uscannerpoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
@@ -267,6 +276,8 @@
printf("%s: %s\n", USBDEVNAME(sc->sc_dev), devinfo);
sc->sc_udev = uaa->device;
+ sc->sc_vendor_id = uaa->vendor;
+ sc->sc_product_id = uaa->product;
err = usbd_set_config_no(uaa->device, 1, 1); /* XXX */
if (err) {
@@ -338,9 +349,10 @@
USB_GET_SC_OPEN(uscanner, unit, sc);
- DPRINTFN(5, ("uscanneropen: flag=%d, mode=%d, unit=%d\n",
+ DPRINTFN(5, ("uscanneropen: flag=%d, mode=%d, unit=%d\n",
flag, mode, unit));
+ printf( "uscanneropen()\n" );
if (sc->sc_dying)
return (ENXIO);
@@ -664,6 +676,28 @@
return (revents);
}
+int
+uscannerioctl( dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread* td )
+{
+ struct uscanner_softc* sc;
+
+ USB_GET_SC( uscanner, USCANNERUNIT( dev ), sc );
+
+ if( sc->sc_dying )
+ return( EIO );
+
+ switch( cmd ) {
+ case USB_GET_DEVICE_ID:
+ *(u_int32_t*)addr = ( sc->sc_vendor_id << 16 ) | sc->sc_product_id;
+ break;
+ default:
+ return EINVAL;
+ }
+ return 0;
+}
+
#if defined(__FreeBSD__)
DRIVER_MODULE(uscanner, uhub, uscanner_driver, uscanner_devclass, usbd_driver_load, 0);
#endif
+
+
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112092058.fB9Kwj500404>
