📄 modem.h
字号:
#if !defined(ZYFMODEM)
#define ZYFMODEM
#undef STRICT
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <ctype.h>
//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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -