2012-11-21 60 views
0

我正在使用libusb與筆式驅動器進行交互。我們要使用的功能 INT libusb_bulk_transfer(結構libusb_device_handle * dev_handle,無符號的字符終端, 無符號字符*數據,詮釋長度,INT *轉移,無符號整型超時)
但在這裏我們僅指定終點 所以我的問題是否它實際上可以將寫入文件(文本或圖像)讀取到筆式驅動器。或者僅僅是爲了理解? 請幫忙! 代碼::筆式驅動器中的libusb批量傳輸

r = libusb_bulk_transfer(dev_handle, (2 | LIBUSB_ENDPOINT_OUT), data, 4, &actual, 0); 
//my device's out endpoint was 2, found with trial- the device had 2 endpoints: 2 and 129 
    if(r == 0 && actual == 4) //we wrote the 4 bytes successfully 
     cout<<"Writing Successful!"<<endl; 
    else 
     cout<<"Write Error"<<endl; 

回答

2

的libusb工作在比文件系統中的較低水平。您正在從設備讀取或寫入原始數據塊,而不是處理文件級別的事情。如果你格式化了設備,保存了一些文件,然後使用你的程序從接近開始的地方開始讀取大量數據,你最終可能會看到文件名,然後是文件中的數據,還有很多其他的「亂碼」 「看東西。

如果您想以這種方式讀取和寫入文件,您將不得不編寫能夠讀取其他數據的代碼來確定設備上的文件位置,如何創建新文件等。

如果你只是在玩耍,你可以從閃存驅動器的任意位置開始,寫一個完整的文件,然後再讀回來。但是這隻對你的程序是可以理解的,把你的閃存驅動器放到你的臺式電腦中是不會知道在哪裏尋找它的,因爲你錯過了文件系統部分,它告訴它你的文件在哪裏。

+0

我感謝您的回答。但是,你提到「從接近開始就開始」,「從任意點開始」。怎麼做?因爲在代碼中,我只提到了終點。我今天寫了一些數據給筆式驅動器。當我試圖閱讀它時,它卡住了。我正在爲一個項目做這件事,我需要向我的老師展示數據已經去了哪裏?我只是開始這個​​,所以我很抱歉,如果我說的沒有任何意義。 –

+1

在實際調用libusb_bulk_transfer()之前,您需要告訴設備您想要讀取/寫入的內容。您首先發送一條命令,告訴您將要執行讀取或寫入操作,然後等待回覆。 libusb有一些例子說明了這一點。您也可以查看USB海量存儲規範,瞭解如何在較低級別發送/接收命令:http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf – whamma