gpt4 book ai didi

c++ - 如何使用 libusb 和 libusb_get_device_descriptor()?

转载 作者:IT老高 更新时间:2023-10-28 21:38:30 29 4
gpt4 key购买 nike

我正在学习第一次在 Ubuntu 12.10 上使用 libusb v1.0.0。这是我用来尝试了解如何使用此 API 的一些小测试代码:

#include <libusb-1.0/libusb.h>
...
libusb_device **list;
libusb_get_device_list(ctx, &list); // Returns 11 USB devices which is correct.
for (size_t idx = 0; list[idx] != NULL; idx ++)
{
libusb_device *dev = list[idx];
libusb_device_descriptor desc = {0};
int rc = libusb_get_device_descriptor(dev, &desc);

此时,rc == 0,意味着它应该已经成功完成了。来源:documentation for *libusb_get_device_descriptor()* .

但结构 desc 始终为空。没有一个字段被设置。如果我将上面的最后两行更改为:

    libusb_device_descriptor desc = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rc = libusb_get_device_descriptor(dev, &desc);

...然后当 libusb_get_device_descriptor() 返回时,我看到 desc 保持不变,确认我没有从这个 API 中得到我期望的结果。

我还尝试以 root 身份运行 a.out,以防万一这需要提升权限。在 libusb_get_device_descriptor 上进行 Google 搜索并没有让我到任何地方。

我运行的相关命令来尝试这段代码:

sudo apt-get install libusb-1.0.0-dev
g++ -ggdb test.cpp -lusb-1.0
./a.out

啊!疯狂的用户错误! sharth 的代码帮我弄清楚了。这是我实际使用的代码——看看你是否能发现错误:

std::cout << "rc == " << libusb_get_device_descriptor(dev, &desc) << std::endl
<< "vendor == " << desc.idVendor << std::endl;

我猜编译器评估这个的方式,在实际调用 libusb_get_device_descriptor() 之前评估 desc.idVendor 是免费的。我的错。

最佳答案

您没有包含完整的、可编译的测试用例。所以我建了一个。这适用于我在 CentOS 6 x64 上。我也以普通用户帐户的身份运行它。

来源

#include <cassert>
#include <cstdio>
#include <libusb-1.0/libusb.h>

int main() {
libusb_context *context = NULL;
libusb_device **list = NULL;
int rc = 0;
ssize_t count = 0;

rc = libusb_init(&context);
assert(rc == 0);

count = libusb_get_device_list(context, &list);
assert(count > 0);

for (size_t idx = 0; idx < count; ++idx) {
libusb_device *device = list[idx];
libusb_device_descriptor desc = {0};

rc = libusb_get_device_descriptor(device, &desc);
assert(rc == 0);

printf("Vendor:Device = %04x:%04x\n", desc.idVendor, desc.idProduct);
}

libusb_free_device_list(list, count);
libusb_exit(context);
}

输出

Vendor:Device = 1d6b:0002
Vendor:Device = 1d6b:0002
Vendor:Device = 8087:0020
Vendor:Device = 8087:0020
Vendor:Device = 0424:2514
Vendor:Device = 10c4:ea60
Vendor:Device = 051d:0002
Vendor:Device = 0624:0248

关于c++ - 如何使用 libusb 和 libusb_get_device_descriptor()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14722083/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com