libusb_control_transfer() никогда не возвращается

Я общаюсь с комплектом Cypress FX3 устройство.

Я отправляю информацию, используя:

unsigned int file_size;
unsigned short wLength = 16;
unsigned int timeout = 1000;
unsigned short wValue = 0, wIndex = 1;

/* Here I get my file_size value */
file_size = 4000; // For the sake of the example.

rStatus = libusb_control_transfer(
            device_handle,             /* a handle for the device to communicate with */
            WRITE_REQUEST_TYPE,        /* bmRequestType: the request type field for the setup packet */
            VND_CMD_SLAVESER_CFGLOAD,  /* bRequest: the request field for the setup packet */
            wValue,                    /* wValue: the value field for the setup packet */
            wIndex,                    /* wIndex: the index field for the setup packet */
            (unsigned char *) &file_size,  /* *data: a suitably-sized data buffer */
            wLength,                   /* wLength: the length field for the setup packet. The data buffer should be at least this size. */
            timeout);                  /* timeout (in millseconds) that this function should wait before giving up due to no response being received. For an unlimited timeout, use value 0. */

Теперь моя программа получает правильную информацию. Я отправляю сообщения UART на свой компьютер, и действительно, прошивка FX3 получает то, что ей нужно, и получает то, что ей нужно, однако программа cpp никогда не выходит из функции libusb_control_transfer.

Разве тайм-аут не должен помешать этой функции никогда не возвращаться? Или, если это не мешает, потому что он смог отправить данные ... Ожидает ли он подтверждения, которое прошивка FX3 не отправляет? Я понятия не имею, как это отладить.

В некоторых случаях я также получаю Process finished with exit code 139 (interrupted by signal 11: SIGSEGV). внутри libusb_control_transfer (я сделал отпечаток, чтобы проверить, что он действительно был там).


person Agustin Barrachina    schedule 01.02.2019    source источник


Ответы (1)


Я решил проблему. Я давал ему device_handle, который не всегда был одинаковым. В зависимости от его значения он получил ошибку сегментации или никогда не возвращался из функции.

Я дал ему правильную ручку, и теперь он работает.

person Agustin Barrachina    schedule 01.02.2019