//
// issue write
//
if (!WriteFile(COMDEV(COMInfo), lpBuf, dwToWrite, &dwWritten, &osWrite)) {
if (GetLastError() == ERROR_IO_PENDING) {
//
// write is delayed
//
dwRes = WaitForMultipleObjects(2, hArray, FALSE, WRITE_CHECK_TIMEOUT);
switch(dwRes)
{
case WAIT_OBJECT_0:
SetLastError(ERROR_SUCCESS);
if (!GetOverlappedResult(COMDEV(COMInfo), &osWrite, &dwWritten, FALSE)) {
if (GetLastError() == ERROR_OPERATION_ABORTED)
printf_log("Write aborted\r\n");
else
printf_log("GetOverlappedResult(in Writer)\n");
//ShowLastError("Write:GetOverlappedResult");
CheckComStat(TRUE);
}
if (dwWritten != dwToWrite) {
if (GetLastError() == ERROR_SUCCESS)
printf_log("Write timed out. (overlapped)\r\n");
else
printf_log("Error writing data to port (overlapped)\n");
}
break;
//
// thread exit event set
//
case WAIT_OBJECT_0 + 1:
break;
//
// wait timed out
//
case WAIT_TIMEOUT:
printf_log("Wait Timeout in WriterGeneric.\r\n");
break;
case WAIT_FAILED:
default: printf_log("WaitForMultipleObjects (WriterGeneric)\n");
break;
}
}
else
//
// writefile failed, but it isn't delayed
//
printf_log("WriteFile (in Writer)\n");
}
else {
//
// writefile returned immediately
//
if (dwWritten != dwToWrite)
printf_log("Write timed out. (immediate)\r\n");
}