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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ysatmodem.cpp

?? 使用VC++編寫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ATModem.cpp: implementation of the CYsATModem class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "YsATModem.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
UINT CYsATModem::WaitThread(LPVOID lpvoid)
{
	CYsATModem* pThis=(CYsATModem*)lpvoid;
	pThis->DetectConnect();
	return 1;
}

//檢測modem是否就續(xù)
UINT CYsATModem::DetectModemThread(LPVOID pParam)
{
	TRACE(_T("in Detect Thread"));
	CYsATModem* pThis=(CYsATModem*)pParam;
	DWORD dwEvent;
	DWORD dwTime;
	int iRing=0;

	pThis->m_bCD=0;

	while(1==pThis->WaitEvent(&dwEvent,INFINITE))
	{
		if(dwEvent&EV_DSR)
		{
			pThis->SetEvent(0);
			//糟啦,modem壞啦!!!
			TRACE(_T("My God!!! the modem broken!!!\n"));
			pThis->Purge(PURGE_ALL);
			pThis->ChangeMode(MODE_UNMODEM);
			TRACE(_T("Quit Detect Thread"));
			return 1;
		}
		else if(dwEvent&EV_RING)//win95不支持這種通知
		{
			//這里有個問題,如果對方撥號一聲后,掛斷,計數(shù)器沒清零,第二次就會出問題
			if(iRing>0)
			{
				if(GetTickCount()-dwTime>10000) 
					iRing=0;//如果兩次響鈴大于10秒鐘,重設(shè)為0
			}
			dwTime=GetTickCount();
			iRing++;
			CString s;
			s.Format("ring count=%d %d Mode=%d\n",iRing,pThis->m_nRingCount,pThis->m_nMode);
			TRACE(s);
			if(pThis->m_nMode==MODE_COMMAND)
			{
				if(iRing>=pThis->m_nRingCount)
				{
					iRing=0;
#ifdef USER_ANSWER
					Sleep(500);
					pThis->SendAT(CMD_ATA);
#endif				
					AfxBeginThread(WaitThread,pThis);
				}
			}
		}
		else if(dwEvent&EV_RLSD)
		{
			CString s;
			s.Format("\nCD燈改變 @@@  %d -%d\n",pThis->m_nMode,pThis->m_bCD);
			TRACE(s);
			if(pThis->m_nMode==MODE_DATA)
			{
				pThis->m_bCD=FALSE;
				TRACE("Modem Disconnect!!!!\n");

				ResetEvent(pThis->m_hConnected);
				pThis->ChangeMode(MODE_COMMAND);

				pThis->HangUp();
				if(pThis->m_Thread)
				{
					if(WAIT_OBJECT_0!=WaitForSingleObject(pThis->m_Thread->m_hThread,10000))
					{
						TerminateThread(pThis->m_Thread->m_hThread,-11);
					}
					delete pThis->m_Thread;
					pThis->m_Thread=NULL;
				}
			}
			else if(pThis->m_nMode==MODE_CONNECTING)
			{
				pThis->m_bCD=TRUE;

				pThis->StopRead();

				pThis->Purge(PURGE_ALL);
				pThis->m_Thread = AfxBeginThread(CYsATModem::ReadCommThread,(LPVOID)pThis);
				if(!pThis->m_Thread)
				{
					pThis->ChangeMode(MODE_COMMAND);
					pThis->SetLastError(_TEXT("Start read comm thread error"));
					return FALSE;
				}
				pThis->m_Thread->m_bAutoDelete=FALSE;
				::SetEvent(pThis->m_hConnected);
				pThis->ChangeMode(MODE_DATA);
				TRACE("Modem connect!!!!\n");
				//無處理
			}
			else pThis->m_bCD=FALSE;//如果正在撥號的時候斷線,可能會出現(xiàn)CD變化?
		}
	}
	TRACE(_T("Quit Detect Thread"));
	return 1;
}

/*************************2001.10.30 ycat *********************************************
FUNCTION: UINT CYsATModem::ReadCommThread(LPVOID pParam)

PURPOSE: 線程函數(shù),把串口讀入緩沖區(qū)的字符,寫到自己維護(hù)的緩沖區(qū)中,并判斷斷線

PARAMETERS:
		pParam:指向CYsATModem類

RETURN VALUE:

COMMENTS: 斷線的處理,也許還要改進(jìn)
**********************************************************************/
UINT CYsATModem::ReadCommThread(LPVOID pParam)
{
	//judge if no carrier
	char strJudge[]=ECHO_NOCARRIER;
	//current judge string position
	int iJudge=0;
	int iJudgeSize=strlen(strJudge);

	TRACE("Start Thread\n");
	CYsATModem* pThis=(CYsATModem*)pParam;

	DWORD dwInterTimeOut=INFINITE;//讀每個字符之間的等待時間

	int i;
	BYTE chRead;
	DWORD dwHaveRead;
	while(1)
	{
		do 
		{
			//read one char
			i=pThis->ReadComm(&chRead,1,&dwHaveRead,dwInterTimeOut);
			if (1==i)
			{
				TRACE(_TEXT("##:%02x\n"),chRead,chRead);
				pThis->m_pQueue->Put(&chRead);
			}
			else if(i==-3)
			{
				TRACE(_TEXT("stop event set!~\n"));
				//user hangup
				i=TRUE;
				goto Exit;
			}
			else if(i==-1) //非超時
			{
				TRACE(_TEXT("in Function Read Error code%d\n"),i);
				i=FALSE;
				goto Exit;
			}
		}
		while(dwHaveRead);
	}//while
Exit:
	TRACE(_TEXT("End Read comm Thread\n"));

	if(!i) TRACE(_TEXT("there are some error occur in thread\n"));
	return i;
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CYsATModem::CYsATModem()
{
	m_nRingCount=2;
	m_bInit=FALSE;
	m_bTestMode=FALSE;
	ChangeMode(MODE_UNINITIALIZE);

	m_pQueue=new CYsQueue<BYTE>(QUEUE_SIZE);

	m_Thread=NULL;
	//順序不能變
	pstrCmdString[0]=ECHO_OK;
	pstrCmdString[1]=ECHO_CONNECT;
	pstrCmdString[2]=ECHO_RING;
	pstrCmdString[3]=ECHO_NOCARRIER;
	pstrCmdString[4]=ECHO_ERROR;
	pstrCmdString[5]=ECHO_CONNECT1200;
	pstrCmdString[6]=ECHO_NODIALTONE;
	pstrCmdString[7]=ECHO_BUSY;
	pstrCmdString[8]=ECHO_NOANSWER;
	m_hConnected=CreateEvent(NULL,TRUE,FALSE,NULL);
	ResetError();
}


CYsATModem::~CYsATModem()
{
#ifndef USER_ANSWER
	if(m_nMode==MODE_COMMAND)
		SendAT(CMD_ATS0);
#endif
	//because m_Thread->m_bAutoDelete set FALSE
	if(m_pQueue)delete m_pQueue;
}

/*************************2001.10.30 ycat *********************************************
/*************************2002.04.15 ycat *********************************************

FUNCTION: BOOL CYsATModem::DialUp(LPTSTR strDial,int iTime)

PURPOSE: 用AT命令建立連接

PARAMETERS:
		strDial:要撥號的號碼
		iTime:如果不為0,如果當(dāng)前狀態(tài)為連接狀態(tài),或線路忙(轉(zhuǎn)成等待方式),等待的時間
RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE

COMMENTS: 
	1)發(fā)送ATDXXX后,會段時間等待,連接字符串的返回,
		如果另一邊一撥號成功就發(fā)送數(shù)據(jù),很可能會導(dǎo)致數(shù)據(jù)丟失
	2)對電話號碼的支持有待測試,特別字符
**********************************************************************/
BOOL CYsATModem::DialUp(LPCTSTR strDial)
{
	if(m_bTestMode)return TRUE;
	if(m_nMode==MODE_UNINITIALIZE||m_nMode==MODE_UNMODEM)
		if(m_bInit)
		{
			if(!InitModem(m_nPort,m_iBaud,2,m_hWnd))
				return FALSE;
		}
	if(m_nMode==MODE_DATA)
	{
		return TRUE;//have connected
	}
	if(m_nMode==MODE_CONNECTING)//connecting
	{
		//wait connect success
		if(WAIT_OBJECT_0==WaitForSingleObject(m_hConnected,DIALTIME_START))
			return TRUE;//have connected
		return FALSE;
	}
	if(m_nMode!=MODE_COMMAND)//MODE_DIALING MODE_WAITRING
		return FALSE;

	CHAR strTemp[200];
	lstrcpy(strTemp,CMD_ATD);
	lstrcat(strTemp,(LPCTSTR)strDial);
	SendAT(strTemp);

	return DetectConnect();
}
/*************************2001.10.30 ycat *********************************************
FUNCTION: int CYsATModem::DetectConnect()

PURPOSE: 檢測連接

PARAMETERS:
RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE
COMMENTS: 
**********************************************************************/
int CYsATModem::DetectConnect()
{
	if(m_nMode!=MODE_COMMAND) return FALSE;
	ChangeMode(MODE_CONNECTING);
	CHAR strTemp[200];
	Sleep(3000);
	
	//讀字符
	DWORD dwRead;
	int nErr;
	int nRet=FALSE;

	Purge(PURGE_ALL);
	TRACE("\n  Clear  \n");
	memset(strTemp,0,200);
	nErr=this->ReadComm((PBYTE)strTemp,200,&dwRead,DIALTIME_START,DIALTIME_INTER);
	TRACE(strTemp);
/*	if(nErr!=-2)
	{
		goto Exit;
	}
	strTemp[dwRead]='\0';

	i=CheckString(strTemp);
	
	//find AT command string 
	if(i==CODE_CONNECT)		nRet=TRUE;
	else if(i==CODE_CANNTFIND)//can't fine AT command string
	{
		TRACE(_TEXT("Unknow string %s\n"),strTemp);
		goto Exit;
	}
	else// if(i==CODE_BUSY||i==CODE_NODIALTONE)
	{
		goto Exit;
	}
	if(m_nMode!=MODE_CONNECTING) return m_bCD;//可能中間運行了hangup()*/
//Exit:
	if(!m_bCD)
	{
		SendAT(CMD_AT);//打斷連接
		Sleep(500);
		Purge(PURGE_ALL);
		ChangeMode(MODE_COMMAND);
	}
	else ChangeMode(MODE_DATA);
	return m_bCD;
}

/*************************2001.10.30 ycat *********************************************
FUNCTION: BOOL InitModem(UINT nPort,HWND hWnd)

PURPOSE: 生成串口文件句柄,
		 發(fā)送AT命令查看Modem是否正常,
		 生成一個掛起的收數(shù)線程

PARAMETERS:
		nPort:串口號,com1為1,com2為2
		hWnd:用來接收消息的窗口
RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE

COMMENTS: 
**********************************************************************/
BOOL CYsATModem::InitModem(UINT nPort,UINT uBaud,int iRingCount,HWND hWnd)
{
	m_bCD=FALSE;
	m_nRingCount=iRingCount;
	if(!m_bTestMode)
	{
		if(m_nMode!=MODE_UNINITIALIZE&&m_nMode!=MODE_UNMODEM) return TRUE;


	}

	//create comm
	if(!Create(nPort))
	{
		SetLastError(_TEXT("創(chuàng)建通信端口失敗"));
		//SetLastError(_TEXT("Create Comm error"));
		return FALSE;
	}
	if(!SetComm(uBaud))
	{
		SetLastError(_TEXT("Set comm error"));
		return FALSE;
	}

	m_hWnd=hWnd;

	//clear comm buffer
	if(!Purge(PURGE_ALL))
	{
		return FALSE;
	}
	m_pQueue->Clear();
	if(m_bTestMode) return TRUE;

	ChangeMode(MODE_UNMODEM);

	int i;
	TCHAR buffer[50];
	DWORD length=0;

	//send ATZ0,復(fù)位命令
	if(!SendAT(CMD_ATZ0))
	{
		return FALSE;
	}
	//if echo don't open then must timeout
	i=ReadComm((PBYTE)buffer,11,&length,WAITTIME);

	if(i!=1&&i!=-2)
	{
		SetLastError(_TEXT("讀串口失敗"));
		//SetLastError(_TEXT("Read comm error"));
		return FALSE;
	}
	buffer[length]='\0';
	i=CheckString(buffer);
	if(i!=CODE_OK)
	{
		SetLastError(_TEXT("Cann't find OK string"));
		return FALSE;

	}

	//取消回顯
	if(!SendAT(CMD_ATE))
	{
		return FALSE;
	}
	i=ReadComm((PBYTE)buffer,10,&length,WAITTIME);
	if(1!=i)
	{
		SetLastError(_TEXT("讀串口失敗"));
		//SetLastError(_TEXT("Read comm error"));
		return FALSE;
	}
	buffer[length]='\0';
	i=CheckString(buffer);
	if(i!=CODE_OK)
	{
		SetLastError(_TEXT("Cann't find OK string"));
		return FALSE;
	}

#ifndef USER_ANSWER
	TCHAR temp[10];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合一区二区| 国产一区二区精品久久| 欧美无乱码久久久免费午夜一区| 亚洲电影在线免费观看| 日韩无一区二区| 国产a久久麻豆| 亚洲成人在线观看视频| 欧美三级三级三级| 国产在线播精品第三| 一区二区三区四区乱视频| 日韩欧美一区在线观看| 成人sese在线| 蜜桃视频在线观看一区| 亚洲欧美日韩国产一区二区三区| 国产电影一区二区三区| 五月综合激情日本mⅴ| 久久久www成人免费毛片麻豆| 大尺度一区二区| 日本不卡一区二区三区 | 欧美日韩一区二区三区四区五区| 精品一区在线看| 亚洲区小说区图片区qvod| 欧美一区永久视频免费观看| 99re热这里只有精品视频| 蜜桃视频免费观看一区| 一区二区三区在线视频免费| 久久综合九色综合97婷婷 | 51久久夜色精品国产麻豆| 国产在线精品一区二区夜色| 亚洲在线中文字幕| 久久久久久久久久久久久夜| 欧美日韩一区二区三区在线看 | 国产精品自拍毛片| 日本强好片久久久久久aaa| 精品国产免费人成电影在线观看四季| 黄页视频在线91| 亚洲成人午夜影院| 中文字幕一区av| 日韩亚洲国产中文字幕欧美| 91在线视频观看| 国产乱色国产精品免费视频| 亚洲国产另类av| 国产精品国产a级| 久久这里只有精品首页| 3atv一区二区三区| 欧美午夜片在线观看| 91在线视频免费91| 免费在线观看不卡| 日本中文字幕一区二区视频 | 成人动漫在线一区| av在线不卡电影| 成人午夜看片网址| 成人av集中营| 福利一区福利二区| 国产精品69毛片高清亚洲| 国产精品一级黄| 福利视频网站一区二区三区| 不卡一区二区三区四区| 成人h版在线观看| 成人午夜短视频| 成人激情免费电影网址| 成人av网站在线| 在线观看成人免费视频| 欧美久久久久久蜜桃| 精品国产百合女同互慰| 国产精品系列在线| 亚洲男同1069视频| 日本不卡一区二区三区高清视频| 久久精品国产澳门| 日本高清成人免费播放| 欧美视频在线一区二区三区| 欧美大片拔萝卜| 国产午夜一区二区三区| 一区精品在线播放| 日韩精品免费专区| 韩国毛片一区二区三区| 99久久亚洲一区二区三区青草| 欧美色手机在线观看| 精品国产精品一区二区夜夜嗨| 欧美国产精品一区二区| 一区二区三区欧美视频| 另类的小说在线视频另类成人小视频在线| 久久成人综合网| 成人va在线观看| 欧美一区二区三区男人的天堂| 久久青草欧美一区二区三区| 一区二区三区日韩在线观看| 黄色精品一二区| 色www精品视频在线观看| 精品久久一二三区| 亚洲天堂久久久久久久| 久久99精品国产麻豆婷婷洗澡| 99热99精品| 欧美成人猛片aaaaaaa| 亚洲免费观看高清完整版在线观看 | 26uuu久久综合| 亚洲欧美偷拍三级| 国产麻豆日韩欧美久久| 欧美日韩国产综合草草| 国产精品无圣光一区二区| 日精品一区二区三区| www.亚洲在线| 欧美一区二区三区婷婷月色| 亚洲三级小视频| 国产最新精品精品你懂的| 在线观看一区日韩| 国产亚洲精品久| 蜜臀a∨国产成人精品| 色婷婷精品大视频在线蜜桃视频| 日韩欧美国产一区在线观看| 亚洲精品成人悠悠色影视| 国产精品一区二区视频| 日韩视频免费观看高清完整版在线观看| 亚洲欧洲在线观看av| 国产麻豆成人传媒免费观看| 欧美精品免费视频| 国产精品久久综合| 黑人巨大精品欧美黑白配亚洲| 欧美图区在线视频| 亚洲欧洲日产国产综合网| 精品一二三四在线| 91论坛在线播放| 精品免费国产一区二区三区四区| 国产精品久久久久久久久免费桃花 | 亚洲第一福利视频在线| 日韩国产欧美视频| av一本久道久久综合久久鬼色| 精品日韩一区二区| 久久99国产精品久久99| 91精品国产高清一区二区三区蜜臀 | 91免费看`日韩一区二区| 久久久久国产精品人| 狠狠色狠狠色综合| 日韩三级视频在线观看| 日韩不卡在线观看日韩不卡视频| 色94色欧美sute亚洲线路一ni| 国产精品理论在线观看| 国产成人精品1024| 久久久久国产精品厨房| 国模大尺度一区二区三区| 精品久久久三级丝袜| 久久成人羞羞网站| 亚洲精品一区二区三区福利| 国产精品自拍网站| 国产精品久久久久久久浪潮网站| 成人毛片老司机大片| 国产精品伦理一区二区| 99热精品国产| 蜜臂av日日欢夜夜爽一区| 欧美日韩一区在线| 亚洲一区二区三区影院| 欧美美女黄视频| 久久精品国产久精国产爱| 精品久久久久久久久久久久久久久 | 色诱亚洲精品久久久久久| 一区二区三区欧美久久| 欧美色综合影院| 日韩综合小视频| 精品国精品国产尤物美女| 国产成人精品免费看| 亚洲免费视频中文字幕| 欧美精品一二三区| 国产精品一区二区三区乱码| 综合欧美一区二区三区| 欧美精品自拍偷拍| 国产河南妇女毛片精品久久久| 亚洲精品一区二区在线观看| 成人国产免费视频| 亚洲成国产人片在线观看| 欧美mv日韩mv国产| 91偷拍与自偷拍精品| 日韩av中文在线观看| 国产亚洲女人久久久久毛片| 91久久精品网| 久久99深爱久久99精品| 中文字幕亚洲欧美在线不卡| 欧美剧情电影在线观看完整版免费励志电影 | 91黄色小视频| 秋霞影院一区二区| 中文字幕欧美三区| 欧美日韩一区二区三区视频| 国产又黄又大久久| 一区二区三区国产豹纹内裤在线 | 在线播放国产精品二区一二区四区| 国产综合一区二区| 一级中文字幕一区二区| www精品美女久久久tv| 色噜噜狠狠成人中文综合| 激情久久五月天| 亚洲国产日日夜夜| 国产精品色一区二区三区| 在线播放中文一区| 99国产欧美久久久精品| 久久99国产精品久久99果冻传媒| 亚洲蜜臀av乱码久久精品蜜桃| 欧美精品一区二区三区蜜臀| 色先锋久久av资源部| 国产又粗又猛又爽又黄91精品| 亚洲成人午夜电影| 亚洲欧美日韩小说|