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

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

?? gprs.cpp

?? 周立功WinCE光盤資料
?? 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一区二区三区免费野_久草精品视频
精品一区二区三区在线播放| 日韩一区二区三区精品视频| 日韩欧美综合在线| 亚洲欧洲精品天堂一级| 在线免费观看日本欧美| 欧美成人一区二区| 亚洲午夜精品久久久久久久久| 韩国av一区二区三区四区| 欧美图区在线视频| 亚洲欧洲国产日韩| 国产成人在线观看免费网站| 国产成人日日夜夜| 日韩免费在线观看| 日精品一区二区| 欧美无砖专区一中文字| 一区二区三区 在线观看视频| 国产高清在线观看免费不卡| 日韩一区二区三区在线观看| 手机精品视频在线观看| 欧美色精品在线视频| 亚洲女同一区二区| 97久久超碰国产精品电影| 久久久一区二区三区| 精一区二区三区| 日韩精品一区二区三区四区| 轻轻草成人在线| 欧美一级艳片视频免费观看| 喷水一区二区三区| 日韩一区二区高清| 免费欧美在线视频| 亚洲精品在线观| 国产精品自在欧美一区| 久久精品网站免费观看| 国产成人免费网站| 亚洲国产成人一区二区三区| 成人18精品视频| 亚洲欧美激情插| 欧美性做爰猛烈叫床潮| 婷婷成人综合网| 日韩午夜av一区| 国产精品综合一区二区| 中文字幕国产精品一区二区| 91丨porny丨中文| 亚洲宅男天堂在线观看无病毒| 在线观看国产91| 丝袜国产日韩另类美女| 欧美r级在线观看| 成人免费黄色大片| 亚洲黄色小视频| 欧美日韩一区国产| 精品一区二区久久久| 久久久www免费人成精品| 成人黄色小视频| 亚洲激情自拍偷拍| 日韩欧美在线123| 成人午夜免费电影| 亚洲一二三四在线| 日韩欧美一级二级三级久久久| 国产精品夜夜嗨| 一区二区三区成人| 欧美成人在线直播| caoporn国产一区二区| 天天影视色香欲综合网老头| 久久久高清一区二区三区| 色婷婷综合久久| 美女高潮久久久| 最新日韩av在线| 日韩一区和二区| 97se亚洲国产综合在线| 免费看日韩精品| 亚洲色图在线播放| 精品久久久久香蕉网| 色中色一区二区| 韩国欧美一区二区| 天堂一区二区在线免费观看| 日本一区二区成人| 日韩一区国产二区欧美三区| 97久久精品人人爽人人爽蜜臀| 另类欧美日韩国产在线| 亚洲人精品一区| 国产亚洲精品bt天堂精选| 欧美日韩综合色| youjizz国产精品| 老司机午夜精品99久久| 亚洲自拍偷拍网站| 国产欧美中文在线| 日韩免费性生活视频播放| 在线观看成人小视频| 成年人国产精品| 国产一区视频在线看| 三级精品在线观看| 尤物视频一区二区| 自拍av一区二区三区| xf在线a精品一区二区视频网站| 欧美日韩国产美女| 在线中文字幕一区二区| 日本韩国一区二区| 国产一区二区在线影院| 蜜桃一区二区三区在线| 亚洲国产精品久久不卡毛片| 亚洲欧美日韩综合aⅴ视频| 久久久99免费| 久久久蜜桃精品| 欧美mv和日韩mv国产网站| 欧美喷潮久久久xxxxx| 欧美视频中文一区二区三区在线观看| 94-欧美-setu| 91麻豆国产香蕉久久精品| 成人高清视频在线观看| 国产成人精品免费在线| 激情图片小说一区| 国产做a爰片久久毛片| 久久成人免费电影| 国产一区二区看久久| 激情综合色播五月| 精品一区二区三区在线视频| 六月婷婷色综合| 国产一区在线精品| 国产成人aaaa| 99久久免费精品高清特色大片| 成人av网在线| 色婷婷精品久久二区二区蜜臀av| 一本大道av伊人久久综合| 欧美亚洲综合久久| 日韩一区二区三区四区| 久久亚洲影视婷婷| 日本一区二区视频在线| 亚洲男同性恋视频| 亚洲电影一级片| 麻豆国产91在线播放| 国产伦理精品不卡| 成人美女视频在线看| 色丁香久综合在线久综合在线观看| 91蜜桃传媒精品久久久一区二区| 91国产成人在线| 欧美日韩不卡一区| 精品福利一二区| 国产精品国产三级国产普通话99| 亚洲六月丁香色婷婷综合久久 | 亚洲成人免费在线观看| 五月天婷婷综合| 国产精品亚洲一区二区三区妖精| www.欧美.com| 这里只有精品电影| 国产精品人人做人人爽人人添| 亚洲一区二区三区在线播放| 美国欧美日韩国产在线播放| 国产69精品久久久久毛片 | 日韩片之四级片| 国产精品久久看| 日韩中文字幕不卡| 成人黄色av网站在线| 欧美精品色一区二区三区| 欧美国产视频在线| 日本麻豆一区二区三区视频| 成人免费观看视频| 欧美另类videos死尸| 欧美精彩视频一区二区三区| 午夜天堂影视香蕉久久| 丁香婷婷深情五月亚洲| 欧美丰满美乳xxx高潮www| 中文幕一区二区三区久久蜜桃| 日日摸夜夜添夜夜添精品视频| 粉嫩绯色av一区二区在线观看 | 91成人看片片| 久久夜色精品国产欧美乱极品| 亚洲欧美激情插| 国产成人亚洲综合a∨婷婷| 欧美日韩国产美| 亚洲品质自拍视频网站| 国产精品一区二区久激情瑜伽| 欧美婷婷六月丁香综合色| 亚洲欧洲国产日韩| 国产一区二区三区免费在线观看| 欧美日韩激情在线| 亚洲免费三区一区二区| 国产一区二区三区电影在线观看| 欧美日韩五月天| 樱桃视频在线观看一区| av亚洲精华国产精华精| 久久夜色精品国产噜噜av| 麻豆91在线看| 88在线观看91蜜桃国自产| 亚洲精品中文在线观看| 成人国产精品免费观看动漫 | 亚洲精选视频免费看| 成人免费黄色在线| 国产日韩欧美一区二区三区乱码 | 日本中文字幕一区| 欧美丰满一区二区免费视频| 午夜免费久久看| 欧美日韩综合在线| 午夜视频久久久久久| 欧美日韩一区二区三区不卡| 夜夜亚洲天天久久| 在线免费观看一区| 丝袜亚洲另类欧美| 日韩午夜av一区| 精品在线播放午夜| 久久久精品影视|