c ++ libusb:如何将数据发送到设备?

时间:2017-03-20 17:59:59

标签: c++ qt c++11 libusb libusb-1.0

美好的一天 我正在为" MGX模拟信号发生器N5181B"进行接口编程。用libusb。
对于一个启动我必须初始化设备,所以下一步是发送数据。例如,我想改变发电机中显示的频率 我的代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <libusb.h>


using namespace std;
int main(int argc, char *argv[]) {

    if (libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG) != 1){
        cout<<"This platform hasn't support for hotplug callback notification"<<endl;
        return 0;
    }

    libusb_device_handle* dev_handle;
    libusb_device* dev;
    libusb_context* ctx = NULL;
    int r;

    r = libusb_init(&ctx);
    if (r < 0) {
        cout<<"Init error "<<r<<endl;
    }
    libusb_set_debug(ctx, 3);

    dev_handle = libusb_open_device_with_vid_pid(ctx, 1266, 45940);
    unsigned char data[15] = {':', 'F', 'R', 'E', 'Q', ' ', '5', '0', '0', '0', '0', ' ', 'K', 'H', 'Z'};
    int actual_length;
    r = libusb_bulk_transfer(dev_handle, LIBUSB_ENDPOINT_IN, data, sizeof(data), &actual_length, 0);

    libusb_exit(ctx);

    return 0;
}

编译这个让我跟随:
libusb:错误[submit_bulk_transfer]提交失败错误-1 errno = 2

请问,我做错了什么? 请注意。

2 个答案:

答案 0 :(得分:0)

如果要在当前设备上进行批量传输,请使用libusb_detach_kernel_driver和libusb_claim_interface。在事务release_inerface和关闭设备之后

答案 1 :(得分:0)

您忘记将设备端点置于批量传输中 它会是这样的:

libusb_bulk_transfer(dev_handle, (0x81 | LIBUSB_ENDPOINT_IN), response, 24, &actual, 0);

注意:0x81是我设备的端点