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

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

?? serialappdlg.cpp

?? 利用cserial串口類(lèi)實(shí)現(xiàn)串口通信和文件的傳輸。
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// SerialAppDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SerialAppDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int CSerialAppDlg::file=0;
int CSerialAppDlg::msg=0;
 

/////////////////////////////////////////////////////////////////////////////
// CSerialAppDlg dialog


CSerialAppDlg::CSerialAppDlg(CWnd* pParent /*=NULL*/)
	: CExpandingDialog(CSerialAppDlg::IDD, pParent,IDC_DEFAULTBOX,IDC_DETAILS,
			_T("Show >>"),_T("Hide <<"))
{
	//{{AFX_DATA_INIT(CSerialAppDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_strReceived.Empty();
	m_nComm=0;
	m_nBandRate=19200;
	m_nDataBits=8;
	m_nStopBits=1;
	m_cParity='N';


	fsend=fopen("C:\\fsend","wb");
	frec=fopen("C:\\frec","wb");
}


CSerialAppDlg::~CSerialAppDlg()
{
	CExpandingDialog::~CExpandingDialog();
	
	//to debug
	fclose(fsend);
	fclose(frec);
}

void CSerialAppDlg::DoDataExchange(CDataExchange* pDX)
{
	CExpandingDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSerialAppDlg)
	DDX_Control(pDX, IDC_PROGRESS, m_ProgressCtrl);
	DDX_Control(pDX, IDC_MSG, m_wndInput);
//	DDX_Control(pDX, IDC_BTNSEND, m_btnSend);
	DDX_Control(pDX, IDC_CHAT, m_wndShow);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSerialAppDlg, CExpandingDialog)
	//{{AFX_MSG_MAP(CSerialAppDlg)
	ON_WM_PAINT()
	ON_COMMAND(ID_CONFIG, OnConfig)
	ON_COMMAND(ID_CONNECT, OnConnect)
	ON_COMMAND(ID_DISCONNECT, OnDisconnect)
	ON_BN_CLICKED(IDC_BTNSEND, OnBtnsend)
	ON_MESSAGE(WM_COMM_RXCHAR, OnReceiveByte)
	ON_MESSAGE(WM_COMM_CTS_DETECTED, OnCTSDetected)
	ON_MESSAGE(WM_MSG_READ, OnReadProcess)
	ON_BN_CLICKED(IDC_SENDFILE_RADIO, OnSendfileRadio)
	ON_BN_CLICKED(IDC_FILESTART, OnFilestart)
	ON_BN_CLICKED(IDC_SENDFILECHOOSE, OnSendfilechoose)
	ON_BN_CLICKED(IDC_RECFILECHOOSE, OnRecfilechoose)
	ON_BN_CLICKED(IDC_RECFILE_RADIO, OnRecfileRadio)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSerialAppDlg message handlers

void CSerialAppDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
//		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CExpandingDialog::OnPaint();
	}

}

BOOL CSerialAppDlg::OnInitDialog() 
{
	CExpandingDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
		ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon


	// TODO: Add extra initialization here

	CenterWindow();

	//create the tool bar
	if(!m_wndToolBar.Create(this,
				WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_HIDE_INPLACE|CBRS_SIZE_DYNAMIC)
				||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){
		TRACE0("Failed to create the tool bar!\n");
		return -1;
	}
	m_wndToolBar.GetToolBarCtrl().ModifyStyle(0,TBSTYLE_FLAT);
	m_wndToolBar.MoveWindow(6,4,385,30);

	DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
	m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);
	
	DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONNECT));
	dwStyle |= TBSTYLE_DROPDOWN;
	m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONNECT), dwStyle);


	// init the port
	if (m_Port.InitPort(this, 1, 9600 ))
		;
//		m_Port.StartMonitoring();
	else
	{
		AfxMessageBox("Can't init COM1");
		return FALSE;
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSerialAppDlg::OnConfig() 
{
	// TODO: Add your command handler code here
	CConfigDlg* dlg = new CConfigDlg(this, &m_Port);
	dlg->m_strSendBuffer.Format("%d", m_Port.GetWriteBufferSize());
	
	DWORD dwCommEvents = m_Port.GetCommEvents();

	if (dlg->DoModal() == IDOK)
	{

		switch(dlg->m_strComm[3])
		{
		case '1':
			m_nComm=0;
			break;
		case '2':
			m_nComm=1;
			break;
		case '3':
			m_nComm=2;
			break;
		case '4':
			m_nComm=3;
			break;
		default:
			break;
		}
		m_Port.m_nPortNr=m_nComm+1;
		
		this->m_nBandRate=	m_Port.m_dcb.BaudRate=	atoi(dlg->m_strBaudRate);
		this->m_cParity=	dlg->m_strParity[0];
		switch(m_cParity)
		{
		case 'N':
			m_Port.m_dcb.Parity=NOPARITY;
			break;
		case 'O':
			m_Port.m_dcb.Parity=ODDPARITY;
			break;
		case 'E':
			m_Port.m_dcb.Parity=EVENPARITY;
			break;
		case 'M':
			m_Port.m_dcb.Parity=MARKPARITY;
			break;
		case 'S':
			m_Port.m_dcb.Parity=SPACEPARITY;
			break;
		default:
			break;		
		}

		this->m_nDataBits=	m_Port.m_dcb.ByteSize=	atoi(dlg->m_strDataBits);
		this->m_nStopBits=	m_Port.m_dcb.StopBits=	atoi(dlg->m_strStopBits);
		this->m_dwCommEvents=	dwCommEvents;
		this->m_nSendBuffer=m_Port.m_nWriteBufferSize=	atoi(dlg->m_strSendBuffer);
		if(m_Port.m_szWriteBuffer)
			delete m_Port.m_szWriteBuffer;
		m_Port.m_szWriteBuffer=new BYTE[m_Port.m_nWriteBufferSize];

		if(!(m_Port.InitPort(this,m_nComm+1,m_nBandRate,m_cParity,m_nDataBits,m_nStopBits)))
		{
			char error[100];
			sprintf(error,"COM%d被占用或沒(méi)有該COM口,請(qǐng)改用其它COM口!",m_nComm);
			AfxMessageBox(error);
		}
	}
	
	delete dlg;
}

void CSerialAppDlg::OnConnect() 
{
	// TODO: Add your command handler code here

	if(m_Port.m_bThreadAlive) return;
	if (m_Port.InitPort(this, m_nComm + 1, m_nBandRate, m_cParity, m_nDataBits, m_nStopBits ))
	{
		m_Port.StartMonitoring();
		m_wndShow.ShowMessage("Status: ","串口已打開(kāi)");
	}
	else
	{
		// port not found
		AfxMessageBox("該COM口不可用,請(qǐng)改用其它COM口");
	}
}

void CSerialAppDlg::OnDisconnect() 
{
	// TODO: Add your command handler code here
	m_Port.StopMonitoring();
}

void CSerialAppDlg::OnBtnsend() 
{
	// TODO: Add your control notification handler code here
	CString str;
	m_wndInput.GetWindowText(str);
	WriteMsg(str);
	m_wndShow.ShowMessageThis(str);
	m_wndInput.SetWindowText("");
}

LONG CSerialAppDlg::OnReceiveByte(UINT wParam,LONG lParam)
{
	if(CSerialAppDlg::file==1)
	{
		m_strReceived+=(char)wParam;
		return 0;
	}
	switch((char)wParam)
	{
	case 3:				//STR[0]:
		if(msg==0)
		{
			msg=1;
			m_strReceived.Empty();	//to clear the buffer ;maybe need edit
		}
		else if(msg==1)
		{
			msg=0;
			::SendMessage(m_hWnd, WM_MSG_READ, (WPARAM) 0, (LPARAM) 0);
		}
		break;
	case 1:			//SYN[0]:	//message中不可能出現(xiàn)SYN[0],所以未加if(msg==0)語(yǔ)句校驗(yàn)
		if(file==0)
		{
			m_strReceived.Empty();
			m_strReceived+=(char)wParam;
			CSerialAppDlg::file=1;
//			this->WriteCommBlock((unsigned char*)ACK,1);
			CWinThread * fileThread=AfxBeginThread(CSerialAppDlg::ReceiveThread,this,THREAD_PRIORITY_HIGHEST); 
		}
		break;
	
	default:
		m_strReceived+=(char)wParam;
		break;
	}	
	return 0;
}


LONG CSerialAppDlg::OnReadProcess(UINT wParam,LONG lParam)
{
	UINT length;
	if(wParam==0)
		length=nSendBuffer;
	else
		length=wParam;
	BYTE* pBlock=new BYTE[length];
	memset(pBlock,0,length);

	int nRead=ReadCommBlock(pBlock,length);
	m_wndShow.ShowMessageThat(CString(pBlock));
	return nRead;
}

LONG CSerialAppDlg::OnCTSDetected(UINT wParam,LONG lParam)
{
	return 0;
}


int CSerialAppDlg::ReadCommBlock(unsigned char* pBlock, int nMaxLength)
{
	//maybe need delay
//?	memset(pBlock,0,nMaxLength);
	if(!m_Port.m_bBlockRead)
	{
		if(m_strReceived.GetLength()==0) return 0;
	
		int nRec=m_strReceived.GetLength();
		int nLength = (nMaxLength>nRec)? nRec : nMaxLength;
		CString strCopy= m_strReceived;
		char *temp=strCopy.GetBuffer(m_strReceived.GetLength()+1);
		memcpy((char*)pBlock,temp,nLength);

		//to debug
		fwrite(pBlock,1,nLength,frec);
	
		strCopy.ReleaseBuffer();

		m_strReceived.Delete(0,nLength);
		return nLength;
	}
	else
	{
		int templen=nPackSize+2;
		BYTE* pRead=CSerialPortEx::ReadBlock(&m_Port,templen);
		memcpy(pBlock,pRead,templen);

		fwrite(pBlock,1,templen,frec);
		
		delete pRead;
		return templen;
	}
}


//DEL void CSerialAppDlg::TransFile(char *pBlock, int length)
//DEL {
//DEL 	
//DEL }

BOOL CSerialAppDlg::ReceiveFile()
{
	CString path;
	CWnd* pWnd = GetDlgItem(IDC_EDIT_RECFILE);
	pWnd->GetWindowText(path);

	if(path=="")
	{
		CFileDialog dlg(FALSE);
		if(dlg.DoModal()==IDOK)
		{
			path = dlg.GetPathName();
			CWnd* pWnd = GetDlgItem(IDC_EDIT_RECFILE);
			pWnd->SetWindowText(path);
		}
	}
	if(path=="") return FALSE;

	const	int	MAXBLOCK=nPackSize+2; 

	int		step;
	FILE	*RSF;
	long	readlen,templen;
	WORD	check;

	DWORD	nLength,start,ReSendSum,ci;

	BOOL	bTimeout;

	BYTE    abIn[ MAXBLOCK],*buf,*bufp,*old_bufp;

	BOOL    bRet=TRUE; 
   	WORD    nRecord=0;
	WORD	totalRec=0;
	WORD	initRec=10;
	
	ReSendSum=3; 


   	RSF=fopen(path,"wb");//"wb" for append
	if(!RSF)
	{
		return FALSE;
	}
	buf=(BYTE*)new BYTE[MAXBLOCK*initRec];//
	if(!buf)
	{
		fclose(RSF);
		return FALSE;
	}

    step=0;
	totalRec=0;
	
	bufp=buf;
	nLength=0;
	start=GetTickCount();

	bTimeout=FALSE;

	while((nLength==0)&&(!bTimeout)&&(!m_Port.m_bBlockRead))
	{
		nLength=m_strReceived.GetLength();
		bTimeout = (GetTickCount()-start>=SYNTIME);
	}

	if (bTimeout) {
//		SendCommMsg(CSM_TIMEOUT,0);
//		return FALSE;
		bRet=FALSE;
		goto clearrub;
	}

	do{
		switch(step)
		{
			case 0:	
				    nLength = ReadCommBlock( (unsigned char*) abIn, MAXBLOCK );
					if((abIn[0]==SYN[0])) 
					{
						WriteCommBlock( (unsigned char*)ACK, 1);
						step=1;
						ReSendSum=3; 
						start=GetTickCount();					
					}
					break;

			case 1:
					bTimeout=FALSE;
					nLength=0;
					while((nLength<6)&&(!bTimeout))
					{
						nLength = m_strReceived.GetLength();
						bTimeout = (GetTickCount()-start>=RSDTIME);
					}
					if (bTimeout) 
					{
//						SendCommMsg(CSM_TIMEOUT,0);
//						return FALSE;
						bRet=FALSE;
						goto clearrub;
					}

					nLength = ReadCommBlock(abIn, MAXBLOCK );
					if( (nLength==6) &&(abIn[0]==0) && ( (abIn[1]==0) || (abIn[1]==1) )) 
					{	
						
						start=GetTickCount();	
						check=0;
						check+=abIn[2]+(abIn[2]&0x80?0xff00:0);
						check+=abIn[3]+(abIn[3]&0x80?0xff00:0);
						
						if((BYTE(check>>8)==abIn[4])&&(BYTE(check&0xff)==abIn[5]))
						{
							ReSendSum=3; 
							memcpy(bufp,abIn,6);
							bufp+=6;

							if(abIn[1]==1)
							{
								if((abIn[2]==0)&&(abIn[3]==0)&&(abIn[4]==0)&&(abIn[5]==0)) 
								{
									step=4;		//完結(jié)
								}
								else
								{
									step=1;
									totalRec=((WORD)abIn[2]<<8)+(WORD)abIn[3];
									if(totalRec>initRec)
									{
										BYTE* newbuf=new BYTE[totalRec*MAXBLOCK];
										if(!newbuf)
										{
											bRet=FALSE;
											goto clearrub;
										}
										memcpy(newbuf,buf,initRec*MAXBLOCK);
										bufp=newbuf+(bufp-buf);
										delete buf;
										buf=newbuf;
										newbuf=NULL;

										this->m_ProgressCtrl.SetRange(0,totalRec);
									}
								}
							}
							
							else
							{
								//當(dāng)傳輸只有一個(gè)字節(jié)的文件時(shí)將出現(xiàn)問(wèn)題
//								if((abIn[3]==1)&&(abIn[4]==0)&&(abIn[5]==1)) 
//								{
//									step=4;
	//?								fwrite("\0\0\0\x1\0\x1",1,6,RSF);
//									//完結(jié)
//								}
//								else
//								{	
									step=3;
									templen=(((long)abIn[2]<<8)+(long)abIn[3])+(long)2;
									m_Port.m_bBlockRead=TRUE;
//								}
							}

							WriteCommBlock((unsigned char*)ACK, 1);
							break;
						}
					}
					if(ReSendSum==0)
					{
//						AfxMessageBox("Fail");,0);
//						return FALSE;
						bRet=FALSE;
						goto clearrub;
					}
					step=1;
					ReSendSum--;
					WriteCommBlock((unsigned char*)RESEND, 1);
					break;

					
			//開(kāi)始下一包,并記錄進(jìn)度
			case 2:
					nLength = ReadCommBlock(abIn, MAXBLOCK );
					if(abIn[0]==SYN[0])
					{	
						start=GetTickCount();
						ReSendSum=3;
						step=1;

						nRecord++;
						if(nRecord)				   
							this->m_ProgressCtrl.SetPos(nRecord);	 
						
						WriteCommBlock( (unsigned char*)ACK, 1);
					}
					break;
			
			//讀包內(nèi)數(shù)據(jù)
			case 3:
					step=2;
					check=0;
					readlen=0;
					old_bufp=bufp;
					start=GetTickCount();
					do{	
						nLength = ReadCommBlock( (unsigned char*) abIn, MAXBLOCK );
						if(nLength>0)
						{	

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产sm最大网站| 精品一二三四在线| 亚洲人123区| 国产精品网友自拍| 久久久久久久久久久久电影| 精品日韩一区二区三区免费视频| 欧美一区二区三区四区视频| 欧美精品日日鲁夜夜添| 欧美日韩久久一区二区| 欧美日韩综合不卡| 欧美日韩在线综合| 欧美疯狂做受xxxx富婆| 7777精品伊人久久久大香线蕉的| 在线不卡的av| 日韩欧美在线网站| 亚洲精品一区在线观看| 日韩1区2区日韩1区2区| 日产国产欧美视频一区精品| 日韩不卡一二三区| 国内欧美视频一区二区| 国产99精品国产| 99这里都是精品| 在线观看www91| 一区二区三区小说| 亚洲最色的网站| 日韩国产欧美一区二区三区| 久久精品国产99久久6| 国产一区二区三区四区五区美女 | 蜜臀av性久久久久av蜜臀妖精| 男人的天堂久久精品| 韩国av一区二区三区四区| av一区二区不卡| 欧美日韩在线免费视频| 日韩一区二区电影网| 国产日韩影视精品| 中文字幕日韩一区二区| 亚洲成a人v欧美综合天堂下载| 奇米一区二区三区av| 成人午夜免费av| 欧洲生活片亚洲生活在线观看| 欧美一区二区三区免费观看视频| 久久伊人蜜桃av一区二区| 亚洲天堂成人网| 免费一级欧美片在线观看| 成人精品免费视频| 欧美日韩黄色影视| 久久久久9999亚洲精品| 亚洲激情五月婷婷| 另类小说图片综合网| 成人app下载| 日韩免费电影一区| 中文字幕日韩一区二区| 免费成人美女在线观看.| 大尺度一区二区| 9191精品国产综合久久久久久| 国产精品婷婷午夜在线观看| 天堂va蜜桃一区二区三区漫画版| 国产激情精品久久久第一区二区 | 国产精品不卡一区二区三区| 午夜精品久久久久久久久久久| 国产精品18久久久久久久网站| 欧美亚洲尤物久久| 中文字幕欧美三区| 日本在线播放一区二区三区| 色美美综合视频| 久久久综合视频| 蜜桃视频一区二区三区| 日本高清不卡一区| 亚洲国产高清不卡| 久久精品国产一区二区三| 色激情天天射综合网| 久久久久久免费毛片精品| 日韩不卡在线观看日韩不卡视频| 91小视频在线免费看| 久久久久国色av免费看影院| 日韩精彩视频在线观看| 国产丝袜欧美中文另类| 婷婷久久综合九色综合伊人色| 99久久综合色| 久久精品视频在线看| 奇米影视在线99精品| 欧美曰成人黄网| 亚洲色图欧美在线| 成人国产视频在线观看| 久久久久99精品一区| 激情丁香综合五月| 91精品国产综合久久久蜜臀粉嫩| 亚洲高清免费视频| 91福利视频网站| 亚洲精品成a人| 色综合视频一区二区三区高清| 欧美激情综合在线| 国产麻豆成人精品| 精品久久国产字幕高潮| 久久精品国产亚洲a| 欧美一卡2卡3卡4卡| 日精品一区二区三区| 欧美日韩一区二区三区在线看| 亚洲精品免费电影| 99视频精品免费视频| 国产精品国产三级国产普通话99| 国产精品一二三四五| 久久久久国产精品麻豆ai换脸| 国产一区二区美女诱惑| 久久亚洲一区二区三区四区| 国产在线播放一区二区三区| 久久女同精品一区二区| 国产不卡在线播放| 国产女同性恋一区二区| 粉嫩一区二区三区性色av| 国产欧美日韩视频一区二区| 粉嫩蜜臀av国产精品网站| 国产精品另类一区| 91亚洲永久精品| 一区二区免费视频| 欧美日韩日日摸| 麻豆91在线播放免费| 久久久高清一区二区三区| 福利一区福利二区| 亚洲视频网在线直播| 欧美色精品天天在线观看视频| 日韩av在线免费观看不卡| 欧美成人精精品一区二区频| 国产精品一线二线三线精华| 国产精品国产三级国产三级人妇| 91高清视频在线| 男男视频亚洲欧美| 久久精品日产第一区二区三区高清版| 国产+成+人+亚洲欧洲自线| 中文字幕日韩精品一区 | 欧美本精品男人aⅴ天堂| 国产最新精品精品你懂的| 国产情人综合久久777777| 成人黄色国产精品网站大全在线免费观看| 亚洲蜜臀av乱码久久精品| 亚洲成av人片一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 奇米色一区二区三区四区| 久久免费视频一区| 99久久99精品久久久久久 | 麻豆视频一区二区| 欧美激情一区二区三区四区| 91久久精品一区二区二区| 免费观看久久久4p| 日本一区二区三级电影在线观看| 色综合一个色综合亚洲| 精品国产sm最大网站免费看| av成人老司机| 日本91福利区| 亚洲天堂av一区| 日韩欧美国产精品| 91在线porny国产在线看| 在线观看亚洲成人| 精品在线视频一区| 亚洲一区二区综合| 久久一夜天堂av一区二区三区| 在线看不卡av| 国产乱子轮精品视频| 亚洲成a人片综合在线| 国产日韩影视精品| 4438x亚洲最大成人网| 成人一道本在线| 免费成人在线视频观看| 亚洲日本va午夜在线影院| 久久综合视频网| 欧美性xxxxxxxx| 成人av动漫在线| 九一九一国产精品| 亚洲大片免费看| 欧美激情在线看| 欧美不卡一二三| 欧美男男青年gay1069videost| gogogo免费视频观看亚洲一| 免费在线成人网| 亚洲午夜精品在线| 亚洲欧洲av另类| 久久精品亚洲麻豆av一区二区 | 99久久精品免费看国产免费软件| 美女网站色91| 亚洲国产精品天堂| 亚洲人精品一区| 国产欧美日韩中文久久| 日韩女优电影在线观看| 欧美日韩一区二区欧美激情| 91老司机福利 在线| 成人午夜av在线| 国产一区 二区| 精品一区在线看| 日韩vs国产vs欧美| 天天做天天摸天天爽国产一区| 亚洲情趣在线观看| 国产精品视频在线看| 久久久国产一区二区三区四区小说 | 色婷婷久久综合| eeuss鲁片一区二区三区| 国产精品91xxx| 国产99久久久国产精品潘金| 国产揄拍国内精品对白| 久久91精品国产91久久小草| 麻豆成人免费电影|