亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲r级在线视频| 午夜影院久久久| 亚洲一区二三区| 狠狠色丁香久久婷婷综合丁香| 成人一级片网址| 日韩三级免费观看| 一区二区三区欧美日| 国产99久久精品| 欧美一卡2卡三卡4卡5免费| 亚洲情趣在线观看| 粉嫩一区二区三区性色av| 欧美精品久久久久久久久老牛影院| 国产精品久久久久久久久晋中 | 欧美激情一区二区三区不卡 | 国产成人精品免费网站| 欧美亚洲一区二区在线| 中文字幕av不卡| 另类人妖一区二区av| 欧美日韩国产片| 亚洲黄色片在线观看| av一区二区久久| 欧美韩国日本一区| 国产夫妻精品视频| 久久久亚洲精品石原莉奈| 久久精品久久综合| 日韩欧美一级二级三级 | 中文字幕一区二区三| 国产一区二区三区免费播放| 日韩亚洲欧美中文三级| 日韩av电影天堂| 欧美一区二区三区免费观看视频| 亚洲高清视频中文字幕| 欧美视频在线观看一区二区| 一区二区三区产品免费精品久久75| 99视频有精品| 夜夜操天天操亚洲| 欧美性xxxxx极品少妇| 一个色综合网站| 欧美乱妇15p| 蜜桃精品视频在线观看| 日韩一区二区在线观看视频| 美国毛片一区二区| 久久精品欧美日韩| 国产91精品一区二区麻豆亚洲| 亚洲国产精品ⅴa在线观看| 成人18精品视频| 亚洲黄色av一区| 正在播放亚洲一区| 欧美大片一区二区三区| 亚洲人成网站影音先锋播放| 免费成人美女在线观看| 4hu四虎永久在线影院成人| 青青草97国产精品免费观看 | 伊人色综合久久天天人手人婷| 色综合中文综合网| 国产精品伦理一区二区| 99麻豆久久久国产精品免费| 亚洲一区二区在线观看视频| 337p亚洲精品色噜噜噜| 国产精品一区二区x88av| 国产精品对白交换视频| 欧美日韩国产在线播放网站| 国内外成人在线| 亚洲三级在线免费| 日韩欧美一级精品久久| 成人激情电影免费在线观看| 国内精品国产三级国产a久久| 2023国产精品视频| 91色婷婷久久久久合中文| 日韩av一区二区在线影视| 国产精品情趣视频| 欧美福利视频导航| www.久久久久久久久| 天使萌一区二区三区免费观看| 久久老女人爱爱| 欧美在线免费观看亚洲| 国产麻豆精品95视频| 亚洲国产你懂的| 国产日韩欧美高清在线| 欧美精选午夜久久久乱码6080| 国产成人夜色高潮福利影视| 亚洲一区二区三区四区在线| 国产网站一区二区| 91精品国产一区二区三区蜜臀| 成人精品高清在线| 久久www免费人成看片高清| 亚洲老司机在线| 久久精品无码一区二区三区| 欧美日韩国产一级片| 91免费国产在线| 国产乱淫av一区二区三区| 天天综合网天天综合色| 亚洲精品成人悠悠色影视| 中文字幕+乱码+中文字幕一区| 91精品国产色综合久久| 欧美在线影院一区二区| 成人精品在线视频观看| 国产精品88888| 韩国成人精品a∨在线观看| 日韩电影在线看| 天堂成人免费av电影一区| 亚洲精品国产一区二区精华液 | 欧美一区二区三区视频在线| 色综合久久综合中文综合网| 懂色av一区二区夜夜嗨| 久久精品免费看| 免费人成在线不卡| 日本在线观看不卡视频| 亚洲国产人成综合网站| 一区二区三区免费观看| 亚洲激情一二三区| 亚洲色图制服丝袜| 亚洲精品视频免费看| 亚洲激情一二三区| 亚洲一区在线视频观看| 亚洲高清视频中文字幕| 欧美中文字幕一二三区视频| 久久精品亚洲国产奇米99| 欧美一区二区三区在线观看| 欧美少妇xxx| 欧美乱妇15p| 欧美一区二区在线看| 欧美一区二区日韩| 精品人伦一区二区色婷婷| 精品国产亚洲在线| 久久久久高清精品| 国产精品电影一区二区三区| 日韩二区三区在线观看| 日本不卡123| 国产一区激情在线| 成人一级片网址| 在线观看日韩电影| 欧美日韩国产一区| 欧美成人精品3d动漫h| 久久久99精品免费观看不卡| 国产欧美日本一区二区三区| 成人欧美一区二区三区在线播放| 一区二区三区中文字幕| 日韩高清在线观看| 国产精品小仙女| 色综合久久综合网97色综合 | 欧美日韩和欧美的一区二区| 成人免费va视频| 日本精品视频一区二区| 欧美日韩成人一区| www一区二区| 一区二区三区在线视频免费| 婷婷国产v国产偷v亚洲高清| 国产在线精品一区在线观看麻豆| 成人av中文字幕| 欧美一区二区三级| 国产精品第一页第二页第三页| 亚洲国产成人av好男人在线观看| 精品一区二区在线观看| 色婷婷亚洲精品| 欧美精品一区二区在线播放| 亚洲视频中文字幕| 久色婷婷小香蕉久久| 在线观看视频一区二区欧美日韩| 欧美精品一区二区三区高清aⅴ| 亚洲欧美色图小说| 久久99国产精品免费| 欧美亚洲自拍偷拍| 国产女主播在线一区二区| 偷拍一区二区三区| 99re这里只有精品6| 精品久久久久久亚洲综合网| 亚洲中国最大av网站| 成人午夜视频在线观看| 日韩一二三区不卡| 舔着乳尖日韩一区| 91论坛在线播放| 欧美国产精品一区二区| 久久99国产精品久久99果冻传媒| 欧美在线观看禁18| 日韩一区欧美一区| www.亚洲在线| 国产欧美日韩一区二区三区在线观看| 亚洲成av人片在线| 色天天综合色天天久久| 国产精品久久久久久久久免费丝袜 | 精品国产区一区| 亚洲a一区二区| 在线亚洲高清视频| 亚洲美女视频一区| 99热在这里有精品免费| 国产精品色在线| 粉嫩av一区二区三区在线播放| 26uuu欧美| 国内久久精品视频| 久久久久久夜精品精品免费| 日本色综合中文字幕| 欧美老女人在线| 日韩精品久久理论片| 欧美精品v国产精品v日韩精品| 亚洲一区二区视频在线观看| 色噜噜狠狠成人中文综合| 亚洲欧洲日本在线| 日本韩国一区二区| 夜夜嗨av一区二区三区网页 |