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

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

?? ysatmodem.cpp

?? 通過貓實現計算機之間的通信
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	TCHAR temp[10];
	lstrcpy(buffer,"ATS0=");
	sprintf(temp,"%d",iRingCount);
	lstrcat(buffer,temp);

	//send 設置自動應答
	SendAT(buffer);
	ReadComm((PBYTE)buffer,6,&length,WAITTIME);
	buffer[length]='\0';
	i=CheckString(buffer);
	if(i!=CODE_OK)
	{
		SetLastError(_TEXT("Set autoreply mode fail"));
		return FALSE;
	}
#endif

	//clear comm buffer
	if(!Purge(PURGE_ALL))
	{
		return FALSE;
	}

	TRACE("Com%d InitModem Success \n",m_nPort);
	ChangeMode(MODE_COMMAND);
	
	if(!SetEvent(EV_DSR|EV_RING|EV_RLSD))//設備就續狀態改變性號,現在已經就續,如果收到這個信號表示modem出問題了
	{
		SetLastError(_TEXT("Set comm event error"));
		return FALSE;
	}
	AfxBeginThread(DetectModemThread,this);
	ResetError();
	m_bInit=TRUE;
	return TRUE;
}

/*************************2001.10.30 ycat *********************************************
BOOL CYsATModem::SendAT(LPCSTR strCmd,BOOL AddReturn)

PURPOSE: 發送AT命令

PARAMETERS:
	strCmd:要發送的AT命令
	AddReturn:指明是否要在AT命令后面加上回車

RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE

COMMENTS: 
	1)大多數AT命令要加上回車符,才能運行,但+++卻不同,不要加回車
	所以不支持+++命令
**********************************************************************/
BOOL CYsATModem::SendAT(LPCSTR strCmd,BOOL AddReturn)
{
	//在傳送data模式
	if(m_nMode==MODE_DATA)
	{
		SetLastError(_TEXT("Send AT Command error"));
		return FALSE;
	}

	TCHAR buffer[50];
	lstrcpy(buffer,strCmd);

	lstrcat(buffer,"\r\n");//只有+++,可以省\n

	TRACE("send AT command %s\n",buffer);
//	DWORD dw;

//	WaitEvent(&dw,0);

	//如果strCmd中間含有值為0的字符,將會產生不良后果
	if(WriteComm((PBYTE)buffer,strlen(buffer))==1)
		return TRUE;

	SetLastError(_TEXT("Send AT Command error"));
	return FALSE;
}
/*
掛斷連接,進入MODE_COMMAND狀態

后面被取消的程序掛斷連接,有時不能很好運行
*/
BOOL CYsATModem::HangUp()
{
	if(m_bTestMode)return TRUE;

	if(m_nMode==MODE_UNINITIALIZE) return TRUE;

	//如果正在連接,發送任意字符,則會中斷
	if(m_nMode==MODE_CONNECTING)
	{
		SendAT(CMD_AT);
		Sleep(500);
	}

	if(!Purge(PURGE_ALL)) return FALSE;
	if(!Clear(PURGE_ALL)) return FALSE;

	if(m_nMode==MODE_COMMAND) return TRUE;
	if(m_nMode==MODE_UNMODEM) return TRUE;


	TCHAR buffer[50];
	DWORD length=0;
	
	if(m_Thread)
	{
		if(WAIT_OBJECT_0!=WaitForSingleObject(m_Thread->m_hThread,10000))
		{
			TerminateThread(m_Thread->m_hThread,-11);
		}
		delete m_Thread;
		m_Thread=NULL;
	}

	if(m_nMode!=MODE_DATA) return TRUE;
	ResetEvent(m_hConnected);

	ChangeMode(MODE_COMMAND);	

	if(!Purge(PURGE_ALL))
		return FALSE;//comm error

	Sleep(1000);

	//change mode to MODE_COMMAND
	//+++ 不用換行
	
	TCHAR strSend[]=_TEXT("+++");
	if(1!=WriteComm((PBYTE)strSend,3)) return FALSE;//comm error
	TRACE(_TEXT("Send +++ \n"));
	int i;
	DWORD dwReaded;

	if(-1==ReadComm((PBYTE)buffer,6,&dwReaded,WAITADDADDADDTIME))
		return FALSE;//comm error

	buffer[dwReaded]='\0';

	i=CheckString(buffer);
	if(i!=CODE_OK)
	{
		SetLastError(_TEXT("send +++ but cann't recept OK"));
		TRACE("1  %s\n",buffer);
		return HangUp2();
	}

	//hangup command
	SendAT(CMD_ATH0);	

	if(-1==ReadComm((PBYTE)buffer,6,&dwReaded,WAITATHTIME)) return FALSE;
	buffer[dwReaded]='\0';

	i=CheckString(buffer);
	//wait for OK
	if(i!=CODE_OK)
	{
		SetLastError(_TEXT("send ATH0 but cann't recept OK"));
		TRACE("2  %s\n",buffer);
		return HangUp2();
	}

	TRACE("hang up OK!!!\n");
	ChangeMode(MODE_COMMAND);
	return TRUE;
}

/*************************2001.10.30 ycat *********************************************
FUNCTION: BOOL CYsATModem::Clear(DWORD dwType)

PURPOSE: 清除串口

PARAMETERS:
		nType的值及說明,可組合起來用
		nType=PURGE_TXABORT Terminates all outstanding
				overlapped write operations and returns 
				immediately, even if the write operations 
				have not been completed. 
		nType=PURGE_RXABORT Terminates all outstanding 
				overlapped read operations and returns 
				immediately, even if the read operations
				have not been completed. 
		nType=PURGE_TXCLEAR Clears the output buffer 
				(if the device driver has one). 
		nType=PURGE_RXCLEAR Clears the input buffer 
				(if the device driver has one). 

RETURN VALUE:
    如果操作成功,返回TRUE,如果失敗返回FALSE

COMMENTS: 
	1)讀緩沖區實際上是m_pQueue里的緩沖區
	2)PURGE_RXABORT不起作用
**********************************************************************/
BOOL CYsATModem::Clear(DWORD dwType)
{
	if(m_bTestMode)return Purge(dwType);

	if(dwType&PURGE_RXCLEAR)
	{
		if(!m_pQueue->Clear()) 
		{
			SetLastError(_T("In clear() clear queue error"));
			return FALSE;
		}
	}

	if(dwType&PURGE_TXCLEAR)
		if(!Purge(PURGE_TXCLEAR))
		{
			SetLastError(_T("In clear() clear tx buffer error"));
			return FALSE;
		}
	if(dwType&PURGE_TXABORT)
		if(!Purge(PURGE_TXABORT))
		{
			SetLastError(_T("In clear() clear tx abort error"));
			return FALSE;
		}
	return TRUE;
}
/*************************2001.10.30 ycat *********************************************
FUNCTION: int CYsATModem::Write(LPCSTR lpstrWrite,DWORD dwCount)

PURPOSE: 寫數據

PARAMETERS:
		lpstrWrite:要寫的字符串
		dwCount: 字符串的長度
RETURN VALUE:
    返回1為正常
    返回-1為失敗
    返回-4為斷線
COMMENTS: 
**********************************************************************/
int CYsATModem::Write(LPCSTR lpstrWrite,DWORD dwCount)
{
	if(!m_bTestMode)
	{
		if(m_nMode==MODE_COMMAND) return -4;
		if(m_nMode!=MODE_DATA) return -1;
	}
	int nRet=CYsComm::WriteComm((PBYTE)lpstrWrite,dwCount);
	if(nRet==1) return 1;
	return -1;
}
/*************************2001.10.30 ycat *********************************************
FUNCTION: int CYsATModem::Read(LPTSTR lpstrRead,DWORD dwCount,
			DWORD* dwHaveReaded,DWORD nTimeOut)

PURPOSE: 讀數據

PARAMETERS:
		lpstrRead:		放讀出字符串的緩沖區
		dwCount:		緩沖區的長度
		dwHaveReaded:	實際讀到的字符數
		nTimeOut:		超時
RETURN VALUE:
    返回1為正常
    返回-1為失敗
	返回-2為超時
    返回-4為斷線
COMMENTS: 
**********************************************************************/
int CYsATModem::Read(LPTSTR lpstrRead,DWORD dwCount,
			DWORD* dwHaveReaded,DWORD nTimeOut)
{
	if(m_bTestMode)
	{
		return CYsComm::ReadComm((PBYTE)lpstrRead,dwCount,dwHaveReaded,nTimeOut);
	}
	
	if(m_nMode==MODE_COMMAND) return -4;
	if(m_nMode!=MODE_DATA) return -1;

	int nRet;
	DWORD dwTimeAfter;
	DWORD dwTimeUsed;
	DWORD dwTimeBefore;

	for(DWORD i=0;i<dwCount;i++)
	{
		dwTimeBefore=GetTickCount();
		if(!m_pQueue->Get((PBYTE)(lpstrRead+i),nTimeOut))
		{
			//TRACE("Read2 Timeout %ld \n",nTimeOut);
			nRet=-2;//超時
			goto Exit;
		}
		dwTimeAfter=GetTickCount();
		dwTimeUsed=dwTimeAfter-dwTimeBefore;

		//斷線
		if(m_nMode==MODE_COMMAND)
		{
			nRet=-3;
			goto Exit;
		}

		if(dwTimeUsed>nTimeOut)
		{
			if(i<dwCount)
			{
				nRet=-2;//TimeOut
				goto Exit;
			}
			else 
			{
				nRet=1;
				goto Exit;
			}
		}
		//計算剩下的時間
		nTimeOut-=dwTimeUsed;
	}
	nRet=1;
Exit:
	*dwHaveReaded=i;
	return nRet;
}

/*************************2001.10.30 ycat *********************************************
FUNCTION: int CYsATModem::CheckString(LPCTSTR strIn,BOOL bSendMessage)

PURPOSE: 查找strIn中是否含有AT命令返回的字符串

PARAMETERS:
		 strIn:要查找的字符串
		 bSendMessage:指明是否要發送消息給窗口

RETURN VALUE:
		返回AT命令返回字符串的序號,(CODE_CANNTFIND)-1表示沒找到

COMMENTS: 不支持中間含有'\0'的字符串,要改進
**********************************************************************/
int CYsATModem::CheckString(LPCTSTR strIn,BOOL bSendMessage)
{
	CString strTemp;
	strTemp.Format("%s",strIn);
	for(int i=0;i<ECHO_COUNT;i++)
	{
		if(-1!=strTemp.Find(pstrCmdString[i]))
		{
			if(!bSendMessage&&i==1) return i;
			return i;
		}
	}
	return -1;
}
/*
#define MODE_UNINITIALIZE	    1//未初始化狀態
#define MODE_UNMODEM			5
#define MODE_COMMAND			10
#define MODE_DIALING			15
#define MODE_WAITRING			20
#define MODE_CONNECTING			25
#define MODE_DATA				30*/
//返回當前狀態
int CYsATModem::GetState()
{
	if(m_bTestMode)return MODE_DATA;
	return m_nMode;
}

//返回寫緩沖區內有多少個字符
DWORD CYsATModem::GetReadBufferCount()
{
	if(m_bTestMode)
	{
		DWORD dwLength;
		CYsComm::GetBufferCount(TYPE_WRITE,&dwLength);
		return dwLength;
	}
	return m_pQueue->GetCount();
}


//return state describe string 
CString CYsATModem::GetStateDesc()
{
	if(m_bTestMode) return "測試狀態";
	switch(m_nMode)
	{
	case MODE_UNINITIALIZE:
		return _TEXT("串口有問題");
	case MODE_UNMODEM:
		return _TEXT("Modem有問題");
	case MODE_COMMAND:
		return _TEXT("可以撥號");
	case MODE_CONNECTING:
		return _TEXT("正在建立連接");
	case MODE_DATA:
		return _TEXT("遠程Modem連接");//(如不成功,返回2狀態)
	default:
		return _TEXT("Unknow state!");
	}
}
//如果HangUp()不成功,只好調用HangUp2()了
BOOL CYsATModem::HangUp2()
{
	if(m_bTestMode)return TRUE;
	TRACE("\n\n In Hangup 2\n\n");
	ChangeMode(MODE_UNINITIALIZE);
	Sleep(1000);
	return InitModem(m_nPort,m_iBaud,m_nRingCount,m_hWnd);
}

void CYsATModem::ChangeMode(int newMode)
{
	if(m_nMode!=newMode)
	{
		if(m_hWnd)
			PostMessage(m_hWnd,WM_MODEM_CHANGE,newMode,m_nPort);
		m_nMode=newMode;
		TRACE("Mode Change =%d \n",m_nMode);

	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 亚洲国产日韩一区二区| 69av一区二区三区| 欧美在线色视频| 91蜜桃视频在线| 91色视频在线| 日本道免费精品一区二区三区| 色综合天天综合网国产成人综合天 | 在线一区二区三区| 91网站视频在线观看| 91小视频在线免费看| 91美女在线看| 欧美性大战xxxxx久久久| 欧美在线一二三| 欧美精品第1页| 日韩精品自拍偷拍| 2019国产精品| 中文字幕高清不卡| 亚洲美女在线国产| 婷婷激情综合网| 男男成人高潮片免费网站| 久久精品国产精品青草| 国产原创一区二区| av网站免费线看精品| 色婷婷狠狠综合| 欧美日本国产一区| 精品伦理精品一区| 欧美国产成人精品| 亚洲综合久久av| 免费在线视频一区| 高清不卡在线观看av| 99精品视频一区| 欧美日韩成人一区| 国产午夜一区二区三区| 国产精品电影一区二区三区| 亚洲国产精品久久艾草纯爱| 免费在线观看精品| 国产成人av电影在线观看| 99免费精品在线观看| 欧美日韩国产不卡| 国产女人18毛片水真多成人如厕| 中文字幕佐山爱一区二区免费| 亚洲第一精品在线| 国产盗摄一区二区三区| 欧美丝袜丝交足nylons| 精品国内二区三区| 一区二区三区色| 欧美老年两性高潮| 国产欧美日韩在线观看| 亚洲国产cao| 国产福利精品导航| 337p亚洲精品色噜噜| 国产精品乱人伦中文| 性久久久久久久久久久久 | 日韩欧美一级特黄在线播放| 国产精品嫩草影院av蜜臀| 日韩国产一二三区| 91亚洲精品久久久蜜桃| 欧美精品一区二区精品网| 亚洲欧美偷拍卡通变态| 狠狠色丁香久久婷婷综合丁香| 91福利在线免费观看| 久久婷婷综合激情| 午夜国产精品一区| av综合在线播放| 久久综合久久综合久久综合| 亚洲高清三级视频| av电影在线观看一区| 精品久久久久久最新网址| 亚洲国产精品综合小说图片区| 国产成人av电影在线观看| 日韩欧美在线网站| 一区二区视频在线| 成人黄色777网| 久久久蜜桃精品| 免费成人av在线| 欧美色网一区二区| 成人高清av在线| 精品国产欧美一区二区| 婷婷综合五月天| 色悠悠亚洲一区二区| 欧美激情一区二区三区蜜桃视频 | 国产在线视频不卡二| 欧美午夜精品久久久| 亚洲三级在线看| 国产99久久精品| 欧美精品一区二区蜜臀亚洲| 蜜桃久久精品一区二区| 欧美无砖砖区免费| 一区二区三区 在线观看视频| 成人黄动漫网站免费app| 国产欧美一二三区| 国产一区二区三区在线看麻豆| 欧美一级欧美三级在线观看 | 国产69精品久久久久777| 日韩欧美国产麻豆| 日本不卡一区二区| 91精品国产91久久综合桃花 | 成a人片亚洲日本久久| 精品国产乱码久久久久久1区2区 | 91麻豆精品在线观看| 中文字幕欧美三区| 国产a精品视频| 久久亚洲精华国产精华液| 看电影不卡的网站| 精品女同一区二区| 精品一区二区在线播放| 欧美电视剧在线观看完整版| 久久国产精品免费| 久久久精品综合| 成人黄色免费短视频| 中文字幕中文乱码欧美一区二区 | 欧美精品aⅴ在线视频| 日韩主播视频在线| 欧美一区二区免费| 美日韩一区二区三区| 精品成a人在线观看| 国产精品一区二区三区网站| 国产亚洲人成网站| 成人aa视频在线观看| 亚洲色图欧美激情| 欧美日韩国产免费| 经典三级在线一区| 国产精品午夜在线| 99久久久国产精品免费蜜臀| 一区二区三区不卡视频| 欧美日韩一区二区三区在线| 热久久久久久久| 精品国产乱码久久久久久图片 | 日本vs亚洲vs韩国一区三区| 精品国产123| 成人av电影在线观看| 一区二区三区波多野结衣在线观看| 欧美欧美欧美欧美| 国产一区二区调教| 中文字幕亚洲区| 精品视频在线免费看| 裸体健美xxxx欧美裸体表演| 国产精品女同互慰在线看| 日本丰满少妇一区二区三区| 奇米精品一区二区三区在线观看| 久久久国际精品| 欧洲国内综合视频| 激情综合五月天| 日韩一区中文字幕| 欧美日本免费一区二区三区| 久久国产三级精品| 亚洲欧洲www| 日韩午夜在线观看视频| 懂色av一区二区三区免费看| 亚洲第一狼人社区| 国产欧美日韩精品a在线观看| 欧美性极品少妇| 国产.欧美.日韩| 亚洲成人先锋电影| 亚洲国产精华液网站w| 91超碰这里只有精品国产| 国产精品一区二区在线观看不卡| 一级做a爱片久久| 2022国产精品视频| 91成人国产精品| 国产另类ts人妖一区二区| 亚洲一区二区三区不卡国产欧美| 久久综合精品国产一区二区三区| 91视频国产观看| 韩国v欧美v日本v亚洲v| 亚洲尤物在线视频观看| 2017欧美狠狠色| 欧美精品乱码久久久久久按摩| 丁香网亚洲国际| 久久精品国产99| 亚洲国产综合色| 国产精品福利一区二区| 精品久久国产97色综合| 在线观看亚洲一区| 成人免费av在线| 久久精品国产一区二区| 亚洲成人午夜电影| 亚洲男人的天堂在线观看| 国产免费成人在线视频| 色老汉av一区二区三区| 亚洲精品美国一| 色婷婷av一区二区三区gif| 亚洲日穴在线视频| 欧美日韩卡一卡二| 国产精品乱码久久久久久| 国产一区二区三区综合| 色综合久久天天| 免费欧美日韩国产三级电影| 日韩亚洲欧美中文三级| 国产一本一道久久香蕉| 欧美精品一区二| 国产一区啦啦啦在线观看| 精品sm在线观看| 欧美美女激情18p| 色噜噜夜夜夜综合网| 国产成人亚洲综合a∨婷婷| 黄一区二区三区| 日韩国产精品久久久久久亚洲| 亚洲国产婷婷综合在线精品|