调用 libusb_bulk_transfer 时如何修复“LIBUSB_ERROR_NOT_FOUND”错误

2023-12-31

我正在创建一个程序,使用 libusb 从 MIDI 控制器读取输入。如何正确调用libusb_bulk_transfer?目前我每次都会收到错误“LIBUSB_ERROR_NOT_FOUND”,并且我收到的数据是“P”。

我已将函数“libusb_bulk_transfer”替换为“libusb_interrupt_transfer”,但仍然收到相同的错误:LIBUSB_ERROR_NOT_FOUND

以下是我目前包含的库

#include <stdlib.h>
#include <stdio.h>
#include <libusb-1.0/libusb.h>

下面是查找所有 USB 设备并调用导致我出现问题的函数的主函数: printDeviceUsbInput(devices[i]);据我所知,主要功能运行良好。我删除了错误检查以使代码更短

int main(int argc, char *argv[])
{
    libusb_device **devices;
    libusb_context *context = NULL;

    size_t list;
    size_t i;
    int returnValue;

    returnValue = libusb_init(&context);

    list = libusb_get_device_list(context, &devices);

    printf("There are %zu devices found \n\n", list);
    for (i = 0; i < list; i++)
    {
        printDeviceUsbInput(devices[i]);
        //printDevices(devices[i]);
    }

    libusb_free_device_list(devices, 1);
    libusb_exit(context);
    return 0;
}

下面是查找 MIDI 键盘设备并尝试打印出 MIDI 输入的函数。又名导致我出现问题的功能。我受到这段代码的启发:http://libusb.sourceforge.net/api-1.0/libusb_io.html http://libusb.sourceforge.net/api-1.0/libusb_io.html

我还删除了错误检查以使函数更短。

void printDeviceUsbInput(libusb_device *device)
{

    struct libusb_device_descriptor deviceDescriptor;

    int returnValue;

    returnValue = libusb_get_device_descriptor(device, &deviceDescriptor);

    if(deviceDescriptor.idProduct == 49)
    {
        printf("Keyboard found\n\n");
        unsigned char data[4];
        int actual_length;
        libusb_device_handle *deviceHandle;
        returnValue = libusb_open(device, &deviceHandle);

        while(1)
        {
            returnValue = libusb_bulk_transfer(deviceHandle, LIBUSB_ENDPOINT_IN,data, sizeof(data), &actual_length, 0);
            printf("Data: %s\n\n", data);
            printf("returnValue: %s\n\n", libusb_error_name(returnValue));
        }
    }
}

我预计对 libusb_bulk_transfer 的调用将返回 0,并且每次我按下 MIDI 键盘上的某个键时,变量 data 的值都会发生变化。


我认为您需要分离任何内核驱动程序,然后声明该接口。

if(libusb_kernel_driver_active(handle, 0) == 1)
{
    printf("\nKernel Driver Active");
    if(libusb_detach_kernel_driver(handle, 0) == 0)
        printf("\nKernel Driver Detached!");
    else
    {
        printf("\nCouldn't detach kernel driver!\n");
        libusb_free_device_list(devs, 1);
        libusb_close(handle);
        return -1;
    }
}

returnValue = libusb_claim_interface(handle, 0);
if(returnValue < 0)
{
    printf("\nCannot Claim Interface");
    libusb_free_device_list(devs, 1);
    libusb_close(handle);
    return -1;
}
else
    printf("\nClaimed Interface\n");

我正在努力解决同样的错误,因此找到了你的问题,但我的问题似乎与无法在 OS-X Mojave 上声明接口有关

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用 libusb_bulk_transfer 时如何修复“LIBUSB_ERROR_NOT_FOUND”错误 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐