驱动开发之libusb函数
摘自:https://www.cnblogs.com/bo1990/p/11424779.html
一、libusb常用数据结构
- libusb_device *list:设备列表
- libusb_device_handle *handle:设备句柄
- struct libusb_device_descriptor desc:设备描述符
- struct libusb_config_descriptor conf:配置描述符
二、libusb常用API函数
1 会话的开启和结束
- int libusb_init(libusb_context **ctx);
- void libusb_exit(libusb_context *ctx);
2 设备列表的获取和释放
- ssize_t libusb_get_device_list(libusb_context *ctx, libusb_device ***list);
-
void libusb_free_device_list(libusb_device **list, int unref_devices);
3 设备的打开和关闭
- int libusb_open(libusb_device *dev, libusb_device_handle **dev_handle);
-
libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context *ctx, uint16_t vendor_id, uint16_t product_id);
-
void libusb_close(libusb_device_handle *dev_handle);
4 描述符的获取和释放
- int libusb_get_device_descriptor(libusb_device *dev, struct libusb_device_descriptor *desc);
-
int libusb_get_config_descriptor(libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config);
-
void libusb_free_config_descriptor(struct libusb_config_descriptor *config);
5 接口
- int libusb_claim_interface(libusb_device_handle *dev_handle, int interface_number);
- int libusb_release_interface(libusb_device_handle *dev_handle, int interface_number);
6 传输方式:Control、Interrupt、Bulk
- int libusb_control_transfer(libusb_device_handle *dev_handle, uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout);
-
int libusb_interrupt_transfer(libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, int *actual_length, unsigned int timeout);
-
int libusb_bulk_transfer(libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, int *actual_length, unsigned int timeout);
7 内核设备
- int libusb_kernel_driver_active(libusb_device_handle *dev_handle, int interface_number);
-
int libusb_attach_kernel_driver(libusb_device_handle *dev_handle, int interface_number);
-
int libusb_detach_kernel_driver(libusb_device_handle *dev_handle, int interface_number);
-
int libusb_set_auto_detach_kernel_driver(libusb_device_handle *dev_handle, int enable);
8 热插拔
- int libusb_hotplug_register_callback(libusb_context *ctx, libusb_hotplug_event events, libusb_hotplug_flag flags, int vendor_id, int product_id, int dev_class, libusb_hotplug_callback_fn cb_fn, void *user_data, libusb_hotplug_callback_handle *callback_handle);
-
void libusb_hotplug_deregister_callback(libusb_context *ctx, libusb_hotplug_callback_handle callback_handle);
9 其他
- uint8_t libusb_get_bus_number(libusb_device *dev); //获取USB设备总线号
-
uint8_t libusb_get_port_number(libusb_device *dev);
-
uint8_t libusb_get_device_address(libusb_device *dev); //获取USB设备端口号
-
int libusb_get_device_speed(libusb_device *dev);
-
int libusb_get_max_packet_size(libusb_device *dev, unsigned char endpoint);
-
int libusb_reset_device(libusb_device_handle *dev_handle);
- int libusb_has_capability(uint32_t capability);
10 未完待续~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)