type tipo thunderbolt pinout micro c image usb raspberry-pi libusb

tipo - usb type c



¿Por qué estoy recibiendo 0 bytes de datos de la salida usb de la transferencia masiva de libusb? (1)

Pulso una cámara USB con un pulso de 5v y toma una foto. Al pulsar la cámara, se envía una señal USB a un pi de frambuesa. Estoy escribiendo un programa para recolectar las imágenes enviadas por USB. A continuación está mi código para que la función comience a recibir información de la cámara después de que se active.

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

}

Localizo el control de desconexión del dispositivo para ver si el kernel lo está utilizando, y si es así, lo desconecto. Después de desconectarlo reclamo la interfaz y luego espero a que ocurra una transferencia dentro de la transferencia masiva. Sin embargo, nunca recibo datos de la transferencia. Incluso cuando desenchufa la cámara del puerto usb, r devuelve el valor -1 y mi transferencia es de tamaño 0. ¿Alguien puede decirme qué es lo que me falta aquí?

Avíseme si necesita más información.


Su código tiene un desbordamiento de búfer:

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)

Probablemente haya deseado utilizar "datos" como receptor en la llamada libusb_bulk_transfer() , pero en realidad usó usb_data que tiene solo 4 bytes de longitud.