99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
不卡的AV网站| 98色花堂98t.R| 99色播| 激情五月天。| 99精品在线| 五月天激情综合首页| 日日噜噜夜夜狠狠久久丁香五月| 青草激情综合| 丁香网五月天激情| 国产丁香五月天婷婷| 欧美日韩精品人妻狠狠躁免费视频| 噜噜噜精品欧美成人在线观看| 成人在线视频一区| av一区免费看| 色五月婷婷7777| 婷婷五月天综合在线| 99视频自拍| 久久激情婷婷| 99网址在线观看| 婷婷久久网| 婷婷丁香五月天小说| 9热久久| 亚洲无码色| 色综合久久88色综合天天99| 久热这里只有国产| 婷婷丁香五月91| 精品欧美一区二区三区久久久| 99热碰碰| 综激情网| 99热老司机| 亚洲五月天伊人| 激情综合国产| 午夜一区| 日本超碰在线| 五月婷婷久久大香蕉| 香蕉影院色| 99re这里| 99在线观看精品视频| 久久激情五月| 婷婷五月天国产在线播放| 丁香六月婷月91婷月| 人人操女人| 久99热| 丁香色五月天| 爱草人视频| 五月丁香 啪啪啪| 亚洲精品99| 五月激情射| 丁香五月色激情| 三级av在线| 中文字幕在线不卡| 99超级碰免费视频| 国产精品久久久久久久久久免费 | 久久激情五月| 欧美激情综合色综合啪啪五月| 丁香六月激情四射| WWW,五月| 亚洲亚洲人成综合网络| 99成人| 五月天激情亚洲| 欧美在线97| 激情综合网激情五月天| 99色色网| 国产成人AV| 九九热只有精品| 婷婷五月色综合| 五月人妻婷婷视频| 丁香五月成人婷婷| www.国产色| 五月婷婷片| 一本色道久久综合狠狠躁小说| 99久久婷婷| 丁香六月婷婷综合激情欧美| av九九| 五月丁香福利| 这里只有精品96| 蜜乳久AV| 99干日本| 79成人网| 五月激情综合网| WWW.婷婷| 色狠狠综合| 202丰满熟女妇大| 亚洲欧洲中文日韩久久AV乱码| 少妇性按摩无码中文A片| 久久综合九色综合97婷婷| 免费超碰在线观看| 視频福利乱色| 天天日日人| 亚洲五月天狠狠| 亚洲综合干| 婷婷五月综合视频| 婷婷丁香18| 欧美日韩中文国产一区发布| 精品国婬伦V无码久久久| 丁香五月激情啪啪啪| 五月激情综合婷婷| 1024成人在线观看| 中文无码婷婷| 99热成人在线观看| 五月天播播| 五月婷婷丁香啪啪| 亚洲成人免费电影| 婷婷激情视频| 最新高清无码专区| 九月婷婷综合在线| 另类婷婷丁香| 亚州操人在线视频| 综合网啪| 色婷婷色婷婷五月| 蜜桃人妻无码AV天堂三区| 五月婷婷色在线| 91在线人| 少妇口诉沐足视频播放器网址| 99热精品中文字幕| www.婷婷五月| 99热在线观看99| 99激情在线| 丁香六月av| 日日夜夜狠狠| 97色综合| 久久99久久99精品免视看婷婷| 九九亚洲| 久草嫩草在线观看| 无码九九| 91久久久久久| 一区视频网站| 五月天色色婷婷| 五月婷婷丁香日韩在线| 五月丁香六月情婷婷久久| www.婷婷六月天| 久久婷婷视频| 中文字幕在线观看视频www| 五月六月婷婷| 丁香五月激情综合久久| 丁香五月婷婷亚洲另类| 国产精品99久久久久久久女警 | 色五月激情婷婷| 久久婷婷伊人| av 一区三区四区| 91伦| 思思热思在线精品视频| 六月天婷婷| 青吴乐视频| 狠狠婷婷爱| 色婷婷婷婷| 夜夜爱伊人| 色色色图| yirenjiqingshiping| 丁香五月精品视频| 九九久久99精品免费观看www| 婷婷狠狠青青| 开心婷婷丁香五月| 99久久久久久www| 丁香5月综合啪啪| 久久小视频| av首页在线| 婷婷五月天激情亚洲小说| 久久婷婷五月综合| 亚洲精品操一操、噜一噜、摸一摸、爽| 囯产精品久久欠久久久久久九大| enecarbon-materials.com污K127封锁请涟系@wip1688 | 久久9久久| 天天天操天天天日| www.日本91| 婷婷丁香五月婷婷| 玖玖婷婷五月天| 久久久香| 精品一区二区三区四区五区六区介绍 | 六月丁香综合网| 五月综合视频| 亚洲第一精品网站| 欧美激情综合色综合啪啪五月| 人人综合色| 天天爽曰日爽| 九九超碰人人| 人人噜天天上| 欧美色99| WWW.国产| 婷婷五月天欧美| 97欧美在线| AAA久久| 97热视频| 伊人免费视频9| 另类国产综合| 久久久性爱网| 欧美日本日韩| 五月天激情综合网| 日日日日做夜夜夜夜无码| 丁香五月天资源网| 久久之人妻| 成人精品在线观看| 亚洲婷婷激情888精品久| 开心激情五月天网| 精品草原久久视频| 性爱久久| 亚洲色婷婷网站| 婷婷丁香五月天综合激情| 人人人va亚洲视频在线| 91综合在线| 欧美槡BBBB槡BBB少妇| 丁香色婷婷五月天| 成人看片网站| Www.久久| 婷久久| 日操| 色综合中文色综合网| 丁香色婷婷五月天| 综合网五月| 丁香天堂夜| 另类激情中文| 亚洲九九视频| 午夜69成人做爰视频| 天天日夜夜操五月| 激情五月婷婷综合| 欧美色色色色色色色色| 激情五月天电影| 丁香五月婷婷亚洲另类| 五月婷婷另类| 婷婷综合干| 婷婷五月天激情小说| www.com任你艹| 99视频在线精品| 五月丁香婷在线| 综合色图区| 五月开心播播网| 超碰色色综合| 激情五月婷婷五月| 亚洲va欧美va国产综合久久久| 婷婷久久亚洲| 欧美日韩成人在线观看| Www.se.久久| 五月天激情婷婷| 天天日天天摸| 思思热视频| 99色看这里只有精品| 婷婷五月天情色| 丁香五月成人| 思思re99视频在线观看| 天天操,夜夜骑| 婷婷内射视频在线| 久九九热| 亚洲综合成人网站| 亚州婷婷五月激情综合| 五月激情久久| 777精品久无码人妻蜜桃| 任你操精品免费| 日本色色色| 丁香五婷婷| 五月丁香六月婷婷无码| 婷婷亚洲欧美丁香五月| 久久这里只| 天天婷婷天天| 欧美色婷婷| 日韩日比视频| 日本欧美在线| 九九成人精品免费视频| 丁香五月六月久久综合| 婷婷久久五月| 开心五月色婷| 五月婷天天搞视频| 月婷婷婷婷五月| 五月天五月天激情网| 开心五月婷婷在线| 中文字幕乱轮| 丁香五月婷婷基地| 深爱激情丁香| 欧美色频| 欧美综合123区| 98色花堂98t.R| 日韩精品一区二区亚洲AV观看| 五月天婷婷无码| 天天草天天摸| 日本三级中国三级99| 五月婷婷丁香| 九九色中文| 婷婷五月色情| 中文字幕丁香五月| 亚洲一区二区 成人网站戴套| 色播五月天激情| 五月丁香成人| 伊人碰碰碰| 99热只有精| 六月婷婷日| 亚洲操操| 五月激情六月综合| 97色色综合| 丁香五月六月综合激情| 四色五月婷婷| 终合激情网| 色了色综合| 99精品这里只有免费视频| 亚洲成人一区| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 色色激情网| 色婷亚洲五月丁香| 日本黄色在线观看| 日本婷久久| 美女91一起草| 日本123区日韩欧美不卡在线看| 97涩婷婷| 久久久潮喷-久久久九九-成人AV| 婷婷自拍| 97人人操| 99色视| 免费国产VA国产免费| 婷婷日本色| 1024在线视频| 亚洲婷婷激情综合激情999精品| 91男人资源站| 色亭亭丁香五月天| 亚洲一级AV在线免费播放| 婷婷WWW久久| 久久ri精品视频| 伊人在线视频| 五月色情婷婷| 99热免费精品| 色婷婷影视| 人妻久久久久久| 国产精品涩涩涩视频网站| 97 A I色色| 99久久这里只有精品| 天天操天天曰| 日日噜噜夜夜狠狠久久丁香五月| 五月亭久久无码视频| 91嫩草国产线观看亚洲一区二区| 永久热91| 大香蕉啪啪网| 丁香婷婷久久综合在线| 色综合久久中文| 五月天婷婷色色| 熟妇人妻中文字幕无码老熟妇| 在线看片av| 婷婷综合网| 青青草免费公开视频| 无码激情AAAAA片-区区| 日韩av网站在线观看| 99久扒热| 欧美婷婷丁香五月社区| 五月天天天开心激情网| 国产精品久久久丁香五月八戒视频| 五月网在线| 色五月婷婷大香蕉| 八戒青柠影视剧在线观看| 五月美女婷婷风骚| www九九| 色在线五月天免费| 国产美女精品| 狠狠色婷婷777| 人妻熟人中文字幕一区二区| 婷婷性爱视频在线| 综合网色| 久久性爱视频这里只有精品| 天天色天天操天天射| 91人久| 国产精品人妻在线网址| 五月婷婷激情综合| 久久这里只有欧美| 狠狠操狠狠| 91国产精品视频播放| 在线观看av网站| 99热久只有精品首页| 久热这里精品免费| 色区久久| 色吊丝av中文字幕| 亚洲精99| 五月丁香婷婷基地| 久久久人人操A V| 激情欧美婷婷| 久久伦乱| 五月婷九九草| 求可以看的AV网址| 激情綜合W W W,激情五月天| 免费成人中文字幕| 色色色视频免费无码| www婷婷| 国产又黄又爽又色的免费| 人人综合91网| 五月婷婷色情| 六月色婷婷| 欧美人人女女精品综合五月天| 另类图片五月天婷婷| 欧美视频五区| 91性人人| 亚洲天码视频www蛋播视频| 另类图片五月天| 91操在线观看| 欧美成人A片AAA片在线播放| 夜夜嗨一区二区三区直播内容 | 热九九在线| 99热在线观看免费精品| 噼里啪啦完整版中文在线观看 | 日本 @ va 免费| 婷婷六月激情| 久99久视频| 日本在线va| 美女久久婷婷| 激情五月婷婷伊人| 久热免费视频| 欧美影院婷婷| 天堂网啪啪| 五月丁香久久激情综合| 婷婷丁香五月天小说| 五月婷婷丁香| 亚洲精品va| 中文字幕在线资源| 激情五月丁香社区| 91九色国产在线| 密视AV综合在线| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 91九色成人原创视频| 色香五月天| 国产在线aaa片一区二区99| 99热大香蕉| 久久精品系列| AV在线不卡网站| 天天开心AV色综合婷婷五月天| 日日爽夜夜爽| 深爱激情网五月| 丁香五月电影| 色情综合网| 色婷婷激情四射视频| 亚洲Av成人在线观看| 五月丁香六月激情综合欧美| 99玖玖精品| 91精品综合久久久久久五月丁香 | 开心五月婷婷婷美女| 99乱视频| 久久久久婷| 色婷婷五月天激情在线观看| 991精品在线视频| 97碰碰视频| 成人中文字幕在线| 人妻熟妇国产精品| 五月丁香六月婷婷,婷| 天天综合网站| 熟女五月天久久综合| 无码免费人妻A片AAA毛片西瓜| ,99视频久久| 国产av天堂| 激情的五月| 草草色情综合网| 久久性爱视频久久性爱视频| 五月婷久久久| 综合网五月| 久久这里只有精品07| AA片在线观看视频在线播放| 久久婷婷综合五月趴| 婷婷丁香综合| 九九热精品99| 久久92| 九九大香蕉黄色影院| 欧美 日韩 成人 在线| 五月丁香综合啪啪| 五月的丁香六月的婷婷| 免费黄网不卡AV| 丁香五月六月婷婷殴美综合| 综合久久高清| 久9热| 丁香激情六月天婷婷| 丁香色情五月综合激情| 99热自拍| 99热777| 色五月婷婷激情基地| 九月婷婷久久久| 99视频久久免费视频| 久在线88综合| 天天操夜夜操| 狠狠操天天操综合| 超碰9在| 欧美精品18| 欧美综合五月丁香六月婷| 综合亚洲AV| 99精品热| 久久人妻人人| AV五月丁香| 五月天基地| 九九热99视频| 丁香婷婷五月天网站| 日日操无码| 久久只有18视频| www激情网| 国产avapp 网| 五月停性愛| 久久激情五月婷婷| 99视频热| 婷婷五月天伊人在线| 天天网曰日曰夜夜综合永久免费| 成人片在线播放| 天天做天天爱天天做| 五月婷婷综合激情网| 精品久久99| 日狠狠| 无码网| 综合色网站| 亚洲激情久久| 五月天婷婷av| 国产色色视频| 婷婷五月天人妻| 热久久91| 丁香五月综合久久| 99网| 99爱视频在线| xx久久| site:feetmall.com| 九九99免费视频| 亚洲成人av在线观看| 五月天大香蕉| 99精品久久| 99热在线观看免费精品| 9999热这里只有精品| 热99国产精品| 五月丁香久久久久| 97精品综合久久内射| 香蕉AV777XXX色综合一区| 色婷婷影视| 五月丁香婷爱在线| 26uuu国产精品| 99精品在线观看| 婷婷色情五月| 国产精品久久久久久久久久免费| 天天日天天爽| 五月天综合视频| 欧美激情VA永久在线播放| 新激情五月天色播| 99亚洲欧洲| 天天日日人| 99久久综合网| 亚洲精品电影| 国产婷婷五月天| 日本三级片片| 欧美超碰亚洲| 色婷婷综合在线| 啪啪五月婷婷| 曰韩五月丁香色婷婷无码| 九九热免费视频| 色色色婷婷| 开心五月婷婷婷美女| 天天狠狠色综合| 99re热精品视频国| 秋霞电影一级黄| 香蕉久久国产AV一区二区| 久久女人天堂| 久久99综合| 97在线碰| 综合欧美五月婷婷| 梁铮版《蜘蛛女侠》在线| 思思热国产视频| wwwss在线观看| 99大香蕉| 99色色爰| www久| 9 9 9色色| 97色啪| 五月婷啪啪| 激情综合网址| 亚洲美女婷婷五月天| 丁香五月天激情婷婷丁香六月 | 婷婷色无码| www.狠狠操.con| 深爱五月天 开心网| 色综合久久天天综合网| 色色 9| 99免费热视频在线| 五月婷婷色影院| 99热综合网| 国产激情久久| 51XX午夜影福利| 色五月人妻| 欧美交换配乱吟粗大25P| 大地资源色婷婷视频在线| 欧美情色电影一区二区| 亚洲婷婷综合视频| 另类激情五月| 激情综合网,五月| 婷婷五月天综合中文| 色五月视频,小说| 亚洲无码99| www.99在线| 精品一二三区久久AAA片| 五月婷视频| 99热亚洲综合| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 激情五月,婷婷五月,丁香五月| 丁香婷婷六月| 丁香五月欧美| 99精品丰满| 欧美精产国品一二三区| 情五月亚洲婷婷| 五月婷婷激情综合拍| 丁XX 成人| 国产无套精品一区二区| 婷婷丁香六月天| 97婷婷五月丁香| 婷婷综合色| 色欲日日躁| 色色com| 色九月婷婷| 97性高潮久久久| 日本久久网| 天天舔天天摸天天透| 婷婷激情在线| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 国产肥白大熟妇BBBB视频| 丁香花狠狠婷婷亚洲中文字幕| 欧美性猛交99久久久99| 婷婷五月天深爱| 丁香婷婷色六月| 五月丁香婷婷啪啪| 婷婷五月娱乐在线| 色婷婷五月丁香在线观看| 激情五月天综合婷婷网| 国产69久久久欧美黑人A片| www.久9| 开心四月婷婷在线色播播| 久久综合人妻| 中文字幕日产A片在线看| 99色在线观看视频| 99热这里只有精品50| 久久免费视频62| 99精品综合视频| 99热大| 开心五月激情站| 亭亭色网| www.99久久久久99| 蜜桃五月天色| 性一交一乱一交A片久| 久久99大全| 丁香六月天之亚州热女| www.久久| 九九aV| 日本色五月| 丁香五月综合狠狠| 久久久99久久| 色婷五月天| 99热人人艹| 九九视频精品这里只有| 操97| 成人版视频在线观看| 激情五月,激情综合网| 丁香五月综合| 丁香五月天偷拍| 亚洲AV网址| 99日在线观看视频| 天天天天天天天操| 亚洲成人免费电影| 超碰99在线| 久久久性爱视频| 99伊人婷婷在线| 色综合综合网| 中文AV网站| 五月婷婷激情色情网| 六月婷婷色综合| aa久久| 激情综合色婷婷啪啪六月天| 亚洲色色五月| 亚洲天堂aaaa| 九九超碰人人| 丁香美女主播视频在线观看 | 丁香五月骚喷水视频| 婷婷六月天| 7月婷婷六月丁香| 91成人看片| 91精品又长又大又粗又爽又猛| 色婷婷婷婷五月天| 停停六月 综合| 五月婷婷丁香网| 九九在线91| 五月天久久网站| 九九久久玖玖爱| 天天做天天摸| 五月婷婷www| jiZZdr| 97热九九| 久久99激情丁香婷婷小说网| 欧美啪啪五月天| 色五月激情网| 色色色在线| 激情综合婷婷| 丁香午月AV中文字幕| www.夜夜| 色婷婷视频| 亚洲色无码A片一区二区麻豆| 人妻在线中文字幕久久| 超碰97在线观看免费| 久久er99| 欧美性爱一区| 婷婷久久五月天| 天天爽天天弄| 天啪天啪天啪天啪| 丁香五月欧美色综合| 婷婷五月花| 五月丁香婷婷色色| 变态另类9| 丁香五月天色婷婷| 激情五月五月五月婷婷| 99在线综合视频| 91丨九色丨熟女丰满| 成人av免费观看| 成人综合网站| 婷婷五月天激情基地| 婷婷激情五月视频| www五月| 婷婷丁香五月六月激情| 色综合婷婷| 九九机热| 亚洲欧美成人在线| Blackedraw视频一区二区| 婷婷五月天在线观看免费| 日韩另类在线观看| 丁香五月综合| 五月天中文网| 婷婷九九| 色色五月婷婷网| 超碰在线超碰| 色五月婷婷久久| 草草色情综合网| 综合久久高清| 人人97碰| 天堂呦 呦百度搜索-百度搜索| 九色啦蜜臀| 亚洲 25P| 九月久久婷婷| 欧美大片免费观看| 丁香五月天色婷婷| 色99免费视频中文| 性做久久久久久久免费看| 99热这里只有精彩| site:jszngf.com| 激情丁香久久| 99热国品| 色色色99| 五月激情天天干| 中文网AV| www.射伊蕉婷婷| www.99视频| 99久久玖玖| 色婷婷电影网| 亚洲综合视频网| 襙逼网| 丁香五月电影| 黄色一极大片| 日韩人妻AV在线| 九九99免费视频| 丁香色综合| 久久五月婷婷视频| 久草热8精品视频在线观看| 97资源欧美日韩大香蕉超碰一区| 亚洲一区二区无码蜜乳av| 超碰人人色| 五月婷婷色色网址| 婷婷六月天国产综合| 国产成人AV在线播放| 久色国产| 夜夜夜天天操| 婷婷五月天综合久久| 99福利视频导航| 四虎国产精品永久在线国在线| 夜夜资源站| 日本久久爱| 综合色五月天| 色五月婷婷激情综合网| 天天搡日日搡aaaaⅩ| 婷婷五月天桃花网| 风流少妇A片一区二区蜜桃| 91热在线| 九九综合色综合| 日本色狠狠| 亚洲色 视频| 极品人妻videosss人妻| 久久久久久久久久久久久久人妻视频 | 无码毛片992367| 激情综合啪啪啪| 97视频91| 九日日夜夜69| 激情涩播| 欧美综合五月天婷婷tin| 黄桃AV无码免费一区二区三区| 日本久久精品| 九九操操| 五月丁香激情四射| 色狠狠999综合| 丁香婷婷激情| 婷婷激情六月视频| 桃色五月天| 国产在这里只有精品| 色五月丁香伊人五月| 日本va网站| AV在线资源| 9久国产精品| WWW.久久久久久久| 26UUU欧美激情一区二区| 偷拍91九色| 狠狠爱五月婷婷| 天天久综合| 久久99热这里只有精品| 开心网五月色婷婷| 激情综合激情综合| 五月婷婷丁香在线| 九热视频| 天天日日夜夜| 婷婷五月天堂| 天天干天天干天天操| 九九热最新| 亚洲热久久| 色九九综合| sewuyue第四色| 色九月婷婷丁香| 丁香五月婷婷六月| 综合啪啪| 丁香婷婷久久| 婷婷五月天社区| 色色色色丁香| AV免费在线网站| 97性视频| 日韩色久| 丁香五月天信号| 五月婷婷偷| 思思综合热| 久久五月天色| 99热最新精品| 婷婷五月激情综合| 大香伊人久色| 综合激情在线视频| 婷婷5月色| 五月天激情小说婷婷基地| 婷婷性爱五月天| 九九综合伊人| 五月丁香婷婷深深爱| 天天弄天天操| 综合久久婷婷99| 狠狠情色| 五月天五月色婷婷综合| 激情综合色五月丁香六月亚洲| 伊人婷婷五月| 开心五月天激情网| 激情五月丁香五月| 丁香五月激情五月| 色婷婷瘦婷婷日韩| 97久久人人操| 79色色免费| 九月色婷婷综合| 东京热免费视频| www.henhengan| 99热网站| 五月天婷婷激情六月久久 | 人人色人人弄人人操| 五月天丁香综合在线| 国产亚洲色婷婷久久99精品91| 五月天a婷婷伊人| 另类激情首页| 五月香婷婷| 丁香久久九九99| 性色欲情 网站| 丁香成人色情五月天| 欧美99热| 亚洲综合狠狠艹| 翔田千里 50岁 无码| 五月天色小说| 婷婷五月激情图片| 中文网av| 99爱在线免费视频| 99人妻碰碰久久久禁片| 综合久久高清| 五月婷婷精品无在线| 五月婷色色| 婷婷天天五月天| 国产婷婷五月天| 五月丁香婷婷中文网| 丁香五月手机在线| 国产SUV精品一区二区883| 丁香五月AV| 久久丁香五月婷婷| 99精品视频免费观看| 噼里啪啦完整版中文在线观看| 九九综舍久久| WWW.99热| 色色色色色色色色网站| 国产古装妇女野外A片| 大香蕉综合在线| 久热A| 五月丁香啪啪网| yellow视频在线观看91| 亚洲五月天综合| 激情文学五月丁香六月婷婷| 国产精品久久久久久久久久久久| 91尤物九色在线| 五月天狠狠网| WWW嗯嗯啊啊啊啊| sS丁香五月婷婷| 色综合久久综合中文综合网| 强奸幻女毛片| 人妻性爱av网站| 五月丁香成人| 婷五月天丁香婷五月| 色五月天视频| 疯狂做受XXXX高潮A片| 久久色情| 99九无网码| 182无码| 香蕉久久国产AV一区二区| 婷婷五月天伊人| 九久热| 婷婷涩五月天综合| 丁香婷婷五月| 成人在线网址| 强伦轩人妻一区二区电影| 婷婷丁香综合在线| 人人视频色| 丁香五月欧美婷婷综合| 开心四月婷婷在线色播播| 激情婷婷五月| 激情性爱五月天| 日本久久性| 91热网址| 五月婷婷日| www.爱婷婷.com| 亚洲成人婷婷| 综合精品99| 人人摸人人摸| 性爱五月婷婷| 欧美这里只有精品| 99色热视频在线| 欧美搡BBBBB摔BBBBB| 丁香五月天色综合| 五月丁香六月激情| 色爱综合视频| 欧美性生交XXXXX无码小说| 这里只有精品热| 99热| 日韩狠狠色婷婷| 色色色网站| 色婷婷综合五月| 六月激情综合| 综合婷婷六月| 色五月情| 天天干天天操天天爱| 99网| 五月丁香另类网| 欧美日韩国产一二区| 这里只有精品在线看| 日本天堂网站99| 激情婷婷六月| 91日综合欧美| 爱婷婷都市激情| 狠狠综合久久| 久久92| 色色色色色色色色五月先| 超碰99在线| 色色啊| 色欲久久99精品久久久久久| 日韩爱操视频| 久久这里只有精品99| 久婷婷五月丁香在线观看| 亚洲精品V天堂中文字幕 | 79成人网| 内射在线CHINESE| 五月婷婷在线观看| 婷婷趴趴| 色婷婷五月天偷拍| 无码人妻一区二区三区四区| 欧美三级视频| 秋霞AV淫| 五月丁香操婷逼| 深爱五月婷婷| 亚洲色婷婷五月| 婷婷久久性爱| 99无码视频| 激情婷婷五月黑人| 日本欧美999久久久三级片| 男女免费视频999| 99色在线视频观看| 色婷婷在线电影| 色婷婷超碰| 色婷婷亚洲| www.99热国产| 狠狠干综合| 五月天婷婷午夜丁香| www.丁香黄色五月天人与| 婷婷精品在线| 熟女91九色| 五月天开心网| 五月天亭亭俺也| 性生活视频98791| 色偷偷综合| 天天操狠狠操| 婷婷五月天丁香花| 色婷婷av综合网| 五月丁香啪啪网| 五月婷久久在线| 亚洲AV电影美洲AV电影| 五月婷婷激情五月| 99热这里只有精品33| 五月丁香婷草| 丁香情色五月| 丁五月激情视频免费| 99极品视频| 六月婷色| 九九热123| 久热大香蕉| 激情桃色网| 人人搡人人| 疯狂做受XXXX高潮A片| 991国产精选视频在线播放下载| 五月青青草综合| 激情爱爱网站| 99色综合久久| 涩五月婷婷| 天天婷婷综合亚洲亚洲| 亚洲精品乱码久久久久99| 97成人在线视频精品| 午夜天堂一区人妻| 九九热99视频| 激情五月天小说视频| 5月激情天| 97操碰日本女人| 九九热在线视频| 九九99在线| 疯狂做受XXXX高潮A片动画| 亚洲天堂啪啪| 婷婷五月天视频在线观看| 91精产一区三区免费观看| 苗黎美女四级成人版一级二级毛片| 九色91国产| 丁香六月婷婷激情| 婷婷丁香五月天在线视频| www,久久久人人| 99激情| 狠狠狠狠狠操| 天天色一道本综合婷婷| 婷婷综合精品| 丁香五月123| 色域五月丁香| 免费看欧美成人A片无码| 超碰99在线观看| 97se视频在线| 天天做天天爱天天爽综合网| 婷婷五月天伊人在线| www.91九色| 玖玖婷婷婷丁香五月| 丁香婷婷婷婷十二月在线观看视频| 婷婷五月在线观看| 淫视馆aV二区一区| 日韩人妻在线观看| 婷婷五月天视频| 青草激情综合| 激情五月网站| 激情婷婷丁香五月天| 久久婷视频| 欧美WW在线网| 国产精品第一国产精品| 免费看欧美成人A片无码| 色婷婷久久| 色情五月综合婷婷| 日本爆乳片手机在线播放| 久久色情综合免费网站| 日日夜夜小色哥| 天天干、天天日日| 五月天六月丁香| 开心六月丁香五月婷婷| 性爱网久久| 九九99久久| 大香蕉久久婷婷| 婷婷久久精品| 久久综合首页| 97人妻碰碰碰碰碰久久久久久| 操操操B| 丁香五月婷中字在线| 五月天天丁香婷婷| 91色性感五月婷婷丁香| 色婷婷丁香女女| 久久精彩视频18| 大香蕉220| 久久五月婷天天干| 大鸡巴伊人网| 综合爱久久| 久久九九99.www| 激情五月婷婷色综合| 9l视频自拍九色9l黑人| 久久色吧| 六月丁香开心婷婷欧美| 亚洲四色五月| 六月丁香六月婷婷欧美| www,超碰| 国产精品99久久久久久猫咪| 操一区| 天天舔天天摸天天射| 九九热在线视频,| www.婷婷五月| 欧美色99| 99热只有| 区欧美日韩成人| 99热在线观看99| 久九九热| 久久婷五月| 天天舔天天摸天天射| 天天日人人| 天天做天天爱综合| 五月性色| 丁香五月婷婷色| 四川女人毛多水多A片| 亚洲成人精品三区| 激情综合网五月| 婷婷五月中文在线| 影音先锋人妻出差| 丁香五月激情综合| 这里精品| 色色丁香五月天| 97久久超碰| 我爱婷婷五月天综合88| 婷婷丁香五月高清| 99热这里只有精品99| 色色色色色色色色网站| 日日操夜夜擼| 亚洲AV免费国产电影| 天天插天天狠| 夜夜人妻五月天| 六月婷婷九月丁香亚洲综合| 亚洲成人AV在线播放| 综合狠狠干| 99热伊人| 99玖玖视频| 六月婷婷天天操夜夜爽视频| 欧美婷婷| 天天天天做夜夜夜夜做| 亚洲欧美国产高清vA在线播放| 大香蕉五月婷婷| 桃色成人网| 丁香六月激情毛片| 久久99视频| 婷婷色成人| 久综合网| 超碰69天堂| 影音先锋按摩| 丁香六月婷婷高清| 激情人妻综合| 五月婷婷综合在线| 区欧美日韩成人| 九久久精品视频99| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 激情第四色| 久久九九99.www| 亚洲欧洲99| 天天日天天爽| 欧美性生交A片免费看| 久青操| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 99久久性爱| 激情久久久| 久婷婷五月天影院| 五月丁香激情深爱婷婷| 99精品亚洲| 亚洲热久| 凹凸操Av| 丁香五月av| 日韩人妻在线观看| 99热在线这里| 午夜少妇在线观看视频| 婷婷月综合| 五月天最新网| 女人被躁到高潮嗷嗷叫小| 99久re热视频精品98| 九九热视频这里只有精品| 97caop| 无码九九| 久久曰曰| 91 原创 在线 九色| 精久久色| 午夜天堂一区人妻| 99操逼| 亚洲色婷婷| 九九中文字幕九| 天天干天天叉| 色综合天天| 狠狠干狠狠色| 九九热re99re6在线精品| 日韩三及成人AV片| 爱射综合| 思思干精品| www.五月天。com| 欧美精品18| YJLZZJLZZ亚洲乱熟无码| 五月天久久91| 视频一区二区在线| 婷婷深爱色五月| 天天干天天干天天干| 五月天婷婷av| 91啪啪网| 久色88| 色色色9| 操碰99在线视频观看| www.狠狠操.co m| 久久99网| 亚洲色综合| 99精品网| 欧美日韩国产日本精品四虎网网站物| 婷婷五月天干干| 丁香五月婷婷天激情| 天天看片日日夜夜| 天天插天天干| 99久热这里只有精品视频删减版| 亚洲操b| 五月婷婷激情网| 人人摸人人操人人爽| 成人av中文字幕| 色五月激情| 色婷婷免费观看| 婷婷中文在线| 26.uuu丁香五月婷婷| 九月性爱网| 五月天播播中文字幕| 第1影院之五月婷婷| 67194中文字幕| 日韩在线99| 草一草avb| 99热这里只有精品268| 五月婷婷色| 婷婷五月成人有| 中文字幕在线免费看线人| 伊人国产婷婷五月天| 久久xxxx| 婷婷五月AV| 丁香五月亚洲综合| 六月激情网| 99热在线观看精品| 五月婷婷丁香| 激情精品久久| 丁香8月手机综合| 成人九九视频| 99资源人人| 五月婷婷日| 桃色五月婷婷| 亚洲乱码精品久久久久..| 婷婷6月综合网| 大香蕉五月婷婷丁香| 91精品久久久久久综合五月天| 久99久视频免费观看| 九九碰九九爱97| 五月综合婷婷开心网| 五月丁香婷婷成人网| 亚洲五月婷天天操| 亚洲天堂有码| 六月婷久久| 五月天婷婷在线啪啪视频| 99欧美热| 色色色色色网站| 色9999日韩国产| 国产精产国品一二三在观看| 日日日日操| 色七七九九| 久婷五月| 久久久久久综合五月婷婷| 五月天怕怕| 五月婷婷丁香| 五月天社区狠狠| 婷婷丁香综合| 99爱在线精品视频免费观看| 婷婷五月天色综合翘| 婷婷五月六月| 79精品视频在线观看,| 激情综合网 激情五月天| 99碰碰中文| 五月天婷婷丁香| 99re这里| 7月婷婷六月丁香| 免费观看2018www黄色操逼网站|