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

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

?? ian_xmodem.c

?? umon bootloader source code, support mips cpu.
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
			break;
		
		/* 
		 * receive file-data
		 */
		xif.dataddr = dataddr;
		xif.usecrc = yip->usecrc;
		xif.verify = yip->verify;

		if ( yip->verify ) {
#if INCLUDE_TFS
			if (! (tfp = tfsstat(yip->fname[yip->filecnt])) ) {
				waitclear();
				doCAN();
				rval = XERR_NOFILE;
				break;
			}
			memcpy((char *)(xif.dataddr), TFS_BASE(tfp), tfp->filsize);
#endif
		}
		
		r = Xdown(&xif, YMODEM);

		if ( r < 0 ) {
			rval = r;
			break;
		}

		if (yip->size[yip->filecnt] <= 0) {
			yip->size[yip->filecnt] = xif.size;
		}
		yip->pktcnt[yip->filecnt] = xif.pktcnt;
		yip->errcnt[yip->filecnt] = xif.errcnt;
		yip->firsterrat[yip->filecnt] = xif.firsterrat;

		
		/* 
		 * write file to TFS 
		 */
		if ( ! yif.verify ) {
#if INCLUDE_TFS
			if ( yip->size[yip->filecnt] > 0 ) {
				/* save file to TFS */
				r = tfsadd(yip->fname[yip->filecnt], 
						   yip->info, yip->flags, 
						   (uchar *)(yip->dataddr[yip->filecnt]), 
						   yip->size[yip->filecnt]);
				if (r != TFS_OKAY) {
					doCAN();
					rval = XERR_TFS;
					tfserr = r;
					break;
				}
			}
#endif
		}

#if INCLUDE_TFS
		dataddr = yip->baseaddr;
#else
		dataddr += yip->size[yip->filecnt];
#endif
		yip->filecnt++;

	} while (yip->filecnt < YFILES_MAX);

	if ( yip->filecnt >= YFILES_MAX ) {
		/* Cancel the transaction. Let the transmiter know that we 
           can receiver no more files */
		waitclear();
		doCAN();
	}

	/* trash any final garbage send by the transmiter */
	waitclear();

	return rval;
}

/***************************************************************************
 * UPLOAD STUFF
 **************************************************************************/

/*
 * putPacket
 *
 * Send an X-Modem or Y-Modem packet
 */

static void
putPacket (uchar *pkt, int len, int sno, int usecrc)
{
	int i;
	ushort chksm;

	chksm = 0;

	/* Send start of frame. */
	if ( (len == PKTLEN_128) || (sno == 0) ) {
		rputchar(SOH);
	} else {
		rputchar(STX);
	}

	/* Send sequence number and its complement */
	rputchar(sno);
	rputchar((uchar)~(sno));

	/* Send data. Calculate CRC or checksum. Send CRC or checksum. */ 
	if ( usecrc ) {
		for(i=0; i < len; i++) {
			rputchar(*pkt);
			chksm = (chksm << 8) ^ xcrc16tab[ (chksm>>8) ^ *pkt++ ];
		}
		rputchar((uchar)(chksm >> 8));
		rputchar((uchar)(chksm & 0x00ff));
	} else {
		for(i=0; i < len; i++) {
			rputchar(*pkt);
			chksm = ((chksm+*pkt++)&0xff);
		}
		rputchar((uchar)(chksm&0x00ff));
	}
}

/***************************************************************************/

/*
 * sendPacket
 *
 * Send and X or Y modem protocol packet.
 *
 * Transmits the given frame and waits for acknowledgment. 
 * Handles retransmitions and cancel requests as well.
 *
 * Arguments:
 *   - pb - packet (frame) buffer. The packet to send is here.
 *   - len - length (in bytes) of the frame to send.
 *   - sno - sequence number of the frame to send
 *   - userce - if non-zero, use 16-bit CRC instead of 8-bit checksum.
 * 
 * Returns:
 *   Non-negative on success (packet sent and acknowledged)
 *   Something negative on error:
 *     XERR_RETR : Max. number of retransmissions exceeded
 *     XERR_TOUT : Timeout (too many 'noise' chars received)
 *     XERR_CAN : Operation canceled
 *     XERR_UCAN : Operation canceled by user
 */

static int
sendPacket (uchar *pb, int len, ulong lsno, int usecrc)
{
	int sno, c, noise, count, done;

	Mtrace("P");
	sno = lsno % 0x100;
	putPacket(pb, len, sno, usecrc);

	noise = 0;
	count = RETR_MAX;
	done = 0;
	do {
		c = waitchar(TRANS_TMO);
		switch ( c ) {
		case ACK:
			Mtrace("A");
			done = 1;
			break;
		case NAK:
			Mtrace("K");
			if ( --count ) {
				putPacket(pb, len, sno, usecrc);
			} else {
				Mtrace("R");
				waitclear();
				doCAN();
				done = XERR_RETR;
			}
			break;
		case CAN:
			Mtrace("N");
			c = (char)waitchar(CHAR_TMO);
			if (c != CAN) {
				Mtrace("<%02x>", c);
				noise++;
			} else {
				Mtrace("N");
				done = XERR_CAN;
				waitclear();
			}
			break;
		case ESC:
			Mtrace("X");
			c = (char)waitchar(CHAR_TMO);
			if (c != ESC) {
				Mtrace("<%02x>", c);
				noise++;
			} else {
				Mtrace("N");
				done = XERR_UCAN;
				waitclear();
			}
			break;
		default:
			Mtrace("<%02x>", c);
			noise++;
			break;
		}
	} while ( ! done && noise < NOISE_MAX );
			
	if ( noise >= NOISE_MAX ) {
		done = XERR_TOUT;
	}

	return done;
}

/***************************************************************************/

/*
 * sync_trx
 * 
 * synchronize transmiter
 *
 * Called by the upload fucntions and performs initial synchronization
 * with the receiver.
 *
 * Returns:
 *   On success: Synchronization character send by the receiver (i.e. C 
 *     or NAK).
 *   On error: something negative.
 *     XERR_TOUT - Timeout waiting for sync.  
 *     XERR_CAN - Operation canceled.
 *     XERR_UCAN - Operation canceled by user.
 */

static int
sync_tx (void)
{
	int done, c;

	Mtrace("r[");
	done = 0;
	do {
		c = waitchar(TRANS_TMO);
		if ( c < 0 ) {
			Mtrace("T");
			done = XERR_TOUT;
			waitclear();
			doCAN();
			break;
		}
				
		switch ( c ) {
		case NAK:
			Mtrace("K");
			done = NAK;
			break;
		case 'C':
			Mtrace("C");
			done = 'C';
			break;
		case CAN:
			Mtrace("N");
			c = waitchar(CHAR_TMO);
			if ( c != CAN ) {
				Mtrace("<%02x>", c);
			} else {
				Mtrace("N", c);
				done = XERR_CAN;
				waitclear();
			}
			break;
		case ESC:
			Mtrace("X");
			c = waitchar(CHAR_TMO);
			if ( c != ESC ) {
				Mtrace("<%02x>", c);
			} else {
				Mtrace("X", c);
				done = XERR_UCAN;
				waitclear();
			}
			break;
		default:
			Mtrace("<%02x>", c);
			break;
		}
	} while ( ! done );
	
	Mtrace("]");
			
	return done;
}

/***************************************************************************/

/* Xup():
 *
 * Upload (uMon --> Host) a file using the XMODEM protocol
 *
 * Arguments:
 *   - xip - structure containing transfer info:
 *	  usecrc       OUT - use 16bit-CRC instead of 8bit-checksum.
 *    verify       X    
 *	  dataddr:     IN  - The file to upload is stored here.
 *	  size:        IN  - size of the file to upload in bytes. 
 *	  pktcnt:      OUT - number of frames transfered.
 *	  errcnt:      x   
 *	  firsterrat:  x
 *
 * Returns:
 *    On success: something non-negative.
 *    On error: something negative.
 *      XERR_GEN : General error
 *      XERR_TOUT : Timeout
 *      XERR_CAN : Operation canceled
 *      XERR_RETR : Maximum retransmitions reached
 */

static int
Xup (struct xinfo *xip, int proto)
{
	int r, done, c, count, usecrc;
	ulong dataddr;
	int pktlen;
	ulong sno;
	long size;

	Mtrace("--Xup--");

	do { /* dummy */

		/* Synchronize */

		usecrc = 0;
		done = sync_tx();
		if ( done < 0 ) {
			break;
		}
		if ( done == 'C' ) {
			usecrc = 1;
		}

		/* Send data */
		
		Mtrace("t[");
		
		sno = 1;
		xip->pktcnt = 0;
		dataddr = xip->dataddr;
		size = xip->size;
		pktlen = xip->onek ? PKTLEN_1K : PKTLEN_128;
			
		done = 0;
		do {
			r = sendPacket((uchar *)dataddr, pktlen, sno, usecrc);
			if ( r < 0 ) {
				done = r;
			} else {
				sno++;
				xip->pktcnt++;
				size -= pktlen;
				dataddr += pktlen;
				if ( size <= 0 ) {
					done = 1;
				}
			}
		} while ( !done );

		Mtrace("]");

		if (done < 0) {
			break;
		}
		
		/* Send EOT, and wait for ACK */
		
		count = RETR_MAX;
		do {
			Mtrace("E");
			rputchar(EOT);
			c = waitchar(FRAME_TMO);
			Mtrace("<%02x>", c);
		} while ( --count && c != ACK);
		
		/* no matter if ACK was never received. 
		   consider the deed done. */

	} while (0);

	if ( proto == XMODEM ) {
		/* trash any final garbage from the transmiter */
		waitclear();
	}

	return done;
}

/***************************************************************************/

/* Yup():
 *
 * Upload (uMon --> Host) a file using the YMODEM protocol
 *
 * Arguments:
 *   - yip - structure containing transfer info:
 *    usecrc       x
 *	  onek         IN  - use 1K blocks (frames) instead of 128bytes ones
 *    verify       x    
 *	  baseaddr:    IN  - The first file to upload is stored here.
 *    flags        x
 *    info         x
 *    filecnt      IN  - Number of files to upload
 *                 OUT - Number of files successfully uploaded     
 *    fname[i]     IN  - Name of the i'th file to upload.
 *	  size[i]:     IN  - size of the i'th file to upload in bytes.
 *                 OUT - set to the TFS file-size if TFS support is included.
 *	  pktcnt[i]:   OUT - nr of frames transfered when uploading i'th file.
 *	  errcnt:      x
 *	  firsterrat:  x
 *
 * Returns:
 *    On success: something non-negative.
 *    On error: something negative.
 *      XERR_GEN : General error
 *      XERR_TOUT : Timeout
 *      XERR_CAN : Operation canceled
 *      XERR_RETR : Maximum retransmitions reached
 */

static int
Yup (struct yinfo *yip)
{
	TFILE *tfp;
	int r, rval, done, cfn;
	ulong dataddr;
	uchar *tmppkt;

	rval = 0;
	tmppkt = pktbuff;
	dataddr = yip->baseaddr;

	do { /* dummy */

		/* 
		 * send the files 
		 */

		for (cfn = 0; cfn < yip->filecnt; cfn++) {
						
#if INCLUDE_TFS
			/* read in the file from TFS */
			if (! (tfp = tfsstat(yip->fname[cfn])) ) {
				waitclear();
				doCAN();
				rval = XERR_NOFILE;
				break;
			}
			memcpy((char *)(dataddr), TFS_BASE(tfp), tfp->filsize);
			/* override given size */
			yip->size[cfn] = tfp->filsize;
#endif

			/* Synchronize with the receiver */
			done = sync_tx();
			if ( done < 0 ) {
				rval = done;
				break;
			}
			if ( done != 'C' ) {
				waitclear();
				doCAN();
				rval = XERR_SYNC;
				break;
			}

			/* Prepare and send header block */
			Mtrace("h[");
			memset(tmppkt, 0, PKTLEN_128);
			sprintf(tmppkt, "%s", yip->fname[cfn]);
			sprintf(tmppkt + strlen(tmppkt) + 1,
					"%ld", yip->size[cfn]);

			r = sendPacket(tmppkt, PKTLEN_128, 0, 1);
			if ( r < 0 ) {
				rval = r;
				break;
			}

			/* prepare an xinfo structure */
			xif.dataddr = dataddr;
			xif.size = yip->size[cfn];
			xif.onek = yip->onek;
			
			/* send the file data */
			rval = Xup(&xif, YMODEM);
			if ( rval < 0 ) {
				waitclear();
				doCAN();
				break;
			}

#if INCLUDE_TFS
			dataddr += yip->size[cfn];
#endif

		} /* of files loop */

		if ( rval < 0 )
			break;

		/*
		 * Send the footer
		 */
		
		/* synchronize with the receiver */
		done = sync_tx();
		if ( done < 0 ) {
			rval = done;
			break;
		}
		if ( done != 'C' ) {
			waitclear();
			doCAN();
			rval = XERR_SYNC;
			break;
		}
				
		/* Prepare and send the footer block */
		Mtrace("f[");
		memset(tmppkt, 0, PKTLEN_128);
		r = sendPacket(tmppkt, PKTLEN_128, 0, 1);
		if ( r < 0 ) {
			rval = r;
			break;
		}

		Mtrace("]");
		
	} while (0);

	yip->filecnt = cfn;

	/* trash any final garbage from the transmiter */
	waitclear();

	return rval;
}

#endif /* of INCLUDE_XMODEM */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产九色精品成人porny| 成人高清伦理免费影院在线观看| 日韩欧美亚洲一区二区| 欧美视频第二页| 欧美日韩一级片在线观看| 99久久精品免费精品国产| 成人免费观看视频| 91网页版在线| 在线观看欧美黄色| 欧美精品在欧美一区二区少妇| 91福利视频网站| 亚洲天堂免费看| 亚洲v精品v日韩v欧美v专区| 亚洲一区中文在线| 亚洲一区二区三区视频在线播放| 亚洲黄色免费电影| 亚洲成人三级小说| 经典三级一区二区| 成人性生交大片免费看中文| av一区二区三区| 欧美视频自拍偷拍| 精品国产一区a| 中文字幕av在线一区二区三区| 国产精品久久久久四虎| 成人免费一区二区三区在线观看| 亚洲一区二区视频在线观看| 蜜桃精品在线观看| av不卡免费在线观看| 欧美午夜视频网站| 久久久噜噜噜久噜久久综合| 一区精品在线播放| 免费人成网站在线观看欧美高清| 久久精品国产色蜜蜜麻豆| 成人午夜av在线| 欧美肥妇毛茸茸| 国产精品视频一二三| 性欧美疯狂xxxxbbbb| 国产成人av影院| 欧美精品色一区二区三区| 国产欧美综合在线| 日韩va欧美va亚洲va久久| 成人小视频在线| 欧美一区二区美女| 亚洲精品日韩一| 国产成人aaa| 5566中文字幕一区二区电影| 亚洲欧洲三级电影| 国产黄色精品视频| 日韩一区二区三区视频| 国产农村妇女毛片精品久久麻豆| 亚洲另类春色国产| 国产成+人+日韩+欧美+亚洲| 91老师片黄在线观看| 欧美精品一区二区三区久久久 | 成人蜜臀av电影| 欧美一区二区三区电影| 一区二区三区国产精品| 国产成人av在线影院| 日韩欧美高清dvd碟片| 亚洲国产精品视频| 在线亚洲+欧美+日本专区| 国产日产欧美精品一区二区三区| 五月婷婷综合网| 91在线无精精品入口| 亚洲国产激情av| 国产精品综合视频| 欧美一级欧美一级在线播放| 自拍偷拍欧美激情| 91在线免费播放| 自拍偷自拍亚洲精品播放| 丰满亚洲少妇av| 中国色在线观看另类| 久久免费看少妇高潮| 欧美人体做爰大胆视频| 91色九色蝌蚪| 成人性色生活片免费看爆迷你毛片| 一区二区三区欧美激情| 不卡的电影网站| 综合分类小说区另类春色亚洲小说欧美| 色综合一个色综合| 欧美区在线观看| 日本欧美一区二区| 欧美日韩精品免费| 蜜臀久久99精品久久久久久9| 在线观看区一区二| 男女男精品视频| 久久九九99视频| 国产精品99精品久久免费| 日韩免费视频一区| 狠狠色丁香久久婷婷综| 国产欧美一二三区| 精品伦理精品一区| 欧美精品一区二区三区在线播放| 1024精品合集| 在线欧美日韩国产| 午夜成人免费电影| 欧美精品一区二区在线观看| 国产成人综合亚洲91猫咪| 国产精品国产三级国产aⅴ原创| www.久久久久久久久| 亚洲免费电影在线| 欧美亚洲另类激情小说| 免费久久99精品国产| 亚洲国产高清aⅴ视频| 91免费视频网| 视频一区中文字幕国产| 欧美精品日日鲁夜夜添| 国产精品一区三区| 亚洲伦在线观看| 日韩欧美一级精品久久| av爱爱亚洲一区| 美女视频免费一区| 亚洲欧美视频在线观看视频| 日韩亚洲欧美一区| 色婷婷av一区二区三区之一色屋| 捆绑变态av一区二区三区| 亚洲视频香蕉人妖| 精品国产精品网麻豆系列| 日本久久一区二区三区| 国产在线精品一区二区三区不卡| 亚洲美女在线一区| 欧美mv日韩mv| 欧美日韩国产另类不卡| 国产传媒日韩欧美成人| 免费成人在线网站| 国产精品久久久爽爽爽麻豆色哟哟| 欧美日韩国产小视频在线观看| 国产一二精品视频| 日韩精彩视频在线观看| 亚洲婷婷综合色高清在线| 一本色道亚洲精品aⅴ| 国产成人精品三级麻豆| 日韩电影在线免费| 亚洲电影一区二区| 亚洲柠檬福利资源导航| 国产日韩欧美精品综合| 精品国产乱码久久久久久影片| 欧美日韩aaa| 欧美自拍丝袜亚洲| 色视频成人在线观看免| 北岛玲一区二区三区四区| 国产美女久久久久| 久久国产精品99久久人人澡| 天堂一区二区在线| 亚洲va欧美va国产va天堂影院| 亚洲精品视频一区| 亚洲黄色小视频| 一区二区三区四区av| 亚洲免费av网站| 亚洲一区二区三区国产| 一区二区三区中文字幕电影| 亚洲人快播电影网| 亚洲精品videosex极品| 亚洲在线免费播放| 亚洲五月六月丁香激情| 亚洲一区中文在线| 五月婷婷另类国产| 亚洲国产精品天堂| 一区二区视频在线| 亚洲婷婷综合色高清在线| 亚洲美女屁股眼交3| 亚洲欧美另类在线| 国产日产精品一区| 国产日产精品1区| 亚洲精品乱码久久久久久| 亚洲一区在线观看免费观看电影高清 | 国产成人av电影在线| 极品美女销魂一区二区三区 | 久久精品一区四区| 国产人成一区二区三区影院| 中文字幕av免费专区久久| 国产精品传媒视频| 亚洲综合在线第一页| 美女www一区二区| 国产91精品欧美| 欧美午夜精品久久久| 日韩视频免费观看高清完整版| 久久这里只精品最新地址| 国产精品五月天| 午夜精彩视频在线观看不卡| 久久国产精品99精品国产| 不卡视频在线观看| 欧美日韩亚洲综合一区| 337p粉嫩大胆噜噜噜噜噜91av| 中文字幕一区二区三区色视频| 午夜精品一区二区三区电影天堂 | 国产婷婷色一区二区三区四区| 中文字幕一区二区三区av| 日韩电影免费一区| 成人久久18免费网站麻豆 | 日韩欧美的一区二区| 国产人成一区二区三区影院| 亚洲大片免费看| 福利电影一区二区三区| 在线播放一区二区三区| 国产精品成人免费精品自在线观看| 亚洲综合偷拍欧美一区色| 国产乱妇无码大片在线观看| 欧美性做爰猛烈叫床潮| 久久精品亚洲一区二区三区浴池|