亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wsminterface.cpp

?? 手機發送短信的Activex控件
?? CPP
字號:
// WSMInterface.cpp: implementation of the CWSMInterface class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//tts #include "WSMModule.h"
#include "WSMInterface.h"
#include "SendMsgOCXCtl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CWSMInterface::CWSMInterface()
{
	InitMembers();
}

CWSMInterface::~CWSMInterface()
{

}

BOOL CWSMInterface::OpenCom(int portNo)
{
	BOOL bResult = CWSerialComm::OpenCom(portNo);
	if(bResult) bResult = InitSMSModule();

	return bResult;
}

BOOL CWSMInterface::WriteString(LPCSTR lpszToWrite)
{
	int nSize = strlen(lpszToWrite);
	return WriteDataBlock((const BYTE*)lpszToWrite, nSize);
}

DWORD CWSMInterface::SendAtCmd(LPCSTR lpszToSend, int len, DWORD dwTimeOut )
{
	
	ResetEvent(m_hSendEvent);
	
	if(len < 0) len = strlen(lpszToSend);

	if(!WriteDataBlock((const BYTE*)lpszToSend, len))
		return ERR_COM_WRITE_ERROR;

#ifndef TEST_SMS

	DWORD dwWait = WaitForSingleObject(m_hSendEvent, dwTimeOut);
	if(WAIT_OBJECT_0 != dwWait)
		return ERR_SMS_NO_ANSWER;

#endif	// return immediately if TEST_EMS defined

	return 0;
}

BOOL CWSMInterface::InitSMSModule()
{
	ASSERT(IsOpen());
	
	DWORD dwResult = 0;
	
	const char *pCmds[] = {AT_ECHO_OFF, AT_SET_TEXT_MODE, AT_PASSIVE_RECEIVE_MODE};

	for( int i = 0; i < 3; i++)
	{
		dwResult = SendAtCmd(pCmds[i], -1);
		if(dwResult != 0) break;
	}
	
	return dwResult == 0;
}

void CWSMInterface::SetWinHandleAndNotifyMessage(HWND hwnd, WORD msg)
{
	m_hwndNotify = hwnd;
	m_msgNotify = msg;
}

DWORD CWSMInterface::SendOneFrame(const CWMsgSent& toSent)
{
	DWORD dwError = 0;
	int nPacketCount = toSent.GetPacketCount();
	for( int i = 0; i < nPacketCount; i ++)
	{
		dwError = SendOnePacket(toSent, i);
		if(dwError != 0) break;					// error ?
	}

	return dwError;
}

DWORD CWSMInterface::SendOnePacket(const CWMsgSent& toSent, int packetIndex)
{
	CWMsgPacket msgPacket;
	toSent.GetMsgPacket(packetIndex, msgPacket);
	return SendPacket(msgPacket);
}

DWORD CWSMInterface::SendPacket(const CWMsgPacket& toSent, BOOL bAsPC)
{
	// set phone number

	CString strSetPhoneNumber(AT_SEND_MSG);

	// for test
	if(!bAsPC) strSetPhoneNumber = "+CMT: \"+86%number%\",,\"04/04/14,17:51:52+00\",145,36,0,0,\"+8613800250540\",145,9\r\n";

	strSetPhoneNumber.Replace("%number%", toSent.GetPhoneNumber());

	DWORD dwError = SendAtCmd(strSetPhoneNumber, strSetPhoneNumber.GetLength());
	if( 0 != dwError)	return dwError;

	// set content
	int nLen;
	const BYTE* lpData = toSent.GetDataAndSize(nLen);
	if(!WriteDataBlock(lpData, nLen))
		return ERR_COM_WRITE_ERROR;

	return SendAtCmd(AT_SHORT_MSG_END, -1);
}

DWORD CWSMInterface::SendMessage(LPCTSTR lpcszPhoneNumber, BYTE msgType, 
								 const BYTE* lpData, DWORD dwDataSize)
{
	DWORD dwResult = 0;

	// initialize CWMsgSent 
	CWMsgSent toSent;
	toSent.SetPhoneNumber(lpcszPhoneNumber);
	toSent.SetMessage(msgType, lpData, dwDataSize);

	// save and get frame no -- send
	
	if( m_msgHistory.SaveMsg(toSent) )
		dwResult = SendOneFrame(toSent);
	else
		dwResult = ERR_TOO_MANY_WAITING_FRAMES;

	return dwResult;
}

void CWSMInterface::OnDataRead( const LPBYTE lpData, DWORD dwLength)
{
	for( DWORD dwIndex = 0; dwIndex < dwLength; dwIndex ++ )
		ProcessOneByte(lpData[dwIndex]);
}

void CWSMInterface::ParseAtCmd(BYTE byData)
{
	switch(m_atParser.ParseOneByte(byData))
	{
	case FrameOK:
		{
			const CWAtCmdResult& atCmdReturn = m_atParser.GetParseResult();
			ProcessReceivedAtCmdResult(atCmdReturn);
			ResetParsers();
			break;
		}
	case FrameNotFinished:
		break;

	case FrameCheckSumError:			// parser will reset automatically
	case FrameSegmentDiscarded:
		m_currCmd = NOT_DETERMINED;
		break;
	default:
		ASSERT(FALSE);
		break;
	}
}

void CWSMInterface::ResetParsers()
{

	m_atParser.Reset();
	m_msgParser.Reset();
	m_currCmd = NOT_DETERMINED;
}

void CWSMInterface::ParseMsgFrame(BYTE byData)
{
	switch(m_msgParser.ParseOneByte(byData))
	{
	case FrameOK:
		{
			const CWMsgPacket& msgFrame = m_msgParser.GetParseResult();
			ProcessReceivedMsgFrame(msgFrame);
			ResetParsers();
			break;
		}

	case FrameNotFinished:

		break;

	case FrameSegmentDiscarded:		// parser will reset automatically
	case FrameCheckSumError:
		m_currCmd = NOT_DETERMINED;
		break;
	default:
		ASSERT(FALSE);
		break;
	}
}

void CWSMInterface::ProcessOneByte(BYTE byData)
{
	TRACE2("process char = %c byte = %d \n", byData, byData);

	switch(m_currCmd)
	{
	case AT_CMD:
		ParseAtCmd(byData);
		break;

	case MSG_FRAME_CMD:
		ParseMsgFrame(byData);
		break;

	case NOT_DETERMINED:

		if(m_atParser.ParseOneByte(byData) == FrameNotFinished)
			m_currCmd = AT_CMD;
		
		if(m_msgParser.ParseOneByte(byData) == FrameNotFinished)
			m_currCmd = MSG_FRAME_CMD;

		break;

	default:
		ASSERT(FALSE);
		break;
	}
}

BOOL CWSMInterface::InitMembers()
{
	m_currCmd = CWSMInterface::NOT_DETERMINED;
	
	m_hSendEvent = CreateEvent( NULL, TRUE, FALSE,  NULL ) ; 
	return m_hSendEvent != NULL;
}

void CWSMInterface::ProcessReceivedMsgFrame(const CWMsgPacket& msgFrame)
{

	BYTE dataBuff[MAX_BIN_MSG_BODY_LEN_PER_PACKET];
	int nSize;
	WORD wMsgNo;
	DWORD dwError;

#ifdef TEST_SMS 
	
	::SendMessage(m_hwndNotify, m_msgNotify, 1, (long)&msgFrame);

#endif

	CWMsgSent historyItem;
	historyItem.SetPhoneNumber(msgFrame.GetPhoneNumber());
	historyItem.SetFrameNo(msgFrame.GetFrameNo());

	switch(msgFrame.GetMessageType())
	{
	case CWMsgPacket::ANSWER_FRAME_MSG :
		nSize = msgFrame.GetMsgBinaryData(dataBuff);
		ASSERT(nSize <= 2);
		wMsgNo = *(WORD*)dataBuff;
		strcpy((char*)dataBuff, msgFrame.GetPhoneNumber());
		::SendMessage(m_hwndNotify, m_msgNotify, wMsgNo, (LPARAM)&dataBuff[0]);
		//刪除該條回復短信
		dwError = SendAtCmd("at+cmgd=1", 9);
		//if( 0 != dwError)	return dwError;
		break;
	
	case CWMsgPacket::SEND_FRAME_AGAIN_MSG :
		
		if( m_msgHistory.GetACopy(historyItem, TRUE) )
			SendOneFrame(historyItem);

		break;
	
	case CWMsgPacket:: SEND_PACKET_AGAIN_MSG:
		if( m_msgHistory.GetACopy(historyItem, TRUE) )
		{
			BYTE packetNo = msgFrame.GetPacketNo();
			int idxPacket = CWMsgPacket::PacketNo2PacketIndex(packetNo);
			SendOnePacket(historyItem, idxPacket);
		}
		break;
	
	case CWMsgPacket::DASHI_MSG :
	case CWMsgPacket::DIAODU_MSG_NEED_ANSWER :
	case CWMsgPacket::DIAODU_MSG_NEEDNOT_ANSWER :
		break;

	default:
		ASSERT(FALSE);
		break;

	}
}

DWORD CWSMInterface::SetSMSCenter(LPCTSTR lpcszCenterNumber)
{
	CString strCmd(AT_SET_SMS_CENTER);
	strCmd.Replace("%number%", lpcszCenterNumber);

	return SendAtCmd(strCmd,-1);
}

void CWSMInterface::ProcessReceivedAtCmdResult(const CWAtCmdResult& atCmdRes)
{
	SetEvent(m_hSendEvent);
}

void CWSMInterface::OnSysTimeChanged()
{
	m_msgHistory.ResetSaveTime();
}

void CWSMInterface::SetTimeOut(const MsgTimeOutType& timeOut)
{
	m_msgHistory.SetTimeOut(timeOut);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
jiyouzz国产精品久久| 欧美日韩成人一区| 色av一区二区| 欧美精品一区男女天堂| 一区二区三区在线看| 国产精品一区二区在线播放| 欧美在线观看一二区| 国产精品亲子乱子伦xxxx裸| 日韩电影免费在线| 99在线精品免费| 日韩三级高清在线| 洋洋成人永久网站入口| 国产精品综合二区| 日韩精品最新网址| 亚洲不卡一区二区三区| 99久久亚洲一区二区三区青草| 日韩精品一区二区三区在线播放| 亚洲制服丝袜一区| 99精品视频在线播放观看| 久久精品人人做人人综合| 日本成人中文字幕在线视频| 欧美性xxxxxxxx| 亚洲狠狠丁香婷婷综合久久久| 丁香婷婷综合激情五月色| 日韩欧美中文一区二区| 日韩精品欧美精品| 欧美精品777| 亚洲国产精品久久久久婷婷884 | 国产麻豆成人精品| 精品国产乱码久久久久久蜜臀| 男女男精品视频| 欧美巨大另类极品videosbest| 一区二区三区精品在线观看| 色综合视频在线观看| 综合在线观看色| 不卡的av在线播放| 亚洲欧美在线高清| 在线免费亚洲电影| 亚洲午夜免费视频| 欧美三级视频在线观看| 亚洲自拍偷拍麻豆| 欧美区在线观看| 免费在线成人网| 久久尤物电影视频在线观看| 国产精品自拍三区| 亚洲欧洲三级电影| 在线观看不卡一区| 日韩电影在线免费| 久久久五月婷婷| 成人av在线观| 亚洲精品视频一区二区| 欧美性做爰猛烈叫床潮| 奇米影视在线99精品| 久久久影视传媒| 99久久精品99国产精品| 午夜天堂影视香蕉久久| 日韩女优毛片在线| www.av精品| 亚洲午夜免费视频| 久久综合九色综合97_久久久| 国产麻豆午夜三级精品| 亚洲黄色免费电影| 日韩欧美黄色影院| 99精品黄色片免费大全| 性感美女久久精品| 久久久久久9999| 一本大道综合伊人精品热热| 亚洲一区二区不卡免费| 26uuu精品一区二区| 色综合久久综合中文综合网| 日韩和欧美的一区| 国产精品网站在线观看| 欧美日韩黄视频| 国产福利一区二区| 图片区小说区区亚洲影院| 国产拍欧美日韩视频二区| 欧美亚洲高清一区| 处破女av一区二区| 亚洲一区二区在线观看视频| 欧美精品一区二区精品网| 99re成人精品视频| 久久97超碰国产精品超碰| 亚洲精品成a人| 国产欧美日韩在线| 51午夜精品国产| 99久久精品久久久久久清纯| 狠狠狠色丁香婷婷综合久久五月| 一区二区三区四区不卡视频| 久久久久久综合| 4438x成人网最大色成网站| 色综合久久六月婷婷中文字幕| 久久成人精品无人区| 亚洲综合图片区| 国产精品久久毛片av大全日韩| 欧美肥妇bbw| 在线观看www91| 91在线视频网址| 成人性生交大片免费看中文| 经典三级在线一区| 日本大胆欧美人术艺术动态| 亚洲一级二级三级在线免费观看| 中文字幕在线播放不卡一区| 久久综合色8888| 日韩精品一区二区三区在线| 91精品久久久久久久99蜜桃| 欧美在线观看你懂的| 日本高清免费不卡视频| 成人精品gif动图一区| 国产精品中文字幕一区二区三区| 美女视频黄 久久| 美国欧美日韩国产在线播放| 视频一区二区中文字幕| 日精品一区二区| 午夜精品福利在线| 亚洲成人三级小说| 亚洲综合色婷婷| 一区二区三区免费观看| 亚洲一本大道在线| 石原莉奈在线亚洲二区| 五月婷婷综合网| 日韩电影免费在线看| 日本三级韩国三级欧美三级| 男女男精品视频| 国产一区二区导航在线播放| 久久电影国产免费久久电影| 韩日av一区二区| 国产成人午夜精品影院观看视频| 高清久久久久久| 99精品一区二区| 欧美性大战久久| 日韩一区二区三区免费看 | 色94色欧美sute亚洲13| 在线欧美小视频| 91精品视频网| 久久久一区二区三区| 国产精品美女www爽爽爽| 亚洲欧美日韩在线不卡| 亚洲gay无套男同| 青青草国产成人99久久| 国产精一品亚洲二区在线视频| 成人黄色软件下载| 欧美色窝79yyyycom| 日韩欧美一级二级三级| 国产精品免费人成网站| 亚洲高清在线视频| 精品一区二区三区久久久| 国产成人一级电影| 欧美综合亚洲图片综合区| 欧美一区二区大片| 国产精品人成在线观看免费 | 久久av资源网| 99久久综合国产精品| 欧美乱熟臀69xxxxxx| 欧美激情在线观看视频免费| 亚洲激情av在线| 国内精品写真在线观看| 欧洲av在线精品| 欧美大片拔萝卜| 亚洲另类色综合网站| 美女在线一区二区| 欧美主播一区二区三区| 久久青草欧美一区二区三区| 亚洲一区二区三区三| 黄色日韩网站视频| 91浏览器入口在线观看| 精品国产免费人成在线观看| 亚洲精品日韩一| 国产成人自拍在线| 日韩视频免费观看高清完整版在线观看 | 一区二区三区国产| 国产精品一区二区久激情瑜伽| 欧美亚洲国产一区在线观看网站 | 7878成人国产在线观看| 精品乱人伦小说| 国产又黄又大久久| 欧美色图一区二区三区| 国产农村妇女毛片精品久久麻豆| 亚洲福利视频三区| 91最新地址在线播放| 欧美日本不卡视频| 国产福利电影一区二区三区| 欧美午夜精品久久久久久孕妇| 久久精品夜色噜噜亚洲a∨| 亚洲成人免费视| 色综合色狠狠天天综合色| 中文字幕av在线一区二区三区| 成人小视频在线观看| 日韩一区二区在线观看视频 | 奇米精品一区二区三区在线观看一 | 青青草原综合久久大伊人精品优势 | 亚洲一区中文日韩| 一本一道综合狠狠老| 国产精品九色蝌蚪自拍| 成人久久视频在线观看| 日本一区二区视频在线观看| 精品在线视频一区| 亚洲精品一线二线三线| 久久精品999| 欧美xxxx老人做受| 国内精品久久久久影院一蜜桃|