【问题标题】:Libusb issue on Rasperry piRaspberry pi 上的 libusb 问题
【发布时间】:2017-10-28 23:59:52
【问题描述】:

我正在编写一个应用程序来通过 libusb 与磁条阅读器进行通信。在 ubuntu 14.04 中它可以完美运行,但是在 pi rasperry 中,当我执行相同的代码时,它会显示这个错误:

libusb: 错误 [reap_for_handle] 收割失败错误 -1 errno=14 libusb: 错误 [handle_events] 后端句柄事件失败,错误 -1 libusb:错误 [sync_transfer_wait_for_completion] libusb_handle_events 失败:LIBUSB_ERROR_IO,正在取消传输并重试,

当他尝试使用函数读取通过端口的内容时会发生这种情况:

u_char * answer ={'\0'};
u_char epAdress;
epAdress=0x81;
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0);

【问题讨论】:

    标签: c libusb magnetic-cards


    【解决方案1】:

    端点0x81是一个IN端点(即设备到主机),因为方向位(最高有效位)为1,这意味着您正在将数据从设备移动到answer

    问题在于u_char * answer = {'\0'} 执行标量初始化,并且等价于uchar * answer = '\0',实际上等价于uchar * answer = 0

    显然,写入内存位置0 将无效。我很惊讶它在 Ubuntu 上工作,也许编译器设法优化了那个写。你应该写的是u_char answer[] = {'\0'},它将执行数组初始化。那么当你将answer 传递给libusb_bulk_transfer 时,数组类型会衰减为指向数组开头的指针类型。

    【讨论】:

      【解决方案2】:

      已经解决了这个问题是从默认存储库安装的 libusb 版本的一个错误。我所做的是下载它的最新版本并将其编译到 rasperry 中,这一切都很完美。

      这里是 [http://www.linuxfromscratch.org/blfs/view/cvs/general/libusb.html]

      【讨论】:

        猜你喜欢
        • 2018-01-08
        • 2012-09-14
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 2023-01-03
        相关资源
        最近更新 更多