c - 为什么我从 libusb 批量传输的 usb 输出中收到 0 字节的数据?

标签 c image usb raspberry-pi libusb

我用 5v 脉冲驱动 USB 相机,它拍了一张照片。脉冲相机然后将 USB 信号发送回树莓派。我正在编写一个程序来收集通过 USB 发送的图像。下面是我的代码,用于在触发相机后开始从相机获取输入的功能。

void opendevice()
{

libusb_device_handle* dev;
struct libusb_device_descriptor* desc;
int r;
int err;
int transfered;

   libusb_init(NULL);
   dev = libusb_open_device_with_vid_pid( NULL, 0x2a0b, 0x00f8);

      if (dev == NULL)
      {
          printf("device not found\n");
      }

      if(libusb_kernel_driver_active(dev, 0) == 1)
      {
           printf("Driver active\n");

       if(libusb_detach_kernel_driver(dev, 0) == 0)
        {

         printf("Kernel Driver Detached\n");
        }
      }

      libusb_set_configuration(dev,1);

     err = libusb_claim_interface(dev, 0);


    if(err != 0)
    {
       printf("cannot claim interface\n");
    }
     unsigned char usb_data[4];
     int size = sizeof(unsigned int) *1280 *960;
     unsigned *data;
     data = (unsigned int *)malloc(size);

    r = libusb_bulk_transfer(dev, LIBUSB_ENDPOINT_IN | 0x83, usb_data, sizeof(data), &transfered, 0); 

 if(r == 0)
  {
       printf("data has been transfered\n");
   } 
   else{ 
    printf("error code %d\n", r);
    printf("bytes transfered %d\n", transfered); 

  }

我找到设备分离检查内核是否正在使用它,如果是,我将它分离。分离它后,我声明接口(interface)然后等待传输在批量传输中发生。但是我从来没有从传输中收到数据。即使从 USB 端口拔下相机 r 返回值 -1 并且我的传输大小为 0。谁能告诉我我在这里缺少什么?

如果您需要更多信息,请告诉我。

最佳答案

您的代码有缓冲区溢出:

     unsigned char usb_data[4]; // <---
     int size = sizeof(unsigned int) *1280 *960;
     unsigned *data;  // <-- not used!
     data = (unsigned int *)malloc(size);

    r = libusb_bulk_transfer(dev, LIBUSB_ENDPOINT_IN | 0x83, usb_data //<
    ,sizeof(data), &transfered, 0)

您可能想在 libusb_bulk_transfer() 调用中使用“data”作为接收缓冲区,但实际上您使用了只有 4 个字节长的 usb_data

关于c - 为什么我从 libusb 批量传输的 usb 输出中收到 0 字节的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254044/

相关文章:

C void函数修改指针数组

c - fatal error : stdio. h:没有那个文件或目录

javascript - 播放按钮动画

javascript - 在 JavaScript 中加载图像

r - 是否可以在 ggplot2 绘图中绘制图像,当您保存为任何非标准纵横比时不会失真?

gousb - 不是 OUT 端点

c - C 字符串的轻量级(准随机)整数指纹

c - 试图在 C 的数独程序中将 for 循环更改为 while 循环

c++ - SwisTrack - USB 摄像头黑色输入

python - 如何使用 python 和 GPIB 接口(interface)访问安捷伦设备(借助 NI GPIB 到 USB 转换器)?