www.pudn.com > SendMsgOCX.rar > WAtCmdResult.cpp


// WAtCmdResult.cpp: implementation of the CWAtCmdResult class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
//tts #include "WSMModule.h" 
#include "WAtCmdResult.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
char CWAtCmdResult::szOKCmd[MAX_AT_CMD_RESULT_LEN] = "OK\r\n"; 
char CWAtCmdResult::szWaitSMSMsg[MAX_AT_CMD_RESULT_LEN] = "> "; 
 
CWAtCmdResult::CWAtCmdResult() 
{ 
	Reset(); 
} 
 
CWAtCmdResult::~CWAtCmdResult() 
{ 
 
} 
 
const char* CWAtCmdResult::FindMatchCmd(BYTE toAdd) 
{ 
	if(szOKCmd[m_received] == toAdd) return szOKCmd; 
	if(szWaitSMSMsg[m_received] == toAdd) return szWaitSMSMsg; 
 
	return NULL; 
} 
 
void CWAtCmdResult::GetResult(LPSTR lpszCmd) 
{ 
	ASSERT(IsEnd()); 
	strcpy(lpszCmd, (const char*) m_atCmdResult); 
} 
 
void CWAtCmdResult::Reset() 
{ 
	m_received = 0; 
	pCurrMatch = NULL; 
} 
 
enum CWAtCmdResult::CheckResult CWAtCmdResult::AddCmdChar(BYTE toAdd) 
{ 
	if(NULL == pCurrMatch)  
	{ 
		pCurrMatch = FindMatchCmd(toAdd); 
		if(NULL == pCurrMatch) 	return AT_CMD_ERROR; 
	} 
	 
	BOOL bMatch = pCurrMatch[m_received] == toAdd; 
 
	m_atCmdResult[m_received] = toAdd; 
	m_received ++; 
	 
	if(bMatch) 
	{ 
		if (IsEnd()) 
		{	 
			m_atCmdResult[m_received] = '\0'; 
			return AT_CMD_END; 
		} 
		else 
			return AT_CMD_MATCH; 
	} 
	else 
		return AT_CMD_ERROR; 
} 
 
BOOL CWAtCmdResult::IsEnd() 
{ 
	return pCurrMatch && pCurrMatch[m_received] == '\0'; 
} 
 
CWAtCmdParser::CWAtCmdParser() 
{ 
	Reset(); 
} 
enum ParseResult CWAtCmdParser::ParseOneByte(BYTE toSet) 
{ 
	enum ParseResult parseResult; 
	 
	m_matchResult = m_atCmd.AddCmdChar(toSet); 
 
	switch(m_matchResult) 
	{ 
	case CWAtCmdResult::AT_CMD_ERROR: 
		parseResult = FrameSegmentDiscarded; 
		Reset(); 
		break;  
		 
	case CWAtCmdResult::AT_CMD_MATCH : 
		parseResult = FrameNotFinished; 
		break; 
		 
	case CWAtCmdResult::AT_CMD_END:		 
		parseResult = FrameOK;	// let caller to reset 
		break; 
 
	default: 
		ASSERT(FALSE); 
		break;	 
	} 
 
 
	return parseResult; 
} 
 
void CWAtCmdParser::Reset() 
{ 
	m_atCmd.Reset(); 
	m_matchResult = CWAtCmdResult::AT_CMD_END; 
} 
 
const CWAtCmdResult& CWAtCmdParser::GetParseResult() const 
{ 
	return m_atCmd; 
}