FTDI. Нужно знать больше деталей о функции FT_Write () - PullRequest
0 голосов
/ 07 ноября 2018

Вопрос о функции FT_Write().

FT_STATUS FT_Write (FT_HANDLE ftHandle, LPVOID lpBuffer, DWORD dwBytesToWrite, LPDWORD lpdwBytesWritten)

Интересно, о lpdwBytesWritten.

Когда он когда-нибудь вернется *lpdwBytesWritten < dwBytesToWrite? В таком случае FT_Write вернет значение, отличное от FT_OK?

А сколько данных я могу отправить за один звонок на FT_Write? Какой лимит имеет параметр dwBytesToWrite?

Я не смог найти ответы на эти вопросы. Прочитайте в Базе знаний FTDI , а также в Руководстве по программированию D2XX .

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

FT_Write возвращает статус, отличный от FT_OK при «критических» ошибках.

Эта функция (а также FT_Read) может вернуть FT_OK и ввести *lpdwBytesWritten любое число от 0 (время ожидания) до dwBytesToWrite (передача завершена).

Промежуточные значения означают, что не все данные, переданные еще, но процесс передачи может быть продолжен.

Контур передачи может выглядеть следующим образом:

BYTE *buf = pointer_to_data;
DWORD len = length_of_data;

FT_STATUS status;
DWORD written;

for (;;) {
    status = FT_Write(handle, buf, len, &written);
    if (status != FT_OK)
        return status;
    if (written == 0)
        return -1;   // or FT_OTHER_ERROR if no special timeout handling required
    if (written == len)
        return FT_OK;
    len -= written;
    buf += written;
}

См. Также Пример 3, тестовое приложение FT2232C (файл t_titan.cpp, функция DoRxTest в строке 289)

0 голосов
/ 08 ноября 2018

dwBytesToWrite - это двойное слово, то есть 32 бита. Довольно большое количество байтов для записи. Я предполагаю, что функция может возвращать FT_OK, даже если количество записанных байтов <количество байтов для записи. Полезно знать, сколько байтов было записано, чтобы при следующем вызове функции вы точно знали, где установить указатель передачи в буфере. </p>

...