From owner-freebsd-bugs Sun Dec 9 13:10:12 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 26BF737B417 for ; Sun, 9 Dec 2001 13:10:01 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id fB9LA1058663; Sun, 9 Dec 2001 13:10:01 -0800 (PST) (envelope-from gnats) Received: from steinbit.troll.no (steinbit.troll.no [213.203.59.113]) by hub.freebsd.org (Postfix) with ESMTP id C4F9A37B416 for ; Sun, 9 Dec 2001 13:01:59 -0800 (PST) Received: (from root@localhost) by steinbit.troll.no (8.11.6/8.11.3) id fB9Kwj500404; Sun, 9 Dec 2001 21:58:45 +0100 (CET) (envelope-from ebakke) Message-Id: <200112092058.fB9Kwj500404@steinbit.troll.no> Date: Sun, 9 Dec 2001 21:58:45 +0100 (CET) From: "Erik H. Bakke" Reply-To: "Erik H. Bakke" To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.113 Subject: kern/32652: Add new scanners and a new ioctl to uscanner Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >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