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

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

?? dummy_audio.c

?? host usb 主設(shè)備程序 支持sd卡 mouse keyboard 的最單單的驅(qū)動(dòng)程序 gcc編譯
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
				req->status, req->actual, req->length);}/* * The setup() callback implements all the ep0 functionality that's * not handled lower down, in hardware or the hardware driver (like * device and endpoint feature flags, and their status).  It's all * housekeeping for the gadget function we're implementing.  Most of * the work is in config-specific setup. */static intzero_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl){	struct zero_dev		*dev = get_gadget_data (gadget);	struct usb_request	*req = dev->req;	int			value = -EOPNOTSUPP;	/* usually this stores reply data in the pre-allocated ep0 buffer,	 * but config change events will reconfigure hardware.	 */	req->zero = 0;	switch (ctrl->bRequest) {	case USB_REQ_GET_DESCRIPTOR:		switch (ctrl->wValue >> 8) {		case USB_DT_DEVICE:			value = min (ctrl->wLength, (u16) sizeof device_desc);			memcpy (req->buf, &device_desc, value);			break;#ifdef CONFIG_USB_GADGET_DUALSPEED		case USB_DT_DEVICE_QUALIFIER:			if (!gadget->is_dualspeed)				break;			value = min (ctrl->wLength, (u16) sizeof dev_qualifier);			memcpy (req->buf, &dev_qualifier, value);			break;		case USB_DT_OTHER_SPEED_CONFIG:			if (!gadget->is_dualspeed)				break;			// FALLTHROUGH#endif /* CONFIG_USB_GADGET_DUALSPEED */		case USB_DT_CONFIG:			value = config_buf (gadget, req->buf,					ctrl->wValue >> 8,					ctrl->wValue & 0xff);			if (value >= 0)				value = min (ctrl->wLength, (u16) value);			break;		case USB_DT_STRING:			/* wIndex == language code.			 * this driver only handles one language, you can			 * add string tables for other languages, using			 * any UTF-8 characters			 */			value = usb_gadget_get_string (&stringtab,					ctrl->wValue & 0xff, req->buf);			if (value >= 0) {				value = min (ctrl->wLength, (u16) value);			}			break;		}		break;	/* currently two configs, two speeds */	case USB_REQ_SET_CONFIGURATION:		if (ctrl->bRequestType != 0)			goto unknown;		spin_lock (&dev->lock);		value = zero_set_config (dev, ctrl->wValue, GFP_ATOMIC);		spin_unlock (&dev->lock);		break;	case USB_REQ_GET_CONFIGURATION:		if (ctrl->bRequestType != USB_DIR_IN)			goto unknown;		*(u8 *)req->buf = dev->config;		value = min (ctrl->wLength, (u16) 1);		break;	/* until we add altsetting support, or other interfaces,	 * only 0/0 are possible.  pxa2xx only supports 0/0 (poorly)	 * and already killed pending endpoint I/O.	 */	case USB_REQ_SET_INTERFACE:		if (ctrl->bRequestType != USB_RECIP_INTERFACE)			goto unknown;		spin_lock (&dev->lock);		if (dev->config) {			u8		config = dev->config;			/* resets interface configuration, forgets about			 * previous transaction state (queued bufs, etc)			 * and re-inits endpoint state (toggle etc)			 * no response queued, just zero status == success.			 * if we had more than one interface we couldn't			 * use this "reset the config" shortcut.			 */			zero_reset_config (dev);			zero_set_config (dev, config, GFP_ATOMIC);			value = 0;		}		spin_unlock (&dev->lock);		break;	case USB_REQ_GET_INTERFACE:		if ((ctrl->bRequestType == 0x21) && (ctrl->wIndex == 0x02)) {			value = ctrl->wLength;			break;		}		else {			if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))				goto unknown;			if (!dev->config)				break;			if (ctrl->wIndex != 0) {				value = -EDOM;				break;			}			*(u8 *)req->buf = 0;			value = min (ctrl->wLength, (u16) 1);		}		break;	/*	 * These are the same vendor-specific requests supported by	 * Intel's USB 2.0 compliance test devices.  We exceed that	 * device spec by allowing multiple-packet requests.	 */	case 0x5b:	/* control WRITE test -- fill the buffer */		if (ctrl->bRequestType != (USB_DIR_OUT|USB_TYPE_VENDOR))			goto unknown;		if (ctrl->wValue || ctrl->wIndex)			break;		/* just read that many bytes into the buffer */		if (ctrl->wLength > USB_BUFSIZ)			break;		value = ctrl->wLength;		break;	case 0x5c:	/* control READ test -- return the buffer */		if (ctrl->bRequestType != (USB_DIR_IN|USB_TYPE_VENDOR))			goto unknown;		if (ctrl->wValue || ctrl->wIndex)			break;		/* expect those bytes are still in the buffer; send back */		if (ctrl->wLength > USB_BUFSIZ				|| ctrl->wLength != req->length)			break;		value = ctrl->wLength;		break;	case 0x01: // SET_CUR	case 0x02:	case 0x03:	case 0x04:	case 0x05:		value = ctrl->wLength;		break;	case 0x81:		switch (ctrl->wValue) {		case 0x0201:		case 0x0202:			((u8*)req->buf)[0] = 0x00;			((u8*)req->buf)[1] = 0xe3;			break;		case 0x0300:		case 0x0500:			((u8*)req->buf)[0] = 0x00;			break;		}		//((u8*)req->buf)[0] = 0x81;		//((u8*)req->buf)[1] = 0x81;		value = ctrl->wLength;		break;	case 0x82:		switch (ctrl->wValue) {		case 0x0201:		case 0x0202:			((u8*)req->buf)[0] = 0x00;			((u8*)req->buf)[1] = 0xc3;			break;		case 0x0300:		case 0x0500:			((u8*)req->buf)[0] = 0x00;			break;		}		//((u8*)req->buf)[0] = 0x82;		//((u8*)req->buf)[1] = 0x82;		value = ctrl->wLength;		break;	case 0x83:		switch (ctrl->wValue) {		case 0x0201:		case 0x0202:			((u8*)req->buf)[0] = 0x00;			((u8*)req->buf)[1] = 0x00;			break;		case 0x0300:			((u8*)req->buf)[0] = 0x60;			break;		case 0x0500:				((u8*)req->buf)[0] = 0x18;			break;		}		//((u8*)req->buf)[0] = 0x83;		//((u8*)req->buf)[1] = 0x83;		value = ctrl->wLength;		break;	case 0x84:		switch (ctrl->wValue) {		case 0x0201:		case 0x0202:			((u8*)req->buf)[0] = 0x00;			((u8*)req->buf)[1] = 0x01;			break;		case 0x0300:		case 0x0500:			((u8*)req->buf)[0] = 0x08;			break;		}		//((u8*)req->buf)[0] = 0x84;		//((u8*)req->buf)[1] = 0x84;		value = ctrl->wLength;		break;	case 0x85:		((u8*)req->buf)[0] = 0x85;		((u8*)req->buf)[1] = 0x85;		value = ctrl->wLength;		break;		default:unknown:		printk("unknown control req%02x.%02x v%04x i%04x l%d\n",			ctrl->bRequestType, ctrl->bRequest,			ctrl->wValue, ctrl->wIndex, ctrl->wLength);	}	/* respond with data transfer before status phase? */	if (value >= 0) {		req->length = value;		req->zero = value < ctrl->wLength				&& (value % gadget->ep0->maxpacket) == 0;		value = usb_ep_queue (gadget->ep0, req, GFP_ATOMIC);		if (value < 0) {			DBG (dev, "ep_queue < 0 --> %d\n", value);			req->status = 0;			zero_setup_complete (gadget->ep0, req);		}	}	/* device either stalls (value < 0) or reports success */	return value;}static voidzero_disconnect (struct usb_gadget *gadget){	struct zero_dev		*dev = get_gadget_data (gadget);	unsigned long		flags;	spin_lock_irqsave (&dev->lock, flags);	zero_reset_config (dev);	/* a more significant application might have some non-usb	 * activities to quiesce here, saving resources like power	 * or pushing the notification up a network stack.	 */	spin_unlock_irqrestore (&dev->lock, flags);	/* next we may get setup() calls to enumerate new connections;	 * or an unbind() during shutdown (including removing module).	 */}static voidzero_autoresume (unsigned long _dev){	struct zero_dev	*dev = (struct zero_dev *) _dev;	int		status;	/* normally the host would be woken up for something	 * more significant than just a timer firing...	 */	if (dev->gadget->speed != USB_SPEED_UNKNOWN) {		status = usb_gadget_wakeup (dev->gadget);		DBG (dev, "wakeup --> %d\n", status);	}}/*-------------------------------------------------------------------------*/static voidzero_unbind (struct usb_gadget *gadget){	struct zero_dev		*dev = get_gadget_data (gadget);	DBG (dev, "unbind\n");	/* we've already been disconnected ... no i/o is active */	if (dev->req)		free_ep_req (gadget->ep0, dev->req);	del_timer_sync (&dev->resume);	kfree (dev);	set_gadget_data (gadget, NULL);}static intzero_bind (struct usb_gadget *gadget){	struct zero_dev		*dev;	//struct usb_ep		*ep;	printk("binding\n");	/*	 * DRIVER POLICY CHOICE:  you may want to do this differently.	 * One thing to avoid is reusing a bcdDevice revision code	 * with different host-visible configurations or behavior	 * restrictions -- using ep1in/ep2out vs ep1out/ep3in, etc	 */	//device_desc.bcdDevice = __constant_cpu_to_le16 (0x0201);	/* ok, we made sense of the hardware ... */	dev = kmalloc (sizeof *dev, SLAB_KERNEL);	if (!dev)		return -ENOMEM;	memset (dev, 0, sizeof *dev);	spin_lock_init (&dev->lock);	dev->gadget = gadget;	set_gadget_data (gadget, dev);	/* preallocate control response and buffer */	dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL);	if (!dev->req)		goto enomem;	dev->req->buf = usb_ep_alloc_buffer (gadget->ep0, USB_BUFSIZ,				&dev->req->dma, GFP_KERNEL);	if (!dev->req->buf)		goto enomem;	dev->req->complete = zero_setup_complete;	device_desc.bMaxPacketSize0 = gadget->ep0->maxpacket;#ifdef CONFIG_USB_GADGET_DUALSPEED	/* assume ep0 uses the same value for both speeds ... */	dev_qualifier.bMaxPacketSize0 = device_desc.bMaxPacketSize0;	/* and that all endpoints are dual-speed */	//hs_source_desc.bEndpointAddress = fs_source_desc.bEndpointAddress;	//hs_sink_desc.bEndpointAddress = fs_sink_desc.bEndpointAddress;#endif	usb_gadget_set_selfpowered (gadget);	init_timer (&dev->resume);	dev->resume.function = zero_autoresume;	dev->resume.data = (unsigned long) dev;	gadget->ep0->driver_data = dev;	INFO (dev, "%s, version: " DRIVER_VERSION "\n", longname);	INFO (dev, "using %s, OUT %s IN %s\n", gadget->name,		EP_OUT_NAME, EP_IN_NAME);	snprintf (manufacturer, sizeof manufacturer,		UTS_SYSNAME " " UTS_RELEASE " with %s",		gadget->name);	return 0;enomem:	zero_unbind (gadget);	return -ENOMEM;}/*-------------------------------------------------------------------------*/static voidzero_suspend (struct usb_gadget *gadget){	struct zero_dev		*dev = get_gadget_data (gadget);	if (gadget->speed == USB_SPEED_UNKNOWN)		return;	if (autoresume) {		mod_timer (&dev->resume, jiffies + (HZ * autoresume));		DBG (dev, "suspend, wakeup in %d seconds\n", autoresume);	} else		DBG (dev, "suspend\n");}static voidzero_resume (struct usb_gadget *gadget){	struct zero_dev		*dev = get_gadget_data (gadget);	DBG (dev, "resume\n");	del_timer (&dev->resume);}/*-------------------------------------------------------------------------*/static struct usb_gadget_driver zero_driver = {#ifdef CONFIG_USB_GADGET_DUALSPEED	.speed		= USB_SPEED_HIGH,#else	.speed		= USB_SPEED_FULL,#endif	.function	= (char *) longname,	.bind		= zero_bind,	.unbind		= zero_unbind,	.setup		= zero_setup,	.disconnect	= zero_disconnect,	.suspend	= zero_suspend,	.resume		= zero_resume,	.driver 	= {		.name		= (char *) shortname,		// .shutdown = ...		// .suspend = ...		// .resume = ...	},};MODULE_AUTHOR ("David Brownell");MODULE_LICENSE ("Dual BSD/GPL");static struct proc_dir_entry *pdir, *pfile;static int isoc_read_data (char *page, char **start,			   off_t off, int count,			   int *eof, void *data){	int i;	static int c = 0;	static int done = 0;	static int s = 0;/*	printk ("\ncount: %d\n", count);	printk ("rbuf_start: %d\n", rbuf_start);	printk ("rbuf_len: %d\n", rbuf_len);	printk ("off: %d\n", off);	printk ("start: %p\n\n", *start);*/	if (done) {		c = 0;		done = 0;		*eof = 1;		return 0;	}	if (c == 0) {		if (rbuf_len == RBUF_LEN)			s = rbuf_start;		else s = 0;	}	for (i=0; i<count && c<rbuf_len; i++, c++) {		page[i] = rbuf[(c+s) % RBUF_LEN];	}	*start = page;		if (c >= rbuf_len) {		*eof = 1;		done = 1;	}	return i;}static int __init init (void){	int retval = 0;	pdir = proc_mkdir("isoc_test", NULL);	if(pdir == NULL) {		retval = -ENOMEM;		printk("Error creating dir\n");		goto done;	}	pdir->owner = THIS_MODULE;	pfile = create_proc_read_entry("isoc_data",				       0444, pdir,				       isoc_read_data,				       NULL);	if (pfile == NULL) {		retval = -ENOMEM;		printk("Error creating file\n");		goto no_file;	}	pfile->owner = THIS_MODULE;	return usb_gadget_register_driver (&zero_driver); no_file:	remove_proc_entry("isoc_data", NULL); done:	return retval;}module_init (init);static void __exit cleanup (void){	usb_gadget_unregister_driver (&zero_driver);		remove_proc_entry("isoc_data", pdir);	remove_proc_entry("isoc_test", NULL);}module_exit (cleanup);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产盗摄视频一区二区三区| 欧美性受极品xxxx喷水| 亚洲成人av电影| 久久精品一区二区| 91精品国产综合久久福利软件| 成人精品电影在线观看| 卡一卡二国产精品| 香蕉av福利精品导航| 亚洲欧美电影院| 国产女人18毛片水真多成人如厕| 在线电影欧美成精品| 色香色香欲天天天影视综合网| 国产最新精品免费| 蜜桃久久精品一区二区| 性做久久久久久久免费看| 亚洲日本成人在线观看| 国产精品污污网站在线观看 | 欧美三级蜜桃2在线观看| 国产精品资源网| 精品综合久久久久久8888| 亚洲成人手机在线| 亚洲在线视频网站| 亚洲在线视频免费观看| 亚洲免费大片在线观看| 中文字幕综合网| 国产蜜臀av在线一区二区三区| 精品久久久久99| 91精品在线免费观看| 7777精品伊人久久久大香线蕉经典版下载 | 日韩精彩视频在线观看| 一区二区三区四区av| 亚洲丝袜另类动漫二区| 国产精品天干天干在线综合| 国产欧美日韩在线| 日本一区二区三区四区| 日本一区二区久久| 欧美韩国日本一区| 国产精品萝li| 亚洲欧美日本韩国| 亚洲激情图片qvod| 亚洲国产日韩综合久久精品| 亚洲国产综合91精品麻豆| 亚洲午夜三级在线| 同产精品九九九| 免费成人性网站| 精品系列免费在线观看| 精品系列免费在线观看| 国产激情一区二区三区四区 | 亚洲免费资源在线播放| 自拍偷拍欧美精品| 亚洲图片欧美综合| 日本不卡在线视频| 精品一二三四区| 成人免费毛片app| 91精彩视频在线观看| 欧美色视频在线观看| 欧美一级在线观看| 久久综合久久久久88| 国产精品视频第一区| 亚洲精品大片www| 视频在线观看一区| 国产精品99久久久久久久vr| av中文字幕不卡| 欧美久久久久中文字幕| 2021中文字幕一区亚洲| 亚洲欧洲精品天堂一级| 亚洲国产精品久久人人爱蜜臀| 蜜臀久久99精品久久久久久9| 国产精品18久久久| 欧美亚洲一区三区| 欧美成人午夜电影| 自拍偷拍亚洲激情| 日本一不卡视频| 成人黄色a**站在线观看| 欧美色综合网站| 国产日韩欧美一区二区三区综合| 日韩毛片高清在线播放| 日本色综合中文字幕| 成人av资源下载| 69堂成人精品免费视频| 国产精品久久久久影院| 日韩影院在线观看| av一区二区三区| 欧美一二三区在线| 亚洲精品国产高清久久伦理二区| 久久精品国产亚洲一区二区三区| 91在线小视频| 欧美成人伊人久久综合网| 亚洲色图视频免费播放| 九九九精品视频| 欧美亚洲一区二区在线| 欧美激情一区二区| 青青草成人在线观看| 日本久久一区二区| 久久久久久97三级| 日一区二区三区| 一本高清dvd不卡在线观看| xfplay精品久久| 亚洲超碰97人人做人人爱| av男人天堂一区| 精品国产乱码久久久久久闺蜜| 一区二区三区产品免费精品久久75| 激情综合亚洲精品| 在线成人小视频| 一区二区三区在线高清| 成人禁用看黄a在线| 久久久久国产精品麻豆ai换脸| 日韩专区在线视频| 色中色一区二区| ●精品国产综合乱码久久久久| 精品一二三四区| 91精品免费观看| 亚洲成人资源在线| 91国内精品野花午夜精品| **性色生活片久久毛片| 国产剧情在线观看一区二区| 欧美一区二区黄色| 日韩综合一区二区| 欧美另类一区二区三区| 亚洲超丰满肉感bbw| 欧美在线观看一区| 亚洲伊人色欲综合网| 欧美在线观看视频一区二区三区 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 精品一区二区三区影院在线午夜| 9191成人精品久久| 午夜久久久久久电影| 欧美性感一类影片在线播放| 一区二区在线观看av| 色8久久精品久久久久久蜜| 亚洲日本一区二区| 色999日韩国产欧美一区二区| 亚洲三级免费电影| 色欧美乱欧美15图片| 一区二区三区中文字幕电影| 色噜噜狠狠色综合欧洲selulu| 亚洲人亚洲人成电影网站色| 日本福利一区二区| 亚洲va天堂va国产va久| 欧美喷潮久久久xxxxx| 视频一区视频二区中文| 日韩丝袜美女视频| 精品一区二区三区香蕉蜜桃 | 亚洲国产精品国自产拍av| 成人午夜视频福利| 国产精品天天看| 在线免费观看日本一区| 五月婷婷激情综合| 精品久久国产老人久久综合| 国产a视频精品免费观看| 中文字幕一区二区三区四区| 在线视频你懂得一区二区三区| 亚洲在线视频免费观看| 日韩一区二区免费在线电影| 国产麻豆成人传媒免费观看| 国产日韩欧美精品综合| 日本精品视频一区二区三区| 亚洲一二三区不卡| 精品第一国产综合精品aⅴ| 国产91精品久久久久久久网曝门| 中文字幕一区av| 欧美精品xxxxbbbb| 国产很黄免费观看久久| 亚洲黄色小视频| 欧美刺激午夜性久久久久久久| 成人涩涩免费视频| 亚洲成av人影院在线观看网| 精品久久久久久久久久久久久久久| 成人黄色在线网站| 天天av天天翘天天综合网色鬼国产| 日韩欧美亚洲另类制服综合在线| 成人免费看的视频| 日韩vs国产vs欧美| 亚洲国产电影在线观看| 欧美日韩精品免费观看视频| 国产高清亚洲一区| 亚洲成年人影院| 欧美高清在线视频| 91精品欧美久久久久久动漫| 波多野结衣在线一区| 日韩国产高清影视| 国产精品国产自产拍高清av| 欧美一级国产精品| 91一区二区在线| 精品一区二区日韩| 亚洲国产成人av网| 国产精品乱码妇女bbbb| 日韩一级大片在线观看| 91亚洲精品久久久蜜桃网站| 久草热8精品视频在线观看| 亚洲在线视频免费观看| 久久精品人人爽人人爽| 欧美精品aⅴ在线视频| 99久久综合国产精品| 国产一区二区美女| 日本成人中文字幕在线视频| 一区二区三区精品在线观看| 亚洲福利视频三区| 国产精品高潮呻吟| 久久久久久9999|