使用libusb库笔记
2016-07-08 15:16
330 查看
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方法.
该方法可以临时解决问题,不确定会不会产生其他问题.
总结
device or resource busy 或者 entity not found 可能需要参考解决方法1上一条确认没问题,即使调用libusb_detach_device_driver 也没解决,可以试试解决方法3
同步操作,timeout问题试试解决方法2
相关文章推荐
- Mysql 基础
- [前端]Emmet 基本语法快查
- Android使用 format,将数字变为两位数
- idea配置javaweb
- [译] 玩转ptrace (一) 拦截系统调用
- IIC_Recv如何在IIC静默模式下读取IIC总线数据
- [前端]Emmet 基本语法快查
- Swift -> RunTime(动态性) 问题 浅析
- 在linux下安装flash player插件
- jsp页面动态包含和静态包含
- SQL Compare数据库比较工具 完全破解+使用教程
- AndroidVolley
- Web开发
- oracle分析函数:四、listagg和wmsys.wm_concat
- web安全——目录
- javascript方法扩展
- cannot find -luuid
- android之自定义View和ViewGroup(一)(此篇不讲述代码,只讲述原理和结构,带你走进自定义的世界)
- flume学习(四):Flume Interceptors的使用
- 2016.7.8初中部模拟赛总结