2015-08-27 27 views
3

我用5v脈衝脈衝USB攝像頭拍攝照片。脈衝相機然後發送一個USB信號回到樹莓派。我正在編寫一個程序來收集通過USB發送的圖像。以下是我的代碼,該功能在觸發後從攝像頭開始進行輸入。爲什麼我會從libusb批量傳輸的USB輸出接收0個字節的數據?

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); 

    } 

}

我找到該設備分離檢查,看是否內核使用它那麼如果是我卸下。分離之後,我聲稱界面然後等待批量傳輸內部發生傳輸。但是,我從來沒有收到來自轉移的數據。即使從USB端口拔下攝像頭r返回值-1,我的傳輸尺寸爲0.誰能告訴我我在這裏失蹤了什麼?

如果您需要更多信息,請告知我。

+0

http://stackoverflow.com/help/how-to-ask – Olaf

回答

2

代碼有緩衝區溢出:

 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()呼叫接收緩衝區,但你實際使用usb_data這是隻有4個字節長。

相關問題