【问题标题】:libusb bulk transfer in pen drive笔式驱动器中的libusb批量传输
【发布时间】:2012-11-10 02:32:50
【问题描述】:

我正在使用 libusb 与笔式驱动器进行交互。我们必须使用函数 int libusb_bulk_transfer(结构 libusb_device_handle * dev_handle,无符号字符端点, 无符号字符 * 数据,整数长度,整数 * 已传输,无符号整数超时)
但是这里我们只指定终点 所以我的问题是,实际上是否可以将文件(文本或图像)读取到笔式驱动器。还是只是为了理解? 请帮忙! 代码::

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;

【问题讨论】:

    标签: linux linux-device-driver libusb usb


    【解决方案1】:

    Libusb 在比文件系统更低的层次上工作。您正在向/从设备读取或写入原始数据块,而不是在文件级别处理事情。如果您格式化设备,保存一些文件,然后使用您的程序从一开始就读取大量数据,您可能最终会看到文件名,然后是文件中的数据,以及许多其他“乱码" 看东西。

    如果您想以这种方式读取和写入文件,您将不得不编写可以读取其他数据的代码,以确定您的文件在设备上的位置、如何创建新文件等。

    如果您只是在玩玩,您可以从闪存驱动器上的任意点开始,将整个文件写入其中,然后将其读回。但这只有您的程序可以理解,将闪存驱动器放在台式 PC 中不会知道在哪里可以找到它,因为您缺少告诉它您的文件在哪里的文件系统部分。

    【讨论】:

    • 感谢您的回答。但是,您提到了“从近处开始”、“从任意点开始”。怎么做?因为在代码中,我只提到了终点。我今天写了一些数据到笔式驱动器。当我试图阅读它时,它卡住了。我正在为一个项目做这个,我需要向我的老师展示数据到哪里去了?我才刚刚开始,所以如果我说的没有任何意义,我很抱歉。
    • 在实际调用 libusb_bulk_transfer() 之前,你需要告诉设备你想读/写什么。您首先发送一个命令,告诉它您将要进行读取或写入,然后等待回复。 libusb 附带的一些示例可以证明这一点。您可能还想查看 USB 大容量存储规范,了解如何在低级别发送/接收命令:usb.org/developers/devclass_docs/usbmassbulk_10.pdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多