libusb_control_transfer () никогда не возвращается - PullRequest
0 голосов
/ 01 февраля 2019

Я общаюсь с Cypress FX3 kit устройством.

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

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 (я сделал отпечаток, чтобы проверить, что он действительно был там).

1 Ответ

0 голосов
/ 01 февраля 2019

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

Я дал ему правильный дескриптор и теперь работает.

...