使用xboxdrv 0.8.7进行USB读取失败

时间:2017-03-20 08:57:30

标签: c++ libusb xbox360

我在版本0.8.7中使用xboxdrv,在raspberrypi 3上使用XBox 360无线控制器(4.9.13-v7 +)。

它有时会工作一天,有时几分钟。但我总是得到:

  

[ERROR] USBController :: on_read_data():USB读取失败:32:   LIBUSB_TRANSFER_ERROR

论坛中的共同建议对我没有帮助,我认为仍有一些人在努力解决这个问题。

我试图联系作者但到目前为止没有得到答案。 该软件在GPL-3.0下运行,因此我查看了源代码。

GitHub上的项目: https://github.com/xboxdrv/xboxdrv

我确定了崩溃的位置(src / usb_controller.cpp,第277行及以下)。这是下面代码中的最后一个else部分。从 log_error开始(“USB读取失败:

    void
USBController::on_read_data(libusb_transfer* transfer)
{
  assert(transfer);

  if (transfer->status == LIBUSB_TRANSFER_COMPLETED)
  {
    // process data
    XboxGenericMsg msg;
    if (parse(transfer->buffer, transfer->actual_length, &msg))
    {
      submit_msg(msg);
    }

    int ret;
    ret = libusb_submit_transfer(transfer);
    if (ret != LIBUSB_SUCCESS) // could also check for LIBUSB_ERROR_NO_DEVICE
    {
      log_error("failed to resubmit USB transfer: " << usb_strerror(ret));
      m_transfers.erase(transfer);
      libusb_free_transfer(transfer);
      send_disconnect();
    }
  }
  else if (transfer->status == LIBUSB_TRANSFER_CANCELLED)
  {
    m_transfers.erase(transfer);
    libusb_free_transfer(transfer);
  }
  else if (transfer->status == LIBUSB_TRANSFER_NO_DEVICE)
  {
    m_transfers.erase(transfer);
    libusb_free_transfer(transfer);
    send_disconnect();
  }
  else
  {
    log_error("USB read failure: " << transfer->length << ": " << usb_transfer_strerror(transfer->status));
    m_transfers.erase(transfer);
    libusb_free_transfer(transfer);
  }
}

我的C ++知识很糟糕,我还没有使用过libusb。你能否提出一个建议,我可以为我解决这个问题。

问题是,一旦出现上述错误,xboxdrv就会停止,它将不再处理来自XBOX 360无线控制器的输入。

它应该只是忽略那个错误的包并等待一个新包。但只是不要停止工作。

谢谢

0 个答案:

没有答案