亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本韩国精品一区二区在线观看| 精品一区二区免费| 欧美草草影院在线视频| 国产成人免费高清| 亚洲国产欧美在线| 亚洲欧美中日韩| 欧美精品一级二级三级| 91在线国产观看| 日韩精品1区2区3区| 亚洲人成网站在线| 欧美国产日韩在线观看| 欧美一区二区三区喷汁尤物| 91丨porny丨国产| 国产不卡视频一区| 日韩电影在线免费观看| 一区二区欧美在线观看| 亚洲国产精华液网站w| 欧美不卡在线视频| 欧美在线观看一二区| 国产一区二区三区四区在线观看| 亚洲一区二区视频在线| 亚洲天堂av一区| 国产欧美日韩精品a在线观看| 91.麻豆视频| 欧美伊人久久久久久午夜久久久久| 成人毛片视频在线观看| 国产尤物一区二区| 精久久久久久久久久久| 日韩va欧美va亚洲va久久| 亚洲成人综合视频| 亚洲影视在线观看| 亚洲精品国久久99热| 国产精品久久久久久久久久免费看 | 国产一本一道久久香蕉| 免费成人在线视频观看| 日韩极品在线观看| 午夜亚洲福利老司机| 亚洲曰韩产成在线| 亚洲va欧美va国产va天堂影院| 伊人婷婷欧美激情| 亚洲精品美腿丝袜| 亚洲精选视频免费看| 亚洲欧美一区二区三区极速播放 | 亚洲不卡av一区二区三区| 一区二区成人在线观看| 一区二区三区四区激情| 一区二区在线观看av| 亚洲一区二区三区自拍| 一区二区三区欧美激情| 亚洲一卡二卡三卡四卡无卡久久| 一区二区在线观看免费视频播放| 亚洲一区二区三区中文字幕| 亚洲综合成人网| 天天综合网天天综合色| 蜜桃在线一区二区三区| 激情综合色丁香一区二区| 国产在线看一区| 国产乱码精品一区二区三| 丁香婷婷综合色啪| 91老师片黄在线观看| 在线视频欧美精品| 3d成人动漫网站| 精品成人a区在线观看| 国产日韩精品视频一区| 亚洲国产岛国毛片在线| 午夜激情一区二区三区| 亚洲激情综合网| 亚洲sss视频在线视频| 成人精品亚洲人成在线| 亚洲国产毛片aaaaa无费看| 成人一区二区视频| 色综合久久99| 91国偷自产一区二区开放时间 | 久久综合色一综合色88| 精品久久一二三区| 国产精品久久久久久久久免费丝袜| 亚洲色大成网站www久久九九| 亚洲精品写真福利| 蜜臀av性久久久久蜜臀av麻豆| 国产suv一区二区三区88区| 色老综合老女人久久久| 日韩丝袜情趣美女图片| 国产精品欧美久久久久一区二区| 一区二区三区丝袜| 美国十次综合导航| av不卡在线播放| 91精品免费在线观看| 欧美激情中文字幕| 五月婷婷色综合| 福利一区福利二区| 欧美日韩日日摸| 国产性色一区二区| 午夜精品aaa| 不卡影院免费观看| 日韩一区二区三区三四区视频在线观看| 国产欧美日韩在线视频| 亚洲大尺度视频在线观看| 国产不卡在线视频| 日韩亚洲欧美在线观看| 亚洲美女免费在线| 国产黄人亚洲片| 717成人午夜免费福利电影| 国产精品国产三级国产普通话99| 日韩av一区二区三区| 成人ar影院免费观看视频| 91精品免费在线| 一级日本不卡的影视| 国产精品一区二区免费不卡| 欧美三级视频在线观看| 国产精品久久久久久久久晋中| 免费在线看成人av| 欧美影院精品一区| 亚洲三级久久久| 成人综合在线观看| 亚洲精品在线免费观看视频| 日韩精品亚洲一区| 欧洲av一区二区嗯嗯嗯啊| 中文av一区二区| 国产成人精品免费网站| www国产亚洲精品久久麻豆| 日韩在线观看一区二区| 91久久免费观看| 亚洲免费观看视频| 91无套直看片红桃| 国产精品免费aⅴ片在线观看| 高清在线观看日韩| 久久精品视频一区二区| 精品亚洲成av人在线观看| 欧美一区二区三区影视| 五月婷婷久久丁香| 精品视频1区2区3区| 亚洲一区在线观看网站| 91传媒视频在线播放| 亚洲欧美日韩综合aⅴ视频| 91影院在线免费观看| 国产精品电影一区二区三区| 成人国产视频在线观看| 国产精品欧美久久久久一区二区| 成人综合婷婷国产精品久久 | 久久精品99国产精品| 94-欧美-setu| 国产亚洲美州欧州综合国| 日韩欧美一级二级| xnxx国产精品| 成人动漫一区二区在线| 亚洲天堂精品在线观看| 国产精品自拍一区| 亚洲手机成人高清视频| 色999日韩国产欧美一区二区| 亚洲欧美日韩成人高清在线一区| 国产高清亚洲一区| 中文字幕一区二区三中文字幕| 一本色道久久综合亚洲aⅴ蜜桃| 欧美大片日本大片免费观看| 免费日本视频一区| 欧美精品第1页| 久久国产综合精品| 欧美日韩五月天| 蜜桃视频一区二区三区| 久久男人中文字幕资源站| 国产成人在线视频免费播放| 亚洲欧洲精品天堂一级 | 日本道色综合久久| 精品国产a毛片| 成人精品视频一区| 一区二区欧美国产| 欧美精品自拍偷拍| 国内精品久久久久影院色| 久久久亚洲午夜电影| 91色.com| 性做久久久久久久免费看| 精品少妇一区二区三区在线播放 | 欧美成人vr18sexvr| 精品无人码麻豆乱码1区2区| 亚洲国产精品二十页| 色婷婷久久久久swag精品 | 免费xxxx性欧美18vr| 国产区在线观看成人精品| www.亚洲色图.com| 日韩电影在线一区| 国产亚洲短视频| 在线精品视频一区二区三四| 精品一区二区三区在线视频| 国产日韩欧美电影| 在线电影院国产精品| 亚洲网友自拍偷拍| 欧美激情在线观看视频免费| 欧美日韩一区二区三区在线看| 日本va欧美va瓶| 亚洲欧美日韩人成在线播放| 欧美日韩亚洲不卡| 成人一区二区视频| 一区二区三区精品在线观看| 91丨九色丨国产丨porny| 欧美精品免费视频| 亚洲一区中文在线| 色悠悠亚洲一区二区| 色婷婷av一区二区三区gif| 欧美三级三级三级爽爽爽| 欧美一二三在线|