免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

LibUSB-Win32實(shí)戰(zhàn):Windows下USB驅(qū)動(dòng)與通信編程全解析

LibUSB-Win32實(shí)戰(zhàn):Windows下USB驅(qū)動(dòng)與通信編程全解析 簡介一套可用于Windows平臺(tái)的LibUSB-Win32編程示例包適合有C/C基礎(chǔ)的設(shè)備驅(qū)動(dòng)開發(fā)者和嵌入式學(xué)習(xí)人員參考旨在不編寫內(nèi)核驅(qū)動(dòng)的前提下通過標(biāo)準(zhǔn)LibUSB接口完成USB設(shè)備的枚舉、讀寫與控制。資源共91個(gè)文件壓縮包約442KB以c/h源碼為主包含def導(dǎo)入定義與lib靜態(tài)庫另配txt說明文檔、bat批處理腳本、makefile工程文件和exe驅(qū)動(dòng)安裝工具從源碼編譯、驅(qū)動(dòng)注冊到實(shí)機(jī)運(yùn)行均有涉及。源碼部分同時(shí)提供C、C#與VB三種語言示例演示庫初始化、設(shè)備枚舉、配置與端點(diǎn)選擇、數(shù)據(jù)收發(fā)等完整流程并展示如何利用P/Invoke調(diào)用原生DLL實(shí)現(xiàn)跨語言控制包內(nèi)還體現(xiàn)USB設(shè)備的描述符層級組織幫助理解VID/PID識別、配置描述符、接口描述符與端點(diǎn)描述符等核心概念。借助msvc、gcc、bcc等目錄下的工程文件與構(gòu)建腳本讀者可快速生成適配本機(jī)的版本。目前已有417人學(xué)習(xí)下載對于希望以輕量方式切入Windows USB編程并快速上手實(shí)際項(xiàng)目的開發(fā)者是一份可直接對照演練的參考資料。1. Windows 下 USB 編程為什么繞不開 LibUSB-Win32從驅(qū)動(dòng)門檻到三行代碼拿到這個(gè)壓縮包的時(shí)候我第一反應(yīng)是翻README.txt和include/usb.h因?yàn)閺奈募湍芸闯鲞@不是一份「教程講義」而是一套可以直接編譯、直接調(diào)用的完整庫。做過 USB 設(shè)備調(diào)試的人都有體會(huì)Windows 下訪問 USB 設(shè)備最惡心的一步不是寫代碼而是驅(qū)動(dòng)。你要么需要 WinUSB、要么需要廠商自己的驅(qū)動(dòng)不然CreateFile根本拿不到設(shè)備句柄。LibUSB-Win32 解決的就是這個(gè)問題——它用一套用戶態(tài)驅(qū)動(dòng)把 Linux 上libusb那套 API 平移到了 Windows裝一次install-filter.exe之后 C/C、C#、VB 都能通過同一個(gè) DLL 控制設(shè)備不用再碰 KMDF/UMDF 那套內(nèi)核開發(fā)流程。這份資源適合兩類人一是被設(shè)備驅(qū)動(dòng)折騰到懷疑人生的嵌入式軟件工程師二是想給自定義 USB 設(shè)備寫上位機(jī)但沒有內(nèi)核驅(qū)動(dòng)簽名條件的朋友。我拿到手之后在 Visual C 6.0 和 VS2019 下各編譯了一遍下面把完整流程和踩過的坑寫出來。2. 先搞懂庫的構(gòu)成libusb0.dll、usb.h 與 install-filter.exe 各管什么2.1 壓縮包里的真實(shí)文件布局與各自作用解壓之后先別急著開 IDE我習(xí)慣先把文件和目錄捋一遍。這個(gè)包里核心的東西是bin、include、lib、examples四個(gè)目錄。include/usb.h是唯一的頭文件整個(gè)庫的 API 聲明全在這一個(gè)文件里別看它只有幾百行usb_init、usb_find_busses、usb_find_devices、usb_open、usb_claim_interface、usb_bulk_read/write、usb_control_msg這些函數(shù)全在里頭。bin目錄下是運(yùn)行時(shí)需要的文件——libusb0.dll是核心動(dòng)態(tài)庫libusb0.sys是驅(qū)動(dòng)文件install-filter.exe是驅(qū)動(dòng)安裝工具testlibusb.exe和testlibusb-win.exe是兩個(gè)測試程序。lib目錄下按編譯器分了子目錄msvc、gcc、bcc對應(yīng) MSVC、MinGW、Borland C 三種工具鏈的導(dǎo)入庫。examples里的bulk.c是批量傳輸?shù)耐暾雍竺嬷v代碼時(shí)我會(huì)拿它做底子。特別要說一下install-filter.exe這個(gè)工具它干的事是給指定 VID/PID 的設(shè)備安裝 LibUSB-Win32 的過濾器驅(qū)動(dòng)。所謂「過濾器」意思是它不接管整個(gè)設(shè)備棧而是插在 USB 棧上層讓用戶態(tài)程序能直接讀寫端點(diǎn)。裝完之后設(shè)備管理器里會(huì)看到設(shè)備變成了 LibUSB-Win32 Devices下面掛著你原來的設(shè)備實(shí)例。這套方案省掉了自己寫 INF、簽名驅(qū)動(dòng)的麻煩但代價(jià)是設(shè)備會(huì)被這個(gè)驅(qū)動(dòng)綁定拔掉換臺(tái)電腦要重裝。2.2 為什么要用 install-filter 而不是自簽驅(qū)動(dòng)很多入門者在這一步會(huì)去折騰「自己寫 INF 加載 libusb0.sys」我勸你不要。LibUSB-Win32 的驅(qū)動(dòng)是未簽名的在 64 位 Windows Vista 之后的系統(tǒng)上強(qiáng)制驅(qū)動(dòng)簽名策略會(huì)直接拒絕加載未簽名驅(qū)動(dòng)除非你每次開機(jī)按 F8 進(jìn)禁用驅(qū)動(dòng)簽名模式——這顯然不是能交付給客戶的方案。install-filter.exe走得是另一條路它利用的是 Windows 對用戶態(tài)驅(qū)動(dòng)過濾機(jī)制的支持安裝過程本質(zhì)是把設(shè)備重定向到 libusb0 驅(qū)動(dòng)上不需要你簽任何東西。我一般在 Win7/Win10/Win11 上都測試過Win10 1809 和 Win11 22H2 都能正常裝沒有碰到簽名攔截。另外要注意的是install-filter.exe安裝時(shí)會(huì)彈一個(gè)對話框讓你選設(shè)備這要求設(shè)備必須先插在機(jī)器上、并且被系統(tǒng)識別為未知設(shè)備或者帶廠商驅(qū)動(dòng)。如果你的設(shè)備已經(jīng)被系統(tǒng)自帶的 usbccgp 驅(qū)動(dòng)接管需要先在設(shè)備管理器里卸載驅(qū)動(dòng)再重新掃描硬件改動(dòng)讓設(shè)備處于「未安裝驅(qū)動(dòng)」?fàn)顟B(tài)這時(shí) install-filter 才能識別到它。這個(gè)順序經(jīng)常有人搞反導(dǎo)致裝完過濾器設(shè)備還是走舊驅(qū)動(dòng)。2.3 編譯環(huán)境選型VC6 可以但 VS2019 要注意運(yùn)行庫壓縮包里lib/msvc那個(gè)目錄里的導(dǎo)入庫是舊的 COFF 格式Visual C 6.0 可以直接用VS2008 之前都沒問題。但我試了下 VS2019 也能鏈接只要在項(xiàng)目里加上libusb0.lib的路徑然后在using namespace之前#pragma comment(lib, libusb0.lib)C 項(xiàng)目就能編過。不過 VS2019 默認(rèn)的字符集是 Unicode而 libusb 的 API 全是窄字符char*你把項(xiàng)目屬性里的字符集改成「多字節(jié)字符集」或者直接忽略警告都行。關(guān)于libusb0.dll的依賴它只依賴系統(tǒng)的ntdll.dll、kernel32.dll、user32.dll這三個(gè)基礎(chǔ) DLL不像后來 libusb 1.0 還需要 WinUSB 或 libusbK 支撐。這既是優(yōu)點(diǎn)也是缺點(diǎn)優(yōu)點(diǎn)是部署到干凈 Windows 機(jī)器上不需要裝 VC Redistributable 運(yùn)行庫缺點(diǎn)是這個(gè)庫 32 位版只支持 32 位進(jìn)程如果你的上位機(jī)是 x64 編譯的得用包里msvc_x64目錄下那份獨(dú)立編譯的 x64 版 DLL兩個(gè)平臺(tái)的文件不能混用。3. 從枚舉到讀寫用 Visual C 完成一次完整 USB 通信3.1 初始化與設(shè)備枚舉先掃總線再按 VID/PID 找設(shè)備寫代碼之前先把bin目錄里的testlibusb-win.exe跑一遍它會(huì)列出當(dāng)前總線上所有 USB 設(shè)備的總線號、設(shè)備號和 VID/PID這個(gè)輸出可以用來驗(yàn)證驅(qū)動(dòng)是否裝成功了。如果這步出來的列表是空的問題九成在驅(qū)動(dòng)沒綁上而不是代碼問題。下面是我實(shí)際項(xiàng)目里用的初始化模板#include stdio.h #include usb.h int main(void) { struct usb_bus *bus; struct usb_device *dev; usb_init(); // 初始化 libusb 內(nèi)部狀態(tài) usb_find_busses(); // 掃描系統(tǒng)里的 USB 總線 usb_find_devices(); // 掃描每條總線上的設(shè)備 for (bus usb_get_busses(); bus; bus bus-next) { for (dev bus-devices; dev; dev dev-next) { printf(%04x:%04x bus%s dev%s\n, dev-descriptor.idVendor, dev-descriptor.idProduct, bus-dirname, dev-filename); } } return 0; }usb_init()只需要調(diào)一次usb_find_busses()和usb_find_devices()每次重新枚舉時(shí)都要成對調(diào)用比如熱插拔之后要從頭再掃一遍。usb_get_busses()返回的是靜態(tài)分配的鏈表頭遍歷時(shí)不用自己釋放內(nèi)存。鏈表中每個(gè)usb_device結(jié)構(gòu)體里的descriptor字段存放了設(shè)備描述符idVendor和idProduct是識別設(shè)備最關(guān)鍵的兩個(gè)值后面的usb_open()是拿設(shè)備句柄而查找匹配得靠這兩個(gè) ID。3.2 打開設(shè)備與聲明接口內(nèi)核里有個(gè)「互斥鎖」在等你找到設(shè)備之后下一步是打開并聲明接口。這里有個(gè)容易翻車的地方usb_open()成功只能說明句柄拿到了但如果你不調(diào)usb_claim_interface()后續(xù)的usb_bulk_write()會(huì)返回-EBUSY。原因是 LibUSB-Win32 在內(nèi)核驅(qū)動(dòng)里給每個(gè)接口加了一把互斥鎖一次只允許一個(gè)進(jìn)程占用接口不聲明接口就相當(dāng)于沒進(jìn)臨界區(qū)。usb_dev_handle *handle usb_open(dev); if (!handle) { fprintf(stderr, usb_open 失敗: %s\n, usb_strerror()); return -1; } // 拿配置描述符里的接口數(shù)一般設(shè)備只有一個(gè)接口 int ret usb_claim_interface(handle, 0); if (ret 0) { fprintf(stderr, usb_claim_interface 失敗: %d, %s\n, ret, usb_strerror()); usb_close(handle); return -1; }usb_claim_interface的第二個(gè)參數(shù)是接口編號多數(shù)設(shè)備是 0。有些復(fù)合設(shè)備有多個(gè)接口比如聲卡加按鍵控制那就得逐個(gè) claim但 LibUSB-Win32 對多接口同時(shí) claim 的支持不完整我實(shí)測在雙接口設(shè)備上第二個(gè)接口經(jīng)常 claim 失敗遇到這種情況建議只碰主接口。usb_strerror()是排查錯(cuò)誤的好幫手幾乎所有 API 返回負(fù)數(shù)時(shí)都能用它拿到人類可讀的原因比裸看錯(cuò)誤碼強(qiáng)太多。3.3 批量傳輸端點(diǎn)地址與包大小的四組關(guān)鍵參數(shù)批量傳輸是 USB 設(shè)備最常用的數(shù)據(jù)通道方式examples/bulk.c里就有現(xiàn)成的例子。它的邏輯很直接從 bulk-in 端點(diǎn)收數(shù)據(jù)、往 bulk-out 端點(diǎn)發(fā)數(shù)據(jù)。改參數(shù)時(shí)看四點(diǎn)int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout); int usb_bulk_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);ep是端點(diǎn)地址注意它包含了方向位——0x81 表示 endpoint 1 IN設(shè)備到主機(jī)0x01 表示 endpoint 1 OUT主機(jī)到設(shè)備地址里的最高位 0x80 就是方向標(biāo)志照抄設(shè)備數(shù)據(jù)手冊里的端點(diǎn)描述符即可。size是單次傳輸?shù)淖畲笞止?jié)數(shù)這個(gè)值必須小于等于端點(diǎn)描述符里的 wMaxPacketSize超了驅(qū)動(dòng)會(huì)給你攔下來或者拆包。timeout單位是毫秒0 表示無限等待我建議實(shí)際項(xiàng)目里不要設(shè) 0設(shè)個(gè) 1000 就夠不然設(shè)備異常時(shí)線程會(huì)卡死在驅(qū)動(dòng)里。返回值是實(shí)際傳輸?shù)淖止?jié)數(shù)負(fù)數(shù)是錯(cuò)誤碼。// 從端點(diǎn) 0x81 收一包超時(shí) 1000ms char buffer[64]; int len usb_bulk_read(handle, 0x81, buffer, sizeof(buffer), 1000); if (len 0) { // 常見錯(cuò)誤: -110 超時(shí), -4 設(shè)備不存在, -9 接口未 claim fprintf(stderr, bulk read failed: %d\n, len); } else { process_packet(buffer, len); }真實(shí)設(shè)備上有個(gè)規(guī)律大批量數(shù)據(jù)比如幾百 KB要拆成多次usb_bulk_read循環(huán)調(diào)用因?yàn)閱未?size 受端點(diǎn)最大包限制。我一般先把端點(diǎn)描述符的 wMaxPacketSize 打印出來然后按這個(gè)值設(shè) size配合 while 循環(huán)去收完整個(gè)數(shù)據(jù)流。如果傳來的是變長幀很多設(shè)備會(huì)在包末尾帶一個(gè)短包或 ZLP零長度包來標(biāo)記結(jié)束代碼里要留意len 0的情況別當(dāng)錯(cuò)誤處理。3.4 控制傳輸讓設(shè)備進(jìn)入配置模式的標(biāo)準(zhǔn)動(dòng)作除了批量傳輸控制傳輸是 USB 設(shè)備另外一個(gè)逃不掉的通道所有標(biāo)準(zhǔn)請求獲取描述符、設(shè)置配置、設(shè)置地址都走控制管道。LibUSB-Win32 里對應(yīng)的是usb_control_msg它在底層幫你構(gòu)造了 Setup Packet比直接調(diào) DeviceIoControl 要友好很多。int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);requesttype是 bmRequestType重點(diǎn)看它的三個(gè)位段bit7 是方向0x80 表示設(shè)備到主機(jī)bit6-5 是類型0x00 標(biāo)準(zhǔn)、0x20 廠商、0x40 保留bit4-0 是接收者0x00 設(shè)備、0x01 接口、0x02 端點(diǎn)。request是 bRequest標(biāo)準(zhǔn)請求里 0x06 是 GET_DESCRIPTOR0x09 是 SET_CONFIGURATION廠商自定義設(shè)備通常用 0x00-0xFF 里的值具體查設(shè)備手冊。value和index的含義跟著請求走比如 GET_DESCRIPTOR 時(shí)value高字節(jié)放描述符類型0x02 配置描述符、低字節(jié)放索引index放語言 ID。實(shí)話說控制傳輸最容易出錯(cuò)的就是 bmRequestType 的位段拼錯(cuò)我在往一個(gè)指紋模組寫廠商控制命令時(shí)就因?yàn)樵?requesttype 里漏了 0x80 方向位導(dǎo)致設(shè)備一直不回?cái)?shù)據(jù)最后用 USB 分析儀抓包才定位到。建議調(diào)試初期先把標(biāo)準(zhǔn)請求比如 GET_DESCRIPTOR調(diào)通確認(rèn)控制管道沒問題再碰廠商私有命令。4. 避坑與排查LibUSB-Win32 在 Windows 上的五個(gè)常見翻車點(diǎn)4.1 安裝了過濾器驅(qū)動(dòng)但 testlibusb-win 看不到設(shè)備現(xiàn)象install-filter.exe執(zhí)行完顯示成功設(shè)備管理器里也出現(xiàn)了 LibUSB-Win32 Devices但跑testlibusb-win.exe列表里就是沒有目標(biāo)設(shè)備。原因設(shè)備管理器里看到的不一定是「被 libusb0.sys 接管」的狀態(tài)。常見情況是系統(tǒng)里同時(shí)裝了廠商官方驅(qū)動(dòng)LibUSB-Win32 的過濾器掛在了驅(qū)動(dòng)棧的上層而usb_find_devices()是通過遍歷 USB 總線上的設(shè)備節(jié)點(diǎn)來枚舉的沒有暴露給 libusb0 的設(shè)備自然掃不到。解決在設(shè)備管理器里找到目標(biāo)設(shè)備右鍵「更新驅(qū)動(dòng)程序」→「瀏覽我的電腦」→「讓我從列表中選取」選 LibUSB-Win32 Device 那個(gè)條目。如果列表里沒有把bin目錄下的libusb0.inf手動(dòng)指定一下路徑再選。裝完之后把設(shè)備拔插一次確保驅(qū)動(dòng)棧重新綁定。4.2 64 位系統(tǒng)下程序一啟動(dòng)就崩潰錯(cuò)誤碼 0xC0000135現(xiàn)象程序編譯通過運(yùn)行后立刻彈「找不到 libusb0.dll」或者直接啟動(dòng)失敗。原因LibUSB-Win32 的 x64 DLL 和 32 位 DLL 不能互相替代如果你用 x64 編譯器、但鏈接了 32 位版導(dǎo)入庫運(yùn)行時(shí)加載 DLL 的架構(gòu)匹配不上直接掛。更隱性的坑是系統(tǒng) PATH 里存在一個(gè)舊版本 DLL應(yīng)用程序從 PATH 里找到了錯(cuò)誤位數(shù)的庫。解決把bin目錄里對應(yīng)架構(gòu)的 DLL 拷貝到 exe 同目錄這樣可執(zhí)行文件會(huì)優(yōu)先從自身目錄加載。VS 工程里注意 link 選項(xiàng)的Additional Library Directories用lib/msvc_x64還是lib/msvc兩個(gè)目錄不能加錯(cuò)。調(diào)完記得用 Dependency Walker 看一眼實(shí)際加載的 DLL 路徑。4.3 反復(fù)-110超時(shí)但同一條命令在 Linux 下是好的現(xiàn)象usb_bulk_read老是返回 -110超時(shí)換到 Linux 上同一個(gè)設(shè)備同樣的讀寫操作完全正常。原因Windows 對 USB 有 EHCI/xHCI 控制器級別的不同調(diào)度策略LibUSB-Win32 對中斷傳輸和批量傳輸?shù)木彺婀芾頉]有 libusb 1.0 那么激進(jìn)而且這個(gè)老庫對高速批量端點(diǎn)Bulk-Only的處理有個(gè)已知限制——單次傳輸 size 過大時(shí)容易超時(shí)。解決把單次 size 從端點(diǎn)的 wMaxPacketSize 改成它的一半或者每次讀前先發(fā)一個(gè) 0 字節(jié)控制請求重置設(shè)備端點(diǎn)。我習(xí)慣把 size 設(shè)為 4096 以下實(shí)測 -110 的概率會(huì)大幅降低。另外檢查一下usb_set_configuration(handle, 1)有沒有調(diào)用沒設(shè)配置就讀寫會(huì)有詭異行為。4.4 USB 線一拔程序就死鎖回收線程卡在 usb_close現(xiàn)象設(shè)備熱插拔之后負(fù)責(zé)通信的線程沒有異常返回而是直接掛死調(diào)試發(fā)現(xiàn)卡在usb_close()或者usb_release_interface()。原因LibUSB-Win32 在設(shè)備突然斷開時(shí)不會(huì)給所有阻塞中的 IO 請求立即返回錯(cuò)誤驅(qū)動(dòng)棧的處理方式是等待超時(shí)或下一次訪問時(shí)報(bào)錯(cuò)這在拔線的瞬間會(huì)形成窗口。解決程序里不要依賴單次調(diào)用的返回值來判斷設(shè)備斷開要疊加一個(gè)心跳機(jī)制——周期性地發(fā)一個(gè)輕量控制請求比如 GET_DESCRIPTOR 或者廠商自定義的讀版本號命令連續(xù)失敗 N 次再觸發(fā)usb_reset()或usb_close()。同時(shí)把timeout從 0 改成有限值別讓線程無限阻塞。4.5 同一臺(tái)電腦上多個(gè)進(jìn)程互相搶設(shè)備現(xiàn)象兩個(gè)上位機(jī)程序同時(shí)操作同一個(gè) USB 設(shè)備后啟動(dòng)的進(jìn)程 claim 接口失敗甚至先啟動(dòng)的進(jìn)程也出現(xiàn)間歇性讀取錯(cuò)誤。原因LibUSB-Win32 的互斥是接口級別的不是設(shè)備級別的而且它在多個(gè)進(jìn)程上的行為不如 libusb 1.0 穩(wěn)定。解決設(shè)計(jì)上做一個(gè)單實(shí)例互斥體CreateMutex帶固定名字同一時(shí)刻只允許一個(gè)進(jìn)程打開設(shè)備。如果需要多個(gè)進(jìn)程協(xié)作讀寫不同端點(diǎn)建議改用 libusb 1.0 的libusb_set_auto_detach_kernel_driver那種方案。我這個(gè)經(jīng)驗(yàn)可能有點(diǎn)保守但在這個(gè)老庫上多進(jìn)程并發(fā)確實(shí)就是坑。5. 進(jìn)階用法與動(dòng)態(tài)庫封裝把 LibUSB-Win32 變成 C/C# 都能調(diào)的模塊5.1 用 C 類把 C 接口包裝成 RAII 風(fēng)格句柄生命周期不再裸奔用裸 C API 寫大型上位機(jī)項(xiàng)目最大的隱患是usb_dev_handle*指針在異常路徑下容易泄漏——某一個(gè)usb_claim_interface失敗直接 return后面usb_close就不會(huì)執(zhí)行。我一般會(huì)做一層薄封裝把 LibUSB-Win32 的 C API 收進(jìn) C 類里。這里的關(guān)鍵是用一個(gè) struct 來保存設(shè)備句柄、接口號、端點(diǎn)地址然后讓構(gòu)造函數(shù)負(fù)責(zé)枚舉和打開析構(gòu)函數(shù)負(fù)責(zé)釋放。注意這個(gè)類不能拷貝因?yàn)榭截惲司浔羔槙?huì)導(dǎo)致兩次usb_close操作同一個(gè)內(nèi)存地址直接崩。class UsbDevice { public: UsbDevice(int vid, int pid, int interface_id 0) : handle_(nullptr), interface_id_(interface_id) { usb_init(); usb_find_busses(); usb_find_devices(); for (usb_bus* bus usb_get_busses(); bus; bus bus-next) { for (usb_device* dev bus-devices; dev; dev dev-next) { if (dev-descriptor.idVendor vid dev-descriptor.idProduct pid) { handle_ usb_open(dev); if (handle_ usb_claim_interface(handle_, interface_id_) 0) { return; } if (handle_) usb_close(handle_); handle_ nullptr; } } } } ~UsbDevice() { if (handle_) { usb_release_interface(handle_, interface_id_); usb_close(handle_); } } int BulkRead(int ep, char* buf, int size, int timeout_ms) { return usb_bulk_read(handle_, ep, buf, size, timeout_ms); } private: usb_dev_handle* handle_; int interface_id_; };這段代碼把「找設(shè)備、打開、聲明接口」壓縮到了構(gòu)造函數(shù)里每個(gè)步驟失敗時(shí)句柄都會(huì)被及時(shí)釋放不會(huì)出現(xiàn)半初始化的對象。實(shí)際使用時(shí)如果構(gòu)造函數(shù)執(zhí)行完handle_仍為nullptr說明設(shè)備沒插好或驅(qū)動(dòng)沒綁直接拋異?;蚍祷劐e(cuò)誤即可。析構(gòu)函數(shù)里usb_release_interface在設(shè)備已被拔掉時(shí)可能返回負(fù)值但析構(gòu)函數(shù)里不能拋異常所以這里我選擇忽略返回值讓usb_close去兜底清理。5.2 用 C# 的 P/Invoke 調(diào) libusb0.dll三種封送最容易出錯(cuò)的類型如果上位機(jī)是 C# / VB.NET 寫的可以繞開 C 層直接 P/Invoke 調(diào)libusb0.dll。但這里有幾個(gè)類型映射不是想當(dāng)然就能抄對的我踩過幾個(gè)坎列一下常用的幾個(gè)函數(shù)簽名[DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern void usb_init(); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_find_busses(); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_find_devices(); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern IntPtr usb_open(IntPtr usbDevicePtr); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_claim_interface(IntPtr dev, int iface); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_bulk_read(IntPtr dev, int ep, byte[] bytes, int size, int timeout); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_bulk_write(IntPtr dev, int ep, byte[] bytes, int size, int timeout); [DllImport(libusb0.dll, CallingConvention CallingConvention.Cdecl)] public static extern int usb_close(IntPtr dev);三個(gè)注意點(diǎn)第一usb_bulk_read的 buffer 參數(shù)用byte[]就可以CLR 會(huì)自動(dòng)把它釘在內(nèi)存上不需要手動(dòng)GCHandle.Alloc但前提是size不能超過數(shù)組長度超了會(huì)踩內(nèi)存。第二CallingConvention一定要是Cdecllibusb0.dll 的導(dǎo)出函數(shù)是 C 調(diào)用約定如果寫成默認(rèn)的Winapi也就是 stdcall64 位下也許碰巧沒問題32 位下必定棧錯(cuò)亂。第三usb_open接收的是usb_device*指針在 C# 側(cè)如果是通過遍歷usb_get_busses()拿到的先封成IntPtr再傳不要試圖直接拿托管結(jié)構(gòu)體去轉(zhuǎn)。之前有人在論壇上問為什么 C# 里usb_bulk_read總是讀不到數(shù)據(jù)后來發(fā)現(xiàn)是usb_init忘調(diào)了——這個(gè)函數(shù)在 C 側(cè)省略調(diào)用偶爾也能工作因?yàn)?DLL 內(nèi)部有默認(rèn)初始化但在跨語言調(diào)用時(shí)丟一次初始化就會(huì)讓內(nèi)部狀態(tài)機(jī)完全不對。所以 C# 里嚴(yán)格按照usb_init → usb_find_busses → usb_find_devices順序來一步都不能省。5.3 部署細(xì)節(jié)DLL 該放哪、驅(qū)動(dòng)怎么跟隨 U 盤分發(fā)最后一個(gè)影響交付體驗(yàn)的點(diǎn)是部署。LibUSB-Win32 的驅(qū)動(dòng)安裝本質(zhì)是修改了系統(tǒng)的 USB 驅(qū)動(dòng)棧配置所以「綠色版免安裝」是不存在的哪怕程序本身不用安裝驅(qū)動(dòng)必須裝一次。我現(xiàn)在的做法是做一個(gè)driver_installer目錄里面放install-filter.exe、libusb0.dll、libusb0.sys、libusb0.inf然后寫一個(gè) bat 腳本把 DLL 拷到 exe 同目錄避免 PATH 污染。echo off set BIN_DIRdriver_installer set APP_DIR. echo [1/2] 安裝 LibUSB-Win32 過濾器驅(qū)動(dòng) %BIN_DIR%\install-filter.exe -q echo [2/2] 部署 libusb0.dll 到程序目錄 copy /Y %BIN_DIR%\libusb0.dll %APP_DIR%\ copy /Y x64\libusb0_x64.dll %APP_DIR%\libusb0_x64.dll echo 完成。請將設(shè)備插入 USB 口后重新運(yùn)行程序。 pause這個(gè)腳本里的-q參數(shù)是靜默模式但實(shí)測在某些 Windows 版本上靜默安裝會(huì)失敗失敗時(shí)就去掉-q讓用戶手動(dòng)選設(shè)備。設(shè)備文件不加簽名所以安裝時(shí)用戶會(huì)被 UAC 彈窗問一次是否允許更改設(shè)備設(shè)置這是預(yù)期行為要在交付說明里寫明。我還踩過一個(gè)跟 VC 運(yùn)行庫相關(guān)的坑程序如果靜態(tài)鏈接了新版 MSVC 的運(yùn)行庫部署到?jīng)]有裝過 VS Redistributable 的機(jī)器上會(huì)報(bào)錯(cuò)建議項(xiàng)目屬性里把/MT換成/MD或者直接把對應(yīng)的 vc_redist 塞到安裝包里。從那以后我每次交付 LibUSB-Win32 相關(guān)的上位機(jī)都強(qiáng)制自己走一遍完整流程新裝一臺(tái)干凈的 Windows VM插設(shè)備、裝過濾器、跑 testlibusb-win、再跑自己的程序。這套驗(yàn)證流程幫我提前擋掉了大部分用戶側(cè)的「驅(qū)動(dòng)沒裝對」「DLL 版本不對」問題。這個(gè)老庫雖然不像 libusb 1.0 維護(hù)得那么活躍但在不少工控方案里它仍然是首選因?yàn)榻涌诤唵?、依賴少把上面這幾個(gè)坑避開它就能在本地上好好干活。希望這篇拆解能幫你節(jié)省幾個(gè)晚上的排查時(shí)間。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色欲天天综合网| 91精产一区三区免费观看| 激情小说视频图片网| 综合色影| 都市激情亚洲| 色99最新网址| 拍真实国产伦偷精品| 五月婷婷色激情| 综合网色| 亚洲在线综合| 亚洲黄3级片网站欧美| 九九热最新| 99视频在线精品免费观看2| www,五月天com| 国产亚洲av片| 婷婷五月丁香人妻无码高清| 久久综合26p| 四色永久成人网站| 九九99精品| 无码99| 五月天婷婷在线观看精品男人| 婷婷色色欧美| caopeng97人人| 亚洲狠狠色丁香婷婷综合久久| 色色婷婷五月天| 色久五月天| 五月天久久婷婷婷| 久久人人人人妻| 婷婷激情五月天7| 日本系列_4页_777FP| 开心婷婷五月综合| 激情色情五月天| 国产做A爰片毛片A片美国| 六月婷婷开心| 国产亚洲精品AAAAAAA片| 综合色色网| 色99视| 国产肥白大熟妇BBBB视频| 婷婷六月色| 久久九区| 97av在线视频| 国产精品成人AV在线观看春天| 激情五月天视频| 久色大| 久久这里只| 五月天婷婷成人资源站| 国产另类综合| 色播激情五月天| 五月婷婷激情综合视频| 中文AV网站| 激情小说 五月天| 婷婷丁香五月精品| 色婷婷五月天天天干天天操天天爽 | 久久六月婷婷| 国产精品A片在线| 99久久欧美| 欧美激情综合五月色丁香| 亚洲中文字幕网| www.91色| 丁香婷婷五月天成人| 激情五月四色| 天天操天天曰天天射| 99热99| 综合婷婷久久| 婷婷激情六月| 色色欧美色色色| 99在线精品免费视频| 五月天啪啪| 色五月亚洲| 粉嫩AV久久一区二区三区| 五月婷婷六月丁香| Www.se.久久| 久久日婷婷| 精品国产a| 久草九九| 狠狠 婷婷| 五月天中文网| 伊人玖玖精品| 国产做爰视频免费播放| 9热在线视频| 9l视频自拍九色9l视频在线观看| 二色av| 五月丁香六月婷婷综合免| 另类小说婷婷色| 六月丁香影院| 青青草五月天| 综合激情九月婷婷,激情综合婷婷中文字| 婷婷六月天| 久久久久8888| 亚州日本欧州韩美高青高潮一| 天天干天天爽天天爽| 婷婷五月天色播| 狠狠干婷婷| 婷婷在线播放av| 成人婷婷五月天| 九九精品视频在线观看| 91日本在线观看| 天堂久久久久天堂网| 97热九九| 先锋av性爱成人电影| 九热视频| 国产欧美性成人精品午夜| 丁香av网| 久婷婷久草| 色亭亭五月天丁香综合AV - 百度 - 百度| 色五月激情网| 久久综合五月天| 五月丁香六月激情网| 五月天开心婷婷激情网站 | 99色一| 97九色视频| 99国产精品久久久久久久久久久 | 激情五月婷婷色播网| 丁香婷婷激情| 人人操人人妻| 天天综合干| 可以免费观看的AV| 97超级碰| 婷婷六月久久| 91超级碰| 在线成人网站| 中文字幕av在线播放| 久久久久久久久久久久久9| 九月色婷婷综合| 天天做天天爰天天爽天天无遮挡| 人人摸人人| 九九激情视频| 丁香五月五婷| 精品国产一区二区三区四区阿崩| 99,色| 丁香五月综合网亚洲综合欧美狠狠| 日韩无码专区| WWW免费视频碰碰碰碰| www 五月天 com| 五月香婷婷| 97ai婷婷| 久久久久久久久人妻| 中文字幕日产A片在线看| 超级黄色片| www激情网| 婷婷深爱五月| 婷婷日在线观看| 开心深爱激情网| 精品一二三区久久AAA片| 99久久99九九九99九他书对| 五月丁香啪综合| 大鸡巴伊人网| 激情综合网五月激情| 国产偷人爽久久久久久老妇APP| 99久久久久| 99热这里只有精品5| 免费无码毛片一区二区A片| 最新av在线观看| 五月亭亭狠狠| 欧美日韩成人在线观看| 玖玖综合网| 4438成人电影| 五月久久婷婷| 成人短视频在线| 79精品视频在线观看,| 亚洲视频色婷婷| 亚洲激情四射色| 欧美日韓成人亚洲精品另类| 国色天香成人网| 天天插天天狠| 国产日韩精品SUV| 激情啪啪五月天| 五月丁香婷婷成人网| 五月 激情视频| 五月丁香婷婷深深爱| 久久五月天丁香| 婷婷草| 一区=区操屄高清大全av| 狠狠色精品综合| 日韩av一区二区在线/日产精品久久久| 久久99免费视屏| www.狠狠操| 第四色色六月色综合| 久久人人妻| 99rewww| 色色婷| 激情综合五月激情XXXX| www.五月天| 亚洲精品小视频| 播丁香五月婷婷欧美| 色色亚卅| 色婷婷777狠狠| 婷婷久久五月天丁香| 色色色五月婷| www.yw尤物| 五月婷高清视频| 日本不卡高字幕在线2019| 五月天精品综合在线| 丁香五月婷婷啪啪视频| 婷婷五月天综合久久| 久99综合婷婷| 国产真实乱了老女人视频| 无码激情精品色婷婷久久久久| 超碰在线观看三级片| 常久最新免费的色吊丝| 丁香花五月天激情| 99色爱| 婷婷干五月综合在线播放| 丁香婷婷老司机久操| 五月开心网| 婷婷啪啪| 五月丁香A片| 网色99| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 五月色网| 激情婷婷网| 九九大香蕉黄色影院| 日本色99| 日本欧美国产| 激情综合亚洲| 久草视频大香蕉99| 激情AV| 天天爽综合网| 亚洲婷婷丁香五月在线| 成人AV网站在线| 五月天久久久| 国产VA亚洲VA96| 色综合久久44| 国产黄色av| 99热网站| 色色色区| 五月日韩中文字幕| 五月天另类视频| 99久久久国产精品免费蜜乳tv| 日韩精品一区二区亚洲AV观看| 九九在线视频| 超碰在线观看9| 成人色站,在线视频,看片-SS1AV| 日本WWW九九九| 99热99色| 色狠狠综合| 五月丁香五月天现场视频| 在线观看免费狠狠色丁香香综合| 久久九九热38| 强壮的公次次弄得我高潮A片日本 | 天天色天天操天天射| 婷婷另类开心| 深夜男女福利刺激影院一区完整| 丁香五月婷婷www..com| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | se色婷婷视频| 可以免费观看的AV| 色综合久久天天综合网| 思思热久热| 色播五月婷婷综合| 天天操天天爱天天日| 五月色丁香婷婷综合| 97人人超| 综合色99| 婷婷五月天色播| 狠狠色狠狠| 狠狠婷婷综合| 色一情一乱一伦一区二区三区| 99噜噜| 五月 婷婷 成人| 玖玖资源部在线播放| 丁香婷婷色色| 久久嘟嘟丁香| 婷婷五月丁香色播| 中文字幕第四色.999| 中文字幕有多少字| 国产69久久久欧美黑人A片| 婷婷五月综合久久中文字幕| 五月天天综合| 国产精品国产| 色色色五月婷| 婷婷色丁香五月| 婷婷五月天伊人| 日韩精品二三区| 狠狠搞综合色| 伊人天天色| 五月婷婷免费在线| 思思久久网| 538任你爽| 午夜日日| 99热99极品观看| 热996精品在线观看| 人人艹艹艹| 九九热精品| 夜夜夜夜夜操| 丁香六月婷婷综合| 久久国产一区二区三区| 久99999热视频在线观看免费| 五月天婷婷伊人| 久久99这里只有精品| 亚洲综合99| 日韩久热| 色五月婷婷色| 激情综合网之激情五月| 五月天婷婷色播在线网| 久久精品视频9| 激情综合亚洲色婷婷五月| 五月婷婷婷婷婷婷艺术| 激情99在线视频| 99在线精品免费视频| 色久综合天天做视频| 色五月激情综合| 九九爱看亚洲| 人人射人人高潮| 狠狠穞A片一區二區三區| 66色在线日韩| 成人在线网| 九九精品热| 久久久97| 婷婷中文字幕网站| 亚洲爱婷婷| 欧美日韩成人在线观看| 婷激情五月天视频导航| 996热re视频精品视频这里| 婷婷五月天香蕉| 丁香婷婷影院| 夜夜撸日日操| 久久日婷婷| 青青草Avb在线| 内射综合网| 亚洲综合激情五月久久| 婷婷五月丁香色情| 五月天天天天天天天天天天天天天天天婷婷婷 | 天天操夜夜夜拍拍拍| 天天色色婷婷| 久99久精品| 五月婷综合| 亚洲日韩乱码一区二区三区四区 | 午夜日韩久久久网站| 色婷婷a| 色婷婷黄色网络| 97色五月天| 六月色丁香中文字幕| 日本va欧美va国产激情| 丁香五月伊人| 欧美久久久久久久久中文字幕| 丁香五月激情啪| 丁香五月婷婷婷婷欧美综合| 日韩在线五月天婷婷| 久色激情| 色五月,com| 骚五月婷婷| 激情五月激情综合网一级丸片| 日日夜夜天天爽| 五月丁香好婷婷A片网| 久热大香蕉| 99碰碰碰| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | www.91.com处女在线直播| 精品51XX| 五月天色五月| 久操97| 五月色情婷婷开心五月色情| 五月丁香六月色| 少妇搡BBBB搡BBB搡毛茸茸| 六月色激情| 婷婷五月丁香激情色情| 99热伊人| caopeng97人人| 最新午夜理论片| 色99视频| 大操人妻| 五月丁香婷婷激情在线| 五月天综合网| www.射伊蕉婷婷| 国产五月婷| 激情小说五月天| 欧美三级巜人妻互换| 久久久性爱网| 色欲一二三| 婷婷五月花| 五月天丁香成人社| 综合网天天| 亚洲成人AV电影在线| 综合久久99| 久久婷婷五月综合色丁香| 色综合久久之分久久| 五月丁香免费视频| 狠狠狠狠狠| 亚洲三级无码| 五月天色官网| 国产免费一区二区在线A片视频| 看全色黄大色大片| 丁香五月婷婷日本| 天堂网亚洲色图| 先锋男人99资源| 婷婷网五月天| 五月开心婷婷极品激情| 欧美操人| 精品激情| 九月婷婷综合| 91精品久久久久久| 99热这里是精品| 中文成人在线| 五月天亭亭俺也| 九九草草逼| 婷婷六月网| 操99| 丁香女人五月天| 亭亭色色五月天| 日本色久| 色婷婷免费观看| 大香蕉操操| 丁香五月激情综合| AV色婷婷| 久久婷婷色| 五月丁香无码| 色婷婷av在线观看| 五月天婷婷色色| 影音先锋一区| 成人精品在线| 五月婷婷六月丁香| 亚洲mm色| 影音先锋秋秋五月婷婷| 欧美美美女性色视频| 无码字幕中文| 天天摸天天透天天舔| 中文字幕无码成人电影| 色5月婷婷色| 中文久久婷婷| 碰碰91| 久久婷婷亚洲| 亚洲亚洲人成综合网络| 九九热这里只有精品31| 九九综合图片网| h亚洲| 另类综合激情| 狠狠操天天干| 天天天天天天噜| 色碰97| 天天干天天做| site:hcxsz888.com| 亚洲中文字幕av| 综合逼五月激情婷婷| 人妻丰满精品一区二区A片| 五月天色婷婷视频| 婷婷第一页| 五月婷激情影院| 狠狠色综合网| 影音先锋91在线资源站| 99热6这里只有精品| 色播五月综合网| 久99视频| 逼逼AV| 超碰免费观看| 婷婷丁香五月麻豆| 欧美性丁香色色五月天| 大香av| 五月天婷婷无码| 天天摸夜夜爽天天做| 高清av在线国产| 91丨九色丨熟女| 色婷婷内射| 婷婷综合久久综合| 久久丁香五月婷婷| 麻豆五月丁香婷婷| 久久综合中文| 内射 无码 伊人| 五月天婷综合| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 管管補管管紱| 五月丁香婷草| 超碰婷婷五月| 五月天激情久久| 这里只有九九精品| 99操| 人碰91| 成人av免费观看| 操人妻视频91| 99热这里只有精品手机在线观看| 色婷婷文字幕| 最近中文字幕2019视频1| 国产va视频| 99热这里有精品6| 色色热日| 蜜桃五月天| 人妻久久久久久| 91热er| 九月色婷婷综合| 麻豆WWWCOM内射软件| www.婷婷| 这里只有精品视频在线看| 91性高潮久久久久久久久| yjzz亚洲国产| 婷婷综合五月| 婷婷在线综合| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 国产黄大片在线观看画质优化 | 26UUU精品一区二区Com| 97成人丁香婷婷| 99玖玖视频| 色婷婷丁香A片区毛片区女人区| 超碰色综合| 五月开行婷婷色五月| 五月开心婷婷极品激情| 97热这里精品在线视频| 综合久久五月| 亚洲宗合激情| 国产亚洲成AV人片在线观黄桃| 九九re精品视频在线观看| 丁香五月婷婷色| 婷婷五月天,影院| 丁香五月色| 亚洲午夜一区二区| 伊人久久大香| 啪啪视频99| 免费无码毛片一区二区A片| 色五月婷婷亚洲| 噜噜色五月| 这里只有精品2| 丁香五月激情澎湃一区| 激情五月激情综合网一级丸片| 超碰成人在线观看| 另类综合激情| 91操网| 婷婷五月天久久综合88| 色九综合| 激情综合在线播放| 亚洲综合在线网站| 激情丁香久久| 老师把我爽高潮了免费A片| 99精品丰满| 亚洲久久天堂| 午夜在线成人网站免费观看| 婷婷丁香五月社区亚洲| 色色色宗合网| 97人人操人| 精品国产a| 亚洲精品九九| 性爱五月婷婷| www久久久久| 激情无码网| 超碰99热精品| 六月丁香综合| 激情综合婷婷| 狠狠操之狠狠操| 人人爱干人人爱草| 天天色,天天操,天天射| 操射国产日本| 婷婷狠狠干| 超碰不卡在线| 99热国产| 色五月激情五月| 91 欧美| 国产性爱大片久久| 日本99视频精品免费播放| 一二区成人电影| 婷婷操久久| 色婷婷久久久| 丁香五月婷婷色五月| 日日射天天射| 能看的av网站| 五月综合久久| 免费无码毛片一区二区A片| 极品人妻VIDEOSSS人妻| 色婷狠狠| 51XX午夜影福利| 激情q青青草在线婷婷| 狠狠88综合久久久久噜噜噜| 中文不卡一二区| 天天摸天天透天天舔| 国产成人高清| 日日夜夜狠狠| 久久色午夜在线导航| 九九热re99re6在线精品| 五月婷婷综合激情网| 天天操夜夜夜夜爽| 五月天色社区| 国产欧洲欧洲精品久久| 久久婷婷五月天大香蕉| 91精品婷婷国产综合| 色狠狠色| 欧美英丁香开心快乐六月天网| 色婷婷五月天视频网站| 九九视频在线| 99精品久| 亚洲一个色| 思思久久99热只有频精品66| 婷婷五月电影院| 日韩少妇内射免费播放| 啪啪黄页网| 99超在线| 青青草轻轻操| 狠狠干.com| 日本啪啪网| 99在线视频在线观看| 婷婷九月在线| 国产在线激情视频| 91碰| 五月开心深爱激情网| 国产成人网址| 激情碰碰碰| 第2色五月婷| 最新丁香六月婷婷| 天天爽天天爽| 五月丁香综合在线| 玖玖资源天天无码| 亚洲热视频| 久久婷婷大香蕉| 五月婷婷 欧美| 色色a| 欧美顶级少妇做爰HD| www.久久99热地址发布| 五月婷婷丁香色播网| 婷婷伊人| 婷婷丁香成人五月天| 丁香五月在线视频黑人| 蜜乳.comcom| 婷婷伊人五月天| 五月婷婷影院| 丁香五月人妻| 深爱激情婷| 狠狠狠狠狠狠| 色婷五月天| 色色网站| 色五月丁香91| 午夜美女人啪最红院| 超碰在线中文字幕| 综久久久| 欧美综合激情五月天| 丁香六月综合| 超碰在线视屏| 丁香六月婷婷综合| 中文字幕高清av| 五月丁香花伦理电影| 五月丁香六月情| 亚洲午夜Av| 久99热| 亚洲 在线 另类| 五月天婷婷一起草| 26uuu精品国产| 丁香五月六月综合激情| 丁香五月天中文字幕| 超碰在线免费观看日韩| 激情婷婷亚洲五月| 久热这里| 色噜噜,噜噜色| 久久久免费精彩视频| 99在线精品视频| 五月天怕怕| www.婷婷com| 久久精品婷婷| 九色视频91疯狂| 精品网站:999WWW| 丁香婷婷五月人体| 99热这里只有精品8| 国产AV网页| 亚洲aV写真天天综合网久久| 五月天啪啪网| 97丁香五月| 色碰97| 在线1青婷| 日韩久操婷婷| 久操福利| 99热大香蕉| 爆乳熟妇一区二区三区爆乳| 五月丁香婷婷综合久久| 91日本在线| 99re这里| 丁香久久AV| 国产又爽又猛又粗的视频A片| 成人欧美一区二区三区在线观看| 天堂成人A片永久免费网站| 五月天成人伊人| 九九热青草| 九九机热| 在线观看亚洲AV| 91成人看片| 综合色情网| 激情五月婷婷五月| 色插综合网| 99热热热天天人人人超超碰| 色色网站| 97丁香婷婷| 婷婷五月无码| 六月伊人婷婷| 丁香久久激情俄| 9九色首页| 激情婷婷色色| 亚洲愉拍99热成人精品| 婷婷播5月| 五月丁香激情综合六月涩涩爱| 婷婷综合网站| 丁香色播五月天| 九 九九九AV| 色五月色图| 97五月天婷婷午夜| 伦乱人妻| 大香蕉520| 青青草蜜臀| 91日综合欧美| 五月婷婷影| 颜射 精品性爱av| 久久日韩婷婷五月| 一本色道久久综合狠狠躁小说| 五月色欧美| 丁香密臀AV激情网| 99综合视频| 97丁香五月| 丁香婷婷网| 成人草榴视频| 色婷婷中文在线| 天天人人天天爽| 丁香六月综合激| 五月综合视频在线| 五月天天综合网色婷婷| 亚洲永久免费| 66精品成人免费网站在线观看| 极品色丁香| 国产在线aaa片一区二区99| www.99热这里只有精品| 3pAV| 2020日日干| 青青久在线视频免费观看| 九九热在线观看视频| 丁香五月天天| 婷婷五月天AV在线| 成人婷婷色综合| 香蕉综合在线| 逼里香不卡| 伊人大香五月天| 久久大香蕉伊人| 成人精品在线观看| 97色在线观看视频| 久久A区B区| 深爱五月激情网| 六月丁香婷婷色狠狠久久| 无码AV免费精品一区二区三区| 九九精品亚洲| 停停五月天激情网| 亚洲精品色色| 国产精品色婷婷99久久精品| 五月丁香久久激情综合| 激情五月激情综合网| 六月色婷婷| 五月丁香激情六月| 99这里只有精品8| 伊人激情啪啪| 视频1区2区| 久热久69| 亚洲字幕AV一区二区三区四区| 婷婷永久在线| 99久视频| 久久久精品色色色| 我爱va亚洲va52| 天天操天天爱天天日| 涩九九九九| 91久久九九| 婷婷影院A成人| 俺去也婷婷| av九九| www.色色五月天.com| 五月人妻婷婷视频| 天天干天天爽天天操| 亚洲五月六丁香激情| 婷婷色五月激情| 99热最新精品| 伊人久久大香蕉网| 五月天婷综合| 婷婷五月天首页激情| 五月天啪啪网| 影音 五月 婷婷 久久| 极品人妻VIDEOSSS人妻| 99在线观看| www久久99| 五月天精品| 六月丁香五月天| 婷婷综合在线| 激情综合亚洲| 五月天婷婷久久视频| AV九九| 色色色色色色色色综合网| 色噜噜狠狠色综合网| 色五月成人| 日亚二欧美| 婷婷久久精品| 夜夜资源站| 欧美精品999| 九九99久久| 色婷婷久久| 色九九综合| 婷婷五月色| 成人精品视频99在线观看免费| 99精品偷自拍| 俺也去五月婷婷丁| 丁香五月亚洲综合丝袜| 九热av| 久草丁香婷婷五月天婷| 丁香五婷婷| 在线婷婷| 成人色站,在线视频,看片-SS1AV| 欧美婷婷五月无砖| 五月丁香六月婷婷婷婷| 婷婷五月天电影区小说区| 色色射| 色哟哟www| 欧美婷婷五月丁香| 日日干夜夜干| 99色嘟嘟精品网站| 婷婷性爱视频在线| 六月丁香av| 欧美大奶熟女噜噜噜噜| 国产va在线视频| 新激情五月天色播| 五月天婷婷激情小说电影| 免费播放片大片| 欧美成人A片AAA片在线播放| 99精品视频在线观看| 五月天综合在线网| 国产精品岛国片在线观看免费| 超碰在线99热| 在线va网站| 人人做天天爱| 色情久久久| 婷婷性爱| 91日综合欧美| 久久五月综合| 热久久视频99| 亚洲熟妇无码乱子AV电影| 久久a热| 婷婷丁香91综合| 在线观看免费狠狠色丁香香综合| 天天弄天天爽| 五月花激情| 91丨九色丨东北熟女| 欧美日本韩国亚洲| 98永久精品| 这里只有精品99视频| 久色资源网| 色999五月色| 婷婷最新地址| 亚洲av成人在线| 亚洲十月婷婷综合| 色婷婷五月在线| 国产精品久久久久久久久久| 九九99在线| 琪琪理论片| 人人摸人人| 婷婷色婷婷| 激情综合在线播放| 激情五月综合免费| 婷婷五月激情的图片| 国产肥白大熟妇BBBB视频 | 99久视频| 9精品国产在热久久| 久久婷婷五月天激情新地址| 97色色在线视频| 婷婷亚洲综合| 四季AV综合网| 婷婷综合网伊人| www狠狠| 欧在线一区| 深爱五月激情综合| 丁香五月激情网| 五月婷婷啪啪啪啪| 思思热这里只有精品视频666| 色久五月天| 激情av| 激情av在线| 亚洲婷婷乱乱丁香| 九九人人操| 久99热在线观看| 五月开心婷婷| 色九月婷婷| 日韩五月婷婷| 99热这里只有精品1998| 天天天天干| 香蕉婷婷色五月| 五月婷婷丁香在线| AA片在线观看视频在线播放| 婷婷五月丁香五月| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 国产五月视频| 欧洲99视频在线| 五月综合丁香婷婷| 丁香9月婷婷| 秋霞电影理论| 99热这里只有精品8| caop在线| 97丁香五月| 久99精品视频| 深爱激情丁香五月| 99热8在线| 婷婷丁香人妻| 五月丁香网站| 色婷婷婷av| 色一情一乱一乱一区91Av| 人人操女人| 五月丁香成人视频| www.99操| 久久66成人网站| 五月天婷久久| 久久机热这里只有| 大战熟女丰满人妻AV| 国语对白性爱视频播放| 日韩一级片| 五月丁香六月婷婷综合在线| www久久久| 久久9精品| 九色视频91| 色色色99| 亚洲人妻AV| 91天天操天天干天天射| 久久久91| 日本三级日本三级99| 色综合com| 婷婷五月花| 亚洲色婷婷| 五月开心婷婷网| 色五月丁香网| 五月欧美色播| 久久久婷| 五月婷婷五月天天| 久久精品凹凸分类| 免费播放99性爱视频| 91九九九九九九| 狠狠草狠狠草| 亚洲综合另类| 综合色色婷婷| 无码地址| 亚洲精品V天堂中文字幕| 六月丁香婷啪射| 五月天久久婷| 九九热只有精品| 91操在线观看| 亚洲综合99| 久久五月六月| 综合aV在线| 五月激情久久| 久久新| 亚洲这里只有精品| 久久与婷婷| 久777| 99这里只有精品视频| 91久久久久久久91| 激情五月六月婷婷| 色六月丁香婷婷狠狠干| 玖玖色综合色| 五月丁香成人小说| 97碰超级人人看| 九九aV| 天天综合亚洲综合| 婷婷丁香五月天大香蕉| 99久.| 激情综合网五月天天| 色啪久| 婷婷五月天综合AV| www.粉嫩av.com| 黄色国久久| 99爱精品| 亚洲无码成人网| 色色色色色色综合网| 天天摸天天透天天舔| 激情AV| 91打屁股免费看| 日本婷婷| 六月婷婷六月天天在线免费| 1024AV视频| 99久在线观看| 丁香成人综合| 4438成人电影| 亚洲综合激情五月久久| 亚洲热久久| 9色在线| 精品热九九| 久久9精品| 色婷婷六月精品| 九九色之九九色之88| 亚洲AV免费在线| 天天天操天天天日| 天天爱天天做天天日| 婷婷不卡基地| 色色色色色色网| 伊人五月丁香| 99综合色色色| 天啪色| JAPANRCEP老熟妇乱子伦视频| 五月丁香六月情| 99热 免费| 国产AV不卡福利| 噼里啪啦在线观看免费完整版视频| 色视频五月天| 狠狠做五月婷婷| 婷婷大乡焦噜噜| 三人荫蒂添的好舒服A片| 色综合久久中文| 青草热视频这里只有精品| 伊人久久大香网| 狠狠狠狠狠狠草| 天天插天天插| 亚洲乱码w在线观看| 99热这里只有精品23| 色色丁香婷婷综合| 日韩AV在线免费| 这里只有精品视频| 爆乳熟妇一区二区三区爆乳照片| 婷婷五月天a| 99在线观看视频免费| 99草视频在线观看| 97在线观视频免费观看| 三级黄网站| 久久久久人妻精品| 影音先锋人妻出差| 激情深爱婷婷网| 99热e| 欧洲区自拍| 国产免费性爱| 思思热视频在线| 久久婷婷五月综合激情国产| www,婷婷| 色婷婷五月天成人网| 99婷婷五月天| 爱操人妻| 天堂综合久| 31色区视频免费看| 超碰97在线操| 五月丁香激情综合网| 九九激情综合| 欧美超级视频97| www,色色色网站| 午夜电影网VA内射| 色的色综合| 成人深爱丁香五月| 97人人草| 97人人干人人操| 插逼综合网| A1片久久| 色婷婷综合在线| 五月色情婷婷| 九月停停| 久久密臀婷婷| 婷婷五月天 丁香五月天 裸体| 少妇人妻人伦A片| 热九九精品| 99久久网站| 亚洲免费婷婷| 五月香婷婷| 久久综合九九| 大香蕉啪啪啪| 六月丁香五月天| 深爱激情六月天| 国产午夜一区二区三区| 日韩另类| 亚洲AV免费在线| 激情小说五月天| 久久这里都是精品| 婷婷五月天久久| 天天综合网站| 国产超碰在线| 国产精品18久久久| 日本欧美成人片AAAA| 免费观看欧美成人AA片爱我多深| 欧美色五月| 中国女人做爰A片| 日本强伦片中文字幕免费看| 少妇搡BBBB搡BBB搡毛茸茸| 极品人妻VIDEOSSS人妻| 国产精品成人AV在线观看春天| 三十熟女| 久综合九综合99| 国产操逼网站| 婷丁香五月天| 色五月婷婷综合| 色五月天影视| 欧美成人热| 婷婷狠狠五月综合| 性生活视频98791| 色 色 色综合com| 五月天激情啪啪| 综合AV在线| 五月综合色| 青青草视频免费观看| 色色婷婷综合| 六月丁香成人| 丁香伊人网| 色五月婷婷五月丁香五月激情五月视频| 婷婷五月天成人五月天| 春色激情第四色| 五月丁香花婷婷玉莉AV| 久久思思热| 99热首页| 九七色色六月丁香| 伊人久久大香线蕉AV最新午夜| 五月丁香啪啪综合网| 青草青草久热这里只有精品| 日日干综合| 免费观看欧美成人AA片爱我多深| 亚洲精品视频电影| 激情六月天| 在线视频九色97| 亚洲免费观看高清完整版AV线| 国产伦理精品高清在线观看网站一区二区| se色99| 综合久久人妻| 91久操| 九色综合网| 久久久性爱网| 婷婷五月俺要去| 五月婷婷天| 久久综合丁香激情五月| 99精彩视频网站在线| 伊人综合婷婷| 亚洲五月天综合色| www,婷婷| 日韩AV大全| 九九精品免费视频99| 六月色播| 天天射综合网天天插| www.色婷婷| 99久久国产宗和精品1上映| 丁香九月综合在线| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 婷婷丁香人妻天天爽| 日本色99网站| 国产精品久久..4399| 久噜久噜| 91狠狠综合久久久| 国产精女同一区二区三区久| 日本久热| 亚洲第一色区| 婷婷五月色播放| 99艹精品在线观看| 五月丁香六月色婷婷综合五月天| 丁香婷婷色情社区成人小说| 26uuu亚洲| 在线综合91| 色综合xx| 婷婷五月丁香啪啪| 丁香五月婷婷激情97| 色色色色综合网| 婷婷瑟瑟五月天| 婷婷五月天小说| 亚洲操B视频| 99re这里有精品手机在线| 亚洲无码另类| 婷婷丁香先锋资源网站| 99激| 五月丁香啪啪啪综合网| 欧美日韩国产一二区| WWW,色五月| 五月天 婷 欧美亚洲| 激情五月婷婷视频| 五月天日日操夜夜操| 超碰人人干| 婷婷六月香| peg 2区三区四区的| 91成人电影| 男人的天堂在线婷婷| 99热国产国产| 久久婷婷精品| 久色88| 五月丁香六月婷婷亚洲视频| 九九AV| 亚洲激情综合网| 亚洲操B| 182tv992tv人之初午夜免费观看| 丁香婷婷人妻| 成人电影AV在线观看| 激情五月天福利| 五月丁香六月停停| 婷婷五月天社区| 久久久中文| 亚洲综合视频网| 天天日天天做天天舔| 亚洲av网站| 91久久国产综合久久| 这里只有精品久| 人人爱操| 99热综合| 五月丁香精品| 国产成人在线不卡AV| 777色色色| 亚洲99热| 亚洲九九99精品视频在线播放| 婷婷精品视频| 一起草av| 色欲天天综合网| 色婷婷丁香综合中文字幕| 久久色亭亭五月天| 久久六月综合| 激情99在线视频| 日日夜夜九九| 婷婷丁香五月天中文字幕| 日本视频久久| 色五月天成人在线| 久久精品99国产精品日本| 天天搞夜夜叫| 91超级碰| 99热这只有| 少妇AB又爽又紧无码网站| 91操色| 狠狠狠狠狠狠| 99热这只有| 69精品人人人人| 六月婷婷色五月| 日韩av手机在线观看| 亚洲性爱99在线| 日韩无码AV电影网站| 九九久久五月天综合伊人| 激情婷婷丁香五月| 欧美综合在线五月天色婷婷| AV成人在线网站| 久久99成人性爱高清视频| 以及AA大片看看| 婷婷六月五月| 99热只有精品在线| 日本在线视频播放91| 在线中文字幕av| 人人爱国产| 六月丁香基地| 亚洲中文字幕在线观看| 高清无码中文字幕aVDV| 亚洲中文AV| 天天色天天操天天射| 婷婷成人AV| 人妻熟妇国产精品| 久久婷婷激情五月天一区二区| 国产99久久久国产精品免费看| 停停色综合伊人| 97luluse| 五月天综合久久| 国产精品社区| 97色色视频| 五月婷丁香久久久| 五月做爱| 日本在线99| 天天色天天搡| 欧美成人在线观看| 婷婷色色婷婷| 97人人干人人操| 免费做A爰片77777| 激情婷婷五月基地| 国产无人区大片| 欧美精品18| 婷婷开心激情综合五月天| 激情丁香久久| 婷婷亚洲影院| 色播五月丁香婷婷| 9999热精品| 久久久中文| 五月婷色丁香| 99婷婷五月天激情| 夜夜爽天天干| 婷婷丁香五月噜噜噜| 1024成人在线观看| 337p大胆噜噜噜噜噜91Av| 日本熟女一区二区| 九九99精品视频| 疯狂做受XXXX高潮A片| 久久婷婷六月综合| 久久激情视频| 九月丁香网婷婷| 97碰碰在线看视频免费| 99久久这里只有精品免费官网| 伊人久久大香| 亚洲精品99| 99爱在线观看视频| 伊人激情| 亚洲精品另类| 丁香五月人妻| 久久五月天色| 2014天天爽| 伊人影院久久网| 五月丁香影视| 五月婷婷成人| 色五月五月丁香|