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

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

?? xmodem.cpp

?? XMODEM 是一種適合在兩個計算機之間進行文件傳輸的簡單協議。嵌入式系統調試環境經常利用此協議或其變體
?? CPP
字號:
/*
 * 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() 

   2006-05: jkuang BUPT
     some bugs are killed & code optimized

   UART related are changed by jkuang. 2006-05

   Buffer copy is canceled by jkuang, so this program can works very good with fast speed
   Windows terminal. 2006-05
 */

#include <stdio.h>
#include <string.h>
// #include "def.h"
// #include "option.h"
// #include "s3c2410.h"
// #include "2410slib.h"
#include "xmodem.h"
#include "uart.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 250000//1000000
//#define GET_BYTE_TIMEOUT (1000 * 5)	//?


/* global error variable */
char *xmodem_errtxt = NULL;

/* prototypes of helper functions */
static int get_record(char* bufptr);
static int do_getc(vfuncp idler, unsigned long timeout, char *cp);
static int get_byte(char * cp);

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;

#ifdef XMODEM_DEBUG
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;
}
#endif

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

	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((char*)(dldaddr+foffset))) == (rx_block_num & 255)) 
      {
        error_count = RETRIES;
//        xmodem_errtxt = "RX PACKET";
        rx_block_num++;
        foffset += BLOCK_SIZE;
        Uart_SendKey(ACK);   //jkuang
        continue;
      }

      //EOT or CAN
      if((r == -4)||(r == -5))
      {
//        xmodem_errtxt = "DONE";
        {
          //some terminal prog send more chars after 'EOT'
          char c;
          do
          {
            Uart_SendKey(ACK);
          }while(do_getc(NULL, xmodem_timeout, &c) != -1);
        }
        break;
      }

      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 */
            while (get_byte(&ochr) != -1);
            ochr = NAK;
            break;
        case -3: /* Bad checksum */
            xmodem_errtxt = "BAD CHKSUM";
            ochr = NAK;
            break;
        default: /* Block out of sequence */
            xmodem_errtxt = "WRONG BLK";
            ochr = NAK;
      }
      error_count--;
      Uart_SendKey(ochr);
    } while ((r > -3) && error_count);

	if((!error_count) || (r != -4)) {
      return 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
 */

static int get_record(char* bufptr)
{
    char c;
	int block_num;
	int i;
	__u32 check_sum;

    /* 1st byte */
    if (get_byte(&c)) return -1;

    switch (c) 
    {
      case SOH_1:	/* Receive packet */
        BLOCK_SIZE = BLOCK_SIZE_1;
        break;
      case SOH_2:	/* Receive packet */
        BLOCK_SIZE = BLOCK_SIZE_2;
        break;
      case EOT:	/* end of file encountered */
        return -4;
      case CAN:	/* cancel protocol */
      default:
        return -5;
	}

    /* 2nd byte */
    if (get_byte(&c)) return -1;
    block_num = c;

    /* 3rd byte */
    if (get_byte(&c)) return -1;

    /* from 4th -> byte before last */
    check_sum = 0;
    for(i=0; i<BLOCK_SIZE; i++)
    {
      if (get_byte(&c))	return -1;
      *bufptr = c;
      check_sum += c;
      bufptr++;
    }

    /* last byte */
    if (get_byte(&c)) return -1;
    if((check_sum & 0xff) == c)
       return block_num;

    return -3;
}


/*-------------------------------------------------------------------*/
static int do_getc(vfuncp idler, unsigned long timeout, char *cp)
{
  int rxstat;

  while((rxstat = Uart_GetKey(cp)) == -1)
  {
    if(!(timeout--))
      break;
    if(idler) idler();
  }
  return rxstat;
}


/*-------------------------------------------------------------------*/
static int get_byte(char *cp)
{
  int rc;
again:
/*
 * 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
 */
    rc = do_getc(NULL, xmodem_timeout, cp);

	if (!rc)
	{
	  seen_a_char = SAC_PAST_START_NAK;
	  return rc;
	}
    else
	{
	  if (seen_a_char == SAC_SEND_NAK || !one_nak) 
	  {
//		bufputs("timeout nak");
		Uart_SendKey(NAK);   //jkuang
	  }

   	  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;
 	  }
	}
	return (rc);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久国产综合精品女不卡| 一区二区三区国产精品| 欧美高清在线视频| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美一区二区三区国产精品| 亚洲成人资源网| 国产中文一区二区三区| caoporn国产一区二区| 欧美日韩国产色站一区二区三区| 欧美r级电影在线观看| 豆国产96在线|亚洲| 99久久99久久精品免费看蜜桃| 91久久精品一区二区二区| 日韩免费一区二区三区在线播放| 中文字幕免费一区| 亚洲福利一区二区三区| 国产精品自拍在线| 欧美亚洲高清一区二区三区不卡| 2023国产精品自拍| 亚洲制服丝袜一区| 国产成人免费视频网站| 欧美午夜精品久久久| 久久久久久亚洲综合| 一区二区三区久久| 国产精品一区不卡| 91精品婷婷国产综合久久性色| 国产精品妹子av| 青青草视频一区| 色婷婷国产精品久久包臀| 亚洲精品一区二区三区福利| 亚洲国产一区二区三区| 大胆亚洲人体视频| 日韩免费电影一区| 亚洲午夜精品一区二区三区他趣| 国产白丝网站精品污在线入口| 91.xcao| 一区免费观看视频| 久久国产三级精品| 欧美日本免费一区二区三区| 国产精品久久久久aaaa樱花| 久久成人免费日本黄色| 欧美三级电影一区| 亚洲女与黑人做爰| 丁香激情综合五月| 欧美精品一区二区三区很污很色的| 在线精品视频一区二区| 中文字幕av一区二区三区高| 久久成人麻豆午夜电影| 欧美日韩精品欧美日韩精品| 亚洲精品视频在线| heyzo一本久久综合| 国产日韩三级在线| 国产一区二区主播在线| 日韩一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 91美女视频网站| 中文字幕亚洲在| 成人精品小蝌蚪| 国产婷婷色一区二区三区| 国产呦萝稀缺另类资源| 精品久久一二三区| 美脚の诱脚舐め脚责91| 欧美一区二区免费| 日韩黄色免费网站| 69堂精品视频| 石原莉奈一区二区三区在线观看| 精品视频在线视频| 亚洲国产人成综合网站| 在线免费一区三区| 亚洲一区影音先锋| 在线精品视频一区二区| 亚洲一二三四区不卡| 在线观看亚洲a| 亚洲一区二区三区不卡国产欧美| 色吊一区二区三区| 亚洲国产日韩综合久久精品| 欧美无乱码久久久免费午夜一区 | 日韩av在线发布| 欧美三区在线观看| 午夜一区二区三区视频| 欧美肥胖老妇做爰| 秋霞影院一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 久久 天天综合| 久久久亚洲精华液精华液精华液| 国产精品自拍av| 中文字幕欧美激情一区| 成人av在线电影| 一区二区三区视频在线观看| 欧美三级欧美一级| 蜜桃av一区二区三区| 久久综合999| 成人va在线观看| 亚洲最大成人网4388xx| 欧美高清性hdvideosex| 久久国产综合精品| 国产人伦精品一区二区| av男人天堂一区| 亚洲线精品一区二区三区八戒| 69堂国产成人免费视频| 极品美女销魂一区二区三区免费| 国产欧美中文在线| 色女孩综合影院| 日本不卡不码高清免费观看| 久久久久综合网| 一本大道久久a久久精品综合| 午夜精品福利在线| 久久久无码精品亚洲日韩按摩| 99亚偷拍自图区亚洲| 亚洲大尺度视频在线观看| 精品免费日韩av| 99久久伊人精品| 三级亚洲高清视频| 久久久精品免费免费| 色综合激情五月| 九九精品视频在线看| 国产精品福利电影一区二区三区四区| 欧美日韩一区高清| 国产精品资源站在线| 曰韩精品一区二区| 亚洲精品一区二区三区精华液 | 欧美人与z0zoxxxx视频| 国产综合久久久久影院| 亚洲免费高清视频在线| 日韩视频中午一区| 99久久久久久| 久久99精品久久久久婷婷| 国产精品久久午夜夜伦鲁鲁| 337p亚洲精品色噜噜| proumb性欧美在线观看| 免费精品99久久国产综合精品| 国产精品欧美经典| 日韩亚洲电影在线| 在线观看一区不卡| 国产成人h网站| 日韩电影免费在线看| 国产精品女同互慰在线看| 欧美一级一区二区| 91一区在线观看| 国产一区二三区| 五月婷婷久久丁香| 亚洲色图一区二区| xvideos.蜜桃一区二区| 欧美日韩第一区日日骚| 99国产精品久| 国产精品18久久久久久久久| 天天综合色天天综合色h| 1区2区3区国产精品| 久久先锋影音av| 69堂成人精品免费视频| 91亚洲资源网| 粉嫩13p一区二区三区| 精品一区二区在线免费观看| 亚洲va韩国va欧美va| 亚洲三级视频在线观看| 久久精品一级爱片| 欧美哺乳videos| 69久久99精品久久久久婷婷| 欧美在线999| 99视频一区二区| 国产成人av影院| 韩国三级电影一区二区| 日韩精品免费视频人成| 亚洲国产视频a| 亚洲美女在线国产| 中文字幕一区二区日韩精品绯色| 国产三级精品三级| 2019国产精品| 日韩欧美一区二区久久婷婷| 欧美精品久久99久久在免费线| 在线观看亚洲成人| 色婷婷狠狠综合| 色屁屁一区二区| 色综合久久中文字幕| 97久久精品人人澡人人爽| 成人短视频下载| 成人少妇影院yyyy| 成人免费视频视频| 成人国产精品免费观看动漫| 国产成人啪午夜精品网站男同| 激情欧美一区二区三区在线观看| 捆绑紧缚一区二区三区视频| 奇米精品一区二区三区在线观看| 日本成人中文字幕在线视频 | 在线不卡a资源高清| 欧美日本视频在线| 欧美区一区二区三区| 51久久夜色精品国产麻豆| 欧美电影在哪看比较好| 制服丝袜日韩国产| 日韩欧美美女一区二区三区| 日韩精品一区二区三区在线播放| 日韩欧美一区在线| 精品国产髙清在线看国产毛片| 2017欧美狠狠色| 欧美激情一区在线| 国产精品国产三级国产普通话99| 亚洲色图一区二区| 亚洲高清免费观看高清完整版在线观看| 亚洲图片欧美色图|