libusb:libusb_control_transfer冻结程序

时间:2013-10-23 10:51:24

标签: c usb driver libusb

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

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

Command               Description              Device Response / Notes 
  a             Request firmware version     The device returns 4 bytes containing the version number in ASCII.

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

char buffer[4];
unsigned char a = 'a';
r = libusb_control_transfer(dev_handle,0,a,0,0,buffer,4,0);

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

1 个答案:

答案 0 :(得分:1)

我认为有两件事可能会出错:

字符值'a'等于0x61,我想你想要的是你的bRequest参数的0x0A。

此外,由于您从设备获取数据,因此您可能需要正确设置bmRequestType。 0x80是表示从设备到主机的数据的掩码,现在您指定要向设备提供数据。

在这些情况下,USB分析仪非常有用,因此您可以查看总线,以了解发送到设备的设置数据包的确切内容以及它对主机的响应。

以下是修改后的代码:

char buffer[4];
r = libusb_control_transfer(dev_handle,0x80,0x0a,0,0,buffer,4,0);