【发布时间】:2017-02-25 18:54:27
【问题描述】:
我正在使用无人机进行 Qt 项目。我和我的朋友们正在使用 Xbox 360 控制器控制无人机。
为了检测按钮和轴,我们使用了 gamepadmanager 模块中的 QGamepadManager 类。它运作良好!但是我们对这个简化的代码有一个问题:
while (true)
{
if (this->gamepad->isConnected()) {
cout << "gamepad connected" << endl;
} else {
cout << "gamepad disocnnected" << endl;
}
}
bool GamepadMonitor::isConnected()
{
return QGamepadManager::instance()->connectedGamepads().size() == 1;
}
在 Windows 上,isConnected() 方法运行良好,但在 Ubuntu 上不行。当我们在连接游戏手柄的情况下启动应用程序时,按钮也会被识别和轴。但未检测到断开连接。当我们在没有游戏手柄的情况下启动应用程序时,无法识别连接。
我已经安装了joystick 包。我在 Ubuntu 16.04 上。我正在使用 Qt 5.8 进行开发。
你有什么想法吗?
编辑:我添加了 dmesg 输出
当我连接游戏手柄时:
[ 330.430405] usb 3-1: new full-speed USB device number 4 using xhci_hcd
[ 330.575708] usb 3-1: New USB device found, idVendor=045e, idProduct=028e
[ 330.575714] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 330.575718] usb 3-1: Product: Controller
[ 330.575721] usb 3-1: Manufacturer: ©Microsoft Corporation
[ 330.575723] usb 3-1: SerialNumber: 1E69441
[ 331.614141] input: Microsoft X-Box 360 pad as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0/input/input23
[ 331.622581] usbcore: registered new interface driver xpad
当我断开它时:
[ 392.733786] usb 3-1: USB disconnect, device number 4
[ 392.733995] xpad 3-1:1.0: xpad_try_sending_next_out_packet - usb_submit_urb failed with result -19
【问题讨论】: