亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? scanner.h

?? linux qt的圖形設(shè)計實際例子
?? H
字號:
/*
 * Driver for USB Scanners (linux-2.4.12)
 *
 * Copyright (C) 1999, 2000, 2001 David E. Nelson
 *
 * David E. Nelson (dnelson@jump.net)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * 05/21/02 Currently maintained by Brian Beattie <beattie@beattie-home.net>
 *
 *
 */ 

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <asm/uaccess.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/ioctl.h>
#include <linux/sched.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>

// #define DEBUG

/* Enable this to support the older ioctl interfaces scanners that
 * a PV8630 Scanner-On-Chip.  The prefered method is the
 * SCANNER_IOCTL_CTRLMSG ioctl.
 */
// #define PV8630 

#define DRIVER_VERSION "0.4.6"
#define DRIVER_DESC "USB Scanner Driver"

#include <linux/usb.h>

static __s32 vendor=-1, product=-1, read_timeout=0;

MODULE_AUTHOR("David E. Nelson, dnelson@jump.net, http://www.jump.net/~dnelson");
MODULE_DESCRIPTION(DRIVER_DESC" "DRIVER_VERSION);
MODULE_LICENSE("GPL");

MODULE_PARM(vendor, "i");
MODULE_PARM_DESC(vendor, "User specified USB idVendor");

MODULE_PARM(product, "i");
MODULE_PARM_DESC(product, "User specified USB idProduct");

MODULE_PARM(read_timeout, "i");
MODULE_PARM_DESC(read_timeout, "User specified read timeout in seconds");


/* 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 */
// #define WR_DATA_DUMP /* DEBUG does not have to be defined. */

static struct usb_device_id scanner_device_ids [] = {
	/* Acer */
	{ USB_DEVICE(0x04a5, 0x2060) },	/* Prisa Acerscan 620U & 640U (!)*/
	{ USB_DEVICE(0x04a5, 0x2040) },	/* Prisa AcerScan 620U (!) */
	{ USB_DEVICE(0x04a5, 0x20c0) },  /* Prisa AcerScan 1240UT */
	{ USB_DEVICE(0x04a5, 0x2022) },	/* Vuego Scan Brisa 340U */
	{ USB_DEVICE(0x04a5, 0x1a20) },	/* Unknown - Oliver Schwartz */
	{ USB_DEVICE(0x04a5, 0x1a2a) },	/* Unknown - Oliver Schwartz */
	{ USB_DEVICE(0x04a5, 0x207e) },	/* Prisa 640BU */
	{ USB_DEVICE(0x04a5, 0x20be) },	/* Unknown - Oliver Schwartz */
	{ USB_DEVICE(0x04a5, 0x20c0) },	/* Unknown - Oliver Schwartz */
	{ USB_DEVICE(0x04a5, 0x20de) },	/* S2W 3300U */
	{ USB_DEVICE(0x04a5, 0x20b0) },	/* Unknown - Oliver Schwartz */
	{ USB_DEVICE(0x04a5, 0x20fe) },	/* Unknown - Oliver Schwartz */
	/* Agfa */
	{ USB_DEVICE(0x06bd, 0x0001) },	/* SnapScan 1212U */
	{ USB_DEVICE(0x06bd, 0x0002) },	/* SnapScan 1236U */
	{ USB_DEVICE(0x06bd, 0x2061) },	/* Another SnapScan 1212U (?)*/
	{ USB_DEVICE(0x06bd, 0x0100) },	/* SnapScan Touch */
	{ USB_DEVICE(0x06bd, 0x2091) }, /* SnapScan e20 */
	{ USB_DEVICE(0x06bd, 0x2095) }, /* SnapScan e25 */
	{ USB_DEVICE(0x06bd, 0x2097) }, /* SnapScan e26 */
	{ USB_DEVICE(0x06bd, 0x208d) }, /* Snapscan e40 */
	/* Canon */
	{ USB_DEVICE(0x04a9, 0x2202) }, /* FB620U */
	{ USB_DEVICE(0x04a9, 0x220b) }, /* D646U */
	{ USB_DEVICE(0x04a9, 0x2207) }, /* 1220U */
	/* Colorado -- See Primax/Colorado below */
	/* Epson -- See Seiko/Epson below */
	/* Genius */
	{ USB_DEVICE(0x0458, 0x2001) },	/* ColorPage-Vivid Pro */
	{ USB_DEVICE(0x0458, 0x2007) },	/* ColorPage HR6 V2 */
	{ USB_DEVICE(0x0458, 0x2008) },	/* Unknown */
	{ USB_DEVICE(0x0458, 0x2009) },	/* Unknown */
	{ USB_DEVICE(0x0458, 0x2013) },	/* Unknown */
	{ USB_DEVICE(0x0458, 0x2015) },	/* Unknown  */
	{ USB_DEVICE(0x0458, 0x2016) },	/* Unknown  */
	/* Hewlett Packard */
	{ USB_DEVICE(0x03f0, 0x0205) },	/* 3300C */
	{ USB_DEVICE(0x03f0, 0x0405) }, /* 3400C */
	{ USB_DEVICE(0x03f0, 0x0101) },	/* 4100C */
	{ USB_DEVICE(0x03f0, 0x0105) },	/* 4200C */
	{ USB_DEVICE(0x03f0, 0x0305) }, /* 4300C */
	{ USB_DEVICE(0x03f0, 0x0102) },	/* PhotoSmart S20 */
	{ USB_DEVICE(0x03f0, 0x0401) },	/* 5200C */
	//	{ USB_DEVICE(0x03f0, 0x0701) },	/* 5300C - NOT SUPPORTED - see http://www.neatech.nl/oss/HP5300C/ */
	{ USB_DEVICE(0x03f0, 0x0201) },	/* 6200C */
	{ USB_DEVICE(0x03f0, 0x0601) },	/* 6300C */
	{ USB_DEVICE(0x03f0, 0x605) },	/* 2200C */
	/* iVina */
	{ USB_DEVICE(0x0638, 0x0268) }, /* 1200U */
	/* Lifetec */
	{ USB_DEVICE(0x05d8, 0x4002) }, /* Lifetec LT9385 */
	/* Memorex */
	{ USB_DEVICE(0x0461, 0x0346) }, /* 6136u - repackaged Primax ? */
	/* Microtek -- No longer supported - Enable SCSI and USB Microtek in kernel config */
	//	{ USB_DEVICE(0x05da, 0x0099) },	/* ScanMaker X6 - X6U */
	//	{ USB_DEVICE(0x05da, 0x0094) },	/* Phantom 336CX - C3 */
	//	{ USB_DEVICE(0x05da, 0x00a0) },	/* Phantom 336CX - C3 #2 */
	//	{ USB_DEVICE(0x05da, 0x009a) },	/* Phantom C6 */
	//	{ USB_DEVICE(0x05da, 0x00a3) },	/* ScanMaker V6USL */
	//	{ USB_DEVICE(0x05da, 0x80a3) },	/* ScanMaker V6USL #2 */
	//	{ USB_DEVICE(0x05da, 0x80ac) },	/* ScanMaker V6UL - SpicyU */
	/* Minolta */
	//	{ USB_DEVICE(0x0638,0x026a) }, /* Minolta Dimage Scan Dual II */
	/* Mustek */
	{ USB_DEVICE(0x055f, 0x0001) },	/* 1200 CU */
	{ USB_DEVICE(0x0400, 0x1000) },	/* BearPaw 1200 */
	{ USB_DEVICE(0x055f, 0x0002) },	/* 600 CU */
	{ USB_DEVICE(0x055f, 0x0873) }, /* 600 USB */
	{ USB_DEVICE(0x055f, 0x0003) },	/* 1200 USB */
	{ USB_DEVICE(0x055f, 0x0006) },	/* 1200 UB */
	{ USB_DEVICE(0x0400, 0x1001) }, /* BearPaw 2400 */
	{ USB_DEVICE(0x055f, 0x0008) }, /* 1200 CU Plus */
	{ USB_DEVICE(0x0ff5, 0x0010) }, /* BearPaw 1200F */
	/* Plustek */
	{ USB_DEVICE(0x07b3, 0x0017) }, /* OpticPro UT12 */
	{ USB_DEVICE(0x07b3, 0x0011) }, /* OpticPro UT24 */
	{ USB_DEVICE(0x07b3, 0x0005) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0007) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x000F) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0010) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0012) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0013) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0014) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0015) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0016) }, /* Unknown */
	{ USB_DEVICE(0x07b3, 0x0012) }, /* Unknown */
	/* Primax/Colorado */
	{ USB_DEVICE(0x0461, 0x0300) },	/* G2-300 #1 */
	{ USB_DEVICE(0x0461, 0x0380) },	/* G2-600 #1 */
	{ USB_DEVICE(0x0461, 0x0301) },	/* G2E-300 #1 */
	{ USB_DEVICE(0x0461, 0x0381) },	/* ReadyScan 636i */
	{ USB_DEVICE(0x0461, 0x0302) },	/* G2-300 #2 */
	{ USB_DEVICE(0x0461, 0x0382) },	/* G2-600 #2 */
	{ USB_DEVICE(0x0461, 0x0303) },	/* G2E-300 #2 */
	{ USB_DEVICE(0x0461, 0x0383) },	/* G2E-600 */
	{ USB_DEVICE(0x0461, 0x0340) },	/* Colorado USB 9600 */
	// { USB_DEVICE(0x0461, 0x0360) },	/* Colorado USB 19200 - undetected endpoint */
	{ USB_DEVICE(0x0461, 0x0341) },	/* Colorado 600u */
	{ USB_DEVICE(0x0461, 0x0361) },	/* Colorado 1200u */
	/* Relisis */
	// { USB_DEVICE(0x0475, 0x0103) },	/* Episode - undetected endpoint */
	/* Seiko/Epson Corp. */
	{ USB_DEVICE(0x04b8, 0x0101) },	/* Perfection 636U and 636Photo */
	{ USB_DEVICE(0x04b8, 0x0103) },	/* Perfection 610 */
	{ USB_DEVICE(0x04b8, 0x0104) },	/* Perfection 1200U and 1200Photo*/
	{ USB_DEVICE(0x04b8, 0x0106) },	/* Stylus Scan 2500 */
	{ USB_DEVICE(0x04b8, 0x0107) },	/* Expression 1600 */
	{ USB_DEVICE(0x04b8, 0x010a) }, /* Perfection 1640SU and 1640SU Photo */
	{ USB_DEVICE(0x04b8, 0x010b) }, /* Perfection 1240U */
	{ USB_DEVICE(0x04b8, 0x010c) }, /* Perfection 640U */
	{ USB_DEVICE(0x04b8, 0x010e) }, /* Expression 1680 */
	{ USB_DEVICE(0x04b8, 0x0110) }, /* Perfection 1650 */
	{ USB_DEVICE(0x04b8, 0x0112) }, /* Perfection 2450 - GT-9700 for the Japanese mkt */
	/* Umax */
	{ USB_DEVICE(0x1606, 0x0010) },	/* Astra 1220U */
	{ USB_DEVICE(0x1606, 0x0030) },	/* Astra 2000U */
	{ USB_DEVICE(0x1606, 0x0130) }, /* Astra 2100U */
	{ USB_DEVICE(0x1606, 0x0230) },	/* Astra 2200U */
	/* Visioneer */
	{ USB_DEVICE(0x04a7, 0x0221) },	/* OneTouch 5300 USB */
	{ USB_DEVICE(0x04a7, 0x0211) },	/* OneTouch 7600 USB */
	{ USB_DEVICE(0x04a7, 0x0231) },	/* 6100 USB */
	{ USB_DEVICE(0x04a7, 0x0311) },	/* 6200 EPP/USB */
	{ USB_DEVICE(0x04a7, 0x0321) },	/* OneTouch 8100 EPP/USB */
	{ USB_DEVICE(0x04a7, 0x0331) }, /* OneTouch 8600 EPP/USB */
	{ }				/* Terminating entry */
};

MODULE_DEVICE_TABLE (usb, scanner_device_ids);

#define IS_EP_BULK(ep)  ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
#define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
#define IS_EP_INTR(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_INT ? 1 : 0)

#define USB_SCN_MINOR(X) minor((X)->i_rdev) - SCN_BASE_MNR

#ifdef DEBUG
#define SCN_DEBUG(X) X
#else
#define SCN_DEBUG(X)
#endif

#define IBUF_SIZE 32768
#define OBUF_SIZE 4096

/* read_scanner timeouts -- RD_NAK_TIMEOUT * RD_EXPIRE = Number of seconds */
#define RD_NAK_TIMEOUT (10*HZ)	/* Default number of X seconds to wait */
#define RD_EXPIRE 12		/* Number of attempts to wait X seconds */


/* FIXME: These are NOT registered ioctls()'s */
#ifdef PV8630
#define PV8630_IOCTL_INREQUEST 69
#define PV8630_IOCTL_OUTREQUEST 70
#endif /* PV8630 */


/* read vendor and product IDs from the scanner */
#define SCANNER_IOCTL_VENDOR _IOR('U', 0x20, int)
#define SCANNER_IOCTL_PRODUCT _IOR('U', 0x21, int)
/* send/recv a control message to the scanner */
#define SCANNER_IOCTL_CTRLMSG _IOWR('U', 0x22, struct usb_ctrlrequest)


#ifdef CONFIG_USB_DYNAMIC_MINORS
#define SCN_MAX_MNR 256
#define SCN_BASE_MNR 0
#else
#define SCN_MAX_MNR 16		/* We're allocated 16 minors */
#define SCN_BASE_MNR 48		/* USB Scanners start at minor 48 */
#endif

static DECLARE_MUTEX (scn_mutex); /* Initializes to unlocked */

struct scn_usb_data {
	struct usb_device *scn_dev;
	devfs_handle_t devfs;	/* devfs device */
	struct urb *scn_irq;
	unsigned int ifnum;	/* Interface number of the USB device */
	int scn_minor;		/* Scanner minor - used in disconnect() */
	unsigned char button;	/* Front panel buffer */
	char isopen;		/* Not zero if the device is open */
	char present;		/* Not zero if device is present */
	char *obuf, *ibuf;	/* transfer buffers */
	char bulk_in_ep, bulk_out_ep, intr_ep; /* Endpoint assignments */
	wait_queue_head_t rd_wait_q; /* read timeouts */
	struct semaphore sem; /* lock to prevent concurrent reads or writes */
	unsigned int rd_nak_timeout; /* Seconds to wait before read() timeout. */
};

extern devfs_handle_t usb_devfs_handle;

static struct scn_usb_data *p_scn_table[SCN_MAX_MNR] = { NULL, /* ... */};

static struct usb_driver scanner_driver;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久噜噜噜久久中文字幕色伊伊 | 亚洲图片激情小说| 亚洲精品菠萝久久久久久久| 美国精品在线观看| 成人免费视频视频在线观看免费| 欧美视频一区二区在线观看| 国产欧美一区二区精品婷婷| 亚洲国产欧美在线| 99久久精品国产一区| 欧美成人猛片aaaaaaa| 亚洲一卡二卡三卡四卡无卡久久| 国产精品资源网站| 日韩一区二区在线观看| 亚洲国产综合色| av一区二区三区四区| 久久久久亚洲蜜桃| 久久爱另类一区二区小说| 欧美日韩国产小视频| 一区二区日韩电影| 91在线精品一区二区三区| 国产午夜精品久久久久久久 | 亚洲视频电影在线| 国产精品一二一区| 久久中文娱乐网| 久久国产精品99精品国产| 91麻豆精品国产无毒不卡在线观看| 1区2区3区国产精品| 成人精品一区二区三区四区| 国产色综合久久| 国产精品资源网站| 国产日韩欧美不卡在线| 国产精品亚洲专一区二区三区 | 韩国女主播一区| 欧美mv日韩mv| 国产一区二区三区免费观看| 欧美不卡一二三| 九九国产精品视频| 久久久久久久久99精品| 国产成人免费网站| 久久久久青草大香线综合精品| 国产传媒日韩欧美成人| 国产精品久久免费看| 99精品视频在线观看| 亚洲三级小视频| 色爱区综合激月婷婷| 亚洲成人动漫av| 日韩免费一区二区三区在线播放| 日韩av电影天堂| 精品久久久久久久久久久久久久久 | 成人av电影在线| 国产精品免费av| 色系网站成人免费| 视频在线观看一区二区三区| 日韩午夜在线播放| 国产精品一区二区三区乱码| 国产精品久久久久久一区二区三区| 成a人片亚洲日本久久| 夜夜嗨av一区二区三区四季av | 91豆麻精品91久久久久久| 亚洲福利一区二区| 精品噜噜噜噜久久久久久久久试看 | 国产精品福利电影一区二区三区四区| caoporen国产精品视频| 亚洲成人在线观看视频| 日韩欧美一区二区免费| 成人精品在线视频观看| 日韩电影在线观看一区| 国产午夜精品在线观看| 精品视频一区二区三区免费| 久久国产欧美日韩精品| 亚洲欧美日韩小说| 精品国产一区二区三区av性色| 国产成人免费在线观看| 亚洲h在线观看| 国产欧美日本一区二区三区| 欧美怡红院视频| 国产成人免费在线视频| 香蕉久久夜色精品国产使用方法| 国产亚洲成av人在线观看导航| 欧美色精品在线视频| 国产激情偷乱视频一区二区三区| 亚洲激情男女视频| 久久奇米777| 在线成人高清不卡| 91视频一区二区| 国内不卡的二区三区中文字幕| 悠悠色在线精品| 国产欧美日韩综合精品一区二区| 欧美日韩高清一区二区不卡| a级高清视频欧美日韩| 另类小说欧美激情| 亚洲成人自拍网| 亚洲人123区| 亚洲国产精品国自产拍av| 日韩午夜精品电影| 欧美日韩久久一区| 一本一道久久a久久精品综合蜜臀| 国产在线精品视频| 奇米影视一区二区三区小说| 亚洲一区av在线| 伊人色综合久久天天人手人婷| 国产日韩欧美一区二区三区乱码| 日韩欧美在线观看一区二区三区| 欧美日韩国产美女| 在线视频一区二区三区| av中文字幕亚洲| 不卡欧美aaaaa| 成人永久看片免费视频天堂| 国产在线精品国自产拍免费| 国产一区二区中文字幕| 狠狠色狠狠色综合日日91app| 蜜芽一区二区三区| 毛片不卡一区二区| 免费高清成人在线| 久久综合综合久久综合| 久久99精品视频| 狠狠色综合日日| 国产凹凸在线观看一区二区| 国产成人免费视频| 成人一区二区三区视频在线观看| 懂色av中文字幕一区二区三区| 国产精品原创巨作av| 丰满岳乱妇一区二区三区| 成人精品电影在线观看| 99久久综合精品| 91搞黄在线观看| 欧美一卡2卡3卡4卡| 日韩欧美国产三级| 久久久久久久久蜜桃| 亚洲国产精品成人综合 | 99精品一区二区三区| 色狠狠色狠狠综合| 91精品国产色综合久久不卡电影 | 欧美日韩精品欧美日韩精品一| 欧美日韩一区久久| 91精品国产乱| 欧美国产精品专区| 亚洲综合一区在线| 日韩福利电影在线观看| 国内精品伊人久久久久av影院 | 制服丝袜成人动漫| 精品国产乱码久久| 国产精品久久久久久久久图文区| 亚洲色欲色欲www| 日韩中文欧美在线| 国产福利精品导航| 欧亚一区二区三区| 欧美大尺度电影在线| 亚洲欧洲日产国码二区| 婷婷国产在线综合| 成人网在线播放| 欧美日韩成人综合在线一区二区| 精品国产伦一区二区三区观看方式 | 91在线观看视频| 欧美精品日韩精品| 久久久精品国产99久久精品芒果| 亚洲精品福利视频网站| 精品一区二区日韩| 在线免费观看不卡av| 337p日本欧洲亚洲大胆色噜噜| 亚洲品质自拍视频| 国产综合久久久久影院| 在线视频一区二区三| 欧美激情一区二区三区| 舔着乳尖日韩一区| 懂色av噜噜一区二区三区av| 欧美精品一卡二卡| 中文字幕一区二区不卡| 久久99国产精品麻豆| 欧美日韩综合一区| 国产精品乱子久久久久| 久久成人久久鬼色| 欧美中文字幕久久| 中文字幕高清不卡| 国产精品99久久久久久似苏梦涵| 欧美手机在线视频| 亚洲欧美日韩综合aⅴ视频| 国产一区二区久久| 91 com成人网| 91精品国产色综合久久不卡电影| 国产三级精品视频| 老司机精品视频一区二区三区| 91福利精品视频| 婷婷综合久久一区二区三区| 91国产视频在线观看| 午夜视频一区在线观看| 精品第一国产综合精品aⅴ| 欧美日韩高清一区二区三区| 色伊人久久综合中文字幕| 日韩精品一区二区三区在线 | 日韩三级视频在线观看| 在线欧美小视频| 福利91精品一区二区三区| 国产精品国产三级国产有无不卡| 国产精品18久久久| 成人精品视频一区二区三区| 久久国产精品99久久人人澡| 性做久久久久久免费观看| 欧美成人女星排名| 99热精品国产|