首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:失速错误

:失速错误
EN

Stack Overflow用户
提问于 2015-09-14 20:52:50
回答 1查看 879关注 0票数 1

所以我一直在和PS2游戏的控制器玩,巴斯。我已经成功地使用libusb投票和阅读按钮,一切都是愉快和明亮的。

问题是,我很想用内置的灯来向使用灯的人发出信号(特别是向他们展示谁先发出嗡嗡声)。我知道这里有灯,我知道PS2可以随意地打开和关闭它们,我也知道有人用蟒蛇来管理它。因此,我开始用Ruby中的libusb实现他们的代码。

我复制了他们正在打的SET_CONFIGURATION电话,但我一直收到这个错误:

代码语言:javascript
复制
/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写出了上面论坛中的特定行,并得到了类似于相同错误的内容:

代码语言:javascript
复制
usb.core.USBError: [Errno 32] Pipe error

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

下面是我的复制脚本(依赖于libusb ):

代码语言:javascript
复制
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

这是输出:

代码语言:javascript
复制
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消息,仅此而已)
  • 使用4.htm中定义的不同类型的消息

如果能提供任何帮助,我将不胜感激。这真的应该是可能的,我知道已经做到了。

EN

回答 1

Stack Overflow用户

发布于 2015-09-15 17:27:51

Libusb提供了两个名为libusb_set_configurationlibusb_get_configuration的函数。您应该尝试使用这些,而不是滚动您自己的控制传输来做同样的事情。在此记录如下:

dev.html

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

另外,设置配置对于USB设备来说也是一件不寻常的事情.您应该确保操作系统上的驱动程序没有将设备放到正确的配置中。也许你不需要设置配置。

此外,如果此控制器是HID,则希达皮库可能比libusb更适合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32573723

复制
相关文章

相似问题

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