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