【问题标题】:Improper output using libusb使用 libusb 输出不正确
【发布时间】:2015-03-16 17:25:40
【问题描述】:

我用 libusb 做了一个程序。我怀疑输出是否正确,因为所有条目都显示相同的供应商和产品 ID。以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>

void print_devices(libusb_device *dev)
{
    struct libusb_device_descriptor desc;
    struct libusb_config_descriptor *config;

    const struct libusb_interface *inter;
    const struct libusb_interface_descriptor *interdesc;
    const struct libusb_endpoint_descriptor *endpointdesc;

    int ret;
    int i,j,k;

    if(ret<0)
    {   
        fprintf(stderr,"error in getting device descriptor\n");
        return;
    }

    printf("Number of possible configs is %d\n",desc.bNumConfigurations);
    printf("Vendor: %d\n",desc.idVendor);
    printf("Product ID: %d\n",desc.idProduct);

    libusb_get_config_descriptor(dev, 0, &config);

    printf("Interface: %d\n", config->bNumInterfaces);
    printf("\n\n"); 
}


int main(int argc,char *argv[])
{
    libusb_device **devs;
    libusb_context *context = NULL;

    size_t list;
    size_t i;

    int ret,temp;

    ret = libusb_init(&context);

    if(ret < 0)
    {
        perror("libusb_init");
        exit(1);
    }

    list = libusb_get_device_list(context, &devs);

    if(list < 0)
    {
        fprintf(stderr, "Error in getting device list\n");
        libusb_free_device_list(devs, 1);
        libusb_exit(context);
        exit(1);
    }

    temp=(int)list;
    printf("\n%d devices found\n\n",temp);

    for(i=0;i<temp;i++)
    {
        //print devices
        print_devices(devs[i]);
    }

    libusb_free_device_list(devs, 1);
    libusb_exit(context);

    return 0;
}

这是我的输出:

anubhav@anubhav-Inspiron-3421:~/Desktop/usb$ ./usbtest

9 devices found

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 2

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 4

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

Number of possible configs is 103
Vendor: 0
Product ID: 0
Interface: 1

这是 lsusb 显示的内容:

anubhav@anubhav-Inspiron-3421:~/Desktop/usb$ lsusb
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 064e:812c Suyin Corp. 
Bus 001 Device 007: ID 0a5c:21d7 Broadcom Corp. BCM43142 Bluetooth 4.0
Bus 001 Device 003: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

需要帮助来定位错误(如果有)。

【问题讨论】:

    标签: c linux libusb


    【解决方案1】:

    一定是某处不小心跳过了一行...我建议您添加以下行,否则ret会被统一化:

    int ret;
    int i,j,k;
    
    ret = libusb_get_device_descriptor(dev, &desc);//this line !
    if(ret<0)
    {   
        fprintf(stderr,"error in getting device descriptor\n");
        return;
    }
    

    要将输出与lsusb 之一进行比较,请将%x 更改为使用十六进制格式打印idVendor 和idProduct。

    printf("Vendor: %x\n",desc.idVendor);
    printf("Product ID: %x\n",desc.idProduct);
    

    以下问题libusb semi-working, but libusb_device_descriptor undeclared? 有助于找到缺失的行。这个帮助我链接了libusbLibusb undefined reference to,它建议由gcc main.c -o main -lusb-1.0编译。

    【讨论】:

    • 是的,你提到的那一行应该被添加。我得到了预期的输出。谢谢。
    • 是否有任何关于 USB 设备的信息可以通过 libusb 但不能通过 lsusb 命令获得?
    • lsusb似乎是基于libusb...如果你输入lsusb -v,你会得到很多关于usb设备的数据。在程序中使用它的方式比调用system 和解析文件更简洁、更优雅……我无法告诉你libusb 是否能够提供比lsusb 更多的数据。
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2021-03-05
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多