qq_29720391 2024-04-25 11:14 采纳率: 50%
浏览 45
已结题

libusb-win32使用问题

调用libusb-win32(1.2.7.0版本)库接口时,使用其测试程序中进行连接winusb设备;
设备管理器中能识别到设备的存在和硬件ID;
但发现usb_find_busses返回1,但usb_find_devices返回0,识别不到设备;
请问这是什么情况,想用这个库封装一下做无驱动的开发,难道还需要其他处理吗?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-25 11:14
    关注

    引自免费微信小程序:皆我百晓生

    在处理libusb-win32的问题时,首先需要确认几个关键点:

    1. 设备是否正确连接到电脑。
    2. 设备是否被操作系统正确识别。
    3. libusb-win32的安装和配置是否正确。

    对于你遇到的情况,usb_find_busses()返回1表示成功找到了USB总线,而usb_find_devices()返回0表示没有找到任何设备。这可能是因为设备尚未被libusb初始化或者有一些配置问题。

    为了进一步诊断问题,可以尝试以下几个步骤:

    步骤1:检查设备连接

    确保设备已经正确连接到计算机,并且在设备管理器中可以看到该设备。

    步骤2:查看驱动状态

    确保设备的驱动程序已正确安装并且运行正常。如果没有合适的驱动,设备可能不会被libusb识别。

    步骤3:调试libusb

    在你的代码中添加一些日志输出,以便跟踪libusb函数的执行情况。例如,打印错误信息和设备列表,可以帮助确定问题所在。

    #include <stdio.h>
    #include "libusb-1.0\include\libusb.h"
    
    int main(void)
    {
        int r;
        libusb_context *ctx = NULL;
        struct libusb_device **devs;
        ssize_t cnt;
    
        // 初始化libusb上下文
        r = libusb_init(&ctx);
        if (r < 0) {
            fprintf(stderr, "Failed to initialize libusb: %s\n", libusb_error_name(r));
            return -1;
        }
    
        // 找到所有的USB总线
        cnt = usb_find_busses(ctx);
        if (cnt < 0) {
            fprintf(stderr, "Failed to find USB busses: %s\n", libusb_error_name(cnt));
            goto exit;
        }
        printf("Found %zd busses\n", cnt);
    
        // 找到所有设备
        cnt = usb_find_devices(ctx, &devs);
        if (cnt < 0) {
            fprintf(stderr, "Failed to find devices: %s\n", libusb_error_name(cnt));
            goto exit;
        }
        printf("Found %zd devices:\n", cnt);
        for (ssize_t i = 0; i < cnt; ++i) {
            char serial[256];
            libusb_get_string_descriptor_ascii(devs[i], LIBUSB_DT_DEVICE, 0x09, serial, sizeof(serial));
            printf("Device %zd: %s\n", i, serial);
        }
    
    exit:
        // 清理
        for (ssize_t i = 0; i < cnt; ++i) {
            libusb_unref_device(devs[i]);
        }
        free(devs);
        libusb_exit(ctx);
    
        return 0;
    }
    

    步骤4:安装最新版libusb

    尽管你提到的是1.2.7.0版本,但有时更新到最新稳定版本可能会解决兼容性问题。你可以尝试下载最新的libusb-win32版本(当前可能是1.0.24)并重新编译你的应用程序。

    步骤5:检查权限

    确保你的程序有足够的权限访问USB设备。在Windows上,你可能需要以管理员身份运行你的程序。

    如果你仍然遇到问题,建议查阅libusb-win32的官方文档或社区论坛寻求更详细的帮助。同时,提供上述调试信息有助于其他人更好地理解并解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月6日
  • 修改了问题 4月25日
  • 修改了问题 4月25日
  • 创建了问题 4月25日