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

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

?? znfat.c

?? f340的MP3程序,通過SD卡讀入解碼器
?? C
?? 第 1 頁 / 共 4 頁
字號:
 #include "znfat.h"
#include "sd.h"        //存儲設備的扇區讀寫驅動,這里是SD卡
//#include "ch375.h"	   //存儲設備的扇區讀寫驅動,這里是U盤
//#include "cf.h"
#include "string.h"

/*******************************************************

        +-----------------------------------------+
        |振南電子 原創程序模塊 znFAT文件系統 5.18 |
        +-----------------------------------------+

  此源碼版權屬 振南 全權享有,如欲引用,敬請署名并告知
        嚴禁隨意用于商業目的,違者必究,后果自負
         振南電子 
             ->產品網站 http://www.znmcu.cn/
             ->產品網店 http://shop.znmcu.cn/
             ->產品咨詢 QQ:987582714 
			            MSN:yzn07@126.com
	                    WW:yzn07
說明:znFAT經多方測試,確保其正確性與穩定性,請放心使用,
      如有bug敬請告知,謝謝!!				  
********************************************************/

//全局變量定義
struct direntry temp_rec;
INT8 temp_dir_name[13]; 
UINT32 temp_dir_cluster;
UINT32 temp_last_cluster;

UINT8 xdata znFAT_Buffer[512]; //扇區數據讀寫緩沖區,由外部提供

/******************************************************************
 - 功能描述:znFAT的存儲設備初始化函數
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:外部(用于對存儲設備進行初始化)
 - 參數說明:無
 - 返回說明:無
 - 注:在調znFAT其它函數之前,必須先對存儲設備進行成功的初始化。
 ******************************************************************/

void znFAT_Device_Init()
{
 SD_Reset();
 SD_Init(); 
}

/******************************************************************
 - 功能描述:znFAT的存儲設備底層驅動接口,讀取存儲設備的addr扇區的
             512個字節的數據放入buf數據緩沖區中
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部(用于與存儲設備的底層驅動對接)
 - 參數說明:addr:扇區地址
             buf:指向數據緩沖區的指針
 - 返回說明:0表示讀取扇區成功,否則失敗
 - 注:這里加入了天狼星精華板上的三種存儲設備,即SD卡(有效)、U盤、
       CF卡通過在程序中動態的切換不同的設備驅動,從而實現多設備(即同
	   時對多種存儲設備進行操作,比如從SD卡拷貝文件到U盤等等),不同
	   驅動的切換,只需要在程序中改變Dev_No這個全局變量的值即可
 ******************************************************************/

UINT8 znFAT_ReadSector(UINT32 addr,UINT8 *buf) 
{
 switch(Dev_No)	//由Dev_No來決定所使用的存儲設備驅動
 {
  case SDCARD:
         return SD_Read_Sector(addr,buf);
         break;
  case UDISK:
         //return CH375_Read_Sector(addr,buf);
         break;
  case CFCARD:
         //return CF_Read_Sector(addr,buf);
         break;
  case OTHER:
         //return XXX_Read_Sector(addr,buf);
         break;
 }
}

/******************************************************************
 - 功能描述:znFAT的存儲設備底層驅動接口,將buf數據緩沖區中的512個
             字節的數據寫入到存儲設備的addr扇區中
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部(用于與存儲設備的底層驅動對接)
 - 參數說明:addr:扇區地址
             buf:指向數據緩沖區
 - 返回說明:0表示讀取扇區成功,否則失敗
 - 注:略
 ******************************************************************/

UINT8 znFAT_WriteSector(UINT32 addr,UINT8 *buf)
{
 switch(Dev_No)	//由Dev_No來決定所使用的存儲設備驅動
 {
  case SDCARD:
         return SD_Write_Sector(addr,buf);
         break;
  case UDISK:
         //return CH375_Write_Sector(addr,buf);
         break;
  case CFCARD:
         //return CF_WriteSector(addr,buf);
         break;
  case OTHER:
         //return XXX_Write_Sector(addr,buf);
         break;
 }
}

/******************************************************************
 - 功能描述:小端轉大端,即LittleEndian車BigEndian
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:dat:指向要轉為大端的字節序列
             len:要轉為大端的字節序列長度
 - 返回說明:轉為大端模式后,字節序列所表達的數據
 - 注:比如:小端模式的       0x33 0x22 0x11 0x00  (低字節在前)
             轉為大端模式后為 0x00 0x11 0x22 0x33  (高字節在前)
             所表達的數值為   0x00112233
             (CISC的CPU通常是小端的,所以znFAT也設計為小端,而單片機
              這種RISC的CPU,通常來說都是大端的,所以需要這個函數將字
              節的存放次序進行調整,才能得到正確的數值)
 ******************************************************************/

UINT32 LE2BE(UINT8 *dat,UINT8 len) 
{
 UINT32 temp=0;
 UINT32 fact=1;
 UINT8  i=0;
 for(i=0;i<len;i++)
 {
  temp+=dat[i]*fact; //將各字節乘以相應的權值后累加
  fact*=256; //更新權值
 }
 return temp;
}

//-----------------------------------

/**************************************************************************
 - 功能描述:清空某個簇的所有扇區,填充0
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:cluster:要清空的簇的簇號
 - 返回說明:無
 **************************************************************************/
#ifdef ZNFAT_EMPTY_CLUSTER	  

void znFAT_Empty_Cluster(UINT32 Cluster)
{
 UINT32 iSec;
 UINT16 i;
 for(i=0;i<pArg->BytesPerSector;i++)
 {
  znFAT_Buffer[i]=0;
 }
 for(iSec=SOC(Cluster);iSec<SOC(Cluster)+pArg->SectorsPerClust;iSec++)
 {
  znFAT_WriteSector(iSec,znFAT_Buffer);
 }
}

#endif 
/***********************************************************************
 - 功能描述:獲取剩余容量
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:無    
 - 返回說明:剩余容量,單位字節
 - 注:從FSInfo中讀取空閑簇數,而從計算得到剩余的容量,單位字節
 ***********************************************************************/
#ifdef znFAT_GET_REMAIN_CAP

UINT32 znFAT_Get_Remain_Cap(void)
{
 znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);
 if(((struct FSInfo *)znFAT_Buffer)->Free_Cluster[0]==0xff 
 && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[1]==0xff 
 && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[2]==0xff 
 && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[3]==0xff)
 return pArg->Total_Size;
 else
 return LE2BE(((struct FSInfo *)znFAT_Buffer)->Free_Cluster,4)*pArg->SectorsPerClust*pArg->BytesPerSector; 
}

#endif

//--------------------------------------------

/******************************************************************
 - 功能描述:將小字字符轉為大寫
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:c:要轉換為大寫的字符            
 - 返回說明:要轉換的字節的相應的大寫字符
 - 注:只對小寫字符有效,如果不是a~z的小寫字符,將直接返回
 ******************************************************************/

INT8 L2U(INT8 c)
{
 if(c>='a' && c<='z') return c+'A'-'a';
 else return c;
}

/***********************************************************************
 - 功能描述:得到DBR所在的扇區號(如果沒有MBR,則DBR就在0扇區)
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:無     
 - 返回說明:DBR的扇區地址
 - 注:DBR中包含了很多有用的參數信息,因此正確定位DBR扇區的位置,是極為
       重要的,后面將有專門的函數對DBR進行解析,正確解析DBR是實現znFAT的
       基礎
 ***********************************************************************/

UINT16 znFAT_Find_DBR(void)
{
 UINT16 sec_dbr;
 znFAT_ReadSector(0,znFAT_Buffer);
 if(znFAT_Buffer[0]!=0xeb) 
 {
  sec_dbr=LE2BE(((((struct PartSector *)(znFAT_Buffer))->Part[0]).StartLBA),4);
 }
 else
 {
  sec_dbr=0;
 }
 return sec_dbr;
}

/***********************************************************************
 - 功能描述:獲取分區的總容量
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:無     
 - 返回說明:分區容量值,單位為字節
 - 注:這里得到的總容量是znFAT分區的容量,一定小于實際的物理容量
 ***********************************************************************/
#ifdef ZNFAT_GET_TOTAL_SIZE

UINT32 znFAT_Get_Total_Size(void) 
{
 return pArg->Total_Size;
}

#endif
/***********************************************************************
 - 功能描述:讀取FSInfo獲取最近的一個可用空閑簇
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:無     
 - 返回說明:最近的一個可用空閑簇
 - 注:znFAT中的FSInfo扇區(絕對1扇區)中記錄了最近的一個可用空閑簇
 ***********************************************************************/

UINT32 Search_Last_Usable_Cluster(void)
{
 znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);
 return LE2BE(((struct FSInfo *)znFAT_Buffer)->Last_Cluster,4);
}

/***********************************************************************
 - 功能描述:znFAT文件系統初始化
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:znFAT_Init_Arg類型的結構體指針,用于裝載一些重要的參數信息,
             以備后面使用     
 - 返回說明:無
 - 注:在使用znFAT前,這個函數是必須先被調用的,將很多參數信息裝入到
       arg指向的結構體中,比如扇區大小、根目錄的位置、FAT表大小等等。
       這些參數絕大部分是來自于DBR的BPB中,因此此函數主要在作對DBR的參數解析
 ***********************************************************************/

void znFAT_Init(void)
{
 struct znFAT_BPB *bpb;

 bpb=(struct znFAT_BPB *)(znFAT_Buffer);               //將數據緩沖區指針轉為struct znFAT_BPB 型指針

 pArg->DEV_No=Dev_No; //裝入設備號

 pArg->BPB_Sector_No   =znFAT_Find_DBR();               //znFAT_FindBPB()可以返回BPB所在的扇區號

 znFAT_ReadSector(pArg->BPB_Sector_No,znFAT_Buffer);

 pArg->FATsectors      =LE2BE((bpb->BPB_FATSz32)    ,4);//裝入FAT表占用的扇區數到FATsectors中
 pArg->FirstDirClust   =LE2BE((bpb->BPB_RootClus)   ,4);//裝入根目錄簇號到FirstDirClust中
 pArg->BytesPerSector  =LE2BE((bpb->BPB_BytesPerSec),2);//裝入每扇區字節數到BytesPerSector中
 pArg->SectorsPerClust =LE2BE((bpb->BPB_SecPerClus) ,1);//裝入每簇扇區數到SectorsPerClust 中
 pArg->FirstFATSector  =LE2BE((bpb->BPB_RsvdSecCnt) ,2)+pArg->BPB_Sector_No;//裝入第一個FAT表扇區號到FirstFATSector 中
 pArg->FirstDirSector  =(pArg->FirstFATSector)+(bpb->BPB_NumFATs[0])*(pArg->FATsectors); //裝入第一個目錄扇區到FirstDirSector中

 pArg->Total_Size      =LE2BE((bpb->BPB_TotSec32),4)*pArg->BytesPerSector;         //磁盤的總容量,單位是字節

 temp_last_cluster=Search_Last_Usable_Cluster();
}

/***********************************************************************
 - 功能描述:更新FSInfo中的可用空閑簇的數量
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:PlusOrMinus:可用空閑簇數加1或減1    
 - 返回說明:無
 - 注:創建文件、追加數據、刪除文件等操作都可能會使可用的空閑簇數變化
       要及時更新
 ***********************************************************************/
#ifdef ZNFAT_UPDATE_FSINFO_FREE_CLU

void znFAT_Update_FSInfo_Free_Clu(UINT32 PlusOrMinus)
{
 UINT32 Free_Clu=0;
 znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);

 Free_Clu=(znFAT_Get_Remain_Cap())/(pArg->SectorsPerClust*pArg->BytesPerSector);

 if(PlusOrMinus) Free_Clu++;
 else Free_Clu--;

 ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[0]=Free_Clu&0x000000ff;//((UINT8 *)&Free_Clu)[0]; 
 ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[1]=(Free_Clu&0x0000ff00)>>8;//((UINT8 *)&Free_Clu)[1];
 ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[2]=(Free_Clu&0x00ff0000)>>16;//((UINT8 *)&Free_Clu)[2];
 ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[3]=(Free_Clu&0xff000000)>>24;//((UINT8 *)&Free_Clu)[3];
 znFAT_WriteSector(1+pArg->BPB_Sector_No,znFAT_Buffer);   
}

#endif
/***********************************************************************
 - 功能描述:更新FSInfo中的下一個可用空閑簇的簇號
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:Last_Clu:將要更新到FSInfo中的下一個可用空閑簇的簇號    
 - 返回說明:無
 - 注:FSInfo中的下一個可用空閑簇號可以給文件系統一個參考,直接告訴文件系統
       下一個可用的空閑簇在什么地方
 ***********************************************************************/
#ifdef ZNFAT_UPDATE_FSINFO_LAST_CLU

void znFAT_Update_FSInfo_Last_Clu(UINT32 Last_Clu)
{
 znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);  
 ((struct FSInfo *)znFAT_Buffer)->Last_Cluster[0]=Last_Clu&0x000000ff;//((UINT8 *)&Last_Clu)[0]; 
 ((struct FSInfo *)znFAT_Buffer)->Last_Cluster[1]=(Last_Clu&0x0000ff00)>>8;//((UINT8 *)&Last_Clu)[1];
 ((struct FSInfo *)znFAT_Buffer)->Last_Cluster[2]=(Last_Clu&0x00ff0000)>>16;//((UINT8 *)&Last_Clu)[2];
 ((struct FSInfo *)znFAT_Buffer)->Last_Cluster[3]=(Last_Clu&0xff000000)>>24;//((UINT8 *)&Last_Clu)[3];
 znFAT_WriteSector(1+pArg->BPB_Sector_No,znFAT_Buffer);
}

#endif
/***********************************************************************
 - 功能描述:獲得下一個簇的簇號
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:LastCluster:基準簇號  
 - 返回說明:LastClutster的下一簇的簇號
 - 注:獲得下一簇的簇號,就是憑借FAT表中所記錄的簇鏈關系來實現的
 ***********************************************************************/
#ifdef ZNFAT_GETNEXTCLUSTER

UINT32 znFAT_GetNextCluster(UINT32 LastCluster)
{
 UINT32 temp;
 struct znFAT_FAT *pFAT;
 struct znFAT_FAT_Item *pFAT_Item;
 temp=((LastCluster/128)+pArg->FirstFATSector);
 znFAT_ReadSector(temp,znFAT_Buffer);
 pFAT=(struct znFAT_FAT *)znFAT_Buffer;
 pFAT_Item=&((pFAT->Items)[LastCluster%128]);
 return LE2BE((UINT8 *)pFAT_Item,4);
}

#endif
/***********************************************************************
 - 功能描述:比較目錄名
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:a:指向目錄名1的指針
             b:指向目錄名2的指針
 - 返回說明:如果兩個目錄名相同就返回1,否則為0
 ***********************************************************************/
#ifdef COMPARE_DIR_NAME

UINT8 Compare_Dir_Name(CONST INT8 *a,CONST INT8 *b)
{
 UINT8 i;
 for(i=0;i<8;i++)
 {
  if(a[i]!=b[i]) return 0;
 }
 return 1;
}

#endif
/***********************************************************************
 - 功能描述:文件名匹配(支持帶*?通配符的文件名的匹配)
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:pat:源文件名,可以含*或?通配符 如 *.txt 或 A?.mp3等等
             name:目標文件名
 - 返回說明:如果兩個文件名匹配就返回1,否則為0
 - 注:關于通配文件名匹配,有這樣的例子,比如 A*.txt 與 ABC.txt是匹配的
   同時與 ABCDE.txt也是匹配的。此功能在文件枚舉中將會用到,用來匹配
   文件名符合一定條件的文件
 ***********************************************************************/
#ifdef FILENAMEMATCH

UINT8 FilenameMatch(INT8 *pat,INT8 *name)
{
 UINT8 match,ndone;
 INT8 *cpp,*cpn;
 cpp=pat;
 cpn=name;
 match=1;
 ndone=1;
 while(ndone)
 {
  switch (*cpp)
  {
   case '*':
            cpp++;
            cpn=strchr(cpn,*cpp);
            if(cpn==NULL)
            {
             cpn=name;
             while(*cpn) cpn++;
            }
            break;
   case '?':
            cpp++;
            cpn++;
            break;
   case 0:
            if(*cpn!=0)
            match=0;
            ndone=0;
            break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码国产乱码精品精可以看| 日韩欧美成人激情| 亚洲人成网站精品片在线观看| 国产精品亚洲人在线观看| 2欧美一区二区三区在线观看视频| 丝袜诱惑制服诱惑色一区在线观看| 欧美日韩在线观看一区二区 | 欧美精品一区二区蜜臀亚洲| 美女视频黄a大片欧美| 精品免费日韩av| 国产精品一区免费在线观看| 国产精品久久久久久久久果冻传媒 | 91久久国产综合久久| 一级特黄大欧美久久久| 欧美电影一区二区三区| 国产在线一区二区| 中文字幕免费不卡在线| 在线一区二区三区四区五区| 亚洲成人av电影在线| 精品欧美一区二区久久 | 亚洲视频在线一区| 欧美影视一区在线| 狠狠色综合色综合网络| 亚洲三级在线播放| 欧美一激情一区二区三区| 国产黄人亚洲片| 亚洲午夜一二三区视频| www国产成人| 在线视频国内自拍亚洲视频| 狠狠色综合播放一区二区| 亚洲欧美一区二区在线观看| 5566中文字幕一区二区电影| 国产成人亚洲精品狼色在线| 亚洲成人高清在线| 国产日韩影视精品| 欧美日本高清视频在线观看| 国产不卡一区视频| 日韩精品一二三| 国产精品黄色在线观看| 日韩一区二区三区高清免费看看| 成人爽a毛片一区二区免费| 日韩精品一级中文字幕精品视频免费观看 | 青青草国产成人av片免费| 国产精品美女久久久久aⅴ| 3d成人动漫网站| 99国内精品久久| 国产美女娇喘av呻吟久久| 水野朝阳av一区二区三区| 亚洲免费观看高清完整版在线观看| 精品91自产拍在线观看一区| 欧美日韩一区二区三区高清| 成人app下载| 精品一区二区国语对白| 亚洲一级二级在线| 成人免费在线视频观看| 久久精品在这里| 精品少妇一区二区三区在线视频| 欧美主播一区二区三区美女| 成人免费视频国产在线观看| 黄一区二区三区| 捆绑变态av一区二区三区| 午夜在线成人av| 亚洲综合999| 亚洲免费观看高清在线观看| 亚洲国产成人一区二区三区| 精品久久一区二区| 日韩情涩欧美日韩视频| 欧美精品久久天天躁| 欧美日韩高清一区二区不卡| 在线亚洲人成电影网站色www| 成人v精品蜜桃久久一区| 国产a久久麻豆| 国产成人日日夜夜| 国产成人午夜电影网| 国产成人精品亚洲777人妖| 另类小说图片综合网| 久久福利视频一区二区| 久热成人在线视频| 蜜桃视频在线一区| 精品在线免费视频| 国产专区欧美精品| 国产精品77777| 国产寡妇亲子伦一区二区| 国产.欧美.日韩| 国产91丝袜在线观看| www.亚洲激情.com| 色综合天天综合网国产成人综合天 | 日韩免费高清电影| 精品剧情在线观看| 国产日产欧产精品推荐色| 欧美国产精品v| 中文字幕一区二区三区精华液| 亚洲伦理在线精品| 亚洲444eee在线观看| 日韩不卡一二三区| 国产毛片精品一区| 99国产精品久久久久久久久久| 欧美色综合久久| 欧美区在线观看| 久久中文字幕电影| 国产精品国产三级国产普通话三级 | 欧美伊人久久大香线蕉综合69 | 欧洲精品在线观看| 91精品婷婷国产综合久久| 欧美一级片免费看| 国产亚洲女人久久久久毛片| 中文字幕视频一区二区三区久| 一区二区三区在线免费| 免费观看在线色综合| 国产99久久久久久免费看农村| 一本大道久久a久久综合| 欧美情侣在线播放| 久久精品夜夜夜夜久久| 亚洲精品中文字幕在线观看| 日韩成人一级大片| 99久久综合色| 欧美一级理论片| 国产精品国产三级国产普通话蜜臀 | av激情综合网| 91超碰这里只有精品国产| 久久青草欧美一区二区三区| 亚洲免费观看高清完整版在线| 美女网站视频久久| 成人国产精品免费网站| 5858s免费视频成人| 国产精品久久久久久久久免费樱桃| 日韩av不卡在线观看| 成人av网在线| 日韩一区二区精品| 亚洲男人的天堂在线观看| 久久99热狠狠色一区二区| 色老汉av一区二区三区| 日韩美女一区二区三区四区| 亚洲免费在线视频| 国产在线精品一区在线观看麻豆| 色噜噜狠狠色综合中国| 国产欧美精品区一区二区三区| 日日夜夜一区二区| 成人激情开心网| 精品久久久久久久久久久久包黑料| 亚洲影院在线观看| 丁香另类激情小说| 久久综合久久久久88| 日韩av成人高清| 欧美日韩国产小视频| 亚洲免费av网站| 成人精品国产一区二区4080| 欧美精品一区二区三区久久久| 亚洲成人免费电影| 色综合色狠狠天天综合色| 中文字幕不卡在线观看| 极品少妇xxxx精品少妇偷拍| 欧美日韩国产高清一区二区三区| 国产精品国产自产拍高清av王其| 国产精品综合久久| 日韩一区二区三区视频在线观看| 一区二区日韩av| 欧洲精品一区二区三区在线观看| 久久99精品久久久久久| 欧美日韩激情一区二区三区| 亚洲综合成人网| 欧美性大战久久久久久久蜜臀| 亚洲欧洲韩国日本视频| 91丨九色丨蝌蚪丨老版| 综合网在线视频| eeuss鲁片一区二区三区| 精品国产一区二区亚洲人成毛片| 日韩成人一区二区三区在线观看| 91精品免费观看| 日本91福利区| 欧美一区二区二区| 奇米一区二区三区| 日韩精品一区二区三区老鸭窝| 美女视频一区二区三区| 日韩精品在线看片z| 久久国产精品72免费观看| 精品国产91久久久久久久妲己| 久久成人免费网| 久久久久成人黄色影片| 成人一级视频在线观看| 中文字幕一区二区三区在线播放 | 欧美日韩免费电影| 舔着乳尖日韩一区| 日韩精品在线网站| 丁香五精品蜜臀久久久久99网站 | 久久这里只有精品首页| 国产91清纯白嫩初高中在线观看 | 欧美日韩日日骚| 五月天丁香久久| 日韩欧美一二三| 国产成人免费视| 最新久久zyz资源站| 欧美调教femdomvk| 蜜桃久久av一区| 国产精品免费丝袜| 精品国产污网站| 不卡在线视频中文字幕| 亚洲在线一区二区三区| 日韩一区二区在线观看视频| 国产高清在线精品|