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

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

?? 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是否就續
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不支持這種通知
		{
			//這里有個問題,如果對方撥號一聲后,掛斷,計數器沒清零,第二次就會出問題
			if(iRing>0)
			{
				if(GetTickCount()-dwTime>10000) 
					iRing=0;//如果兩次響鈴大于10秒鐘,重設為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;//如果正在撥號的時候斷線,可能會出現CD變化?
		}
	}
	TRACE(_T("Quit Detect Thread"));
	return 1;
}

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

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

PARAMETERS:
		pParam:指向CYsATModem類

RETURN VALUE:

COMMENTS: 斷線的處理,也許還要改進
**********************************************************************/
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,如果當前狀態為連接狀態,或線路忙(轉成等待方式),等待的時間
RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE

COMMENTS: 
	1)發送ATDXXX后,會段時間等待,連接字符串的返回,
		如果另一邊一撥號成功就發送數據,很可能會導致數據丟失
	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: 生成串口文件句柄,
		 發送AT命令查看Modem是否正常,
		 生成一個掛起的收數線程

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("創建通信端口失敗"));
		//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,復位命令
	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];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片不卡一区二区| 日韩高清在线一区| 4438x成人网最大色成网站| 亚洲综合一区在线| 久久综合久久鬼色中文字| caoporn国产精品| 亚洲午夜久久久久久久久久久| 日韩欧美国产不卡| 一本到三区不卡视频| 国产一本一道久久香蕉| 亚洲成人在线观看视频| 中文字幕一区二区在线观看| 欧美精品久久一区二区三区| 国产一区二区三区免费看| 一区二区三区中文在线观看| 久久精品在线免费观看| 欧美另类变人与禽xxxxx| 成人理论电影网| 一区二区三区在线高清| 韩国欧美国产一区| 亚洲欧美经典视频| 国产成人高清视频| 久久久久久久久久久黄色| 色先锋aa成人| 在线欧美小视频| 精品在线亚洲视频| 国产女主播视频一区二区| 成人av电影在线网| 天天影视色香欲综合网老头| 国产精品情趣视频| 精品国产露脸精彩对白| 色婷婷av一区二区| 色婷婷综合久色| 成人91在线观看| zzijzzij亚洲日本少妇熟睡| 国产成人日日夜夜| 精品亚洲porn| 久久精品久久99精品久久| 日韩精品国产欧美| 一区二区三区在线免费| 亚洲精品久久久蜜桃| 亚洲人成电影网站色mp4| 亚洲色欲色欲www在线观看| 国产午夜一区二区三区| 欧美日本不卡视频| 欧美日韩国产乱码电影| 欧美亚洲丝袜传媒另类| 欧美日韩高清在线播放| www.欧美精品一二区| 国产在线麻豆精品观看| 美女在线观看视频一区二区| 精品一区二区三区在线播放视频 | 亚洲色图在线播放| 国产精品初高中害羞小美女文| 中文字幕精品一区二区三区精品| 国产人妖乱国产精品人妖| 久久久久国产免费免费| 国产日韩影视精品| 国产精品美女一区二区在线观看| 亚洲男人的天堂在线观看| 一区二区三区在线播放| 午夜久久福利影院| 麻豆国产一区二区| 国产一区二区三区高清播放| 成人av在线观| 欧美写真视频网站| 日韩欧美二区三区| 国产精品久久毛片| 日韩理论片在线| 婷婷久久综合九色综合伊人色| 精品一区二区三区香蕉蜜桃| 午夜精品福利一区二区三区蜜桃| 蜜臀国产一区二区三区在线播放| 免费成人结看片| 亚洲综合色丁香婷婷六月图片| 国产精品久久久久7777按摩| 一区二区在线电影| 国产性色一区二区| 欧美经典一区二区| 国产精品久久久久久久久果冻传媒 | 久久久久88色偷偷免费| 精品日韩一区二区| 一本久久a久久精品亚洲| 成人性生交大片免费看中文 | 国产91丝袜在线播放九色| 国产精品麻豆久久久| 国产福利不卡视频| 天堂一区二区在线免费观看| 亚洲国产va精品久久久不卡综合| 久久蜜桃一区二区| 欧美精品一区二区三区在线播放| 欧美亚一区二区| 在线成人小视频| 久久综合狠狠综合| 综合色中文字幕| 《视频一区视频二区| 首页综合国产亚洲丝袜| 久久66热偷产精品| 成人免费毛片嘿嘿连载视频| 制服.丝袜.亚洲.中文.综合| 欧美日韩国产色站一区二区三区| 日韩限制级电影在线观看| 91久久精品一区二区| 欧美成人三级电影在线| 亚洲精品国产第一综合99久久 | 国产一区二区三区久久久 | 欧美高清精品3d| 不卡一区二区中文字幕| 91一区二区在线| 久久久久久9999| 久久精品国产一区二区三| 久久久午夜精品| 欧美一区二区性放荡片| 欧美日韩另类一区| 亚洲丶国产丶欧美一区二区三区| 国产精品资源在线| 91精品一区二区三区久久久久久| 亚洲美女在线一区| 激情五月激情综合网| 制服丝袜中文字幕亚洲| 曰韩精品一区二区| 成人av网站在线观看| 久久综合久久综合亚洲| 日本成人超碰在线观看| 色国产综合视频| 久久亚洲捆绑美女| 日本成人在线电影网| 欧美精品第1页| 一区二区三区精密机械公司| 一本到不卡精品视频在线观看| 成人欧美一区二区三区小说 | 日韩欧美国产电影| 日本中文在线一区| 国产欧美日韩精品a在线观看| 狠狠色伊人亚洲综合成人| 日韩亚洲国产中文字幕欧美| 免费在线观看日韩欧美| 91精品综合久久久久久| 亚洲一区在线看| 在线日韩一区二区| 亚洲一级不卡视频| 青青草97国产精品免费观看| 日韩西西人体444www| 国产在线播放一区二区三区| 久久精品日韩一区二区三区| 国产一区二区91| 久久综合久久久久88| 国产福利一区在线| 精品动漫一区二区三区在线观看 | 91网站黄www| 国产精品丝袜久久久久久app| 五月婷婷综合网| 88在线观看91蜜桃国自产| 午夜精品在线看| 日韩一区二区三区视频在线观看| 日韩一区精品视频| 欧美一区二区三区的| 久久99精品国产.久久久久久| 久久久久久久综合日本| 成人av网站在线观看免费| 亚洲日本一区二区| 99久久99久久免费精品蜜臀| 亚洲国产精品精华液ab| 99久久精品国产一区| 亚洲一区二区在线播放相泽| 6080国产精品一区二区| 久久99蜜桃精品| 国产欧美精品一区二区色综合朱莉| 国产欧美精品一区| 日本成人在线电影网| 精品久久久久久久久久久院品网| 国产91露脸合集magnet| 亚洲男女毛片无遮挡| 欧美三级三级三级爽爽爽| 琪琪久久久久日韩精品| 国产欧美1区2区3区| 欧美日韩高清在线播放| 国产成人99久久亚洲综合精品| 亚洲综合一区在线| 久久久久久久综合狠狠综合| 91极品视觉盛宴| 蜜桃精品视频在线| 亚洲欧美日韩国产另类专区| 日韩三级在线观看| 成人国产视频在线观看| 亚洲图片有声小说| 欧美mv日韩mv国产网站| 97久久精品人人澡人人爽| 日精品一区二区三区| 久久久久一区二区三区四区| 在线观看欧美精品| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区二区综合| 欧美久久久久免费| 国产精品综合网| 色婷婷av一区二区三区gif| 亚洲影院理伦片| 日本特黄久久久高潮| 日韩毛片一二三区| 国产欧美日韩中文久久|