大家好,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,但并没有触发回调函数,不知道为什么?望大侠指点!
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,但并没有触发回调函数,不知道为什么?望大侠指点!
解决方案 »
- 我是名linux驱动工程师,交流一下我的经历
- 求教一个问题 关于vm网络设置问题
- msys2中 使用ln -s 显示无法创建符号链接
- redhat7.2网卡不自动激活
- Linux下的dbus-daemon是个什么玩意?
- 这是为什么,为什么mysql.sock 没有安上
- windows宿主机无法ping通docker启动的容器,请大佬指教一下
- 在cshell环境下如何设置别名
- postfix发邮件的时候无法通过25端口访问外网
- 肿么在linux上git clone windows上的版本库
- framebuffer如何显示argb?
- 关于gdb “Unable to find libthread_db matching inferior's thread library”的解决办法
设备可以正常打开,并且ep也检测出来了
然后用了libusb_bulk_transfer去读写usb,然后没反应……