PS3控制器驱动程序 - > uinput->蟒蛇?不知何故?

时间:2012-05-27 03:37:04

标签: python ps3

我正在尝试从Ubuntu上的python中读取PS3控制器而我没有太多运气。我开始使用Willow Garage的ps3joy驱动程序(http://www.ros.org/wiki/ps3joy),该驱动程序据称将PS3控制器的所有重要部分发布到我从未听说过的称为“uinput”的部分。显然它是一个Linux功能,允许用户空间驱动程序提供系统事件。 ...为什么WG驱动程序需要root访问权限,因为它应该是一个用户空间驱动程序超出我的范围,但这不是我的问题。

无论如何,我试图让它工作的当前状态是我让驱动程序工作,我已经验证它响应按钮按下控制器,但我不知道如何拉任何这些数据都可以使用它。

我的第一个猜测是使用pygame(希望)从/ dev / uinput读取(我很确定驱动程序发送数据的位置):

from pygame import joystick
if not joystick.get_init():
  joystick.init()
js = joystick.Joystick(0)  # there is only one joystick... even if the driver isn't running(!)
js.init()
print js.get_numbuttons()  # perhaps coincidentally correctly prints 17 which is the number of buttons on a PS3 controller
for i in range(js.get_numaxes()):
  print js.get_axis(i)   # always prints 0, no matter what I'm doing with the controller

但它不起作用。问题中最有说服力的部分是,如果我根本没有运行WG驱动程序,它会做同样的事情。

我确信这很容易,我只是没有阅读正确的信息,但谷歌搜索并没有帮助我找到正确的信息,而是我已经厌倦和绝望。

5 个答案:

答案 0 :(得分:3)

您不需要驱动程序。假设控制器将自身公开为HID,您可以使用event subsystem直接从设备读取控制器事件。

答案 1 :(得分:1)

尝试

pygame.event.pump()

在你阅读操纵杆之前。我需要它来使用360控制器

答案 2 :(得分:1)

我知道现在为时已晚,但如果有人需要代码或者正在努力使用它,你可以使用我的代码。我在python中编写了一个脚本,它从USB获取ps3数据并通过PC的蓝牙将其发送到特定的MAC地址(您只能将ps3controller.py用于数据)。 这是我的四轴飞行器项目。

https://github.com/urbanzrim/ps3controller

答案 3 :(得分:0)

立即解决类似问题:在GNU / Linux中使用python与PS3蓝牙遥控器通信/接收数据。

我觉得有用:

  1. 调试PS3控制器http://www.pabr.org/sixlinux/sixlinux.en.html
  2. 看起来像PS3 Remote http://kitlaan.twinaxis.com/projects/bluez-ps3remote/的工作项目(它需要修补bluez 1st)还没有测试过。
  3. pybluez BT包装http://code.google.com/p/pybluez/(现在检查)

答案 4 :(得分:0)

我相信你至少需要以下内容:

from pygame import joystick, event, display
display.init()
joystick.init()
js=joystick.Joystick(0)
js.init()
...
for foo in bar:
    event.pump()
    ...

if foo:
    event.pump()
    ...

while bar:
    event.pump()
    ...

我相信display.init()必须存在,因为事件处理需要它......

此外,您可以使用

跳过很多内容
import pygame
pygame.init()
js=pygame.joystick.Joystick(0)
js.init()
...
for foo in bar:
    pygame.event.pump()
    ...
if foo:
    pygame.event.pump()
    ...

while bar:
    pygame.event.pump()
    ....

我可能错了,但我认为你的问题是: A)if / while / for子句中没有event.pump B)没有display.init()

来源: http://webcache.googleusercontent.com/search?q=cache:I56GyE7I4CkJ:iamtherockstar.com/archive/making-hid-devices-easier-using-pygame-joysticks/+&cd=1&hl=en&ct=clnk&gl=ushttp://www.pygame.org/docs/ref/event.html

“输入队列严重依赖于pygame显示模块。”