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

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

?? commmodule.cpp

?? MTK平臺COM口通訊的源代碼。很底層的??梢詫W習一下。
?? CPP
字號:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 * CommModule.cpp
 *
 * Project:
 * --------
 *   Maui_SW - phone suite
 *
 * Description:
 * ------------
 *	 This module implements the Interfaces for upper layer
 *	
 * Author:
 * -------
 * Spancer 	(mtk00264)
 *
 *==============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#include "stdafx.h"
#include "commModule.h"
#include "RS232Module.h"

CommModule::CommModule()
{
	m_usc_cb = NULL;
	m_thread = NULL;

	m_baudRate = COMM_RS_115200;

}

CommModule::~CommModule()
{

}

bool CommModule::InternalStart(COMM_FLOW_CTRL flowCtrl, 
							   void(*unSolicitedFunc)(ATResult& result), 
							   const bool Dump,
							   COMMTYPE &commtype)
{
	if(m_thread != NULL)
		return false;

	// Create the RS232 Thread
	try
	{
			m_thread = new Rs232Module;
			m_deviceType =  COMM_RS232;		
	}
	catch(...)
	{
		m_thread = NULL;
		return false;
	}


	if(!m_thread->Start(m_commDevice, (int)m_baudRate, (int) m_eFlowCtrl, unSolicitedFunc, commtype))
	{
		delete m_thread;
		m_thread = NULL;
		return false;
	}

	#ifdef SP_LEVEL1
	TRACE("CommModule::InternalStart() successfully!\n");
	#endif
	return true;
}

bool CommModule::Init(string port, 
					  COMM_BAUD baud, 
					  COMM_FLOW_CTRL flowCtrl,
					  void(*unSolicitedFunc)(ATResult& result), 
					  COMMTYPE &commtype)
{
	#ifdef SP_LEVEL1
	TRACE("CommModule::Init\n");
	TRACE("PORT NUMBER: %s\n", port.c_str());
	#endif
	m_commDevice = port;
	m_baudRate = baud;
	m_eFlowCtrl = flowCtrl;

	m_usc_cb = unSolicitedFunc;

	m_hStopEvt   = NULL;
	m_hStopEvt   = ::CreateEvent(NULL, FALSE, FALSE, NULL);



	bool dump = true;

	if(!InternalStart(flowCtrl, unSolicitedFunc, dump, commtype))
	{
		TRACE(_T("**CommModule::InternalStart() Fail! **\n"));
		return false;
	}
	return true;
}


bool CommModule::DeInit()
{
	// Stop Raw_Buffer
	#ifdef SP_LEVEL1
	TRACE("CommModule::DeInit()\n");
	#endif

	::CloseHandle(m_hStopEvt);
	m_hStopEvt = NULL;

	if( m_thread!=NULL )
	{
		m_thread->Stop();
		delete m_thread;
		m_thread = NULL;
	}
	return true;
}


string CommModule::GetDevice()
{
	return m_commDevice;
}



commDeviceType CommModule::GetDeviceType()
{
	return m_deviceType;
}


bool CommModule::WriteCommand(const char *ptr, int len, int timeout, bool pdu, ATResult& result)
{
	DWORD	state;
	int     t_out;
	#ifdef SP_LEVEL1
	TRACE("CommModule::WriteCommand()-------1\n");
	#endif

#ifdef T_DEBUG
	CTime t = CTime::GetCurrentTime();
	
	TRACE("++Time start in Wrtie command: %d sec\n", t.GetSecond());

	string tempCommand(ptr, len);
	tempCommand[len]='\0';
	TRACE("\tWriteCommand:  %s \n", tempCommand.c_str());
	TRACE("\tTimeOut: %d\n", timeout);
	TRACE("\tPDU: %d\n", pdu);
#endif

	// Help the cancel command, Parser's sync function will check if this event is
	// signaled, if NOt. It will give up some parsed reslt
	::ResetEvent( m_thread->GetCleanedEvent());
	::SetEvent( m_thread->GetInProgressEvent());

#ifdef T_DEBUG
	t = CTime::GetCurrentTime();
	
	TRACE("++Time Before Clean Data: %d sec\n", t.GetSecond());
#endif

	#ifdef SP_LEVEL1
	TRACE("Write Command before Clear Data-----2\n");
	#endif
	m_thread->CleanData();

	#ifdef SP_LEVEL1
	TRACE("Write Command after Clear Data-----4\n");
	#endif
#ifdef T_DEBUG
	t = CTime::GetCurrentTime();

	TRACE("++Time After Clean Data: %d sec\n", t.GetSecond());
#endif

	// Fill the request data to the ATRespParser module
	#ifdef SP_LEVEL1
	TRACE("Fill the expect command: %s    ------5\n", result.expectedCommand.c_str());
	#endif
	m_thread->SetExpectString(result.expectedCommand);
	m_thread->SetPduFlag(pdu);
	m_thread->SetCurCommand((unsigned char *)ptr, len);

	if(timeout == 0)
		t_out = INFINITE;
	else
		t_out = timeout;

    // Write the command characters to the COMM port.
	#ifdef SP_LEVEL1
	TRACE("Write Command to COM port: -----6\n");
	#endif
	if(!m_thread->Write(ptr, len))
	{
		result.result = AT_WRITE_FAIL;
		::SetEvent(m_thread->GetParserEvent());
		::ResetEvent( m_thread->GetInProgressEvent());
		::SetEvent(m_thread->GetResetEvent());
		return false;
	}

	
	state = ::WaitForSingleObject( m_thread->GetWriteEvent(), t_out);

	// Handle the timeout mechanism.
	if(state == WAIT_TIMEOUT)
	{
		result.result = AT_TIMEOUT;
		::ResetEvent( m_thread->GetInProgressEvent());
		::SetEvent(m_thread->GetParserEvent());
		TRACE(_T("*** Wait Responds Time Out ***!\n"));
		::SetEvent(m_thread->GetResetEvent());
		return false;
	}

	// Get the data from ATRespParser
	m_thread->GetResult(result);
	
	#ifdef SP_LEVEL1
	TRACE("Get the result from the parser: -----8\n");
	#endif
#ifdef T_DEBUG
	t = CTime::GetCurrentTime();
	TRACE("++Time End in Wrtie command: %d sec\n", t.GetSecond());
#endif

	::ResetEvent( m_thread->GetInProgressEvent());
	::SetEvent(m_thread->GetParserEvent());
	::ResetEvent( m_thread->GetWriteEvent());	

	if(result.resultLst.size()==0)
	{	
//		ASSERT(false);
		return false;
	}

	if(result.resultLst.size()>0)
	{
        if(result.resultLst[result.resultLst.size()-1].eleLst.size()==0)
		{
			ASSERT(false);
			return false;
		}
	}

	return true;
}


// This command is almost the same as the WriteCommand, it just has the pdu part
bool CommModule::WritePDUCommand(const char *ptr, int len, 
								 const char *pduBuf,  int pduLen,
								 int timeout, bool pdu, ATResult& result)
{
	DWORD	state;
	int     t_out;
	
	#ifdef SP_LEVEL1
	TRACE("CommModule::WritePDUCommand()\n");
	#endif

#ifdef SP_DEBUG
	string tempCommand(ptr, len);
	tempCommand[len]='\0';
	TRACE("\tCommand: %s \n", tempCommand.c_str());

	string tempPdu(pduBuf, pduLen);
	tempPdu[pduLen]='\0';
	TRACE("\tPdu Buffer: %s \n", tempPdu.c_str());
#endif
	
	// Help the cancel command, Parser's sync function will check if this event is
	// signaled, if NOt. It will give up some parsed reslt
	::ResetEvent( m_thread->GetCleanedEvent());
	::SetEvent( m_thread->GetInProgressEvent());


	m_thread->CleanData();
	
	// Set the parser to wait '>' and ' '
	m_thread->SetWaitGtAndSpace(true);

	// Fill the request data to the ATRespParser module
	m_thread->SetExpectString(result.expectedCommand);
    m_thread->SetPduFlag(pdu);
	m_thread->SetCurCommand((unsigned char *)ptr, len);

	if(timeout == 0)
		t_out = INFINITE;
	else
		t_out = timeout;

    // Write the command characters to the COMM port.
	if(!m_thread->Write(ptr, len))
	{
		TRACE(_T("\t***Write Command Fail*** \n"));
		result.result = AT_WRITE_FAIL;
		m_thread->SetWaitGtAndSpace(false);
		::SetEvent(m_thread->GetParserEvent());
		return false;
	}

	// Wait for the  <CR> <LF> <GREATER THAN> <SPACE>
	state = ::WaitForSingleObject( m_thread->GetWaitGtAndSpaceEvent(), t_out);

	if(state == WAIT_TIMEOUT)
	{
		result.result = AT_TIMEOUT;
		::SetEvent(m_thread->GetParserEvent());
		TRACE(_T("\t*** Wait Respond Timeout ****\n"));
		return false;
	}

	::ResetEvent( m_thread->GetWaitGtAndSpaceEvent());


	// Write the Second buffer to the COMM port.
	if(!m_thread->Write(pduBuf, pduLen))
	{
		result.result = AT_WRITE_FAIL;
		m_thread->SetWaitGtAndSpace(false);
		::SetEvent(m_thread->GetParserEvent());
		TRACE(_T("\t*** Write PDU buffer Error ****\n"));
		return false;
	}

	// Wait for result

	state = ::WaitForSingleObject( m_thread->GetWriteEvent(), t_out);

	// Handle the timeout mechanism.
	if(state == WAIT_TIMEOUT)
	{
		result.result = AT_TIMEOUT;
		::SetEvent(m_thread->GetParserEvent());
		return false;
	}

	// Get the data from ATRespParser
	m_thread->GetResult(result);	

	::ResetEvent( m_thread->GetInProgressEvent());
	::SetEvent(m_thread->GetParserEvent());
	::ResetEvent( m_thread->GetWriteEvent());
	
	return true;
}



void CommModule::Stop()
{
	
}


bool CommModule::Suspend()
{
	m_thread->Suspend();
	return true;
}

bool CommModule::Resume()
{
	m_thread->Resume();
	return true;
}

unSolicitedCallBack CommModule::SetCallBack(void(*unSolicitedFunc)(ATResult& result))
{
	unSolicitedCallBack oldTmpCallBack = m_usc_cb;
	
	if(unSolicitedFunc!=NULL)
	{
		m_usc_cb = unSolicitedFunc;

		//Set the call back to rs232 module
		m_thread->SetCallBack(unSolicitedFunc);

		return oldTmpCallBack;
	}

	return m_usc_cb;
}


void CommModule::ResetParser()
{
	m_thread->CleanData();
}


bool CommModule::CancelCommand(const char *ptr, int len)
{
	TRACE(_T("CommModule::CancelCommand()\n"));
    // Write the command characters to the COMM port.
	// This command won't clean the Parser, it will just
	// try to stop the previous command.

		::SetEvent(m_thread->GetResetEvent());
		::SetEvent(m_thread->GetCancelEvent());
	
	if(!m_thread->Write(ptr, len))
	{
		TRACE(_T("*** Cancel Copmmand Fail ***!\n"));

		// TODO: Set the cancel event to stop the current receving command
		::SetEvent(m_thread->GetResetEvent());
		::SetEvent(m_thread->GetCancelEvent());
		return false;
	}
	return true;
}



#if 0
void UncallBack(ATResult& rt)
{
	ATResult result;

	result = rt;
	cout << "Out put the AT Result\n";
	cout << "result: "<< result << endl;
}




void main()
{

    char buffer[128];

	string comport = "COM1";
	ATResult atr;
	CommModule com;


	if(!com.Init( comport, UncallBack))
	{
		cout << "COMM Initialize fail!\n";
		exit(1);
	}

	// ATE0
    string command= "ATE0";
	command += 0x0d;
	strcpy(buffer, command.c_str());

    com.WriteCommand(buffer, strlen(buffer), 0, false, atr);

	//AT+CSMS=?
	command= "AT+CSMS=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CSMS";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	//AT+CSMS?
	command= "AT+CSMS?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CSMS";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	//AT+CMGF=?
	command= "AT+CMGF=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CMGF";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	//AT+CMGF?
	command= "AT+CMGF?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CMGF";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);



	//AT+CPMS?
	command= "AT+CPMS?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CPMS";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);

	//AT+CPMS=?
	command= "AT+CPMS=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CPMS";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	//AT+CSCA?
	command= "AT+CSCA?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CSCA";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	//AT+CSCA?
	command= "AT+CNMI?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CNMI";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);

	command= "AT+CNMI=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CNMI";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	// AT+CMGL=?
	command= "AT+CMGL=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CMGL";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);

	// AT+CMGL=1
	command= "AT+CMGL=1";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CMGL";
	com.WriteCommand(buffer, strlen(buffer), 0, true, atr);



	// AT+CMGR=?
	command= "AT+CMGR=?";
	command += 0x0d;
	strcpy(buffer, command.c_str());
	atr.expectedCommand= "+CMGR";
	com.WriteCommand(buffer, strlen(buffer), 0, false, atr);


	while(1)
	{
		com.WriteCommand( buffer,strlen(buffer), 3000, 0, atr);
		::Sleep(500);
	}



	// Test Read Commands


}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色丁香久综合在线久综合在线观看| 国产69精品久久久久777| 日韩美女啊v在线免费观看| 久久午夜免费电影| 精品播放一区二区| 久久久久九九视频| 中文字幕av不卡| 国产精品私房写真福利视频| 国产日韩精品一区二区三区| 中文字幕欧美国产| 国产精品久久久久影院老司| 中文字幕亚洲在| 亚洲人亚洲人成电影网站色| 亚洲精品国产品国语在线app| 最新久久zyz资源站| 亚洲女女做受ⅹxx高潮| 亚洲最大成人网4388xx| 婷婷成人激情在线网| 久久99国产精品久久| 国产一区二区三区av电影| 成人免费va视频| 91成人免费在线视频| 日韩视频中午一区| 中文欧美字幕免费| 亚洲午夜久久久久久久久电影网 | 宅男噜噜噜66一区二区66| 91精品国产综合久久久蜜臀图片| 欧美一区二区啪啪| 国产丝袜美腿一区二区三区| 一区二区三区色| 美女视频一区二区| av中文一区二区三区| 欧美三级中文字幕| 久久天天做天天爱综合色| 亚洲欧洲成人自拍| 日本不卡高清视频| 91香蕉视频mp4| 欧美一区二区三区在线| 中文字幕av一区二区三区| 午夜欧美电影在线观看| 成人黄色777网| 91精品国产一区二区三区蜜臀| 日韩精品一区二区三区四区| 亚洲欧美一区二区三区国产精品 | 精品国产一区二区三区忘忧草| 最新成人av在线| 国产精品一区二区黑丝| 欧美日本在线播放| 国产精品乱码一区二三区小蝌蚪| 青青草97国产精品免费观看| 色吊一区二区三区| 国产精品不卡视频| 国产美女在线观看一区| 在线不卡免费av| 亚洲综合av网| 91在线视频在线| 欧美激情一区二区三区在线| 免费观看在线色综合| 欧美亚洲尤物久久| 亚洲视频每日更新| 成人av免费在线播放| 精品国产一区二区三区四区四| 视频一区二区中文字幕| 欧美亚洲国产一卡| 亚洲美女在线一区| 不卡一区中文字幕| 国产精品美女久久久久久| 国产精品性做久久久久久| 欧美成人女星排名| 美女视频黄久久| 日韩午夜激情av| 久久99精品网久久| 日韩你懂的在线观看| 全部av―极品视觉盛宴亚洲| 欧美日韩一区二区三区视频| 亚洲欧美经典视频| 色噜噜狠狠成人网p站| 亚洲综合精品自拍| 538prom精品视频线放| 视频一区二区中文字幕| 日韩一区二区免费电影| 免费成人你懂的| 久久综合成人精品亚洲另类欧美| 久久99精品久久久| 国产人伦精品一区二区| 粉嫩aⅴ一区二区三区四区| 亚洲欧洲性图库| 在线一区二区三区四区五区| 亚洲高清免费视频| 欧美一区二区观看视频| 国产一区二区三区久久久| 国产亚洲自拍一区| 色婷婷久久99综合精品jk白丝 | 日韩欧美一二区| 精品伊人久久久久7777人| 久久免费电影网| 一本大道久久a久久综合婷婷| 一区二区久久久久久| 91精品在线观看入口| 国产传媒欧美日韩成人| 亚洲蜜臀av乱码久久精品| 91精品国产麻豆| 国产一区二区美女| 樱桃国产成人精品视频| 91精品欧美久久久久久动漫 | 欧美日韩另类一区| 麻豆91在线播放| 亚洲欧洲韩国日本视频| 欧美一级生活片| 国产成人99久久亚洲综合精品| 一区二区三区四区亚洲| 日韩你懂的在线观看| 色琪琪一区二区三区亚洲区| 六月丁香综合在线视频| 日韩美女视频一区二区| 精品国产污网站| 91成人在线免费观看| 国产精品资源在线看| 天天操天天综合网| 欧美国产日韩a欧美在线观看| 欧美三区在线视频| a亚洲天堂av| 国产一区二区在线观看视频| 亚洲午夜久久久久久久久电影网| 国产午夜亚洲精品羞羞网站| 91精品国产综合久久福利| 91看片淫黄大片一级在线观看| 久久99最新地址| 日韩综合小视频| 亚洲麻豆国产自偷在线| 久久久www免费人成精品| 91精品国产高清一区二区三区蜜臀| 成人午夜av影视| 国产自产高清不卡| 奇米精品一区二区三区四区| 亚洲综合一二三区| 亚洲日本一区二区| 亚洲国产高清aⅴ视频| 欧美精品一区二区在线观看| 欧美色精品在线视频| 91女神在线视频| 成人激情视频网站| 国产激情视频一区二区三区欧美 | 欧美高清性hdvideosex| 91天堂素人约啪| 99久久精品国产网站| 粉嫩一区二区三区在线看| 国内成+人亚洲+欧美+综合在线 | 国产欧美视频一区二区| 欧美成人国产一区二区| 欧美一区二区啪啪| 日韩三级中文字幕| 欧美一区二区三区四区高清| 91精品国产综合久久久久久漫画| 欧美日韩免费观看一区二区三区| 日本精品视频一区二区三区| 日本电影欧美片| 91丝袜国产在线播放| 成人av在线资源| 99精品久久只有精品| 91在线观看地址| 欧美最猛性xxxxx直播| 欧美精品乱码久久久久久按摩 | 国产精品888| 东方aⅴ免费观看久久av| 福利一区二区在线| bt7086福利一区国产| 91久久线看在观草草青青| 在线观看成人免费视频| 欧美一区二区三区男人的天堂| 欧美一区二区免费视频| 久久精品亚洲一区二区三区浴池 | 亚洲国产乱码最新视频 | 不卡av电影在线播放| 91在线高清观看| 欧美无砖砖区免费| 日韩一级二级三级| 国产欧美一区二区精品性| 亚洲精品一二三区| 久久99精品一区二区三区| 成人性生交大片| 在线视频一区二区免费| 欧美丰满少妇xxxbbb| 久久青草国产手机看片福利盒子 | 天堂一区二区在线| 国产成人精品亚洲午夜麻豆| 日本高清不卡一区| 久久精品亚洲国产奇米99| 亚洲综合一二区| 国产成人免费视频网站| 欧美性大战久久久久久久蜜臀| 欧美成人bangbros| 有坂深雪av一区二区精品| 国产综合成人久久大片91| 欧美中文字幕亚洲一区二区va在线 | 日韩一级黄色大片| 亚洲视频在线观看一区| 精油按摩中文字幕久久| 欧美中文字幕一二三区视频| 欧美国产日本韩|