首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libusb: libusb_control_transfer冻结程序

libusb: libusb_control_transfer冻结程序
EN

Stack Overflow用户
提问于 2013-10-23 10:51:24
回答 1查看 3.8K关注 0票数 1

我正在尝试获得我的usb设备的固件版本。根据规范:

当使用USB接口时,命令作为控制读取请求发送,其中请求字节是命令,索引和值是发送到设备的附加参数。如果PC正在请求数据,它将在端点0 in缓冲区中返回。

代码语言:javascript
复制
Command               Description              Device Response / Notes 
  a             Request firmware version     The device returns 4 bytes containing the version number in ASCII.

现在,为了请求固件版本,我执行以下操作:

代码语言:javascript
复制
char buffer[4];
unsigned char a = 'a';
r = libusb_control_transfer(dev_handle,0,a,0,0,buffer,4,0);

但是程序停止了,我无法得到任何结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 15:09:21

我认为有两件事可能是错误的:

字符值'a‘等于0x61,我认为对于您的bRequest参数,需要的是0x0A。

另外,由于您正在从设备中获取数据,所以您可能希望正确地设置bmRequestType。0x80是表示从设备到主机的数据的掩码,现在您正在指定要将数据提供给设备。

在这些情况下,USB分析器非常有用,因此您可以查看总线,以准确了解发送到设备的安装包包含什么以及它对主机的响应。

以下是修改后的代码:

代码语言:javascript
复制
char buffer[4];
r = libusb_control_transfer(dev_handle,0x80,0x0a,0,0,buffer,4,0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19539649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档