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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xmodem.c

?? 瑞泰創新的GX-ARM9-2410EP教學實驗系統的所有基礎實驗源代碼,內容齊全,解析清楚,基本上每個實驗結果都有圖片顯示
?? C
字號:
/*
 * vivi/deriver/serialxmodem.c:
 *     - an implementation of the xmodem protocol from the spec.
 *
 * Based on bootldr/xmodem.c (C) 2000 Compaq Computer Coporation.
 *
 * Copyright (C) 2001 MIZI Research, Inc.
 *
 *
 * 1999-01-xx: Edwin Foo <efoo@crl.dec.com>
 *    - Initial code
 *
 * 2001-10-04: Janghoon Lyu <nandy@mizi.com>
 *    - Modified a little bit.
 *
 * 2002-07-04: Janghoon Lyu <nandy@mizi.com>
 *    - get_param_value() 牢磐其撈膠啊 官差絹輯 撈俊 嘎霸 薦瀝.
 */

#include <stdio.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "xmodem.h"

/* XMODEM parameters */
#define BLOCK_SIZE_1	128	/* size of transmit blocks , SOH=0x01時的block大小*/
#define BLOCK_SIZE_2	1024	/* size of transmit blocks , SOH=0x02時的block大小*/
#define BLOCK_SIZE block_size
#define RETRIES		20	/* maximum number of RETRIES */

static int block_size = BLOCK_SIZE_1;

/* Line control codes */
#define SOH_1		0x01	/* start of header */
#define SOH_2		0x02	/* 1K xmodem start of header */
#define ACK		0x06	/* Acknowledge */
#define NAK		0x15	/* Negative acknowledge */
#define CAN		0x18	/* Cancel */
#define EOT		0x04	/* end of text */

#define GET_BYTE_TIMEOUT 1000000
//#define GET_BYTE_TIMEOUT (1000 * 5)	//秒


/* global error variable */
char *xmodem_errtxt = NULL;
int get_byte_err = 0;
__u8 volatile rbuffer[BLOCK_SIZE_2];

/* prototypes of helper functions */
int get_record(void);
__u8 get_byte(void);
void u_putc(char c);

enum
{
	SAC_SEND_NAK = 0,
	SAC_SENT_NAK = 1,
	SAC_PAST_START_NAK = 2
};

static volatile int seen_a_char = SAC_SEND_NAK;

static int one_nak = 0;
static unsigned long xmodem_timeout = GET_BYTE_TIMEOUT;

char debugbuf[DEBUGBUF_SIZE];
int db_idx = 0;

void bufputs(char *s)
{
	size_t len = strlen(s) + 1;

	if (len + db_idx > sizeof(debugbuf))
		len = sizeof(debugbuf) - db_idx;

	if (len) {
		memcpy(&debugbuf[db_idx], s, len);
		db_idx += len;
	}
}

void reset_debugbuf(void)
{
	memset(debugbuf, 0x0, sizeof(debugbuf));
	db_idx = 0;
}

__u32 xmodem_receive(char *dldaddr, size_t len)
{
	char ochr;
	int r = 0, rx_block_num = 0, error_count = 0;
	__u32 foffset = 0;
	int i;
	//int ret;

	xmodem_errtxt = NULL;
	seen_a_char = 0;

	//one_nak = get_param_value("xmodem_one_nak", &ret);
	one_nak = 0;

	//xmodem_timeout = get_param_value("xmodem_initial_timeout", &ret);
	xmodem_timeout = GET_BYTE_TIMEOUT/2;

	rx_block_num = 1;
	error_count = RETRIES;

	do {
		if ((r = get_record()) == (rx_block_num & 255)) {
			error_count = RETRIES;
			for (i = 0; i <BLOCK_SIZE; i++)
				*(__u8 *)(dldaddr+foffset+i) = rbuffer[i];
			xmodem_errtxt = "RX PACKET";
			rx_block_num++;
			ochr = ACK;
			foffset += BLOCK_SIZE;
		} else {
			switch (r) {
			case -1: /* TIMEOUT */
				xmodem_errtxt = "TIMEOUT";
				ochr = NAK;
				break;
			case -2: /* Bad block */
				xmodem_errtxt = "BAD BLOCK#";
				/* eat teh rest of the block */
				get_byte_err = 0;
				while (get_byte_err != -1) get_byte();
				ochr = NAK;
				break;
			case -3: /* Bad checksum */
				xmodem_errtxt = "BAD CHKSUM";
				ochr = NAK;
				break;
			case -4: /* End of file */
				xmodem_errtxt = "DONE";
				ochr = ACK;
				break;
			case -5: /* Cancel */
				xmodem_errtxt = "ABORTED";
				ochr = ACK;
				break;
			default: /* Block out of sequence */
				xmodem_errtxt = "WRONG BLK";
				ochr = NAK;
			}
			error_count--;
		}
		u_putc(ochr);
	} while ((r > -3) && error_count);

	if ((!error_count) || (r != -4)) {
		foffset = 0;	/* indicate failure to caller */
		/*printk("x-modem error: %s\n", xmodem_errtxt); */
	}

	return foffset;
}

/*
 * Read a record in the XMODEM protocol, return the block number
 * (0-255) if successful, or one of the following return codes:
 * 	-1 = Bad byte
 * 	-2 = Bad block number
 * 	-3 = Bad block checksum
 * 	-4 = End of file
 * 	-5 = Canceled by remote
 */
int get_record(void)
{
	int c, block_num = 0;
	int i;
	__u32 check_sum;

	/* clear the buffer */
	for (i = 0; i < BLOCK_SIZE; i++)
		rbuffer[i] = 0x00;

	check_sum = 0;
	i = -2;
	c = get_byte();
	if (get_byte_err)
		return -1;

	switch (c) {
	case SOH_1:	/* Receive packet */
		BLOCK_SIZE = BLOCK_SIZE_1;
		goto recv_soh;
	case SOH_2:	/* Receive packet */
		BLOCK_SIZE = BLOCK_SIZE_2;
recv_soh:
		for (;;) {
			c = get_byte();
			if (get_byte_err)
				return -1;

			switch (i) {
			case -2: 
				block_num = c;
				break;
			case -1:
#if 0
#ifdef CHECK_NEGATED_SECTNUM
				if (c != (-block_num -1))
					return -2;
#endif
#endif
				break;
			case BLOCK_SIZE_1:
			case BLOCK_SIZE_2:
				if(BLOCK_SIZE == i)
				{
					if ((check_sum & 0xff) != c)
						return -3;
					else
						return block_num;
					break;
				}
			default:
				rbuffer[i] = c;
				check_sum += c;
			}
			i++;
		}
	case EOT:	/* end of file encountered */
		return -4;
	case CAN:	/* cancel protocol */
		return -5;
	default:
		return -5;
	}
}

//
int getc_errno = 0;
__u8 do_getc(vfuncp idler, unsigned long timeout, int *statp)
{
	__u8	c, rxstat;
	int	do_timeout = timeout != 0;
	//unsigned long t = GetTickCount();

	getc_errno = 0;	/* reste errno */

	while(!SERIAL_CHAR_READY()) {

		if (do_timeout) {
/*			if (GetTickCount()-t > timeout)
			{
				timeout = 0;
				break;
			}*/
			if(timeout == 0)
				break;
			timeout--;
		}

		if (idler)
			idler();
	}

	if (do_timeout && timeout == 0) {
		c = 0;
		rxstat = (__u8)-1;
	} else {
		c = SERIAL_READ_CHAR();
		rxstat = SERIAL_READ_STATUS();
	}

	if (rxstat) {
		getc_errno = rxstat;
		/*printk("RXSTAT error. status = 0x%08lx", rxstat);*/
		if (statp)
			*statp = rxstat;
	}
	return (c);
}

/*
 * Reads and returns a character from the serial port
 *   - Times out after delay iterations checking for presence of character
 *   - Sets *error_p to UART error bits or - on timeout
 *   - On timeout, sets *error_p to -1 and returns 0
 */
char awaitkey(unsigned long delay, int* error_p)
{
	return (do_getc(NULL, delay, error_p));
}


void u_putc(char c)
{
	while (!SERIAL_WRITE_READY());
	SERIAL_WRITE_CHAR(c);
}


__u8 get_byte()
{
	int c;

again:
	c = 0;
	get_byte_err = 0; /* reset errno */
	c = awaitkey(xmodem_timeout, &get_byte_err);

		if (get_byte_err) {
		if (seen_a_char == SAC_SEND_NAK || !one_nak) {
			bufputs("timeout nak");
			u_putc(NAK);	/* make the sender go */
		}

		if (seen_a_char < SAC_PAST_START_NAK) {
			bufputs("goto again");
			seen_a_char = SAC_SENT_NAK;

			//xmodem_timeout = get_param_value("xmodem_timeout", &ret);
			xmodem_timeout = GET_BYTE_TIMEOUT;
			goto again;
		}
	}

	if (get_byte_err == 0)
		seen_a_char = SAC_PAST_START_NAK;

	return (c);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久99精品| wwwwww.欧美系列| 日韩一卡二卡三卡国产欧美| 久久精品一区二区三区不卡| 亚洲观看高清完整版在线观看| 激情小说欧美图片| 欧美午夜精品久久久久久孕妇| 久久久久久99久久久精品网站| 日韩三级中文字幕| 精品美女一区二区三区| 一区二区免费视频| 成人av网在线| 久久久亚洲精品一区二区三区| 日韩一区精品视频| 日本精品裸体写真集在线观看| 国产精品系列在线| 国产精品自拍一区| 精品国一区二区三区| 日韩经典一区二区| 欧美日韩国产综合一区二区三区| 亚洲人成网站色在线观看| 成人免费看的视频| 日本一区二区三区国色天香 | 欧美午夜一区二区三区| 国产精品日日摸夜夜摸av| 精品一区二区免费| 精品久久99ma| 美国十次综合导航| 日韩欧美久久一区| 久久99九九99精品| 亚洲主播在线观看| 色猫猫国产区一区二在线视频| 亚洲欧洲另类国产综合| a4yy欧美一区二区三区| 国产精品国产馆在线真实露脸| 成人黄页毛片网站| 亚洲人成人一区二区在线观看| 99r国产精品| 一区二区激情小说| 欧洲中文字幕精品| 午夜视频一区在线观看| 欧美一级艳片视频免费观看| 蜜臀久久99精品久久久画质超高清 | 毛片不卡一区二区| 精品国产一区a| 粉嫩av一区二区三区在线播放| 国产精品午夜电影| 91久久香蕉国产日韩欧美9色| 亚洲午夜国产一区99re久久| 欧美一区二视频| 国产精品亚洲а∨天堂免在线| 国产精品天天看| 91国产免费观看| 麻豆精品蜜桃视频网站| 国产丝袜在线精品| 日本韩国精品在线| 免费日韩伦理电影| 国产精品久久久久久户外露出| 色域天天综合网| 日本美女一区二区| 日韩av在线播放中文字幕| 精品美女一区二区| 色综合久久综合网| 久久超碰97中文字幕| 国产精品每日更新在线播放网址| 欧美午夜免费电影| 国产精品一区二区不卡| 亚洲国产中文字幕| 久久久亚洲午夜电影| 欧美在线免费观看亚洲| 国产一二精品视频| 亚洲国产精品影院| 中文在线资源观看网站视频免费不卡 | 亚洲女爱视频在线| 欧美一级专区免费大片| av激情成人网| 精品一区二区国语对白| 亚洲乱码精品一二三四区日韩在线| 91精品国产综合久久婷婷香蕉| 成人av中文字幕| 日本成人在线电影网| 亚洲欧美日韩精品久久久久| 欧美大片在线观看一区二区| 日本乱码高清不卡字幕| 国产一区二区按摩在线观看| 亚洲综合一二三区| 中文字幕av不卡| wwww国产精品欧美| 91精品综合久久久久久| 欧美主播一区二区三区| 成人精品国产一区二区4080| 狠狠色伊人亚洲综合成人| 亚洲成人1区2区| 亚洲免费av网站| 国产精品午夜在线观看| 欧美精品一区二| 精品成人一区二区| 日韩精品中午字幕| 678五月天丁香亚洲综合网| 日本道在线观看一区二区| 成人听书哪个软件好| 国产麻豆精品久久一二三| 青青青爽久久午夜综合久久午夜| 亚洲自拍偷拍av| 一区二区三区在线观看动漫| 国产精品的网站| 日韩美女视频一区| 亚洲天堂成人在线观看| 国产精品美女久久久久av爽李琼| 亚洲成av人综合在线观看| 亚洲男人的天堂一区二区| 国产精品国产馆在线真实露脸 | 日韩一二在线观看| 在线电影国产精品| 欧美一区二区视频网站| 欧美嫩在线观看| 欧美一区二区三区性视频| 91麻豆精品国产自产在线 | 99久久伊人精品| aa级大片欧美| 色欧美日韩亚洲| 欧美日韩一区小说| 欧美一区二区女人| 欧美大片国产精品| 国产亚洲短视频| 国产精品国产精品国产专区不片| 国产精品不卡在线| 一区二区三区免费观看| 亚洲午夜免费福利视频| 日本vs亚洲vs韩国一区三区二区| 美脚の诱脚舐め脚责91| 国产河南妇女毛片精品久久久| 国产成人精品亚洲777人妖| 成人精品鲁一区一区二区| 99国产精品久久久| 欧美肥妇bbw| 精品国产乱码久久久久久夜甘婷婷| 国产午夜精品理论片a级大结局| 中文字幕一区二区三区不卡 | 欧美精品一区二区三区一线天视频 | 欧美日韩一区久久| 欧美xxxxxxxx| 中文字幕综合网| 日韩和欧美的一区| 国产69精品久久99不卡| 欧美午夜精品一区二区三区 | 91久久久免费一区二区| 欧美一区二区三区啪啪| 中文字幕欧美三区| 亚洲国产精品一区二区www| 精品一区二区三区日韩| 91美女蜜桃在线| 欧美成人猛片aaaaaaa| 日韩美女视频一区二区| 另类小说图片综合网| 91在线精品一区二区三区| 日韩精品中午字幕| 亚洲免费在线视频| 国产一区二区三区在线观看精品 | 国产精品911| 欧美网站大全在线观看| 久久一日本道色综合| 亚洲影视在线播放| 成人午夜免费av| 日韩三级av在线播放| 一区二区三区日韩欧美精品| 国产乱码字幕精品高清av| 欧美精品v日韩精品v韩国精品v| 中文字幕乱码日本亚洲一区二区 | 亚洲一二三级电影| 成人性生交大片免费看视频在线| 91精品国产黑色紧身裤美女| 国产精品国产a级| 国产精品亚洲成人| 精品乱人伦小说| 日日夜夜精品视频天天综合网| 99久久精品99国产精品| 国产亚洲制服色| 美女看a上一区| 欧美日韩精品久久久| 中文字幕欧美一| 成人免费看视频| 国产欧美综合在线观看第十页| 美腿丝袜一区二区三区| 欧美精品aⅴ在线视频| 亚洲免费观看高清| 9久草视频在线视频精品| 国产欧美综合在线| 国产一区二三区| 精品精品国产高清a毛片牛牛| 91同城在线观看| 亚洲天天做日日做天天谢日日欢| 国产成人av电影在线观看| 久久久久九九视频| 精品一区二区三区的国产在线播放| 欧美高清精品3d| 视频一区二区三区入口| 在线综合视频播放| 日本欧美一区二区| 欧美一级黄色片|