libusb_submit_transfer提交成功后没有触发回调函数

mfqdgy 2015-04-07 05:44:07
大家好,libusb-1.0.18,主函数里重要函数部分:
。。。。。。
ctl_buf = (unsigned char*) malloc(LIBUSB_CONTROL_SETUP_SIZE );
if (!ctl_buf){
printf("Control buffer Malloc ERR\n");
return -ENOMEM;
}

libusb_fill_control_setup(ctl_buf, LIBUSB_RECIPIENT_DEVICE | LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_DESCRIPTOR,
(1 << 8) | 0, 0, 0);

main_transfer = libusb_alloc_transfer(0);
if (!main_transfer) {
printf("main transfer is NULL\n");
return -ENOMEM;
}

libusb_fill_control_transfer(main_transfer, handle, ctl_buf, callback_fn, NULL, 0);
main_transfer->flags = LIBUSB_TRANSFER_SHORT_NOT_OK | LIBUSB_TRANSFER_FREE_BUFFER | LIBUSB_TRANSFER_FREE_TRANSFER;
printf("Control_Proc submit transfer\n");
ret = libusb_submit_transfer(main_transfer);
printf("Control_Proc submit transfer OVER! return %d length %d actual len %d status %d\n", ret, main_transfer->length, main_transfer->actual_length, main_transfer->status);
。。。。。。
回调函数:
static void callback_fn(struct libusb_transfer *transfer)
{
if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
printf("callback transfer not completed!\n");
return ;
}

printf("callback status=%d length=%d actual_length=%d\n", transfer->status,
transfer->length, transfer->actual_length);
}

问题: libusb_submit_transfer虽返回0,但并没有触发回调函数,不知道为什么?望大侠指点!
...全文
3859 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37776124 2018-06-26
  • 打赏
  • 举报
回复 1
需要再起个线程,在新线程里循环调用libusb_handle_events或libusb_handle_events_timeout
bwlrktjv44240 2017-10-24
  • 打赏
  • 举报
回复
我遇到了同样的问题 设备可以正常打开,并且ep也检测出来了 然后用了libusb_bulk_transfer去读写usb,然后没反应……
sky79 2017-05-29
  • 打赏
  • 举报
回复
同问,我的是libusb_interrupt_transfer 不能下发数据到设备
jane_ybf 2017-05-04
  • 打赏
  • 举报
回复
请问这个问题你解决了吗?我也碰到了同样的情况
mfqdgy 2015-05-28
  • 打赏
  • 举报
回复
没人回答。。。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧