lsusb一些知识

int libusb_get_device_descriptor(libusb_device *dev, struct libusb_device_descriptor *desc);

获取设备的设备描述符。

设备描述符、配置描述符、接口描述符、端点描述符:

// 设备描述符
struct libusb_device_descriptor {
    uint8_t   bLength;             // 本描述符的字节数,恒等于18。
    uint8_t   bDescriptorType;     // 本描述符类型,恒等于0x01。
    uint16_t  bcdUSB;              // USB规范版本号。
    uint8_t   bDeviceClass;        // USB标准化组织的类代码。
    uint8_t   bDeviceSubClass;     // USB标准化组织指定的子类代码,由 bDeviceClass 值限定。
    uint8_t   bDeviceProtocol;     // USB标准化组织指定的协议代码,由 bDeviceClass 和 bDeviceSubClass 值限定。
    uint8_t   bMaxPacketSize0;     // 端点0的最大数据包大小。
    uint16_t  idVendor;            // USB标准化组织指定的供应商ID。
    uint16_t  idProduct;           // USB标准化组织指定的产品ID。
    uint16_t  bcdDevice;           // 设备版本号。
    uint8_t   iManufacturer;       // 描述制造商的字符串描述符的索引。
    uint8_t   iProduct;            // 描述产品的字符串描述符的索引。
    uint8_t   iSerialNumber;       // 包含设备序列号的字符串描述符的索引。
    uint8_t   bNumConfigurations;  // 可能的配置数量。
};

// 配置描述符:
struct libusb_config_descriptor {
    uint8_t   bLength;             // 本描述符的字节数,恒等于9。
    uint8_t   bDescriptorType;     // 本描述符类型,恒等于0x02。
    uint16_t  wTotalLength;        // 本配置总大小。
    uint8_t   bNumInterfaces;      // 支持的接口数。
    uint8_t   bConfigurationValue; // 标识符值。
    uint8_t   iConfiguration;      // 描述此配置的字符串描述符的索引。
    uint8_t   bmAttributes;        // 配置特征。
    uint8_t   MaxPower;            // 最大电流。高速模式单位是2毫安,超高速模式单位是8毫安。
    
    const struct libusb_interface *interface;    // 支持的接口数组,数组的长度由 bNumInterfaces 字段确定。
    const unsigned char           *extra;        // 其他描述符。libusb将不认识的描述符储存在这里。
    int                            extra_length; // 其他描述符总长度。
};

// 接口:
struct libusb_interface {
    const struct libusb_interface_descriptor *altsetting;
    int num_altsetting;
};

// 接口描述符:
struct libusb_interface_descriptor {
    uint8_t  bLength;            // 本描述符的字节数,恒等于9。
    uint8_t  bDescriptorType;    // 本描述符类型,恒等于0x04。
    uint8_t  bInterfaceNumber;   // 此接口的编号。
    uint8_t  bAlternateSetting;  // 此接口备用设置值。
    uint8_t  bNumEndpoints;      // 此接口使用的端点数(不包括控制端点)。
    uint8_t  bInterfaceClass;    // 此接口的类代码
    uint8_t  bInterfaceSubClass; // 此接口的子类代码,由 bInterfaceClass 值限定。
    uint8_t  bInterfaceProtocol; // 此接口的协议代码,由 bInterfaceClass 和 bInterfaceSubClass 值限定。
    uint8_t  iInterface;         // 描述此接口的字符串描述符的索引。
    
    const struct libusb_endpoint_descriptor *endpoint;     // 端点描述符数组,长度由 bNumEndpoints 字段确定。
    const unsigned char                     *extra;        // 其他描述符。libusb将不认识的描述符储存在这里。
    int                                      extra_length; // 其他描述符总长度。
};

// 端点描述符:
struct libusb_endpoint_descriptor {
    uint8_t   bLength;           // 本描述符的字节数,恒等于7。
    uint8_t   bDescriptorType;   // 本描述符类型,恒等于0x05。
    uint8_t   bEndpointAddress;  // 端点地址。
    uint8_t   bmAttributes;      // 使用 bConfigurationValue 配置端点时应用于该端点的属性。
    uint16_t  wMaxPacketSize;    // 此端点能够发送/接收的最大数据包大小。
    uint8_t   bInterval;         // 数据传输的间隔。
    
    uint8_t              bRefresh;      // 仅适用于音频设备:提供同步反馈的速率。
    uint8_t              bSynchAddress; // 仅适用于音频设备:同步端点的地址。
    const unsigned char *extra;         // 其他描述符。libusb将不认识的描述符储存在这里。
    int                  extra_length;  // 其他描述符总长度。
};
int libusb_init(libusb_context **ctx);

该函数进行libusb的初始化,必须最先调用。
ctx通常设置NULL
0成功,非0 失败

ssize_t libusb_get_device_list(libusb_context *ctx, libusb_device ***list);

获取所有usb设备的列表,通过 ***list 返回这个列表。
使用完毕需要使用 libusb_free_device_list() 来释放列表。
返回值表示列表中的设备个数。该列表实际上要大一个元素,因为它以NULL结尾。
如果返回值小于0,那么返回值代表错误码列表中的某个错误。

int libusb_get_bus_number(libusb_device *dev)

获取关联的 USB 设备的总线号。

int libusb_get_device_address(libusb_device *dev);

获取关联的 USB 设备的地址。USB 设备地址是一个整数值,它是与 USB 设备关联的唯一标识符。它与总线号一起用于在 USB 系统中标识特定的 USB 设备。地址号从 1 到 127 的范围内。
函数的返回值是一个整数,表示与指定的 libusb_device 结构体关联的 USB 设备的地址。如果发生错误,则返回一个负数的错误代码。

int LIBUSB_CALL libusb_open(libusb_device *dev, libusb_device_handle **handle);

通过libusb_device的指针打开一个USB设备,并返回设备句柄libusb_device_handle的指针.
handle 用来返回设备句柄libusb_device_handle的指针.
0成功,非0 失败

int libusb_get_string_descriptor_ascii(
    libusb_device_handle *dev_handle,
    uint8_t desc_index,
    unsigned char *data,
    int length
);

用于从 USB 设备中检索一个 ASCII 字符串描述符。该函数获取一个表示 USB 设备的 libusb_device_handle 句柄,一个描述符索引以及用于存储描述符数据的缓冲区作为参数,并返回描述符的长度(以字节为单位)。
函数将指定索引处的字符串描述符从设备中读取,并将其转换为 ASCII 编码格式,然后将其存储在传递给函数的缓冲区中。如果字符串描述符的索引为零,函数将返回设备的默认语言标识符字符串描述符。
函数的返回值是一个整数,表示检索到的描述符数据的长度(以字节为单位),或者如果出现错误,则返回一个负数的错误代码。

void libusb_close(libusb_device_handle *dev_handle);

用于关闭一个打开的 USB 设备句柄。当使用 libusb_open 函数打开一个 USB 设备句柄后,使用 libusb_close 函数可以将该设备句柄关闭,并释放与该设备关联的资源。
该函数没有返回值,它执行成功时会关闭设备句柄,并释放与该设备关联的资源。需要注意的是,在调用该函数之前,必须确保没有任何活动的异步传输或请求与该设备句柄关联,否则该函数将无法成功关闭设备句柄。如果该设备句柄在调用该函数时处于活动状态,则可能会导致未定义的行为或崩溃。

void LIBUSB_CALL libusb_free_device_list(libusb_device **list,        int unref_devices);

释放以前使用的设备列表
unref_devices 如果该参数置1 列表中的每个设备的引用计数减1
无返回值

void  libusb_exit(libusb_context *ctx);

和libusb_init成对使用,释放相应的资源。
ctx通常设置NULL

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊的鱼(。・ω・。)ノ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值