www.pudn.com > AtModem.rar > YsATModem.h


// ATModem.h: interface for the CYsATModem class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_ATMODEM_H__1494C7E1_C927_11D5_971D_0050BADA81C3__INCLUDED_) 
#define AFX_ATMODEM_H__1494C7E1_C927_11D5_971D_0050BADA81C3__INCLUDED_ 
 
#include "YsComm.h" 
#include "YsQueue.h" 
 
/**************************************************************** 
名称:				Modem的AT命令操作类 
作者:				广州暨南大学97计算机 姚舜 
EMAIL:				ycatx@ycatx.net 
创建时间:			2001 
最近修改时间:		2003.8.6 
功能:				对Modem的AT命令操作进行全面的封装 
等级:				☆☆☆ 
****************************************************************/ 
 
#define CMD_ATE		"ATE" //关闭本地modem回显 
#define CMD_ATE1	"ATE1"//打开地modem回显 
#define CMD_ATD		"ATDT"//拨号 
#define CMD_AT		"AT"//初始化 
#define CMD_ATA		"ATA"//回答Ring 
#define CMD_ATH0	"ATH0"//挂断连接,进入命令状态 
#define CMD_ATZ0	"ATZ0"//复位命令 
#define CMD_ATS0	"ATS0=0"//手工应答 
//#define CMD_+++		"+++"//使modem切换到命令模式 
 
#define WM_CONNECTED WM_USER+2000 
 
 
//下面三排宏有对应关系,修改要小心 
#define ECHO_OK				"OK"  //0 
#define ECHO_CONNECT		"CONNECT"//1 
#define ECHO_RING			"RING"//2 
#define ECHO_NOCARRIER		"NO CARRIER"//断线//3 
#define ECHO_ERROR			"ERROR"//4 
#define ECHO_CONNECT1200	"CONNECT 1200"//5 无用 
#define ECHO_NODIALTONE		"NO DIALTONE"//6//五秒内检测不到拨号音 
#define ECHO_BUSY			"BUSY"//7 
#define ECHO_NOANSWER		"NO ANSWER"//30 
 
#define CODE_CANNTFIND		-1//与AT命令无关 
#define CODE_OK				0 
#define CODE_CONNECT		1 
#define CODE_RING			2 
#define CODE_NOCARRIER		3 
#define CODE_ERROR			4 
#define CODE_CONNECT1200	5 
#define CODE_NODIALTONE		6 
#define CODE_BUSY			7 
#define CODE_NOANSWER		30 
 
#define WM_MODEM_CHANGE		    WM_USER+1000 
 
//#define ECHO_CONNECT2400	"CONNECT 2400" 
#define ECHO_COUNT	9 
 
 
#define MODE_UNINITIALIZE	    1//未初始化状态 
#define MODE_UNMODEM			5 
#define MODE_COMMAND			10 
#define MODE_CONNECTING			25 
#define MODE_DATA				30 
 
#define PURGE_ALL PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR 
 
//超过这个长度怎么办??? 
#define QUEUE_SIZE 1024*2			//缓冲区的长度 
 
#define DIALTIME_START			45000  //等待连接字符串的超时 
#define DIALTIME_INTER			3000	//等待连接字符串的超时 
#define WAITTIME				800		//SendAT()后等待返回的时间	 
#define WAITADDADDADDTIME		2000	//发送+++后的等待时间 >1000 
#define WAITATHTIME				2000	//发送ath后的等待时间 
 
///////////// YCAT 2001 ///////////////// 
#define USER_ANSWER//send ata应答和自动应答两种方式问切换 
 
 
 
class CYsATModem : public CYsComm  
{ 
	BOOL m_bCD; 
	BOOL m_bInit; 
	CString m_sLastError; 
	int m_nMode; 
	HWND m_hWnd;//用来接收消息 
	int m_nRingCount;//表示振铃多少次才回应 
 
	CWinThread* m_Thread;//收数线程 
 
	//用来存放AT的返回字符串 
//	static CString pstrCmdString[ECHO_COUNT]; 
	CString pstrCmdString[ECHO_COUNT]; 
private: 
	void ChangeMode(int newMode); 
	static UINT WaitThread(LPVOID lpvoid); 
	/////////处理错误函数//////////////// 
	inline virtual void ResetError(){m_sLastError=_TEXT("Operation success");} 
	virtual void SetLastError(CString sError){m_sLastError=sError;} 
 
	BOOL HangUp2();//用关闭串口的方法来挂断modem 
	BOOL SendAT(LPCSTR strCmd,BOOL AddReturn=TRUE);//发送AT命令	 
 
										//是否发送消息 
	int CheckString(LPCTSTR str,BOOL bSendMessage=TRUE);//检查字符串,所含的AT命令字符串 
	CYsQueue* m_pQueue;//存放串口数据的缓冲区 
 
	///////////线程///////////// 
//	把串口读入缓冲区的字符,写到自己维护的缓冲区中,并判断断线 
	static UINT ReadCommThread(LPVOID pParam); 
//	把串口读入缓冲区的字符,写到自己维护的缓冲区中,并判Ring字符 
//  只用在等待拨号的时候,拨号结束则结束 
	//检测modem是否就续 
	static UINT DetectModemThread(LPVOID pParam); 
 
	int DetectConnect(); 
public: 
	HANDLE m_hConnected; 
	BOOL m_bTestMode;//表示用串口通讯,即不通过modem,当这个变量为TRUE时,功能等于CYsComm 
 
	CString GetLastError(){return m_sLastError;} 
	//开始和结束函数 
	CYsATModem(); 
	virtual ~CYsATModem(); 
	BOOL InitModem(UINT nPort,UINT uBaud,int iRingCount=2,HWND hWnd=NULL);//初始化modem 
 
	//////////////AT命令操作//////////////// 
	BOOL DialUp(LPCTSTR  strDialNumber);//拨号 
	BOOL HangUp();//挂断 
 
	////////////读写操作////////////// 
	int Write(LPCSTR lpstrWrite,DWORD dwCount); 
 
	int Read(LPTSTR lpstrRead,DWORD dwCount, 
			DWORD* dwHaveReaded,DWORD nTimeOut); 
 
	BOOL Clear(DWORD dwType); 
 
	////////////状态////////////// 
	int GetState();//返回当前状态/ 
	//返回当前状态的描述 
	CString GetStateDesc(); 
	//返回写缓冲区内有多少个字符 
	DWORD GetReadBufferCount(); 
}; 
 
#endif // !defined(AFX_ATMODEM_H__1494C7E1_C927_11D5_971D_0050BADA81C3__INCLUDED_)