www.pudn.com > C_modem16.zip > Modem.h
#if !defined(ZYFMODEM) #define ZYFMODEM #undef STRICT #include#include #include #include #include #include //enum {M_COMMAND,M_ONLINE,M_TRANSFILE}; #define WM_BREAK WM_USER+200 #define WM_SHOWMESSAGE WM_USER+201 #define WM_CHARSARRIVE WM_USER+202 #define MODEM_TIMER 16 #define SEND(m) ::SendMessage(hwindow,WM_SHOWMESSAGE,0,(LPARAM)m) #define CLEAR() ::SendMessage(hwindow,WM_SHOWMESSAGE,0,(LPARAM)" ") //#define WM_BREAK 10000 #define IN_QUEUE_SIZE 1100 #define OUT_QUEUE_SIZE 1100 //err code #define USER_BREAK -1 #define NO_DCD -2 #define TIME_OUT -3 //use in ReceAnsStr #define LEADING_CR 0 #define LEADING_LF 1 #define IN_MSG 2 #define TRAILING_LF 3 #define EXIT 4 #define CR 0x0d #define LF 0x0a #define MESSAGE_NUM 12 //the id of return message of modem enum modemanswer { M_OK , M_NODCD , M_ERROR , M_NOTONE , M_BUSY , M_NOANSWER , M_RING , M_CONNECT , M_PROTOCOL , M_COMPRESS , M_CARRIER , M_RELIABLE }; #define M_UNKNOW -1 //MODEM Type #define MULTI 0 #define HAYES 1 #define OTHER 2 //USE FOR TRANSPORTING FILE #define PAKBUFSIZE 1024 //USE FOR EXCEPT #define E_USRCAN 0 #define E_NODCD 1 enum except { //SEND EXPECT E_FILEMTY=2, E_NOACK, E_RCVCAN, E_BADPAK, E_EOF, E_SNDOK, E_DSKREAD, E_LASTACK, //RECEIVE EXPECT E_NOSOH, E_BADCKV, E_SNDCAN, E_NODATA, E_BADSOH, E_PAKNUM, E_SNDACK, E_PAKSEQ, E_DSKWRITE, E_RCVOK }; #define CONTINUE 1 #define BREAK 0 #define MAXCOUNT 20 #define ACKRETRY 30 #define MAXNOSOH 200 //USE FOR MODEM PROTOCOL #define XSOH 1 #define YSOH 2 #define SUM 0 #define CRC 1 #define CAN 0X18 #define NAK 0X15 #define EOT 4 #define ACK 6 //------------------------------------------------------------------------ class MTIMER{ DWORD settime; public: void set(DWORD); BOOL ifzero(); void delay(DWORD); }; //---------------------------------------------------------------------- class MODEM{ public: struct ANSINFO{ char * message; BOOL terminal; int id; }; struct CONFIGBUFF{ char *base; char *protocol; }; MODEM(); ~MODEM(); virtual void IdleAction(); int Dial(char *); int Answer(); int ConfigModem(char *); void HangUp(); void Stop(); int SendAFile(fstream &f); int ReceAFile(fstream &f); BOOL DetectDcd(); BOOL DetectCts(); BOOL DetectRx(); BOOL DetectTx(); void ChangeBaud(char *); BOOL operator!() {return err;} int IniCom(HINSTANCE,HWND,char *); void Readn(BYTE*,int,DWORD=1000,DWORD=1000,BOOL=FALSE); void Writen(BYTE*,int); void ReadAChar(BYTE &,DWORD=1000,BOOL=FALSE); void WriteAChar(BYTE ); void OnTimer(); HWND hwindow; int nCid; BOOL IfTransFile; BOOL IfCom; BOOL IfModem; BOOL IfCommand; BOOL IfRx; BOOL IfTx; protected: // HINSTANCE hInstance; int err; int nbyte; DCB dcb; COMSTAT comstat; MSG msg; struct PACKET{ BYTE soh; BYTE pnum1; BYTE pnum2; UINT ckval; UINT pointr; UINT pointw; int bottom; BYTE * data; DWORD paknum; UINT paklong; DWORD total; PACKET(){ data=new BYTE[PAKBUFSIZE]; pointr=0; bottom=0; pointw=0; paknum=1; total=0; paklong=128; pnum1=(BYTE)(paknum&0x00ff); pnum2=(BYTE)(~pnum1); } ~PACKET(){delete data;} }; PACKET * packet; MTIMER timer; ANSINFO * ansinfo; CONFIGBUFF *configbuff; int id; UINT dtebaud; BOOL protocollink; char cmdbuff[40]; char ansbuff[80]; char dispbuf[40]; // static void FAR PASCAL __export ModemTimerProc(HWND,UINT,WORD,LPARAM); void SendCmd(char*); void ReceAnsStr(char *,DWORD); void ReceAns(DWORD); void Command(char *, DWORD=4000); int ReadPacket(BYTE soh,fstream &f); int WritePacket(int flag,fstream &f); void ClearReceBuf(DWORD=1000); void SendCkSum(); BOOL ReceCkSum(); int Except(int exceptnum, int &count,int maxcount); }; #endif