日本在线www-日本在线播放一区-日本在线不卡免费视频一区-日本在线不卡视频-成人影院久久久久久影院-成人影院一区二区三区

ABB
關(guān)注中國自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
工業(yè)智能邊緣計(jì)算2025年會(huì)
CAIAC 2025
2025工業(yè)安全大會(huì)
OICT公益講堂
當(dāng)前位置:首頁 >> 案例 >> 案例首頁

案例頻道

32位Windows操作系統(tǒng)下WDM型USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
  • 企業(yè):控制網(wǎng)     領(lǐng)域:儀器儀表     行業(yè):市政工程    
  • 點(diǎn)擊數(shù):3247     發(fā)布時(shí)間:2005-05-11 14:59:26
  • 分享到:

 

1. 前言
    通用串行總線(USB)是由Intel、Compaq、Microsoft、IBM、Northern Telecom和NEC等7家公司發(fā)起制定的微機(jī)總線接口規(guī)范。它充分解決了日益增加的PC外設(shè)與有限的主板插槽和接口之間的矛盾?,F(xiàn)在幾乎所有的臺(tái)式PC和便攜式筆記本電腦都配備了USB接口,幾乎所有流行的操作系統(tǒng)如Win98,Windows2000/xp,Linux等都支持USB功能。由于目前多數(shù)的開發(fā)工具還沒有對(duì)USB進(jìn)行控制的函數(shù)和控件,開發(fā)一個(gè)基于USB的應(yīng)用系統(tǒng)(如基于USB的數(shù)據(jù)采集系統(tǒng)),就需要開發(fā)者自己寫一個(gè)USB設(shè)備驅(qū)動(dòng)程序。

2. USB簡(jiǎn)介
    一個(gè)USB系統(tǒng)包括硬件系統(tǒng)和軟件系統(tǒng)。硬件系統(tǒng)包括:USB主控制器,根集線器(HUB),USB集線器(HUB),USB設(shè)備。軟件系統(tǒng)包括:USB類驅(qū)動(dòng)程序,USB設(shè)備驅(qū)動(dòng)程序,設(shè)備端固件程序和應(yīng)用程序。USB的通信結(jié)構(gòu)模型如圖1所示。

USB具有以下特點(diǎn):
1、 速度快。USB1 .1支持全速和低速模式:12Mbps和1.5Mbps,USB2.0支持的高速模式可達(dá)480Mbps。
2、 擴(kuò)展方便。USB的星式的拓?fù)浣Y(jié)構(gòu),在每個(gè)PC的USB端口最多擴(kuò)展127個(gè)外設(shè)。
3、 支持完全的即插即用功能,可方便的熱拔插。
4、 可自動(dòng)檢測(cè)外設(shè)并配置外設(shè),靈活的供電方式,設(shè)備可自供電或總線供電;支持設(shè)備的掛起和喚醒,節(jié)省電源。
5、 USB有控制、等時(shí)、中斷和批量等四種數(shù)據(jù)傳輸方式??蓾M足不同的外
設(shè)使用。

3. WDM驅(qū)動(dòng)程序模型介紹
    WDM( Windows Driver Model),即Windows驅(qū)動(dòng)程序模型,是Microsoft力推的全新驅(qū)動(dòng)程序模式,旨在通過提供一種靈活的方式來簡(jiǎn)化驅(qū)動(dòng)程序的開發(fā),在實(shí)現(xiàn)對(duì)新硬件支持的基礎(chǔ)上減少并降低所必須開發(fā)的驅(qū)動(dòng)程序的數(shù)量和復(fù)雜性。

    WDM是一種PNP驅(qū)動(dòng)程序,同時(shí)還遵循電源管理協(xié)議,它直接對(duì)硬件抽象層HAL操作,還能在Windows98和Windows2000間實(shí)現(xiàn)源碼級(jí)兼容。在WDM驅(qū)動(dòng)程序模型中,每個(gè)硬件設(shè)備至少有兩個(gè)驅(qū)動(dòng)程序。其一為功能(function)驅(qū)動(dòng)程序,即硬件設(shè)備驅(qū)動(dòng)程序。它了解使硬件工作的所有細(xì)節(jié),負(fù)責(zé)初始化I/O操作,有責(zé)任處理I/O操作完成時(shí)所帶來的中斷事件,有責(zé)任為用戶提供一種設(shè)備適合的控制方式。另一個(gè)為總線(bus)驅(qū)動(dòng)程序。它負(fù)責(zé)管理硬件與計(jì)算機(jī)的連接。WDM模型使用了如圖2的層次結(jié)構(gòu)。

    WDM驅(qū)動(dòng)程序總是使應(yīng)用程序調(diào)用設(shè)備時(shí),就像操作一個(gè)文件。通常,當(dāng)一個(gè)應(yīng)用程序需要從硬件端口讀取數(shù)據(jù)時(shí),是通過調(diào)用標(biāo)準(zhǔn)的Windows API函數(shù),如ReadFile來實(shí)現(xiàn)的。而Win32子系統(tǒng)(如KERNEL32.DLL)通過調(diào)用平臺(tái)相關(guān)的系統(tǒng)服務(wù)接口實(shí)現(xiàn)該API,而平臺(tái)相關(guān)的系統(tǒng)服務(wù)將調(diào)用內(nèi)核模式支持例程。Windows 2000/xp的所有內(nèi)核模式IO操作都使用一個(gè)公用的數(shù)據(jù)結(jié)構(gòu)(IRP)。內(nèi)核發(fā)出各種IRP請(qǐng)求給WDM驅(qū)動(dòng)程序,驅(qū)動(dòng)程序處理各種IRP請(qǐng)求.每個(gè)IRP有一個(gè)IO堆棧結(jié)構(gòu),對(duì)應(yīng)相應(yīng)的驅(qū)動(dòng)程序。

4. USB設(shè)備驅(qū)動(dòng)程序的編寫
    USB設(shè)備驅(qū)動(dòng)程序完全具有WDM驅(qū)動(dòng)程序的特點(diǎn),也采用分層結(jié)構(gòu).USB設(shè)備驅(qū)動(dòng)程序是使用標(biāo)準(zhǔn)Windows系統(tǒng)USB總線驅(qū)動(dòng)程序訪問使用USBDI(驅(qū)動(dòng)程序接口)的USB設(shè)備的設(shè)備驅(qū)動(dòng)程序。圖3可以看到USB驅(qū)動(dòng)的層次模型。

    USB總線驅(qū)動(dòng)程序負(fù)責(zé)實(shí)際與USB總線通訊,加載和/卸載USB驅(qū)動(dòng)程序;與USB設(shè)備通過端點(diǎn)建立通訊來執(zhí)行設(shè)備配置,數(shù)據(jù)與USB協(xié)議框架和打包格式的雙向轉(zhuǎn)換任務(wù)。USB設(shè)備驅(qū)動(dòng)程序(即功能驅(qū)動(dòng)程序),通過發(fā)送含有USB請(qǐng)求包(URB)的IRP_MJ_INTERNAL_DEVICE_CONTROL IRP給USB總線驅(qū)動(dòng)程序來實(shí)現(xiàn)與USB設(shè)備的通訊。

    USB設(shè)備驅(qū)動(dòng)程序可按照處理IRP的不同分為:驅(qū)動(dòng)程序初始化模塊、即插即用(PnP)IRP處理模塊、電源管理IRP處理模塊、系統(tǒng)控制模塊(WMI)IRP處理模塊,USB設(shè)備IO和讀寫IRP模塊等幾部分。

4.1驅(qū)動(dòng)程序初始化模塊
    該模塊提供一個(gè)驅(qū)動(dòng)程序的入口例程DriverEntry(),所有對(duì)各種IRP的處理例程都在此模塊的DriverEntry例程中得到定義。此模塊添加設(shè)備AddDevice例程,調(diào)用IocreatDevice()內(nèi)核函數(shù)創(chuàng)建一個(gè)功能設(shè)備對(duì)象FDO,并進(jìn)行WMI和電源管理的一些初始化工作。設(shè)備卸載例程UnLoad用于清理硬件在系統(tǒng)中留下的痕跡。DriverEntry例程部分源碼如下:
    NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
    {    PDEVICE_OBJECT deviceObject = NULL;
    ………
    DriverObject->MajorFunction[IRP_MJ_PNP] = D12_PnP;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= D12_IoCtrL;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = D12_Write;
    DriverObject->MajorFunction[IRP_MJ_POWER] = D12_PowerIrp;
    DriverObject->DriverExtension->AddDevice = D12_AddDevice;
    DriverObject->DriverUnload = D12_Unload;
    ………
    return ntStatus;}

4.2即插即用(PnP)模塊
    該模塊實(shí)現(xiàn)設(shè)備的即插即用功能,熱拔插和動(dòng)態(tài)配置。當(dāng)硬件檢測(cè)到USB設(shè)備插入時(shí),Windows 2000查找相應(yīng)的驅(qū)動(dòng)程序,并調(diào)用它的DriverEntry例程,即插即用管理器調(diào)用驅(qū)動(dòng)程序的AddDevice例程,通知它添加設(shè)備,驅(qū)動(dòng)利用IocreatDevice()內(nèi)核函數(shù)創(chuàng)建一個(gè)功能設(shè)備對(duì)象FDO,在此過程中驅(qū)動(dòng)程序收到IRP_MN_START_DEVICE IRP,請(qǐng)求驅(qū)動(dòng)程序啟動(dòng)USB設(shè)備和分配資源。當(dāng)然,設(shè)備運(yùn)行過程中,如果設(shè)備狀態(tài)發(fā)生變化(如帶電拔插,暫停等),系統(tǒng)的即插即用管理器也同樣發(fā)出相應(yīng)的IRP,由驅(qū)動(dòng)程序進(jìn)行處理。

    該模塊的啟動(dòng)設(shè)備例程中要對(duì)USB設(shè)備進(jìn)行初始化操作,它首先讀取設(shè)備描述符,根據(jù)設(shè)備描述符來讀取配置描述符.在讀取配置描述符時(shí),往往先讀一次配置描述符,取出總的描述符長度,再將配置描述符,接口描述符,端點(diǎn)描述符一并讀出,從中獲取各種描述符提供的信息,設(shè)置管道信息,創(chuàng)建一個(gè)配置URB,進(jìn)行設(shè)備配置。需要調(diào)用以下例程:
UsbBuildGetDescriptorRequest(Urb, //組建一個(gè)獲取設(shè)備描述符的URB請(qǐng)求
(USHORT)sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
0,0,deviceDescriptor//描述符的類型,NULL,siz,NULL);
CallUSBD(DeviceObject,urb);//發(fā)送usb給總線驅(qū)動(dòng),
interfaceDescriptor=USBD_ParseConfigurationDecriptorEx(//從配置描述符中搜索接口信息
           ConfigurationDecriptor,//配置描述符地址
           ConfigurationDesriptor,//搜索起始地址
           interfacedex,//搜索的接口索引
           0,-1,-1,-1)// 然后選擇接口,配置設(shè)備
urb=USBD_CreateConfigurationRequestEx(ConfigurationDescriptor,interfacelist)
//創(chuàng)建一個(gè)配置設(shè)備的URB。這里使用一個(gè)鏈表結(jié)構(gòu),可配置不只一個(gè)接口

4.3電源管理模塊
    實(shí)現(xiàn)USB系統(tǒng)的電源管理功能,實(shí)現(xiàn)設(shè)備的掛起與喚醒。在USB電源管理IRP的處理必須盡可能的快,否則可能出現(xiàn)奇怪的響應(yīng)時(shí)間長現(xiàn)象。在電源管理模塊中將IRP向下傳遞的例程是PoCallDriver,用它的目的就是使一切和電源管理有關(guān)的IRP都在系統(tǒng)電源管理器的掌握之下。

4.4系統(tǒng)控制模塊(WMI)
    WMI(Windows Management Instrumentation)是Windows提供給驅(qū)動(dòng)的一種服務(wù)機(jī)制,它可以完成注冊(cè)表的操作,并且可以在用戶應(yīng)用程序和驅(qū)動(dòng)程序之間直接數(shù)據(jù)交換,從而使用戶在除了使用IO設(shè)備控制之外,還有一個(gè)途徑和驅(qū)動(dòng)程序交流。它處理IRP_MJ_SYSTEM_CONTROL IRP請(qǐng)求。此IRP在AddDevice中進(jìn)行一些初始化工作,確定WMI請(qǐng)求處理的例程,并調(diào)用IoWMIRegistrationControl進(jìn)行WMI注冊(cè)。

4.5 USB設(shè)備IO模塊
    本模塊實(shí)現(xiàn)完成IO請(qǐng)求的大部分工作。工作過程:應(yīng)用程序調(diào)用Win32函數(shù)如DeviceIoControl向設(shè)備發(fā)出IO控制命令,系統(tǒng)的IO 管理器構(gòu)造一個(gè)IRP IRP_MJ_DEVICE_CONTROL.設(shè)備驅(qū)動(dòng)收到IRP,根據(jù)其中的控制代碼,構(gòu)造相應(yīng)的URB(USB請(qǐng)求塊),并把它放到一個(gè)新的IRP,傳遞到USB類驅(qū)動(dòng),執(zhí)行IRP。并把結(jié)果返回給設(shè)備驅(qū)動(dòng),設(shè)備驅(qū)動(dòng)在通過IRP返回給IO管理器,IO管理器將結(jié)果返回給應(yīng)用程序,即完成一次IO操作。讀寫例程也安排在此模塊,響應(yīng)讀寫設(shè)備用戶請(qǐng)求。

    USB有四種數(shù)據(jù)傳輸方式:控制,批量,中斷和同步方式。這里需要先檢查傳輸類型,然后根據(jù)傳輸類型的不同要求建立適當(dāng)?shù)腢RB請(qǐng)求,如下:
UsbBuildInterruptOrBulkTransferRequest(urb,
          sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER,
          PipeInformation->PipeHandle
          NULL,mdl,StageLenth,urbFlags,NULL)//建立傳輸請(qǐng)求URB
    利用總線驅(qū)動(dòng)提供的內(nèi)部控制碼IOCTL_INTERNAL_USB_SUBMIT_URB,向下層驅(qū)動(dòng)發(fā)送URB,并設(shè)置完成例程等待請(qǐng)求完成:
nextStack->MajorFuntion=IRP_MJ_INTERNAL_DEVICE_CONTROL;//設(shè)置下一個(gè)IO堆棧的主
nextStack->parameters.Others.Argument1=(PVOID)urb;// 功能代碼
nextStack->Parameters.DeviceIoControl.IoControlCode=IOCTL_INTERNAL_USB_SUBMIT_URB;//內(nèi)部控制USB設(shè)備提交的URB
IoSetCompletionRoution(Irp,
(PIO_COMPLETION_ROUTINE)BulkUsb_ReadWriteCompletion, //設(shè)置的完成例程
rwContext,TRUE,TRUE,TRUE);
IoCallDriver(deviceExtention->NextStackDeviceObject,Irp);//提交IRP

   該模塊完成了幾乎所有的應(yīng)用程序與驅(qū)動(dòng)程序的交互,這一部分也是與USB設(shè)備聯(lián)系最為緊密的部分。需要對(duì)USB協(xié)議有一定的了解。

5. 驅(qū)動(dòng)程序的幾種開發(fā)工具
    開發(fā)一個(gè)USB驅(qū)動(dòng)程序需要有一個(gè)合適的開發(fā)環(huán)境。下面是比較流行的幾種開發(fā)工具。

    Microsoft為開發(fā)驅(qū)動(dòng)者提供了一個(gè)軟件包Driver Development Kit即DDK,其中包含了驅(qū)動(dòng)程序的編譯器和調(diào)試工具,以及一些幫助文檔和范例,可以在Microsoft的網(wǎng)站上免費(fèi)下載DDK。代碼的編寫采用c或C++語言,只是編譯,連接需要使用VC++和DDK的工具。DDK提供了各類驅(qū)程序的源代碼,對(duì)開發(fā)者編寫自己的驅(qū)動(dòng)程序很有參考價(jià)值。

    DriverWorks是Numega公司提供的一個(gè)商業(yè)化驅(qū)動(dòng)程序集成開發(fā)包,提供VC++下的開發(fā)向?qū)riverWizard,按照它的提示可以迅速地生成驅(qū)動(dòng)程序的框架。在其生成的代碼框架中在加入自己的操作,就可以實(shí)現(xiàn)一個(gè)完整的USB設(shè)備驅(qū)動(dòng)程序。

    WinDriver也是一個(gè)商業(yè)化的驅(qū)動(dòng)程序開發(fā)包。WinDriver使硬件訪問變成一件很容易的事。在常規(guī)開發(fā)環(huán)境下,使用WinDriver,可以在很短的時(shí)間內(nèi)完成訪問IO端口和存儲(chǔ)區(qū)域,處理中斷,執(zhí)行DMA操作及訪問PCI和自定義寄存器的工作。這種易用性是通過一個(gè)非常強(qiáng)大的組合向?qū)韺?shí)現(xiàn)的。

6. 結(jié)束語
    USB設(shè)備驅(qū)動(dòng)程序提供了應(yīng)用設(shè)備與應(yīng)用軟件的接口,使應(yīng)用程序能以文件調(diào)用的方式來高速,快捷地操作設(shè)備。通過設(shè)計(jì)USB設(shè)備驅(qū)動(dòng)程序,我們實(shí)現(xiàn)了自己開發(fā)的智能儀器基于USB的數(shù)據(jù)采集系統(tǒng)與PC的通信,取得較好的效果。USB設(shè)備驅(qū)動(dòng)程序是一個(gè)USB應(yīng)用系統(tǒng)設(shè)計(jì)當(dāng)中的關(guān)鍵環(huán)節(jié),要想對(duì)USB開發(fā)有一個(gè)全面深入的理解,必須深入理解USB驅(qū)動(dòng)程序設(shè)計(jì)。而且隨著USB技術(shù)的快速發(fā)展及其廣泛應(yīng)用,USB驅(qū)動(dòng)程序的編寫也將變得越來越重要。

熱點(diǎn)新聞

推薦產(chǎn)品

x
  • 在線反饋
1.我有以下需求:



2.詳細(xì)的需求:
姓名:
單位:
電話:
郵件:
主站蜘蛛池模板: 一个色综合高清在线观看-一个色在线视频-一个色在线-一个人在线免费观看www-久久99网-久久99视频免费 | 国产一级免费-国产一级毛片网站-国产一级毛片潘金莲的奶头-国产一级毛片大陆-日本中文字幕免费-日本中文字幕高清 | 青草国产-青草草在线视频-青草草在线观看免费视频-青草草在线-国产高清自偷自在线观看-国产高清自拍视频 | 人妻不敢呻吟被中出A片视频-人妻超级精品碰碰在线97视频-人妻换人妻AA视频-人妻寂寞按摩中文字幕-人妻精品国产一区二区-人妻久久久精品99系列A片毛 | 国产精品视频视频久久-国产精品视频全国免费观看-国产精品视频区-国产精品视频免费视频-四虎国产精品永免费-四虎国产精品永久在线播放 | 一级毛片在线看-一级毛片在线播放免费-一级毛片一级毛片免费毛片-一级毛片一级毛片-九九51精品国产免费看-九号影院 | 精品久久久久久久中文字幕,日韩欧美国产电影,日韩国产欧美一区二区三区在线,青青草原国产一区二区,日本成人久久,欧美在线视频二区 | 五月婷婷激情在线,国产一及毛片,青青热久久国产久精品,激情网站免费,欧美精品三区,97国产影院 | 国产三级在线观看视频-国产三级在线免费-国产三级在线免费观看-国产三级自拍亚洲性爱在线-国产三级做爰在线播放-国产三級三級三級A片视频 | 国产精品高清免费网站-国产精品高清2021在线-国产精品福利在线播放-国产精品福利影院-色黄视频在线观看-色狐视频 | 久久久久久一级毛片免费野外-久久久久久一级毛片免费无遮挡-久久久久久亚洲精品影院-久久久久久亚洲精品不卡-午夜久久精品-午夜精品在线视频 | 18禁欧美猛交XXXXX无码-18禁无遮挡爽爽爽无码视频-18禁止观看免费私人影院-1区2区3区高清视频-日本在线网-日本在线视频一区二区 在线观看日本视频-在线观看日本免费-在线观看日本www-在线观看日本-久久亚洲精品成人-久久亚洲精品tv | 国产日韩精品欧美一区-国产日韩高清一区二区三区-国产日韩不卡免费精品视频-国产日产欧美精品一区二区三区-午夜国产精品免费观看-午夜国产精品理论片久久影院 | 香蕉久久综合-香蕉久久夜色精品国产尤物-香蕉久久夜色精品国产-香蕉久久久久-久久网站视频-久久网免费 | 国产毛片高清,精品综合,日韩亚洲欧美综合,精品国产一区二区三区免费看,精品久久久久久国产牛牛app,亚洲欧美国产精品第1页 | 欧美黑寡妇香蕉视频-欧美国产一区视频在线观看-欧美国产一区二区三区-欧美国产一区二区-国产成人精品第一区二区-国产成人精品2021欧美日韩 | 国产欧美精品一区二区三区四区-国产欧美精品一区二区三区-国产欧美精品一区二区-国产欧美精品系列在线播放-天天爽天天-天天视频一区二区三区 | 美女内射毛片在线看-美女内射毛片在线看免费人动物-美女内射视频WWW网站午夜-美女强奷到抽搐在线播放-美女视频黄a视频全免费网站色窝-美女视频黄的全是免费 | 四虎永久免费影院在线-四虎永久免费影院-四虎永久免费网站免费观看-四虎永久免费观看-国产精品麻豆综合在线-国产精品麻豆一区二区三区 | 伊人色综合久久大香-伊人色综合久久-伊人色综合97-伊人色在线-免费永久在线观看黄网-免费永久国产在线视频 | 久久99国产精品一区二区,欧美日韩另类在线,婷婷四月开心色房播播网,收集最新中文国产中文字幕,亚洲综合激情六月婷婷在线观看,欧美一级淫片 | 国产内射大片-国产男人午夜视频在线观看-国产免费一级片-国产免费一级精品视频-国产免费网站看v片元遮挡-国产免费久久爱久久啪 | www五月天,国产精品视频网站你懂得,精品国产你懂的在线观看,久久伊人成人,国产精品黄页网站在线播放免费,国产va在线 | 四色草视频-四散的尘埃在线观看-四库国产精品成人-四虎最新网址入口-国产精品一区二区三区四区五区-国产精品一区二区三区四区 | 天天插天天搞,国产99在线,九七视频在线观看,2020国产成人精品视频网站,日本久久网,人人澡人人澡人人看青草 | 亚洲午夜久久久久中文字幕,欧美精品久久久久久久久大尺度,91精品推荐,九九久久99综合一区二区,哪里有毛片,精品亚洲一区二区三区 精品国产91乱码一区二区三区,成人国产一区二区三区精品,亚洲一区免费在线观看,日韩在线一区二区三区免费视频,波多野吉衣在线观看,日韩一级精品久久久久 | 国产精品va在线播放我和闺蜜-国产精品va在线观看无码不卡-国产精品V日韩精品V在线观看-国产精品V无码A片在线看-国产精品wwwcom976con-国产精品XXXXX免费A片 | 99re6在线精品视频免费播放-99re6热视频精品免费观看-99re6热精彩视频在线观看-99re6久精品国产首页-嫩草视频在线观看视频播放-嫩草视频在线观看免费 | 欧美在线观看一区,免费看日产一区二区三区,欧美一区二区三区在线,精品1区2区3区,亚洲国产一成人久久精品,久久国产精品最新一区 | 日韩精品免费观看,亚洲精品国产综合一线久久,99精品国产高清一区二区三区香蕉,亚洲图区欧美,日韩电影免费在线观看中文字幕,999国产精品999久久久久久 | jjzz日本女人-jjzz网站-jjzz亚洲亚洲女人-jjzz在线观看-jlzzjizz-jlzzjlzz亚洲日本 | 午夜久久久久久-午夜久久久-午夜精品在线免费观看-午夜精品影院-国产日韩久久-国产日韩精品一区在线观看播放 | 国产成人综合在线观看网站-国产成人综合在线-国产成人综合亚洲亚洲欧美-国产成人综合亚洲动漫在线-国产成人综合亚洲-国产成人综合网在线观看 | 日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看 | 天天色天天爽,久久综合九色综合狠狠97,五月天激情啪啪,国产精品网址你懂的,五月激激激综合网色播免费,国产成人精品久久亚洲高清不卡 | 一本一道久久-一本一道久久综合狠狠老-一本伊人-一本之道久-一本之道无吗一二三区-一道精品视频一区二区三区图片 | 日韩一区二区不卡-日韩一品道-日韩一级一欧美一级国产-日韩一级视频免费观看-亚洲精品AV中文字幕在线-亚洲精品爆乳一区二区H | 五月天婷婷激情,99久久精品久久久久久清纯,免费亚洲网站,久久精品亚洲乱码伦伦中文,精品久久久久久国产牛牛app,97不用下载 | 手机看片福利永久国产日韩-手机看片369-手机精品在线-手机国产乱子伦精品视频-国产精品嫩草影院在线观看免费-国产精品嫩草影院在线播放 | 国内自拍中文字幕,久久久一本精品99久久精品66,精品400部自拍视频在线播放,国产麻豆精品在线,日韩欧美高清视频,久久久免费精品视频 | 91噜噜噜在线观看-91露脸对白-91麻豆福利-91麻豆高清国产在线播放-91麻豆国产-91麻豆国产福利精品 |