Ruby libusb:失速错误

时间:2015-09-14 20:52:51

标签: ruby usb libusb

所以我一直在玩PS2游戏的控制器,Buzz。我已成功使用libusb来轮询和阅读按钮,而且一切都很快乐。

麻烦的是,我喜欢使用内置灯来指示正在使用它们的人(特别是向他们展示谁先嗡嗡作响)。我知道有灯,我知道PS2可以随意打开和关闭它,我知道someone has managed it with python。所以我开始在Ruby中用libusb实现他们的代码。

我已经复制了他们正在制作的SET_CONFIGURATION电话,但我一直收到此错误:

/home/ajfaraday/.rvm/gems/ruby-2.2.1/gems/libusb-0.5.0/lib/libusb/dev_handle.rb:539:in `submit_transfer': 
error TRANSFER_STALL (LIBUSB::ERROR_PIPE)

我在网上找不到任何关于这个错误的内容,除了它是一个USB管道错误,由libusb转换为TRANSFER_STALL。

我也在python中写了这篇文章,上面的论坛中有特定的行,我得到的内容看起来像是同样的错误:

usb.core.USBError: [Errno 32] Pipe error

所以我不知道自己做错了什么。我已成功进行相反的调用(GET_CONFIGURATION)以成功响应(\x00)。

这是我的复制脚本(取决于libusb gem):

require 'libusb'

usb_context = LIBUSB::Context.new
device = usb_context.devices(
  idVendor: 0x054c, idProduct: 0x0002
).first
handle = device.open

puts 'get configuration:'
x = handle.control_transfer(
  :bmRequestType => "10000000".to_i(2),
  :bRequest => 8,
  :wValue => 0,
  :wIndex => 0,
  :dataIn => 1
)  
puts x.inspect

puts 'set configuration:'
x = handle.control_transfer(
  :bmRequestType => "00000000".to_i(2),
  :bRequest => 9,
  :wValue => 0,
  :wIndex => 0,
  :dataOut => "\x00\xFF\xFF\xFF\xFF"
)
puts x.inspect

这是它的输出:

get configuration:
"\x00"
set configuration:
/home/ajfaraday/.rvm/gems/ruby-2.2.1/gems/libusb-0.5.0/lib/libusb/dev_handle.rb:539:in `submit_transfer': error TRANSFER_STALL (LIBUSB::ERROR_PIPE)
    from /home/ajfaraday/.rvm/gems/ruby-2.2.1/gems/libusb-0.5.0/lib/libusb/dev_handle.rb:515:in `control_transfer'
    from sketches/raw_script.rb:22:in `<main>'

看起来管道错误意味着我发送的设置或数据有问题,但我无法找到它的位置。

我试过了:

  • 也将不同数量的数据放入dataOut属性中。
  • 首先分离内核驱动程序,同时重新打开句柄
  • 将dataOut属性表示为数组
  • 在另一台(linux)机器上运行它
  • 检查libusb源代码(它正在转换USB消息,仅此而已)
  • 使用http://www.usbmadesimple.co.uk/ums_4.htm
  • 中定义的不同类型的消息

我非常感谢任何帮助。这真的应该是可能的,我知道它已经完成了。

1 个答案:

答案 0 :(得分:0)

Libusb提供了两个名为caloriesLabellibusb_set_configuration的函数。您应该尝试使用这些而不是滚动您自己的控制转移来做同样的事情。它们记录在这里:

http://libusb.sourceforge.net/api-1.0/group__dev.html

您可以查看您正在使用的Ruby libusb绑定的源代码或文档,以了解如何从Ruby调用它们。

此外,设置配置对于USB设备来说是不寻常的事情。您应确保操作系统上的驱动程序尚未将设备置于正确的配置中。也许您不需要设置配置。

此外,如果此控制器是HID,hidapi库可能比libusb更合适。