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

📄 zmodem.h

📁 本source code 為s3c4510的bootloader
💻 H
📖 第 1 页 / 共 2 页
字号:
 Idle		,  Padding	,  Inhdr		,  Indata		,  Finish		,  Ysend		,  Yrcv} ZMInputState;typedef enum zmprotocol { XMODEM		,  YMODEM		,  ZMODEM} ZMProtocol;typedef enum zmstreaming{ Full		,  StrWindow	,  SlidingWindow	,	  Segmented}  ZMStreaming;typedef unsigned char u_char;typedef unsigned long u_long;typedef unsigned int  u_int;#define ZM_FILE_NAME_MAX_LEN 128#define ZM_ATTN_MAX_LEN       64	/* ? */#define ZM_BUFFER_MAX_LEN   8196	typedef	struct  {  int	ifd;			/* input fd, for use by caller's routines */  int	ofd;			/* output fd, for use by caller's routines */  void *file;			/* file being transfered */  int	zrinitflags;		/* receiver capabilities, see below */  int	zsinitflags;		/* sender capabilities, see below */  char *attn;			/* attention string, see below *//* static attention buffer to avoid memory alloc/free */  char  attnbuf[ZM_ATTN_MAX_LEN];  int	timeout;		/* timeout value, in seconds */  int	bufsize;		/* receive buffer size, bytes */  int	packetsize;		/* preferred transmit packet size */  int	windowsize;		/* max window size *//* file attributes: read-only */  int   filesRem;  int   bytesRem;  u_char f0,f1,f2,f3;		/* file flags */  int	len,mode,fileType;	/* file flags */  u_long date;			/* file date *//* From here down, internal to Zmodem package */  ZMState state;		/* protocol internal state */  char *filename;		/* filename */  char *rfilename;		/* remote filename *//* static filename buffer to avoid memory alloc/free */  char  filenamebuf[ZM_FILE_NAME_MAX_LEN];  int	crc32;			/* use 32-bit crc */  int	pktLen;			/* length of this packet */  int	DataType;		/* input data type */  int	PacketType;		/* type of this packet */  int	rcvlen;  int	chrCount;		/* chars received in current header/buffer */  int	crcCount;		/* crc characters remaining at end of buffer */  int	canCount;		/* how many CAN chars received? */  int	noiseCount;		/* how many noise chars received? */  int	errorFlush;		/* ignore incoming data because of error */  u_char *buffer;		/* data buffer *//* static buffer to avoid memory alloc/free */   u_char bufferalloc[ZM_BUFFER_MAX_LEN];  u_long offset;		/* file offset */  u_long lastOffset;		/* last acknowledged offset */  u_long zrposOffset;		/* last offset specified w/zrpos */  int	ylen, bufp;		/* len,location of last Ymodem packet */  int	fileEof;		/* file eof reached */  int	packetCount;		/* # packets received */  int	errCount;		/* how many data errors? */  int	timeoutCount;		/* how many times timed out? */  int	windowCount;		/* how much data sent in current window */  int	atSign;			/* last char was '@' */  int	lastCR;			/* last char was CR */  int	escCtrl;		/* other end requests ctrl chars be escaped */  int	escHibit;		/* other end requests hi bit be escaped */  int	escape;			/* next character is escaped */  int	interrupt;		/* received attention signal */  int	waitflag;		/* next send should wait */  				/* parser state */  ZMInputState InputState;  ZMProtocol Protocol;  u_char hdrData[9];		/* header type and data */  u_char fileFlags[4];		/* file xfer flags */  u_long crc;			/* crc of incoming header/data */  ZMStreaming Streaming;} ZModem;	/* ZRINIT flags.  Describe receiver capabilities */#define	CANFDX	1	/* Rx is Full duplex */#define	CANOVIO	2	/* Rx can overlap I/O */#define	CANBRK	4	/* Rx can send a break */#define	CANCRY	010	/* Rx can decrypt */#define	CANLZW	020	/* Rx can uncompress */#define	CANFC32	040	/* Rx can use 32-bit crc */#define	ESCCTL	0100	/* Rx needs control chars escaped */#define	ESC8	0200	/* Rx needs 8th bit escaped. */	/* ZSINIT flags.  Describe sender capabilities */#define	TESCCTL	0100	/* Tx needs control chars escaped */#define	TESC8	0200	/* Tx needs 8th bit escaped. */	/* ZFILE transfer flags */	/* F0 */#define	ZCBIN	1	/* binary transfer */#define	ZCNL	2	/* convert NL to local eol convention */#define	ZCRESUM	3	/* resume interrupted file xfer, or append to a			   growing file. */	/* F1 */#define	ZMNEWL	1	/* transfer if source newer or longer */#define	ZMCRC	2	/* transfer if different CRC or length */#define	ZMAPND	3	/* append to existing file, if any */#define	ZMCLOB	4	/* replace existing file */#define	ZMNEW	5	/* transfer if source is newer */#define	ZMDIFF	6	/* transfer if dates or lengths different */#define	ZMPROT	7	/* protect: transfer only if dest doesn't exist */#define	ZMCHNG	8	/* change filename if destination exists */#define	ZMMASK	037	/* mask for above. */#define	ZMSKNOLOC 0200	/* skip if not present at Rx end */	/* F2 */#define	ZTLZW	1	/* lzw compression */#define	ZTRLE	3	/* run-length encoding */	/* F3 */#define	ZCANVHDR 1	/* variable headers ok */#define	ZRWOVR	4	/* byte position for receive window override/256 */#define	ZXSPARS	64	/* encoding for sparse file ops. */	/* ATTN string special characters.  All other characters sent verbose */#define	ATTNBRK	'\335'	/* send break signal */#define	ATTNPSE	'\336'	/* pause for one second */	/* ZStatus() types */#define	RcvByteCount	0	/* value is # bytes received */#define	SndByteCount	1	/* value is # bytes sent */#define	RcvTimeout	2	/* receiver did not respond, aborting */#define	SndTimeout	3	/* value is # of consecutive send timeouts */#define	RmtCancel	4	/* remote end has cancelled */#define	ProtocolErr	5	/* protocol error has occurred, val=hdr */#define	RemoteMessage	6	/* message from remote end */#define	DataErr		7	/* data error, val=error count */#define	FileErr		8	/* error writing file, val=errno */#define	FileBegin	9	/* file transfer begins, str=name */#define	FileEnd		10	/* file transfer ends, str=name */#define	FileSkip	11	/* file being skipped, str=name */	/* error code definitions [O] means link still open */#define	ZmDone		-1	/* done */#define	ZmErrInt	-2	/* internal error */#define	ZmErrSys	-3	/* system error, see errno */#define	ZmErrNotOpen	-4	/* communication channel not open */#define	ZmErrCantOpen	-5	/* can't open file, see errno [O] */#define	ZmFileTooLong	-6	/* remote filename too long [O] */#define	ZmFileCantWrite	-7	/* could not write file, see errno */#define	ZmDataErr	-8	/* too many data errors */#define	ZmErrInitTo	-10	/* transmitter failed to respond to init req. */#define	ZmErrSequence	-11	/* packet received out of sequence */#define	ZmErrCancel	-12	/* cancelled by remote end */#define	ZmErrRcvTo	-13	/* remote receiver timed out during transfer */#define	ZmErrSndTo	-14	/* remote sender timed out during transfer */#define	ZmErrCmdTo	-15	/* remote command timed out *//* zmodem-supplied functions: */extern	int	ZmTInit(ZModem *info) ;extern	int	ZmTFile(char *file, char *rmtname,		  u_int f0, u_int f1, u_int f2, u_int f3,		  int filesRem, int bytesRem, ZModem *info) ;extern	int	ZmTFinish(ZModem *info) ;extern	int	ZmAbort(ZModem *info) ;extern	int	ZmRInit(ZModem *info) ;extern	int	ZmRcv(u_char *str, int len, ZModem *info) ;extern	int	ZmTimeout(ZModem *info) ;extern	int	ZmAttention(ZModem *info) ;extern  void 	ZIdleStr(u_char *buffer, int len, ZModem *info);extern  void 	ZFlowControl(int onoff, ZModem *info);extern	int	YmodemTInit(ZModem *info) ;extern	int	XmodemTInit(ZModem *info) ;extern	int	YmodemRInit(ZModem *info) ;extern	int	XmodemRInit(ZModem *info) ;extern	u_long	FileCrc(char *name) ;#ifdef	ZMODEMLOGextern	void	zmodemlog(const char *, ...) ;#endif/* caller-supplied functions: */extern	int    ZXmitChr(u_char c, ZModem *info) ;extern	int    ZXmitStr(u_char *str, int len, ZModem *info) ;extern	void   ZIFlush(ZModem *info) ;extern	void   ZOFlush(ZModem *info) ;extern	int    ZAttn(ZModem *info) ;extern	void   ZStatus(int type, int value, char *status) ;extern	void * ZOpenFile(char *name, u_long crc, ZModem *info, int write) ;extern  int    ZWriteFile(u_char *buffer, int len, void * file, ZModem *info);extern  int    ZCloseFile(void * file, ZModem *info);// extern  long   ZFileTell(void * file, ZModem *info); /* ftell system call */extern  int    ZFileSeek(void * file, long offset, ZModem *info); /* fseek(file,off,0) */extern  int    ZFileRead(u_char *buffer, int len, void * file, ZModem *info);extern  int    ZFileEof(void * file, ZModem *info);extern  int    ZFileStat(char * name, int * len, int * date, int * mode);	/* From here on down, internal to Zmodem package */	/* ZModem character definitions */#define	ZDLE	030	/* zmodem escape is CAN */#define	ZPAD	'*'	/* pad */#define	ZBIN	'A'	/* introduces 16-bit crc binary header */#define	ZHEX	'B'	/* introduces 16-bit crc hex header */#define	ZBIN32	'C'	/* introduces 32-bit crc binary header */#define	ZBINR32	'D'	/* introduces RLE packed binary frame w/32-bit crc */#define	ZVBIN	'a'	/* alternate ZBIN */#define	ZVHEX	'b'	/* alternate ZHEX */#define	ZVBIN32	'c'	/* alternate ZBIN32 */#define	ZVBINR32 'd'	/* alternate ZBINR32 */#define	ZRESC	0177	/* RLE flag/escape character */	/* ZModem header type codes */#define	ZRQINIT	0	/* request receive init */#define	ZRINIT	1	/* receive init */#define	ZSINIT	2	/* send init sequence, define Attn */#define	ZACK	3	/* ACK */#define	ZFILE	4	/* file name, from sender */#define	ZSKIP	5	/* skip file command, from receiver */#define	ZNAK	6	/* last packet was garbled */#define	ZABORT	7	/* abort */#define	ZFIN	8	/* finish session */#define	ZRPOS	9	/* resume file from this position, from receiver */#define	ZDATA	10	/* data packets to follow, from sender */#define	ZEOF	11	/* end of file, from sender */#define	ZFERR	12	/* fatal i/o error, from receiver */#define	ZCRC	13	/* request for file crc, from receiver */#define	ZCHALLENGE 14	/* "send this number back to me", from receiver */#define	ZCOMPL	15	/* request is complete */#define	ZCAN	16	/* other end cancelled with CAN-CAN-CAN-CAN-CAN */#define	ZFREECNT 17	/* request for free bytes on filesystem */#define	ZCOMMAND 18	/* command, from sending program */#define	ZSTDERR	19	/* output this message to stderr */	/* ZDLE escape sequences */#define	ZCRCE	'h'	/* CRC next, frame ends, header follows */#define	ZCRCG	'i'	/* CRC next, frame continues nonstop */#define	ZCRCQ	'j'	/* CRC next, send ZACK, frame continues nonstop */#define	ZCRCW	'k'	/* CRC next, send ZACK, frame ends */#define	ZRUB0	'l'	/* translate to 0177 */#define	ZRUB1	'm'	/* translate to 0377 */	/* ascii definitions */#define	SOH	1	/* ^A */#define	STX	2	/* ^B */#define	EOT	4	/* ^D */#define	ACK	6	/* ^F */#define	DLE	16	/* ^P */#define	XON	17	/* ^Q */#define	XOFF	19	/* ^S */#define	NAK	21	/* ^U */#define	SYN	22	/* ^V */#define	CAN	24	/* ^X */extern int ZXmitHdr(int type, int format, u_char data[4], ZModem *info);extern int ZXmitHdrHex( int type, u_char data[4], ZModem *info);extern int ZXmitHdrBin( int type, u_char data[4], ZModem *info);extern int ZXmitHdrBin32( int type, u_char data[4], ZModem *info);extern int ZXmitData(int format, int len, u_char term, u_char *data, ZModem *info);extern u_char * putZdle( u_char *ptr, u_char c, ZModem *info ) ;extern u_long   FileCrc( char *name);extern u_char * ZEnc4(u_long n);extern u_long   ZDec4( u_char buf[4]);extern char * sname2(ZMState state);extern char * sname(ZModem *info);	/* state table entry.  There is one row of the table per	 * possible state.  Each row is a row of all reasonable	 * inputs for this state.  The entries are sorted so that	 * the most common inputs occur first, to reduce search time	 * Unexpected input is reported and ignored, as it might be	 * caused by echo or something.	 *	 * Extra ZRINIT headers are the receiver trying to resync.	 */typedef	struct {	  int	type ;		/* frame type */	  int	(*func)(ZModem *) ;	/* transition function */	  int	IFlush ;	/* flag: flush input first */	  int	OFlush ;	/* flag: flush output first */	  ZMState newstate ;	/* new state.  May be overridden by func */	} StateTable ;// zmodem.c // (internal functions) ////////////////////////////////////////// int ZmIgnore( ZModem *info );int ZmRetDone( ZModem *info );int ZmGotCancel( ZModem *info );int ZmDataSetup( ZModem *info );int ZmGotCommand( ZModem *info );int ZmGotStderr( ZModem *info );int ZmZPF( ZModem *info );int ZmAnswerChallenge( ZModem *info );int ZmGotAbort( ZModem *info );// zmodemr.c /////////////////////////////////////////////////////////////////int ZmSendRinit( ZModem *info );int ZmGotSinitData( ZModem *info, int crcGood );int ZmGotFileName( ZModem *info, int crcGood );int ZmResendCrcReq(ZModem *info);int ZmResendRpos( ZModem *info );int ZmGotFileData( ZModem *info, int crcGood );int YrcvChar( char c, ZModem *info );int YrcvTimeout( ZModem *info );// zmodemt.c local function definition ///////////////////////////////////////  int ZmSendMoreFileData( ZModem *info );int YsendChar( char c, ZModem *info );// zmutil.c /////////////////////////////////////////////////////////////////u_char * putZdle( u_char *ptr, u_char c, ZModem *info );int ZXmitHdrHex( int type, u_char data[4], ZModem *info );int ZXmitHdrBin( int type, u_char data[4], ZModem *info );int ZXmitHdrBin32( int type, u_char data[4], ZModem *info );int ZXmitHdr( int type, int format, u_char data[4], ZModem *info);int ZXmitData( int format, int len, u_char term, u_char *data, ZModem *info);u_long FileCrc( char *name );u_char	* ZEnc4(u_long n);u_long ZDec4( u_char buf[4] );char * ZmSname2(ZMState state);char * ZmSname(ZModem *info);#ifndef NULL#define NULL 0#endif#endif

⌨️ 快捷键说明

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