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

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

?? xmodem.c

?? LPC2292 bios測試程序 說明:YL_LPC229X_BIOS_Data的目錄說明
?? C
字號:
/*-------------------------------------------------------------------------
 * Filename:	  xmodem.c
 * Version: 	  $Id: xmodem.c,v 1.2 2002/01/06 19:02:29 erikm Exp $
 * Copyright:     Copyright (C) 2001, Hewlett-Packard Company
 * Author:  	  Christopher Hoover <ch@hpl.hp.com>
 * Description:   xmodem functionality for uploading of kernels 
 *  			  and the like
 * Created at:    Thu Dec 20 01:58:08 PST 2001
 *-----------------------------------------------------------------------*/
/*
 * xmodem.c: xmodem functionality for uploading of kernels and 
 *  		  the like
 *
 * Copyright (C) 2001 Hewlett-Packard Laboratories
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ident "$Id: xmodem.c,v 1.2 2002/01/06 19:02:29 erikm Exp $"

//#ifdef HAVE_CONFIG_H
//# include <blob/config.h>
//#endif

//#include <blob/errno.h>
//#include <blob/serial.h>
//#include <blob/util.h>

#include <../inc/board.h>

#define	UART_RD_TMOUT	300000
#define TIMEOUT 	800
#define MAXERRORS	10//5

#define	serial_write_raw(cc)	putch(cc)

static int SerialInputBlock( char* buf , unsigned long count ,
	unsigned long timeout )
{
	/*	unsigned long i;
		
		do {
			i = 0;
			while(!SerialRxToBuf(buf) && (i++ < UART_RD_TMOUT));
			if(i < UART_RD_TMOUT)
				return 1;			//只讀一個(gè)字符
		} while(--timeout);
		return -1;*/	

	if ( !WaitEventWithTimeout( kbhit , 1 , timeout ) )
	{
		*buf = getch();
		return 1;
	}
	return 0;
}

//#include "ser2.c"
#define SOH 0x01
#define STX 0x02
#define EOT 0x04
#define ACK 0x06
#define NAK 0x15
#define CAN 0x18
#define BS  0x08

/*

Cf:

  http://www.textfiles.com/apple/xmodem
  http://www.phys.washington.edu/~belonis/xmodem/docxmodem.txt
  http://www.phys.washington.edu/~belonis/xmodem/docymodem.txt
  http://www.phys.washington.edu/~belonis/xmodem/modmprot.col

*/

#undef	ERROR
#define ERROR(...) do { } while (0)

//#define	ERROR	Uart_Printf


//static char blockBuf[1024];
static char* blockBuf;			//使用指針,去掉copy過程

static __inline void WriteByte( char cc )
{
	serial_write_raw( cc );
}

int ReadByteWithTimeout( unsigned int timeout )
{
	char buf[1];
	int n;

	n = SerialInputBlock( buf , 1 , timeout );

	if ( n == 1 )
		return buf[0] & 0xff;
	else
		return -1;
}

static void ReadFlush()
{
	while ( ReadByteWithTimeout( 1000 ) >= 0 );
}


int XModemReceive( char* bufBase , int bufLen )
{
	unsigned int errors = 0;
	unsigned int wantBlockNo = 1;
	unsigned int length = 0;
	int crc = 1;		//use crc by send 'C', use checksum by send NAK
	char nak = 'C';
	int crc_val;
	unsigned char expectedCksum;

	blockBuf = bufBase;		//將bufBase賦與blockBuf;

	ERROR( "start xmodem!\n" );

	ReadFlush();

	/* Ask for CRC; if we get errors, we will go with checksum */
	WriteByte( nak );
	ERROR( "WriteByte(nak)\n" );

	for ( ; ; )
	{
		int blockBegin;
		int blockNo, blockNoOnesCompl;
		int blockLength;
		int cksum = 0;
		int crcHi = 0;
		int crcLo = 0;

		blockBegin = ReadByteWithTimeout( TIMEOUT );
		if ( blockBegin < 0 )
		{
			ERROR( "Read blockBegin timeout!\n" );
			goto timeout;
		}

		nak = NAK;

		switch ( blockBegin )
		{
			case SOH:
			case STX:
				break;

			case EOT:
				WriteByte( ACK );
				ERROR( "WriteByte(ACK): done\n" );
				goto done;

			default:
				ERROR( "blockBegin error!\n" );
				errors--;
				goto error;
		}

		/* block no */
		blockNo = ReadByteWithTimeout( TIMEOUT );
		if ( blockNo < 0 )
		{
			ERROR( "blockNo timeout!\n" );
			goto timeout;
		}

		/* block no one's compliment */
		blockNoOnesCompl = ReadByteWithTimeout( TIMEOUT );
		if ( blockNoOnesCompl < 0 )
		{
			ERROR( "blockNoOnesCompl timeout!\n" );
			goto timeout;
		}

		if ( blockNo != ( 255 - blockNoOnesCompl ) )
		{
			ERROR( "bad block ones compl\n" );
			goto error;
		}

		blockLength = ( blockBegin == SOH ) ? 128 : 1024;
		{
			int i, j;

			crc_val = 0;			
			expectedCksum = 0;

			for ( i = 0; i < blockLength; i++ )
			{
				int cc = ReadByteWithTimeout( TIMEOUT );
				if ( cc < 0 )
				{
					ERROR( " read block byte timeout!\n" );
					goto timeout;
				}
				blockBuf[i] = cc;		

				//crc 或 checksum 計(jì)算加在讀數(shù)據(jù)后
				if ( crc )
				{
					crc_val = crc_val ^ cc << 8;
					for ( j = 0; j < 8; j++ )
						if ( crc_val & 0x8000 )
							crc_val = crc_val << 1 ^ 0x1021;
						else
							crc_val = crc_val << 1;
				}
				else
				{
					expectedCksum += cc;
				}
			}
		}

		if ( crc )
		{
			crcHi = ReadByteWithTimeout( TIMEOUT );
			if ( crcHi < 0 )
			{
				ERROR( " read crcHi timeout!\n" );
				goto timeout;
			}

			crcLo = ReadByteWithTimeout( TIMEOUT );
			if ( crcLo < 0 )
			{
				ERROR( " read crcLo timeout!\n" );
				goto timeout;
			}			

			if ( ( crcHi != ( ( crc_val >> 8 ) & 0xff ) ) ||
				( crcLo != ( crc_val & 0xff ) ) )
			{
				ERROR( "crc error!\n" );
				goto error;
			}
		}
		else
		{
			cksum = ReadByteWithTimeout( TIMEOUT );
			if ( cksum < 0 )
			{
				ERROR( " read chksum timeout!\n" );
				goto timeout;
			}

			if ( cksum != expectedCksum )
			{
				ERROR( "checksum error! \n" );
				goto error;
			}
		}

		if ( blockNo == ( ( wantBlockNo - 1 ) & 0xff ) )
		{
			/* a repeat of the last block is ok, just ignore it. */
			/* this also ignores the initial block 0 which is */
			/* meta data. */
			goto next;
		}
		else if ( blockNo != ( wantBlockNo & 0xff ) )
		{
			ERROR( "unexpected block no! \n" );
			goto error;
		}

		wantBlockNo++;
		length += blockLength;

		if ( length > bufLen )
		{
			ERROR( "out of space\n" );
			goto error;
		}

		/*		{
						int i;
						for (i = 0; i < blockLength; i++)
							*bufBase++ = blockBuf[i];
					}*/
		blockBuf += blockLength;	//接收成功,指針加上收到字節(jié)數(shù)
		next : errors = 0;
		WriteByte( ACK );
		ERROR( "Receive one block OK!\n" );
		continue;

		error : timeout : ERROR( "Timeout.\n" );
		errors++;
		if ( errors == MAXERRORS )
		{
			/* Abort */
			int i;

			// if using crc, try again w/o crc
			if ( nak == 'C' )
			{
				nak = NAK;
				errors = 0;
				crc = 0;		//use checksum
				goto timeout;
			}

			for ( i = 0; i < 5; i ++ )
				WriteByte( CAN );
			for ( i = 0; i < 5; i ++ )
				WriteByte( BS );
			puts( "too many errors; giving up\n" );
			return -1;
		}

		ReadFlush();
		WriteByte( nak );
		ERROR( "WriteByte(nak)\n" );
	}

	done : ERROR( "\nxmodem done.\n" );
	ReadFlush();
	return length;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产人久久人人人人爽| 欧美一卡2卡3卡4卡| 久久久精品天堂| 国产一区二区视频在线| 久久综合99re88久久爱| 激情久久久久久久久久久久久久久久| 欧美一区二区三区四区在线观看| 日本不卡视频在线| 日韩精品一区二区三区在线观看| 久久精品国产免费看久久精品| 精品少妇一区二区三区| 国产九色sp调教91| 国产精品电影一区二区| 欧美性感一区二区三区| 婷婷中文字幕一区三区| 欧美va亚洲va香蕉在线| 国产精品69久久久久水密桃| 国产午夜精品久久| 91一区在线观看| 天天综合网天天综合色| 久久这里只有精品视频网| 成人免费视频视频在线观看免费| 亚洲图片你懂的| 欧美美女一区二区| 国产精品一区二区三区四区| 亚洲日本在线观看| 欧美日本乱大交xxxxx| 国产精品一区二区黑丝| 亚洲三级在线看| 精品日韩一区二区| 99精品桃花视频在线观看| 日本美女一区二区三区视频| 中文一区二区完整视频在线观看| 一本大道久久a久久精品综合| 日韩精品免费专区| 欧美激情一区三区| 欧美久久高跟鞋激| 成人激情图片网| 美女视频黄a大片欧美| 国产精品久久久久7777按摩| 6080国产精品一区二区| 成人开心网精品视频| 石原莉奈在线亚洲三区| 国产精品视频看| 欧美一区二区黄色| 91社区在线播放| 国产一区在线精品| 日韩高清一区二区| 日韩一区欧美一区| 国产亚洲自拍一区| 欧美一级欧美三级在线观看| 91碰在线视频| 国产高清不卡一区二区| 石原莉奈在线亚洲三区| 亚洲精选视频免费看| 欧美精品一区二区三区高清aⅴ | 伊人夜夜躁av伊人久久| 欧美xxx久久| 91精品啪在线观看国产60岁| 国产剧情一区二区| 蜜桃精品视频在线| 天天综合色天天综合| 亚洲精品一二三四区| 中文字幕av免费专区久久| 精品国产91久久久久久久妲己| 在线亚洲免费视频| 96av麻豆蜜桃一区二区| 国产不卡高清在线观看视频| 久久国产精品99久久久久久老狼| 亚洲h精品动漫在线观看| 亚洲品质自拍视频| 欧美激情一区二区在线| 久久久久青草大香线综合精品| 日韩欧美一级二级三级久久久| 欧美日本乱大交xxxxx| 欧美区一区二区三区| 欧美性大战久久久| 91高清视频在线| 在线亚洲+欧美+日本专区| 色女孩综合影院| 色综合久久天天| 日本高清无吗v一区| 色www精品视频在线观看| 91麻豆免费观看| 在线中文字幕不卡| 色哟哟国产精品免费观看| 91成人在线免费观看| 欧美亚洲国产怡红院影院| 欧美日韩你懂的| 欧美日韩精品久久久| 欧美日产在线观看| 91精品国产色综合久久不卡电影 | 国产精品影视网| 精品一区二区三区久久久| 精品一区二区精品| 国产成人亚洲精品青草天美| 国产精品一卡二| 成人国产在线观看| 一本在线高清不卡dvd| 欧美视频中文一区二区三区在线观看| 欧美性感一区二区三区| 欧美一区二区三区精品| 久久久久99精品一区| 国产精品福利影院| 亚洲韩国一区二区三区| 麻豆免费精品视频| 激情综合一区二区三区| 99久久国产综合精品麻豆| 91国产丝袜在线播放| 欧美精品视频www在线观看| 日韩欧美资源站| 欧美韩国日本一区| 亚洲欧美偷拍卡通变态| 午夜在线成人av| 国产一区二区在线看| 不卡一区中文字幕| 911精品国产一区二区在线| 久久久久久久久久久久久久久99| 国产精品日韩精品欧美在线| 亚洲午夜精品网| 韩国精品主播一区二区在线观看| 成人黄页在线观看| 欧美精品久久天天躁| 久久久久久久久久美女| 亚洲午夜在线电影| 国产激情一区二区三区桃花岛亚洲| 99re8在线精品视频免费播放| 91超碰这里只有精品国产| 欧美国产日韩在线观看| 亚洲gay无套男同| 成人小视频在线| 日韩欧美色综合网站| 一区二区三国产精华液| 国产乱码精品一品二品| 欧美三级三级三级| 国产精品你懂的| 麻豆一区二区三| 欧美色图在线观看| 国产精品伦一区| 蜜臀av国产精品久久久久| 91麻豆国产福利精品| 国产亚洲精品福利| 日本人妖一区二区| 色噜噜狠狠成人中文综合| 久久精品一区二区三区不卡牛牛| 亚洲一区二区高清| 成人天堂资源www在线| 日韩三级免费观看| 日韩制服丝袜先锋影音| 91视视频在线观看入口直接观看www | 欧美精品一二三区| 亚洲三级在线看| 成人亚洲一区二区一| 精品不卡在线视频| 日本成人在线一区| 欧美午夜寂寞影院| 一区二区三区日韩精品视频| 成人爱爱电影网址| 国产日产欧美一区二区三区 | 亚洲一二三区视频在线观看| 成人av网站在线观看免费| 精品国产凹凸成av人导航| 美女视频黄 久久| 日韩美女一区二区三区四区| 婷婷亚洲久悠悠色悠在线播放| 91精品91久久久中77777| 日韩理论片中文av| 91美女片黄在线观看| 国产精品久久久久久久久搜平片| 福利一区二区在线| 欧美国产一区二区| 风间由美一区二区三区在线观看| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲欧美一区二区三区国产精品| 成人av网站免费| 中文字幕制服丝袜一区二区三区| 成人午夜精品一区二区三区| 久久亚洲一级片| 国产精品亚洲а∨天堂免在线| 久久综合九色综合97婷婷 | 亚洲国产精品久久人人爱| 日本道在线观看一区二区| 亚洲欧美成人一区二区三区| 色又黄又爽网站www久久| 亚洲激情自拍视频| 在线观看视频91| 五月婷婷激情综合| 欧美一区二区三区视频在线| 另类小说图片综合网| 久久久综合精品| 成人免费高清在线| 一区二区三区产品免费精品久久75| 欧美性感一类影片在线播放| 琪琪久久久久日韩精品| 精品少妇一区二区三区免费观看| 国产91丝袜在线观看| 一区二区三区免费看视频| 欧美美女喷水视频| 国产很黄免费观看久久| 伊人色综合久久天天|