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

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

?? pc2pcview.cpp

?? VisualC實踐與提高——串口通信與工程應用篇代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
							}
							dwFileLen=arrRcvData[1]+arrRcvData[2]*256+arrRcvData[3]*65536+arrRcvData[4]*16777216;
							myFile.SetLength(dwFileLen);
							uintStxCurNo=1;
							bytRcvStatus=1;
							bytResendCount=0;

							arrSendData[0]=6;
							Write(arrSendData,1);

							break;
						}
					case 100://超時錯誤
						{
							//接收0態時,對超時不作處理
							break;
						}
					
					}
					break;
				}
			case 1:
				{
					switch(lParam)
					{
					case EV_RXCHAR://收到字符
						{
							switch(Detect(1))
							{
							case 0://收到指定數量的字符
								{
									break;
								}
							case 4://超時錯誤
								{
									DisRcv(4);
									return -1;
									break;
								}

							case 8://無效,輸入緩沖區中字符數量為0
								{
									return 0;
									break;
								}

							}
							switch(Read(myByte,1))
							{
							case 0:
								{
									break;
								}
							case 4:
								{
									DisRcv(4);
									return -1;
									break;
								}
							case 16:
								{
									DisRcv(16);
									return -1;
									break;
								}
							}
							switch(myByte[0])//判斷是STX還是ETX
							{
							case 2://首字符是STX
								{
									//讀取數據
									arrRcvData[0]=myByte[0];
									uintRcvLen=1028;
									switch(Detect(1027))
									{
									case 0://收到指定數量的字符
										{
											//跳出switch,繼續下面的操作
											break;
										}
									case 4://超時錯誤
										{
											DisRcv(4);
											return -1;
											break;
										}

									case 8://無效,輸入緩沖區中字符數量為0
										{
											return 0;
											break;
										}
									}///
									switch(Read(myByte,1027))
									{
									case 0:
										{
											break;
										}
									case 4:
										{
											DisRcv(4);
											return -1;
											break;
										}
									case 16:
										{
											DisRcv(16);
											return -1;
											break;
										}
									}
									for(i=0;i<=1026;i++)
									{
										arrRcvData[i+1]=myByte[i];//保存數據至arrRcvData[]數組中
									}
									
									uintStxCurNo=arrRcvData[1]+arrRcvData[2]*256;
									if(uintStxCurNo==1)
									{
										myEdit.SetSel(1000000,1000000);
										myEdit.ReplaceSel("正在接收數據……\15\12");
									}
									strDis.Format("已接收(%.0f%%)",(float)((uintStxCurNo+1)*1024)/dwFileLen*100);
									m_pStatus->SetPaneText(0,strDis);     //將傳輸進度顯示在狀態條上
									myFile.Seek((uintStxCurNo-1)*1024,CFile::begin);
									myFile.Write(&arrRcvData[3],1024);

									bytResendCount=0;
									arrSendData[0]=6;
									Write(arrSendData,1);
									
									break;
								}

							case 3://首字符是ETX
								{
									//讀取數據
									arrRcvData[0]=myByte[0];
									switch(Read(myByte,2))
									{
									case 0:
										{
											break;
										}
									case 4:
										{
											DisRcv(4);
											return -1;
											break;
										}
									case 16:
										{
											DisRcv(16);
											return -1;
											break;
										}
									}
									arrRcvData[1]=myByte[0];
									arrRcvData[2]=myByte[1];
									uintRcvLen=1+2+2+(arrRcvData[1]+arrRcvData[2]*256)+1;//數據總長度

									switch(Read(myByte,uintRcvLen-3))
									{
									case 0:
										{
											break;
										}
									case 4:
										{
											DisRcv(4);
											return -1;
											break;
										}
									case 16:
										{
											DisRcv(16);
											return -1;
											break;
										}
									}
									for(i=0;(UINT)i<=uintRcvLen-2;i++)
									{
										arrRcvData[i+3]=myByte[i];
									}
									//至此,完整數據已經讀入arrRcvData[]中。
									uintStxCurNo=arrRcvData[3]+arrRcvData[4]*256;
									if(uintStxCurNo==1)
									{
										myEdit.SetSel(1000000,1000000);
										myEdit.ReplaceSel("正在接收數據……\15\12");
									}
									myFile.Seek((uintStxCurNo-1)*1024,CFile::begin);
									myFile.Write(&arrRcvData[5],arrRcvData[1]+arrRcvData[2]*256);

									myEdit.SetSel(1000000,1000000);
									myEdit.ReplaceSel("接收完畢!\15\12\15\12");
									strDis="已接收完畢";
									m_pStatus->SetPaneText(0,strDis);     //將傳輸進度顯示在狀態欄上
									bytRcvStatus=0;
									bytActStatus=10;
									bytSendStatus=0;
									bytResendCount=0;
									arrSendData[0]=6;
									Write(arrSendData,1);
									if(myFile.m_pStream!=NULL)
									{
										myFile.Close();//關閉打開的文件
									}
									break;
								}
							}
							break;
						}
					case 100://超時錯誤
						{
							break;
						}
					}
					break;
				}
			}
			break;
		}


	}
	return 0;
}

void CPC2PCView::OnUpdateSendfile(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (blnOpened)//根據串口是否打開,決定是否允許“發送文件”命令
	{
		if(!((bytSendStatus+bytRcvStatus)>0))//當前既沒開始發送,也沒開始接收
		{
			pCmdUI->Enable(true);
		}
		else
		{
			pCmdUI->Enable(false);
		}
	}
	else
	{
		pCmdUI->Enable(false);
	}
}

void CPC2PCView::OnUpdateSetupcom(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (!blnOpened)//根據串口是否打開,決定是否允許“設置”命令
	{
		pCmdUI->Enable(true);
	}
	else
	{
		pCmdUI->Enable(false);
	}
}

void CPC2PCView::OnUpdateOpencom(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (!blnOpened && blnSeted)//根據串口是否打開,決定是否允許“打開”命令
	{
		pCmdUI->Enable(true);
	}
	else
	{
		pCmdUI->Enable(false);
	}
}

void CPC2PCView::OnUpdateClosecom(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (blnOpened)//根據串口是否打開,決定是否允許“關閉”命令
	{
		if(!((bytSendStatus+bytRcvStatus)>0))//當前既沒開始發送文件,也沒開始接收文件
		{
			pCmdUI->Enable(true);
		}
		else
		{
			pCmdUI->Enable(false);
		}
	}
	else
	{
		pCmdUI->Enable(false);
	}
}

int CPC2PCView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CEditView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	CEdit& myEdit=this->GetEditCtrl( );
	myEdit.SetReadOnly (true);                         //將顯示區域設為只讀
	hWnd=GetSafeHwnd();                                    //獲取當前窗口的句柄

	blnOpened=false;     //串口已經打開標志
	blnSeted=false;      //已經設置過通信參數
	bytRcvStatus=0;      //初始化時,接收狀態為等待ENQ
	dwTimeoutValue=1500; //初始化事件線程超時時間
	bytActStatus=10;     //初始化為接收態
	blnNoTimeout=true;
	uintStxCurNo=0;
	bytTimeoutCounter=0;
	return 0;
}
bool CPC2PCView::DisSend(BYTE bytType)//發送態顯示信息函數,bytType決定顯示信息的內容
{
	CString strDis;
	CEdit& myEdit=this->GetEditCtrl();
	myEdit.SetReadOnly(true);
	myEdit.SetSel(1000000,1000000);
	switch(bytType)
	{
	case 1:
		{
			strDis="取消操作!\15\12";
			break;
		}
	case 2:
		{
			strDis="收到無效的命令!\15\12";
			break;
		}
	case 4:
		{
			strDis="對方無響應,超時錯誤!\15\12";
			break;
		}
	case 8:
		{
			strDis="重試次數多于3次!\15\12";
			break;
		}
	}
		
	myEdit.ReplaceSel(strDis);
	bytSendStatus=0;//恢復發送0態
	bytActStatus=10;//恢復為接收態
	bytRcvStatus=0;
	bytResendCount=0;//重試次數初始化為0
	if(myFile.m_pStream!=NULL)
	{
		myFile.Close();//關閉打開的文件
	}
	Beep(1000,50);
	return true;

}
bool CPC2PCView::DisRcv(BYTE bytType)//接收態顯示信息函數,bytType決定顯示信息的內容
{
	CString strDis;
	CEdit& myEdit=this->GetEditCtrl();
	myEdit.SetReadOnly(true);
	myEdit.SetSel(1000000,1000000);
	switch(bytType)
	{
	case 1:
		{
			strDis="取消操作!\15\12";
			break;
		}
	case 2:
		{
			strDis="收到無效的命令!\15\12";
			break;
		}
	case 4:
		{
			strDis="對方無響應,超時錯誤!\15\12";
			break;
		}
	case 8:
		{
			strDis="重試次數多于3次!\15\12";
			break;
		}
	}
		
	myEdit.ReplaceSel(strDis);
	bytRcvStatus=0;           //恢復接收0態
	bytActStatus=10;          //恢復為接收態
	bytSendStatus=0;          //發送態恢復為0態
	bytResendCount=0;         //重試次數初始化為0
	if(myFile.m_pStream!=NULL)
	{
		myFile.Close();       //關閉打開的文件
	}
	return true;
}
BYTE CPC2PCView::Read(BYTE arrBin[],int count)//讀數據函數,arrBin[]存放數據,count是讀的個數
{									//成功返回0,讀失敗返回16,超時錯誤返回4
	DWORD dwRes;
	DWORD dwRead;
	Rol.hEvent=CreateEvent(NULL, //創建Rol.hEvent為無信號狀態
		TRUE,                 
		FALSE, 
		NULL);
	if (ReadFile(hCom,
		arrBin,
		count,                     //讀取count個字節
		NULL,
		&Rol))
	{
		 //串口接收的數據已經成功讀出,并存放在arrBin[]數組中
		return 0;
	}
	else
	{
		dwRes = WaitForSingleObject(Rol.hEvent, 
			2000);                      //設置2秒的讀超時
		switch(dwRes)
		{
		case WAIT_OBJECT_0:
			{
				 if (!GetOverlappedResult(hCom, 
						&Rol, 
						&dwRead,             //實際讀取字節數存放在dwRead中
						TRUE))
				 {   
					 //讀操作失敗。使用GetLastError()函數可以獲取錯誤消息
						return 16;
				 }
				 else
				 {
					   //串口接收的數據已經成功讀出,并存放在arrBin[]數組中
					 return 0;
				 }
				 break;
			}
		case WAIT_TIMEOUT:
			{
				//讀操作出現超時錯誤。
				return 4;
			}
		}
	}
	return 0;
}



//發送數據函數,arrBin[]存放數據,count是發送個數
//發送態時,發送數據調用這個函數
//接收態時,響應時調用這個函數發送響應代碼ACK、NAK或CAN
bool CPC2PCView::Write(BYTE arrBin[],int count)
{
	DWORD	dwWrite;
	Wol.hEvent=CreateEvent(NULL, //創建Wol.hEvent事件句柄,并設置為無信號狀態
		TRUE, 
		FALSE, 
		NULL);
	WriteFile(hCom,                //寫數據,通過Wol結構獲取操作結果
		arrBin,
		count,
		NULL,
		&Wol);
	if(GetOverlappedResult(hCom,&Wol,&dwWrite,true))
	{
		return true;
	}
	return false;

}
//檢測串口輸入緩沖區中是否有指定個數的數據
//返回0-有,4-超時錯誤,8-無效
BYTE CPC2PCView::Detect(int count)
{
	DWORD dwErrors;
	COMSTAT Rcs;
	CString strDis,strDis1;
	BYTE bytTimeCount;
	ClearCommError(hCom,                  //串口句柄
		&dwErrors,                        //存放出錯信息的掩碼組合
		&Rcs);                             //COMSTAT類型結構變量
	if(Rcs.cbInQue==0)
		return 8;
	bytTimeCount=0;
	while(bytTimeCount<4)
	{
		ClearCommError(hCom,                //串口句柄
			&dwErrors,                        //存放出錯信息的掩碼組合
			&Rcs);                             //COMSTAT類型結構變量
		if(Rcs.cbInQue>=(UINT)count)
		{
			return 0;//在輸入緩沖區中找到指定數量的字符
		}
		Sleep(500);
		bytTimeCount++;
	}
	if((bytTimeCount>=4)&&(Rcs.cbInQue>0))//超時錯誤
	{
		return 4;//未找到
	}
	return 8;//無效狀態,輸入緩沖區中為0個字符
}

void CPC2PCView::OnDestroy() 
{
	
	CEditView::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

void CPC2PCView::OnUpdateAppExit(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (!blnOpened)          //根據串口是否打開,決定是否允許“退出”命令
	{
		pCmdUI->Enable(true);
	}
	else
	{
		pCmdUI->Enable(false);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情免费视频| 成人中文字幕电影| 一区二区三区丝袜| 中文字幕在线一区| 中日韩免费视频中文字幕| 久久久www成人免费毛片麻豆| 69堂成人精品免费视频| 欧美一区二区三区小说| 日韩精品影音先锋| 国产亚洲欧美日韩在线一区| 国产精品乱子久久久久| 中文字幕第一区| 亚洲精品久久7777| 日本三级亚洲精品| 国产成人免费视频网站 | 国产欧美精品区一区二区三区 | 99视频精品全部免费在线| 91色porny在线视频| 91国偷自产一区二区开放时间| 在线免费精品视频| 欧美日韩成人综合在线一区二区| 日韩欧美久久久| 国产精品乱人伦| 亚洲一二三专区| 精一区二区三区| 色综合网站在线| 欧美一区二区三区四区在线观看| 久久蜜桃一区二区| 亚洲图片欧美一区| 国内国产精品久久| 91成人免费在线视频| 精品免费国产一区二区三区四区| 国产精品免费人成网站| 亚洲国产精品久久久久婷婷884| 狠狠色丁香久久婷婷综| 欧美影院一区二区| 国产精品婷婷午夜在线观看| 亚洲午夜私人影院| 不卡视频在线看| 欧美电视剧在线观看完整版| 亚洲欧洲日本在线| 九色综合国产一区二区三区| 色婷婷精品久久二区二区蜜臀av| 日韩欧美第一区| 亚洲伦理在线精品| 成人综合婷婷国产精品久久蜜臀| 在线电影国产精品| 亚洲人快播电影网| 成人综合在线网站| 欧美精品一区二区三区在线播放| 最新高清无码专区| 国产风韵犹存在线视精品| 4438亚洲最大| 夜夜夜精品看看| aaa欧美色吧激情视频| 久久婷婷久久一区二区三区| 亚洲www啪成人一区二区麻豆| 成人晚上爱看视频| 精品日韩一区二区| 日本成人中文字幕在线视频| 欧美日韩精品一区二区三区蜜桃| 亚洲免费av网站| 成人免费高清在线| 国产精品网站一区| 成人免费高清视频在线观看| 欧美激情综合在线| 国产精品小仙女| 国产亚洲综合性久久久影院| 精品一区二区久久久| 日韩三级免费观看| 麻豆国产欧美日韩综合精品二区 | 51午夜精品国产| 午夜伊人狠狠久久| 欧日韩精品视频| 亚洲国产综合色| 欧美三级视频在线| 日本美女视频一区二区| 日韩欧美一二三区| 国产传媒欧美日韩成人| 欧美极品少妇xxxxⅹ高跟鞋| 成人av午夜电影| 国产精品久久久久永久免费观看 | 性做久久久久久免费观看| 欧美色国产精品| 日韩成人一级片| 久久新电视剧免费观看| 国产成人小视频| 中文字幕亚洲成人| 欧美日韩成人综合天天影院| 日韩影院在线观看| 国产亚洲人成网站| 91网站在线播放| 午夜欧美在线一二页| 精品久久久久久无| 成人免费高清视频| 天天av天天翘天天综合网| 日韩欧美国产一区二区三区| 国产激情一区二区三区| 中文字幕日韩欧美一区二区三区| 色婷婷亚洲精品| 日韩—二三区免费观看av| 国产欧美中文在线| 欧美三级韩国三级日本一级| 麻豆精品一区二区三区| 国产精品久久二区二区| 欧美视频在线播放| 成人一区二区三区中文字幕| 亚洲h动漫在线| 久久久精品黄色| 欧美亚洲日本一区| 国产精品18久久久久| 亚洲制服欧美中文字幕中文字幕| 精品国产百合女同互慰| 色偷偷88欧美精品久久久| 精品午夜久久福利影院| 一区二区三国产精华液| 久久免费电影网| 91精品国产综合久久久久| 成人动漫一区二区| 狠狠色丁香久久婷婷综| 天堂午夜影视日韩欧美一区二区| 中文一区二区在线观看| 日韩精品一区二区三区在线| 色妹子一区二区| 国产在线精品一区二区三区不卡| 一级做a爱片久久| 欧美经典一区二区| 日韩精品专区在线影院重磅| 欧美性猛片xxxx免费看久爱| 菠萝蜜视频在线观看一区| 精品中文字幕一区二区小辣椒| 亚洲一区自拍偷拍| 最近日韩中文字幕| 欧美激情一区二区三区四区| 精品国产一区二区在线观看| 91精品国产综合久久久久| 日本高清免费不卡视频| 95精品视频在线| 菠萝蜜视频在线观看一区| 懂色av中文一区二区三区| 久久99国产精品成人| 免费看黄色91| 日本人妖一区二区| 麻豆精品在线观看| 麻豆高清免费国产一区| 午夜电影一区二区三区| 午夜在线成人av| 亚洲成人一区二区| 婷婷综合五月天| 日韩电影在线看| 日韩国产欧美三级| 日韩激情视频网站| 麻豆国产欧美日韩综合精品二区 | 一区二区三区在线观看动漫| 国产精品美女久久久久久久网站| 国产色爱av资源综合区| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品国产自产拍高清av| 国产精品国产三级国产| 亚洲三级免费电影| 五月天婷婷综合| 久久精品免费看| 国产一区二区三区精品欧美日韩一区二区三区| 麻豆精品一区二区综合av| 国产精品一二三四| 99精品一区二区| 在线免费av一区| 欧美一区午夜视频在线观看| 日韩欧美色综合| 久久精品一区二区三区不卡牛牛| 国产精品视频免费| 亚洲综合无码一区二区| 日本成人在线不卡视频| 国产一区二区三区电影在线观看| 成人福利视频网站| 在线观看一区二区精品视频| 91精品国产入口| 欧美韩国日本不卡| 婷婷开心激情综合| 韩国女主播一区| 日本福利一区二区| 久久亚洲影视婷婷| 一区二区三区小说| 国产一区啦啦啦在线观看| 色综合天天做天天爱| 日韩一区二区三区四区| 国产精品久久久久久户外露出| 亚洲小说欧美激情另类| 国产成人免费在线视频| 欧美久久久久久久久久| 欧美国产精品专区| 秋霞影院一区二区| 色又黄又爽网站www久久| 精品久久久久久亚洲综合网| 亚洲一区二区三区四区不卡| 国产不卡视频在线观看| 日韩一区二区三区免费看| 亚洲精品中文字幕在线观看| 国产在线不卡一区| 欧美日韩国产另类一区|