FTDI。需要了解有关FT_Write()函数的更多详细信息

时间:2018-11-07 20:48:42

标签: c windows send ftdi

有关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 KnowledgebaseD2XX Programmer's Guide中都已阅读。

2 个答案:

答案 0 :(得分:2)

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

另请参阅Example 3, FT2232C Test Application(文件t_titan.cpp,函数DoRxTest,第289行)

答案 1 :(得分:1)

dwBytesToWrite是一个双字,即32位。相当大量的字节要写入。我的猜测是,即使写入的字节数小于要写入的字节数,该函数也可以返回FT_OK。知道已写入多少字节很有用,以便下次调用该函数时,您确切知道要在缓冲区中设置传输指针的位置。