www.pudn.com > SendMsgOCX.rar > WSMInterface.h


// WSMInterface.h: interface for the CWSMInterface class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_) 
#define AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "WSerialComm.h" 
#include "WMsgFrameParser.h" 
#include "WAtCmdResult.h" 
#include "WMsgSentHistory.h" 
 
const char AT_ECHO_OFF[] = "ATE0\r\n"; 
const char AT_SET_TEXT_MODE[] =  "AT+CMGF=1\r\n"; 
const char AT_PASSIVE_RECEIVE_MODE[] = "AT+CNMI=3,2,2,0,0\r\n"; 
const char AT_SET_SMS_CENTER[] = "AT+CSCA=\"%number%\"\r\n"; 
const char AT_SEND_MSG[] = "AT+CMGS=\"%number%\"\r\n"; 
const char AT_SHORT_MSG_END[] = "\x1A\r\n"; 
 
const DWORD ERR_TOO_MANY_WAITING_FRAMES = 1;  // 排队太多 
const DWORD ERR_COM_WRITE_ERROR = 2;	// 写错误 
const DWORD ERR_SMS_NO_ANSWER = 3;		// SMS 没响应 
 
 
class CWSMInterface : protected CWSerialComm   
{ 
public: 
	CWSMInterface(); 
	 ~CWSMInterface(); 
 
	// 设置短信中心号码, return 0 if success 
	DWORD SetSMSCenter(LPCTSTR lpcszCenterNumber); 
 
	// hwnd 接收通知的窗口,  
	// msg 需要发送的消息定义 
	void SetWinHandleAndNotifyMessage(HWND hwnd, WORD msg); 
 
	// 设置超时,所有的发送用相同的超时设置 
	void SetTimeOut(const MsgTimeOutType& timeOut); 
 
	// lpcszPhoneNumber : 接收号码 
	// msgType : 命令类型--达示、调度、 
	// lpData : 需要发送的数据 
	// dwDataSize : 数据长度 
	// 返回出错代码,0表示成功 
	 
	DWORD SendMessage(LPCTSTR lpcszPhoneNumber, BYTE msgType, const BYTE* lpData, DWORD dwDataSize); 
 
	BOOL OpenCom(int portNo); 
 
	void OnSysTimeChanged(); 
 
protected: 
	 
	DWORD SendPacket(const CWMsgPacket& toSent, BOOL bAsPC = TRUE); 
	BOOL InitSMSModule(); 
 
private: 
 
	enum CurrentCmd 
	{ 
		AT_CMD, 
		MSG_FRAME_CMD, 
		NOT_DETERMINED 
	}; 
 
	enum CurrentCmd m_currCmd; 
 
	BOOL InitMembers(); 
	BOOL WriteString(LPCSTR lpszToWrite); 
 
	// if len == -1 use strlen to get length 
	DWORD SendAtCmd(LPCSTR lpszToSend, int len, DWORD dwTimeOut = 60000); 
 
	// overrided 
    void OnDataRead( const LPBYTE, DWORD );  
 
	void ProcessOneByte(BYTE byData); 
	void ParseAtCmd(BYTE byData); 
	void ParseMsgFrame(BYTE byData); 
	void ResetParsers(); 
	void ProcessReceivedMsgFrame(const CWMsgPacket& msgFrame); 
	void ProcessReceivedAtCmdResult(const CWAtCmdResult& atCmdRes); 
 
	DWORD SendOneFrame(const CWMsgSent& toSent); 
	DWORD SendOnePacket(const CWMsgSent& toSent, int packetIndex); 
  
 
	HWND m_hwndNotify; 
	WORD m_msgNotify; 
 
	HANDLE m_hSendEvent; 
 
	CWAtCmdParser  m_atParser; 
	CWMsgFrameParser m_msgParser; 
	CWMsgSentHistory m_msgHistory; 
 
}; 
 
#endif // !defined(AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_)