使用libusb库笔记

libusb简介

libusb是一套可以比较简单的访问usb设备的api. libusb在不同的语言和不同的系统平台上都有实现,关于libusb的其他优点,可以访问libusb官网(http://libusb.org). 几经折腾,终于可以在ubuntu上用libusb读写数据了. 记录一下容易忽略的地方.

常见返回错误码解决

1. configuration选择,interface认领和endpoint地址

需要先行了解usb设备的配置,接口和端点概念.启用的配置,认领的接口和端点地址存在包含关系.认领某接口需要确定当前选择的配置包含该接口,读写数据时,需要确定当前接口包含这些端点,同时端点类型和地址无误.

2. libusb_ -7 (Operation time out)

同步io操作比较简单,但可能会出现超时. 将超时设置为0,永不超时,可以解决返回超时错误.

3. libusb_claim_interface 函数总是返回 -6 (Resource busy).

解决这个问题,花费的时间最多.即使按照libusb的example 和stackoverflow上提到的,先调用libusb_detach_kernel_driver函数,也不能解决.
后来查看libusb.h文件,发现有libusb_reset_device函数,尝试在认领接口前,先调用该函数,发现认领接口不再返回错误码.
经测试,只要调用了libusb_reset_device函数,不需要再调用libusb_detach_kernel_driver方法.
该方法可以临时解决问题,不确定会不会产生其他问题.

总结

  1. device or resource busy 或者 entity not found 可能需要参考解决方法1
  2. 上一条确认没问题,即使调用libusb_detach_device_driver 也没解决,可以试试解决方法3
  3. 同步操作,timeout问题试试解决方法2

你可能感兴趣的:(linux,C/C++)