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

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

?? hpi.c

?? 利用51單片機對u盤進行讀寫操作
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "common.h"
#include "TPBULK.H"
#include "HPI.H"
#include "HAL.H"
#include "Fat.h"
#include "Fat32.h"
#include "HPI32.H"

extern FLAGS bdata bFlags;
extern unsigned char xdata DBUF[BUFFER_LENGTH];
//////////////////////////////////////////
unsigned char xdata UARTBUF[UARTBUF_LENGTH];
SYS_INFO_BLOCK xdata DeviceInfo;
FILE_INFO xdata ThisFile;

Command_Def xdata Command;
Response_Def xdata Response;

unsigned int xdata DirStartCluster,NowCluster;
unsigned long xdata NowSector;
ShowFileName_Def xdata ShowFileName[MaxLFNum];	//long file struct
/////////////////////////////////////////////

void UartSendRsp(void)
{
	unsigned int i;
	unsigned char *pBuf=(unsigned char *)&Response;
	MCU_LED4=0;
	for(i=0;i<5;i++)
		ComSendByte(*(pBuf+i));

	if(Response.len!=0)
		{
		for(i=0;i<Response.len;i++)
			ComSendByte(UARTBUF[i]);
	    }
	MCU_LED4=1;
}

unsigned char UartHandler(void)
{
  Response.Result=0;Response.len=0;
  switch(Command.CLass)
  {
    case 0x00:	//List		
    	Response.Result=List();
    	break;  
  	case 0x01:	//Open File
 		Response.Result=OpenFile(Command.Parameter);		
     	break;
	case 0x02:	//Read File		
		Response.Result=ReadFile(Command.len,UARTBUF);
		break;   
    case 0x03:	//Set Pointer
		Response.Result=SetFilePointer(Command.len);	
		break;
	case 0x04:	//Great File
		Response.Result=OpenFile(Command.Parameter);
		if(Response.Result)
			{
			Response.Result=SetFilePointer(ThisFile.LengthInByte);
			}
		else
    		Response.Result=CreateFile(Command.len,Command.Parameter,UARTBUF);    	
    	break; 
	case 0x05:	//Write File
    	Response.Result=WriteFile(Command.len,UARTBUF);
    	break; 
    case 0x06:	//Remove File
    	ThisFile.bFileOpen=0;	
    	Response.Result=RemoveFile(Command.Parameter);
    	break; 	
	case 0x07:	//Get Space    	
    	Response.Result=GetCapacity();
    	break;     
	case 0x08:  //DetectDisk
		if(bFlags.bits.SLAVE_IS_ATTACHED)
			Response.Result=1;
		break;
	case 0x09:  //Great Dir
		Response.Result=DownDir(Command.Parameter);
		if(!Response.Result)
			Response.Result=CreateDir(Command.len,Command.Parameter,UARTBUF);    	
    	break; 
	case 0x0a:	//Down Dir
		Response.Result=DownDir(Command.Parameter);
		break;
	case 0x0b:	//Up Dir
		Response.Result=UpDir();
		break;	
	case 0x0c:	//Up RootDir
		Response.Result=UpRootDir();
		break;	
  }

  UartSendRsp();
  ///////////////////////////////
  return TRUE;  
}

unsigned char List(void)
{
	unsigned int item,i;
	unsigned char k,bstop,sector;
	unsigned char Lcount,Ncount,base;
	
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;			
	item=0;
	bstop=0;
	////////////////////////////////////
	Lcount=0;
	for(i=0;i<MaxLFNum;i++)
		{
		ShowFileName[i].LongName[0]=0x00;
		ShowFileName[i].LongName[1]=0x00;
		}
	/////////////////////////////////////

	if(DirStartCluster==0)	//Root Dir
	{
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {   
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			return FALSE;			
		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
			{
			if(DBUF[i]==0x00)
				{bstop=1;
				break;}
			else if(DBUF[i]==0xE5)
				continue;			
			else
				{
				for(k=0;k<32;k++)
					UARTBUF[item*32+k]=DBUF[i+k];
				item=item+1;
				/////////////////////////////////
				if(DBUF[i+11]==0x0F)
					{
					base=((DBUF[i]&0x1F)-1)*26;
					if(base<=224)
					{
					Ncount=0;
					for(k=1;k<11;k++)
						{
						ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
						Ncount++;
						}
					for(k=14;k<26;k++)
						{
						ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
						Ncount++;
						}
					for(k=28;k<32;k++)
						{
						ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
						Ncount++;
						}
					}
					}
				else
					{
					for(k=0;k<32;k++)
						ShowFileName[Lcount].item[k]=DBUF[i+k];
				    Lcount++;					
					}			
				/////////////////////////////////
				}
			}
		
		if(bstop==1)break;		
	    }
	Response.len=item*32;
	return TRUE;
	}
//////////////////////////////////////////////////////////////////   
	else		//Son Dir
	{
		NowCluster=DirStartCluster;		
		do
		{
			NowSector=FirstSectorofCluster(NowCluster);
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;				
				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
					if(DBUF[i]==0x00)
						{bstop=1;break;}
					else if(DBUF[i]==0xE5)
						continue;			
					else
					{
						for(k=0;k<32;k++)
							UARTBUF[item*32+k]=DBUF[i+k];
						item=item+1;
						/////////////////////////////////
						if(DBUF[i+11]==0x0F)
						{
							base=((DBUF[i]&0x1F)-1)*26;
							if(base<=224)
							{
								Ncount=0;
								for(k=1;k<11;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
								for(k=14;k<26;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
								for(k=28;k<32;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
							}
						}
						else
						{
							for(k=0;k<32;k++)
								ShowFileName[Lcount].item[k]=DBUF[i+k];
				 		   Lcount++;							
						}			
				/////////////////////////////////
					}
				}
				if(bstop==1)break;		
	    	}

			if(bstop==1)break;
	
			NowCluster=GetNextClusterNum(NowCluster); 
			
		}while(NowCluster<=0xffef);

	Response.len=item*32;
	return TRUE;
	}
}

unsigned char OpenFile(unsigned char *pBuffer)
{
	unsigned int i;
	unsigned char j,bstop,sector;
		
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;			
	ThisFile.bFileOpen=0;

	if(DirStartCluster==0)	//Root Dir
	{
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {   
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			return FALSE;
		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
			{
			if(DBUF[i]==0x00)
				return FALSE;
			j=0;
			while(DBUF[i+j]==*(pBuffer+j))
				{
				 j=j+1;
				 if(j>10)
				 	break;
				}
			
			if(j>10&&(DBUF[i+11]&0x10)!=0x10)
			    {
			    for(j=0;j<32;j++)
			    	UARTBUF[j]=DBUF[i+j];		    
			    bstop=1;
			    break;}
			
			}
		if(bstop==1)break;
		}
	    
	    if(sector>=DeviceInfo.BPB_RootEntCnt)
	    	return FALSE;	
	}
///////////////////////////////////////////////////////////////////////////////////////
	else
	{
		NowCluster=DirStartCluster;		
		do
		{
			NowSector=FirstSectorofCluster(NowCluster);
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;				
				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
					if(DBUF[i]==0x00)
						return FALSE;
					j=0;
					while(DBUF[i+j]==*(pBuffer+j))
					{
						 j=j+1;
						 if(j>10)
						 	break;
					}
					if(j>10&&(DBUF[i+11]&0x10)!=0x10)
				    	{ 
						for(j=0;j<32;j++)
			    			UARTBUF[j]=DBUF[i+j];			    
			    		bstop=1;
			    		break;
						}
				}
				if(bstop==1)break;		
	    	}
			if(bstop==1)break;	
			NowCluster=GetNextClusterNum(NowCluster);			
		}while(NowCluster<=0xffef);
		
		if(NowCluster>0xffef)
	    	return FALSE;
	}

	ThisFile.bFileOpen=1;
	ThisFile.StartCluster=LSwapINT16(UARTBUF[26],UARTBUF[27]);
	ThisFile.LengthInByte=LSwapINT32(UARTBUF[28],UARTBUF[29],UARTBUF[30],UARTBUF[31]);
	ThisFile.ClusterPointer=ThisFile.StartCluster;	
	ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
	ThisFile.OffsetofSector=0;
	ThisFile.SectorofCluster=0;	
	ThisFile.FatSectorPointer=0;	
	ThisFile.pointer=0;
	
	Response.len=32;
	return TRUE;	
}

unsigned char ReadFile(unsigned long readLength,unsigned char *pBuffer)
{

	unsigned int len,i;
	unsigned int tlen;	
	unsigned long blen;

	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;		
	if(!ThisFile.bFileOpen)
		return FALSE;

	blen=readLength;

	tlen=0;
	if(readLength>MAX_READ_LENGTH)
		return FALSE;	
	
	if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
		return FALSE;	
		
	////////////////////////////////////////////		
		while(readLength>0)
		{
		   if(readLength+ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec)
		   	len=DeviceInfo.BPB_BytesPerSec;
		   else
		   	len=readLength+ThisFile.OffsetofSector;
		   
		   //////////////////////////////////////////////////////
		   if(ThisFile.OffsetofSector>0)
		   	{
		   	if(RBC_Read(ThisFile.SectorPointer,1,DBUF))
		   		{
		   		
		   		len=len-ThisFile.OffsetofSector;
		   		for(i=0;i<len;i++)
		   			
		   			*(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
		   		ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
		   		}
		   	else
		   		return FALSE;		   		
		   	}
		   else
		   	{
		   		if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+tlen))
		   				return FALSE;	
		   		ThisFile.OffsetofSector=len;
		   	}
		   ////////////////////////////////////////////////////////////
		   readLength-=len;
		   tlen+=len;
		  
		   /////////////////////////////////////////////////////////
		   if((ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)&&(tlen+ThisFile.pointer<ThisFile.LengthInByte))
		   {	
		   	ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
		   	ThisFile.SectorofCluster+=1;
		   	if(ThisFile.SectorofCluster>DeviceInfo.BPB_SecPerClus-1)
		   	{
		   		ThisFile.SectorofCluster=0;
		 		 ThisFile.ClusterPointer=GetNextClusterNum(ThisFile.ClusterPointer);
		 		 if(ThisFile.ClusterPointer>0xffef)
		 		 	   return FALSE;			 		 	
		 		 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.ClusterPointer); 	
		   	}
		   	else
		   		ThisFile.SectorPointer=ThisFile.SectorPointer+1;
		    }
		   //////////////////////////////////////////////////////////////////
		}//end while
		
	ThisFile.bFileOpen=1;
	ThisFile.pointer+=tlen;
	//////////////////////////////////////////////
	Response.len=blen;

	return TRUE;
}

unsigned char SetFilePointer(unsigned long pointer)
{
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;		
	if(!ThisFile.bFileOpen)
		return FALSE;		
	///////////////////////////////////////////////////////////
	ThisFile.pointer=pointer;
	if(ThisFile.pointer>ThisFile.LengthInByte)
		return FALSE;	

	if(!GoToPointer(ThisFile.pointer))
	{
	ThisFile.bFileOpen=0;
	return FALSE;	
	}
	//////////////////////////////////////////////
	return TRUE;
}

unsigned char CreateFile(unsigned long len,unsigned char *pBuffer,unsigned char *pName)
{
	unsigned int sector,i,j,DirCount;
	unsigned int cnum,ClusterPointer;
	unsigned char xdata bstop,InByte,bwrite;
	
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;
	if((len%32)!=0)
		return FALSE;
	if((len+32)>DeviceInfo.BPB_BytesPerSec)
		return FALSE;

	ThisFile.bFileOpen=0;	

	cnum=GetFreeCusterNum();
	if(cnum<0x02)
		return FALSE;	

	pBuffer[26]=(unsigned char)(cnum);
	pBuffer[27]=(unsigned char)(cnum>>8);
	pBuffer[28]=0;pBuffer[29]=0;pBuffer[30]=0;pBuffer[31]=0;
	bstop=0;
	
	if(DirStartCluster==0)	
	{
	/////// Search a free space in the root dir space and build the item ///
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {   
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			return FALSE;
		DirCount=0;bwrite=0;
		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
			{
			if(len==0)
				{
				if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
				{
				for(j=0;j<32;j++)
					DBUF[i+j]=*(pBuffer+j);
				if(!RBC_Write(DeviceInfo.RootStartSector+sector,1,DBUF))
		  	 		return FALSE;		  	 		
				bstop=1;
				break;
				}
				}
			else
			{
			if(DirCount==0)
				InByte=i;
			if(DBUF[i]==0xE5)				
				DirCount++;				
			else if(DBUF[i]==0x00)
				{	
				DirCount++;	
				DBUF[i]=0xE5;
				bwrite=1;				
				}
			else
				DirCount=0;

			if((DirCount*32)>=(len+32))
				{
				for(j=0;j<len;j++)
					DBUF[InByte+j]=*(pName+j);

				for(j=0;j<32;j++)
					DBUF[InByte+len+j]=*(pBuffer+j);

				if(!RBC_Write(DeviceInfo.RootStartSector+sector,1,DBUF))
		  	 		return FALSE;		  	 		
				bstop=1;
				break;
				}
			 }
			}		
		if(bstop==1)break;
		
		if((len!=0)&&(bwrite==1))
			{
			if(!RBC_Write(DeviceInfo.RootStartSector+sector,1,DBUF))
		  		return FALSE;
	    	}
		}

	if(sector>=DeviceInfo.BPB_RootEntCnt)
		return FALSE;
	}
////////////////////////////////////////////////////////////
	else
	{
		NowCluster=DirStartCluster;		
		do
		{
			NowSector=FirstSectorofCluster(NowCluster);
			ClusterPointer=NowCluster;
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;
				DirCount=0;bwrite=0;

				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
				if(len==0)
					{
					if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
					{
					for(j=0;j<32;j++)
						DBUF[i+j]=*(pBuffer+j);
					if(!RBC_Write(NowSector+sector,1,DBUF))
		  	 			return FALSE;		  	 		
					bstop=1;
					break;
					}		
					}
				else
				{
				if(DirCount==0)
					InByte=i;
				if(DBUF[i]==0xE5)				
					DirCount++;				
				else if(DBUF[i]==0x00)
					{	
					DirCount++;	
					DBUF[i]=0xE5;
					bwrite=1;
					}
				else
					DirCount=0;

				if((DirCount*32)>=(len+32))
					{
					for(j=0;j<len;j++)
						DBUF[InByte+j]=*(pName+j);
					for(j=0;j<32;j++)
						DBUF[InByte+len+j]=*(pBuffer+j);
					if(!RBC_Write(NowSector+sector,1,DBUF))
		  		 		return FALSE;		  	 		
					bstop=1;
					break;
					}
				 }
				}
				if(bstop==1)break;
				
				if((len!=0)&&(bwrite==1))
				{
				if(!RBC_Write(NowSector+sector,1,DBUF))
		  			return FALSE;
	    		}
	    	}
			if(bstop==1)break;
	
			NowCluster=GetNextClusterNum(NowCluster);
			if(NowCluster>0xffef)
	    	{
			NowCluster=CreateClusterLink(ClusterPointer);
		 	if(NowCluster==0x00)
		 		 return FALSE;
			NowSector=FirstSectorofCluster(NowCluster);
			for(i=0;i<DeviceInfo.BPB_BytesPerSec;i++) DBUF[i]=0x00;
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
				{
				if(!RBC_Write(NowSector+sector,1,DBUF))
		  	 		return FALSE;
				}
			}
		}while(NowCluster<=0xffef);
	
	
	if(NowCluster>0xffef)
	    return FALSE;
	}
////////////////////////////////////////////////////////////////
	
	ThisFile.StartCluster=cnum;
	ThisFile.LengthInByte=0;
	ThisFile.ClusterPointer=ThisFile.StartCluster;
	ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
	ThisFile.OffsetofSector=0;
	ThisFile.SectorofCluster=0;
	ThisFile.bFileOpen=1;
	ThisFile.pointer=0;
	ThisFile.FatSectorPointer=0;
	
	return TRUE;
}

unsigned char WriteFile(unsigned long writeLength,unsigned char *pBuffer)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情免费电影网址| 一区二区三区在线播放| 毛片av一区二区| 欧美一区二区日韩一区二区| 日韩精品免费视频人成| 欧美男同性恋视频网站| 热久久一区二区| 精品国免费一区二区三区| 麻豆高清免费国产一区| 精品少妇一区二区三区| 国产精品一区二区在线观看网站| 欧美激情一区二区三区蜜桃视频| 国产亚洲午夜高清国产拍精品| 中文久久乱码一区二区| 毛片不卡一区二区| 91麻豆蜜桃一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 久久精品72免费观看| 亚洲成a人在线观看| 精品一区二区免费视频| 国产·精品毛片| 色综合天天综合色综合av| 欧美一级二级三级乱码| 国产欧美日韩中文久久| 亚洲色图欧美激情| 免费成人在线网站| 92精品国产成人观看免费| 久久嫩草精品久久久精品一| 亚洲欧洲综合另类在线| 蜜桃视频第一区免费观看| 91视频免费看| 国产精品美女久久久久久2018| 亚洲一区二区免费视频| 国产成人精品aa毛片| 欧美一区二区三区免费观看视频| 亚洲国产精品传媒在线观看| 亚洲电影中文字幕在线观看| 成人av网站免费| 国产亚洲综合色| 国内精品伊人久久久久影院对白| 国产一区啦啦啦在线观看| 国产一区欧美日韩| 欧美欧美欧美欧美首页| 亚洲综合一区二区| 91精品国产91久久久久久最新毛片 | 亚洲欧美色一区| 日韩一区二区三区高清免费看看| www.欧美色图| 久久99热这里只有精品| 亚洲一区二区影院| 国产日产亚洲精品系列| 91成人看片片| 国产一区二区三区四| 日韩精品中文字幕一区二区三区| 亚洲成人av一区二区三区| 日韩欧美一区在线| 极品少妇一区二区三区精品视频 | 中文字幕一区二区三区av| 色狠狠综合天天综合综合| 国产成人激情av| 国产高清不卡一区二区| 亚洲香肠在线观看| 亚洲日本在线观看| 国产欧美日韩不卡免费| 精品国产伦一区二区三区观看方式| 欧美日韩精品一二三区| 欧美性受xxxx| 91高清视频免费看| 色综合久久久久综合体| 成人蜜臀av电影| 成人在线一区二区三区| 国产成人免费视| 岛国精品在线观看| 国产成a人无v码亚洲福利| 极品瑜伽女神91| 国产一区二区三区四区五区入口 | 欧美激情艳妇裸体舞| 久久蜜桃av一区二区天堂| 日韩免费在线观看| 欧美一区二区不卡视频| 日韩一级免费观看| 日韩免费一区二区| 日韩一区二区免费电影| 欧美本精品男人aⅴ天堂| 欧美不卡一区二区| 久久久久久久综合狠狠综合| 久久久精品欧美丰满| 国产欧美日韩一区二区三区在线观看| 久久久www成人免费毛片麻豆| 精品第一国产综合精品aⅴ| 欧美精品一区二区不卡| 久久久99免费| 国产午夜精品福利| 国产精品女同一区二区三区| 亚洲欧洲综合另类| 午夜精品久久久久久不卡8050| 日日夜夜免费精品| 麻豆精品一区二区三区| 国产一区二区美女诱惑| 成人精品一区二区三区四区 | 国产精品色眯眯| 99国产精品久久久久久久久久久| 99久久国产综合精品麻豆| 99视频一区二区三区| 欧美日韩一区国产| 日韩精品乱码av一区二区| 在线欧美日韩国产| 精品一区中文字幕| 最新国产成人在线观看| 欧美一区二区视频在线观看2022| 国产精品影音先锋| 亚洲精品国产无套在线观| 精品伦理精品一区| 色欧美片视频在线观看在线视频| 日本中文一区二区三区| 国产精品久久久99| 欧美一区二区福利在线| 成人在线视频一区二区| 丝袜美腿一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 欧美男男青年gay1069videost | 亚洲视频资源在线| 欧美一区二区三区在线电影| av电影一区二区| 另类小说视频一区二区| 亚洲精品视频免费看| 久久理论电影网| 欧美日韩一卡二卡三卡| 99视频精品在线| 狠狠色狠狠色综合日日91app| 亚洲综合自拍偷拍| 欧美国产日本视频| 久久综合色综合88| 51精品国自产在线| 91行情网站电视在线观看高清版| 国产高清不卡一区二区| 久久国产精品色婷婷| 亚洲大片一区二区三区| 亚洲人xxxx| 亚洲天堂av一区| 国产精品久久久久久久久久久免费看| 精品日韩一区二区三区免费视频| 欧美日本在线视频| 精品视频在线免费观看| 日本久久精品电影| 91污片在线观看| 91美女片黄在线| 91影院在线观看| 91美女在线视频| 色哟哟国产精品免费观看| 不卡视频一二三四| 成人毛片视频在线观看| 本田岬高潮一区二区三区| 成人午夜私人影院| 成人高清在线视频| 99久久综合色| 色婷婷亚洲综合| 在线视频国产一区| 欧美久久久影院| 欧美一区二区女人| 精品福利一二区| 国产喷白浆一区二区三区| 国产欧美一区二区三区鸳鸯浴| 欧美一级二级三级乱码| 日韩亚洲欧美中文三级| 久久亚洲欧美国产精品乐播| 欧美变态凌虐bdsm| 国产日韩亚洲欧美综合| 欧美高清在线一区二区| 亚洲少妇中出一区| 亚洲图片有声小说| 麻豆一区二区在线| 国产精品亚洲专一区二区三区| 成人精品国产一区二区4080| 91原创在线视频| 在线观看国产91| 欧美一区二区性放荡片| 国产亚洲人成网站| 一区二区三区国产| 丝袜诱惑制服诱惑色一区在线观看 | 粉嫩13p一区二区三区| jvid福利写真一区二区三区| 欧美视频在线播放| 久久婷婷色综合| 亚洲精品菠萝久久久久久久| 天天操天天综合网| 国产精华液一区二区三区| 91美女在线观看| 久久亚洲精品国产精品紫薇| 亚洲欧美成aⅴ人在线观看| 日本成人中文字幕在线视频| 国产成人av福利| 欧美日精品一区视频| 国产清纯白嫩初高生在线观看91| 亚洲曰韩产成在线| 国产黄色成人av| 欧美伦理视频网站| 亚洲色图制服丝袜| 国产精品亚洲人在线观看| 欧美日韩大陆在线|