143 lines
3.7 KiB
C++
143 lines
3.7 KiB
C++
// Zmodem.h: interface for the Zmodem class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_ZMODEM_H__3186313F_3A85_4CE4_B80D_D2C026ADF36E__INCLUDED_)
|
|
#define AFX_ZMODEM_H__3186313F_3A85_4CE4_B80D_D2C026ADF36E__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "FileTransfer.h"
|
|
|
|
#define ZMAXHLEN 16 // Max header information length
|
|
#define ZATTNLEN 32 // Max length of attention string
|
|
|
|
class Settings
|
|
{
|
|
public :
|
|
long BaudRate;
|
|
char Parity;
|
|
int WordLength;
|
|
int StopBits;
|
|
int Dtr;
|
|
int Rts;
|
|
int XonXoff;
|
|
int RtsCts;
|
|
int DtrDsr;
|
|
};
|
|
|
|
class Zmodem : public FileTransfer
|
|
{
|
|
private :
|
|
unsigned long m_FileSize; //待 接收/发送 的文件大小
|
|
int m_ByteTransfer; //已经 接收/发送 了多少KB
|
|
|
|
void SendCharToComm();
|
|
int GetFileSize(char *buffer);
|
|
int WakeUpSender( void );
|
|
int ReceiveFiles( CString Path );
|
|
int ReceiveSingleFile( CString Path );
|
|
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( CString Path, char *data );
|
|
void PackLongIntoHeader( long header_data );
|
|
long UnpackHeaderIntoLong( char *header );
|
|
void SendHexEncodedChar( int c );
|
|
void SendEncodedChar( int c , bool b = FALSE);
|
|
|
|
void ReadSettings( Settings © );
|
|
int TXSpaceUsed( void );
|
|
|
|
void SendChar( int c , bool b = FALSE)
|
|
{
|
|
/*用新函数封装
|
|
char cWriteChar;
|
|
cWriteChar = (c & 0377);
|
|
port->ZmodemSendDataDirectly(&cWriteChar,1);
|
|
*/
|
|
|
|
m_WriteBuff[m_WriteBuffLength] = (char)(c & 0377);
|
|
m_WriteBuffLength++;
|
|
}
|
|
|
|
void ClearReadBuf();
|
|
|
|
|
|
void PrintLog(char *chPrtlog, int nLogLen);
|
|
void PrintLogLast(CString& strLog);
|
|
|
|
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 );
|
|
long ReadTime( void );
|
|
|
|
//-----------------------------------------------------
|
|
int ReadBuff(long timeout);
|
|
int m_BuffCount;
|
|
//---------------------------
|
|
|
|
//log-----------------------------
|
|
FILE *zmodemLog;
|
|
DWORD dwBegin;
|
|
char cReadLog[2048];
|
|
int nLogLength;
|
|
char cReadType[2];
|
|
int nIndex;//记录某个包发了多少次
|
|
//log---------------------------
|
|
|
|
//--写串口缓冲区
|
|
char m_WriteBuff[8192];
|
|
int m_WriteBuffLength;
|
|
int m_nBufReadIndex;
|
|
//
|
|
|
|
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;
|
|
|
|
char buff[BUFFSIZE];
|
|
// char *str;
|
|
|
|
public :
|
|
int GetTransferPosit();
|
|
int GetFileSize();
|
|
Zmodem( CSComPort *rs232_port );
|
|
~Zmodem();
|
|
BOOL Send( char *files[] );
|
|
BOOL Receive( CString Path );
|
|
BOOL SendCancelString();
|
|
// int nTestID;
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_ZMODEM_H__3186313F_3A85_4CE4_B80D_D2C026ADF36E__INCLUDED_)
|