有关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 Knowledgebase和D2XX Programmer's Guide中都已阅读。
答案 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。知道已写入多少字节很有用,以便下次调用该函数时,您确切知道要在缓冲区中设置传输指针的位置。