驱动开发之libusb函数

摘要:
1、 libusb-libusb_Device*列表的通用数据结构:设备列表libusb_Device_句柄*句柄:设备句柄structlibusb_ Device_描述符desc:设备描述符structlibus b_ config_描述符conf:配置描述符2.libusb通用API函数1.会话intlibusb_init(libusb_conte)的开始和结束

一、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 未完待续~

免责声明:文章转载自《驱动开发之libusb函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iotoposg 刚开始学的一些问题。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端框架Vue自学之webpack(四)

终极目标:掌握和使用Vue(全家桶:Core+Vue-router+Vuex) 本博客目的:记录Vue学习的进度和心得(webpack) 内容:学习和使用webpack。为学习Vue CLI做准备。 正文: webpack 一、webpack 1、认识webpack 本质上来说,webpack是一个现代的JavaScript应用的静态模块打包工具。模块和打...

树状数组与线段树(一)

树状数组: 一共需要三个函数: ①lowbit(int x) ②add(int x,int p) ③query(int x) 1.动态求连续区间和 给定n个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列[a,b]的连续和。 输入格式 第一行包含两个整数n和m,分别表示数的个数和操作次数。 第二行包含n个整数,表示完整数列。 接下来m行,...

linux命令之添加删除磁盘分区

之前已经写过df和fdisk的区别了,df可以显示当前已经挂载的磁盘分区,df -T可以额外显示文件系统类型 fdisk -l可以显示出所有挂载未挂载的分区,但不显示文件类型 在我的虚拟机上有一块分配了40G的硬盘但未使用,使用fdisk -l 对于40G的磁盘就是只显示了 Disk /dev/sdb 40G,并未有对应的Device, 接下来就是对其分区...

Linux下搭建iSCSI共享存储的方法 TGT 方式 CentOS6.9系统下

iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置...

初识shell编程

一、shell编程基础 什么是shell 命令解释器:你输入的命令,谁来给你运行、解释 Centos默认的Shell是bash [root@luffy-001 log]# echo $SHELL SHELL变量 /bin/bash [root@luffy-001 log]# cat /etc/shells 所有的命令解释器 /bin/sh /bi...

经典算法_数组

1 对一个一维数组进行按照元素的升序大小进行排序,冒泡排序法 2 随机生成一个有10个元素的一维数组,并找出极值 3 将一个一维数组中n个整数按相反顺序存放 4 用指针方法对10个整数按照从大到小顺序排序,冒泡排序法 5 用随机数生成一个数组,写一个函数查找最小的,并返回最小数的地址。在主函数中打印出来最小数 6 不改变原有的一维数组排序,使用指针数组,进...