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

📄 zmodem.h

📁 DOS下采用中断接收数据的串口通讯的例子,很难找到的好东西!
💻 H
字号:
// ********************* START OF ZMODEM.H *********************
//
// This header file has the class definitions needed for an
// application program to perform Zmodem file transfers.
// The Zmodem class is derived from the virtual base class
// FileTransfer.  The public interface to the Zmodem class
// consists of just three functions:  a constructor, and
// functions to send and receive files.

#ifndef _ZMODEM_DOT_H
#define _ZMODEM_DOT_H

class FileTransfer {
    protected :
        virtual void error( char *fmt, ... );
        virtual void status( char *fmt, ... );
        RS232 *port;
        FILE *file;
        long file_length;
        long byte_count;
        int file_count;
        char file_name[ 128 ];
        char buffer[ 1025 ];

    public :
        virtual int Send( char *files[] ) = 0;
        virtual int Receive( char *file ) = 0;
};

const int ZMAXHLEN  = 16;   // Max header information length
const int ZATTNLEN  = 32;   // Max length of attention string

class Zmodem : public FileTransfer {
private :
    int WakeUpSender( void );
    int ReceiveFiles( void );
    int ReceiveSingleFile( void );
    void SendHexHeader( int len, int type, char *hdr );
    void SendBinaryHeader( int length, int type, char * header );
    int ReadHeader( char *header );
    int ReadDataFrame( char *buf, int length );
    int ReadDataFrameCRC32( char *buf, int length );
    int ReadDataFrameCRC16( char *buf, int length );
    void SendAttentionString( void );
    void AckZFIN( void );
    int OpenInputFile( char *data );
    void PackLongIntoHeader( long header_data );
    long UnpackHeaderIntoLong( char *header );
    void SendHexEncodedChar( int c );
    void SendEncodedChar( int c );
    void SendChar( int c ) { port->Write( (char) c, 30000L ); }
    void SendZFIN( void );
    int ReadHexHeaderCRC16( char *header );
    int ReadBinaryHeaderCRC16( char *header );
    int ReadBinaryHeaderCRC32( char *header );
    int ReadEncodedByte( void );
    int ReadUnencodedByte( void );
    int ReadHexByte( void );
    int ReadChar( long timeout );
    int GetRinitHeader( void );
    int SendSingleFile( char *name );
    int SendFileContents( void );
    void SendDataFrame( char *buffer, int length, int frameend );
    int SyncWithReceiver( int flag );

    int receiver_wants_crc32;
    int current_frame_uses_crc32;
    long received_file_position;
    long transmitted_file_position;
    long last_sync_position;
    long last_reported_position;
    unsigned int receiver_buffer_length;
    int file_at_eof;
    int wake_up_sender_header_type;
    int Rxcount;
    char received_header[ ZMAXHLEN ];
    char transmitted_header[ ZMAXHLEN ];
    char attention_string[ ZATTNLEN + 1 ];
    int last_char_sent;

public :
    Zmodem( RS232 *rs232_port );
    int Send( char *files[] );
    int Receive( char *file );
};

#endif // #ifdef _ZMODEM_DOT_H

// ******************* END OF ZMODEM.H *******************

⌨️ 快捷键说明

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