所以我一直在和PS2游戏的控制器玩,巴斯。我已经成功地使用libusb投票和阅读按钮,一切都是愉快和明亮的。
问题是,我很想用内置的灯来向使用灯的人发出信号(特别是向他们展示谁先发出嗡嗡声)。我知道这里有灯,我知道PS2可以随意地打开和关闭它们,我也知道有人用蟒蛇来管理它。因此,我开始用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)我在网上找不到关于这个错误是什么的任何材料,只是它是一个由libusb翻译到TRANSFER_STALL的USB管道错误。
我还用python写出了上面论坛中的特定行,并得到了类似于相同错误的内容:
usb.core.USBError: [Errno 32] Pipe error所以我不知道我做错了什么。我已经成功地对成功的响应(\x00)进行了相反的调用(\x00)。
下面是我的复制脚本(依赖于libusb ):
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>'看起来管道错误意味着我发送的设置或数据有问题,但是我在任何地方都找不到它是什么。
我试过:
如果能提供任何帮助,我将不胜感激。这真的应该是可能的,我知道已经做到了。
发布于 2015-09-15 17:27:51
Libusb提供了两个名为libusb_set_configuration和libusb_get_configuration的函数。您应该尝试使用这些,而不是滚动您自己的控制传输来做同样的事情。在此记录如下:
dev.html
您可以检查您正在使用的Ruby绑定的源代码或文档,以确定如何从Ruby调用它们。
另外,设置配置对于USB设备来说也是一件不寻常的事情.您应该确保操作系统上的驱动程序没有将设备放到正确的配置中。也许你不需要设置配置。
此外,如果此控制器是HID,则希达皮库可能比libusb更适合。
https://stackoverflow.com/questions/32573723
复制相似问题