pilotgao 2024-12-07 17:13 采纳率: 0%
浏览 51
已结题

有没有办法利用libusb读取usb设备数据

付费求解答
有方案的朋友可以私l我
大疆遥控器连接电脑后,在设备管理中有一个libusb设备。

img


是否可以确定如果我们动了遥控器摇杆后,是否能从这个入口 读取到操控数据呢?

如果有数据,谁可以读取到这些数据并正常输出吗?
ai请不要回复。

  • 写回答

37条回答 默认 最新

  • 阿里嘎多学长 2024-12-07 17:16
    关注
    获得0.15元问题酬金

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    回答

    Libusb 是一个跨平台的USB库,可以用来读取USB设备的数据。为了读取大疆遥控器的数据,你需要首先导入libusb,然后使用libusb_scan_device函数来扫描USB设备,找到需要读取的设备。然后使用libusb_open_device和libusb_claim_interface函数来打开和 claim 设备的接口。

    在打开设备后的工作你可以使用libusb_control_msg和libusb_bulk_transfer来 send 数据和 read 数据。通过这些函数,你可以与遥控器进行通信,read 到遥控器的数据。

    下面是一个简单的示例代码,用于读取遥控制器的数据:

    #include <libusb.h>
    #include <stdio.h>
    
    int main() {
        // 扫描USB设备
        libusb_context *ctx = libusb_init(NULL);
        libusb_device **devs;
        libusb_get_device_list(ctx, &devs);
    
        // 找到需要读取的设备
        for (int i = 0; i < libusb_get_num_devices(ctx); i++) {
            libusb_device *dev = devs[i];
            if (dev->idVendor == 0x3C6 && dev->idProduct == 0x1035) {
                // 打开设备
                libusb_device_handle *handle = libusb_open_device_with_vid_pid(ctx, 0x3C6, 0x1035);
                if (handle == NULL) {
                    printf("无法打开设备\n");
                    return -1;
                }
    
                // claim 设备
                int ret = libusb_claim_interface(handle, 0);
                if (ret < 0) {
                    printf("claim 接口失败\n");
                    return -1;
                }
    
                // 读取数据
                uint8_t data[64];
                int num_bytes = libusb_bulk_transfer(handle, LIBUSB_ENDPOINT_IN | 0x01, data, 64, 1000);
                if (num_bytes > 0) {
                    printf("读取到的数据:%s\n", (char*)&data);
                } else {
                    printf("读取数据失败\n");
                }
    
                // 释放设备
                libusb_release_interface(handle, 0);
                libusb_close(handle);
                break;
            }
        }
    
        libusb_free_device_list(devs, 1);
        libusb_exit(ctx);
        return 0;
    }
    

    这个示例代码扫描USB设备,找到需要读取的设备,并打开 claim 设备后读取数据。请注意,这只是一个简单的示例代码,实际情况中可能需要更多的工作来实现读取数据。

    重要注意

    这个示例代码是使用libusb的USB设备和数据读取,这需要在大疆遥控器设备中找到对应的接口和数据结构,然后使用libusb的函数来实现读取数据。

    提示

    如果你想要更充分地了解libusb的使用,可以查看libusb的官方文档和stackoverflow上的相关问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 赞助了问题酬金15元 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据