⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmodem.c.svn-base

📁 usb drivers based on s3c2410
💻 SVN-BASE
字号:
#include "config.h"#define XMODEM_SOH 0x01#define XMODEM_EOT 0x04#define XMODEM_ACK 0x06#define XMODEM_NAK 0x15#define XMODEM_CAN 0x18#define XMODEM_DATA_SIZE 128struct frame{  char   blknum;  char   blknumcompl;  char   data[XMODEM_DATA_SIZE];  char   cksum;};static charcksum(struct frame *f){  int i;  int sum = 0;  for(i = 0; i < XMODEM_DATA_SIZE; i++) {    sum += f->data[i];		  }  return (sum & 0xff);	}static void get_frame(struct frame *rframe){	  int i;  rframe->blknum = sio_getc();  rframe->blknumcompl = sio_getc();  for(i=0; i < XMODEM_DATA_SIZE; i++) {      rframe->data[i] = sio_getc();    }  rframe->cksum = sio_getc();}	intxmodem(char *p){  struct frame aframe;  int i, len = 0;    do {		int loop = 900000; /*XXX*/    sio_putc(XMODEM_NAK);     		while(--loop && (!sio_ischar()))			;					if(loop)			break;			  } while(1);        while(1) {	      switch(sio_getc()) {	      case XMODEM_SOH:				get_frame(&aframe);				if((aframe.blknumcompl == 255 - aframe.blknum) && 				   (cksum(&aframe) == aframe.cksum)) {				    len += XMODEM_DATA_SIZE;	    				    for(i = 0; i < XMODEM_DATA_SIZE; i++)				      *p++ = aframe.data[i];				    sio_putc(XMODEM_ACK);				} else {				    sio_putc(XMODEM_NAK);				}				break;				      case XMODEM_EOT:				sio_putc(XMODEM_ACK);				return len;	      case XMODEM_CAN:				return -1;				      }    }	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -