欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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| 婷婷五月成人| 五月丁香黄色| 激情五月综合视频| 色婷婷导航| 爱iii做iiii日| www久久久久久久97| 天天开心AV色综合婷婷五月天| 丁香综合久久| 色婷婷91激情小说| www五月婷婷| 亚洲AV免费在线| 五月天婷婷影院影院观看| 婷婷五月丁香基地在线视频官网| 青青草原亚洲天堂| 综合久久高清| 99碰网站| a九九热www| 丁香五月天日韩无码| 9+1视频网址| 99热综合色图| 午夜九九九九九九九九九九九九九| 五月天精品综合在线| 俺也去婷婷五月天第五色| 97干在线看| 思思9久久| 九九精品热| 亚洲AV中文在线| 日日夜夜天天综合| 99视频在线观看网址| 激情综合色婷婷啪啪六月天| 国产精品成人av在线观看春天| 99热爱爱干干日| 丁香五月天五码婷婷| 91热爆在线| 久久宗合影| 丁香五月婷婷老师网站| 天花AV无码| 夜夜嗨一区二区三区直播内容 | 丁香婷婷久久五月天| 狠狠干狠狠干| 丰满少妇猛烈A片免费看观看| 亚洲第一第二网站| 在线另类| 蜜臀综合久草| 色色九区| 九九aV| 日韩有码久久| 色色激情网| 五月天综合激情网| 99热情这里只有精品在线播放| 五月婷婷黄色| 色婷婷五月天激情久久| 99re热免费观看视频精品| 五月色俺婷婷| www五月| 五月色色激情网| 日日日日操| 精品国产va久久久| 婷婷综合视频| 五月婷婷色| 免费AV播放| 99热综合| 在线sebiav精品视频| 色情综合网| 中文字幕性爱丰满| 婷婷五月天综合在线| 色婷婷的五月天| 91久久九久久九久久九久久九久久| 五月天成人在线视频网站| 色五月激情综合| 亲子乱AV一区二区三区下载| 最近中文字幕大全免费版在线| 欧美在线视频99| 乱精品一区字幕二区| 国产欧美熟妇另类久久久 | 丁香五月最新地址| 欧美成人精品A片免费一区99| 九九色热| 99人人精品| 色色色国产| 婷婷丁香六月综合激情站| 婷婷丁香六月五月天| 丁香五色月婷婷网| 五月综合久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 99视频| 精品无码久久久久久久久 | 色婷婷丁香特级性爱视频| 开心五月激情五月丁香五月婷婷| 色播婷婷大香蕉| 大香蕉综合| 99超超碰| 超碰chaompinm| 九九热这里都是精品6| wwwxxx五月婷婷小说| 天天操比比| 色色色色色色色色综合网| 香蕉AV福利精品导航| 殴美97色| 日本精品。999| 久久激情五月天| 人妻AV在线| 日日操夜夜擼| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 99精品成人无码A片观看金桔| 丁香五月婷婷av影院| 97碰碰在线观看视频| 婷久看人爽| 天天插天天插天天插天天插| 亚洲V国产V欧美V久久久久久| 中文网婷婷字幕婷| 久久人人人人妻| 日本系列_4页_777FP| 最新高清无码专区| 五月婷婷深深的爱| 91色噜噜狠狠狠狠色综合| av国产精品| 岛国午夜视频| 五月丁香六月婷婷手机无线| 大香蕉婷婷| 亚州色综合| 安息电影在线观看完整版| 色五月婷婷丁香五月| 99久久久久| 一起操 91N.com| 性爱动图国产麻豆一区二区三区| 激情久久久久久久久久久| 亚洲精品久久久无码| A在线观看| 毛片新网地| 久久久18| 欧美熟女99| 中文字幕色色| 日本成人内射| 停停五月天激情网| 91黄色五月天视频| ss99热| 婷婷伊人| 九九色热| 99久热这里只有精品| 久久久久久18| 婷婷国产成人| 色婷婷在线影院| 天天日天天做天天操| 综合五月天| 久久9热| 无码人妻一区二区三区免费九色| 江苏少妇性BBB搡BBB爽爽爽| 色天天综合色| 色五天综合| 丁香五月情色| 色色色综合| 黄网免费看| 六月丁香婷婷综合在线| 人妻激情视频| 五月 成人 婷婷| 色婷婷女优有码五月亭| 久久九九国产精品怡红院| 五月停性愛| 狠狠搞综合色| 日本色啪| 五月天桃色深爱网| 插逼综合网| 99精品免费视频| 91九九精品| 婷婷爱五月天人人爱| 少妇被下春药玩弄A片| 天天干,天天舔| 99热在线精品观看| 天天做天天爱天天日| 91丨九色丨熟女高潮| AV操逼网| 天天插天天插| 亚洲丁香五月美女| 毛片九九九九九九| 色色五月天丁香| 日本三级中文字幕| 五月大香蕉| ss五月天激情| 爱操天堂| 99热成人| 99免费综合网| 99久久九九视频| 天天透天天摸天天舔| 丁香婷婷AV| 欧美3AaAa大片| 丁香伊人五月色婷婷五十路| 大香蕉天堂| 99九九99九九九视频精彩| av在线激情| 久热综合| 风流少妇A片一区二区蜜桃 | 久久婷婷原创视频| 国产性爱一级| 激情开心五月婷婷| 亚洲色优| 天堂资源欧日浪女在线播放| 少妇高潮A片无套内谢麻豆传| 婷婷区日本| 国产婷伊人| 夜夜干 夜夜操| 97婷婷狠狠久久综合9色| 99国产精品久久久久久久久久久| 俺也去婷婷五月天第五色| 五月开心网| 91小黄书网址在线观看| 99毛片| 在线99热| 色偷偷五月天| 337p午夜影院| www.久久99热地址发布| 成人无码髙潮喷水A片| 五月激情综合深爱| 色婷婷五月综合在线| 色色综合日韩| 亚洲成Av人片乱码色第1集| 色婷婷操逼| 久久99热这里只有精品23| 丁香婷婷久久五月天| 99久久五月婷婷| 日日干五月天婷婷| 激情丁香五月AV| 亚洲成人免费电影| 99热免| 91超碰在线观看| 欧洲电影在线观看免费版英语版| 大香蕉五月婷婷| 婷婷六月丁香久| 月色色综合婷婷网| 免费无码毛片一区二区A片| 婷婷激情社区| 婷婷区日本| 久久精品噜噜噜成人A∨色欲| 97色色色色色| 亚洲碰碰碰| 2025最新亚洲激情在线| 操碰91| 久久久全国免费视频| 色六月婷婷| 精品99只有。| 99丁香五月婷| 五月婷婷丁香综合| 182TV大香蕉| 欧美久久一级内射wwwwww.| 操人久久| 成人免费va| 激情婷婷五六月天| eeuss人妻| 狠狠久久婷| 香蕉AV777XXX色综合一区| 成人综合视频在线| www色五月| 在线五月色播| 丁香五月图片| 草综合网| 色999五月色| 五月天婷婷激情四射综合| 狠狠色丁香| 婷婷五月大香蕉| 色爱终和网| 丁香五月 综合| 久久香蕉福利| 久久久久网站| 97资源碰碰在线| 国产女18毛片多18精品| 色婷婷激情五月天丁香| 亚洲网综合在线| 久久思思热| 婷婷丁香九月| 91黄操| 五月天久久婷婷| 久久九精品| 五月丁香拍拍激情综合| 丁香六月av| 欧美婷婷六月丁香综合色| 五月天激情网址| 日本玖玖在线| 色色五月综合| 色色色五月婷| 色射影院| 亚洲婷婷在线播放十月| 五月色情婷婷| 五月情四婷婷| 天天干天天色天天干| 日日夜夜青青草| 亚洲丁香五月综合| 色狠狠伊人久久五月丁香| 激情美女五月天| 九九色综合| 六月丁香婷| 黄网在线播放| 天天草人人摸| 婷婷综合五月天激情| 婷婷的五月天另类视频| 狠狠狠狠狠草| 天天摸天天透天天舔| 色导航色婷婷五月天在线观看| 婷婷丁香五月综合激情小说| 亚洲va在线∨a天堂va欧美va| 五月丁香婷婷开心| 欧美色五月| 九九热99免费视频| 丁香五月成人| 丁香久久在线| 婷婷综合日本| 热中文字幕| 六月亚洲婷婷6月中文字幕| 激情五月天激情网| 国产片色| 丁香五月婷婷av| 久操大香蕉| 亚洲五月花| 97人人操人人干| 久热在线中文字幕色999舞 | 色色婷婷五月天| 婷婷综合| www久久久久久久| 久久久九九九 99| 99热热这里只精品996小说| 激情六月丁香| 五月婷色丁香| 五月婷婷影院| 中文字幕人妻熟女在线| 日韩精品99久久| 色碰碰| 五月花综合网| 人妻久久久久久久 | 国产成人综合亚洲| 99色在线观看视频| 亚洲在线激情婷婷五月| 五月婷激情| 久操大香蕉| 成人无码精品1区2区3区免费看| 人碰人人人玩91| 综合色网站| 人妻久久做| 婷婷射图五月天| 超碰高清在线| 日韩成人影片网站| 五月激情综合网| 免费色色色| 九九热精品6| 啪啪啪综合网| 海外网站专业操老外| 丁香午月AV中文字幕| 亚洲第一色区| 五月丁香亭亭| 激情五月综合久久| 五月色俺婷婷| 丁香五月天电影| 色婷婷aV四虎| 天天粽合合合合| 99热66| 成人做爰A片免费看视频| 国产性爱色| 丁香五月天偷拍| 久久激情五月天| 五月婷婷丁香在线| www91久久| 伊人天天色| 五月天天综合| 婷婷黄色五月| 天天干天天操| 婷婷色情 | 色狠狠综合网| 丁香婷婷激情六月五月开心| 五月天丁香婷婷视频网址| 97在线精品视频| 日日夜夜综合| 亚洲国产精品二二三三区| 91人人澡人人爽人人看| 五月花在线观看视频| 开心五月婷婷| 天天久久66xxx| 婷婷五月天综合网| 4438全国最大视频成人网站在线观看| 婷婷丁香成人在线视频| 婷婷五月激情综合| 婷婷色在线| 综合网啪| 色噜噜五月天| 人人操人人干AV| 丁香六月婷婷激情| 丁香五月久久综合| 99ER热精品视频| 天天色天天搡| 91丨九色丨国产打屁股| 91婷婷在线| 可以免费观看的av| 9视频1在线| 99热日韩| 五月天激情黄色网址| 国产在线另类五月婷婷| 超碰国产在线播放| 五月婷婷干| 色色色热| 精品婷婷五月天| 久久一热| 国产99美少妇| 色久综合| 五月丁香在线偷拍视频| 久久性爱网| 狠狠狠狠狠狠狠狠草| 婷婷五月天成人网| 韩国情人在线电视剧免费观看高清版全集| 婷婷在线视频| 天天 日综合| 色婷婷丁香五月| 五月天婷婷基地丁香| 97精品综合久久| 大香蕉啪啪| 99久久99九九九99九他书对| 丁香五月婷婷激情小说| 九月婷婷综合| WWW.开心五月天.COM| 亚洲妇女熟BBW| 婷婷五月天性| aaaa.黄| 五月天婷婷在线视频| 色婷婷AⅤ| 色色色综合网| 天天色播| 97精品人人A片免费看| 婷婷丁香五月精品| 色九九中文字幕| 五月丁香六月激情啪| 伊人九九九久| 日韩高清成人| 亚洲激情免费久久| a性生活久久无| 色久五月天| 欧美丁香五月| 亚洲精品99| 丁香久久五月天视频在线观看| 色色色色丁香| 国产精品爽爽久久久久久| 丁香久久五月婷综合| 欧美色婷婷| 五月婷丁香花| 亚洲天堂色| 99在线观看精品视频| 久9热视频在线观看| 色屌丝中文字幕| 丁香六月av| 激情五月天婷婷播播久久综合91| 国产va视频| 日韩成人AV在线| 丁香五月天社区| 欧美激情五月| 九九热99视频| a性生活久久无| 五月丁香婷婷深深爱| 9191avse| 色婷婷色综合久久精品V| 看片视频在线免费日产在线看| 丁香婷婷基地| 99综合五月免费视频色婷婷| 九九婷婷综合| 五月丁香六月婷婷综合伊人| 在线观看免费狠狠色丁香香综合 | 五月草影视| 五月婷婷深深爱| 99啪啪| 思思re99视频在线观看| 久久久久久久综合狠狠综合| 婷婷五月欧美| 丁香六月婷婷| 97干在线播放| 婷婷五月伦理| 性爱先锋AV| 色色9 9| 国产亚洲在线观看| 日日夜夜狠狠操| 伍月婷丁香婷| 91九色中文字幕女在线观看| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 成人视频婷婷| 亚洲精品五十一区| 91精品综合久久婷婷九色| 99精品热| 91婷婷丁香| 日日操天天爽| 婷婷五月天六月综合| 亚洲性视频| 婷婷丁香18| 午夜丁香婷婷| 99综合自拍| 天天成人综合视频| 婷婷激情五月天7| 五月婷婷六月丁香首页| 中文婷婷狠狠| 色色三级视频| 第九色区av天堂| 97碰久久| 婷婷五月天综合AV| 99这里只有精品|v| 五月婷丁香亚洲| 人人玩人人橾| 久9视频| 夫妻超碰在线| 亚洲av电影网站| 91操操| 9久精品视频| 狠狠草狠狠草| 六月综合在线| 久久A V无码视频| 丁香五月图片| 激情综合4月| av在线观看网站| 青青草Avb在线| 97色射| 一本大道嫩草AV无码专区| 99操逼| 综合性爱网| 丁香五月婷老师| 丁香婷婷色五月天| 性99网站| 欧洲第一久色| 69色色视频| 久久99久久99精品免观看软件 | 久久九九大香蕉电院| 五月天婷亚洲综合在线嫩草网| 大香蕉天堂| 亚洲成人网站在线| 久久九九中文字幕| 欧美日本黄色| 色射影院| 亚洲激情亚洲激情| 九九激情网| 99er精品| 日韩一区二区三区无码| 色在线五月天免费| 五月丁香 啪啪啪| 伊人婷婷五月| 十月丁香九月婷婷综合| www.99热这里只有精品| 五月天丁香婷婷社区| 性爱视频久久| 五月婷婷五月天| 99ri国产| 国产精品电影| 欧美五月停| www,99视频| 婷婷五月天av小说| www.五月天色色色| 丁香六月啪| 伊人婷婷五月天| 天天综合网、天天综合色 | 亚洲操人| 综合久久狠狠| 夫妻超碰在线| 综合网色| 思99热精品久久只有精品| 热99精品视频| 色九九九九| 色啪网| 9久热| 97日韩无套内| 欧美日韩成人高清在线| 思思色播| 一级二级香港秋霞欧美欧美秋霞| 婷婷在线激情| 99热这里有精品| 无码AV免费精品一区二区三区| 激情6月| 日韩欧美一道四区中文字幕| 亚洲 综合中文| 伊人六月丁香婷婷| 在线只有精品| 大香蕉啪啪啪| 99日视频在线| 丁香五月花婷婷开心| 久久机只有这里精品| 开心五月网 | 99色干| 天堂成人A片永久免费网站 | 国产精品99久久久久久久女警| 色色综合网www| 超级黄色片| 5月丁香婷婷| 久机视频这只有精品| 亚洲美女高潮久久久久久69| 日韩中文字幕| 久久丝袜婷婷| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 深爱丁香网| 女人天堂 AV| 99精品自拍视频| 五月婷婷爽爽爽| 操97免费超级视频| 五月丁香亭亭天天舔| 婷婷月综合| 91在线操逼视频| 五月丁香激情四射| 婷婷激情丁香六月| 热99这就是精品视频| 日韩一级| 九九热免费观看视频| 日韩啊啊啊| 国产精品一区在线观看你懂的| 色婷亚洲| 五月天夜夜爱夜夜操| 婷婷五月色情天| 亚洲av电影网站| 亚洲五月天色| 狠狠色五月| 婷婷五月色播天| 亚洲久热| 大香蕉婷婷五月| 日本色99网站| 九九成人高清视频| 婷婷五月综合在线| 色五月97| 色五狠狠| 国产肥白大熟妇BBBB视频| www.99热视频| 99综合| www天堂99| 日本的α片xxxwww| 狠狠色综合网| 操逼六区| 色婷五月天| 99久久婷婷国产综合精品电影| 色一区高清| 亚洲99在线| 五月婷狠狠| 情情五月天色| 天天天天操| 色噜噜婷婷| 九热免费视频| 天天操天天曰天天射| 都市激情五月婷婷亚洲| 99燥99日| 五月丁香天堂网婷婷| 色色色色综合网| av网址在线| 婷婷五月电影| 14色综合婷婷| 成人版视频在线观看| 五月丁香最新| 色婷婷五月天久久| aV欲望人妻中文字幕| 26uuuuuuuu国产| 99亚洲精品综合在线| 综合激情五月丁香| 亚州美女| 这里只有精品99www| 色情成人五月天| 伊人五月天日日夜夜久久久天天| 五月丁香啪啪| 免费精品66| 中国女人做爰A片| 激情综合五月色在线| 久久人妻视频| 六月香五月婷| 91婷婷视频| 六月五月婷婷| 人妻六月天| 婷婷伊人网| 91九色超碰正在播放| 久久九九国产精品怡红院| 97五月婷婷| 日韩在线9| 9 1超碰九色| 色色色色色色色色综合网| 一级片sese片.COM| 噼里啪啦完整版中文在线观看| www.狠狠狠.com| 亚洲黄色网址| 玖玖资源在线视频| 日本久久婷婷| 99无码精品| 色播五月丁香婷婷| 婷婷丁香精品视频在线观看| 日本色爽| 激情五月天视频| 99精品在线| 婷婷久久六月费| 久久丁香综合精品综合| 色综合五月| 久久99久久99精品免视看婷| 色播五月婷婷| 久久久久久五月天| 日本免费91| 亚洲a色| 日韩AAA| www.玖玖婷婷在线| 久9视频| 婷婷瑟五月天久久综合| 伊人青涩网| 色五月综合| 在线综合婷婷| 成人毛片在线免费观看| 亚洲综合五月天婷婷丁香| 思思热再线视频| 玖玖婷婷色| 日日干天天| 色色cOm| 99ri国产| 亚洲欧洲美女在线观| 成人在线综合| 丁香六月高清视频| 久久大香蕉视频| 五月天久久久| 激情综合五月婷婷| 热无码A∨| 九月丁香欧美综合| 26uuu国产| www.五月丁香| 五月婷人妻| 另类 在线| 免费无码毛片一区二区A片| 五月天婷婷久久| 婷婷爱综合| 伊人九九热| A片试看50分钟做受视频| 五月激情在线| 色五月婷婷丁香婷婷| 婷婷综合97| 婷婷丁香红五月91C| 六月激情婷婷| 人人射人人高潮| 凹凸7777操操操| 婷婷色偷拍| 大战熟女丰满人妻AV| 天堂中文国产| 丁香婷婷中文字幕| 色色色在线| 影音先锋一区二区三区| 2015在线中文字幕| 丁香五月天堂| 亚洲免费观看高清完整版AV线| 六月五月久久丁香| 操碰99| 五月丁香婷婷激情爱爱| 99色天堂| 天天摸天天肏| 婷婷六月亚洲综合| 五月丁香狠狠| 亚洲狠狠婷婷综合久久久| 99热这里| 在线不卡中文字幕| 色色热日| 又大又粗九一在线| 色婷婷在线视频| 五月婷婷欧美| 婷婷五月色惰| 夜夜干夜夜操| 五月丁香婷婷成人综合网| 婷婷六月综合在线| 久久视屏这里只有久久| 久99综合婷婷| 三级毛片7979| 激情丁香久久| 国产色色色色色| 大香伊人久色| 国产69久久久欧美黑人A片| 综合久久99| 婷婷丁香97| 极品另类| 97碰碰在线观看视频| 色欲久久久久| 色狠狠综合入口| www国产亚洲色婷婷com| 操嫩逼电影| 丁香六月激情综合网| 操笔无码| 另类图片激情五月天| 五月天婷a在线| 久久婷婷激情五月天一区二区| 婷婷激情综合网| 亚洲在线操| 日本不卡中文字幕| 国产操碰| 草综合网| 永久思思热在线| 五月天婷婷六月激情网| 六月丁香成人| 欧美日韩大黄| 伦99热| 婷婷丁香五月天狠狠| 亚洲国产成人裸舞| 亚洲无码九九| 色婷婷六月丁香综合欲精品| 99热在线只有精品| 五月天色综合| 中美日韩成人在线| 婷婷五月天久久久| 99热9| 97干干干丁香| 东北熟女高潮99综合99| 久久综合五月| 超碰免费人妻| 五月丁香美女视频| 天天在线天天综合网色| 五月婷婷无码专区| 欧美婷婷五月丁香| 99re热在线观看| www.久久久久| 五月激情综合网| 超碰国产在线播放| 日本在线wwww| 亚洲AV综合在线观看| 九九国产视频| 五月色婷婷综合丁香精品无遮挡| 五月情涩综合婷婷| 婷五月天| 天天天天天天操| 亚洲V国产V欧美V久久久久久| 亚洲AV无码成人电影| 久久久A级视频| 综合AV在线| 色青青五月| 人草人人| 中文字幕 码精品视频网站| 中字幕视频在线永久在线观看免费| 99五月香婷婷丁香在线视频| 婷婷丁香综合| se99高清无码| 色色免费网战视频| 久操大| 99精品国产在热久久| 丁香五夜激情四射夜夜夜| 五月丁香av中文| 思思热性操| 人妻少妇色综合| 色99色| 色亭亭丁香五月天| 大香蕉伊人久久| 婷婷综合伊人丁香| 精品在线网站| 熟女强人妻一区二区三区四区无| 五月天婷婷AV| 99热这里只有精| 人人看人人97| 日本色噜| 五月丁香在线观看| 九九热精品| 丁香六月婷婷社区| 色色影院aaaav| 99爱视频在线观看| 无码少妇高潮喷水A片免费| 99色免费| 欧美色播综合在线观看| 九九青草热| 欧美性生交XXXXX无码小说| 久久久久久久8| 婷婷开心青青草| 任你爽精品免费视频6| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久婷五月婷| 久久久久久久久久久久久久久久久精典| 色婷婷丁香| 亚洲AV色婷婷人禽五月天| 五月天婷婷综合网| 久草a片| 俺去也在线官网| 五月丁香黄色视频| 日都一级A片| 激情丰满熟妇五月| 色综合激情| 久久五月婷婷视频| 开心激情久久久久久久| 26UUU欧美| 婷婷欧美激情| 天天夜夜操| 26uuu欧美| 国产激情综合| 五月天婷婷色色网| 亚洲视频在线网| 色 五月俺去也| 九九成人| 97操在线视频| 五月天激情综合网| 超碰无码老师| 久99久热只有精品国产99| 九九视频在线观看| 激情五月天综合网| 五月婷婷av| 成人精品免费在线观看| 丁香五月婷婷成人综合| 五月丁香久久| www狠狠| 色哟哟www| 色五月,婷婷大香蕉| 色五月视频,小说| 老美AA片| 色婷婷五月天天天做| 色99视频| 99免费热在线精品| 99色性爰网络| 人妻AV在线| AV在线观看网站| 婷婷久久性爱| 婷婷娌伦网| 91丨九色丨老农村| 99re8在这里只有精品| 久婷婷久草| 丁香五月婷婷俺也要去| 丁香五月婷婷啪啪视频| 开心五月激情五月丁香五月婷婷| 欧美色综合天天久久综合精品| 在线视频色五月| 色爱综合网| 色五月丁香总合网| 五月婷婷综合激情| 99爱免费在线观看| 五月丁香六月激情| 天堂婷婷五月色| 无码激情AAAAA片-区区| 五月婷婷天天色| 国产成人精品一区二区三区视频| 婷婷六月爽| 成人做爰高潮A片免费视频 | 成人国产网| 91精品久久久久久综合五月天| 久久99激情五月天| 思思热在线播放| 99精品偷拍视频| 天天日天天插| 97碰碰视频在线观看| 久99热| 色综合爽| 黄色三级毛片中字| 五月开心深深爱激情综合| 影院久久久| 婷婷五月激情中文字幕| 婷婷情色五月天| 九九热99热| 99热99热在线观看| 激情五月天久久| 色婷婷视频在线| 第四色五月婷婷| 97操操操| 婷婷激情五月天在线视频| 一二线视频 另类| 五月婷婷六月综合| 色女人久久| 五月天六月色| 噜噜噜色噜噜| 狠干综合| 色999亚洲人成色| 五月天久久婷婷婷| 九九久久色| 五月丁香婷婷深深爱| 婷婷久热| 国产黄大片在线观看画质优化| 色欲天天综合| www.91九色| 国产乱妇无乱码大黄AA片| 亚洲综合色五月| 日本免费91| 91啪啪视频| 99色爱| 91丨九色丨熟女| 超碰免费在线| 婷婷丁香五月在线播放| 亚洲综合99| 99原创自拍视频在线观看| 久久a热| 華人性愛AV在線| 婷婷六月香| 婷婷五月亚洲综合| 婷婷六月激情丁香| 超碰男人色| 日韩中文字幕| 天天干天天拍| 久久激情综合| 久久中国毛毛片爱久久| 色色色9| 久狠日av| 狠狠舔| 91猫咪国产在线播放| 9l视频自拍9l九色成人| 婷婷六月伊人| 色五月综合网| 极品嫩草| 大香蕉综合在线| 欧美色色色色色| 99热这里只有精品10| 在线视频激情网站| 久久久99精品免费观看| 亚洲成人高清在线| 精品一区二区三区木瓜| www,久久久| 人人综合色| 九九性视频| 1024操逼视频| 国产精品久久久久久五月天加勒比| 久久激情五月天| 九九精品9| 天天日天天干天天操| 天天摸天天做天天爱天天爽| 婷婷五月 丁香六月| 色吊丝永久访问网址| 91中文狠狠综合| 99色网站| 99热网址| 久久五月综合| 日 日干 日日做| 91一起操| 金品在线视频99| 久久您您综合网| 久久这里有精品| 激情久久丁香| 99热99色| 亚洲五月婷天天操| 亭亭五月丁香综合欧美| 丁香五月婷婷欧美激情-中文天堂最新版在线观看 | 国产精产国品一二三在观看| 9|无码久久久久久| 五月婷婷丁香婷婷| 婷婷射图五月天| 性 色 婷婷| 精品久久99| 大香蕉久热| www.99免费视频| 9 7总站超级碰免费视频| 少妇性按摩无码中文A片| 五月丁香综合啪啪| 狠狠色97| 丁香五月色| 十月丁香九月婷婷综合| 26uuu欧美亚洲日韩| 色八月婷婷| 五月丁香婷婷色色| www99在线观看视频| 国产精品视频网| 欧美精品狠狠色丁香婷婷| 精品国产AV色一区二区深夜久久| 婷婷五月激情综合| 中文av网| 99久视频| 开心五月网| 91久热| 久久久久久久97| 久久天堂网| 激情av在线| 美国十月色婷婷在线观看| 六月丁香五月天| www色婷婷com| 五月五婷婷| 亚洲综合激情五月| 99视频在线精品免费观看2| 五月天社区狠狠| 欧美成人五月天| 五月婷婷二月丁香| 综合九九| 直接看的av| 久久久人妻| 97婷婷丁香| www.五月婷婷久久.com| www.91色| 激情六月婷婷| 九九成人视频| 激情五月婷| XX色综合| 国av网| 日本三级片片| 亚洲成人网站在线播放| 五月色婷婷中文字幕| 91久久久久久久| 亚洲婷婷丁香五月在线| 欧美婷婷五月无砖| 99热精品综合| 婷婷激情五月色综合| 久久这里只有精品热在99| 9l视频自拍9l视频自拍九色学生| 色色色婷婷五月| 99这里只有精品视频| 久色网| 亚洲成人在线观看av| 婷婷丁香精品视频在线观看| 九九re视频在线视频| 91丁香五月| 九月色婷婷| 五月婷婷和六月| 丁香婷婷五月基地| 波多野结衣AV无码Porn| 91操操| 精品影院| 丁香六月激情国产| 五月激情网站| 五月婷六月综合在线观看| www.五月婷婷久久.com| 精品久久久人妻| 激情久久综合| 亚洲无AV在线中文字幕| 五六月婷婷久久| 香蕉久久六月| 亚洲俩性性爱图片久久第六页| 这里只有精品在线免费视频| 免费看欧美成人A片无码| 泰州成人视频| 九月丁香八月婷婷加勒比| 99久久新视频| 久久视频66| 色婷亚洲| 国产91视频| 欧美性生交XXXXX无码小说| 天堂网色婷婷| 色五月丁香六月资源站| 五月丁香黄色| 亚洲成人AV在线观看| 久久er99热精品一区二区| 丁香五月婷婷亚洲激情四射| 色五月综合激情| 婷婷丁香五月,狠狠综合| 玖玖99免费视频| 色五月激情五月| 老妇操B| tingting五月天亚洲| 99亚州综合精品成人网| 日本欧美成人片AAAA| 91主播在线| 九月婷婷| 这里只有精品视频99| 欧美人妻一区二区| 欲色人妻| 欧洲永久精品| 五月天综合婷婷| 天天综合精品| 99久久亚洲国产| 婷婷五月天xxx| 五月丁香亭亭| 亚洲成人影视在线| 在线中文av| 无码网站视频| 91chinese在线| 99人妻碰碰碰久久久久视| 婷婷五日b| 久99久热| 天天久久九九| 安息电影在线观看完整版| 九九视频在线| 成人超碰网| 精品思思久久| 五月丁香激情综合网| 亚洲日韩乱码一区二区三区四区 | 99热在线中文字幕| 婷综合| 九九综合88| 丁香五月激情综合网激情五月| 婷婷五月激情图片| 99久久久久| 婷婷色情六月| 欧美大片免费播放器| 久久婷婷综合基地| 婷婷丁香五月高清| 狠狠CAO日日穞夜夜穞AV | 亚洲色优| 操老逼综合网| 激情美女五月天| 色欲天天综合| 五月天婷婷亚洲| 亚洲激情精品| 久久久国产精品黄毛片| 人妻AV在线| 大香蕉天堂| 中文字幕性爱视频| 五月婷婷丁香综合| 国产乱子轮XXX农村| 大功率国产在线| 99热新网址| 婷婷色片| 五月丁香性| 亚洲免费成人电影AV| 亚洲99视频| 在线观看免费视频| 天天开心婷婷丁香五月| 在线中文av| 神马欧美精| 这里只有精品视频免费在线观看| 97超美国视频在线观看| 欧美黑人巨大猛烈cuckold| 99re8在这里只有精品| 欧美精品99| 国产免费一区二区三州老师F1F1| 热996精品在线观看| 色爱终和网| 万月丁香狠狠爱| 日韩久久这里只有精品| 国产乱子轮XXX农村| 丁香五月视频在线观看| 久热99| 开心 五月 综合| 婷婷五月在线视频| 99热免费精品热久久66| 激情五月天婷婷五月天| 五月婷婷xxx| 色色色色热| 丁香五月天激情网址| 99热网站| 色五月天天在线观看资源站| 色色色网站| 久热这里只有精品在线观看 | 色五月五月婷婷| 国产综合81p| 久久视频婷婷| 国产avapp 网| 97久久人人| 成人av免费观看| 99久久网站| 婷婷五月天 偷拍| 美国少妇性做爰| 激情综合五月色丁香婷婷| 精品自拍99| 日本狠狠色| 色五月五月婷婷| 天天天天天日| 99久热这里有精品| caop视频| 美国色五月天婷婷资源站| 99日在线观看视频| 亚洲旡码| 99色在线视频观看| 中文中文在线| 亚洲亚洲亚洲AAAAAA| 九月丁香八月婷婷久久综合久97| AV成人在线播放| 日韩999| 久久婷婷五月天| 六月丁香五月激情网| 超级碰 久久9| 久久婷婷五月综合色丁香| 久久婷婷亚洲| 嫩草AV久久伊人妇女超级A| 色五月综合网| 五月丁香综合影院| 成人在线日韩| 婷婷五月天,影院| 久久99激情五月天| 丁香色成人| 天天开心婷婷丁香五月| 五月婷婷香蕉视频| 99热这里有精品| 激情av| 亚洲第一成人无码A片| 日本五月婷| 99自拍视频在线观看| 亚洲精品V天堂中文字幕| 久久免费婷婷视频| 秋霞A V毛片| 八戒青柠影视剧在线观看| 五月激情久久综合网| 丁香五月中文字幕| 国产成人AV| 女人被男人吃奶到高潮| 婷婷五月天天天日日夜夜| 99热这里只有精品69| 一本色道久久综合狠狠躁小说| 97在线精品| 亚洲激情视频网| 亚洲AV第二区国产精品| 久久97| 五月丁香六月婷婷激情视频在线观看免费 | 五月天俺去也| www久| 超碰成人影视| 天天干狠狠| 直接看的AV网站| 亚洲综人色综网| se婷97| 五月综合激情| 天天综合色丁香|