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

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

?? controlrw.c

?? utisoftware c code for linux,機(jī)卡分離方案。
?? C
?? 第 1 頁 / 共 2 頁
字號:

#include  "defusr.h"
#include  "macusr.h"
#include  "libassp.h"
#include  "extern.h"
#include <linux/delay.h>


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Control write start
 *-----------------------------------------------------------------------------
 * Declaration	: void CW_Start(U16 Bsize, U8 *Table)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Bsize			; Data Size
 *				: U8  *Table		; Data Table Address
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void CW_Start(U32 Bsize, U8 *Table)
{
	dtcnt[PIPE0] = Bsize;
	dtptr[PIPE0] = (U8 *)Table;

	USBWR(DCPCTR, SQSET);							/* SQSET=1,PID=NAK */
	USB_SET_PAT(DCPCFG, DIR);						/* DIR=1 */
	USB_MDF_PAT(CFIFOSEL, (ISEL | PIPE0), (ISEL | CURPIPE));	/* ISEL=1, CURPIPE=EP0 */
	USBWR(CFIFOCTR, BCLR);
	Control_Write();
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Control write
 *-----------------------------------------------------------------------------
 * Declaration	: void Control_Write(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void Control_Write(void)
{
	U16				count, max_size, maxp;
	register U16	even, buffer;

	max_size = dcpMaxPacketSize();					/* MaxPacketSize */
	if( dtcnt[PIPE0] < max_size ) {
		count = dtcnt[PIPE0];
	} else {
		count = max_size;
	}

	USB_CLR_STS(BEMPSTS,  BEMP0);

	do {
		USBRD(CFIFOCTR, buffer);
	} while( (buffer & FRDY) == 0 );

	USBRD(CFIFOSEL, buffer);
	if( (buffer & MBW) == MBW_8 ) {
		for( even = count; even; --even ) {
			USBWR_FF(CFIFO_8, *dtptr[PIPE0]);
			dtptr[PIPE0] += 1;
		}
	} else {
		for( even = count / 2; even; --even ) {
			USBWR_FF(CFIFO, *((U16 *)dtptr[PIPE0]));
			dtptr[PIPE0] += 2;
		}
		if( (count % 2) != 0 ) {
			USBWR_FF(CFIFO_8, *dtptr[PIPE0]);
			dtptr[PIPE0] += 1;
		}
	}

#if 0
	if( dtcnt[PIPE0] < max_size ) {
		dtcnt[PIPE0] = 0;
		USBRD(CFIFOCTR, buffer);
		if( (buffer & BVAL) == 0 )
			USBWR(CFIFOCTR, BVAL);					/* Short Packet */
	} else {
		dtcnt[PIPE0] -= count;
	}

	if( (dtcnt[PIPE0] > 0) || ((count & max_size) == 0) ) {
		USB_SET_PAT(BEMPENB, BEMP0);
	}
#endif
#if 1
	if( dtcnt[PIPE0] < max_size ) {
		dtcnt[PIPE0] = 0;
		USBRD(CFIFOCTR, buffer);
		if( (buffer & BVAL) == 0 )
			USBWR(CFIFOCTR, BVAL);					/* Short Packet */

		USBRD(DCPMAXP, buffer);
		maxp = buffer & MAXP;
		if ( (count % maxp) == 0 ) 
			USB_SET_PAT(BEMPENB, BEMP0);
	} 
	else {
		dtcnt[PIPE0] -= count;
		USB_SET_PAT(BEMPENB, BEMP0);
	}
#endif
	USB_SET_PAT(DCPCTR, PID_BUF);
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Control read start
 *-----------------------------------------------------------------------------
 * Declaration	: void CR_Start(U16 Bsize, U8 *Table)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Bsize			; Data Size
 *				: U8  *Table		; Data Table Address
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void CR_Start(U32 Bsize, U8 *Table)
{
	dtcnt[PIPE0] = Bsize;
	dtptr[PIPE0] = (U8 *)Table;

	USBWR(DCPCTR, SQSET);							/* SQSET=1,PID=NAK */
	USB_CLR_PAT(DCPCFG, DIR);						/* DIR=0 */
	USB_MDF_PAT(CFIFOSEL, PIPE0, (ISEL | CURPIPE));	/* ISEL=0, CURPIPE=EP0 */
	USBWR(CFIFOCTR, BCLR);							/* Buffer Clear */
	USB_SET_PAT(BRDYENB, BRDY0);
	USB_SET_PAT(DCPCTR, PID_BUF);
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Control read
 *-----------------------------------------------------------------------------
 * Declaration	: void Control_Read(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void Control_Read(void)
{
	U16				count, dtln, max_size;
	U16				endflg = 0;
	register U16	even, buffer;

	SetEpPid(PIPE0, PID_NAK);

	do {
		USBRD(CFIFOCTR, buffer);
	} while( (buffer & FRDY) == 0 );
	dtln = buffer & DTLN;							/* Get data size */

	max_size = dcpMaxPacketSize();					/* MaxPacketSize */
	if( dtln < max_size ) {
		endflg = 1;									/* Short packet */
	}

	if( dtcnt[PIPE0] < dtln ) {
		count = dtcnt[PIPE0];
		endflg = 1;
	} else {
		count = dtln;
	}

	if( dtln == 0 ) {								/* 0 length packet */
		USBWR(CFIFOCTR, BCLR);						/* Clear BVAL */
	} else {
		USBRD(CFIFOSEL, buffer);
		if( (buffer & MBW) == MBW_8 ) {
			for( even = count; even; --even ) {
				USBRD_FF(CFIFO_8, *dtptr[PIPE0]);
				dtptr[PIPE0] += 1;
			}
		} else {
			for( even = count / 2; even; --even ) {
				USBRD_FF(CFIFO, *((U16 *)dtptr[PIPE0]));
				dtptr[PIPE0] += 2;
			}
			if( (count % 2) != 0 ) {
				USBRD_FF(CFIFO_8, *dtptr[PIPE0]);
				dtptr[PIPE0] += 1;
			}
		}
	}

	if( dtcnt[PIPE0] < count ) {
		dtcnt[PIPE0] = 0;
	} else {
		dtcnt[PIPE0] -= count;
	}

	if( dtcnt[PIPE0] == 0 ) {
		endflg = 1;
	}

	if( endflg == 1 ) {
		dtcnt[PIPE0] = 0;
		USB_CLR_PAT(BRDYENB, BRDY0);
	} else {
		USB_SET_PAT(DCPCTR, PID_BUF);
	}
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Control no data write
 *-----------------------------------------------------------------------------
 * Declaration	: U16 ControlNoWrite(U16 Req, U16 Val, U16 Indx, U16 Len)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Req			; bmRequestType & bRequest
 *				: U16 Val			; wValue
 *				: U16 Indx			; wIndex
 *				: U16 Len			; wLength
 *-----------------------------------------------------------------------------
 * Return		: U16				; SACK : Done
 *				:					; SIGN : Error
 *-----------------------------------------------------------------------------
 * Note			:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人一区| 精品久久久久香蕉网| 亚洲欧美在线高清| 91浏览器打开| 亚洲国产精品一区二区www在线| 欧美自拍偷拍一区| 日韩精品91亚洲二区在线观看 | 一区二区三区蜜桃| 欧美精品日韩一本| 国产裸体歌舞团一区二区| 中文字幕av一区 二区| 欧美综合在线视频| 欧美激情一区三区| 粉嫩久久99精品久久久久久夜| 国产精品久线观看视频| 在线观看日韩国产| 久久国产乱子精品免费女| 国产精品理论在线观看| 欧美三级韩国三级日本一级| 麻豆精品一区二区综合av| 亚洲国产精品成人综合色在线婷婷| 91在线观看地址| 蜜桃视频在线一区| 亚洲欧美激情视频在线观看一区二区三区 | 欧美色窝79yyyycom| 毛片av中文字幕一区二区| 国产精品天天摸av网| 欧美人牲a欧美精品| 国产激情视频一区二区三区欧美| 亚洲欧洲中文日韩久久av乱码| 777色狠狠一区二区三区| 国产成人精品免费在线| 丝袜亚洲另类丝袜在线| 亚洲欧美在线视频| 色综合天天综合在线视频| 一本一本久久a久久精品综合麻豆| 亚洲一卡二卡三卡四卡 | 美女网站一区二区| 亚洲精品久久久蜜桃| 精品福利av导航| 欧美亚洲自拍偷拍| 99久久99久久精品免费看蜜桃| 毛片av中文字幕一区二区| 亚洲精品中文在线观看| 国产亚洲一区二区三区在线观看| 欧美日韩精品系列| 一本到三区不卡视频| 国产盗摄精品一区二区三区在线 | 国产乱妇无码大片在线观看| 香蕉久久夜色精品国产使用方法| 《视频一区视频二区| 国产夜色精品一区二区av| 欧美一级专区免费大片| 欧美性xxxxxx少妇| 91美女片黄在线观看| 国产suv一区二区三区88区| 久久精品免费观看| 午夜免费久久看| 一级特黄大欧美久久久| 中文字幕日韩欧美一区二区三区| 久久青草国产手机看片福利盒子| 日韩欧美国产一区在线观看| 欧美人妇做爰xxxⅹ性高电影| 色噜噜偷拍精品综合在线| 97国产一区二区| 97久久精品人人做人人爽50路| 成人高清视频在线| 99久久精品国产毛片| 波多野结衣精品在线| 成人一道本在线| jlzzjlzz亚洲日本少妇| 成人18视频在线播放| 制服丝袜在线91| 欧美日韩一区视频| 欧美三区免费完整视频在线观看| 在线看国产一区二区| 欧美在线一二三四区| 欧美视频一区在线观看| 欧美理论片在线| 在线不卡中文字幕播放| 欧美一区二区在线看| 日韩欧美一区在线| 久久久国产综合精品女国产盗摄| www国产成人| 国产精品丝袜91| 亚洲另类在线一区| 日韩精品欧美精品| 激情综合色播五月| www.亚洲人| 色婷婷综合视频在线观看| 欧美在线制服丝袜| 日韩一区二区三区视频| 久久久久久久久久久久久女国产乱| 欧美高清一级片在线观看| 亚洲丝袜制服诱惑| 午夜精品福利一区二区三区av | 亚洲欧美日韩综合aⅴ视频| 亚洲国产一区二区三区 | 成人午夜短视频| 一本到不卡精品视频在线观看| 欧美日韩免费一区二区三区视频| 日韩一级黄色片| 国产精品三级av| 午夜一区二区三区视频| 国产乱色国产精品免费视频| 91色在线porny| 欧美一二三在线| 中文字幕巨乱亚洲| 首页国产欧美日韩丝袜| 顶级嫩模精品视频在线看| 欧美日精品一区视频| 国产午夜精品久久| 亚洲第一综合色| 国产一区二区中文字幕| 欧美偷拍一区二区| 欧美激情一区二区三区蜜桃视频| 亚洲一区精品在线| 国产成人综合亚洲网站| 4438x亚洲最大成人网| 国产精品国产三级国产aⅴ原创 | 亚洲成人动漫在线观看| 国产成人av电影| 欧美美女一区二区| 国产精品免费av| 久久精品免费观看| 欧美日韩在线综合| 中文字幕亚洲电影| 国产一区二区主播在线| 337p亚洲精品色噜噜狠狠| 成人免费在线观看入口| 激情五月激情综合网| 欧美日韩黄色影视| 亚洲三级在线观看| 国产激情精品久久久第一区二区| 91精品国产综合久久精品| 一区二区三区四区在线| 成人av小说网| 久久精品欧美一区二区三区不卡 | 国产高清在线观看免费不卡| 5月丁香婷婷综合| 一区av在线播放| 99精品在线观看视频| 国产日韩欧美精品一区| 青青草视频一区| 欧美日韩成人综合| 亚洲一级在线观看| 在线一区二区三区| ㊣最新国产の精品bt伙计久久| 国产激情一区二区三区| 久久青草国产手机看片福利盒子| 久久精品99国产精品| 欧美一区国产二区| 视频一区二区中文字幕| 国产精品美女视频| 欧美国产日本视频| 国内精品免费在线观看| 91精品视频网| 视频一区二区不卡| 欧美日韩欧美一区二区| 亚洲第一主播视频| 欧美日韩不卡在线| 图片区小说区国产精品视频| 欧美视频自拍偷拍| 亚洲小说春色综合另类电影| 欧美午夜在线观看| 亚洲r级在线视频| 欧美日本一道本在线视频| 天堂一区二区在线| 8x8x8国产精品| 久久99久久精品| 国产无一区二区| 成人免费观看男女羞羞视频| 亚洲视频你懂的| 欧美日韩美少妇| 日韩av二区在线播放| 精品国产一区二区精华| 国产成人免费在线观看不卡| 国产精品蜜臀在线观看| 在线观看网站黄不卡| 午夜精品国产更新| 精品久久国产老人久久综合| 国产麻豆视频一区二区| 中文字幕一区在线| 欧美狂野另类xxxxoooo| 欧美日韩一级大片网址| 欧美日韩三级一区| 午夜电影网亚洲视频| 日韩三级精品电影久久久 | 久久91精品久久久久久秒播| 欧美精品一区二区不卡| 国产成人av电影在线播放| 亚洲精品免费视频| 日韩精品在线看片z| 福利电影一区二区三区| 尤物在线观看一区| 日韩一级黄色片| 99riav一区二区三区| 日韩va欧美va亚洲va久久| 国产欧美精品日韩区二区麻豆天美| 91看片淫黄大片一级在线观看|