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

📄 zmodemcore.h

📁 一个在Visual c++下可对串口和MODEM进行操作,并能用ZOMDEM协议进行收发文件的程序.
💻 H
字号:
//-----------------------------------------------------------------------------
// project:		ZModem
// author:		Frank Weiler, Genshagen, Germany
// version:		0.91
// date:		October 11, 2000
// email:		frank@weilersplace.de
// copyright:	This Software is OpenSource.
// file:		ZModemCore.h
//-----------------------------------------------------------------------------

#if !defined(AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_)
#define AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "zmodemdef.h"
#include "crcxm.h"
#include "crc32.h"
#include "ZModemComm.h"
#include "ZModemFile.h"

// macros
#define ALLOK (GetLastError()==NO_ERROR)
#define needsDLE(x) (((x) == ZDLE) || ((x) == 0x10) || ((x) == 0x11) || ((x) == 0x13)) //masking special ZModem chars

// states of the zmodem state machine
#define SM_SENDZDATA	0	//sending / receiving file information
#define SM_SENDZEOF		1	//finishing file
#define SM_SENDDATA		2	//data transfer is running
#define SM_ACTIONRPOS	3	//reposition the filepointer during sending or receiving
#define SM_WAITZRINIT	4	//waiting for initalisation finish

// constants
#define ZMCORE_MAXBUF 18000
#define ZMCORE_MAXTX 1024	//sending/receiving max. 1024 bytes over com-port in one step

// errors used by this implementation
#define ZMODEM_INIT					0x20000001	//zmodem-initialization failed
#define ZMODEM_POS					0x20000002	//force reposition
#define ZMODEM_ZDATA				0x20000003	//
#define ZMODEM_CRCXM				0x20000004	//16-bit-checksum error
#define ZMODEM_LONGSP				0x20000005	//too long subpaket recieved
#define ZMODEM_CRC32				0x20000006	//32-bit-checksum error
#define ZMODEM_FILEDATA				0x20000007	//filedata has errors or missing
#define ZMODEM_BADHEX				0x20000008	//unexpected hex-char received (in a hex header)
#define ZMODEM_TIMEOUT				0x20000009	//by name
#define ZMODEM_GOTZCAN				0x2000000A	//cancel recieved (form other side)
#define ZMODEM_ABORTFROMOUTSIDE		0x2000000B	//user break
#define ZMODEM_ERROR_FILE			0x2000000C	//file handling error (during open, create, read, write)

// msgs used by this implementation, posted to notify window
#define WM_USER_ZMODEMTOTALFILES            WM_USER+1	//number of files we will receiving
#define WM_USER_ZMODEMTOTALSIZE             WM_USER+2	//size of all files we will receiving
#define WM_USER_ZMODEMRPOS					WM_USER+3	//reposition was done (mostly forced by checksum errors)
#define WM_USER_ZMODEMERROR					WM_USER+4	//generic error
#define WM_USER_ZMODEMPROGRESS				WM_USER+5	//informs about the sent or received bytes
#define WM_USER_ZMODEMNEXTFILE              WM_USER+6	//file sending/receiving starts
#define WM_USER_ZMODEMNEXTFILESIZE          WM_USER+7	//by name

// ZModem core class
class ZMODEM CZModemCore
{
public:
	//construction, destruction
	CZModemCore(HWND howner,HANDLE hcomm,HANDLE hcancelevent);
	virtual ~CZModemCore();
	//actions
	bool Send(CStringArray* filelist);
	bool Receive(CStringArray* filelist,CString receivedir);
protected:
	// layer 3 methods
	void ResetAll();
	bool sendFiles();
	bool sendFile();
	void receiveFile();
	void receiveData();
	// layer 2 methods
	void getZMHeaderImmediate();
	void getZMHeader();
	void getOO();
	void getFILEINFO();
	void sendZRINIT();
	void sendZSKIP();
	void sendZRPOS();
	void sendZFIN();
	void sendZACK();
	void sendrz();
	void sendZRQINIT();
	void sendZFILE();
	void sendFILEINFO();
	void sendZDATA();
	void sendZEOF();
	void sendOO();
	// layer 1 methods
	void sendHeader();
	void sendHexHeader();
	void sendBinHeader();
	void sendBin32Header();
	void getHexHeader();
	void getBinaryHeader();
	void getBin32Header();
	void getData();
	void getData16();
	void getData32();
	bool posMatch();
	void sendData();
    void sendData32(int len,char frameend);
    void sendData16(int len,char frameend);
	// layer 0 methods
	void getNextHexCh();
	void getNextDLECh();
	void getNextCh();
	void sendChar();
	void sendChar(int c);
	void sendDLEChar();
	void sendHexChar();
	// data members
	int ch;
	int gotSpecial;
	bool m_bWait;
	int gotHeader;
	unsigned char frameType;
	unsigned char headerType;
	int headerData[4];
	int moreData;
	char mainBuf[1024];
	char* bufPos;
	char* bufTop;
	DWORD goodOffset;
	DWORD bytes;
	bool bcrc32,bcanfdx;
	bool skip;
	DWORD maxTx;
	//
	HWND m_hOwner;
	HANDLE m_hcomm;
	HANDLE m_hCancelEvent;
	CZModemComm* m_ZModemComm;
	CZModemFile* m_ZModemFile;
	CStringArray* m_Filelist;
};

#endif // !defined(AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_)

⌨️ 快捷键说明

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