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

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

?? gprs.cpp

?? WinMobile下的gprs測試代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// GPRS.cpp: implementation of the CGPRS class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GPRS.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

CGPRS::CGPRS()
{
	ResetGlobalVarial();
}

CGPRS::~CGPRS()
{
	if (pCeSerial->IsPortOpen() == TRUE)
	{
		pCeSerial->ClosePort();
	}

	if (pCeSerial)
		delete pCeSerial;
}


/*******************************************************************************************
函數名稱: ResetGlobalVarial
描    述: 復位一些全局變量為默認值
輸入參數: 無
輸出參數: 無
返    回: 無
********************************************************************************************/
void CGPRS::ResetGlobalVarial(void)
{
	bSendATCmd = FALSE;					/* 當前不處于發送命令狀態 */	
	m_RespCnt = 0;							
	m_strRespBuf = _T("");
	ResetEvent(m_ATCmdRespEvent);		/* 復位 GPRS 響應事件*/
}



/*******************************************************************************************
函數名稱: GPRS_Init
描    述: GPRS 模塊初始化函數
輸入參數: LPCTSTR Port   : 串口號, 如 "COM1:"
		  int BaudRate   : 串口波特率, 如 115200
		  DWORD UserParam: 用戶傳遞到該類中的參數
輸出參數: 無
返    回: TRUE: 成功   FALSE: 失敗
********************************************************************************************/
BOOL CGPRS:: GPRS_Init(LPCTSTR Port, int BaudRate, DWORD UserParam)
{	
	BOOL ret;
	DWORD Trycount = 2;

	do{																/* 嘗試初始化 GPRS, 最多嘗試兩次 */
		Trycount--;

		pCeSerial = new CCeSerial;
		ret = pCeSerial->OpenPort(Port, BaudRate, 8, ONESTOPBIT, NOPARITY, TRUE, TRUE, (DWORD)this);
		if (ret == FALSE)											/* 打開串口, 數據位為8,停止位為1,無校驗位 */
		{
			delete pCeSerial;
			return FALSE;
		}

		pCeSerial->OnCommRecv = OnCommRecv;							/* 串口接收成功回調函數 */
		m_UserParam = UserParam;									/* 保存用戶傳進來的參數 */
		m_ATCmdRespEvent = CreateEvent(NULL, TRUE, FALSE, NULL);	/* 創建 GPRS 響應事件 */

		GPRS_SendATCmd(_T("AT"));									/* 嘗試模塊是否處于激活狀態 */
		GPRS_WaitResponseOK();
		GPRS_SendATCmd(_T("AT"));									/* 嘗試模塊是否處于激活狀態 */
		GPRS_WaitResponseOK();

		GPRS_SendATCmd(_T("AT$NOSLEEP=1"));							/* 禁止模塊進入睡眠模式 */
		ret = GPRS_WaitResponseOK();
		if (ret == FALSE)
		{
			delete pCeSerial;
			if (Trycount == 0) return FALSE;
		}
		else
			Trycount = 0;

	}while(Trycount > 0);

	GPRS_SendATCmd(_T("AT+CREG=1"));				
	ret = GPRS_WaitResponseOK();
	if (ret == FALSE)
		return FALSE;

	GPRS_SendATCmd(_T("AT+CLIP=1"));				/* 設置來電顯示 */	
	ret = GPRS_WaitResponseOK();
	if (ret == FALSE)
		return FALSE;

	GPRS_SendATCmd(_T("AT+CMGF=1"));				/* 設置為文本模式 */
	ret = GPRS_WaitResponseOK();
	if (ret == FALSE)
		return FALSE;
	
	GPRS_SendATCmd(_T("AT+CSCS=\"GSM\""));			/* 設置字符集 */
	ret = GPRS_WaitResponseOK();
	if (ret == FALSE)
		return FALSE;

	//GPRS_SendATCmd(_T("AT+CSMP=17,168,0,0"));	    /* 設置文本模式參數 */
	//ret = GPRS_WaitResponseOK();
	//if (ret == FALSE)
	//	return FALSE;

	return TRUE;
}


/*******************************************************************************************
函數名稱: OnCommRecv
描    述: 串口接收成功回調函數, 當串口正確接收到數據時, 該函數將被調用
輸入參數: CString strCmd: 命令字
輸出參數: DWORD UserParam : 用戶傳遞的參數, 通常為CGPRS類的一個對象的指針
          BYTE *buf		  : 串口接收數據緩沖
		  DWORD buflen	  : 串口接收到的數據長度
返    回: 無
********************************************************************************************/
void CALLBACK CGPRS::OnCommRecv(DWORD UserParam, BYTE *buf, DWORD buflen)
{
	CGPRS *pGPRS = (CGPRS *)UserParam;	
	
	CString strTmp = _T("");
	LPTSTR pStr = strTmp.GetBuffer(buflen);	
	MultiByteToWideChar(CP_ACP, 0, (char *)buf, buflen, pStr, buflen); /* 將接收到的數據轉換為 Unicode 編碼 */
	strTmp.ReleaseBuffer();

	if (pGPRS->bSendATCmd == TRUE)
	{																	/* 之前用戶發送了 AT 指令 */
		pGPRS->m_strRespBuf.Insert(pGPRS->m_RespCnt, strTmp);			/* 保存數據 */	
		SetEvent(pGPRS->m_ATCmdRespEvent);
		return;
	}
	
	if ((strTmp.Find(_T("RING")) >= 0) || 
		(strTmp.Find(_T("ring")) >= 0))
	{													/* 有電話打進來 */			
		CString strCallNum = pGPRS->GPRS_GetTheCallNum(strTmp);
		pGPRS->OnGPRSRecv(pGPRS->m_UserParam, GPRS_STATUS_RECEIVE_CALL,strCallNum);
	}
	
	if ((strTmp.Find(_T("NO CARRIER")) >= 0) || 
		(strTmp.Find(_T("no carrier")) >= 0))				
	{													/* 來電后, 對方掛機 */
		pGPRS->OnGPRSRecv(pGPRS->m_UserParam, GPRS_STATUS_OTHER_SIDE_HANDUP, "");
	}	

	pGPRS->bSendATCmd = FALSE;							/* 復位相關全局變量 */
	pGPRS->m_RespCnt = 0;							
	pGPRS->m_strRespBuf = _T("");
	ResetEvent(pGPRS->m_ATCmdRespEvent);
}


/*******************************************************************************************
函數名稱: GPRS_GetTheCallNum
描    述: 取得來電的電話號碼
輸入參數: CString str:  來電時, GPRS 響應字符
輸出參數: 無
返    回: 來電電話號碼
********************************************************************************************/
CString CGPRS::GPRS_GetTheCallNum(CString str)
{
	int pos1 = str.Find(_T("+CLIP: \""), 0);
	if (pos1 < 0)
		return "";
	else
		pos1 = pos1 + wcslen(_T("+CLIP: \""));

	int pos2 = str.Find(_T("\""), pos1);
	if (pos2 < 0)
		return "";

	CString strNum;
	strNum = str.Mid(pos1, pos2 - pos1);				  /* 取得電話號碼 */

	return strNum;
}


/*******************************************************************************************
函數名稱: GPRS_SendATCmd
描    述: 發送 AT 命令
輸入參數: CString strCmd: 命令字
輸出參數: 無
返    回: TRUE: 成功   FALSE: 失敗
********************************************************************************************/
BOOL CGPRS::GPRS_SendATCmd(CString strCmd)
{
	int len = strCmd.GetLength();
	BYTE *psendbuf = new BYTE[len + 2];
	
	m_RespCnt = 0;
	bSendATCmd = TRUE;								 /* 進入發送命令狀態 */

	for(int i = 0; i < len;i++)
		psendbuf[i] = (char)strCmd.GetAt(i);		 /* 轉換為單字節字符 */

	psendbuf[len] = '\r';							 /* 加入結束符 */
	psendbuf[len + 1] = '\n';
	pCeSerial->Senddata(psendbuf, len + 2);			 /* 從串口發送數據 */

	delete[] psendbuf;
	return TRUE;
}


/*******************************************************************************************
函數名稱: GPRS_WaitResponseOK
描    述: 等待 AT 命令響應 OK
輸入參數: 無
輸出參數: 無
返    回: 無
********************************************************************************************/
BOOL CGPRS::GPRS_WaitResponseOK(void)
{
	DWORD ret;
	BOOL bOK = TRUE;

	while(1)
	{	// 等待 0.5 秒, 如果得不到回復, 即為錯誤
		ret = WaitForSingleObject(m_ATCmdRespEvent, 500);
		if (ret == WAIT_OBJECT_0)
		{
			if ((m_strRespBuf.Find(_T("ERROR\r\n"), 0) >= 0) ||
				(m_strRespBuf.Find(_T("error\r\n"), 0) >= 0))
			{													/* 響應中有"ERROR" */
				bOK = FALSE;
				break;
			}
			if ((m_strRespBuf.Find(_T("OK\r\n"), 0) >= 0) ||
				(m_strRespBuf.Find(_T("ok\r\n"), 0) >= 0))
			{													/* 響應中有"OK" */
				bOK = TRUE;
				break;
			}

			ResetEvent(m_ATCmdRespEvent);
		}
		else
		{
			bOK = FALSE;										/* 響應超時 */
			break;
		}
	}

	ResetGlobalVarial();								/* 復位用到的全局變量 */
	if (FALSE == bOK)
		return FALSE;

	return TRUE;
}


/*******************************************************************************************
函數名稱: GPRS_WriteMsg
描    述: 將短信內容寫入 GPRS 模塊
輸入參數: CString Msg:  短信內容
輸出參數: 無
返    回: 無
********************************************************************************************/
BOOL CGPRS::GPRS_WriteMsg(CString Msg)
{
	int len = Msg.GetLength();
	BYTE *psendbuf = new BYTE[len + 3];

	for(int i = 0; i < len;i++)
		psendbuf[i] = (char)Msg.GetAt(i);			/* 轉換為單字節字符 */

	psendbuf[len] = '\r';						    /* 加入結束符 */
	psendbuf[len + 1] = '\n';
	psendbuf[len + 2] = 0x1A;
	pCeSerial->Senddata(psendbuf, len + 3);			/* 從串口發送數據 */

	delete[] psendbuf;
	return TRUE;
}


/*******************************************************************************************
函數名稱: GPRS_DialUp
描    述: 撥打電話(由本機打出)
輸入參數: CString strTelNum: 電話號碼
輸出參數: 無
返    回: TRUE: 成功   FALSE: 失敗
********************************************************************************************/
BOOL CGPRS::GPRS_DialUp(CString strTelNum)
{
	CString strDialup = _T("ATD");
	strDialup += strTelNum + ";";					/* 以分號作為結束 */

	GPRS_SendATCmd(strDialup);						/* 發送撥號命令 */

	return (GPRS_WaitResponseOK());
}


/*******************************************************************************************
函數名稱: GPRS_DialDown
描    述: 掛機(由本機打出的掛機)
輸入參數: 無
輸出參數: 無
返    回: TRUE: 成功   FALSE: 失敗
********************************************************************************************/
BOOL CGPRS::GPRS_DialDown(void)
{
	GPRS_SendATCmd("ATH");

	return (GPRS_WaitResponseOK());
}


/*******************************************************************************************
函數名稱: GPRS_TakeTheCall
描    述: 接聽電話(有電話打進來, 接聽該電話)
輸入參數: 無
輸出參數: 無

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女看a上一区| 欧美亚洲自拍偷拍| 色噜噜狠狠成人网p站| 欧美精品免费视频| 亚洲色图视频网| 国产一区二区三区视频在线播放 | 国产91色综合久久免费分享| www.成人在线| 26uuu国产电影一区二区| 亚洲午夜免费电影| 成人av免费在线观看| 日韩一区二区免费视频| 亚洲久本草在线中文字幕| 九九在线精品视频| 欧美高清激情brazzers| 亚洲人成网站色在线观看| 国产一区二区精品久久| 欧美一区二区二区| 亚洲精品欧美综合四区| av电影在线观看一区| 国产亚洲精品福利| 黑人巨大精品欧美一区| 日韩一卡二卡三卡| 日韩电影在线观看电影| 欧美色倩网站大全免费| 亚洲精品五月天| 99久久亚洲一区二区三区青草| 久久亚洲私人国产精品va媚药| 美女诱惑一区二区| 欧美一二三四区在线| 日韩影视精彩在线| 欧美肥妇bbw| 日韩精品一级二级| 欧美精品乱码久久久久久 | av中文字幕亚洲| 久久久精品国产免大香伊| 久久99精品久久久久久国产越南 | 在线视频你懂得一区二区三区| 亚洲私人影院在线观看| av男人天堂一区| 国产精品国产三级国产aⅴ原创 | 一区二区三区不卡视频| 色综合色综合色综合色综合色综合| 国产精品国产三级国产aⅴ中文| 99在线热播精品免费| 最好看的中文字幕久久| 色视频成人在线观看免| 亚洲影视资源网| 91精品国产综合久久久久久 | 亚洲午夜私人影院| 欧美精品日韩精品| 国产伦精品一区二区三区视频青涩| 久久久精品日韩欧美| 91视视频在线直接观看在线看网页在线看 | eeuss鲁片一区二区三区| 国产精品夫妻自拍| 91高清视频免费看| 免费视频一区二区| 国产精品色眯眯| 欧美色爱综合网| 激情综合一区二区三区| 国产精品欧美一区喷水| 欧美婷婷六月丁香综合色| 奇米色777欧美一区二区| 久久综合色婷婷| 91亚洲精品乱码久久久久久蜜桃 | 国产91露脸合集magnet| 亚洲图片你懂的| 欧美一区二区三区四区高清| 国产69精品久久久久毛片| 一区二区久久久久| 亚洲精品一区二区三区精华液 | 午夜免费久久看| 精品国产免费视频| 色婷婷综合五月| 国产一区久久久| 亚洲午夜久久久| 亚洲国产成人一区二区三区| 欧美猛男男办公室激情| 国产成人精品免费网站| 日韩精品久久理论片| 国产精品卡一卡二卡三| 日韩欧美久久一区| 日本韩国精品在线| 国产精品亚洲第一| 日本欧美在线观看| 一区二区三区在线高清| 久久久久久久久岛国免费| 欧美视频在线观看一区二区| 大陆成人av片| 精品一区二区日韩| 午夜欧美大尺度福利影院在线看| 中文字幕一区二区三区不卡在线| 91精品婷婷国产综合久久竹菊| 色综合咪咪久久| 国产 欧美在线| 精品一区二区三区不卡| 亚洲成人免费在线| 自拍偷拍国产精品| 中文成人av在线| 久久伊人中文字幕| 欧美一级免费大片| 欧美日韩国产高清一区二区三区| a美女胸又www黄视频久久| 国产精品一区二区在线看| 蜜臀久久99精品久久久久宅男| 亚洲黄色在线视频| 亚洲日穴在线视频| 亚洲情趣在线观看| 亚洲人成7777| 亚洲精品久久嫩草网站秘色| 国产精品丝袜在线| 中文字幕av一区二区三区高 | 日韩欧美一级二级| 欧美群妇大交群的观看方式| 一本久道久久综合中文字幕| 99国产精品久久久久久久久久久| 国产成人亚洲综合色影视| 国产一区视频导航| 国产盗摄一区二区| 大美女一区二区三区| 成人高清视频在线观看| 成人激情黄色小说| av午夜精品一区二区三区| www.性欧美| 欧洲中文字幕精品| 欧美高清视频一二三区| 日韩一区二区电影| 国产欧美精品一区aⅴ影院| 国产日韩av一区| 亚洲精品国产无套在线观| 亚洲综合色网站| 日本不卡中文字幕| 国产老妇另类xxxxx| 国产成人av自拍| 91视频在线观看| 91精品国产综合久久精品app| 日韩免费看的电影| 国产日韩精品一区二区三区| 中文字幕在线一区二区三区| 亚洲精品国产成人久久av盗摄 | 国产精品一区二区久久不卡| 国产成人在线视频网站| 一本久道久久综合中文字幕| 337p亚洲精品色噜噜噜| 久久亚洲精品国产精品紫薇| 国产精品久久久久久亚洲伦 | 91精品国产麻豆| 久久一区二区视频| 亚洲美女一区二区三区| 亚洲影院理伦片| 国产成人在线免费观看| 在线观看视频一区二区欧美日韩| 91精品国模一区二区三区| 国产精品欧美经典| 日韩国产精品久久| 北条麻妃一区二区三区| 91精品国产一区二区三区香蕉| 国产女同性恋一区二区| 亚洲国产日产av| 丁香五精品蜜臀久久久久99网站| 欧美日韩激情一区| 国产精品视频免费看| 美女视频黄 久久| 91美女片黄在线观看91美女| 91精品在线麻豆| 亚洲伦理在线免费看| 国产久卡久卡久卡久卡视频精品| 欧美性生交片4| 欧美国产成人精品| 蜜桃久久久久久| 欧美亚洲国产一区二区三区va| 久久欧美一区二区| 亚洲bt欧美bt精品777| 不卡一区二区在线| 欧美精品一区二区蜜臀亚洲| 亚洲国产视频一区| 91麻豆精品在线观看| 精品91自产拍在线观看一区| 图片区日韩欧美亚洲| 一本一道综合狠狠老| 国产午夜精品久久| 国内精品视频666| 日韩欧美一级精品久久| 天堂蜜桃91精品| 欧美色成人综合| 亚洲成在线观看| 欧美在线影院一区二区| 自拍偷拍亚洲激情| av综合在线播放| 亚洲精品视频观看| 色婷婷av一区| 亚洲图片激情小说| 波多野结衣在线一区| 国产欧美综合在线观看第十页| 另类欧美日韩国产在线| 欧美高清视频不卡网| 亚洲sss视频在线视频| 欧美无人高清视频在线观看| 亚洲一区免费观看|