免费国产精品自在自线-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
返回資訊列表
site:esunnet.com| 久久婷婷网| 搡BBBB搡BBB搡五十| 丁香五月激情婷婷| 91操熟女| 伊人天堂婷婷| 久久精品一区二区三区四区| 超碰人人91| 日本va欧美va欧美va精品| 99热这里只有精品9| 狠狠狠狠操| 99热97| 色99视| 99色性爰网络| 婷婷五月天激情小说| 激情五月综合网| 激情婷婷五月天| 日韩精品色| 最新日韩久热免费视频看看| 99热10在线高清播放| 亚洲九九视频| A A色色| 91九色无码日韩| 大香蕉综合网| 丁香婷婷久久| 久久99综合网| 久久这里只有精品网| 青青草Avb在线| 色五月成人| 色五月婷婷在线观看| www.9797国产| 色爱爱综合网| 人人爽网| 97久久视频| 婷婷丁香五月天亚洲| 狠狠干婷婷| 97涩婷婷| 亚洲亚洲人成综合网络| 99热免费精品| 色丁香五月天| 欧美三日本三级少妇三99| 亚洲 25P| 激情久久月| 激情婷婷五月天伊人在线观看| 亚洲乱码w在线观看| 少妇人妻丰满做爰XXX| 色色AV色色色东莞| 怡红院一二三| 五月丁香婷婷三级| 丁香六月爱综合| 日韩婷婷五月| 婷婷激情小说网| 99热精品网| 天天干在线播放| 亚洲五月婷婷| 91狠狠综合久久| 五月亭亭狠狠| 激情五月天综合婷婷网| 久久丁香五月| 国产九九一区二区三区| 婷婷五月天天爽| 婷婷激情五月综合在线视频| 啪啪啪啪五月天| 色 免费网站视频| 日本免费91| 婷婷久月| 天天综合精品| 狠狠操天天操综合| 成人 在线观看国产| 五月五丁香婷婷| 殴美激情综合网| 97碰碰九九视频| 亚洲性爱电影| 激情综合婷婷五月| 夜夜操少妇| 色级婷婷| 久久久久人无码人妻| 另类图片激情五月| 在线视频九色97| 天天拍夜夜撸| 天天插综合| 色婷婷A| 天天透天天爱| 精品99在线| 激情综合网色播五月| 99色 色| 思思久热| 午夜无码精品色综合久久| 亚洲熟妇AV综合网五月丁香伊人| 天天干天天操天天上| 美女主播野战视步页| 狠狠色情婷婷| 久久精品性爱| 五月色丁香| 婷婷丁香十月| 五月婷婷综合在线视频| 日韩在线视频网站| 色亭亭五月天网扯| 成人丁香婷婷五月天| 婷婷射图五月天| 久久久人妻门| 精品在线网站| 97在线观看| 色99色| 五月婷婷综合网| 精品人妻在线免费观看| 色婷成人狠干| 欧美激情xxxXX| 婷婷五月天手机版视频| 色玖玖综合| 九九热视频这里只有精品| AV大香蕉| 97黑人精品区| 久久婷婷操| 第五色色色婷婷| 99热只有| 亚洲精品无码99热| 亚洲激情综| 天天弄天天爽| 激情五月天在线免费美女视频| 99久精品视频| 天久综合91综合首页| 91在线看片| 非洲一级AV| 丁香五月婷婷性爱| 丁香五月AV| 超碰在线观看9| 思思热视频| 超碰人妻公开在线| 丁香五月久久| 亚洲欧美国产高清vA在线播放| 色视频五月天| 夜夜操狠狠操| 91尤物九色在线| 婷婷导航| 久婷婷色| 中文字幕日产A片在线看| 欧美日韩色色| 思思热思在线精品视频| 丁香花色色网| 99色五月| 久久这里只有国产视频| 丁香五月色| 噜噜狠狠色综合久| 激情五月丁香综合网站 | 9.1综合网| 丁香五月激情性色郤| 色婷婷偷拍| 国产精品成人AV在线观看春天| 4399在线观看免费毛片| 人人摸人人干人人做| 噜噜噜狠狠色综| 激情五月婷婷| 五月婷婷五月丁香综合| 色色五月天激情| 丁香五月综合狠狠| 天天色色婷婷| 六月丁丁香| 久久婷婷人人| 激情五月色播五月| 激情综合五月丁香六月婷婷| 天天艹夜夜爽| 五月婷婷激情网| 国产精产国品一二三在观看| 婷婷色色五月天| 99国产这里只有精品| 婷婷精品| 五月婷网| 91丨九色丨熟女| 成人国产欧美大片一区| 激情小说婷婷小说| 婷婷久久五月天| 9热在线观看| 噜噜噜噜噜久| 91操碰| se色综合网| 97丁香五月天| 色色热| 狠狠色丁香久久久婷| 六月久久婷婷| 9月色婷婷| 开心五月婷| 99热这里只有精品9| 中美日韩成人在线| 欧美色五月| 国产成人在线不卡AV| www,婷婷五月天,com| 99在线精品观看99| 99er日韩| 欧美激情五月天| 熟女色专区| 99久久久免费| 色之综合网| 思思热在线精品视频| 久久9久| 丁香五月六月综合激情| 91综合在线观看首页| 99热国产国产| 九九在线视频| 九九视频精品在线免费 | 亚洲精品视频在线播放| jiujiu无码五区| 五月丁香| 丁香五月亚洲综合| 久久 无毛。| 亭亭五月丁香五月天激情| 99啪啪骑| 久久久久激情| 色五月婷婷少妇人妻| www色色色com| 欧美噜一噜| 丁香伍月婷电影全集| 天天射影视综合网| 久久9999| 亚洲激情五月天| site:pzdcoin.com| 久久中文网| 午夜激情五月| 成人精品人妻| 成人无码髙潮喷水A片| 超碰人人艹| 天天色综网| 大香蕉伊人久久| 色五月 五月婷婷| 99热思思在线观看| 青青久久91| 九九热这里只有国产精品| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 婷婷色狠狠| 亚洲日日操| 中文久久婷婷| 五月综合激情| 五月婷婷六月丁香五月| 丁香五月图片| 国产精品岛国片在线观看免费| av在线免费网站 | yazhou seshipin| 95精品区一区二| WWW夜夜| 97色色色| 婷婷六月天激情影院| 天天操天天国产三级片处女学生妹| 人妻精品久久久久久久| 色欲天天综合| 超碰免费观看| 色色色婷| 五月情综合| 激情网色五月| 狠狠99| 狠狠干天天内射| 黄色片avv| 五月丁香福利| 婷婷丁香五月在线播放| 激情99热| 97人人干人人操| 五月丁香婷婷五月色| 丁香五月91| 色婷婷色五月综合| 久热欧美| 婷婷丁香社区| 激情五月天视频| 色婷婷五月婷婷五月婷婷五月| 日本久久超碰| 久久人视频| www.夜夜操| 天天干夜夜谢| 五月婷婷久久激情| www.婷婷五月| 另类亚洲视频| 久久综合综合综合| 全部老头和老太XXXXX| 久久亚洲天堂| 五月丁香狠狠| 操你av| 久久九九中文字幕| 激情五月天婷婷丁香| 色综合婷婷| 夜色综合网| 5月丁香婷婷| 色综合丁香婷婷| 91日韩在线| 色久丁香五| 五月婷婷激情69| 这里只有精品视频222| 日韩综合成人| 丰满少妇乱A片无码| 色色色欧美| 午夜丁香五月天综合| 精品婷婷五月视| 久久婷婷五月天| 国产美女主播vip| 色色欧美色色色| 97涩涩丁香五月天| 婷婷八月激情| 国产欧美日韩性爱| 综合婷婷久久| 丁香六月婷婷综合| 九九热AV| 九九热这里只有精品23| 婷婷久久五月天| 婷婷五月丁香超碰| 久9久9久9久9久9久9| 久草丁香婷婷五月天婷| 激情图片99| 色婷婷AⅤ| 婷婷日韩| 欧美日韩五月婷婷| 婷婷97碰碰| 玖玖婷婷婷丁香五月| 大陆极品少妇内射AAAAAA| 丁香九月综合激情| 色五月综合激情| 99在线视频免费| 91视频综合网| 丁香六月婷婷色XXXXX| 人人操日| 久婷婷婷| 丁香婷婷六月| 亚洲精品V天堂中文字幕| 超碰99热| 九九婷婷激情综合网| 天堂成人A片永久免费网站| 99精品成人无码A片观看金桔| 日韩成人网址| 热99色| YW无码| 免费看片在线观看| 色色丁香婷婷| 五月丁香成人日| 丁香五月亚洲综合| 久色激情| 五月天激情婷婷| 婷婷五月天伊人| 欧美性猛交99久久久久99按摩| 国产精品扒开腿做爽爽爽A片唱戏| 九九这里只有精品| av操B网站| 色婷婷无吗| 日韩色色一区| 婷婷丁香射射| 日韩99色99| 蜜臀99精品| 色播丁香| 九九RE视频在线精品| 久久视频在线视频| www.com.色色| 9久精品视频| 五月天婷婷丁香蜜桃91| 99热精品无码| 婷婷五月天激情网| 丁香六月| 秋霞三级影视资源| 九九在线精品| 8090在线影视少妇| 亚洲XX网| 色插综合网| 99久在线精品99re8| 激情久久久久| 五月丁香婷婷激情爱爱| 国产精品久久99| 激情网婷婷婷| 96丁香六月婷婷蜜桃综合久久| 国产在线网| 婷婷五月天AV在线| 婷婷激情五月天激情在线| 五月成人网天天| 色噜噜97视频在线观看| 九色在线五月婷婷网址| 色情五月丁香| 色欲一二三| 丁香五月伊人| 九九在线91| 久久亚洲婷婷| 婷婷六月色开 | 91激情五月开心| 五月婷婷色播| 成人毛片在线免费观看| 91小黄书网址在线观看| 九九色色| 六月丁香综合| 天天干天天日天天操| 91精品久久久久久综合五月天| 亚洲四色五月| 亚洲va在线| 婷婷五月天网| 国产成人av在线| 五月丁香婷婷成人综合网| 色色色9| 九九超日本| 99re热久久| 思思热视频| 久热re在线视频| AV五月丁香| 久久草大香蕉| 五月丁香亭亭操逼| 97精品自拍| 亚洲最大视频| 99ER热精品视频| 五月香婷婷| 丁香婷婷月| 超碰在线日夜| 亚洲色欲AAAAAA| 激情第四色| www.色色五月天.com| 丁香六月色婷婷| 大地资源色婷婷视频在线| 97人妻碰碰中文无码久热丝袜| 五月婷婷六月丁香在线| 久久9热综合| 99在线国| 亲子乱AV-区二区三区| 超碰av在线| 超碰97免费在线| 婷婷激情五月视频| 五月丁香五月婷婷| 一操久久| 九九视屏| 亚洲午夜Av| 欧美黄色AA片哗啦啦啦| Caop在线| 国产精品成人AV在线| 超碰99热精品| 婷婷激情性爱| 激情视频网址| 综合久| 欧日美女Va| 五月香婷婷| 丁香五月婷婷久久综合激情网 | 狠狠干婷婷| 成人婷99最新| 亚洲精品视频在线| 337p大胆噜噜噜噜噜91Av| 青青草原中文字幕| 国产精品美女久久久久AV超清| 人人爱干人人爱草| 国产毛片精品一区二区色欲黄A片| 狠狠干天天内射| 禁欲电影完整版在线播放| 激情精品久久| 91久久久久| 天天摸夜夜爽天天做| 免费精品99| 影音先锋女人av鲁色资源网小说免费| 麻豆WWWCOM内射软件| 婷婷开心青青草| 色.五月综合网| 这里只有精品免费视频在线观看| 亚州婷婷五月激情综合| 亚洲愉拍99热成人精品| 另类图片激情五月天| 51精品国自产在线| 婷婷狠狠干| 日本高清久| 99热这里只有精品2| 五月丁香怕啪啪| 超碰日韩成人| 久久婷婷五月综合色丁香| 在线中文亚洲| 久久色婷婷| 丁香五月日韩| 国产超碰在线| 天天爽天天爽天天爽天天爽天天爽| 国产成人精品一区二区三区视频| 婷婷亚洲欧美丁香五月| 9久久精品| 99ree6| 婷婷色色婷婷| 亚洲 综合中文| 涩丁香| 丁香五月六月婷婷综合| 亚洲精品五十一区| 色月丁| 五月丁香啪啪综合| 丁香六月天堂| 91婷婷伊人牛牛| 天天色播| 成人网在线视频| 99热在线里有精品| 婷婷九色| 成人无码髙潮喷水A片| 色色色干| 另类视频五月天| 思思热久久阴99| 日本综合99| 久久伊人9| 全网最新网黄大秀直播高清,主播国产录屏在线 | 色婷婷丁香| 狠狠婷婷色| www.91九色| 26uuu国产精品| 99热免费18| 九九视频这里只有精品| 色五月婷婷丁香五月| 色五月婷婷久久| 97人人操人人拍| 天天插天天爽| 色五月六月| 91爱操| 蜜乳AV成人| 99爱视频在线观看这里只有精品| 五月天久久91| 色五月婷激情| 丁香五色月婷婷网| 182TV大香蕉| 这里只有精品96| 夜夜 操无码| 五月开行婷婷色五月| 天天色综和网| 99色热视频| 九九久久玖玖爱| 色婷婷久久| 五月婷婷深深爱| 亚洲成人乱码av网站| AV电影在线播放| 丁香花操逼| 怎么样可以看免费的一级av| www.99热视频| 狠狠色噜噜狠狠| 五月成人综合| 五月久久亚洲| 97干婷婷五月天| 亚洲sesesese| 秋霞性爱AV| 69综合在线| 第四色色六月色综合| 成人做爰高潮A片免费视频 | 97婷婷丁香五月| 日韩色色色99| 色播五月婷婷| 久草婷婷| 五月欧美色播| 久久网站免费亚洲| 思思99热这里只有精品| 色色色色热热| 激情六月丁香综合| 天天爽—爽| 五月天激情国产综合婷婷婷就去爱| 桃色激情五月天| 老师的粉嫩小又紧水又多A片视频| 在线播放成人网站| 99热手机在线精品| 网站免费一站二站| 天天色播| 九九热精品| 超碰av在线| 大香蕉啪啪| 成人av在线网站| 天堂综合久| 婷婷刺激综合| 色导航色婷婷五月天在线观看| 六月色国内综合| 亚洲色综合性| 亚洲精品大片| 成人电影AV在线观看| 九九热婷婷| 激情啪啪五月| 99热.com| 亚洲乱码日产精品BD| 国产日产亚系列精品版优势| 日本97在线观看| 日本高清不卡免费一区二区三区| 丁香五月天激情综合网| 狠狠色情婷婷| 天天操天天日天天操| 色色哒五月婷婷六月丁香| 日韩av干| 婷婷色正月| 五月丁香激情综合久久| 97干网站| 五月丁香激情综合| 亚洲第一成人AV| 亚洲婷婷综合视频| 欧美天堂久久| 人人草公开操| 欧美97p| 天天干 夜夜爽| 婷婷综合色图| 婷婷丁香六月| 男人的天堂在线婷婷| 久久的爱大香蕉| 91丨九色丨熟女|新版| 色五月婷婷婷婷婷婷婷婷婷婷| 新99思思视频| 天天操天天爽天天爱| 狠狠狠夜夜夜| 婷婷九月| 精品日本视频444| 密乳Va| 天天爽爽日日做做| 天天干夜夜操A片| 五月综合六月婷婷| 激情综合区| 91男同视频| 九九人人看| AV色五月婷婷| 91操片| 啄木鸟黑丝一区二区| 五月婷婷婷婷婷| 极品另类| 中文成人在线| 五月婷婷三级| 欧美色色色色色色色| 五月丁香中文| 欧美性爱五月天| 五月天丁香啪啪啪啪| 亚洲操逼网| 甈你aaaaa| 97干欧美| 天天久久九九| 26uuu.| 色五月涩涩婷婷| 综合激情五月丁香| 97超碰99热99| 99re这里只有精品免费| 婷婷五月天天爽| 99网| 婷婷色在线观看| 综合激情深爱| 99色综合| 激情爱爱网站超大免费| 欧美婷婷色五月| 久久九九国产精品怡红院| 黄色录像网点| 入口五月婷婷六月香| 无码任你操| 六月丁香啪啪啪| 被强行糟蹋的女人A片| 综合久久五月天| 啄木鸟丝袜美女福利视频| 日本色色色| 久久宗合影| 天天色综合综合| 婷婷五月免费观看| 日韩婷婷| 超碰91在线| 99这里只有精品视频| 丁香花大香蕉婷婷综合| 激情丁香淫荡婷婷| 天天精品视频免费观看| 99爱99操| 五月天激情婷婷| 男人大jjc女人免费视频| aaa丁香五月天| 国产.亚洲.欧洲视频在线| 久久丁香综合精品综合| 五月婷婷插一插| 操一区| 婷婷激情五月综合| 97色片| 丁香五月婷婷Av| 管管補管管紱| 丁香五月婷婷基地| 这里只有视频精品| 久久久久9| 99久久9| 97色色婷婷| 偷拍91九色| 婷婷五月综合网| 超级碰碰碰久久网站视频| 久久人人人人妻| 午夜无码熟熟妇丰满人妻| 激情五月天在线观看色婷婷| 香蕉婷婷色五月| 婷婷久久精品| 99色在线| 在线成人网站| 大香蕉九九| 五月婷婷9| 五月激激激情综合网| 色婷婷狠狠禁久久| 久久99网| 99乱视频| 久久久久久综合88| 亚洲丁香花色| 丁香社区婷婷五月| 久久婷婷五| 深爱开心激情| 婷婷九色| 日韩久久视频| 五月婷婷六月丁香免费| 色色色.COM| 手机在线视频观看9| 亚洲精品国产精品乱码视99| 亭亭玉月丁香| 国产激情在线| 天天色播| 亚洲网综合在线| www色五月天| 日本人妻久久| 9久热在线视频精品| 67194成I人在线观看线路1| 开心五月网| 五月天婷综合网站| 婷婷激情六月中文| 五月丁香色综合| 无码人妻激情| 国产真实乱对白精彩| 亚洲免费99| 激情綜合網址| 91九色首页| 一级A片天天操夜夜操| 99热在线网站| 六月丁香久久| 天天噜天天插| 黄色激情网站在线观看| 久久婷五月综合| 久热这里只有精品6官网亚洲| 五月丁香香蕉| 久久婷婷五月综合色和| 五月停停色色丁香| 久久国产一区二区三区| 久久这里都是精品| wwwss在线观看| 伊久大香蕉| 亚洲AV网站在线观看| 玖玖伦理电影| 一级黄色操B| 青草激情综合| 丁香五月无码| 99,色| 偷拍九九热| 色婷婷久久| 99热国产婷婷| 欧美丰满熟妇BBB久久久| 欧美成人性爱网| 色六月天天激情综合网| 日韩 mm 不卡| 亚洲综合五月天| z色五月播播久久| 99色最新在线视频| 九色91国产| 91在线操逼视频| 婷婷五月天欧美图片在线播放电驴| 五月天天堂久久| 成人国产欧美大片一区| 色婷婷偷拍| 国产精品噜噜在线视频| 国产婷婷综合在线免费视频| 国外亚洲成AV人片在线观看| 欧美五月婷婷| 激情综合网 激情五月天| 色色色在线| 96丁香婷婷九月蜜桃综合久久| 日本99在线视频| 五月丁香六月合| 综合婷婷久久| 91人妻九色大屁股| 天天日天天操心| 在线成人视频免费| 99综合一区| 激情五月天噢美| 丁乡久久| 99re视频在线精品| 中文人妻AV久久人妻18| 91热久久| 国产精品久久久海的味道| 五月丁香六月婷婷玖玖| 色婷婷五月天激情| 天天综合色99| AAA级久久久精品| 天天爱天天操| 婷婷无码视频| 亚洲人人操| 欧州色色| 丁香五月天的网址。| 很很干在线视频| 99久久免费性爱视频`| 91碰在线| 婷婷丁香五月91| 97人妻碰碰碰久久香蕉| 五月天婷婷激情综合| 夜夜夜叫天天天做| 99热欧| 中文字幕AV网址| 9精品视频在线| www.九月婷婷丁香.com| 久久人人添人人爽添人人片αV| 操操啪| 俺去也综合| 男女99免费视频| 激情99| 超碰国产AV| 色婷婷小说网| 婷婷.com| 操操操Av| 婷婷五月天电影网| 久久婷五月综合| 色情五月综合婷婷| 日韩 中文 欧美| 丁香狠狠色婷婷| 亚洲六月色| 综合一本道| 狠狠操.COM| 99色视频免费在线规看| 色狠狠色综合| 婷婷五月天AV| 激情中文在线| 99热6这里只有精品| 99热精品在线| 五月激情小说| 99国产精品久久久久久久久久久| 久99婷婷色综合| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 婷婷丁香六月影视| 丁香五月激情综合网激情五月| 99网址在线观看| 少妇出轨做爰高潮A片| 精品人妻一区二区三区在| 欧美婷婷丁香社区在线播放| 久久综合五月情| 久久婷婷大香蕉| 婷婷综合影院| 狠狠狠狠青草| 五月丁香激情综合六月涩涩爱| 五月天激情久久| 丁香婷婷五月天亚洲| 99热日本| 99热精品免费| 91精品久久久久久综合五月天| 婷婷五月激情综合| 99se丁香| 九九狠狠干| 99惹在线精品免费观看| 六月婷婷激情小说网| 亚洲操b| 日韩欧美颜射| 欧美成人精品A片免费一区99 | 亚洲六月色| 婷婷五月丁香激情图片| www.色9| 五月婷婷偷| 天天色综合网吨吧| 婷婷丁香五月天中文字幕| 五月婷在线观看| 人人色婷婷| av国产精品| 欧美性猛交99久久久久99按摩| 操逼电影免费看| 亚洲视频操| 天天色情站| 久热精品视频| 婷婷久久99| 欧美在线| 99草视频在线观看| 五月婷婷偷| 深爱五月网| 91啪啪视频| 七月丁香五月婷婷在线| 麻豆雪千夏| 插插干干干色| 热99AV网站| 99在线免费观看| 99热人人操人人操| 综合激情五月四射婷婷| 激情五月综合网最新 | 欧美婷婷综合| 天天拍天天操| 五月色婷婷影院| 欧洲99视频在线| 天天日日夜夜爽。| 99热精品无码| 五月天色欧美| 99re这里只有精品视频6| 26uuu在线观看| 色丁香五月婷婷| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 99精彩视频| 97干婷婷| 午夜婷婷五月天| 99爱这里只有精品免费视频| 五月天丁香欧美激情| 66久久视频在线| 亚洲在线操| 丁香五月激情五月色综合| 六月丁香基地| 久久久久久久久99精品| 4399精品一区二区| 成人婷婷五月天| 综合色播| 激情亭亭五月| 日韩爱操视频| 操人妻AV| 亚洲成人色五月婷婷综合| 亚洲婷婷五月| 91九色成人原创视频| 色婷婷丁香五月天在线视频| 欧美婷婷| 99狠狠| 99久久性爱| 五月天激情小说| 狼友视频在线观看18| 五月六月伦理| 九九精品免费视频99| 色五月xxx| 婷婷欧美综合| 99热亚洲综合| 久久99激情| 91精品91久久久中77777| 99日逼视频| 五月天开心激情综合网| 久久精品99国产精品日本| 99九色视频在线观看| 欧美成人精品一区二区 | 色综合色| 六月激情丁香一道本7777| 九热视频这里只有精品| 色色综合网络| 亚洲精品a成人在线播放| 欧美99热| 色私五月婷婷| 五月婷婷六月综合| 第四色五月天| 久久久久久久久久久-久五月天婷婷| 丁香五月天天| 91碰碰视频| 久久人人九| 婷婷五月综合色拍| 996精品热视频| 狠狠色噜噜狠狠| 色综合偷拍| 9l视频自拍9l视频自拍九色学生| 激情 婷婷| 91人操人人人操人| 91精品婷婷国产综合| 99九无网码| www.91AV.COM| 天天噜| 久久久久久久久99精品| 久久98热re| 9久久婷婷国产综合精品性色| 亚洲成人网站在线播放| 玖玖婷婷五月| 五月丁香色色| 色色五月婷| 亭亭五月色男人| 天天爽成人综合网站| 久久九九国产精品怡红院| jiujiu热在线视频| WWW.桔色成人.COM| 热这里| 狠狠干狠狠操狠狠爱| 九九激情| 五月丁香影院| 六月激情网| 开心五月婷婷99| 日韩成人影片在线观看| 夜夜爱伊人| 日韩人妻无码精品| 五月天色五月| 九九这里精品| 人人超碰99| 久久99婷婷| 五月天婷基地| 女同在线9| 综合在线色婷婷| 五月天婷婷av| 亚洲综合五月天| 99热精品9| 操日本色| 日韩草草草草草草草草草草草草| 天天插天天干| 69色色视频| 9久久精品视频| 色婷久久| 五月丁香直播| 五月婷免费视频| 国产精品国产| 亭亭玉立国色天香| 国产午夜精品一区二区三区四区| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 五月天久久小说| 久久色五月| 五月婷婷六月丁香激情深爱| 九九综合影音先锋| 秋霞A V毛片| 有码人妻久久| 超碰色女| 五月婷婷啪啪| 蜘蛛女侠2003满天星免费观看| 丁香婷婷五月激情| 欧美日韩成卜| 色狠狠综合网| 色爱99| 欧美怡红院黄站| 五月天伊人久久久久| 色播五月丁香婷婷| 色色日本欧美| 老师的粉嫩小又紧水又多A片视频| 久久婷婷成人综合色怡春院| 丁香九月激情| 九月丁香婷婷网| 另类天堂| 国产精品热搜丁香五月婷婷| 丁香五月影院| 五月丁香偷拍| 久色网| 色五月婷婷亚洲最大| 欧洲99视频在线| 色停停影院五月天| 丁香五月综合| 五月天综合久久| 欧洲亚洲免费视频区| 日本视频99| 丁香五月激情图片婷婷| 六月丁香激情网| 五月色精品| 久久九九综合| 97在线日本| 99精品视频在线观看| 五月天激情四射| 天天日日综合| 日日干夜夜撸夜夜骑| 97影院一级片| AV在线收看| 美女久久天堂| 狠狠干夜夜干| 超碰不卡在线| 91丨九色熟女丨首页| 国产精产国品一二三在观看| aa久久| 这里有精品2| 五月丁香六月婷婷在线小说视频| 精品人妻在线| 久碰久| 午夜精品久久久久久久爽| 九九AV| 久久九九国产精品怡红院| 思思热热久久| 电影蜘蛛女| 色狠狠色| AV在线中文| 婷婷 丁香 久久| 91大操| 青草青草视频2免费观看| 六月色色| 蜜臀av粉嫩av懂色av| 狠狠人人婷婷| 亚洲 六月 综合| 婷婷五月天色网久| 思思网站| 99色在线视频观看| 九九色精品| 人妻久热| 亚洲性爱电影| 天天操五月天| 5五月综合网亚洲| 久久精品日| 国产av天天插天天操天天爽| 99riav 亚洲| 五月婷婷激情综合网| 91一起操| 99久re热视频精品98| 婷婷五月激情欧美| 婷婷五月丁香91| 日逼免费视频| 伊人狠狠干| 婷婷六月伊人| www.av骚货| VfJxEwPH| 婷婷久久六月天| 婷婷亚洲五月丁香综合在线| 日操| 99热国产在| 丁香六月婷婷综合麻豆| 停停色综合伊人| 五月丁香久久久日婷婷久久婷婷日| site:pzdcoin.com| 亚洲综合激情五月天婷婷| 丁香久久综合| 综合激情五月丁香| 淫视馆aV二区一区| 激情婷婷丁香五月天小说| 久久狠狠欧美| 天天肏屄夜夜爽| 日韩六六久久电影| 99热99这里有免费的精品| 91小黄书网址在线观看| 天天婷婷| www.色婷婷| 超碰亚洲天堂| 五月综合视频| 中文字幕日产A片在线看| 国内一级片| 狠狠色综合图片| 综合激情专区| 日韩无码专区| 丁香五月 综合| 伊人狠狠操| 五月婷亚洲精品| 久久久久久久97| 99九九久久| 无码 av电影| 丁香婷婷午夜| 色色九区| 九九九九国产| 色青青视频| 狠狠操天天日| 天天天操天天天日| 亚洲AV成人片无码网站| 久久色情| 人妻免费网站| 九九99热| 天天 青草 制服丝袜 在线| 丁香六月毛片| 人妻人人操| 狠狠va| 色色网五月激情| 亚洲中文字幕网| 亚洲亚洲人成综合网络| 久久免费高| 日韩超碰在线| 伦乱天堂| 色五月视频,小说| 极品另类| 日韩无码专区| 色色丁香色五月| 日本色婷婷| 99精品在线下载| 婷婷性爱影院| 日韩AV无码影片| 91超级碰在线视频| 天天摸日日舔狠狠添婷婷婷| 色婷婷久久综合久色综| 五月婷婷啪啪| 欧美色色日韩| 黄色99视频| www.五月天婷婷| www.狠狠| 九九热99精品| 亚洲激情网站无码| 99热这里只有精品在线观看| 大香蕉九九| 丁香婷婷性久久| jiujiu无码五区| 超碰免费大香蕉| 国产婷婷婷| 99在线热| 天天日夜夜拍| 激情五月综合| 久操97| 思思久久99热只有频精品66| 婷婷五月天成人网| 91高潮喷水久久久久久久久 | www激情五月天| 丁香五月天啪啪| 人人操操97| 99色看这里只有精品| 超碰99热精品| 激情影院69| 成人五月天婷婷| 狠狠色丁香| 婷婷大香焦| 99激情网| 另类图片五月天| 九色在线五月婷婷网址| 亚洲色五月| 成人在线99| 丁香婷婷五月综合欧美另类| 色丁香五月天射婷婷爱婷婷| 激情六月天| 中文字幕高清av| 一区二区三区四区五区| 久热九九| 欧美激情中文字幕| 狠狠撸激情综合丁香五月天俺来啦| 狠狠操狠狠爱| 成人在线日韩| 欧美色色色色色色| 99久久婷婷五月| 精品少妇蜜臀91| 日韩成人精品中文字幕| 色婷婷久久综合| 五月丁香大相交| ady狠狠入| 久久性爰视频这里只有精品| 亚洲欧洲中文日韩久久AV乱码| 九月激情网| 站长推荐无码播放| 97夫妻超碰| 五月激情日本在线| 综合网亚洲| 欧美日韩123| 午夜色丁香| 婷婷丁香大香蕉| 激情五月亚洲综合网| 成人精品视频99在线观看免费| 香蕉久久国产AV一区二区| 色婷婷免费观看| 性视频久久| 视频久久9| 99久久玖玖| 另类亚洲电影| 激情网五月婷婷| 91男同视频| 五月丁香激情综合六月涩涩爱| 久久97| 婷婷伊人无码| 日本欧美成人片AAAA| 激情深愛五月視頻| 99精品热| 怕怕視頻| 久久99网站| 久久99这里只有精品| 人人播| 亚洲成色综合网站免费观看| 久色激情| 三区激情四射av| 久久AAAA片一区二区| 中文字幕丁香五月| 99在线精品免费视频| 成人婷婷深爱综合网| 99ri在线视频| WWW,五月| 婷婷色在线播放| 色天堂97| 亚洲AV成人片无码网站| 亚洲综合色色| 亚洲午夜AV| 美女天天艹人人爽| 少妇性BBB搡BBB爽爽爽电影| 婷婷色播六月无码| 国产在线激情视频| 色婷婷五月中文字幕在线dvd| 国产成人精品一区二区三区视频 | 31色区视频免费看| 五月情色天| 超碰人人99| 五月丁香啪啪综合| 日本色婷婷| 99视频内射三四| 99只有这里是精品| 五月婷婷综合成人| 五月天开心婷婷激情网站 | 婷婷五月丁香高清无码| 99年操人人爽| 人人草人| 视频一二区| 日日日日日| 五月丁香婷婷婷婷综合网| 久操香蕉| 91丨九色丨熟女丰满| 色婷婷五月天在线观看| 久久婷婷五月天蜜桃| 国产精品第一国产精品| 日逼免费视频 | 久久码久久无清| 日本女人久久| 天堂爱爱| 99天堂在线观看免费视频| 婷婷色丁香六月| AV网址大全在| 日韩成人电影AV| 99热99美国在线观看| 五月丁香操婷逼| 色 丁香婷婷| 五月婷婷久久久久| 色五月婷婷在线| 狠狠操天天操天天操| www91色网站| 任你爽视频| 五月丁香激情综合六月涩涩爱| 亚洲爱婷婷| 婷婷成人五月天| 婷婷五月天免费视频| 激情婷婷五月少妇| 超碰九色|