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

📄 ysatmodem.h

📁 用AT指令实现短信猫编程!欢迎大家一起学习进步!
💻 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<BYTE>* 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_)

⌨️ 快捷键说明

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